0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

shell命令以及運行原理

dyquk4xk2p3d ? 來源:良許Linux ? 作者:良許Linux ? 2022-11-21 10:56 ? 次閱讀

	

	

目錄

1. shell命令以及運行原理

Linux嚴格意義上說的是一個操作系統(tǒng),我們稱之為“核心(kernel)“ ,但我們一般用戶,不能直接使用kernel。而是通過kernel的“外殼”程序,也就是所謂的shell,來與kernel溝通。

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

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

將使用者的命令翻譯給核心(kernel)處理。
同時,將核心的處理結果翻譯給使用者。

938ff102-692c-11ed-8abf-dac502259ad0.jpg

注意:shell 是所有外殼程序的統(tǒng)稱,bash 是一種具體的shell。例如:centos 7外殼程序 :bash

對比windows GUI,我們操作windows 不是直接操作windows內(nèi)核,而是通過圖形接口,點擊,從而完成我們的操作(比如進入D盤的操作,我們通常是雙擊D盤盤符.或者運行起來一個應用程序)。

shell 對于Linux,有相同的作用,主要是對我們的指令進行解析,解析指令給Linux內(nèi)核。反饋結果在通過內(nèi)核運行出結果,通過shell解析給用戶。

shell運行原理

shell是做命令行解釋的
對系統(tǒng)有危害性的命令會被阻止從而保護操作系統(tǒng)
其好處為子進程出現(xiàn)任何問題都不會影響父進程shell

幫助理解:

如果說你是一個悶騷且害羞的程序員,那shell就像媒婆

操作系統(tǒng)內(nèi)核就是你們村頭漂亮的且有讓你心動的MM小花。

你看上了小花,但是有不好意思直接表白,那就讓你你家人找媒婆幫你提親

所有的事情你都直接跟媒婆溝通,由媒婆轉(zhuǎn)達你的意思給小花

而我們找到媒婆姓王,所以我們叫它王婆,它對應我們常使用的bash。

?2. Linux權限

?2.1 權限的概念

Linux下有兩種用戶:超級用戶(root)、普通用戶。

超級用戶:可以再linux系統(tǒng)下做任何事情,不受限制

普通用戶:在linux下做有限的事情。

超級用戶的命令提示符是“#”,普通用戶的命令提示符是“$”。

939899e2-692c-11ed-8abf-dac502259ad0.jpg

用戶切換的命令

命令:su [用戶名]

功能:切換用戶。

例如,要從root用戶切換到普通用戶user,則使用 su user。要從普通用戶user切換到root用戶則使用 suroot(root可以省略),此時系統(tǒng)會提示輸入root用戶的口令。

93a3b7dc-692c-11ed-8abf-dac502259ad0.jpg

切換到root:用su -,我們可以切換到root用戶(此時輸入root賬號密碼,密碼是不會回顯在屏幕上的)

切換回普通用戶:用su - 用戶名 切回普通用戶,(此時不用輸入密碼,但是我們不建議這樣切回,因為使用su -命令時,會創(chuàng)建更多的bash進程)

推薦的切換回普通用戶:輸入exit或者敲擊Ctrl+d ,回退到普通用戶

?2.2 權限管理

什么是權限

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

針對人:例如我是這間房子的主人所以我可以自由進出這個房子

針對事物:我想去吃一臺電腦、我想在面包上玩英雄聯(lián)盟、看電影。面包能吃,但是電腦不能吃、你可以吃面包,但是不能吃電腦;這里面包括了兩個屬性。

文件受人的影響和文件受本身自身特點 (事物屬性) 的影響 所以文件權限 = 人 + 事物屬性

文件權限屬性:r(讀)、w(寫)、x(執(zhí)行權限)

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

文件訪問者的分類(人)

文件和文件目錄的所有者:u—User(中國平民 法律問題)

文件和文件目錄的所有者所在的組的用戶:g—Group(不多說)

其它用戶:o—Others (外國人)

文件類型和訪問權限(事物屬性)

93afe976-692c-11ed-8abf-dac502259ad0.jpg

使用命令 ls -l (ll) 顯示的多列屬性的第一列對應的字符來區(qū)分它的文件類型。

