自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

對話 UNIX: 從簡單的按鍵操作學(xué)起

系統(tǒng) 其他OS
用戶與計(jì)算機(jī)交互的方式在不斷發(fā)生變化。啟動后提供純命令行界面的操作系統(tǒng)已逐漸演化為圖形化前端。但是,脫離構(gòu)成操作系統(tǒng)的構(gòu)建塊有時并非是邁向正確方向的必要步驟。
用戶與計(jì)算機(jī)交互的方式在不斷發(fā)生變化。啟動后提供純命令行界面的操作系統(tǒng)已逐漸演化為圖形化前端。但是,脫離構(gòu)成操作系統(tǒng)的構(gòu)建塊有時并非是邁向正確方向的必要步驟。IBM? AIX? 操作系統(tǒng)一直把握著重點(diǎn):穩(wěn)定性、功能和穩(wěn)健性。它通過保留強(qiáng)大的命令行界面 (CLI) 來實(shí)現(xiàn)這一目標(biāo)。如果您未曾學(xué)習(xí)如何使用 CLI 或需要復(fù)習(xí) CLI 的基礎(chǔ)知識,請繼續(xù)往下閱讀。

用戶與計(jì)算機(jī)交互的方式在不斷發(fā)生變化。啟動后提供純命令行界面的操作系統(tǒng)已逐漸演化為圖形化前端。然而,脫離構(gòu)成操作系統(tǒng)的構(gòu)建塊有時并非是邁向正確方向的必要步驟。向圖形化用戶界面 (GUI) 過渡往往意味著損失功能;而且,用戶漸漸傾向于不愿詳細(xì)了解他們所使用的計(jì)算機(jī)。幸運(yùn)的是,與其他 UNIX? 和 Linux? 系統(tǒng)類似,AIX 操作系統(tǒng)一直把握著重點(diǎn):計(jì)算機(jī)操作系統(tǒng)的穩(wěn)定性、功能和穩(wěn)健性。

大量 UNIX 和 Linux 供應(yīng)商已充分認(rèn)識到操作系統(tǒng)的 CLI 的重要性。但是,出于自動化、降低用戶使用計(jì)算機(jī)的難度或其他原因,用戶已忘記或從未了解 CLI 的細(xì)節(jié)。本文向新用戶和已經(jīng)遺忘細(xì)節(jié)的用戶介紹 CLI,以幫助他們記住或回想起 CLI 對于管理、開發(fā)和常規(guī) UNIX 計(jì)算之所以重要的原因。

什么是命令行?
在計(jì)算機(jī)上工作時,了解實(shí)際使用的工具非常重要。如果您曾經(jīng)使用過 UNIX 或 Linux,那么您應(yīng)該聽說過術(shù)語 shell 或 命令行。這兩個術(shù)語可以作為同義詞使用,并且指的是用戶正在運(yùn)行的實(shí)際 UNIX shell。UNIX 中的術(shù)語 shell 指的是您在鍵入命令或執(zhí)行功能時所使用的接口。

