首頁 > 系統教程 > Linux > 主體

shell 運作原理與 Linux 權限詳解

王林
發布: 2024-02-09 14:39:13
轉載
659 人瀏覽過

Linux,嚴謹來說,就是一個作業系統的核心。也就是說,一般使用者無法直接呼叫核心。為了與核心進行通信,我們需要透過核心的「外殼」程序,也就是所謂的 shell。 Shell是一個命令列解釋器,它接收使用者輸入的命令並將其轉換為系統執行的操作代碼。 Shell根據命令的類型可以呼叫不同的系統函數來完成不同的操作。因此,我們可以透過Shell來執行各種各樣的命令和操作,實現我們對系統的控制和管理。簡而言之,Shell扮演了使用者與底層核心進行通訊的橋樑。

如何理解?為什麼不能直接使用 kernel?

#從技術角度,Shell 的最簡單定義:命令列解釋器(command Interpreter)主要包含:

#
将使用者的命令翻译给核心(kernel)处理。
同时,将核心的处理结果翻译给使用者。
登入後複製
shell 运行原理和 Linux 权限详解

注意:shell 是所有外殼程式的統稱,bash 是一種具體的 shell。例如:centos 7 外殼程式 :bash

  • # 比較windows GUI,我們操作windows 不是直接操作windows 內核,而是透過圖形接口,點擊,從而完成我們的操作(例如進入D 碟的操作,我們通常是雙擊D 碟盤符. 或者運行起來一個應用程式) 。
  • shell 對於 Linux,有相同的作用,主要是對我們的指令進行解析,解析指令給 Linux 核心。回饋結果透過核心運行出結果,透過 shell 解析給使用者。
  • shell 運作原理
shell是做命令行解释的
对系统有危害性的命令会被阻止从而保护操作系统
其好处为子进程出现任何问题都不会影响父进程shell
登入後複製
  • 幫助理解:
  • 如果說你是個悶騷且害羞的程式設計師,那 shell 就像媒婆
  • 作業系統核心就是你們村頭漂亮的、有讓你心動的 MM 小花。
  • 你看上了小花,但是有不好意思直接表白,那就讓你家人找媒婆幫你提親
  • # 所有的事情你都直接跟媒婆溝通,由媒婆轉達你的意思給小花
  • 而我們找到媒婆姓王,所以我們叫它王婆,它對應我們常使用的 bash。
  1. # Linux 權限

2.1 權限的概念

  • Linux 下有兩種使用者:超級使用者(root)、一般使用者。
  • 超級使用者:可以再 linux 系統下做任何事情,不受限制
  • # 普通用戶:在 linux 下做有限的事情。
  • 超級使用者的命令提示字元是 “#”,一般使用者的命令提示字元是 “$”。
shell 运行原理和 Linux 权限详解
  • 用戶切換的命令

指令:su [使用者名稱]

功能:切換使用者。

#例如,要從 root 使用者切換到一般使用者 user,則使用 su user。若要從一般使用者 user 切換到 root 使用者則使用 suroot(root 可以省略),此時系統會提示輸入 root 使用者的口令。

shell 运行原理和 Linux 权限详解
  • ## 切換到 root:用 su -,我們可以切換到 root 使用者(此時輸入 root 帳號密碼,密碼是不會回顯在螢幕上的)
  • 切換回普通用戶:用su – 用戶名稱切回普通用戶,(此時不用輸入密碼,但我們不建議這樣切回,因為使用su – 命令時,會創建更多的bash 進程)
  • 建議的切換回一般使用者:輸入 exit 或敲擊 Ctrl d,回退到一般使用者

#2.2 權限管理

  • 什麼是權限

權限本質上是決定某件事情,某人能否做。

  • # 針對人:例如我是這間房子的主人所以我可以自由進出這個房子
  • 針對事物:我想去吃一台電腦、我想在麵包上玩英雄聯盟、看電影。麵包能吃,但是電腦不能吃、你可以吃麵包,但是不能吃電腦;這裡麵包括了兩個屬性。

檔案受人的影響和檔案受本身自身特徵 (事物屬性) 的影響 所以檔案權限 = 人 事物屬性

#檔案權限屬性:r(讀)、w(寫)、x(執行權限)

人 (不是特定具體的人,而是一種角色):擁有者、所屬組、other (其它)

  • 文件訪客的分類(人)
  • 文件和文件目錄的擁有者:u—User(中國平民 法律問題)
  • # 檔案和檔案目錄的擁有者所在的群組的使用者:g—Group(不多說)
  • 其它使用者:o—Others (外國人)
  • 檔案類型和存取權限(事物屬性)
shell 运行原理和 Linux 权限详解

#「

#使用指令 ls -l (ll) 顯示的多列屬性的第一列對應的字元來區分它的檔案類型。

shell 运行原理和 Linux 权限详解

#「

不需要列出 other,因為不是擁有者和所屬群組的就是 other 了

#幫助理解 – 擁有者和所屬群組

#「

#我們舉個簡單的例子,在一家公司內部,兩個專案組,要完成同樣的程式碼任務,他們之間彼此是互相競爭的關係,但是公司給他們提供的伺服器只有一個,他們完成的程式碼要提交上去,這是你寫的程式碼,肯定只是想讓你和你的組員組長能看到,不想你的競爭對手組看到,這就產生了所屬組的概念。

shell 运行原理和 Linux 权限详解