93b73ae6-692c-11ed-8abf-dac502259ad0.jpg

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

幫助理解 - 擁有者和所屬組

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

93bfc31e-692c-11ed-8abf-dac502259ad0.jpg

文件類型

d:文件夾

-:普通文件

l:軟鏈接(類似Windows的快捷方式)

b:塊設備文件(例如硬盤、光驅(qū)等)

p:管道文件

c:字符設備文件(例如屏幕等串口設備)

s:套接口文件

93ddad0c-692c-11ed-8abf-dac502259ad0.jpg

基本權限

i.讀(r/4):Read對文件而言,具有讀取文件內(nèi)容的權限;對目錄來說,具有瀏覽該目錄信息的權限

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

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

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

93e9e45a-692c-11ed-8abf-dac502259ad0.jpg

?2.3 文件權限值的表示方法

字符表示方法

Linux表示

說明

Linux

說明

r - -

只讀

- w -

僅可寫

- - x

僅可執(zhí)行

r w -

可讀可寫

- w x

可寫可執(zhí)行

r - x

可讀可執(zhí)行

r w x

可讀可寫可執(zhí)行

- - -

無權限

八進制數(shù)值表示方法

權限符號 (讀寫執(zhí)行)

八進制

二進制

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

93f543a4-692c-11ed-8abf-dac502259ad0.jpg

  • 權限更改

$ chmod 777 text.c

$ chmod 000 text.c

$ chmod 640 text.c

94035976-692c-11ed-8abf-dac502259ad0.png

?2.4 文件訪問權限的相關設置方法

chmod

功能:設置文件的訪問權限

格式:chmod [參數(shù)] 權限 文件名

常用選項:

R -> 遞歸修改目錄文件的權限

說明:只有文件的擁有者和root才可以改變文件的權限

chmod命令權限值得格式

① 用戶表示符+/-=權限字符

+:向權限范圍增加權限代號所表示的權限

-:向權限范圍取消權限代號所表示的權限

=:向權限范圍賦予權限代號所表示的權限

用戶符號:

u:擁有者

g:擁有者同組用

o:其它用戶

a:所有用戶

示例:

941f7a5c-692c-11ed-8abf-dac502259ad0.jpg

注意:chmod可以給擁有者,所屬組,其他用戶同時修改權限,中間用逗號隔開

如果要修改不是自己的文件的時候需要sudo臨時權限提升或者直接切成root身份

sudo chmod 用戶表示符+/-=權限字符 文件名

chown

功能:修改文件的擁有者

格式:chown [參數(shù)] 用戶名 文件名

實例:

$ 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//可以將擁有者、所屬組同時修改

94318eae-692c-11ed-8abf-dac502259ad0.jpg

chgrp

功能:修改文件或目錄的所屬組

格式:chgrp [參數(shù)] 用戶組名 文件名

常用選項:-R 遞歸修改文件或目錄的所屬組

實例:

$ sudo chgrp root text.c

$ sudo chgrp lighthouse text.c

943de85c-692c-11ed-8abf-dac502259ad0.jpg

?2.4 修改文件的掩碼

umask

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

語法:umask 權限值

944d54c2-692c-11ed-8abf-dac502259ad0.jpg

新建文件夾默認權限=0666

新建目錄默認權限=0777

945a0212-692c-11ed-8abf-dac502259ad0.jpg

但是我們觀察到,新建的文件和目錄并不是默認的起始權限,這里是什么原因呢?

原因就是創(chuàng)建文件或目錄的時候還要受到umask的影響。假設默認權限是mask,則實際創(chuàng)建的出來的文件權限是:umask & ~umask

94688274-692c-11ed-8abf-dac502259ad0.jpg

我們也可以通過修改文件的umask碼值來修改文件的權限:

9482ed9e-692c-11ed-8abf-dac502259ad0.jpg

說明:將現(xiàn)有的存取權限減去權限掩碼后,即可產(chǎn)生建立文件時預設權限。超級用戶默認掩碼值為0022,普通用戶默認為0002。

?2.5 file指令

file

功能說明:辨識文件類型。

語法:file [選項] 文件或目錄…

