shell命令以及運行原理
Linux嚴格意義上說的是一個操作系統,我們稱之為“核心(kernel)“ ,但我們一般用戶,不能直接使用kernel。而是通過kernel的“外殼”程序,也就是所謂的shell,來與kernel溝通。如何理解?為什么不能直接使用kernel?
從技術角度,Shell的最簡單定義:命令行解釋器(command Interpreter)主要包含:
- 將使用者的命令翻譯給核心(kernel)處理。
- 同時,將核心的處理結果翻譯給使用者。
對比windows GUI,我們操作windows 不是直接操作windows內核,而是通過圖形接口,點擊,從而完成我們的操作(比如進入D盤的操作,我們通常是雙擊D盤盤符.或者運行起來一個應用程序)。
shell 對于Linux,有相同的作用,主要是對我們的指令進行解析,解析指令給Linux內核。反饋結果在通過內核運行出結果,通過shell解析給用戶。
Linux系統下的權限
Linux下有兩種用戶:超級用戶(root)、普通用戶。
- 超級用戶:可以再linux系統下做任何事情,不受限制
- 普通用戶:在linux下做有限的事情。
超級用戶的命令提示符是“#”,普通用戶的命令提示符是“$”。
命令:su [用戶名]
功能:切換用戶。
例如,要從root用戶切換到普通用戶user,則使用 su user。 要從普通用戶user切換到root用戶則使用 su root(root可以省略),此時系統會提示輸入root用戶的口令。
Linux權限管理
文件訪問者的分類
- 文件和文件目錄的所有者:u—User
- 文件和文件目錄的所有者所在的組的用戶:g—Group
- 其它用戶:o—Others
文件類型和訪問權限
第一組:rwx表示文件的擁有者的權限
第二組rwx表示的是文件擁有者同組的用戶的權限
第三組rwx表示的是其他用戶的權限
在Linux其實還有一個特殊用戶,凌駕于權限體系之上root
文件類型
- d:文件夾
- -:普通文件
- l:軟鏈接(類似Windows的快捷方式)
- b:塊設備文件(例如硬盤、光驅等)
- p:管道文件
- c:字符設備文件(例如屏幕等串口設備)
- s:套接口文件
基本權限
- 讀(r/4):Read對文件而言,具有讀取文件內容的權限;對目錄來說,具有瀏覽該目錄信息的權限
- 寫(w/2):Write對文件而言,具有修改文件內容的權限;對目錄來說具有刪除移動目錄內文件的權限
- 執行(x/1):execute對文件而言,具有執行文件的權限;對目錄來說,具有進入目錄的權限
- “—”表示不具有該項權限
文件權限值
- 字符表示
Linux表示 | 說明 |
---|---|
r– | 只讀 |
–x | 僅可執行 |
-wx | 可寫可執行 |
rwx | 可讀可寫可執行 |
-w- | 僅可寫 |
rw- | 可讀可寫 |
r-x | 可讀可寫可執行 |
— | 無權限 |
- 8進制數值表示
權限符號 | 八進制 |
---|---|
r | 4 |
w | 2 |
x | 1 |
rw | 6 |
rx | 5 |
wx | 3 |
rwx | 7 |
— | 0 |
設置和修改權限
chmod
功能:設置文件的訪問權限
格式:chmod [參數] 權限 文件名
常用選項:
R -> 遞歸修改目錄文件的權限
說明:只有文件的擁有者和root才可以改變文件的權限
chmod命令權限值的格式
- 用戶表示符+/-=權限字符
- +:向權限范圍增加權限代號所表示的權限
- -:向權限范圍取消權限代號所表示的權限
- =:向權限范圍賦予權限代號所表示的權限
- 用戶符號:
- u:擁有者
- g:擁有者同組用
- o:其它用戶
- a:所有用戶
chmod a=x /home/abc.txt
- 三位8進制數
chmod[三位八進制數字數字]修改權限
所謂的執行條件,但是不是充要條件
必須得文件滿足系統可執行得格式要求才是真的能執行,平時敲得得大部分指令,都是可執行程序。
chmod 664 /home/abc.txt
whereis
能夠找到某個指令對應的可執行程序路徑
chown
功能:修改文件的擁有者
格式:chown [參數] 用戶名 文件名
chown -R user1 filegroup1
chgrp
功能:修改文件或目錄的所屬組
格式:chgrp [參數] 用戶組名 文件名
常用選項:-R 遞歸修改文件或目錄的所屬組
chgrp users /abc/f2
umask
功能:
- 查看或修改文件掩碼
- 新建文件夾默認權限=0666
- 新建目錄默認權限=0777
- 但實際上你所創建的文件和目錄,看到的權限往往不是上面這個值。原因就是創建文件或目錄的時候還要受到umask的影響。假設默認權限是mask,則實際創建的出來的文件權限是: mask & ~umask
格式:umask 權限值
說明:將現有的存取權限減去權限掩碼后,即可產生建立文件時預設權限。超級用戶默認掩碼值為0022,普通用戶默認為0002。
umask 755
file指令:
功能說明:辨識文件類型。
語法:file [選項] 文件或目錄…
常用選項:
- -c 詳細顯示指令執行過程,便于排錯或分析程序執行的情形。
- -z 嘗試去解讀壓縮文件的內容。
目錄的權限
- 可執行權限: 如果目錄沒有可執行權限, 則無法cd到目錄中.
- 可讀權限: 如果目錄沒有可讀權限, 則無法用ls等命令查看目錄中的文件內容.
- 可寫權限: 如果目錄沒有可寫權限, 則無法在目錄中創建文件, 也無法在目錄中刪除文件
問題
只要用戶具有目錄的寫權限, 用戶就可以刪除目錄中的文件, 而不論這個用戶是否有這個文件的寫權限.
這是不科學的,比如A和B都在一個目錄下寫文件,A寫的文件B每權限訪問,但是B擁有整個目錄的寫權限,那么B就可以改A的文件,這是不合理的
解決方法:粘滯位
粘滯位
當一個目錄被設置為"粘滯位"(用chmod +t),則該目錄下的文件只能由
- 超級管理員刪除
- 該目錄的所有者刪除
- 該文件的所有者刪除
總結
- 目錄的可執行權限是表示你可否在目錄下執行命令。
- 如果目錄沒有-x權限,則無法對目錄執行任何命令,甚至無法cd 進入目, 即使目錄仍然有-r 讀權限
- 而如果目錄具有-x權限,但沒有-r權限,則用戶可以執行命令,可以cd進入目錄。但由于沒有目錄的讀權限,所以在目錄下,即使可以執行ls命令,但仍然沒有權限讀出目錄下的文檔。
對于普通文件來說
- 讀意味著能夠查看到文件內容
- 寫意味著能夠修改文件內容
- 執行意味著能夠運行程序
對于目錄文件
- 讀意味著能夠修改目錄中包含哪些文件和目錄
- 寫意味著能夠修改目錄中包含的內容(新增文件/刪除文件)
- 執行意味著能夠進入到目錄中(cd)