UNIX的Shell命令詳解

2021-04-02 10:48:15 字數 3896 閱讀 1106

1. 輸出入轉向

在 unix 中,每乙個 process 均有三個特殊的 file descriptor , 標準輸入

( standard input )、標準輸出 ( standard output )、標準錯誤輸出( standard

error )。這三個平常是接受 terminal 的輸入,而由 terminal 顯示出去。但是

unix 提供使用者可以使用一般的檔案或 pipe 來取代這些標準輸出入裝置。在

tcsh 裡頭,使用者可以利用">"和"<"來進行輸出入轉向的工作。

輸出轉向:

command > file

你可以將乙個指令的輸出結果轉向到乙個檔案,讓此檔案儲存這個 command

的輸出結果。

但是請注意,如果 file 已經存在在系統中,則 file 將會被蓋過。也就是

原先 file 的內容將會消失。

command >& file
與 > 相同,但是這個格式表示連 standard error 一起轉向。在 unix 中,

standard error 在 programer 的習慣是用來顯示 error 的發生,因此如果

沒有被轉向時, standard output 的結果將會被轉向到 file ,而 standard

error 的結果仍將顯示在 terminal 上。

command >> file
存在在系統中,則 standard output 的結果將會加到 file 的末端,如果 file

原先並不存在,則 file 將會被開啟而將 standard output 的結果存至 file

中。

command >>& file
輸入轉向

command < file

一般程式須要自終端機輸入資料,而你可以將程式所要輸入的資料統一

編入檔案中,利用轉向一併輸入。

set ignoreeeof

由於轉向輸出會有將現有檔案 overwrite 的危險,csh 與 tcsh 提供使用

者乙個方式來避免。

當你執行 set ignoreeeof 之後,如有輸出轉向到已存在之檔案時,它會

messege 。

個不存在的檔案時,又要如何呢?

我們只要在 ">" ">&" ">>" ">>&" 後面加上驚嘆號"!",成為 ">!" , ... 就

可以了。

2. pipe

如同前面說的轉向,pipe 也是在標準輸出入和標準示誤裝置間作取代動作,如

此一來可以將某乙個程式的輸出連到另乙個程式的輸入中。其語法如下:

command1 | command2 [ | command3 ....]

command1 |& command2 [ |& command3 ....] <--- 連 standard error 一起 pipe

3. 前景與背景

在 sh 下面,乙個新產生的 process 可以經由 command 後面的符號';'和'&'來分

別前景和背景。如以下語法

command
這表示產生乙個 foreground 的 process ,你要等到它結束才能再下另乙個指

令。

command &
這樣表示產生乙個 background 的 process ,它會給你乙個類似以下的訊息:
[1] 21304
然後就出現下乙個提示號,以供你給下乙個指令。然後在這個 background 的

process 結束的時候再給你乙個如下面的訊息,告訴你它把這個 process 執

行完畢了。

[1]    done                  command
command1 ; command2 ; command3
這樣表示你要求系統連續執行 command1 , command2 , command3 三個指令,

其中 command2 要等待 command1 , command3 要等待 command2 ,而你要等

待 command3 執行完畢才能下指令。

command1 & command2 & command3 &
這樣表示你要求系統連續執行 command1 , command2 , command3 三個指令,

而這三個指令都放在背景執行,彼此之間不需等待。

fg 與 bg
也許你會問,乙個已經執行的 process 可不可以由前景換背景,或由背景換

前景呢?

可以的。乙個在前景執行的 process ,你可以按 ctl-z 將 process 暫停,

系統會給你乙個訊息:

suspended
然後出現提示號。此時你可以使用 fg 將其恢復前景執行,或按 bg 將其改為

背景執行。

而如果有乙個 background 的 process , 你也可以用 fg 指令將其呼叫到前景

來。首先你需用 jobs 指令來觀查目前有多少在背景下的 proesses,然後根據

它所顯示出來的 job id 來決定將那乙個 process 放到前景。如使用

% fg %3 # 將第三個 job 放到 foreground 。
4. 別名 alias

在 csh 與 tcsh 中,提供 alias 的功能,使得使用者可以將常用卻冗長的

指令以其他的名字存起,不過不須像儲存變數一樣要在前面加乙個"$"。

alias 的格式:

alias aliasname string ....

alias aliasname 'string /!* string'

前面的乙個格式是把 aliasname 直接用來取代後面的 string ,然後如有任何

跟在後面的 argument 將會出現的其後。如下例:

% alias la ls -fa
例中的 la . 相當於 ls -f . ,然而如果僅是如此並不足夠,因此有後面的另

一種格式。後面的格式中的 /!* 代表將來會出現在 aliasname 後面的所有引數,

如下例:

% alias dir 'ls -flag /!* | more'
例中的 dir doc 相當於 ls -flag doc | more ,這樣可提供使用者在設計上更大

的彈性。

5. tcsh 的初始設定檔

tcsh 有兩個 initial 檔,乙個是 $home/.tcshrc , 乙個是 $home/.login 。

每乙個 tcsh 在被開啟時,它都會去執行所有位於 .tcshrc 中的命令,因此你

可以把所有的 alias , 變數設定都放到 .tcshrc 裡面去。在tcsh 起動的時候

便會自動的去執行這些對於你的環境的初始設定。

.login 只有在 tcsh 本身是乙個 login shell 的時候才會執行,它多半用來設

定一些只需在 login 的時候要執行的命令,如環境變數的設定,因環境變數在

設定之後,只要是其子 process 均會取得其環境,因此不須在每次開啟 shell 的

時候都重複執行。

tcsh 另有乙個結束設定檔,稱為 .logout ,是在每乙個 login shell 結束,

logout 所要執行的動作,其編輯的方法跟 .login , .tcshrc 完全一模一樣。

source 指令
如果要重新執行 .tcshrc 的內容,可以利用 source 指令來達到,此時就相

當於把該檔案中的所有內容重新在命令列輸入一遍。如下:

% source .login

Unix下常用shell命令

殺掉指定名稱的程序 k.sh ps ef grep 1 grep v grep awk xargs kill 9例 sh k.sh gjobs 系統庫路徑 usr include profile中設定環境變數 export oracle base ora inst profile中自定義命令 ali...

unix 中 ps ef命令詳解

ps ef 檢視正在活動的程序 ps ef grep abc 檢視含有 abc 的活動程序 ps ef grep v abc 檢視不含abc的活動程序 1 ps a 顯示現行終端機下的所有程式,包括其他使用者的程式。2 ps a 顯示所有程式。3 ps c 列出程式時,顯示每個程式真正的指令名稱,而...

unix打包壓縮命令詳解

linux下常見打包 壓縮 解壓命令 tar 解包 tar xvf filename.tar 打包 tar cvf filename.tar dirname 注 tar是打包,不是壓縮 gz解壓1 gunzip filename.gz 解壓2 gzip d filename.gz 壓縮 gzip f...