首頁 系統教程 Linux shell 運作原理與 Linux 權限詳解

shell 運作原理與 Linux 權限詳解

Feb 09, 2024 pm 02:39 PM
linux linux教程 linux系統 linux指令 shell腳本 overflow 嵌入式linux linux入門 linux學習

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中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1321
25
PHP教程
1269
29
C# 教程
1249
24
Linux體系結構:揭示5個基本組件 Linux體系結構:揭示5個基本組件 Apr 20, 2025 am 12:04 AM

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

git怎麼查看倉庫地址 git怎麼查看倉庫地址 Apr 17, 2025 pm 01:54 PM

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

notepad怎麼運行java代碼 notepad怎麼運行java代碼 Apr 16, 2025 pm 07:39 PM

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

sublime寫好代碼後如何運行 sublime寫好代碼後如何運行 Apr 16, 2025 am 08:51 AM

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

laravel安裝代碼 laravel安裝代碼 Apr 18, 2025 pm 12:30 PM

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

Linux的主要目的是什麼? Linux的主要目的是什麼? Apr 16, 2025 am 12:19 AM

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

git軟件安裝 git軟件安裝 Apr 17, 2025 am 11:57 AM

安裝 Git 軟件包括以下步驟:下載安裝包運行安裝包驗證安裝配置 Git安裝 Git Bash(僅限 Windows)

VSCode怎麼用 VSCode怎麼用 Apr 15, 2025 pm 11:21 PM

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

See all articles