在linux中,外殼是指“shell”,即存在於作業系統之上的“命令列解釋器”,是指一個面向使用者的命令接口,表現形式就是一個可以由使用者錄入的介面,這個介面也可以回饋運行資訊。 shell的作用:1、將使用者的指令翻譯給核心(kernel)處理;2、將核心(kernel)處理結果翻譯給使用者。
本教學操作環境:linux7.3系統、Dell G3電腦。
Linux的外殼程式稱作shell(命令列解釋器),是指一個面向用戶的命令接口,表現形式就是一個可以由用戶錄入的界面,這個界面也可以反饋運行信息
shell的作用是:
將指令翻譯到kernal
#將kernl處理結果翻譯給使用者
一般我們使用的shell為bash。
在解釋指令的時候,bash不會直接參與解釋,而是創建新進程進行命令的解釋,bash只用等待結果即可,這樣能保證bash進程的安全。
1.出現原因
##在使用linux時,我們都說linux相較於windows,linux沒有圖形化介面,是用命令列來操作。但是命令列的方式也並非是對電腦的直接操作。
我們知道電腦的底層其實就是由0和1組成,每個指令的傳達最終都會轉變為0,1訊號傳送給電腦讓電腦運作對應的指令。但如果讓大眾都用這種方式操作計算機,無疑會非常的困難。
2.作用
linux作業系統作為一個核心(kernel),使用者不能直接對其進行操作。而是透過shell來與電腦溝通。 「shell」的英文釋義有「外殼」的意思,即存在於作業系統之上的「命令列解釋器」,用於將用戶的命令翻譯給核心(kernel)處理,核心(kernel)再將處理結果翻譯給使用者
shell其實可以看做是使用者與作業系統之間的一位翻譯員,使用者與作業系統語言不通無法直接溝通,而是透過shell進行翻譯後進行對話
3.windows與linux的shell
圖形化介面進行相關操作
對我們的指令進行解析,將解析指令傳給linux內核,回饋結果再透過內核執行出結果,將結果透過shell解析給使用者
#4.存在意義
簡單的方式使用作業系統,學習成本也會大幅下降。
對使用者非法或無效指令的攔截,避免作業系統進行無用或有害的操作。例如我們在linux下輸入一串亂碼,shell就會將該指令攔截並回傳
#5.運行模式
#shell在執行指令時,會透過衍生子程序的方式執行使用者的指令,而shell本身一般並不會執行對應的指令。
可以將shell本身看做一個翻譯派遣公司的總裁,用戶有翻譯需求時就向shell發出請求,而shell作為一個派遣公司總裁,一般不會親自上門服務,而是派遣手下的其他翻譯人員去服務,以應對繁多複雜的需求。這些外派的翻譯人員就是一個個子流程。
1.linux權限的概念
權限就是作業系統中對用戶的限制
#在linux下,使用者分為兩種。一種是超級使用者,即root。另一種是普通用戶。
1.超級使用者(root)
root使用者有且僅有一個。 同時,root用戶擁有對該作業系統的最高權限。
可以認為,root使用者在作業系統就像是古代國家的皇帝,不受任何法律條文的約束。在root使用者下,執行任何指令都不會受到權限的限制。下可存取其他一般使用者的檔案並對其進行修改、刪除。上可執行刪除作業系統的根目錄,資料庫等會對作業系統造成嚴重損害乃至崩潰的操作
#因此,root帳號的密碼一定要設定的複雜並且儲存好。
root使用者的命令提示字元是「#」
#2.普通使用者
#普通用戶可以存在多個。普通用戶會受到權限的約束。這些權限約束來自於系統和root使用者。
普通使用者的命令提示字元是“$”
#在linux下,可以使用「su」指令切換使用者
在這裡,你要登入誰的帳號就要輸入該帳號的密碼。因此,每個帳戶的密碼都盡量要設定成不一樣的
要退出該帳戶的話,輸入注意:在一般使用者下“su”,需要輸入對應使用者的密碼。但是,在root用戶下“su”,無需輸入對應用戶密碼
(3)不切換用戶執行對應指令
如果我們是普通使用者,但此時我們需要
執行的一條指令需要root權限,而我們又不想切換使用者去執行,此時就可以使用
「sudo」指令。這個指令可以短暫的提升一般使用者的權限。 注意:
在輸入密碼時,是輸入本用戶的密碼,而不是root用戶的密碼但此時我們會出現以下報錯: 這就是因為該普通用戶並不是root的信任用戶,在root的對應文件中並不存在該普通用戶,導致無法進行“sudo”指令
2.linux權限管理“事物屬性」組成。 人指的是進行操作的使用者,事物屬性則是指檔案的屬性 (1)檔案訪客的分類(人)
在linux中,檔案的訪客分為三類:擁有者(onwer)
、所屬群組(group)、其他人(other)。與root使用者和一般使用者是一個具體的人
不同,檔案訪客中的三類是一個比較###抽象的概念###,可以看做是###一種角色# ##。即###其他使用者在該檔案下的身分。 ###例如,一個普通使用者在自己的目錄的檔案看來可能是所有者和所屬群組,但在其他使用者的檔案看來就可能是其他人#########1.所屬群組存在原因#########有人可能會疑惑,檔案的擁有者和其他人都好理解,###擁有者就是檔案的創建者###,###other就是除了創建者之外的使用者###,那文件的所屬群組有什麼意義呢? ###假如現在我們有團隊A和團隊B在同一台linux機器上開發產品,此時,團隊A的成員實現了一個模組,團隊領導想查看該模組內容。如果linux中存在owner和other,因為owner是我們自己,那麼領導者要查看程式碼時,我們就需要將other的權限放開。但另一個團隊也被該檔案視為other,放開other意味著不僅領導能看,另一個團隊也能看你的程式碼,就容易造成程式碼洩漏。為了避免這種情況,就需要所屬組。我們只需要將領導者新增為該檔案的所屬群組並放開所屬群組的權限即可,這樣就可以在無需開放other權限的情況下向領導開放程式碼
#現在我們有以上一個test.c文件,可以看到,在這個檔案檔案名稱前存在一大串的屬性。在之前,我們最多知道「Oct 25 16:43」是上次修改時間,100是該檔案是按位元組計算的該檔案磁碟佔用。但是前面的屬性我們就不認識了。
1.文件訪客
# 上文我們也提到了文件訪客的分類,其實在上圖的第一個root就代表擁有者,第二個root則是指所屬群組。而other則沒有顯示,因為除了這兩個使用者以外的使用者就屬於other,不必顯示
2.檔案類型
#我們都知道,在linux中,檔案的後綴是無意義的。因為linux不會透過檔案後綴來區分檔案類型。但這不意味著linux中沒有檔案類型。 linux的檔案類型透過「ll」顯示的屬性列中第一列中的第一個字元來區分。而在上圖中可以看到,在test和test.c的第一個字元分別是“d”和“-”的字元。而這兩個字元其實就是檔案的類型。
1)linux中的常見檔案類型
-:普通檔案
主要包含原始程式碼、函式庫檔案、可執行程式、文件壓縮包等
d:目錄檔案
#c:字元裝置檔案
主要為硬件,例如鍵盤、顯示器等
b:區塊裝置檔案
例如磁碟
l:連結檔案
以windows為例,桌面上的捷徑其實就是一種連結檔。捷徑連結對應軟體的啟動程式。在linux下,我們執行「ln -s a.out test」指令:
#此時就為a.out檔建立了一個連結檔test,而該檔案的開頭其實就是「l」,代表連結檔
如果我們要執行a.out文件,就可以使用test:
p:管道檔案
管道檔案涉及到進程間通訊 ,這裡就不詳講,現在只需要知道有這種檔案存在即可
3.檔案權限
##可以看到,這裡除了第一個字元是文件類型外,還剩下了9個字元。同時我們知道檔案訪客分為三類,而這9個字元中每三個字元就代表著一種訪客的存取權限。
(1)檔案權限分類
檔案權限分為三類即「r」、「w」、「x」。
“r”代表讀取,即閱讀該檔案。 “w”代表寫,即修改該檔案內容。 '“x”代表執行,即執行對應檔#
每個檔案的訪客權限都由這三個權限組成。 以「rwx」的方式排序。若對應的權限上為“-”,即未擁有該權限
#如上圖的權限“rwx -xr r-x” ,就表示擁有者有讀寫執行權限;所屬群組有讀寫權限,沒有執行權限;訪客有讀取和執行權限,沒有寫權限。這裡加空格只是為了方便區分,實際顯示不會有空格
(2)權限修改
1.逐一修改
#linux中的權限也是支援修改的,修改時要使用「chomd」指令。例如,我們要將下圖中的執行者權限修改為“-wx”,就可以執行“chomd u-r test”:##這種形式下,「u」代表擁有者,
「-」代表去掉對應權限。而“g”代表
所屬群組,“o”
代表其他人。如果想修改其他訪客權限,對應的修改「u」即可。如果想要加上某種權限,則可以將「-」變更為「 」
。當然,增刪權限時也可以用多訪客多權限
的形式,如「chmod u-rwx,g-rwx test」:
#如果想要修改所有訪客的權限
,也可以將「u、g、o」修改為「a 」帶上對應權限,這裡就不示範了。 2.修改檔案擁有者及所屬群組
修改檔案擁有者,需要有對應的權限,否則則需要使用「sudo」提權。修改檔案擁有者的指令為「chown 對應使用者檔案名稱」:
#如果要修改所屬群組,就使用「chgrp」
指令,使用方法和「chown」相同,這裡就不示範了
如果要同時修改擁有者和所屬群組
,就使用「chown 用戶名:用戶名檔案名稱」指令,使用方法也是一樣的: 這裡使用的是root用戶,使用無需sudo,普通用戶則需要sudo。 對於other,無需修改,因為除了擁有者和所屬群組以外的使用者就是other3.權限同時修改#我們說過,在計算機中,所以的指令都是0,1訊號的方式傳遞的。 權限存在有和無兩種狀態,也是由0,1組成的。 「rwx」就可以看做是「111」,「---」則可以看做是「000」。而這些
二進位如果轉換為八進位,則是「7」和「0」。由此,權限的八進制範圍可以看為是“[0, 7]”。在八進位中,“r”表示
4,“w”
表示2
,“x”表示1由此,在修改權限時,我們除了用「u-」這類形式去修改外,還可以以八進位的形式修改。即「chmod 三個訪客的八進位數字組合 檔案名稱」
。如「chmod 777 test」:
############這種修改方式,當需要修改多個訪客權限時,就比第一種逐一修改要方便######注意:這種方式如果不寫全,如寫###“7”###、###“35”###這種形式,系統是從後往前,即從###other->group->owner###的方向修改,因為此時###其他權限預設為0不顯示###。如下圖: ############其實新建目錄的起始權限是777,新建資料夾的起始權限是666。但是我們實際看到的卻不是這樣的。原因就在於建立檔案或目錄時會受到umask(權限遮罩)的影響。
umask值,也就是權限遮罩中存在的權限,系統會自動配置好。 在產生檔案或目錄時,都要去掉權限遮罩中的權限。
要查看umask值,直接輸入「umask」指令即可:
這裡的第一個0我們不用管,在第一個0後面的就是每個訪客要去掉的權限。即在系統的預設中,每個新建的檔案或目錄的擁有者無需去掉權限,所屬群組需要去掉2,也就是寫權限;其他人需要去掉2,也就是寫權限
#在檔案的起始權限666中去掉022,目錄的起始權限777中去掉022就是上圖的權限。
要注意,一般使用者和root使用者的umask值是不同的。 普通使用者的umask值為002,root使用者則是022
「umask 0對應權限」。如「umask 0444」:
可以看到,修改umask值後,新建的檔案的預設權限中的對應權限就被去掉了注意:umask值不是用初始權限去減權限值,而是去掉對應的權限。例如檔案的初始權限時666,此時我們將umask值修改為0111。如果用減法就會變成555,即“r-xr-xr-x”。但其實應該是去掉1對應的「x」權限,也就是仍是「666」權限,也就是「rw-rw-rw-」:
有人可能會疑惑,為什麼目錄的起始權限時777,而檔案的起始權限時666。原因就在於要進入目錄,需要的是執行權限,也就是「x」權限:
如果是在root使用者下執行上述操作,則可以進入無「x」權限的目錄,因為root使用者不受權限約束
相關推薦:《Linux影片教學》
以上是linux的殼指什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!