?? unix的shell命令詳解.htm
字號(hào):
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>UNIX的Shell命令詳解</title>
<meta name="GENERATOR" content="Microsoft FrontPage 3.0">
<meta name="Microsoft Border" content="none">
</head>
<body background="../images/waybkgnd.gif" text="#C0C0C0" link="#00FF00" vlink="#C0C0C0">
<font SIZE="2">
<p></font><font size="6" color="#0080FF"><strong><u>UNIX的Shell命令詳解</u></strong></font></p>
<font SIZE="2">
<p></font><font size="3">1. 輸出入轉(zhuǎn)向</p>
<p>在 UNIX 中,每一個(gè) process 均有三個(gè)特殊的 file descriptor , 標(biāo)準(zhǔn)輸入</p>
<p>( standard input )、標(biāo)準(zhǔn)輸出 ( standard output )、標(biāo)準(zhǔn)錯(cuò)誤輸出( standard</p>
<p>error )。這三個(gè)平常是接受 terminal 的輸入,而由 terminal
顯示出去。但是</p>
<p>UNIX 提供使用者可以使用一般的檔案或 pipe
來取代這些標(biāo)準(zhǔn)輸出入設(shè)備。在</p>
<p>tcsh 里頭,使用者可以利用">"和"<"來進(jìn)行輸出入轉(zhuǎn)向的工作。</p>
<p></font> </p>
<pre> 輸出轉(zhuǎn)向:
command > file
</pre>
<pre> 你可以將一個(gè)指令的輸出結(jié)果轉(zhuǎn)向到一個(gè)檔案,讓此檔案儲(chǔ)存這個(gè) command
的輸出結(jié)果。
</pre>
<pre> 但是請(qǐng)注意,如果 file 已經(jīng)存在在系統(tǒng)中,則 file 將會(huì)被蓋過。也就是
原先 file 的內(nèi)容將會(huì)消失。
</pre>
<pre> command >& file
</pre>
<pre> 與 > 相同,但是這個(gè)格式表示連 standard error 一起轉(zhuǎn)向。在 UNIX 中,
standard error 在 programer 的習(xí)慣是用來顯示 error 的發(fā)生,因此如果
沒有被轉(zhuǎn)向時(shí), standard output 的結(jié)果將會(huì)被轉(zhuǎn)向到 file ,而 standard
error 的結(jié)果仍將顯示在 terminal 上。
</pre>
<pre> command >> file
</pre>
<pre> 此格示代表將 standard output 的結(jié)果 append 到 file 中。如果 file 已
存在在系統(tǒng)中,則 standard output 的結(jié)果將會(huì)加到 file 的末端,如果 file
原先并不存在,則 file 將會(huì)被開啟而將 standard output 的結(jié)果存至 file
中。
</pre>
<pre> command >>& filE
</pre>
<pre> 同上,不過此格式代表連 standard error 一起 append 到 file 之中。
</pre>
<pre> 輸入轉(zhuǎn)向
command < file
</pre>
<pre> 一般程式須要自終端機(jī)輸入資料,而你可以將程式所要輸入的資料統(tǒng)一
編入檔案中,利用轉(zhuǎn)向一并輸入。
</pre>
<pre> set ignoreeeof
由於轉(zhuǎn)向輸出會(huì)有將現(xiàn)有檔案 overwrite 的危險(xiǎn),csh 與 tcsh 提供使用
者一個(gè)方式來避免。
</pre>
<pre> 當(dāng)你執(zhí)行 set ignoreeeof 之後,如有輸出轉(zhuǎn)向到已存在之檔案時(shí),它會(huì)
發(fā)出一個(gè)檔案已存在的訊息。 而在處理 append 轉(zhuǎn)向上,如果已經(jīng) set
ignoreeeof ,則當(dāng)要 append 一個(gè)不存在的檔案,將會(huì)出現(xiàn)一個(gè) error
messege 。
</pre>
<pre> 然而如果我們當(dāng)真是要轉(zhuǎn)向蓋過一個(gè)已存在的檔案,或者是要 append 一
個(gè)不存在的檔案時(shí),又要如何呢?
</pre>
<pre> 我們只要在 ">" ">&" ">>" ">>&" 後面加上驚嘆號(hào)"!",成為 ">!" , ... 就
可以了。
</pre>
<pre> 2. Pipe
如同前面說的轉(zhuǎn)向,Pipe 也是在標(biāo)準(zhǔn)輸出入和標(biāo)準(zhǔn)示誤裝置間作取代動(dòng)作,如
此一來可以將某一個(gè)程式的輸出連到另一個(gè)程式的輸入中。其語法如下:
</pre>
<pre> command1 | command2 [ | command3 ....]
command1 |& command2 [ |& command3 ....] <--- 連 standard error 一起 pipe
</pre>
<pre>
3. 前景與背景
在 sh 下面,一個(gè)新產(chǎn)生的 process 可以經(jīng)由 command 後面的符號(hào)';'和'&'來分
別前景和背景。如以下語法
</pre>
<pre> command
</pre>
<pre> 這表示產(chǎn)生一個(gè) foreground 的 process ,你要等到它結(jié)束才能再下另一個(gè)指
令。
</pre>
<pre> command &
</pre>
<pre> 這樣表示產(chǎn)生一個(gè) background 的 process ,它會(huì)給你一個(gè)類似以下的訊息:
</pre>
<pre> [1] 21304
</pre>
<pre> 然後就出現(xiàn)下一個(gè)提示號(hào),以供你給下一個(gè)指令。然後在這個(gè) background 的
process 結(jié)束的時(shí)候再給你一個(gè)如下面的訊息,告訴你它把這個(gè) process 執(zhí)
行完畢了。
</pre>
<pre> [1] Done command
</pre>
<pre> command1 ; command2 ; command3
</pre>
<pre> 這樣表示你要求系統(tǒng)連續(xù)執(zhí)行 command1 , command2 , command3 三個(gè)指令,
其中 command2 要等待 command1 , command3 要等待 command2 ,而你要等
待 command3 執(zhí)行完畢才能下指令。
</pre>
<pre> command1 & command2 & command3 &
</pre>
<pre> 這樣表示你要求系統(tǒng)連續(xù)執(zhí)行 command1 , command2 , command3 三個(gè)指令,
而這三個(gè)指令都放在背景執(zhí)行,彼此之間不需等待。
</pre>
<pre> fg 與 bg
</pre>
<pre> 也許你會(huì)問,一個(gè)已經(jīng)執(zhí)行的 process 可不可以由前景換背景,或由背景換
前景呢?
</pre>
<pre> 可以的。一個(gè)在前景執(zhí)行的 process ,你可以按 Ctl-Z 將 process 暫停,
系統(tǒng)會(huì)給你一個(gè)訊息:
</pre>
<pre> Suspended
</pre>
<pre> 然後出現(xiàn)提示號(hào)。此時(shí)你可以使用 fg 將其恢復(fù)前景執(zhí)行,或按 bg 將其改為
背景執(zhí)行。
</pre>
<pre> 而如果有一個(gè) background 的 process , 你也可以用 fg 指令將其呼叫到前景
來。首先你需用 jobs 指令來觀查目前有多少在背景下的 proesses,然後根據(jù)
它所顯示出來的 job id 來決定將那一個(gè) process 放到前景。如使用
</pre>
<pre> % fg %3 # 將第三個(gè) job 放到 foreground 。
</pre>
<pre> 4. 別名 alias
在 csh 與 tcsh 中,提供 alias 的功能,使得使用者可以將常用卻冗長(zhǎng)的
指令以其他的名字存起,不過不須像儲(chǔ)存變數(shù)一樣要在前面加一個(gè)"$"。
</pre>
<pre> alias 的格式:
alias aliasname string ....
alias aliasname 'string \!* string'
</pre>
<pre> 前面的一個(gè)格式是把 aliasname 直接用來取代後面的 string ,然後如有任何
跟在後面的 argument 將會(huì)出現(xiàn)的其後。如下例:
</pre>
<pre> % alias la ls -Fa
</pre>
<pre> 例中的 la . 相當(dāng)於 ls -F . ,然而如果僅是如此并不足夠,因此有後面的另
一種格式。後面的格式中的 \!* 代表將來會(huì)出現(xiàn)在 aliasname 後面的所有參數(shù),
如下例:
</pre>
<pre> % alias dir 'ls -Flag \!* | more'
</pre>
<pre> 例中的 dir doc 相當(dāng)於 ls -Flag doc | more ,這樣可提供使用者在設(shè)計(jì)上更大
的彈性。
</pre>
<pre> 5. tcsh 的初始設(shè)定檔
tcsh 有兩個(gè) initial 檔,一個(gè)是 $HOME/.tcshrc , 一個(gè)是 $HOME/.login 。
</pre>
<pre> 每一個(gè) tcsh 在被開啟時(shí),它都會(huì)去執(zhí)行所有位於 .tcshrc 中的命令,因此你
可以把所有的 alias , 變數(shù)設(shè)定都放到 .tcshrc 里面去。在tcsh 起動(dòng)的時(shí)候
便會(huì)自動(dòng)的去執(zhí)行這些對(duì)於你的環(huán)境的初始設(shè)定。
</pre>
<pre> .login 只有在 tcsh 本身是一個(gè) login shell 的時(shí)候才會(huì)執(zhí)行,它多半用來設(shè)
定一些只需在 login 的時(shí)候要執(zhí)行的命令,如環(huán)境變數(shù)的設(shè)定,因環(huán)境變數(shù)在
設(shè)定之後,只要是其子 process 均會(huì)取得其環(huán)境,因此不須在每次開啟 shell 的
時(shí)候都重覆執(zhí)行。
</pre>
<pre> tcsh 另有一個(gè)結(jié)束設(shè)定檔,稱為 .logout ,是在每一個(gè) login shell 結(jié)束,
logout 所要執(zhí)行的動(dòng)作,其編輯的方法跟 .login , .tcshrc 完全一模一樣。
</pre>
<pre> source 指令
</pre>
<pre> 如果要重新執(zhí)行 .tcshrc 的內(nèi)容,可以利用 source 指令來達(dá)到,此時(shí)就相
當(dāng)於把該檔案中的所有內(nèi)容重新在命令列輸入一遍。如下:
</pre>
<pre> % source .login
</pre>
<p><a href="../hkbx!.htm"><strong><big>返回“新客補(bǔ)習(xí)”</big></strong></a></p>
</body>
</html>
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -