shell學習筆記(一)shell編程介紹

 ================================================================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      查看後臺信息
 
 
特殊字符
 

相關文章
相關標籤/搜索