一、Shell命令運(yùn)行原理
1.Shell
Linux作為一個(gè)操作系統(tǒng),稱(chēng)為"kernel",一般用戶(hù)不能直接使用kernel,而通過(guò)"kernel"的外殼程序"Shell"和kernel進(jìn)行溝通。
所以廣義上Linux發(fā)行版=Linux內(nèi)核+外殼程序,狹義上Linux發(fā)行版=Linux內(nèi)核。
Shell作為外殼程序,包裹在Linux內(nèi)核外層,是一個(gè)應(yīng)用程序,通過(guò)一系列的Linux命令對(duì)操作系統(tǒng) 發(fā)出相關(guān)治療提供人際界面。它連接了用戶(hù)和Linux內(nèi)核,讓用戶(hù)更加高效、安全、低成本地使用Linux內(nèi)核,這就是Shell的本質(zhì)。bash是Shell的一種。
Shell命令的執(zhí)行過(guò)程:

Shell有兩個(gè)作用:
(1)傳遞請(qǐng)求指令,讓操作系統(tǒng)執(zhí)行命令
(2)保護(hù)內(nèi)核
2.為什么Linux不讓用戶(hù)直接使用kernel
對(duì)比windows GUI,用戶(hù)操作windows 不是直接操作windows內(nèi)核,而是通過(guò)圖形接口,點(diǎn)擊,從而完成用戶(hù)操作(比如進(jìn)入D盤(pán)的操作,用戶(hù)通常通過(guò)雙擊D盤(pán)盤(pán)符而進(jìn)入D盤(pán))。

shell 對(duì)于Linux,有相同的作用,主要是對(duì)用戶(hù)的指令進(jìn)行解析,解析指令給Linux內(nèi)核。反饋結(jié)果在通過(guò)內(nèi)核運(yùn)行出結(jié)果,通過(guò)shell解析給用戶(hù)。
二、Linux權(quán)限概念
權(quán)限是明確一件事情是否允許被特定的人做。Linux權(quán)限能夠指定誰(shuí)可以對(duì)文件或目錄執(zhí)行什么操作。Linux下有兩種用戶(hù),即超級(jí)用戶(hù)和普通用戶(hù)。超級(jí)用戶(hù)的命令提示符是"#",普通用戶(hù)的命令提示符是"$"。
超級(jí)用戶(hù):可以在Linux系統(tǒng)下作任何事情,不受限制。超級(jí)用戶(hù)的命令提示符是"#"

普通用戶(hù):在Linux下做有限的事情。普通用戶(hù)的命令提示符是"$"

兩種用戶(hù)可以互相切換:

也可以使用ctrl + d在普通用戶(hù)下,切換為root用戶(hù)。切換成root之后就能提升用戶(hù)身份,可以執(zhí)行對(duì)應(yīng)命令。
三、Linux權(quán)限管理
1.文件訪問(wèn)的用戶(hù)分類(lèi)
用戶(hù)分為3類(lèi):
(1)文件擁有者User---u
(2)文件所屬組Group---g
(3)其他Others---o
2.文件類(lèi)型和訪問(wèn)權(quán)限
(1)文件類(lèi)型
在Linux中,不以文件后綴作為區(qū)分文件類(lèi)型的方式,而是以文件詳細(xì)列表的第一位進(jìn)行標(biāo)識(shí)區(qū)分:

