linux編程入門
A. linux快速入門第八章:Shell基礎
我們平時所說的 Shell 可以理解為 Linux 系統提供給用戶的使用界面。Shell 為用戶提供了輸入命令和參數並可得到命令執行結果的環境。當一個用戶登錄 Linux 之後,系統初始化程序 init 就根據 /etc/passwd 文件中的設定,為每個用戶運行一個被稱為 Shell(外殼)的程序。
確切地說,Shell 是一個命令行解釋器,它為用戶提供了一個向 Linux 內核發送請求以便運行程序的界面系統級程序,用戶可以用 Shell 來啟動、掛起、停止甚至編寫一些程序。
Shell 處在內核與外層應用程序之間,起著協調用戶與系統的一致性、在用戶與系統之間進行交互的作用。圖 1 是 Linux 系統層次結構圖,Shell 接收用戶輸入的命令,並把用戶的命令從類似 abed 的 ASCII 碼解釋為類似 0101 的機器語言,然後把命令提交到系統內核處理;當內核處理完畢之後,把處理結果再通過 Shell 返回給用戶。
換句話說:
Shell 是一個用 C 語言編寫的程序,它是用戶使用 Linux 的橋梁。Shell 既是一種命令語言,又是一種程序設計語言。
Shell 是指一種應用程序,這個應用程序提供了一個界面,用戶通過這個界面訪問操作系統內核的服務。
Ken Thompson 的 sh 是第一種 Unix Shell,Windows Explorer 是一個典型的圖形界面 Shell。
Shell 與其他 Linux 命令一樣,都是實用程序,但它們之間還是有區別的。一旦用戶注冊到系統後,Shell 就被系統裝入內存並一直運行到用戶退出系統為止;而一般命令僅當被調用時,才由系統裝入內存執行。
與一般命令相比,Shell 除了是一個命令行解釋器,同時還是一門功能強大的編程語言,易編寫,易調試,靈活性較強。作為一種命令級語言,Shell 是解釋性的,組合功能很強,與操作系統有密切的關系,可以在 Shell 腳本中直接使用系統命令。大多數 Linux 系統的啟動相關文件(一般在 /etc/rc.d 目錄下)都是使用 Shell 腳本編寫的。
同傳統的編程語言一樣,Shell 提供了很多特性,這些特性可以使 Shell 腳本編程更為有用,如數據變數、參數傳遞、判斷、流程式控制制、數據輸入和輸出、子程序及中斷處理等。
說了這么多,其實我們在 Linux 中操作的命令行界面就是 Linux 的 Shell,也就是 Bash,但是我們的圖形界面是 Shell 嗎?其實從廣義講,圖形界面當然也是 Shell,因為它同樣用來接收用戶的操作,並傳遞到內核進行處理。不過,這里的 Shell 主要指的是 Bash。
Shell 腳本
Shell 腳本(shell script),是一種為 shell 編寫的腳本程序。
業界所說的 shell 通常都是指 shell 腳本,但讀者朋友要知道,shell 和 shell script 是兩個不同的概念。
由於習慣的原因,簡潔起見,本文出現的 "shell編程" 都是指 shell 腳本編程,不是指開發 shell 自身。
Shell的分類
目前 Shell 的版本有很多種,如 Bourne Shell、C Shell、Bash、ksh、tcsh 等,它們各有特點,下面簡要介紹一下。
最重要的 Shell 是 Bourne Shell,這個命名是為了紀念此 Shell 的發明者 Steven Bourne。從 1979 年起,UNIX 就開始使用 Boume Shell。Bourne Shell 的主文件名為 sh,開發人員便以 sh 作為 Bourne Shell 的主要識別名稱。
雖然 Linux 與 UNIX 一樣,可以支持多種 Shell,但 Boume Shell 的重要地位至今仍然沒有改變,許多 UNIX 系統中仍然使用 sh 作為重要的管理工具。它的工作從開機到關機,幾乎無所不包。在 Linux 中,用戶 Shell 主要是 Bash,但在啟動腳本、編輯等很多工作中仍然使用 Bourne Shell。
C Shell 是廣為流行的 Shell 變種。C Shell 主要在 BSD 版的 UNIX 系統中使用,發明者是柏克萊大學的 Bill Joy。C Shell 因為其語法和 C 語言類似而得名,這也使得 UNIX 的系統工程師在學習 C Shell 時感到相當方便。
Bourne Shell 和 C Shell 形成了 Shell 的兩大主流派別,後來的變種大都吸取這兩種 Shell 的特點,如 Korn、 tcsh 及 Bash。
Bash Shell 是 GNU 計劃的重要工具之一,也是 GNU 系統中標準的 Shell。Bash 與 sh 兼容,所以許多早期開發出來的 Bourne Shell 程序都可以繼續在 Bash 中運行。現在使用的 Linux 就使用 Bash 作為用戶的基本 Shell。
Bash 於 1988 年發布,並在 1995-1996年推出Bash 2.0。在這之前,廣為使用的版本是1.14,Bash 2.0增加了許多新的功能,以及具備更好的兼容性。表 2 中詳細列出了各版本的具體情況。
注意,Shell 的兩種主要語法類型有 Bourne 和 C,這兩種語法彼此不兼容。Boume 家族主要包括 sh、ksh、Bash、psh、zsh;C 家族主要包括 csh、tcsh(Bash 和 zsh 在不同程序上支持 csh 的語法)。
本章講述的腳本編程就是在 Bash 環境中進行的。不過,在 Linux 中除了可以支持 Bash,還可以支持很多其他的 Shell。我們可以通過 /etc/shells 文件來査詢 Linux 支持的 Shell。命令如下:
在 Linux 中,這些 Shell 是可以任意切換的,命令如下:
用戶信息文件 /etc/passwd 的最後一列就是這個用戶的登錄 Shell。命令如下:
大家可以看到,root 用戶和其他可以登錄系統的普通用戶的登錄 Shell 都是 /bin/bash,也就是 Linux 的標准 Shell,所以這些用戶登錄之後可以執行許可權允許范圍內的所有命令。不過,所有的系統用戶(偽用戶)因為登錄 Shell 是 /sbin/ndogin,所以不能登錄系統。
筆記:
sh/bash/csh/Tcsh/ksh/pdksh等shell的區別
B. linux軟體開發如何入門
1、首先應該熟悉計算機概論與硬體相關知識,提高自己的電腦操作水平;2、掌握linux系統安裝,掌握linux系統安裝可以更好地了解命令、硬體和軟體設備、操作系統、進程等對於操作系統作用凳兆;3、熟記linux常用命令,linux命令是編寫編程的基礎,熟記linux常用命令可為以耐粗滲後linux學習的進一昌脊步深入打下基礎。KaoJiaZhao.Com
C. 新手入門Linux的步驟
很多Linux初學者不知從何處開始學起,怎麼學,感覺很茫然。Linux菜鳥要成為Linux高手,要有一個好的學習計劃和規劃,參加正規培訓班,要不然時間花了很多,卻沒有效果。這里介紹學習Linux的步驟和建議,也可以咨詢老男孩教育,希望對初學者有幫助。
准備階段:(1)了解Linux是什麼,有什麼優缺點,發展歷史和現狀,應用領域;(2)趕快找一部計算機,趕快安裝一個 Linux 發行版本,要自己親手安裝一遍Linux操作系統(包括虛擬機的Linux環境和完整真實的Linux環境);(3)熟悉Linux環境和Linux基本操作
菜鳥階段之選教程:選擇一本好的工具書工具書對於學習者而言是相當重要的。如:跟老男孩學Linux運維,linux就該這樣學等。
菜鳥階段之系統命令:Linux命令是必須好好學習和經常使用,而不要經常去使用菜單操作。一定要養成在命令行下工作的習慣
中級階段之命令行習慣:養成在命令行下工作:一定要養成在命令行下工作的習慣,要不然沒法成為高手
中級階段之Linux系統結構理解、語言編程與英語:C語言、C++,QT,shell,makefile,java,vi編輯器使用。這些至少要精通一兩門編程語言吧
高級階段之網路編程:Linux是網路的代名詞,Linux網路服務功能非常強大,不論是郵件伺服器、Web伺服器、DNS伺服器等都非常完善。要增加自己Linux 的技能,只有通過實踐來實現了。所以學習Linux也一樣,如果你無法經常學習的話,學了後面的,前面的忘了。你對Linux命令熟悉後你可以開始搭建一個小的Linux網路,這是最好的實踐方法。 當然你不需搭建所有服務,可以慢慢來。需要說明的是這個Linux網路對於初學者有兩三台計算機即可。學好了學好學精了Linux的網路編程,可以肯定的告訴你,你已經是一個非常優秀的Linux人才或者「Linux高手」了
高級階段之嵌入式編程、底層驅動編程與內核源碼:成為Linux高手的重要的方向
D. 如果想學Linux,應該怎麼學
學嵌入式Linux要先學以下幾點:
1.C語言。要有C語言的基礎,當然越熟練越好,不熟也沒關系,具備基本技能就可以:比如寫一個數組排序、輸入數字求和什麼的。C語言的學習就是多些多練。
2.Linux基礎
Linux操作系統的概念、安裝方法,詳細了解Linux下的目錄結構、基本命令、編輯器VI ,編譯器GCC,調試器GDB和 Make 項目管理工具, Shell、 Makefile腳本編寫等知識,嵌入式開發環境的搭建。
3.Linux系統編程
重點學習標准I/O庫,Linux多任務編程中的多進程和多線程,以及進程間通信(pipe、FIFO、消息隊列、共享內存、signal、信號量等),同步與互斥對共享資源訪問控制等重要知識,主要提升對Linux應用開發的理解和代碼調試的能力。
4.Linux網路編程
計算機網路在嵌入式Linux系統應用開發過程中使用非常廣泛,通過Linux網路發展、TCP/IP協議、socket編程、TCP網路編程、UDP網路編程、Web編程開發等方面入手,全面了解Linux網路應用程序開發。重點學習網路編程相關API,熟練掌握TCP協議伺服器的編程方法和並發伺服器的實現,了解HTTP協議及其實現方法,熟悉UDP廣播、多播的原理及編程方法,掌握混合C/S架構網路通信系統的設計,熟悉HTML,Javascript等Web編程技術及實現方法。
5.數據結構與演算法
數據結構及演算法在嵌入式底層驅動、通信協議、及各種引擎開發中會得到大量應用,對其掌握的好壞直接影響程序的效率、簡潔及健壯性。此階段的學習要重點理解數據結構與演算法的基礎內容,包括順序表、鏈表、隊列、棧、樹、圖、哈希表、各種查找排序演算法等應用及其C語言實現過程。
6.Cortex A8 、Linux 平台開發
通過基於ARM Cortex-A8處理s5pv210了解晶元手冊的基本閱讀技巧,掌握s5pv210系統資源、時鍾控制器、電源管理、異常中斷控制器、nand flash控制器等模塊,為底層平台搭建做好准備。Linux平台包括內核裁減、內核移植、交叉編譯、GNU工具使用、內核調試、Bootloader介紹、製作與原理分析、根文件系統製作以及向內核中添加自己的模塊,並在s5pv210實驗平台上運行自己製作的Linux系統,集成部署Linux系統整個流程。同時了解Android操作系統開發流程。Android系統是基於Linux平台的開源操作系統,該平台由操作系統、中間件、用戶界面和應用軟體組成,是首個為移動終端打造的真正開放和完整的移動軟體,目前它的應用不再局限於移動終端,還包括數據電視、機頂盒、PDA等消費類電子產品。
7.驅動開發
驅動程序設計是嵌入式Linux開發工作中重要的一部分,也是比較困難的一部分。本階段的學習要熟悉Linux的內核機制、驅動程序與用戶級應用程序的介面,掌握系統對設備的並發操作。熟悉所開發硬體的工作原理,具備ARM硬體介面的基礎知識,熟悉ARM Cortex-A8處理器s5pv210各資源、掌握Linux設備驅動原理框架,熟悉工程中常見Linux高級字元設備、塊設備、網路設備、USB設備等驅動開發,在工作中能獨立勝任底層驅動開發。
E. Linux 該怎麼入門呢
入門的話找本不用太厚,你能看懂的書來學習,再厚你看不懂,掌握不了方法也是白搭。
我看過同事以前培訓教材,某某青鳥的linux書,裡面是關於Centos6系統的一些介紹,
基本上都是簡單易學,學習一些方法還是可以的。
但是要注意Centos7以後的命令語法,有部分改變了不少,甚至完全不太一樣,
建議從7開始學吧。
另外就是對著書不停地練習,不管是學習使用命令,還是修改配置文檔,過程中會遇到各種各樣的問題,
遇到問題解決問題,不管是翻書還是網上網路,直到把問題解決了,掌握的知識點要做好筆記,不斷
地積累,學習一段時間,你就會感覺即使用遇到新問題都有辦法解決。
linux種類有不少,Centos是跟redhand有點類似的,其它的還有ubuntu,debian,
國產的還有UOS,deepin等等,基本命令都差不多,也有些是自身系統特定的格式,
不過都差不多。看你只是學習,還是以後工作也要使用的,找一個適合自己的來入門。
F. 零基礎該如何入門學習Linux
零基礎學習Linux有兩種方式,一種是自學,另一種是系統學習。無論哪種方式學會掌握Linux知識都不是一件容易的事,以下是老師對入門Linux同學的幾點建議:
1、想要學習好Linux就要將它當成興趣,興趣才是最好的老師。良好的興趣才是學習成功好的開始,想要學習好首先就要足夠喜歡它。我們要了解市場上Linux的發展勢頭,了解Linux的相關情況,相信學習好Linux一定要是非常不錯的選擇。
2、學習合適的Linux發行版本,在開始學習Linux之前,首先就是選擇一個適合自己的版本,Linux旗下發行版本有伺服器版本以及桌面版本,而且桌面版本也可以做服務的,為了以後找工作需要的。常見的Linux發行版本有centos redhat ubuntu等。
3、選擇好Linux學習版本之後,還需要合適的學習資料以及內容,可以尋求專業人員的學習機器以及學習手冊,了解真正相關的知識。
4、學習Linux架構以及命令,linux下都是通過命令來執行的,要學會用man和命令幫助,熟悉各種常見命令的操作。
5、學習shell腳本,對於專業的Linux人員來說,shell腳本是必須要掌握的。shell腳本是linux下強大的工具,可以通過各種命令組合完成自己的工作,提升自己的工作效率。
G. linux入門先學什麼
隨著網站承載量需求越來越大,很多都將空間搬入了雲空間。從而讓雲計算工程師的受熱程度呈直線上升,IT從事者或者學生都想進行學習linux雲計算,不過很多人還是對於雲計算學習屬於摸黑境界。今天給大家科普下:如何入門學習linux雲計算?
Linux操作系統相比於十年前的普及程度已經有了大大提高,但是由於其桌面操作系統上的可視化窗口操作模式並不像Windows操作系統那樣直觀、完美,對於一些剛接觸Linux的人或者初學者來說入手還是有一定的難度,所以其發展並不是那麼迅速。
但是近年來Linux已經越來越受到重用,它不再僅僅是一些開源發燒友們之間炫耀資本,而且已經在多方面價值得到了體現,尤其在伺服器操作系統方面,已經成為資深運維工程師的首選的操作工具。
隨著計算機行業的迅速發展,相信Linux操作系統將不僅僅只停留在平台應用上,他將會在更廣的空間展現他那獨有的優勢與魅力。
現在對於大多數中國的電腦用戶,很少有人自己用Linux操作系統的,而且還有相當一部分人甚至是第一次聽說Linux。但這並不奇怪,即使在很多大學生眼裡也大都如此。在你們眼裡只有Windows,只有微軟,比爾蓋茨是你們大多數人的偶像。那是微軟先入為主的觀念造成的,就如我們學習英語一樣,如過我們生下來就用英語講話,周圍的人說的也都是英語,那麼英語也就自然而然的學會了。而且像漢語一樣受我們喜歡。下面尚觀教育小編給同學們好好聊一聊。
1.忘掉Windows的思維方式
我也看過很多有關學習Linux的方法,第一部分基本都是告訴你怎麼安裝雙系統,怎麼便利學習。我也是如此,在自己台式機上安裝了雙系統,但是學習效果並不明顯,百思不得其解,一次看到破釜沉舟的故事頗有啟發,項羽前鋒軍救巨鹿,初戰少利,項羽便率大軍渡過漳河,破釜沉舟以激厲士氣。終於殺蘇角,虜王離,大敗秦軍於巨鹿之野。 楚霸王當初能夠戰勝並不是說他佔了多麼有利的優勢,而是他那一往無前,義無反顧的決心。
當裝了雙系統以後,只要遇到一些問題,就會快速切換到Windows操作系統來查資料,這樣雖然便利了我們學習,但是我們的大腦卻對問題缺少了思考,基本都是去網路知道,問問什麼的查,雖然當時解決問題了,但是過後在回憶當時是怎麼解決問題的,腦海卻是一片空白。我們裝的雙系統給自己帶來便利的同時也給自己找了太多的借口,到頭來卻沒了學習下去的勇氣。
所以後來我把我自己的電腦只安裝了Linux操作系統,做什麼都從上面去做,逼迫自己學安裝瀏覽器,播放器,文檔編輯器,等自己一步步的走過來,才發現,有的時候不是我們沒能力去辦好一件事,而是我們再沒辦事之前就給自己想好了各種退路。徹底忘記Windows思維方式,在一個只有Linux操作系統環境下生活。
如果你想系統的學習Linux,你必需清楚的認識到這一點。如果你真正想系統的學習linux,想用Linux有所作為,那麼請忘記Windows的思維方式,思想性的轉變比暫時性的技術提高更有用, 而思想上的改變往往是受到我們行動所影響的,有不懂的問題就自己思考,查資料, 實在不會再去找別人的電腦去查,這樣就加深了我每次對問題的理解,慢慢感受和習慣Linux的操作方式,總有一天你會真正體驗到他的奧妙所在,從而從自己內心深處喜歡他,使用他,而不是為了趕時髦或向人炫耀而使用他。
2.眼要精、筆要動、手要勤
a.多看一些學習Linux方面的書。要抓住精髓,不要貪多嚼不爛。
b.多做筆記,好記性不如爛筆頭。
c.實踐出真知。很多時候我們都是嘴上功夫,而到了真正自己搭建的時候就會發現自己其實一無所知。
3.要用心學習Linux。
經常看到有人問用什麼版本的Linux好,其實只要你認真學習無論什麼版本都挺好的。要知道,開發Linux發行版的人都是通讀過Linux內核代碼,對Linux原理極其精通的人,而且每一個開發團隊都對他的發行版做過測試後放出的。那些國際知名的大品牌更是如此。
因此,討論什麼版本好並無意義,關鍵是你是不是真心想學。不過,為了避免曲高和寡,最好選用的人多的版本,比如RedHat CentOS等等。學習Linux不是逛自由市場,選定版本就要靜下心來學習。不要今天換版本明天要升級。這樣對你沒有好處。例如有些人號稱用過十幾種甚至幾十種Linux,向人談論起來頭頭是到,好像懂的很多,但是如果你讓他去用Linux搭建一個Web伺服器,他就什麼都不會了。他們把時間都浪費在了版本的轉換上了。
4.不能盲目學習
要熟悉了計算機專業英語,高中畢業的水平就可以輕松的閱讀計算機文檔了。如果你的英語實在太差了,連最簡單的計算機英語文檔都看不懂,那麼在學習Linux的同時,請趕緊學習英語。
如果你想深入學習Linux,看不懂英文文檔實在是太難了。寫的最好的,最全面的文檔都是英語寫的,最先發布的技術信息也都是用英語寫的。即便是非英語國家的人發布技術文檔,也都首先翻譯成英語在國際學術雜志和網路上發表。你去看看各大軟硬體生產商的官方網站,有哪一個不是用英語作為其主站的?長期用Windows的人會很不習慣這一點,裝個軟體還要看半天文檔,因為Windows用起來實在太簡單了。但是如果你想學習Linux就必須學會看各種文檔,而大部分的文檔都是用英語寫的。
現很多人甚至連man文檔都不會看,有什麼命令不會用了就跑到論壇上來問,還裝出一副可憐相,乞討一個命令的用法。有這些時間還不如自己看看man文檔,即使你一個一個單詞的翻譯成中文再自己看都比問別人強,因為別人的回答再怎麼詳盡都比不上man文檔詳盡。安裝一個新的軟體時先看Readme,再看Install然後看FAQ,最後才動手安裝,這樣遇到問題就知道為什麼。否則,說明文檔都不看,結果出了問題再來找答案反而浪費時間! 古人說欲速則不達就是這個道理!
5.多記Linux命令
當你經過一段時間的學習後就應該擴充自己的知識,多學習Linux命令,但是不要在初學階段就系統的學習Linux命令,初學階段只要把上課時候學習過的命令練熟就可以了。
這就好比學英語,什麼語法都不懂,只捧著單詞手冊背單詞是學不會英語的,但是沒有單詞詞彙量英語水平也提不高的。
在Linux中學習命令的最好辦法是學習Shell腳本編程,Shell腳本比起其他語言來學習簡單,但是功能卻十分強大。通過學習Shell編程,能讓你掌握大量的Linux命令。另外,買一本命令參考手冊是必要的,遇到不知道怎麼用的命令可以隨時查詢,這要比查man文檔快。特別適合英語不好,看不懂man文檔的人。
在Linux中,命令可分為系統基本命令和應用程序命令。系統基本命令是所有的Unix類系統都支持的命令,走到哪都不變,只要是Unix類系統上就肯定有。
6.深究Linux系統結構以及Linux系統的管理
等你對Linux有了一定的認識後,知道了/etc下那些配置文件有什麼用,就可以去了解系統結構了。了解系統結構不是要你去看什麼文件夾放什麼內容,而是要學習一些原理性的東西。比如系統是如何引導的,引導後啟動了那些東西。系統中哪些是最基本的庫文件,有什麼用等等。
接下來就可以進一步學習管理系統。比如學習配置各種網路伺服器,用Linux搭建網路,這些都是學習Linux系統管理和網路管理的好方法。 到了這個階段就可以經常上網查查資料,看看論壇精華區文章,論壇可以讓你學到一些小知識,小技巧。
7.多看看關於計算機相關的專業課程
如果你不是計算機專業的,而想把linux學好,就一定要學習專業課程。學習微機原理,操作系統,計算機網路等等專業課程是必需的。為什麼同時開始學習linux,有些人學的非常快,不到半年就成了高手,有些人玩來玩去還玩不出名堂,玩了一兩年還是菜鳥? 因為那些學得快的人有基礎,他們都學過專業課程。同樣一篇文檔,沒有基礎的人可能看了三遍還不明白,基礎扎實的眼睛掃兩下就懂了! 這就是專業和非專業的差別! 因此,要想達到更高的境界就一定要學習基礎的專業課程。
8.保持虛心的學習態度
天外有天,人外有人!保持虛心的學習態度不僅能讓你學到更多知識,而且會讓你受人尊重。
保持這八點,配合馬哥教育梳理linux學習路線進行學習,避免走彎路,從而先人一步進行學習。