當(dāng)用戶通過控制臺或網(wǎng)絡(luò)登錄 UNIX 系統(tǒng)時,將調(diào)用可定義 shell(位于 /etc/passwd),并通過配置文件設(shè)置用戶環(huán)境(本文稍后將進(jìn)行說明),于是用戶準(zhǔn)備好在 shell 中執(zhí)行操作。當(dāng)用戶在命令行(即用戶正在使用的 shell)中鍵入命令時,用戶只能看到 stdin(即標(biāo)準(zhǔn)輸入),這是用戶或程序提供的輸入。當(dāng)用戶按 Enter 或 Return 鍵時,通過 shell 發(fā)送 stdin 以執(zhí)行命令,然后用戶可能收到 stdout(即標(biāo)準(zhǔn)輸出)和 stderr(即標(biāo)準(zhǔn)錯誤),具體取決于輸出重定向的方式(例如,重定向到用戶的顯示器、文件或打印機(jī))。術(shù)語 stdout 表示執(zhí)行的程序所返回的輸出數(shù)據(jù),而 stderr 指的是程序遇到或返回的錯誤。用戶不會看到處理單個或多個命令的所有底層代碼的執(zhí)行情況,而是看到非常簡單化的輸入、輸出和錯誤。由于上述原因,用戶登錄時調(diào)用的程序被恰當(dāng)?shù)胤Q為 shell,因?yàn)樗[藏了操作系統(tǒng)的所有底層調(diào)用。

shell 的歷史
UNIX shell 至今存在的時間已超過 35 年,它現(xiàn)在仍然在發(fā)展壯大!它創(chuàng)始于 1971 年,這一年 AT&T 貝爾實(shí)驗(yàn)室的 Ken Thompson 創(chuàng)建了第一個 UNIX shell,它具有貼切的名稱 Thompson shell。雖然 Thompson shell 缺少人們?nèi)粘J褂玫?UNIX 所具備的一些重要內(nèi)置功能,如管道 (|)、編寫 shell 腳本的能力和 if 條件語句,但是該 shell 的基礎(chǔ)功能(如數(shù)據(jù)重定向)仍存在于現(xiàn)今使用的 shell 中。
后來,在 1997 年,Thompson shell 被 Bourne shell(即 sh)所取代。Bourne shell 是由 AT&T 貝爾實(shí)驗(yàn)室的 Stephen Bourne 創(chuàng)建的,它成為 UNIX 第 7 版 (V7) 的缺省 shell。Bourne shell 使 UNIX 的發(fā)展向前邁進(jìn)了一大步。到這時,用戶可以編寫 shell 腳本,在變量中存儲信息和導(dǎo)出信息,控制文件描述符,控制信號處理,使用 for 循環(huán)和 case 語句,以及其他大量功能。雖然 Bourne shell 創(chuàng)建至今已有 30 多年時間,目前它仍在大量的 UNIX 系統(tǒng)中廣為使用,并且是當(dāng)今許多 UNIX 系統(tǒng)的超級用戶 -root- 的缺省 shell。
在過去三十年中,UNIX shell 獲得了許多改進(jìn)和增強(qiáng)。結(jié)果,出現(xiàn)了多種不同的 shell。圖 1 顯示了少數(shù) UNIX shell 的家族樹。雖然該圖并不完整,但它顯示了衍生出其他較次要 shell 的那些主要 shell。

  圖 1. UNIX shell 家族樹

 

#p#

Korn shell
1982 年,AT&T 貝爾實(shí)驗(yàn)室的 David Korn 開發(fā)了 Korn shell(即 ksh)。Korn shell 與許多其他 shell 類似,向后兼容 Bourne shell (sh)。在超過 25 年的發(fā)展歷程中,它已進(jìn)化為強(qiáng)健、穩(wěn)定和非??煽康?shell。IBM 在 AIX 中使用 Korn shell 作為其缺省 shell。Korn shell 共有兩個版本,它們均包含在 AIX 中。
第一種是 AIX 普通用戶的缺省 shell,即標(biāo)準(zhǔn) ksh shell。Korn shell 符合計(jì)算機(jī)環(huán)境的可移植操作系統(tǒng)接口標(biāo)準(zhǔn) (POSIX),這是操作系統(tǒng)的國際標(biāo)準(zhǔn)。
AIX 提供的第二種 Korn shell 是增強(qiáng) Korn shell,稱為 ksh93。除標(biāo)準(zhǔn) Korn shell 所擁有的所有強(qiáng)大功能外,增強(qiáng) Korn shell 還包含如下功能:
" 算術(shù)增強(qiáng)
" 復(fù)合變量
" 復(fù)合賦值
" 關(guān)聯(lián)數(shù)組
" 變量名引用
" 參數(shù)擴(kuò)展
" 規(guī)程函數(shù)
" 函數(shù)環(huán)境
" PATH 搜索規(guī)則
" shell 歷史記錄
" 其他內(nèi)置命令
有關(guān) ksh93 增強(qiáng)功能以及 ksh 與 ksh93 之間差異的完整列表,請參閱參考資料。

