一、Shell命令運行原理
1.Shell
Linux作為一個操作系統,稱為"kernel",一般用戶不能直接使用kernel,而通過"kernel"的外殼程序"Shell"和kernel進行溝通。
所以廣義上Linux發行版=Linux內核+外殼程序,狹義上Linux發行版=Linux內核。
Shell作為外殼程序,包裹在Linux內核外層,是一個應用程序,通過一系列的Linux命令對操作系統 發出相關治療提供人際界面。它連接了用戶和Linux內核,讓用戶更加高效、安全、低成本地使用Linux內核,這就是Shell的本質。bash是Shell的一種。
Shell命令的執行過程:
Shell有兩個作用:
(1)傳遞請求指令,讓操作系統執行命令
(2)保護內核
2.為什么Linux不讓用戶直接使用kernel
對比windows GUI,用戶操作windows 不是直接操作windows內核,而是通過圖形接口,點擊,從而完成用戶操作(比如進入D盤的操作,用戶通常通過雙擊D盤盤符而進入D盤)。
shell 對于Linux,有相同的作用,主要是對用戶的指令進行解析,解析指令給Linux內核。反饋結果在通過內核運行出結果,通過shell解析給用戶。
二、Linux權限概念
權限是明確一件事情是否允許被特定的人做。Linux權限能夠指定誰可以對文件或目錄執行什么操作。Linux下有兩種用戶,即超級用戶和普通用戶。超級用戶的命令提示符是"#",普通用戶的命令提示符是"$"。
超級用戶:可以在Linux系統下作任何事情,不受限制。超級用戶的命令提示符是"#"
普通用戶:在Linux下做有限的事情。普通用戶的命令提示符是"$"
兩種用戶可以互相切換:
也可以使用ctrl + d在普通用戶下,切換為root用戶。切換成root之后就能提升用戶身份,可以執行對應命令。
三、Linux權限管理
1.文件訪問的用戶分類
用戶分為3類:
(1)文件擁有者User---u
(2)文件所屬組Group---g
(3)其他Others---o
2.文件類型和訪問權限
(1)文件類型
在Linux中,不以文件后綴作為區分文件類型的方式,而是以文件詳細列表的第一位進行標識區分:
如上圖文件類型有-和d,linux中的文件類型分為以下幾類:
?
d:文件夾 -:普通文件(包括文本、各種靜態庫、可執行程序、源程序) l:軟鏈接(類似Windows的快捷方式) b:塊設備文件(例如硬盤、光驅等) p:管道文件 c:字符設備文件(例如屏幕等串口設備) s:套接口文件
?
(2)訪問權限
linux對文件有3種訪問權限:
r:read,對文件而言,具有讀取文件內容的權限;對目錄來說,具有瀏覽該目錄信息的權限
w:write,對文件而言,具有修改文件內容的權限;對目錄來說具有刪除移動目錄內文件的權限
x:execute,對文件而言,具有執行文件的權限;對目錄來說,具有進入目錄的權限
3.權限的表示方法
權限既可以用字符表示也可以用八進制表示
(1)字符表示法
linux表示 | 說明 |
r-- | 只讀 |
-w- | 僅可寫 |
--x | 僅可執行 |
rw- | 可讀可寫 |
-wx | 可寫和可執行 |
r-x | 可讀可執行 |
rwx | 可讀可寫可執行 |
--- | 無權限 |
對于每一個文件來說,都有3種用戶,且每種用戶都有3種權限:
(2)八進制表示法
權限符號(讀寫執行) | 八進制 | 二進制 |
r-- | 4 | 100 |
-w- | 2 | 010 |
--x | 1 | 001 |
rw- | 6 | 110 |
-wx | 5 | 101 |
r-x | 3 | 011 |
rwx | 7 | 111 |
--- | 0 | 000 |
4.權限的設置
root不受任何權限限制,權限只限制普通用戶。
(1)chmod修改文件訪問權限
只有文件的擁有者和root可以設置文件的訪問權限:
?
chmod?【參數】?權限?文件名
?
選項:
?
R?->?遞歸修改目錄文件的權限
?
①用戶符號+/-/=權限字符
?
+:向權限范圍增加權限代號所表示的權限 -:向權限范圍取消權限代號所表示的權限 =:向權限范圍賦予權限代號所表示的權限 用戶符號: u:擁有者 g:擁有者同組用 o:其它用戶 a:所有用戶
?
例如修改IP.log的訪問權限,給user增加可執行權限:
②三位八進制數字
如將IP.log的權限改為擁有者不可讀不可寫可執行(1),所數組不可讀不可寫可執行(1),其他人不可讀不可寫不可執行(0):
雖然delia用戶對IP.log不可讀,但是root可以讀IP.log,這是因為root不受任何權限限制:
如果需要cd進入某個目錄,就需要有x權限,如果沒有x權限,盡管可以ls查看文件名,但是cd不進去
(2)chown修改文件擁有者
修改文件擁有者:
?
chown?【參數】?用戶名?文件名
?
選項:
?
-R?遞歸修改目錄的擁有者
?
比如將IP2.log文件的擁有者改為用戶Gino,必須在root權限下修改,可以切換為root之后:
再修改文件擁有者:
(3)chgrp修改文件或目錄的所屬組
修改文件或目錄所屬組:
?
chgrp?【參數】?用戶組名?文件名
?
選項:
?
-R??遞歸修改文件或目錄的所屬組
?
同樣也是要有root權限才能修改,如將IP2.log文件的所屬組改為Gino:
假如想同時修改擁有者和所屬組,依舊要在root權限下:
?
chown?擁有者:所屬組?文件名
?
例如,想將IP2.log的擁有者和所屬組都改為root,那么可以這樣改:
(4)umask查看或修改文件掩碼
新創建一個文件,訪問權限按理來說,應該是777,但是卻發現新創建的目錄的權限是755:
這是因為創建文件或目錄的時候還要受到umask的影響,假設默認權限是mask,實際創建出來的文件權限是mask & ~umask。
查看文件掩碼:
?
umask
?
查看到系統的umask為0022:
只需要關心后3位,實際創建出來的文件權限是mask & ~umask。凡是在umask中為1的位,都要在起始權限中去掉:
修改文件掩碼:
?
umask?八進制
?
將文件掩碼由022修改為333,發現創建的新目錄的權限也與333對應:
但是如果退出后,重新登錄,重新創建新目錄,就會發現,修改過的掩碼失效了,又變成了022。
這是因為掩碼設置只在本次登錄有效,退出登錄就失效了。
(5)目錄的權限
①可讀權限: 如果目錄沒有可讀權限, 則無法用ls等命令查看目錄中的文件內容。
②可寫權限: 如果目錄沒有可寫權限, 則無法在目錄中創建文件, 也無法在目錄中刪除文件。
③可執行權限: 如果目錄沒有可執行權限, 則無法cd到目錄中
那么問題來了。只要用戶具有目錄的寫權限, 用戶就可以刪除目錄中的文件, 而不論這個用戶是否有這個文件的寫權限,這不矛盾嗎?
(6)粘滯位
在root的根目錄下,有一個tmp文件夾,這個文件夾下存放的是臨時文件,用戶在保存文件之前,文件都存放在tmp文件夾中,這個文件夾下存放用戶的臨時文件,可以看到它的權限有個t:
這個文件夾對擁有者和所屬組的權限都是rwx,對other的權限是rwt。這個t是什么屬性?和r、w、x有什么區別?
先來看下面的例子,root用戶在根目錄下創建了一個文件夾test,并在這個文件夾中創建了2個文件test1和test2,然后又root用戶切換為delia用戶,此時發現delia竟然可以刪掉test中的文件:
這怎么能忍呢?我創建的文件,怎么能夠被別人隨隨便便刪掉呢?test目錄對other有w和x權限,一旦有w權限,那么也就是other可以對它進行創建文件和刪除文件操作。但是不希望一個用戶創建的文件被別的用戶或刪除,那怎么辦呢?
在這種場景下,就需要粘滯位,當目錄被設置了粘滯位以后,即使用戶對該目錄有寫權限,但是不能刪除該目錄中其他用戶的文件,只有文件的擁有者和root用戶才可以刪除。這就達到了各個用戶可以在目錄中讀、寫、修改、刪除文件,但是不能隨意刪除其他用戶文件的目的。
設置粘滯位:
發現設置完粘滯位后,其他用戶就不能刪除該用戶創建的文件了。
因此,當一個目錄被設置為"粘滯位"(chmod +t),則該目錄下的文件只能由
(1)超級管理員刪除
(2)該目錄的所有者刪除
(3)該文件的所有者刪除
審核編輯:湯梓紅
評論
查看更多