Shell終端命令行的重點知識

對于程序員來說,命令行是常用的工具,在Mac和Linux系統(tǒng)中,命令行使用的是Shell語言,對于常用的工具,我都喜歡選把它研究透徹,本文就是我在學習Shell語言時收集和總結(jié)的文檔,為了方便大家,現(xiàn)分享如下:

Linux命令格式

command [options] [arguments]

其中,各符號的表示的含意如下:

  • command:命令
  • options:選項;有2種表示法:
    1. --單詞:由前面2個-和2個(包含2個)以上的字母組成;
    2. -單字:前面1個-和1個字母組成;
  • argument:參數(shù)

在查看命令幫助時,會出現(xiàn)[],<>,|等符號,它們的含義如下:

  • []:表示是可選的;
  • <>:表示是可變化的;
  • x|y|z:表示只能選擇一個;
  • -abc:表示三個參數(shù)(或任何二個)的混合使用;
  • / :或者;

幫助命令

help  <Command>

適用于內(nèi)部命令

<Command>  –help/-h

適用于外部命令

man  <Command>

查看命令描述或手冊頁(Manual);
備注:
manual 手冊是分章節(jié)的;man # Command (#表示章節(jié)號)
各個章節(jié)的所講的內(nèi)容如下:

  1. 所有用戶可以使用的命令
  2. 系統(tǒng)內(nèi)核調(diào)用,不是每個命令都有系統(tǒng)調(diào)用(如:man 2 read
  3. 庫調(diào)用
  4. 特殊文件,如:/dev/tty1
  5. 文件格式(命令配置文件的語法,如:man 5 passwd
  6. 游戲相關(guān)
  7. 雜項
  8. 管理員命令,如:fdisk

man命令查詢操作參考《vi,vim用法》中的命令模式

man命令格式符意義:

  • []:可選內(nèi)容;
  • <>:必須給出內(nèi)容;
  • a|b|c:多選一;
  • :可以有多個;
info <Command>

有超鏈接的文檔,info 提供信息頁,提供作者、版本,什么時候發(fā)布等更詳細信息,man手冊是告訴你怎么用;

README
絕大多數(shù)程序都有相應(yīng)的幫助文檔,保存在 /usr/share/doc 文件夾中;

Shell的啟動配置文件

當我們登錄系統(tǒng)后,啟動 bash 程序,并且會讀取一系列稱為啟動文件的配置腳本,這些文 件定義了默認的可供所有用戶共享的 shell 環(huán)境。然后是讀取更多位于我們自己主目錄中的啟 動文件,這些啟動文件定義了用戶個人的 shell 環(huán)境。精確的啟動順序依賴于要運行的 shell 會 話類型。有兩種 shell 會話類型:一個是登錄 shell 會話,另一個是非登錄 shell 會話。

登錄 shell 會話會提示用戶輸入用戶名和密碼;例如,我們啟動一個虛擬控制臺會話。當我 們在 GUI 模式下運行終端會話時,非登錄 shell 會話會出現(xiàn)。

登錄 shell 會讀取一個或多個啟動文件,正如表 12 - 2 所示:

登錄shell會話的啟動文件.png

非登錄 shell 會話會讀取以下啟動文件:

非登錄shell會話的啟動文件.png

除了讀取以上啟動文件之外,非登錄 shell 會話也會繼承它們父進程的環(huán)境設(shè)置,通常是一個登錄 shell。
瀏覽一下你的系統(tǒng),看一看系統(tǒng)中有哪些啟動文件。記住-因為上面列出的大多數(shù)文件名 都以圓點開頭(意味著它們是隱藏文件),你需要使用帶 -a 選項的 ls 命令。
在普通用戶看來,文件 ~/.bashrc 可能是最重要的啟動文件,因為它幾乎總是被讀取。非 登錄 shell 默認會讀取它,并且大多數(shù)登錄 shell 的啟動文件會以能讀取 ~/.bashrc 文件的方式 來書寫。

Mac系統(tǒng)的Shell的配置文件

打開mac終端,輸入:

echo $SHELL
  • 如果輸出的是:csh 或者是 tcsh,那么你用的就是 C Shell。

  • 如果輸出的是:bash,sh,zsh,那么你的用的可能就是 Bourne Shell 的一個變種。

  • Mac OS X 10.2之前默認的是C Shell。

  • Mac OS X 10.3之后默認的是Bourne Shell。

在這里只介紹Bourne Shell(sh)關(guān)于配置文件的等級介紹。

在Bourne Shell下有三種配置文件,如下:

  • /ect/profile
  • /ect/bashrc
  • ~/.bash_profile

注意:

  • 有些文章說:Linux里邊是 .bashrc 而MAC 是 .bash_profile ,所以Mac下只需要設(shè)置 profile.bash_profile ,但是我發(fā)現(xiàn)mac下也有 /ect/bashrc 配置文件;

它們的作用如下:

  • /ect/profile(一般不建議修改這個文件)
    全局(公有)配置,不管是哪個用戶,登陸是都會讀取該文件。

  • ~/.bash_profile

    • 一般在這個文件中添加用戶級環(huán)境變量;
    • 若bash shell是以login方式執(zhí)行時,才會讀取此文件。該文件僅僅執(zhí)行一次默認情況下,他設(shè)置一些環(huán)境變量。
    • .bash_profile 中設(shè)置的配置信息只有在打開終端的時候執(zhí)行有效,終端關(guān)閉后,之前的設(shè)置的命令則無效;
  • /ect/bashrc(mac沒有此配置文件)

    • 全局(公有)配置,bash shell執(zhí)行時,不管是何種方式,都會讀取此文件。
    • 可以加入mysqlstart、mysql和mysqladmin命令的別名,保證每一個用戶都可以使用這3個命令。

應(yīng)該使用哪個配置文件

按照通常的規(guī)則,添加目錄到你的 變量或者是定義額外的環(huán)境變量,要把這些 更改放置到 文件中(或者其替代文件中,根據(jù)不同的發(fā)行版。例如,使用文件)。對于其它的更改,要放到 文件中。除非你是系統(tǒng)管理員,需要為系統(tǒng) 中的所有用戶修改默認設(shè)置,那么則限定你只能對自己主目錄下的文件進行修改。當然,有可 能會更改 目錄中的文件,比如說 文件,而且在許多情況下,修改這些文件也是明智 的,但是現(xiàn)在,我們要安全起見。

命令的查找目錄

當在終端直接輸入命令時,如:guobinyongMac:~ guobinyong$ ls,系統(tǒng)會在一些指定的目錄中查找相應(yīng)命令的可執(zhí)行文件,然后執(zhí)行查找到的可執(zhí)行文件;如果命令的可執(zhí)行文件不在默認的目錄中,則需要在輸入命令時寫出命令的路徑,如:

假設(shè)我需要執(zhí)行命令 gby,而 gby 文件在目錄./PATH/下,則需要這樣輸入命令:

guobinyongMac:~ guobinyong$ ./PATH/gby

這樣是不太方便的,如果不想輸入命令的路徑,則可以把命令的所在目錄配置為終端的命令查找目錄;

如何配置呢?通過PATH變量!

PATH變量中保存的是命令查找路徑的列表,目錄之間用冒號 : 分隔;配置方法如下:
在終端的配置文件 ~/.bash_profile (如果不存在,則創(chuàng)建該文件)中添加如下代碼:

export PATH=$PATH:新的路徑     //把您要添加的路徑寫在$PATH:后面

常用命令

export命令

export命令Shell內(nèi)建命令 export命令用于將shell變量輸出為環(huán)境變量,或者將shell函數(shù)輸出為環(huán)境變量。
一個變量創(chuàng)建時,它不會自動地為在它之后創(chuàng)建的shell進程所知。而命令export可以向后面的shell傳遞變量的值。當一個shell腳本調(diào)用并執(zhí) 行時,它不會自動得到原為腳本(調(diào)用者)里定義的變量的訪問權(quán),除非這些變量已經(jīng)被顯式地設(shè)置為可用。export命令可以用于傳遞一個或多個變量的值到任何后繼腳本。

語法:

export(選項)(參數(shù))

選項:

  • -f:代表[變量名稱]中為函數(shù)名稱;
  • -n:刪除指定的變量。變量實際上并未刪除,只是不會輸出到后續(xù)指令的執(zhí)行環(huán)境中;
  • -p:列出所有的shell賦予程序的環(huán)境變量。

參數(shù):

  • 變量:指定要輸出或者刪除的環(huán)境變量。

alias命令

Shell內(nèi)建命令 alias命令用來設(shè)置指令的別名。我們可以使用該命令可以將一些較長的命令進行簡化。使用alias時,用戶必須使用單引號''將原來的命令引起來,防止特殊字符導(dǎo)致錯誤。
alias命令的作用只局限于該次登入的操作。若要每次登入都能夠使用這些命令別名,則可將相應(yīng)的alias命令存放到bash的初始化文件/etc/bashrc中。

語法:

alias(選項)(參數(shù)) 

選項:

  • -p:打印已經(jīng)設(shè)置的命令別名。

參數(shù):
命令別名設(shè)置:定義命令別名,格式為命令別名='實際命令'

示例:
alias 的基本使用方法為:

alias 新的命令='原命令 -選項/參數(shù)' 

例如:alias l='ls -lsh'將重新定義ls命令,現(xiàn)在只需輸入 l 就可以列目錄了。直接輸入 alias 命令會列出當前系統(tǒng)中所有已經(jīng)定義的命令別名。

備注:
要刪除一個別名,可以使用 unalias 命令,如 unalias l。

問題解決方案

輸出目錄層級結(jié)構(gòu)

find . -print | sed -e 's;[^/]*/;|____;g;s;____|; |;g'

多個命令在一行中執(zhí)行

為了方便用戶一鍵操作,經(jīng)常會有將多個命令寫在一行的需求;這種需求的實現(xiàn)方式有多種,如下:

方式1:命令之間用;(分號)隔開

語法

命令 ; 命令

命令會依次執(zhí)行;

方式2:命令之間用&&隔開

語法

命令 && 命令

&& 是具有短路特性的邏輯與運算符;
應(yīng)用在兩個命令語句間表示:只有在前一個命令執(zhí)行成功后,才會執(zhí)行下一個;

方式3:命令之間用||隔開

語法

命令 || 命令

|| 是具有短路特性的邏輯或運算符;
應(yīng)用在兩個命令語句間表示:只有在前一個命令執(zhí)行失敗后,才會執(zhí)行下一個命令;

方式4:用()包裹

語法

(命令1;命令2)

開啟一個子Shell環(huán)境來執(zhí)行括號中的命令。

方式5:用{}包裹

語法

{ 命令1;命令2; }

在當前的Shell中執(zhí)行 {} 中的命令;

(){}的區(qū)別

相同點:

  • (){} 都是把一串的命令放在括號里面,并且命令之間用 ; 號隔開

不同點:

  • ()只是對一串命令重新開一個子shell進行執(zhí)行,{}對一串命令在當前shell執(zhí)行
  • ()最后一個命令可以不用分號,{}最后一個命令要用分號
  • ()里的第一個命令和左邊括號不必有空格,{}的第一個命令和左括號之間必須要有一個空格
  • (){}中括號里面的某個命令的重定向只影響該命令.但括號外的重定向則影響到括號里的所有命令
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,316評論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,481評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,241評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,939評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,697評論 6 409
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,182評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,247評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,406評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,933評論 1 334
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,772評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,973評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,516評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,209評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,638評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,866評論 1 285
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,644評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,953評論 2 373

推薦閱讀更多精彩內(nèi)容