如上圖文件類(lèi)型有-和d,linux中的文件類(lèi)型分為以下幾類(lèi):
?
d:文件夾 -:普通文件(包括文本、各種靜態(tài)庫(kù)、可執(zhí)行程序、源程序) l:軟鏈接(類(lèi)似Windows的快捷方式) b:塊設(shè)備文件(例如硬盤(pán)、光驅(qū)等) p:管道文件 c:字符設(shè)備文件(例如屏幕等串口設(shè)備) s:套接口文件
?
(2)訪問(wèn)權(quán)限
linux對(duì)文件有3種訪問(wèn)權(quán)限:
r:read,對(duì)文件而言,具有讀取文件內(nèi)容的權(quán)限;對(duì)目錄來(lái)說(shuō),具有瀏覽該目錄信息的權(quán)限
w:write,對(duì)文件而言,具有修改文件內(nèi)容的權(quán)限;對(duì)目錄來(lái)說(shuō)具有刪除移動(dòng)目錄內(nèi)文件的權(quán)限
x:execute,對(duì)文件而言,具有執(zhí)行文件的權(quán)限;對(duì)目錄來(lái)說(shuō),具有進(jìn)入目錄的權(quán)限
3.權(quán)限的表示方法
權(quán)限既可以用字符表示也可以用八進(jìn)制表示
(1)字符表示法
| linux表示 | 說(shuō)明 |
| r-- | 只讀 |
| -w- | 僅可寫(xiě) |
| --x | 僅可執(zhí)行 |
| rw- | 可讀可寫(xiě) |
| -wx | 可寫(xiě)和可執(zhí)行 |
| r-x | 可讀可執(zhí)行 |
| rwx | 可讀可寫(xiě)可執(zhí)行 |
| --- | 無(wú)權(quán)限 |
對(duì)于每一個(gè)文件來(lái)說(shuō),都有3種用戶(hù),且每種用戶(hù)都有3種權(quán)限:

(2)八進(jìn)制表示法
| 權(quán)限符號(hào)(讀寫(xiě)執(zhí)行) | 八進(jìn)制 | 二進(jìn)制 |
| 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)限只限制普通用戶(hù)。
(1)chmod修改文件訪問(wèn)權(quán)限
只有文件的擁有者和root可以設(shè)置文件的訪問(wèn)權(quán)限:
?
chmod?【參數(shù)】?權(quán)限?文件名
?
選項(xiàng):
?
R?->?遞歸修改目錄文件的權(quán)限
?
①用戶(hù)符號(hào)+/-/=權(quán)限字符
?
+:向權(quán)限范圍增加權(quán)限代號(hào)所表示的權(quán)限 -:向權(quán)限范圍取消權(quán)限代號(hào)所表示的權(quán)限 =:向權(quán)限范圍賦予權(quán)限代號(hào)所表示的權(quán)限 用戶(hù)符號(hào): u:擁有者 g:擁有者同組用 o:其它用戶(hù) a:所有用戶(hù)
?
例如修改IP.log的訪問(wèn)權(quán)限,給user增加可執(zhí)行權(quán)限:

②三位八進(jìn)制數(shù)字
如將IP.log的權(quán)限改為擁有者不可讀不可寫(xiě)可執(zhí)行(1),所數(shù)組不可讀不可寫(xiě)可執(zhí)行(1),其他人不可讀不可寫(xiě)不可執(zhí)行(0):

雖然delia用戶(hù)對(duì)IP.log不可讀,但是root可以讀IP.log,這是因?yàn)閞oot不受任何權(quán)限限制:

如果需要cd進(jìn)入某個(gè)目錄,就需要有x權(quán)限,如果沒(méi)有x權(quán)限,盡管可以ls查看文件名,但是cd不進(jìn)去
(2)chown修改文件擁有者
修改文件擁有者:
?
chown?【參數(shù)】?用戶(hù)名?文件名
?
選項(xiàng):
?
-R?遞歸修改目錄的擁有者
?
比如將IP2.log文件的擁有者改為用戶(hù)Gino,必須在root權(quán)限下修改,可以切換為root之后:
再修改文件擁有者: 
(3)chgrp修改文件或目錄的所屬組
修改文件或目錄所屬組:
?
chgrp?【參數(shù)】?用戶(hù)組名?文件名
?
選項(xiàng):
?
-R??遞歸修改文件或目錄的所屬組
?
同樣也是要有root權(quán)限才能修改,如將IP2.log文件的所屬組改為Gino:

假如想同時(shí)修改擁有者和所屬組,依舊要在root權(quán)限下:
?
chown?擁有者:所屬組?文件名
?
例如,想將IP2.log的擁有者和所屬組都改為root,那么可以這樣改:

(4)umask查看或修改文件掩碼
新創(chuàng)建一個(gè)文件,訪問(wèn)權(quán)限按理來(lái)說(shuō),應(yīng)該是777,但是卻發(fā)現(xiàn)新創(chuàng)建的目錄的權(quán)限是755:

這是因?yàn)閯?chuàng)建文件或目錄的時(shí)候還要受到umask的影響,假設(shè)默認(rèn)權(quán)限是mask,實(shí)際創(chuàng)建出來(lái)的文件權(quán)限是mask & ~umask。
查看文件掩碼:
?
umask
?
查看到系統(tǒng)的umask為0022:

只需要關(guān)心后3位,實(shí)際創(chuàng)建出來(lái)的文件權(quán)限是mask & ~umask。凡是在umask中為1的位,都要在起始權(quán)限中去掉:

修改文件掩碼:
?
umask?八進(jìn)制
?
將文件掩碼由022修改為333,發(fā)現(xiàn)創(chuàng)建的新目錄的權(quán)限也與333對(duì)應(yīng):

但是如果退出后,重新登錄,重新創(chuàng)建新目錄,就會(huì)發(fā)現(xiàn),修改過(guò)的掩碼失效了,又變成了022。

這是因?yàn)檠诖a設(shè)置只在本次登錄有效,退出登錄就失效了。
(5)目錄的權(quán)限
①可讀權(quán)限: 如果目錄沒(méi)有可讀權(quán)限, 則無(wú)法用ls等命令查看目錄中的文件內(nèi)容。
②可寫(xiě)權(quán)限: 如果目錄沒(méi)有可寫(xiě)權(quán)限, 則無(wú)法在目錄中創(chuàng)建文件, 也無(wú)法在目錄中刪除文件。
③可執(zhí)行權(quán)限: 如果目錄沒(méi)有可執(zhí)行權(quán)限, 則無(wú)法cd到目錄中
那么問(wèn)題來(lái)了。只要用戶(hù)具有目錄的寫(xiě)權(quán)限, 用戶(hù)就可以刪除目錄中的文件, 而不論這個(gè)用戶(hù)是否有這個(gè)文件的寫(xiě)權(quán)限,這不矛盾嗎?
(6)粘滯位
在root的根目錄下,有一個(gè)tmp文件夾,這個(gè)文件夾下存放的是臨時(shí)文件,用戶(hù)在保存文件之前,文件都存放在tmp文件夾中,這個(gè)文件夾下存放用戶(hù)的臨時(shí)文件,可以看到它的權(quán)限有個(gè)t:

這個(gè)文件夾對(duì)擁有者和所屬組的權(quán)限都是rwx,對(duì)other的權(quán)限是rwt。這個(gè)t是什么屬性?和r、w、x有什么區(qū)別?
先來(lái)看下面的例子,root用戶(hù)在根目錄下創(chuàng)建了一個(gè)文件夾test,并在這個(gè)文件夾中創(chuàng)建了2個(gè)文件test1和test2,然后又root用戶(hù)切換為delia用戶(hù),此時(shí)發(fā)現(xiàn)delia竟然可以刪掉test中的文件:

這怎么能忍呢?我創(chuàng)建的文件,怎么能夠被別人隨隨便便刪掉呢?test目錄對(duì)other有w和x權(quán)限,一旦有w權(quán)限,那么也就是other可以對(duì)它進(jìn)行創(chuàng)建文件和刪除文件操作。但是不希望一個(gè)用戶(hù)創(chuàng)建的文件被別的用戶(hù)或刪除,那怎么辦呢?
在這種場(chǎng)景下,就需要粘滯位,當(dāng)目錄被設(shè)置了粘滯位以后,即使用戶(hù)對(duì)該目錄有寫(xiě)權(quán)限,但是不能刪除該目錄中其他用戶(hù)的文件,只有文件的擁有者和root用戶(hù)才可以刪除。這就達(dá)到了各個(gè)用戶(hù)可以在目錄中讀、寫(xiě)、修改、刪除文件,但是不能隨意刪除其他用戶(hù)文件的目的。
設(shè)置粘滯位:

發(fā)現(xiàn)設(shè)置完粘滯位后,其他用戶(hù)就不能刪除該用戶(hù)創(chuàng)建的文件了。
因此,當(dāng)一個(gè)目錄被設(shè)置為"粘滯位"(chmod +t),則該目錄下的文件只能由
(1)超級(jí)管理員刪除
(2)該目錄的所有者刪除
(3)該文件的所有者刪除
審核編輯:湯梓紅
電子發(fā)燒友App




















評(píng)論