在技術領域中,shell被簡單定義為命令行解釋器(command interpreter)。它是linux操作系統中的一個重要組成部分,充當著用戶與內核之間的橋梁,負責解釋用戶輸入的命令并傳達給內核執行。內核是操作系統的核心部分,負責管理系統資源、處理硬件與軟件交互等底層任務。普通用戶不能直接與內核進行交互是因為內核操作相對復雜且具有潛在風險,需要一定的專業知識和權限才能操作,為了簡化用戶與系統之間的交互過程,shell應運而生。
通過Shell,用戶可以通過輸入命令來執行各種操作,如創建文件、運行程序等。Shell接收用戶輸入的命令,解析并執行后轉發給內核處理。用戶可以通過Shell來訪問系統的各種功能和服務,提高操作系統的可操作性和靈活性。Shell的存在使得用戶可以通過簡單的命令來操作系統,而不需要深入了解操作系統內部的工作原理和細節,極大地方便了用戶的使用體驗。
將使用者的命令翻譯給核心(kernel)處理。 同時,將核心的處理結果翻譯給使用者。
?
注意:shell 是所有外殼程序的統稱,bash 是一種具體的 shell。例如:centos 7 外殼程序 :bash
- 對比 Windows GUI,我們操作 windows 不是直接操作 windows 內核,而是通過圖形接口,點擊,從而完成我們的操作(比如進入 D 盤的操作,我們通常是雙擊 D 盤盤符. 或者運行起來一個應用程序)。
- shell 對于 Linux,有相同的作用,主要是對我們的指令進行解析,解析指令給 Linux 內核。反饋結果在通過內核運行出結果,通過 shell 解析給用戶。
- shell 運行原理
shell是做命令行解釋的 對系統有危害性的命令會被阻止從而保護操作系統 其好處為子進程出現任何問題都不會影響父進程shell
- 幫助理解:
- 如果說你是一個悶騷且害羞的程序員,那 shell 就像媒婆
- 操作系統內核就是你們村頭漂亮的且有讓你心動的 MM 小花。
- 你看上了小花,但是有不好意思直接表白,那就讓你你家人找媒婆幫你提親
- 所有的事情你都直接跟媒婆溝通,由媒婆轉達你的意思給小花
- 而我們找到媒婆姓王,所以我們叫它王婆,它對應我們常使用的 bash。
- Linux 權限
2.1 權限的概念
- Linux 下有兩種用戶:超級用戶(root)、普通用戶。
- 超級用戶:可以再 linux 系統下做任何事情,不受限制
- 普通用戶:在 linux 下做有限的事情。
- 超級用戶的命令提示符是 “#”,普通用戶的命令提示符是 “$”。
- 用戶切換的命令
命令:su [用戶名]
功能:切換用戶。
?
例如,要從 root 用戶切換到普通用戶 user,則使用 su user。要從普通用戶 user 切換到 root 用戶則使用 suroot(root 可以省略),此時系統會提示輸入 root 用戶的口令。
- 切換到 root:用 su -,我們可以切換到 root 用戶(此時輸入 root 賬號密碼,密碼是不會回顯在屏幕上的)
- 切換回普通用戶:用 su – 用戶名 切回普通用戶,(此時不用輸入密碼,但是我們不建議這樣切回,因為使用 su – 命令時,會創建更多的 bash 進程)
- 推薦的切換回普通用戶:輸入 exit 或者敲擊 Ctrl+d,回退到普通用戶
2.2 權限管理
- 什么是權限
?
權限本質上是決定某件事情,某人能否做。
- 針對人:例如我是這間房子的主人所以我可以自由進出這個房子
- 針對事物:我想去吃一臺電腦、我想在面包上玩英雄聯盟、看電影。面包能吃,但是電腦不能吃、你可以吃面包,但是不能吃電腦;這里面包括了兩個屬性。
?
文件受人的影響和文件受本身自身特點 (事物屬性) 的影響 所以文件權限 = 人 + 事物屬性
文件權限屬性:r(讀)、w(寫)、x(執行權限)
人 (不是特定具體的人,而是一種角色):擁有者、所屬組、other (其它)
- 文件訪問者的分類(人)
- 文件和文件目錄的所有者:u—User(中國平民 法律問題)
- 文件和文件目錄的所有者所在的組的用戶:g—Group(不多說)
- 其它用戶:o—Others (外國人)
- 文件類型和訪問權限(事物屬性)
?
使用命令 ls -l (ll) 顯示的多列屬性的第一列對應的字符來區分它的文件類型。
?
不需要列出 other,因為不是擁有者和所屬組的就是 other 了
幫助理解 – 擁有者和所屬組
?
我們舉個簡單的例子,在一家公司內部,兩個項目組,要完成同樣的代碼任務,他們之間彼此是互相競爭的關系,但是公司給他們提供的服務器只有一個,他們完成的代碼要提交上去,這是你寫的代碼,肯定只是想讓你和你的組員組長能看到,不想你的競爭對手組看到,這就產生了所屬組的概念。
文件類型
- d:文件夾
- -:普通文件
- l:軟鏈接(類似 Windows 的快捷方式)
- b:塊設備文件(例如硬盤、光驅等)
- p:管道文件
- c:字符設備文件(例如屏幕等串口設備)
- s:套接口文件
- 基本權限
i. 讀(r/4):Read 對文件而言,具有讀取文件內容的權限;對目錄來說,具有瀏覽該目錄信息的權限
ii. 寫(w/2):Write 對文件而言,具有修改文件內容的權限;對目錄來說具有刪除移動目錄內文件的權限
iii. 執行(x/1):execute 對文件而言,具有執行文件的權限;對目錄來說,具有進入目錄的權限
iv.“—” 表示不具有該項權限
2.3 文件權限值的表示方法
字符表示方法
Linux 表示 | 說明 | Linux | 說明 |
---|---|---|---|
r – – | 只讀 | – w – | 僅可寫 |
– – x | 僅可執行 | r w – | 可讀可寫 |
– w x | 可寫可執行 | r – x | 可讀可執行 |
r w x | 可讀可寫可執行 | – – – | 無權限 |
八進制數值表示方法
權限符號 (讀寫執行) | 八進制 | 二進制 |
---|---|---|
r | 4 | 1 0 0 |
w | 2 | 0 1 0 |
x | 1 | 0 0 1 |
r w | 6 | 1 1 0 |
r x | 5 | 1 0 1 |
w x | 3 | 0 1 1 |
r w x | 7 | 1 1 1 |
– – – | 0 | 0 0 0 |
權限更改
$?chmod?777?text.c $?chmod?000?text.c $?chmod?640?text.c
2.4 文件訪問權限的相關設置方法
chmod
- 功能:設置文件的訪問權限
- 格式:chmod [參數] 權限 文件名
- 常用選項:
R -> 遞歸修改目錄文件的權限
說明:只有文件的擁有者和 root 才可以改變文件的權限
- chmod 命令權限值得格式
① 用戶表示符 +/-= 權限字符
- +: 向權限范圍增加權限代號所表示的權限
- -: 向權限范圍取消權限代號所表示的權限
- =: 向權限范圍賦予權限代號所表示的權限
用戶符號: - u:擁有者
- g:擁有者同組用
- o:其它用戶
- a:所有用戶
示例:
?
注意:chmod 可以給擁有者,所屬組,其他用戶同時修改權限,中間用逗號隔開
?
如果要修改不是自己的文件的時候需要 sudo 臨時權限提升或者直接切成 root 身份
- sudo chmod 用戶表示符 +/-= 權限字符 文件名
chown
功能:修改文件的擁有者
格式:chown [參數] 用戶名 文件名
實例:
$?sudo?chown?root?test.c//?修改擁有者 $?sudo?chown?lighthouse?test.c//?修改擁有者 $?sudo?chown?:lighthouse?test.c//?修改所屬組 $?sudo?chown?lighthouse:lighthouse?test.c//?可以將擁有者、所屬組同時修改 $?sudo?chown?root:root?test.c//?可以將擁有者、所屬組同時修改
chgrp
功能:修改文件或目錄的所屬組
格式:chgrp [參數] 用戶組名 文件名
常用選項:-R 遞歸修改文件或目錄的所屬組
實例:
$?sudo?chgrp?root?text.c $?sudo?chgrp?lighthouse?text.c
2.4 修改文件的掩碼
umask
功能:查看或修改文件掩碼
語法:umask 權限值
新建文件夾默認權限 = 0666
新建目錄默認權限 = 0777
?
但是我們觀察到,新建的文件和目錄并不是默認的起始權限,這里是什么原因呢?
?
原因就是創建文件或目錄的時候還要受到 umask 的影響。假設默認權限是 mask,則實際創建的出來的文件權限是:umask & ~umask
- 我們也可以通過修改文件的 umask 碼值來修改文件的權限:
說明:將現有的存取權限減去權限掩碼后,即可產生建立文件時預設權限。超級用戶默認掩碼值為 0022,普通用戶默認為 0002。
2.5 file 指令
file
功能說明:辨識文件類型。
語法:file [選項] 文件或目錄…
常用選項:
-c 詳細顯示指令執行過程,便于排錯或分析程序執行的情形。
-z 嘗試去解讀壓縮文件的內容。
- 目錄權限
面試題:進入一個目錄要什么權限?
- 可讀權限: 如果目錄沒有可讀權限,則無法用 ls 等命令查看目錄中的文件內容.
- 可寫權限: 如果目錄沒有可寫權限,則無法在目錄中創建文件, 也無法在目錄中刪除文件.
- 可執行權限:如果沒有目錄可執行權限,則無法 cd 到目錄中
x r w
- 粘滯位
新發現:
?
就是只要用戶具有目錄的寫權限, 用戶就可以刪除目錄中的文件, 而不論這個用戶是否有這個文件的寫權限.我創建的一個文件, 憑什么被你一個外人可以刪掉
結論
如果目錄本身對 other 具有 w 權限,other 可以刪掉任何目錄下的東西
如果目錄本身對 other 沒有 w 權限,other 則不可以刪除
?
我們的需求:other 可以在特定的目錄下創建文件并寫入,但是不想讓任何人刪除掉自己的文件
這里為了解決這個不科學的問題,Linux 引入了粘滯位的概念
粘滯位
語法:chmod +t 目錄名
功能:給目錄加上粘滯位
注意
?
只能對目錄設置,一般是限制 other權限的,對設置粘滯位的目錄,在該目錄下,只能有文件的擁有者和 root 用戶可以刪除,其他人不能刪除
示例:
?
有多個人或者系統會有很多的臨時數據,所有的臨時文件都放在系統的 /tmp 目錄下。所有的權限需要放開,但是只想讓文件的擁有者刪除自己的文件,這需要設置粘滯位
- 總結
- 目錄的可執行權限是表示你可否在目錄下執行命令。
- 如果目錄沒有 – x 權限,則無法對目錄執行任何命令,甚至無法 cd 進入目, 即使目錄仍然有 – r 讀權限(這個地方很容易犯錯,認為有讀權限就可以進入目錄讀取目錄下的文件)
- 而如果目錄具有 – x 權限,但沒有 – r 權限,則用戶可以執行命令,可以 cd 進入目錄。但由于沒有目錄的讀權限
- 所以在目錄下,即使可以執行 ls 命令,但仍然沒有權限讀出目錄下的文檔。