使用 ksh 設(shè)置命令行環(huán)境
在介紹如何使用 ksh 編輯命令行之前,必須設(shè)置您的環(huán)境。根據(jù)您的喜好來設(shè)置 Korn shell 相當(dāng)簡單:登錄到 ksh 下時,使用帶有 -o 開關(guān)的 set 命令來查看您的當(dāng)前設(shè)置:
# set -o

  Current option settings are:
  allexport        off
  bgnice           on
  emacs            off
  errexit          off
  gmacs            off
  ignoreeof        on
  interactive      on
  keyword          off
  markdirs         off
  monitor          on
  noexec           off
  noclobber        off
  noglob           off
  nolog            off
  notify           off
  nounset          off
  privileged       off
  restricted       off
  trackall         off
  verbose          off
  vi               off
  viraw            on
  xtrace           off

下面簡單介紹各項(xiàng)設(shè)置。(您也可以通過運(yùn)行 man set 找到這些說明。)
  " allexport:自動導(dǎo)出所有定義的后續(xù)變量。
  " bgnice:在后臺以更低的優(yōu)先級運(yùn)行所有進(jìn)程。
  " emacs:編輯輸入的命令行文本時,使用 emacs 風(fēng)格的行內(nèi)編輯器。
  " errexit:如果某個命令產(chǎn)生非 0(零)的退出狀態(tài)并且設(shè)置了 ERR 陷阱,則執(zhí)行 ERR 陷阱并退出。
  " gmacs:編輯輸入的命令行文本時,使用 gmacs 風(fēng)格的行內(nèi)編輯器。
  " ignoreeof :忽略文件結(jié)束字符,并且不退出 shell。如果用戶想要退出,則必須鍵入 exit 命令或按 11 次 Ctrl-D。
  " keyword :此選項(xiàng)將命令的所有參數(shù)放入環(huán)境中,而不僅僅放入命令之前的參數(shù),使用 set 命令可以查看這些參數(shù)。
  " markdirs:在來自文件名替換的所有目錄的末尾添加一個正斜杠 (/)。
  " monitor:將所有后臺進(jìn)程作為獨(dú)立進(jìn)程運(yùn)行,并在進(jìn)程結(jié)束時向 stdout 輸出一行信息以通知用戶。
  " noexec:不執(zhí)行命令。僅檢查語法錯誤。
注意:此參數(shù)在交互式 shell 中無效。
  " noclobber :當(dāng)輸出重定向到現(xiàn)有文件時,此標(biāo)記可阻止截?cái)噙@些文件。然而,啟用此選項(xiàng)后,如果使用大于號加管道符號 (>|),則仍然會發(fā)生截?cái)唷?BR>  " noglob:禁用文件名替換。
  " nolog:如果使用此選項(xiàng),則函數(shù)定義不會存儲在歷史文件中。
  " nounset:如果執(zhí)行替換,則所有未設(shè)置參數(shù)都作為錯誤返回。
  " restricted :運(yùn)行受限制的 shell。用戶無法執(zhí)行下列操作:更改目錄;更改 SHELL、ENV 或 PATH 變量;執(zhí)行在文件名中包含正斜杠 (/) 的命令;或重定向輸出。
  " trackall:每個命令在最初運(yùn)行時都作為被跟蹤的別名。
  " verbose:當(dāng) shell 讀取輸入行時,向 stdout 顯示所有這些行。
  " vi:編輯輸入的命令行文本時,使用 vi 風(fēng)格的行內(nèi)編輯器。
  " viraw:鍵入字符時,將每個字符處理成在 vi 編輯器下輸入的原樣。
  " xtrace:執(zhí)行命令時,向 stdout 顯示所有命令和參數(shù)。
