1.shell命令以及運行原理
我們都知道Windows以圖形化界面為交互方式,而Linux以命令行界面為交互方式。Windows和Linux的交互方式雖然不同,但本質(zhì)上是一樣的,圖形化界面和命令行界面都是為了讓用戶(hù)進(jìn)行相關(guān)操作,而圖形化界面和命令行界面就是我們所說(shuō)的“外殼程序”。

點(diǎn)擊加載圖片
Linux嚴格意義上說(shuō)的是一個(gè)操作系統,我們稱(chēng)之為“核心(kernel)“,但我們一般用戶(hù),不能直接使用kernel。
而是通過(guò)kernel的外殼程序,也就是所謂的shell,來(lái)與kernel溝通。
shell是什么?
shell是包裹在操作系統外部的軟件層,所以形象的稱(chēng)之為外殼程序。
而從技術(shù)角度,Shell的最簡(jiǎn)單定義是:命令行解釋器(commandInterpreter)主要包含:
將使用者的命令翻譯給核心(kernel)處理。
同時(shí),將核心(kernel)的處理結果翻譯給使用者。
那么我們如何理解shell?
對比windowsGUI,我們操作windows不是直接操作windows內核,而是通過(guò)圖形接口,點(diǎn)擊,從而完成我們的操作(比如進(jìn)入D盤(pán)的操作,我們通常是雙擊D盤(pán)盤(pán)符.或者運行起來(lái)一個(gè)應用程序)。
shell對于Linux,有相同的作用,主要是對我們的指令進(jìn)行解析,解析指令給Linux內核。反饋結果在通過(guò)內核運行出結果,通過(guò)shell解析給用戶(hù)。
如果shell接受到非法指令,可能會(huì )直接攔截,不會(huì )讓操作系統執行指令,從而達到保護操作系統的目的。
為了防止用戶(hù)的非法指令導致shell自身崩潰,shell一般都不會(huì )去執行對應的指令,而是讓子進(jìn)程去執行。
總結:shell是外殼程序,包裹在操作系統外層的軟件層,為命令行解釋/操作解釋?zhuān)瑢⒂脩?hù)的操作解釋交給操作系統,讓操作系統執行,執行完畢,將結果經(jīng)過(guò)shell再傳遞給用戶(hù)。
如果我們在終端輸入ls/usr/bin/bash-a:

點(diǎn)擊加載圖片
使用ls/usr/bin/bash-a,顯示的并不是shell而是bash,bash也是一種外殼程序。因為bash是centos上的外殼程序,而shell是外殼程序的統稱(chēng)。
2.Linux的用戶(hù)權限
1、權限概念引入
生活中,權限處處存在。比如騰訊視頻,有些視頻是vip才能看的;打游戲的時(shí)候,有些皮膚是需要錢(qián)買(mǎi)的,這些都是對人的限制。
有時(shí)訪(fǎng)問(wèn)的對象可能天然就沒(méi)有這種“屬性”。比如我想咬一口磁盤(pán)上的文件,這是不可能的。因為該事物沒(méi)有這一層屬性。所以我們基本可以得出結論:權限=人+事物屬性。
了解了基本概念,我們開(kāi)始學(xué)習Linux上的權限。
2、用戶(hù)分類(lèi)
Linux上,有兩種用戶(hù):root(超級用戶(hù))和普通用戶(hù)。
root(超級用戶(hù)):可以在linux下做任何事情,基本不受權限約束,且一臺機器上只有一個(gè)root用戶(hù)。
普通用戶(hù):在Linux下做有限的事情,可以有多個(gè)普通用戶(hù)。
超級用戶(hù)的命令提示符是“#”,普通用戶(hù)的命令提示符是“$”。
3、用戶(hù)切換
命令:su用戶(hù)名
功能:切換用戶(hù)
對于root用戶(hù)來(lái)說(shuō),使用su普通用戶(hù)可以直接切換到普通用戶(hù):

點(diǎn)擊加載圖片
但是對于普通用戶(hù)來(lái)說(shuō),使用su指令時(shí),會(huì )要求輸入root用戶(hù)的密碼:

點(diǎn)擊加載圖片
而對于普通用戶(hù)切換到超級用戶(hù)還有兩種方式:
su:從普通用戶(hù)切換到超級用戶(hù),所處工作目錄不變化,只單純地進(jìn)行身份變化。
su-:從普通用戶(hù)切換到超級用戶(hù),會(huì )改變工作目錄
對于su:

點(diǎn)擊加載圖片
對于su-:

點(diǎn)擊加載圖片
注:如果切換用戶(hù)后想要退出,可以按ctrl+d退出,回到之前的用戶(hù)。
4、用戶(hù)提權
使用普通用戶(hù)時(shí),有時(shí)會(huì )因為權限不夠,而導致某條指令無(wú)法執行。
若出現了報錯:Permissiondenied,意思是權限被拒絕。
面對這種情況可以單條指令進(jìn)行暫時(shí)提權:

點(diǎn)擊加載圖片
對于提權就要用到sudo指令,但是這個(gè)需要配置一下,不會(huì )配置的同學(xué)可以跳轉到這篇博客[Linux]普通用戶(hù)無(wú)法使用sudo指令的方法
sudo指令是讓普通用戶(hù)使用單條指令時(shí)暫時(shí)擁有root用戶(hù)的權限,使用后需要輸入當前普通用戶(hù)的密碼

點(diǎn)擊加載圖片
注:sudo的存活期一般為五分鐘,五分鐘內再次使用sudo指令無(wú)需輸入密碼。
3.Linux權限管理
對于Linux的權限管理,我們主要圍繞一張圖進(jìn)行學(xué)習:

點(diǎn)擊加載圖片
3.1.文件訪(fǎng)問(wèn)者的角色劃分
對于Linux文件的訪(fǎng)問(wèn)者可以分成三類(lèi):
文件擁有者:文件和文件目錄的所有者,u——user
文件所屬組:文件和文件目錄的所有者所在組的用戶(hù),g——group
文件的other:其它用戶(hù),除了擁有者和所屬組之外的用戶(hù),o——others
Linux任何一個(gè)文件都一定有文件的擁有者和other,擁有這個(gè)文件的就是擁有者,除了擁有者之外的其他用戶(hù)就是other。
但是所屬組是什么?為什么要存在所屬組?
在某個(gè)公司當中有兩個(gè)小組團隊(A組、B組)在同一個(gè)Linux服務(wù)器上進(jìn)行著(zhù)同一款項目的開(kāi)發(fā)(賽馬機制),而張三是A組當中的一員。
張三寫(xiě)完了代碼,組長(cháng)要看,但是這里L(fēng)inux不考慮所屬組的概念,只有擁有者和other,張三是擁有者,那么組長(cháng)屬于other。給組長(cháng)開(kāi)放權限也就是給other開(kāi)權限,組長(cháng)可以看了,但是B組也是other就也能看到了,這里也就涉及到了權限安全問(wèn)題。
所以L(fǎng)inux引入了所屬組的概念,讓擁有者為組內成員開(kāi)放權限,給組里的人看,其他人還是other,其他人看不了。這樣子權限安全問(wèn)題就減少了。更靈活的進(jìn)行權限配置,滿(mǎn)足團隊協(xié)作。
梳理一下用戶(hù)和文件訪(fǎng)問(wèn)者的關(guān)系:
用戶(hù)就是root和普通用戶(hù),是人。而擁有者、所屬組、other是角色。
人可以扮演不同的角色,但是角色可以一直變化。用戶(hù)可以是擁有者、所屬組、other中的任意一個(gè),但是角色不可能稱(chēng)為人。
3.2.文件類(lèi)型和訪(fǎng)問(wèn)權限
我們之前學(xué)習的第一個(gè)指令就是ls指令,ll可以列出文件詳細信息:

點(diǎn)擊加載圖片
那么先開(kāi)始的一長(cháng)串10個(gè)字符是什么意思呢?就比如:-rw-rw-r--
這10個(gè)字符可以分為兩組:第一個(gè)字符和后九個(gè)字符。分別對應著(zhù)文件類(lèi)型和文件訪(fǎng)問(wèn)權限。
a、文件類(lèi)型(后綴理解+file指令講解)
第一個(gè)字符為文件類(lèi)型??赡艽蠹視?huì )有些疑惑,文件類(lèi)型不是由文件后綴來(lái)區別的嗎?
我們通過(guò)樣例求證一下,Linux中文件類(lèi)型是否是由文件后綴來(lái)區別的:
首先,nano一個(gè)test.c,向其中輸入代碼,編譯運行:

點(diǎn)擊加載圖片
程序可以跑過(guò),那么我修改一下a.out的文件后綴呢?

點(diǎn)擊加載圖片
程序依然可以跑過(guò),這就證明Linux上文件類(lèi)型和后綴無(wú)關(guān)。
但是再修改test.c的后綴呢,test.c還能編譯過(guò)嗎?

點(diǎn)擊加載圖片
這里卻報錯了,是因為我們證明結果錯誤嗎?其實(shí)并不是,這是因為在Linux下文件后綴不用來(lái)標識文件類(lèi)型,不代表gcc這個(gè)軟件不需要后綴。系統不管,但不代表操作文件的軟件不關(guān)心。
說(shuō)到這,那么我們怎么理解Linux中的文件后綴呢?
文件后綴是給用戶(hù)看的,讓用戶(hù)確定文件是什么類(lèi)型。將后綴看做文件名的一部分。
文件類(lèi)型大約被分為如下幾類(lèi):
-:普通文件,文本,可執行程序,庫、歸檔文件(壓縮包)等平常帶后綴的文件,在Linux下統一被稱(chēng)為普通文件
d:文件夾,目錄
l:軟鏈接(類(lèi)似Windows的快捷方式)
b:塊設備文件(例如磁盤(pán)、光驅等)
p:管道文件(用來(lái)進(jìn)行通信的)
c:字符設備文件(例如鍵盤(pán)或顯示器)
s:網(wǎng)絡(luò )套接字socket文件
比如:字符設備文件