常用選項:

-c 詳細顯示指令執(zhí)行過程,便于排錯或分析程序執(zhí)行的情形。

-z 嘗試去解讀壓縮文件的內(nèi)容。

948fcb36-692c-11ed-8abf-dac502259ad0.jpg

?3. 目錄權限

?面試題:進入一個目錄要什么權限?

可讀權限: 如果目錄沒有可讀權限,則無法用ls等命令查看目錄中的文件內(nèi)容.

可寫權限: 如果目錄沒有可寫權限,則無法在目錄中創(chuàng)建文件, 也無法在目錄中刪除文件.

可執(zhí)行權限:如果沒有目錄可執(zhí)行權限,則無法cd到目錄中

x
r
w

?4. 粘滯位

?新發(fā)現(xiàn):

就是只要用戶具有目錄的寫權限, 用戶就可以刪除目錄中的文件, 而不論這個用戶是否有這個文件的寫權限.我創(chuàng)建的一個文件, 憑什么被你一個外人可以刪掉

949a3436-692c-11ed-8abf-dac502259ad0.jpg

結論:

如果目錄本身對other具有w權限,other可以刪掉任何目錄下的東西

如果目錄本身對other沒有w權限,other則不可以刪除

我們的需求:other可以在特定的目錄下創(chuàng)建文件并寫入,但是不想讓任何人刪除掉自己的文件

這里為了解決這個不科學的問題,Linux引入了粘滯位的概念

粘滯位

語法:chmod +t 目錄名

功能:給目錄加上粘滯位

注意:

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

示例:

94aaa73a-692c-11ed-8abf-dac502259ad0.jpg

有多個人或者系統(tǒng)會有很多的臨時數(shù)據(jù),所有的臨時文件都放在系統(tǒng)的*/tmp*目錄下。所有的權限需要放開,但是只想讓文件的擁有者刪除自己的文件,這需要設置粘滯位

5. 總結

目錄的可執(zhí)行權限是表示你可否在目錄下執(zhí)行命令。

如果目錄沒有-x權限,則無法對目錄執(zhí)行任何命令,甚至無法cd 進入目, 即使目錄仍然有-r 讀權限(這個地方很容易犯錯,認為有讀權限就可以進入目錄讀取目錄下的文件)

而如果目錄具有-x權限,但沒有-r權限,則用戶可以執(zhí)行命令,可以cd進入目錄。但由于沒有目錄的讀權限

所以在目錄下,即使可以執(zhí)行l(wèi)s命令,但仍然沒有權限讀出目錄下的文檔。



審核編輯 :李倩


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Linux
    +關注

    關注

    87

    文章

    11182

    瀏覽量

    208546
  • 操作系統(tǒng)

    關注

    37

    文章

    6625

    瀏覽量

    123056
  • Shell
    +關注

    關注

    1

    文章

    361

    瀏覽量

    23239

原文標題:chmod