若要開啟內(nèi)置命令集選項(xiàng),請使用 -o 開關(guān)。相反,如果改變主意,可以使用 +o 開關(guān)關(guān)閉這些選項(xiàng)。
本文將重點(diǎn)講述的主要選項(xiàng)是行內(nèi)編輯器開關(guān)。根據(jù)個人喜好不同,人們往往偏愛 vi、emacs 或 gmacs 文件編輯器中的某一個。Korn shell 包含所有這三種編輯器。然而,我將重點(diǎn)介紹 vi 行內(nèi)編輯器。將行內(nèi)編輯器選項(xiàng)設(shè)置為 vi 十分簡單。只需在用于查看所有當(dāng)前設(shè)置的命令后加上選項(xiàng) vi:
  # set -o vi

大功告成!若要驗(yàn)證該設(shè)置,可以再次查看您的當(dāng)前設(shè)置:
  # set -o

  Current option settings are:
  allexport        off
  bgnice           on
  emacs            off
  errexit          off
  gmacs            off
  ignoreeof        on
  interactive      on
  keyword          off
  markdirs         off
  monitor          on
  noexec           off
  noclobber        off
  noglob           off
  nolog            off
  notify           off
  nounset          off
  privileged       off
  restricted       off
  trackall         off
  verbose          off
  vi             on
  viraw            on
  xtrace           off


使用 Korn shell vi 行內(nèi)編輯器
既然已將您的 shell 配置為使用 vi 行內(nèi)編輯器,現(xiàn)在應(yīng)該開始進(jìn)行測試了。
在命令行上修改文本
現(xiàn)在,當(dāng)您在命令行上鍵入時,將其視為處于 vi 編輯器中的插入模式。如果出錯或者需要向要執(zhí)行的命令添加一些內(nèi)容,只需按 Esc 鍵退出插入模式并切換回命令模式。
例如,您當(dāng)前所在的工作目錄包含如下文件:
  # ls
  fileA    fileAA   fileAAA  fileAB   fileABA  fileABB  fileB    fileBAA  fileBB   fileBBB

您希望查找以 fileAA 開頭的文件并刪除它們,于是輸入以下命令:
  # find . -name "fileAB*" -exec rm {} \;

在執(zhí)行您輸入的行之前,您發(fā)現(xiàn)自己犯了一個錯誤,意外地將 fileAA 誤輸入為 fileAB。不必?fù)?dān)心。只需退出插入模式并切換到命令模式,將光標(biāo)移動到錯誤字符并進(jìn)行替換,所有這些操作都使用 vi 命令完成。下面詳細(xì)說明命令序列,此時仍然處于行內(nèi)編輯器的插入模式:
1. 按 Esc 切換到命令模式。
2. 使用 vi 風(fēng)格的移動命令向左移動光標(biāo),以突出顯示字符串"fileAB*"中的 B。(H 鍵可向左移動光標(biāo)。)
注意:如果您習(xí)慣于在 vi 中使用箭頭鍵,那么明智的做法是了解鍵盤上用于移動光標(biāo)的實(shí)際字母鍵,因?yàn)椴煌愋偷慕K端上的箭頭鍵不一定能產(chǎn)生預(yù)想中的結(jié)果:
  o h:向左
  o l:向右
  o k:向上
  o j:向下
3. 使用 vi 風(fēng)格的"替換單個字符"命令將 B 替換為 A(即單擊 R,然后鍵入 A)。
經(jīng)過檢查確認(rèn)輸入無誤后,按 Enter 鍵執(zhí)行命令:
  # find . -name "fileAA*" -exec rm {} \;
  # ls
  fileA    fileAB   fileABA  fileABB  fileB    fileBAA  fileBB   fileBBB

