================================================================node
聲明:linux
這次分享bash shell 學習心得,根據周朝劍老師的shell編程視頻整理成文檔形式與你們分享,周老師教程視頻講得很是棒,支持一下.shell
參考文檔:http://www.cnblogs.com/chengmo/tag/shell/編程
參考書籍:UNIX.shell範例精解(第4版)數組
送給blog友一句話:安全
把大家所學所想嘗試記錄下來和你們分享,作這個事情的時候,人老是很懼怕出錯誤,以爲這樣寫,別人會不會看得懂,別人會不會以爲我寫的很爛等等,就是由於這樣,讓本身主動去查詢更多的資料,理解透徹這方面知識,再整理屬於本身的文檔,分享在blog上,以當着之後備用查詢,在這個過程當中,可能會以爲比較辛苦,但你會無心識讓本身對某些技術有深刻的理解,這是我用來提升學習效率一種方式,不是爲別人,其實都是爲了本身.不信你能夠試試.bash
================================================================數據結構
目錄:socket
Unix與linux shell簡介
Shell腳本使用範圍
權限
硬連接和軟連接的區別
特殊字符編程語言
================================================================
Unix與linux shell簡介
Unix 多用戶 多任務 AT&T Ken Thompson 1969
Unix系統的心臟是內核:一個系統引導時加載的程序,內核用於與硬件設備打交道,調度任務 管理內存和輔存
內核在系統引導時載入內存,管理系統直相當機,它建立和控制進程,管理內存,文件系統和通訊等,內核之外的全部其餘程序(shell)都保存在磁盤上,內核將這些程序加載到內存中運行,並在它們終止後清理系統
Linux Linus Torvalds (李納斯·託沃茲) 1991 企鵝 linux官方吉祥物 Tux
Korn shell ---AT&T UNIX bash shell ---Linux
FSF 自由軟件基金會 1985 GNU(GNU's Not Unix) GPL 通用公共許可證
Linux結合GNU工具誕生徹底自由操做系統 1992
POSIX (protable operating system interface)可移植操做系統接口
Shell是核心程序(kernel)以外的指令解析器,是一個程序,同時是一種命令語言和程序設計語言
/etc/shells 查看系統有幾個shell版本
echo $SHELL 查看系統目前使用shell版本
當用戶登陸系統成功,系統會啓動一個交互式的shell來提示用戶輸入命令
Shell執行:先解析命令行,再處理通配符,重定向,管道和做業控制,而後查找命令,找到後開始執行.
Steven Bourne Bourne shell 1978先後編寫
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 1
UMASK 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的位置來表示
開啓執行權限和特殊權限 則權限表示字符是小寫 假若關閉執行權限 則符合會變成大寫
Chmod
Chmod 755 file
Chmod u+x;g+x file
Chmod a=r file 即全部權限被重置爲新的值
Chmod 777 /tmp
Chmod –R 777 /tmp 將整個tmp目錄與其中的文件和子目錄的權限統稱爲
Chown
Chown root:root file
Chown –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 查看後臺信息
特殊字符