當我們每次進入linux系統時,總能使用到例如ll
之類的一些命令,這些命令並非bin目錄下的可執行檔案,而是linux發行版為我們預置的alias。那麼linux發行版究竟是什麼時候又是如何為我們配置的這些東西呢?想要直到這個問題,需要先來了解一下bash的幾種型別
登陸式bash:所謂的登入式bash就是當使用者以登入的方式啟動的bash,例如ssh
遠端登入,在命令列輸入bash -l
命令啟動乙個登入式child bash或者進入乙個docker容器docker exec -it $ bash -l
,注:這個登入的使用者是dockerfile中定義的user,如果沒定義預設是root
非登入式bash:與第一種相反,出現的場景有:在命令列輸入bash
命令啟動乙個非登陸式child bash或者進入容器docker exec -it $ bash
非互動式bash:這種出現的情況只有一種那就是執行shell指令碼。
針對不同的bash型別,linux會通過不同的配置檔案對其進行啟動配置,並且這些檔名稱都是固定的,linux會預設去執行這些檔案。
登入式bash首先會讀取全域性配置檔案/etc/profile,然後會依次尋找幾個檔案$home/.bash_profile, $home/.bash_login, $home/.profile,找到第乙個檔案就會執行,餘下的則會被忽略。全域性配置檔案不論你是哪個使用者登入都會執行,所以很多常用的別名都會在此配置,家目錄下的配置檔案更加偏向使用者個人的習慣。
非登入式bash只會執行家目錄下的.bashrc,之所以很多人覺得這兩類bash沒有區別是因為該檔案通常會去呼叫執行登入式bash的配置檔案。
非互動式bash即bash指令碼的執行並不會讀取任何配置檔案,但是由於它是乙個child bash所以它會繼承父bash的全域性環境變數(通過export配置的),但是alias是繼承不了的。
/etc/profile
~/.bash_profile
~/.bash_login
~/.profile
~/.bashrc
登入式bash√√
√(當前乙個配置檔案不存在時)
√(當前兩個配置檔案不存在時)
×非登入式bash××
××√非互動式bash××
×××我們登陸不同發行版的linux電腦會發現它們預設的命令提示符都不太相同。那麼這個究竟是在**配置的呢?其實這個配置是通過乙個叫做ps1的環境變數設定的。然後最終的顯示是由我們的終端讀取該變數進行渲染的。
下面先來看看我的配置,然後看下它是如何在終端渲染的:
export ps1='\[\e[36;1m\][\u@\h]\[\e[0m\] \w\$ '
顯示效果:
這個ps1環境變數配置我是設定在$home/.bash_profile中,當然如果你想讓所有的使用者都實現這個效果也可以設定在全域性啟動檔案(/etc/profile)中,不過一般這個是使用者個人習慣,最好不要汙染全域性檔案。
這個配置的含義是:\[\e[36;1m\]
代表後面文字是青藍色(36)並且加粗(1m)顯示,[\u@\h]
代表了某個使用者在哪個主機(也就是[hch@instance-mfw2qss3]),\[\e[0m\]
代表了後面的文字沒有字型顏色和特效。\w
代表了當前所在路徑的最後乙個目錄名
bash支援的顏色特效如下表所示,使用方式為\[\e[字型顏色;背景顏色;字型特效m\]
,這三者的順序不做強制要求,不填的話就按照預設效果顯示。
字型顏色碼
對應顏色
30黑色字型
31紅色字型
32綠色字型
33黃色字型
34藍色字型
35洋紅字型
36青色字型
37白色字型
背景顏色碼
對應顏色
40黑色背景
41紅色背景
42綠色背景
43黃色背景
44藍色背景
45洋紅背景
46青色背景
47白色背景
字型特效碼
對應特效
0無特效1加粗
4下劃線5閃爍
7反白顯示
8不可見
資訊引數碼
含義\u
當前使用者,和whoami命令等價
\h主機名,和hostname命令等價
\w當前目錄完整的路徑名,和pwd命令等價
\w當前目錄
\d當前日期,周月日格式例如 「tue may 26」
\t24小時制的當前時間
\t12小時制的當前時間
\@帶am或pm的12小時制當前時間
\j在此shell中通過按 ^z掛起的程序數
\l此shell的終端裝置名 (如"ttyp4")
\s當前使用的shell名,和echo $0等價
\n換行符
\r回車符
\#井號,用於提示符
\$美元符號,用於提示符
Bash 檔案系統
擴充套件檔案系統,使用虛擬目錄來操作硬體裝置,在物理裝置上按定長的塊來儲存資料。採用名為索引節點的系統來存放虛擬目錄中所儲存檔案的資訊。索引節點系統在每個物理裝置中建立乙個單獨的表 稱為索引節點表 來儲存這些檔案的資訊。儲存在虛擬目錄中的每乙個檔案在索引節點表中都有乙個條目。linux通過唯一的數值...
Bash的功能 執行啟動檔案
如果bash作為login shell呼叫時,它按順序讀取和執行以下檔案中的命令 通常,在 etc profile裡有這麼一句 if d etc profile.d then for i in etc profile.d sh doif r i then.i fidone unset i fi所以,...
理解檔案系統
以liunx下的ext2檔案系統為例 檔案系統說白了就是磁碟上進行檔案管理的系統。想要理解檔案系統我們就要對其構成進行分析。磁碟分為交換分割槽和正常儲存檔案的區域。交換分割槽是當記憶體不夠用時,將記憶體中的某個程序轉移到硬碟上儲存的時候使用的。而剩下的就是檔案系統分割槽了。檔案系統分割槽中分為dat...