偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

對話 UNIX: 從簡單的按鍵操作學起

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

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

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

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

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

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

  圖 1. UNIX shell 家族樹

 

#p#

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

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

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

大功告成!若要驗證該設置,可以再次查看您的當前設置:
  # 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 行內編輯器
既然已將您的 shell 配置為使用 vi 行內編輯器,現(xiàn)在應該開始進行測試了。
在命令行上修改文本
現(xiàn)在,當您在命令行上鍵入時,將其視為處于 vi 編輯器中的插入模式。如果出錯或者需要向要執(zhí)行的命令添加一些內容,只需按 Esc 鍵退出插入模式并切換回命令模式。
例如,您當前所在的工作目錄包含如下文件:
  # ls
  fileA    fileAA   fileAAA  fileAB   fileABA  fileABB  fileB    fileBAA  fileBB   fileBBB

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

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

文件名完成
Korn shell 中 vi 行內編輯器的另一個十分有用的操作是文件名完成。執(zhí)行命令時,經(jīng)常會遇到這樣一種情況,您用作 stdin、stdout 或 stderr 參數(shù)的文件將被寫入到某個文件中。文件名可能很長,也可能有多個文件具有類似的文件名,或者您就是無法記起完整的文件名。這時就會用到文件名完成功能。在鍵入文件名時,如果完成了一部分,那么只需先按 Esc 鍵,再按反斜杠 (\)鍵。這樣做省時省力!
例如,我要查看 AIX 上的 /etc/filesystems 文件,但我忘記了完整文件名。我知道它位于 /etc 下,并且該文件以 file 開頭,僅此而已。我只需鍵入 view /etc/file 并按 Esc-\,哇!ksh 已經(jīng)為您完成了這行內容?,F(xiàn)在命令行顯示為 view /etc/filesystems。
對于目錄結構也可以執(zhí)行同樣的操作,因為它們實際上也可算作文件名。
查看和修改命令歷史記錄
在您的 UNIX 系統(tǒng)上監(jiān)視進程或執(zhí)行其他一些功能時,您需要多次反復鍵入相同的命令。為了避免反復重新輸入的麻煩,Korn shell 提供了內置的命令歷史記錄供您查看。如果您也將行內編輯器設為 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 鍵即可進入 vi 行內編輯器的命令模式,然后按 K 鍵提取上次執(zhí)行的命令。由于您仍處于命令模式,您可以繼續(xù)按 K 鍵向上移動所執(zhí)行命令的歷史記錄,或按 J 鍵向下移動列表。
若要幫助簡化命令模式下的光標移動,當您在命令提示符處按 Esc 鍵時,請想象您加載的 $HISTFILE 為 vi 中的普通文件。在 vi 編輯器中,K 鍵向上移動一行,而 J 鍵向下移動一行。如果按 Esc-J 鍵并使用示例 $HISTFILE,想象正在編輯 $HISTFILE,并且光標開始位于文件底部。該行將顯示 tail -10 $HISTFILE。如果再次按 J 鍵,正在編輯的 $HISTFILE 將向上移動一行,顯示為 find . -name "fileA.errors" -ls。
圖 2 提供了小型的"備忘單",將常規(guī) vi 命令模式光標移動與 ksh vi 行內編輯器命令模式移動進行比較。

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

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

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

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

【編輯推薦】

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

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應用防火墻WAF繞過

2010-04-21 17:56:22

Unix網(wǎng)卡配置

2024-09-23 19:23:00

2010-04-22 14:53:07

Aix操作系統(tǒng)

2025-06-10 10:10:00

文件下載前端開發(fā)

2025-09-09 10:40:00

開發(fā)前端Web 開發(fā)

2010-05-06 17:03:49

Unix命令

2020-06-11 08:08:38

LFU代碼雙向鏈

2010-05-10 17:14:41

Unix系統(tǒng)

2009-02-20 11:43:22

UNIXfish全攻略

2022-03-22 08:03:08

ReactTsTypeScript

2009-07-07 09:18:13

UNIX操作系統(tǒng)

2010-05-07 17:41:36

BSD Unix

2010-05-06 16:15:04

Unix系統(tǒng)進程

2010-05-11 19:16:03

Unix系統(tǒng)

2010-05-07 15:55:27

Unix系統(tǒng)

2010-04-21 16:25:13

Unix信號量
點贊
收藏

51CTO技術棧公眾號