點(diǎn)擊加載圖片
file指令:
在Linux中,file指令能辨識文件類(lèi)型。
語(yǔ)法:file[選項]文件或目錄…
常用選項:
-c詳細顯示指令執行過(guò)程,便于排錯或分析程序執行的情形。
-z嘗試去解讀壓縮文件的內容。
可執行程序:

點(diǎn)擊加載圖片
空文件:

點(diǎn)擊加載圖片
b、文件訪(fǎng)問(wèn)權限
后9個(gè)字符為文件訪(fǎng)問(wèn)權限。9個(gè)字符,每三個(gè)一組,分別代表著(zhù)擁有者、所屬組、other的權限。
r——讀:Read對文件而言,具有讀取文件內容的權限;對目錄來(lái)說(shuō),具有瀏覽該目錄信息的權限,權值為4.
w——寫(xiě):Write對文件而言,具有修改文件內容的權限;對目錄來(lái)說(shuō)具有刪除移動(dòng)目錄內文件的權限,權值為2.
x——可執行:execute對文件而言,具有執行文件的權限;對目錄來(lái)說(shuō),具有進(jìn)入目錄的權限,權值為1。
-:表示不具有該項權限
-rw-rw-r–:后九個(gè)字符就代表著(zhù),擁有者具有讀、寫(xiě)權限,不具有執行權限;所屬組具有讀、寫(xiě)權限,不具有執行權限;other具有讀權限,不具有寫(xiě)、執行權限。
在使用文件時(shí),只能用一種身份對文件進(jìn)行處理,比如:作為擁有者:r--作為所屬組:rw-;雖然兩個(gè)身份都是我,但此時(shí)我只能作為擁有者只讀文件。除非擁有者變成其他人,我才能作為所屬組讀寫(xiě)文件。
4.文件訪(fǎng)問(wèn)權限的更改
文件訪(fǎng)問(wèn)權限的修改主要分為對擁有者、所屬組、other權限的更改和對文件擁有者的更改和對文件所屬組的用戶(hù)的更改。
一般來(lái)說(shuō)更改一個(gè)文件的權限,必須是文件的擁有者或者是root用戶(hù)。
1.chmod指令(對擁有者、所屬組、other權限的更改)
功能:設置文件的訪(fǎng)問(wèn)權限
格式:chmod[參數]權限文件名
常用選項:
R->遞歸修改目錄文件的權限
chmod命令設置權限的格式:
chmodu/g/o/a±=rwxfilename
+:向權限范圍增加權限代號所表示的權限
-:向權限范圍取消權限代號所表示的權限
=:向權限范圍賦予權限代號所表示的權限
用戶(hù)符號:
u:擁有者
g:所屬組
o:其它用戶(hù)
a:所有用戶(hù)
字符表示法表:

點(diǎn)擊加載圖片
對單個(gè)用戶(hù)的權限進(jìn)行更改:chmod用戶(hù)±權限文件名

點(diǎn)擊加載圖片
對多個(gè)用戶(hù)的權限進(jìn)行修改:chmod用戶(hù)±權限,用戶(hù)±權限,…(上限三個(gè),擁有者、所屬組、other)文件名

點(diǎn)擊加載圖片
對全部用戶(hù)進(jìn)行權限修改:chmoda±用戶(hù)權限文件名

點(diǎn)擊加載圖片
對用戶(hù)進(jìn)行=方式權限修改:例如u=g,就是讓擁有者獲得所屬組對等的權限

點(diǎn)擊加載圖片
chmod三位八進(jìn)制filename
通常寫(xiě)作chmod三位八進(jìn)制用戶(hù)名的形式,每個(gè)八進(jìn)制按順序分別表示擁有者、所屬組、other,三個(gè)八進(jìn)制組成的序列就可以表示各角色的權限。
r權限權值為4,w權值為2,x權值為1。
八進(jìn)制數值表示法表:

點(diǎn)擊加載圖片
舉個(gè)例子:614
擁有者:6=4+2+0,設置擁有者有讀權限,有寫(xiě)權限,無(wú)執行權限。
所屬組:1=0+0+1,設置所屬組無(wú)讀權限,無(wú)寫(xiě)權限,有執行權限。
other:4=0+4+0,設置other無(wú)讀權限,有寫(xiě)權限,無(wú)執行權限。
聯(lián)系客服