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