#檔案類型

  • # d:資料夾
  • -:普通檔案
  • l:軟連結(類似 Windows 的捷徑)
  • b:區塊裝置檔案(例如硬碟、光碟機等)
  • p:管道檔案
  • c:字元裝置檔案(例如螢幕等串列裝置)
  • s:套接口檔
shell 运行原理和 Linux 权限详解
  • 基本權限

i. 讀取(r/4):Read 對檔案而言,具有讀取檔案內容的權限;對目錄來說,具有瀏覽該目錄資訊的權限

ii. 寫入(w/2):Write 對檔案而言,具有修改檔案內容的權限;對目錄來說具有刪除移動目錄內檔案的權限

iii. 執行(x/1):execute 對檔案而言,具有執行檔案的權限;對目錄來說,具有進入目錄的權限

iv.“—” 表示不具有該項權限

shell 运行原理和 Linux 权限详解

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
#shell 运行原理和 Linux 权限详解

权限更改

$ chmod 777 text.c
$ chmod 000 text.c
$ chmod 640 text.c
登入後複製
shell 运行原理和 Linux 权限详解

2.4 文件访问权限的相关设置方法

chmod

  • 功能:设置文件的访问权限
  • 格式:chmod [参数] 权限 文件名
  • 常用选项:

R -> 递归修改目录文件的权限

说明:只有文件的拥有者和 root 才可以改变文件的权限

  • chmod 命令权限值得格式

① 用户表示符 +/-= 权限字符

  • +: 向权限范围增加权限代号所表示的权限
  • -: 向权限范围取消权限代号所表示的权限
  • =: 向权限范围赋予权限代号所表示的权限
    用户符号:
  • u:拥有者
  • g:拥有者同组用
  • o:其它用户
  • a:所有用户

示例:

shell 运行原理和 Linux 权限详解

注意: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// 可以将拥有者、所属组同时修改
登入後複製
shell 运行原理和 Linux 权限详解

chgrp

功能:修改文件或目录的所属组
格式:chgrp [参数] 用户组名 文件名
常用选项:-R 递归修改文件或目录的所属组

实例:

$ sudo chgrp root text.c
$ sudo chgrp lighthouse text.c
登入後複製
shell 运行原理和 Linux 权限详解

2.4 修改文件的掩码

umask

功能:查看或修改文件掩码

语法:umask 权限值

shell 运行原理和 Linux 权限详解

新建文件夹默认权限 = 0666

新建目录默认权限 = 0777

shell 运行原理和 Linux 权限详解

但是我们观察到,新建的文件和目录并不是默认的起始权限,这里是什么原因呢?

原因就是创建文件或目录的时候还要受到 umask 的影响。假设默认权限是 mask,则实际创建的出来的文件权限是:umask & ~umask

shell 运行原理和 Linux 权限详解
  • 我们也可以通过修改文件的 umask 码值来修改文件的权限:
shell 运行原理和 Linux 权限详解

说明:将现有的存取权限减去权限掩码后,即可产生建立文件时预设权限。超级用户默认掩码值为 0022,普通用户默认为 0002。

2.5 file 指令

file

功能说明:辨识文件类型。

语法:file [选项] 文件或目录…

常用选项:

-c 详细显示指令执行过程,便于排错或分析程序执行的情形。

-z 尝试去解读压缩文件的内容。

shell 运行原理和 Linux 权限详解
  1. 目录权限

面试题:进入一个目录要什么权限?

  • 可读权限: 如果目录没有可读权限,则无法用 ls 等命令查看目录中的文件内容.
  • 可写权限: 如果目录没有可写权限,则无法在目录中创建文件, 也无法在目录中删除文件.
  • 可执行权限:如果没有目录可执行权限,则无法 cd 到目录中
x
r
w
登入後複製
  1. 粘滞位

新发现:

就是只要用户具有目录的写权限, 用户就可以删除目录中的文件, 而不论这个用户是否有这个文件的写权限.我创建的一个文件, 凭什么被你一个外人可以删掉

shell 运行原理和 Linux 权限详解

结论

如果目录本身对 other 具有 w 权限,other 可以删掉任何目录下的东西
如果目录本身对 other 没有 w 权限,other 则不可以删除

我们的需求:other 可以在特定的目录下创建文件并写入,但是不想让任何人删除掉自己的文件

这里为了解决这个不科学的问题,Linux 引入了粘滞位的概念

粘滞位

语法:chmod +t 目录名

功能:给目录加上粘滞位

注意

#只能對目錄設置,通常是限制 other權限的,對設置粘滯位的目錄,在該目錄下,只能有文件的擁有者和 root 用戶可以刪除,其他人不能刪除

#範例:

shell 运行原理和 Linux 权限详解

有多個人或系統會有很多的暫存數據,所有的暫存檔案都放在系統的 /tmp 目錄下。所有的權限都需要放開,但是只想讓文件的擁有者刪除自己的文件,這需要設定黏滯位

  1. # 總結
  • # 目錄的可執行權限是表示你可否在目錄下執行指令。
  • 如果目錄沒有– x 權限,則無法對目錄執行任何命令,甚至無法cd 進入目, 即使目錄仍然有– r 讀取權限(這個地方很容易犯錯,認為有讀權限就可以進入目錄讀取目錄下的文件)
  • 而如果目錄具有 – x 權限,但沒有 – r 權限,則使用者可以執行指令,可以 cd 進入目錄。但由於沒有目錄的讀取權限
  • 所以在目錄下,即使可以執行 ls 指令,但還是沒有權限讀出目錄下的文件。

以上是shell 運作原理與 Linux 權限詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:lxlinux.net
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!