文件名完成
Korn shell 中 vi 行內(nèi)編輯器的另一個十分有用的操作是文件名完成。執(zhí)行命令時,經(jīng)常會遇到這樣一種情況,您用作 stdin、stdout 或 stderr 參數(shù)的文件將被寫入到某個文件中。文件名可能很長,也可能有多個文件具有類似的文件名,或者您就是無法記起完整的文件名。這時就會用到文件名完成功能。在鍵入文件名時,如果完成了一部分,那么只需先按 Esc 鍵,再按反斜杠 (\)鍵。這樣做省時省力!
例如,我要查看 AIX 上的 /etc/filesystems 文件,但我忘記了完整文件名。我知道它位于 /etc 下,并且該文件以 file 開頭,僅此而已。我只需鍵入 view /etc/file 并按 Esc-\,哇!ksh 已經(jīng)為您完成了這行內(nèi)容?,F(xiàn)在命令行顯示為 view /etc/filesystems。
對于目錄結(jié)構(gòu)也可以執(zhí)行同樣的操作,因?yàn)樗鼈儗?shí)際上也可算作文件名。
查看和修改命令歷史記錄
在您的 UNIX 系統(tǒng)上監(jiān)視進(jìn)程或執(zhí)行其他一些功能時,您需要多次反復(fù)鍵入相同的命令。為了避免反復(fù)重新輸入的麻煩,Korn shell 提供了內(nèi)置的命令歷史記錄供您查看。如果您也將行內(nèi)編輯器設(shè)為 vi,ksh 將允許您提取用戶所執(zhí)行命令的歷史記錄(有時僅限該會話,具體取決于您的系統(tǒng)配置),并按照您在命令行中輸入的其他文本修改命令。
如果您在變量 HISTFILE 中定義了一個文件名,ksh 允許用戶從其歷史記錄中提取和修改命令,或僅僅再次執(zhí)行原始命令。例如,以下是示例 $HISTFILE 顯示的最后 10 個命令:
  # tail -10 $HISTFILE
  ls
  cd ~cormany/testdir/dirA
  ./fileA 1>fileA.out 2>fileA.errors
  pwd
  ps -fu cormany
  df -k .
  ps -fu cormany
  find . -name "fileA.out" -ls
  find . -name "fileA.errors" -ls
  tail -10 $HISTFILE

在命令行中,只需按 Esc 鍵即可進(jìn)入 vi 行內(nèi)編輯器的命令模式,然后按 K 鍵提取上次執(zhí)行的命令。由于您仍處于命令模式,您可以繼續(xù)按 K 鍵向上移動所執(zhí)行命令的歷史記錄,或按 J 鍵向下移動列表。
若要幫助簡化命令模式下的光標(biāo)移動,當(dāng)您在命令提示符處按 Esc 鍵時,請想象您加載的 $HISTFILE 為 vi 中的普通文件。在 vi 編輯器中,K 鍵向上移動一行,而 J 鍵向下移動一行。如果按 Esc-J 鍵并使用示例 $HISTFILE,想象正在編輯 $HISTFILE,并且光標(biāo)開始位于文件底部。該行將顯示 tail -10 $HISTFILE。如果再次按 J 鍵,正在編輯的 $HISTFILE 將向上移動一行,顯示為 find . -name "fileA.errors" -ls。
圖 2 提供了小型的"備忘單",將常規(guī) vi 命令模式光標(biāo)移動與 ksh vi 行內(nèi)編輯器命令模式移動進(jìn)行比較。

  圖 2. vi 命令模式備忘單
命令行與 shell 腳本
有時會用到 shell 腳本,其他一些時間則要用到命令行。如果需要定期執(zhí)行某項(xiàng)任務(wù),或者任務(wù)非常復(fù)雜、需要進(jìn)行數(shù)據(jù)處理,同時不需要用戶反復(fù)鍵入各種命令,則適合使用 shell 腳本。有時,某些任務(wù)只需要執(zhí)行一次并且相對簡單,則使用命令行可以很好地完成這類任務(wù)。
例如,假設(shè)存在下列字典列表:
  # ls
  fileA.tar.gz   fileAA.tar.gz  fileB.tar.gz   fileBB.tar.gz

