Shell入門:掌握Linux,OS X,Unix的Shell環境

發表於2015-04-05

在Linux或類Unix系統中,每個使用者和程式都執行在一個特定環境中。這個環境包含了變數、設定、別名、函式以及更多的東西。下面是對Shell環境下一些常用命令的簡單介紹,包括每個命令如何使用的例子,以及在命令列下設定你自己的環境來提高效率。

找出你當前的shell

在終端應用中輸入下面命令中的任意一個:

或者

輸出範例:

圖1:找出當前的shell

找出所有已安裝的shell

找到已安裝shell的完整路徑:

輸出範例:

圖2:找出shell的路徑

檔案/etc/shells裡包含了系統所支援的shell列表。每一行代表一個shell,是相對根目錄的完整路徑。用這個cat命令來檢視這些資料:

輸出範例:

臨時改變當前shell

只需要輸入shell的名字。在下面的例子裡,我從bash切換到了zsh:

這只是臨時改變了系統shell。也叫做子shell。要從子/臨時shell退出,輸入下面的命令或者按下CTRL-D:

找出子shell的層級或臨時shell的巢狀層級

每個bash例項啟動後,變數$SHLVL的值都會加一。輸入下面的命令:

示例輸出:

圖3:Bash shell巢狀層級(子shell數目)

通過chsh命令永久變更系統shell

想要把當前系統shell從bash永久換成zsh?試試這個:

想把其他使用者的shell從bash永久換成ksh?試試這個:

檢視當前的環境變數

你需要用到:

示例輸出:

下面是bash shell裡一些常見變數的列表:

圖4:常見bash環境變數

注意:下面這些環境變數沒事不要亂改。很可能會造成不穩定的shell會話:

SHELL

UID

RANDOM

PWD

PPID

SSHAUTHSOCK

USER

HOME

LINENO

顯示環境變數的值

使用下面任意一條命令顯示環境變數HOME的值:

示例輸出:

增加或設定一個新環境變數

下面是bash,zsh,sh和ksh的語法:

然後,使用printenv或者echo或printf命令檢視環境變數PATH,EDITOR,和TMOUT的值:

怎麼修改一個現有的環境變數?

下面是語法:

tcsh shell下增加和修改變數的語法是下面這樣的:

找出bash shell的配置檔案

用下面的命令列出bash shell的檔案:

示例輸出:

圖5:列出bash的所有配置檔案

要檢視所有的bash配置檔案,輸入:

可以使用文字編輯器比如vim或emacs來一個一個編輯bash配置檔案:

編輯/etc/目錄下的檔案,輸入:

被Bash shell初始化過程中應用的檔案搞糊塗了嗎?

下面的”bash初始化檔案”流程圖應該有些幫助:

根據賬戶設定的預設shell,你的使用者配置或系統配置可能是下面其中一種:

找出zsh shell配置檔案

zsh的wiki中建議用下面的命令:

示例輸出:

輸入下面的命令列出你的zsh shell檔案:

檢視所有zsh配置檔案:

找出ksh shell配置檔案

  1. 檢視~/.profile或者/etc/profile檔案。

找出tcsh shell配置檔案

  1. C shell檢視~/.login,~/.cshrc檔案。
  2. TC shell檢視~/.tcshrc和~/.cshrc檔案。

我可以寫個類似這樣每次登入時都自動執行的指令碼嗎?

是的,把你的命令或別名或其他設定新增到~/.bashrc(bash shell)或者~/.profile(sh/ksh/bash)或者~/.login(csh/tcsh)檔案中。

我可以寫個類似這樣每次登出都自動執行的指令碼嗎?

是的,把你的命令或別名或其他設定新增到~/.bash_logout(bash)或者~/.logout(csh/tcsh)檔案。

history:獲取關於shell會話的更多資訊

輸入history命令來檢視本次會話的歷史:

示例輸出:

輸入history 20來檢視命令歷史的後20條:

示例輸出:

圖6:在bash shell中使用history命令檢視會話歷史

你可以重複使用之前的命令。簡單地按下[上]或[下]方向鍵就可以檢視之前的命令。在shell提示符下按下[CTRL-R]可以向後搜尋歷史快取或檔案來查詢命令。重複最後一次命令,只需要在shell提示符下輸入!!就好了:

在以上的歷史記錄中找到命令#93 (hddtemp /dev/sda),輸入:

使用sudo或su改變使用者

下面是語法:

看看帖子”Linux下使用其他使用者身份執行命令“更多地瞭解sudo,su和runuser命令。

shell別名

別名僅僅是命令的一個快捷方式。

列出所有的別名

輸入下面的命令:

示例輸出:

設定一個別名

bash/zsh語法:

對於命令clear可以輸入c別名,這樣我們就可以輸入c代替clear命令來清空螢幕:

或者輸入down來關閉基於Linux的伺服器:

你可以設定任意多的別名。看下”Linux/Unix/Mac OS X系統中的30個方便的bash shell別名“瞭解在類Unix系統中別名的實際應用。

shell函式

Bash/ksh/zsh函式允許你更進一步地配置shell環境。在這個例子中,我寫了一個簡單的名叫memcpu()的bash函式,用來顯示前10個最佔用CPU和記憶體的程式:

輸入memcpu就可以在螢幕上看到下面的資訊:

看下”如何編寫和應用shell函式“瞭解更多資訊。

綜合一下:定製你自己的Linux或Unix bash shell工作環境

現在,你將使用bash shell配置自己的環境。我只介紹bash。但是理論上zsh,ksh和其他常用shell都差不多。讓我們看看如何調整shell來適合我作為系統管理員的需求。編輯你的~/.bashrc檔案來附加設定。下面是一些常用的配置選項。

#1: 設定bash路徑和環境變數

使用less或more命令作為翻頁器:

設定vim作為預設文字編輯器:

設定Oracle資料庫特別要求的引數:

設定JAVA_HOME和其他java路徑,比如java版本:

使用金鑰實現免密碼登入讓ssh遠端登入更安全:

最後,開啟bash命令補齊

#2: 設定bash命令提示符

設定定製的bash提示符(PS1):

#3: 設定預設檔案許可權

#4: 調整shell命令歷史設定

#5: 設定shell會話的時區

#6: 設定shell行編輯介面

#7: 設定自己喜好的別名

下面是一些額外的OS X Unix bash shell別名:

#8: 寡人好色

#9: 設定自己喜好的bash函式

#10: 通過shell shopt命令設定bash shell行為

最後,你可以使用set和shopt命令調整bash shell環境

總結

這個帖子不難理解。它簡短地將如何定製使用者環境從頭介紹了一下。要深入瞭解bash/ksh/zsh/csh/tcsh/的能力,我建議你用下面的命令閱讀man文件:

相關文章