Linux,嚴謹來說,就是一個作業系統的核心。也就是說,一般使用者無法直接呼叫核心。為了與核心進行通信,我們需要透過核心的「外殼」程序,也就是所謂的 shell。 Shell是一個命令列解釋器,它接收使用者輸入的命令並將其轉換為系統執行的操作代碼。 Shell根據命令的類型可以呼叫不同的系統函數來完成不同的操作。因此,我們可以透過Shell來執行各種各樣的命令和操作,實現我們對系統的控制和管理。簡而言之,Shell扮演了使用者與底層核心進行通訊的橋樑。
如何理解?為什麼不能直接使用 kernel?
#「
#從技術角度,Shell 的最簡單定義:命令列解釋器(command Interpreter)主要包含:
」
将使用者的命令翻译给核心(kernel)处理。 同时,将核心的处理结果翻译给使用者。
「
注意:shell 是所有外殼程式的統稱,bash 是一種具體的 shell。例如:centos 7 外殼程式 :bash
」
shell是做命令行解释的 对系统有危害性的命令会被阻止从而保护操作系统 其好处为子进程出现任何问题都不会影响父进程shell
2.1 權限的概念
指令:su [使用者名稱]
功能:切換使用者。
「
#例如,要從 root 使用者切換到一般使用者 user,則使用 su user。若要從一般使用者 user 切換到 root 使用者則使用 suroot(root 可以省略),此時系統會提示輸入 root 使用者的口令。
」
#2.2 權限管理
「
權限本質上是決定某件事情,某人能否做。
」
「
檔案受人的影響和檔案受本身自身特徵 (事物屬性) 的影響 所以檔案權限 = 人 事物屬性
」
#檔案權限屬性:r(讀)、w(寫)、x(執行權限)
人 (不是特定具體的人,而是一種角色):擁有者、所屬組、other (其它)
#「
#使用指令 ls -l (ll) 顯示的多列屬性的第一列對應的字元來區分它的檔案類型。
」
#「
不需要列出 other,因為不是擁有者和所屬群組的就是 other 了
」
#幫助理解 – 擁有者和所屬群組
#「
#我們舉個簡單的例子,在一家公司內部,兩個專案組,要完成同樣的程式碼任務,他們之間彼此是互相競爭的關係,但是公司給他們提供的伺服器只有一個,他們完成的程式碼要提交上去,這是你寫的程式碼,肯定只是想讓你和你的組員組長能看到,不想你的競爭對手組看到,這就產生了所屬組的概念。
」
#檔案類型
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
R -> 递归修改目录文件的权限
说明:只有文件的拥有者和 root 才可以改变文件的权限
① 用户表示符 +/-= 权限字符
示例:
“
注意:chmod 可以给拥有者,所属组,其他用户同时修改权限,中间用逗号隔开
”
“
如果要修改不是自己的文件的时候需要 sudo 临时权限提升或者直接切成 root 身份
”
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
”
说明:将现有的存取权限减去权限掩码后,即可产生建立文件时预设权限。超级用户默认掩码值为 0022,普通用户默认为 0002。
2.5 file 指令
file
功能说明:辨识文件类型。
语法:file [选项] 文件或目录…
常用选项:
-c 详细显示指令执行过程,便于排错或分析程序执行的情形。
-z 尝试去解读压缩文件的内容。
面试题:进入一个目录要什么权限?
x r w
新发现:
“
就是只要用户具有目录的写权限, 用户就可以删除目录中的文件, 而不论这个用户是否有这个文件的写权限.我创建的一个文件, 凭什么被你一个外人可以删掉
”
结论
如果目录本身对 other 具有 w 权限,other 可以删掉任何目录下的东西
如果目录本身对 other 没有 w 权限,other 则不可以删除
“
我们的需求:other 可以在特定的目录下创建文件并写入,但是不想让任何人删除掉自己的文件
”
这里为了解决这个不科学的问题,Linux 引入了粘滞位的概念
粘滞位
语法:chmod +t 目录名
功能:给目录加上粘滞位
注意
「
#只能對目錄設置,通常是限制 other權限的,對設置粘滯位的目錄,在該目錄下,只能有文件的擁有者和 root 用戶可以刪除,其他人不能刪除
」
#範例:
「
有多個人或系統會有很多的暫存數據,所有的暫存檔案都放在系統的
/tmp
目錄下。所有的權限都需要放開,但是只想讓文件的擁有者刪除自己的文件,這需要設定黏滯位」
以上是shell 運作原理與 Linux 權限詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!