shell 運作原理與 Linux 權限詳解
Linux,嚴謹來說,就是一個作業系統的核心。也就是說,一般使用者無法直接呼叫核心。為了與核心進行通信,我們需要透過核心的「外殼」程序,也就是所謂的 shell。 Shell是一個命令列解釋器,它接收使用者輸入的命令並將其轉換為系統執行的操作代碼。 Shell根據命令的類型可以呼叫不同的系統函數來完成不同的操作。因此,我們可以透過Shell來執行各種各樣的命令和操作,實現我們對系統的控制和管理。簡而言之,Shell扮演了使用者與底層核心進行通訊的橋樑。
如何理解?為什麼不能直接使用 kernel?
#「
#從技術角度,Shell 的最簡單定義:命令列解釋器(command Interpreter)主要包含:
」
将使用者的命令翻译给核心(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 指令,但還是沒有權限讀出目錄下的文件。
以上是shell 運作原理與 Linux 權限詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Linux系統的五個基本組件是:1.內核,2.系統庫,3.系統實用程序,4.圖形用戶界面,5.應用程序。內核管理硬件資源,系統庫提供預編譯函數,系統實用程序用於系統管理,GUI提供可視化交互,應用程序利用這些組件實現功能。

要查看 Git 倉庫地址,請執行以下步驟:1. 打開命令行並導航到倉庫目錄;2. 運行 "git remote -v" 命令;3. 查看輸出中的倉庫名稱及其相應的地址。

雖然 Notepad 無法直接運行 Java 代碼,但可以通過借助其他工具實現:使用命令行編譯器 (javac) 編譯代碼,生成字節碼文件 (filename.class)。使用 Java 解釋器 (java) 解釋字節碼,執行代碼並輸出結果。

在 Sublime 中運行代碼的方法有六種:通過熱鍵、菜單、構建系統、命令行、設置默認構建系統和自定義構建命令,並可通過右鍵單擊項目/文件運行單個文件/項目,構建系統可用性取決於 Sublime Text 的安裝情況。

要安裝 Laravel,需依序進行以下步驟:安裝 Composer(適用於 macOS/Linux 和 Windows)安裝 Laravel 安裝器創建新項目啟動服務訪問應用程序(網址:http://127.0.0.1:8000)設置數據庫連接(如果需要)

Linux的主要用途包括:1.服務器操作系統,2.嵌入式系統,3.桌面操作系統,4.開發和測試環境。 Linux在這些領域表現出色,提供了穩定性、安全性和高效的開發工具。

Visual Studio Code (VSCode) 是一款跨平台、開源且免費的代碼編輯器,由微軟開發。它以輕量、可擴展性和對眾多編程語言的支持而著稱。要安裝 VSCode,請訪問官方網站下載並運行安裝程序。使用 VSCode 時,可以創建新項目、編輯代碼、調試代碼、導航項目、擴展 VSCode 和管理設置。 VSCode 適用於 Windows、macOS 和 Linux,支持多種編程語言,並通過 Marketplace 提供各種擴展。它的優勢包括輕量、可擴展性、廣泛的語言支持、豐富的功能和版