如果只需要解壓縮文件,并使用 bzip2 重新壓縮,然后將它們傳送到 ATC-AIX2 上,那么與其鍵入 shell 腳本,不如使用命令行。可以將 shell 腳本視為一次輸入多個命令行條目,因?yàn)閺哪撤N意義上來說,這就是實(shí)際情況。在命令行上鍵入命令時,就像將它們輸入到腳本中,然后執(zhí)行腳本。
您希望遍歷目錄中以 gz 結(jié)尾的文件,解壓這些文件,然后使用 bzip2 重新壓縮它們,再對這些文件使用 scp 命令,將它們復(fù)制到目標(biāo) ATC-AIX 服務(wù)器上。循環(huán)在命令行中的工作效果與在腳本中同樣出色。當(dāng)開始 loop…if 條件語句、case switch 語句,或其他代碼塊語句時,您正在運(yùn)行的 ksh 只會將光標(biāo)移動到下一行,但提示符將更改為 $PS2。當(dāng)代碼塊完成時,將執(zhí)行代碼塊并使用戶返回 $PS1 提示符。
也就是說:
  " $PS1 提示符:等待下一個命令
  " $PS1 提示符:代碼塊開始
  " $PS2 提示符:代碼塊繼續(xù)
  " $PS2 提示符:代碼塊繼續(xù)
  " $PS2 提示符:代碼塊結(jié)束
  " 代碼塊執(zhí)行
  " $PS1 提示符:等待下一個命令
  變量 PS2 的缺省值為 >。返回前一個解壓縮后重新壓縮的功能,您只需在 ksh 命令行中鍵入以下內(nèi)容:
  # for _FNAME in 'ls -1 *.gz'
  > do
  > gzip -d ${_FNAME}
  > bzip2 ${_FNAME%*.gz}
  > scp ${_FNAME%*.gz}.bz2 cormany@ATC-AIX2:/home/cormany
  > done

完成代碼塊(也就是說,使用 done 結(jié)束循環(huán))后按 Enter 鍵,將開始執(zhí)行循環(huán)。在命令行上鍵入的循環(huán)將搜索當(dāng)前工作目錄下以 .gz 結(jié)尾的所有文件,將這些文件解壓縮,然后使用 bzip2 重新壓縮它們,最后將它們復(fù)制到 ATC-AIX2 上的 /home/cormany 目錄中。就是如此簡單。

結(jié)束語
在閱讀本文之后,您應(yīng)當(dāng)能夠?qū)W會以新的方法使用 Korn shell。掌握命令行可以簡化您的工作,并幫助您更好地理解如何在工作中充分利用 shell 和命令行,從而擺脫使用它們的困擾。

【編輯推薦】

  1. Compiz 0.8.0 發(fā)布
  2. MaxWit Linux 1.0 Alpha1 發(fā)布
  3. 戴爾:三分之一的Mini 9將運(yùn)行Linux
責(zé)任編輯:龐桂玉 來源: IT168
相關(guān)推薦

2010-04-15 15:46:57

Unix操作系統(tǒng)

2012-02-09 09:00:54

匯編語言

2020-11-18 09:30:29

圖片懶加載前端瀏覽器

2013-05-13 11:25:02

WAFWeb應(yīng)用防火墻WAF繞過

2010-04-21 17:56:22

Unix網(wǎng)卡配置

2024-09-23 19:23:00

2020-06-11 08:08:38

LFU代碼雙向鏈

2010-04-22 14:53:07

Aix操作系統(tǒng)

2010-05-06 17:03:49

Unix命令

2022-03-22 08:03:08

ReactTsTypeScript

2009-07-07 09:18:13

UNIX操作系統(tǒng)

2009-02-20 11:43:22

UNIXfish全攻略

2010-05-10 17:14:41

Unix系統(tǒng)

2009-03-25 13:50:05

2010-05-07 17:41:36

BSD Unix

2010-05-11 19:16:03

Unix系統(tǒng)

2010-05-06 16:15:04

Unix系統(tǒng)進(jìn)程

2009-11-13 09:36:10

UNIX通訊命令操作系統(tǒng)

2010-05-07 15:55:27

Unix系統(tǒng)

2010-04-21 16:25:13

Unix信號量
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號