文章出處:【微信號:良許Linux,微信公眾號:良許Linux】歡迎添加關注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關推薦

    shell具有的功能和特點

    Shell 是一個命令行解釋器,用于與操作系統(tǒng)進行交互。它提供了一種方便的方式來執(zhí)行命令、管理文件和目錄、運行程序等。以下是 Shell
    的頭像 發(fā)表于 08-30 14:48 ?273次閱讀

    shell基本介紹及常用命令shell介紹

    本使用的Shell有可能不同,但是基本的特性還是一樣的:一、支持內(nèi)置命令可直接使用;二、支持命令組合成新的復合命令;三、支持TAB鍵補齊;四、支持后臺
    發(fā)表于 08-15 09:28

    深入剖析Shell命令運行機制與權限管理

    Linux作為一個操作系統(tǒng),稱為"kernel",一般用戶不能直接使用kernel,而通過"kernel"的外殼程序"Shell"和kernel進行溝通。
    發(fā)表于 03-08 12:36 ?527次閱讀
    深入剖析<b class='flag-5'>Shell</b><b class='flag-5'>命令</b><b class='flag-5'>運行</b>機制與權限管理

    python shell怎么用

    Python Shell是一種交互式解釋器,可以通過命令行直接運行Python代碼。在Shell中,可以輸入一行代碼并立即得到結果,非常適合于測試、嘗試新代碼或進行簡單的任務。本文將詳
    的頭像 發(fā)表于 11-29 14:36 ?1038次閱讀

    Shell基本介紹及目錄常用命令

    01、Shell是什么?我們在剛開始接觸Linux的時候,經(jīng)常會聽到工程師提到Shell這個詞,那么Shell到底是什么呢?簡單的說,它是一個應用,接收用戶命令,調(diào)用相應的內(nèi)核接口函數(shù)
    的頭像 發(fā)表于 11-15 13:06 ?437次閱讀
    <b class='flag-5'>Shell</b>基本介紹及目錄常用<b class='flag-5'>命令</b>

    linux命令行與shell編程實戰(zhàn)

    Linux命令行與Shell編程實戰(zhàn)主要涉及以下內(nèi)容: Linux命令行基礎:學習Linux命令行的基本操作,如文件管理、進程管理、網(wǎng)絡配置等。熟悉使用
    的頭像 發(fā)表于 11-08 10:57 ?689次閱讀

    linux命令shell編程有什么聯(lián)系

    Linux命令Shell編程之間存在密切的聯(lián)系。 首先,Shell是Linux命令行下的解釋器,它提供了一個用戶界面,使用戶能夠與Linux內(nèi)核進行交互。
    的頭像 發(fā)表于 11-08 10:53 ?845次閱讀

    shell命令和linux命令一樣嗎

    Shell命令和Linux命令并不完全一樣。 首先,Shell是一種命令行解釋器,它是用來解釋和執(zhí)行用戶輸入的
    的頭像 發(fā)表于 11-08 10:51 ?2621次閱讀

    shell常用的20個命令

    以下是Shell中常用的20個命令: ls :列出當前目錄中的文件和子目錄。 cd :改變當前目錄。 pwd :顯示當前目錄的路徑。 cp :復制文件或目錄。 mv :移動或重命名文件或目錄。 rm
    的頭像 發(fā)表于 11-08 10:48 ?4104次閱讀

    shell命令提示符的具體含義

    Shell命令提示符的含義因操作系統(tǒng)和Shell類型而異。在Linux系統(tǒng)中,Shell命令提示符通常由以下幾部分組成: 用戶名:顯示當前登
    的頭像 發(fā)表于 11-08 10:37 ?1307次閱讀

    shell運行javamain的方法

    -version 來檢查是否已經(jīng)安裝了JDK,并且驗證Java的版本。 在Shell中進入包含Java Main類的目錄。 使用以下命令格式來運行Java Main類: java -cp . 解釋一下上述
    的頭像 發(fā)表于 11-08 10:30 ?759次閱讀

    shell并行執(zhí)行java腳本

    Shell中并行執(zhí)行Java腳本。假設你有一個Java類文件 MyClass.java ,你可以使用以下命令運行它:
    的頭像 發(fā)表于 11-08 10:29 ?607次閱讀

    shell并行調(diào)用腳本

    Shell腳本中,可以使用一些技巧來實現(xiàn)并行調(diào)用。以下是幾種常見的方法: 使用后臺進程:在Shell腳本中,可以使用"command2 上述腳本中,每個命令都在末尾添加了"&"符號,它們將在
    的頭像 發(fā)表于 11-08 10:23 ?876次閱讀

    shell腳本基本命令

    Shell腳本是一種可執(zhí)行文件,它包含了一組用某種特定語言編寫的命令,這些命令可以被解釋器(如bash)執(zhí)行。以下是一些常見的shell腳本基本命令
    的頭像 發(fā)表于 11-08 10:08 ?1924次閱讀

    單片機上如何做shell命令行交互

    做過嵌入式Linux開發(fā)或使用過桌面Linux系統(tǒng)的童鞋們,肯定對shell命令交互印象比較深刻,然而我們大多數(shù)搞嵌入式軟件開發(fā)的碼農(nóng)都是基于單片機,比如51、STM32等進行開發(fā)的,在單片機上能否
    的頭像 發(fā)表于 11-01 15:16 ?1210次閱讀