shell學習筆記(一)shell編程介紹
================================================================
聲明:
此次分享bash shell 學習心得,根據周朝劍老師的shell編程視頻整理成文檔形式與大家分享,周老師教程視頻講得非常棒,支持一下.
參考文檔:http://www.cnblogs.com/chengmo/tag/shell/
參考書籍:UNIX.shell範例精解(第4版)
送給blog友一句話:
把你們所學所想嘗試記錄下來和大家分享,做這個事情的時候,人總是很害怕出錯誤,覺得這樣寫,別人會不會看得懂,別人會不會覺得我寫的很爛等等,就是因為這樣,讓自己主動去查詢更多的資料,理解透徹這方面知識,再整理屬於自己的文檔,分享在blog上,以當著以後備用查詢,在這個過程中,可能會覺得比較辛苦,但你會無意識讓自己對某些技術有深入的理解,這是我用來提高學習效率一種方式,不是為別人,其實都是為了自己.不信你可以試試.
================================================================
目錄:
Unix與linux shell簡介Shell腳本使用範圍許可權 硬鏈接和軟鏈接的區別特殊字元
================================================================
Unix與linux shell簡介Unix 多用戶 多任務 AT&T Ken Thompson 1969Unix系統的心臟是內核:一個系統引導時載入的程序,內核用於與硬體設備打交道,調度任務 管理內存和輔存內核在系統引導時載入內存,管理系統直至關機,它創建和控制進程,管理內存,文件系統和通信等,內核以外的所有其他程序(shell)都保存在磁碟上,內核將這些程序載入到內存中運行,並在它們終止後清理系統Linux Linus Torvalds (李納斯·托沃茲) 1991 企鵝 linux官方吉祥物 TuxKorn shell ---AT&T UNIX bash shell ---LinuxFSF 自由軟體基金會 1985 GNU(GNU"s Not Unix) GPL 通用公共許可證Linux結合GNU工具誕生完全自由操作系統 1992POSIX (protable operating system interface)可移植操作系統介面Shell是核心程序(kernel)之外的指令解析器,是一個程序,同時是一種命令語言和程序設計語言/etc/shells 查看系統有幾個shell版本echo $SHELL 查看系統目前使用shell版本當用戶登錄系統成功,系統會啟動一個互動式的shell來提示用戶輸入命令Shell執行:先解析命令行,再處理通配符,重定向,管道和作業控制,然後查找命令,找到後開始執行.Steven BourneBourne shell1978前後編寫Bash (Bourne Again shell)增強的Bourne shell[1]作者名叫Steven Bourne,「bourne」與「borne」的發音相近,而born有「出生」和「忍受」的含義。[2]Bourne-Again字面意思代表了它是「Bourne shell」l的一種擴展,而暗示「borne-again」、「born-again」則有「重生」和「再次忍受」的意思。(我想作者應該更喜歡「重生」)[3]它的簡寫「bash」的意思是「重擊」,暗示它的出現是一次強有力的重擊。Shell 順序判定命令類型(1) 別名(2) 關鍵字(3) 函數(4) 內置命令(5) 可執行程序用戶需要在/bin/login驗證下才能登錄到系統Child 子進程parent 父進程Shell腳本使用範圍 資源密集型的任務,尤其在需要考慮效率時(比如,排序,hash等等) 需要處理大任務的數學操作,尤其是浮點運算,精確運算,或者複雜的算術運算(這 種情況一般使用C++或FORTRAN來處理) 有跨平台移植需求(一般使用C或Java) 複雜的應用,在必須使用結構化編程的時候(需要變數的類型檢查,函數原型,等等) 對於影響系統全局性的關鍵任務應用。 對於安全有很高要求的任務,比如你需要一個健壯的系統來防止入侵,破解,惡破 壞等等。 項目由連串的依賴的各個部分組成。 需要大規模的文件操作 需要多維數組的支持 需要數據結構的支持,比如鏈表或數等數據結構 需要產生或操作圖形化界面GUI 需要直接操作系統硬體 需要I/O或socket介面 需要使用庫或者遺留下來的老代碼的介面 私人的,閉源的應用(shell腳本把代碼就放在文本文件中,全世界都能看到)許可權 許可權有10位字元R 4 W 2 X 1UMASK 022默認文件許可權為666-022=644默認目錄許可權為777-022=755
b c 外圍設備S P 數據結構 管道l 符號鏈接文件d 目錄- 普通文件特殊許可權s/S(SUID) 可執行的文件搭配這個許可權,便能得到特權 任意存取該文件的所有者能使用的全部系統資源s/S(GUID) 如果目錄被設置為特殊許可權,則所有被複制到這個目錄下的文件,其所屬的用戶組都會被重設為和這個目錄一樣 除非加上-p(Preserver 保留文件屬性)t/T (Sticky 粘著) 臨時文件/tmp /var/tmp准許其擁有者去刪除 移動 避免不守法的用戶故意騷擾因為特殊許可權佔用x的位置來表示開啟執行許可權和特殊許可權 則許可權表示字元是小寫 倘若關閉執行許可權 則符合會變成大寫ChmodChmod 755 fileChmod u+x;g+x fileChmod a=r file即所有許可權被重置為新的值Chmod 777 /tmpChmod –R 777 /tmp 將整個tmp目錄與其中的文件和子目錄的許可權統稱為ChownChown root:root fileChown –R root file 遞歸Sort 種類硬鏈接和軟鏈接的區別一 鏈接文件 鏈接有兩種方式,軟鏈接和硬鏈接。 1 軟鏈接文件軟鏈接又叫符號鏈接,這個文件包含了另一個文件的路徑名。可以是任意文件或目錄,可以鏈接不同文件系統的文件。 鏈接文件甚至可以鏈接不存在的文件,這就產生一般稱之為"斷鏈"的問題(或曰「現象"),鏈接文件甚至可以循環鏈接自己。類似於編程語言中的遞歸。 用ln -s 命令可以生成一個軟連接,如下: [root@linux236 test]# ln -s source_file softlink_file 在對符號文件進行讀或寫操作的時候,系統會自動把該操作轉換為對源文件的操作,但刪除鏈接文件時,系統僅僅刪除鏈接文件,而不刪除源文件本身。 2 硬鏈接文件 info ln 命令告訴您,硬鏈接是已存在文件的另一個名字(A "hard link" is another name for an existing file),這多少有些令人困惑。硬連接的命令是 ln -d existfile newfile 硬鏈接文件有兩個限制 1)、不允許給目錄創建硬鏈接; 2)、只有在同一文件系統中的文件之間才能創建鏈接。 對硬鏈接文件進行讀寫和刪除操作時候,結果和軟鏈接相同。但如果我們刪除硬鏈接文件的源文件,硬鏈接文件仍然存在,而且保留了願有的內容。 這時,系統就「忘記」了它曾經是硬鏈接文件。而把他當成一個普通文件。二兩者之間的區別 硬連接指通過索引節點來進行的連接。在Linux的文件系統中,保存在磁碟分區中的文件不管是什麼類型都給它分配一個編號,稱為索引節點號(Inode Index)。 在Linux中,多個文件名指向同一索引節點是存在的。一般這種連接就是硬連接。硬連接的作用是允許一個文件擁有多個有效路徑名,這樣用戶就可以建立硬連接到重要 文件,以防止「誤刪」的功能。其原因如上所述,因為對應該目錄的索引節點有一個以上的連接。只刪除一個連接並不影響索引節點本身和其它的連接,只有當最後一個 連接被刪除後,文件的數據塊及目錄的連接才會被釋放。也就是說,文件才會被真正刪除。 軟鏈接文件有點類似於Windows的快捷方式。它實際上是特殊文件的一種。在符號連接中,文件實際上是一個文本文件,其中包含的有另一文件的位置信息。Nuhup command &把命令放在後台運行Jobs –l 查看後台信息特殊字元
推薦閱讀:
※淺談如何強化理論學習
※史上最全機器學習辭彙寶典 看看你知道多少個呢?
※關於學習方法的名言警句
※家有孩子,教會他這項能力,比學習成績更重要!
※70天堅持萌姐60秒+刻意練習+安之若素