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