home products tech support contact us

 Linux 技術支援    ⇒   基礎篇    進階篇    補腦篇    指令索引    中⇒ENG
版權所有, 引用請註明出處

 了解 Linux 文字界面

1.0 認識 Shell
       登入文字界面
           Supersuser 超級用戶
       Linux 指令語法
       文字界面的控制鍵
           <Ctrl+Alt+F(1~7)> 切換終端機
           <↑>、<↓> 歷史查詢
               history 指令回顧
               <!> 指定指令編號
           <Ctrl+C> 停止目前的運算
           <Ctrl+D> 登出或檔案結束
           <Tab> 補全
           <Ctr+R> 歷史查詢+補全
           輸入控制
               <Ctrl+U> 刪除整行
               <Ctrl+W> 刪除游標之前的輸入
               <Ctrl+K> 刪除游標之後的輸入
               <Ctrl+L> 清除游標之上的螢幕
1.1 登出
       logout 登出
       exit 退出目前的 shell
       su 暫時變更使用者
1.2 關機
       poweroff 關機
       halt 關機
       reboot 重開機
       shutdown 關機
       sync 同步緩衝記憶體和硬碟
       runlevel 查詢運行級別
       init 執行運行級別
1.3 清除螢幕
       clear 清除螢幕
       reset 重置螢幕
1.4 輔助說明文件
       man 指令考手冊
       info 指令考手冊
       --help 指令自帶說明


3.0 認識 Shell

下圖說明文字界面(Command-Line Interface ,CLI)的操作是透過〝Shell〞和核心 (Kernel)溝通和執行。那什麼是 Shell? 〝shell〞在英文是〝殼〞的意思,個人認為用 shell(殼)已〝傳神〞的解釋 Linux 的文字操作界面。

Linux Shell work


進一步解釋 Shell 之前先說個故事:

<莊子.知北遊>記載一精彩的對話:
東郭子莊子:什麼是道?又在那?
莊子答: 無所不在。
東郭子: 舉個例子。
莊子: 在螻蟻身上。
東郭子: 道在那麼低等的地方呀?
莊子: 在雜草上。
東郭子: 怎越來越低等?
莊子: 在瓦甓。
東郭子: 為什麼每況愈下?
莊子: 在屎尿!!!
東郭子: 幹 !! @#$%^&*..e04!..」

這是有名〝道在屎溺〞的故事,但和 Linux 有什關係呢?因為 Linux 一開完機, Linux 的 Kernel 在 PC 內運行就〝道在屎溺〞無所不在。雖 Linux Kernel 運行遍滿三千,但由於我們無法直接對 Kernel 操作,只能透過〝殼〞(shell)勉強和 Kernel 溝通,雖然文字界面的操控只接觸到 Kernel 的〝殼〞而已,還沒〝明心見性〞(直接接觸 Kernel 核心)但威力已夠強大。

廣義的解釋,圖形操作界面(GUI),或目前最夯的觸控(touch panel)也是一種 shell。不管用那種 shell 來和 Kernel 溝通都不夠圓滿有其盲點。舉例來說,我的母語是國台語,我在想某一些事時,是用國語或台語在想;因還會一點電腦的 C 語言,偶爾也會用 C 語言來想事情(如這問題用 C 語言要如何寫等)。

但用語言來想事情是有死角的會受語言所能表達的意境所限制;試想一下聾啞人士在想事情不用語言怎麼想事情?可能都是圖像吧?那又聾又盲的人又怎麼想事情?我不知道,不過至少說明一點沒有語言或圖像也可想事情。

人和電腦最大的不同是電腦可以重灌不同的作業系統或應用軟體來改變思考,但人一旦學會了某項知識,有了成見後就不易把既有的意識形態〝放空〞,一旦學會了用語言或圖像思考就無法回到沒語言或圖像的思考方式。或許透過語言或圖像思考反而會被語言或圖像所能表達的意境所限而無法〝直指人心,明心見性〞,因很多事〝非筆墨所能形容〞。

以作業系統來說,用圖像來思考就是圖形操作界面(GUI),如用語言來思考就是文字操作界面(CLI)。也是沒有辦法中的辦法,因一般人是無法〝直指人心 (Kernel)〞直接操作 Kernel。

UNIX/Linix 是偏重用語言來思考的文字操作界面(CLI),對於習慣了 Windows 圖形操作界面的人,第一次接觸文字操作界面常會受限於既有的成見和意識形態而格格不入。建議是把以前所學〝放空〞;〝真空妙有〞把既有的成見清空才有空間裝新的內容。

shell 是一文字語言,是一種給 Kernel 看的文字語言叫〝直譯語言〞(Interpreter)。一般電腦的程式為了執行速度和保密性,皆會用〝高階語言〞(High-level programming language)來開發軟體,最後再經〝編譯器〞(Compiler)把整篇高階語言編譯為電腦可執行的機械碼(machine code)。

而〝直譯語言〞不是整篇的翻譯,而是一次只解讀一行的指令給相關的應用軟體或作業系統的核心去執行,執行完再翻譯下一行。所以 user 在文字界面下所下的指令是一次一行的透過〝Shell Interpreter〞(Shell直譯語言)翻譯給 Linux 核心去溝通和執行的。

也可把很多的文字界面的指令集合起來來完成某一動作,此種程式就叫〝腳本語言〞(Script Laguage):。
目前 PC 常見的直譯器語言有〝shell〞、〝BASIC〞(培基語言)、〝JavaScript〞、〝HTML〞等。

直譯器語言的優缺點有: 故當 user 登入文字操作界面時,事實上是使用某一 shell 直譯語言來和 Linux 核心溝通。Linux 下 Shell 直譯器語言常見的有 Bourne shell (bash)、 C shell(tcs)、Kom shell(ksh)、zsh 等。
每一種 shell 語法略有不同,而大部分的 Linux 發行版皆用 Bourne-Again shell (bash)為預設的 Shell,如使用者不知目前是使用那種 shell 可輸入 echo $SHELL 來查看自己目前所使用的 shell。

文字操作界面之王非 UNIX/Linux 莫屬了,如 user 還不熟悉和使用 UNIX/Linux 文字操作界面,可在 Windows 下先體驗一下文字操作界面。例如想要找看看硬碟中有多少個名叫〝readme〞檔,你可在 Windows 的 Windows 標誌鍵 + R 開啟 〝執行〞對話方塊,輸人〝cmd〞進人〝命令指示字元〞(Command Prompt) 輸入 dir c:\readme* /s/b/a 看看 ,底下為輸出結果(原來我的硬碟,名叫〝readme〞的檔那麼多。)

C:\Documents and Settings\User>dir c:\readme* /s/b/a ←輸入藍字+ <Enter>
c:\android-sdk-windows\tools\Jet\demo_content\README.txt
c:\android-sdk-windows\tools\Jet\JetCreator\ReadMe1st.txt
c:\android-sdk-windows\tools\Jet\logic_templates\README.txt
c:\BC45\README
c:\cygwin\etc\alternatives\README
c:\cygwin\etc\openldap\schema\README
以下略

續上例,如要在茫茫硬碟中把所有的〝readme〞檔都殺掉, 輸入 del C:\readme* /f/s/a 即可,以上這兩個例子,如用圖形界面來操作一定很辛苦,文字操作界面是不是比你想像的還強大?且 Windows 或 DOS 下的文字操作界面如和 Linux/Unux 比可是小巫見大巫呢。


登入文字界面
目前主流的 Linux 發行版,開完機後應會出現類似如下圖〝圖形操作界面〞(GUI)的登入畫面,登入後就和操作 Windows 類似,雖然圖形操作界面的確有其便利性,但 Linux 真正的威力是〝文字操作界面〞(Command Line Interface,CLI)
Linux GUI login

但要如何登入文字操作界面?原來 Linux 本來就是〝多人多工〞的作業系統,在不算網路登入下,已預設可同時 7 個使用者同時登入(不同的 Linux 發行版可能略有不同),而圖形操作界面的登入只是其一。

同時按 Ctrl+Alt+F1 ~ Ctrl+Alt+F7可自由切換不同的終端機 (terminal),例如按 Ctrl+Alt+F1為終端機 tty1,按 Ctrl+Alt+F2 為終端機 tty2 ...按 Ctrl+Alt+F7 為 tty7, 大部分的 Linux 發行版,終端機 tty1~tty6 為文字操作界面,而 tty7 為圖形操作界面。(不同的 Linux 發行版略有不同)

以 Fedora 8 為例,開完機後如上圖出現圖形操作界面為 tty7,按 Ctrl+Alt+F1 ~ Ctrl+Alt+F6 應會出現如下圖文字操作界面的登入畫面:
文字操作界面的登入畫面
Fedora release 8 (Werewolf) ←顯示 Linux 發行版的資料
Kernel 2.6.23.1-42.cf8 on an i686 ←顯示 Linux Kernel 版本

localhost login: aaa↵ Enter ←輸入使用者的帳號 (此例為建立使用者帳號時所建立帳號〝aaa〞)
password:(輸入使用者的帳號密碼)↵ Enter ←為了安全理由,輸入帳號密碼時不會有任何訊息在螢幕上
[aaa@localhost ~]$ ←登入後的提示,如 shell 種類為〝bash〞一般為〝[帳號@主機名稱+目錄的位置]〞

以某個帳號登入時,可再按 Ctrl+Alt+F1 ~ Ctrl+Alt+F7 以其他身份登入其他的 tty。

如以文字操作界面登入,登入後可不像圖形操作界面那麼直覺的用滑鼠操作而是一片空空如也漆黑一片能幹什麼?真空妙有,可做的事可多了。

舉我自己的例子,多年前我在一家通訊設備公司寫軔體(Firmware),因進度嚴重落後(當時老闆可是有和客戶簽約,每延遲一天都要罰錢)老闆最後竟使出〝絕招〞,搬個椅子就坐我旁邊盯進度。

老闆是業務出身當然看不懂我在電腦前打什麼,只是想給我壓力。原以為老闆只是坐個幾分鐘就離開,想不到近一小時老闆還在旁邊碎碎念。我渾身不自在,只好我也使出文字操作界面的〝絕招〞回應。

在 Windows 的命令指示字元(Command Prompt)輸入 dir c:\ /s/b,螢幕就會列出 C 碟所有檔案,跑好幾分鐘也跑不完,老闆看到頭暈也不知我在幹麻就自討沒趣離開了。(如下,有興趣的話自行在Windows 的命令指示字元測試一下)
C:\dir c:\ /s/b↵ Enter ←輸入藍字 + <Enter>
c:\android-sdk-windows
c:\ATI
c:\AUTOEXEC.BAT
c:\CONFIG.SYS
c:\CrashLogs
c:\cygwin
c:\Documents and Settings
c:\eMake.bat

以下略

後來我看老闆一接近就使出文字操作〝絕招〞打 dir c:\ /s/b, 老闆就離開還真有效!下班後我把上班打〝dir〞的趣事和老婆分享,老婆竟說「原來你上班都在打〝dir〞,難怪進度落後還每天加班勒...」。

雖是真實的冷笑話也說明文字操作界面可做的事可多了,五花八門。且 Windows 或 DOS 下的文字操作界面如和 Linux/Unux 比可是小巫見大巫呢。

由於不同的 Linux發行版或 Unix 預設的 shell 不盡相同,例如 BSD-like 通常都使用 csh(C shell), Linux 大都使用 bash(Bourne-Again shell)。常見的還有 ksh (Kom shell),Z shell(Zsch)等每種 shell 操作略有不同,但不用太擔心如預設的 shell 不是你熟悉的,大部分的Linux發行版會提供多種常用的 shell 可供使用者自行〝換殼〞。如下例:

[aaa@localhost ~]$ echo $SHELL ↵ Enter ←顯示目前使用的 shell
/bin/bash
[aaa@localhost ~]$ chsh -l ↵ Enter ←查詢有那些 shell 可用
/bin/sh
/bin/bash
/sbin/nologin
/bin/zsh
[aaa@localhost ~]$ chsh -s /bin/zsh ↵ Enter←指定〝Z Shell〞為此帳號以後預設的 Shell(要登出後再登入才會生效)

後續的介紹和操作以〝 /bin/ bash〞的 Bourne-Again shell 為準, bash 登入後提示符號的意義如下:
[aaa @localhost   ~]  $
   
   
   
   
   
     


Linux 指令語法
在說明 Linux 指令語法的時候會用到一些 Linux 指令來當範例,如 user 還不了解範例中 Linux 指令的用途和用法,建議照著範例先體驗一下。

基本上 Linux 基本的語法如下:
[\]COMMAND [-OPTIONS] [-- SUB-OPTIONS] [PARAMETER] [\↵ Enter] [;]  ↵ Enter 
其中〝[ ]〞內為選項,不一定要有,指令語法各元素說明如下: 文字界面的控制鍵
在文字界面下,預設許多有用的控制鍵,不同的 Shell 或版本操作可能有點差異;下例的介紹以預設的〝Bourne Shell〞(bash)為準,常用的組合如下:

^ back on top ^





1.1 登出
當使用者登入後,要變更使用者可輸入 logout 登出後再以其他的帳號登入,〝一般的情形下〞輸入 exit 也可登出,那麼這兩者差在那裡?

logout 登出
登出目前的使用者的帳號指令為 logout ,登出後可更換其他的帳號再登入。

exit 退出目前的 shell
許多的書說 exit = logout 也是登出,事實上並不正確。exit 正確點是〝退出目前的 shell〞,因大部分的情況使用者只用一種 shell,〝退出目前的 shell〞是等於〝logout〞,但如果有〝子 shell〞就不成立了。

例如目前登入是預設的 shell (稱〝父 shell〞),但為了某個 shell 才有的功能或要執行某個 shell 所寫的 Script file (腳本語言)需載入其他的 shell (稱〝子 shell〞)。在子 shell 下輸入 exit 是回到父 shell,並不是登出,回到父 shell 後就能用 logout/exit 任一登出了。

例:
[aaa@localhost ~]$ echo $SHELL ←查詢目前的 shell (父 shell)
/bin/bash ←目前為 Bourne shell (bash)
[aaa@localhost ~]$ chsh -l ←查詢有那些 shell 可用(〝chsh -l〞實際上是讀取檔案〝/etc/shells〞的內容)
/bin/sh
/bin/bash
/sbin/nologin
/bin/zsh
[aaa@localhost ~]$ zsh ←輸入可用的 shell(除了 nologin)
[aaa@localhost]~% ←提示符號改變了,表示已進入其他子 shell (zsh)
[aaa@localhost]~% logout ←用 logout 登出看看
logout: not login shell ←回應 zsh 不是登入的 shell 故不讓你登出
[aaa@localhost]~% exit ←退出目前的 shell
[aaa@localhost ~]$ ←提示符號改變,回父 shell 的登入符號
[aaa@localhost]~% logout ←此時即可用 logout 登出了

su 暫時變更使用者
如果使用者只想暫時用其他的帳號做其他事,可不用麻煩的登出/登入,用 su 暫時變更使用者即可,然後用 logout exit 登出就恢復原登入者, su 用法和說明如下:
語法:su [-otpiton][--option][帳號(若沒指定帳號,預設的帳號為〝root〞)]
指令名稱/功能/命令使用者 選項 功能
su/
(Super User)暫時變更使用者/
Any
-c '指令' 或 -command '指令' 執行完指令後恢復原登入者
- 或 -l 或 --login ['帳號] 改變使用者同時也變更該使用者的工作的環境

su 指令如沒輸入帳號,預設的帳號為〝root〞哦,另容易搞混的為選項〝-〞或〝-l〞(為小寫的 L,但可省略寫成 su -),其中差別為有〝-〞或〝-l〞為同時改變為該使用者的工作的環境(包含工作目錄)。

例:(先以非〝root〞帳號登入,再用 su su - 變更為〝root〞帳號)
[aaa@localhost ~]$ ←非〝root〞帳號登入(預設提示符號為〝[帳號@主機名稱+目錄的位置]$〞)
[aaa@localhost ~]$ su root ←變更帳號為〝root〞,注意,這次沒有〝-〞選項(不會變更工作環境)
Password: ←輸入 root 的密碼
[root@localhost aaa]# ←(提示字元變了.但並沒有變更工作環境,工作目錄在原〝aaa〞的家目錄
[root@localhost ~]# exit ←恢復原登入者
[aaa@localhost ~]$ su - ←沒指定帳號,預設的帳號為〝root〞(這次有〝-〞選項)
Password: ←輸入 root 的密碼
[root@localhost ~]# ←目前登入使用者己變 root,且工作目錄在 root 的家目錄
[root@localhost ~]# exit ←恢復原登入者

例:
[aaa@localhost ~]$ su -c 'ls -a' - l bbb ←變更使用者〝bbb〞,執行指令〝ls -a〞
Password: ←會要求輸入 bbb 的密碼
.  ..  .bash_history  .bash_logout  .bash_profile  .bashrc 
[aaa@localhost ~]# ←執行完指令後自動恢復原登入者

另外如用〝root〞帳號登入,用 su 暫時變更為一般的使用者是不用輸入密碼的。

更詳細的 su 使用可參考連結



^ back on top ^





1.2 關機

Linux 是多人多工的作業系統,要關機可不是插頭一拔就了事,因可能還有其他的行程還沒存檔。且就算已存檔,Linux 為了效能考量可能沒真正把檔案存在硬碟,而是先暫存在〝緩衝記憶體〞,有空時再把緩衝記憶體的資料存到硬碟,亂拔插頭可能會遺失檔案,故需正確的關機指令和程序,正確的關機指令有:

poweroff 關機

指令 poweroff 為關掉所有執行中的行程,緩衝記憶體資料存到硬碟,如果主機符合 ACPI (Advanced Configuration and Power Interface,進階組態與電源介面)會順便關掉 PC 電源。

halt 關機
halt 為 Unix 傳統的關機指令功能同 poweroff 但不會自動切斷 PC 電源, halt 為關掉所有軟體程式後還要手動按 PC 的開關來關電源。

例:
[aaa@localhost ~]$ halt

Broadcast message from root (tty1)(Mon jul  4 15:50:44 2011):

The system is going down for system halt NOW!
INIT: Sending processes the TERM signal                  [  OK  ]
Shutting down Avahi deamon:                              [  OK  ]
Stopping HAL deamon:                                     [  OK  ]
                       中間略
Turning off swap:                                        [  OK  ]
Turning off quotas:                                      [  OK  ]
Unmounting file systems:                                 [  OK  ]
Halting system...
System halted. ←關機完成,此時才可按 PC 開關來關電源

reboot 重開機
poweroff,但 reboot 指令會重新開機。

shutdown 關機
傳統的 UNIX,由於隨時有許多人登入使用,故一般的登入者是不可以下關機指令的,要關機只有經授權的帳號或系統管理員才可下 shutdown 指令來關機。我有一同學在某金融機構維修大型主機 (Mainframe),(大型主機當然不是跑 Windows 不然三不五時就當機)我那同學有一次跟我說他最怕的 UNIX/Linux 指令就是〝shutdown〞了,因大型主機通常是全年 24 小時都不關機的,但每隔幾年要關機一次做保養(因沒壞,故就關機後清清灰塵等再開機)。

我那同學說「有些的老大型主機很邪門?連續跑了好幾年不關機都沒事,但一下〝shutdown〞指令,保養完就開不了機」。這情形好像我的老爺車,平常上山下海都還很猛,但有時拔鑰匙熄火就不知原因發不動了。

有一次我那同學保養大型主機過程中某主機就是開不起來,開不了機應和關機指令沒直接關係,和老爺車拔鑰匙就不知原因發不動比較像,但害某銀行機構的 ATM 當天大當機還上了新聞。

人和電腦其實某方面很像,當對某事物有興趣時,學習也要乘勝追擊,半途 shutdown 了,興趣可是會熄火哦。

我們來看一下我那同學最怕的指令〝shutdown〞的用法。
語法:shutdown [-otpiton][時間(hh:mm) 或 (+m) 或 (now)]['訊息']
指令名稱/功能/命令使用者 選項 功能
shutdown/
關機/
Superuser
-F 重開機時強迫用 fsck 檢查 partition
-k 只送訊息給其他登入的使用者,但不關機
-h 關掉所有執行中的行程後關機
-r 關機後重開機 (同 reboot 指令)
其中時間的選項可為 另外如沒有為任何和關機或重開機有關的選項,shutdown 指令並不會關機或重開機,而是關掉所有執行中的行程後進入〝單用戶模式〞(Single user mode) 即〝維護模式〞(maintenance mode)(維護用途),如 shutdown 3 表示 3 分鐘後會關掉所有執行中的行程後進入維護模式。

此外,如閞機時間還沒到,後悔了可按 <Ctrl+C> 來停止關機哦。

例:
[aaa@localhost ~]$ shutdown -h now ←立刻關機
-bash: shutdown: command not found ←沒此指令?原來只有 root 才可執行 shutdown 哦
[aaa@localhost ~]$ su - ←換 root 身分登入
Password: ←輸入 root 的密碼
[root@localhost ~]# shutdown -h +3 ←設 3 分鐘後會關機
Broadcast message from root (tty1) (wed jul 6 03:28:13 2011):

The system is going DOWN for system halt in 3 minutes! ←其他的登入者都會同步收到3 分鐘後會關機的訊息哦

Ctrl+C ←如閞機時間還沒到,想後悔,可按 <Ctrl+C> 來停止關機

Shutdown cancelled.←shutdown 指令被 <Ctrl+C>中止了

例:
[root@localhost ~]# shutdown -h 0 'hello' ←可加其他的訊息通知其他的登入者
[root@localhost ~]# shutdown -k now 'hello' ←不會真正關機,只是把訊息通知其他的登入者
[root@localhost ~]# shutdown -r 10:08 ←10:08會重開機

sync 同步緩衝記憶體和硬碟
Linux 為了效能考量可能沒真正把檔案存在硬碟,而是先暫存在緩衝記憶體,〝有空〞時再把緩衝記憶體資料存到硬碟,但問題是不知道 Linux 那時才有空? 故到底緩衝記憶體資料存到硬碟了是不確定的。sync 指令的功用為強迫將暫存在緩衝記憶體的資料強制存到硬碟,許多人怕關機時有些檔案來不及存檔就關機了,會在關機前猛打 sync

例:
[root@localhost ~]# sync;sync;sync;shutdown -h 0

^ back on top ^


runlevel 查詢運行級別
什麼!?一個簡單的關機有 poweroff / halt / shutdown 還有 init / runlevel 頭都暈了。我認為一般使用者要關機就用 poweroff,如是系統管理員就用 shutdown 好通知其他的登入者要關機了趕快存檔。而 runlevel/ i nit 先知道有可回事就好,會介紹 runlevel / init 是我認為知道原理比背指令重要,稍微了解 runlevel 可明白一個簡單的關機,背後的原理。

UNIX/Linux 運行時有分不同的〝 runlevel〞( 運行級別), runlevel 的定義各 Linux 發行版可能有些不同。不成文的共識大多 runlevel=0 為關機,runlevel=1 為單用戶模式(維護用途), runlevel=2~5 為一般模式, runlevel=6 為重開機,(不同 Linux 發行版可自行查詢〝/etc/inittab〞檔案中對 runlevel 的定義)。

而 Fedora/Red hat/GentOS 等發行版 runlevle 定義如下:
runlevel 模式
0 關機
1 單用戶模式,維護用途故不會讓其他帳號登入
2 多人模式,但無網路連線
3 多人模式,有網路連線但運行純文字界面(許多 server 的預設值)
4 預留未使用
5 同 3,但以圖形介面開機和操作
6 重開機

我怎知目前 Linux 是在那一 runlevel 呢?以系統管理員 root 登入,輸入 runlevel 就知道。

例:(以 root 登入測試)
[root@localhost ~]# runlevel
N 5 ←第一個字元〝N〞為之前的 runlevel,第二個字元〝5〞為目前的 runlevel,其中 runlevel 等級有時會用英文字母代表,如〝N〞表示 None 不存在的意思,〝S〞表示 Single 單用戶模式)



init 執行運行級別
知道 runlevel 所代表的意義後,就可用指令 init 來執行/切換 runlevel 級別。 (root 登入才可操作 init)

例: (以 root 登入測試)
[root@localhost ~]# init 0 ←耍帥一下,關機指令用〝init 0〞(即 runlevel =0 來關機)
[root@localhost ~]# init 6 ←等於 reboot 重新開機
[root@localhost ~]# init 1 ←進入維護模式

事實上關機的相關指令 poweroff / halt / shutdown 等,就是直接呼叫(system call) init 來執行的。

另外開機時的 init 運行級別是記錄在〝/etc/inittab〞,目前主流的 Linux 發行版預設開機大多為圖形界面(runlevel = 5),如想開機時改為文字操作界面,可在〝/etc/inittab〞中找到如下文字〝/id:5:initdefault:〞,其中的數字〝5〞為 init 運行級別,改為〝3〞後以後開機就是 CLI 文字操作界面。想進入圖形操作界面時再輸入 startx

^ back on top ^


1.3 清除螢幕
clear 清除螢幕
Linux 指令字打太多螢幕變的又擠又亂,此時可用指令 clear 來清除螢幕就乾爽多了。

reset 重置螢幕
有時不小心把 ACSII 的控制碼(ASCII from 0 to 31 或 127 to 255)輸出到螢幕,或某個程式異常,螢幕的輸出有可能會變亂碼,就算用 clear 或按 <Ctrl+L>也無法消除,此時還有絕招 reset 指令。

例:
[aaa@localhost ~]$ cat /sbin/reboot ←故意螢幕輸出一執行檔〝reboot〞(執行檔為機械碼)大部分會造成亂碼
┌┌␋┼┤│.⎽⎺.2 ␋┼␋├┌⎺±.
                        ▒┌ ⎻
os├ sbi┼] $ c┌e▒r ←就算用〝clear〞清除螢幕還是亂碼,只好用〝reset〞指令來重置螢幕,消除亂碼

^ back on top ^


1.4 輔助說明文件

Linux 不但指令多,每個指令選項更多,怎可能背的起來?我真的背不了幾個,且我個人認為知道原理比背指令重要,我是不會故意去背指令,我只〝大概〞了解有那些指令再配合一些技巧和 Linux 輔助說明文件應就夠平常操作所需:
技巧方面可多利用如下方法: 而 Linux 輔助說明文件就更豐富了,幾乎是指令參考手冊。唯一的要求是→ 不能〝菜英文〞。Linux 輔助說明文件最常用的有:

man 指令參考手冊
指令 man 是〝manual〞(參考手冊) 的意思,故如想查某指令使用手冊,只要輸入 man 指令 即可閱讀該指令的手冊頁( man page 或 manual page)。例如我想下指令 shutdownm 並令 10 分鐘後關機且通知其他的登入者,但我真的記不起選項,有老年痴呆的我也背不起來,而是〝大概〞了解選項好像有那些功能,真的要用忘記了就用 man shutdown 去查閱:

例:
[aaa@localhost ~]$ man shutdown
SHUTDOWN(8)           Linux System Administrator’s Manual          SHUTDOWN(8)

NAME
       shutdown - bring the system down

SYNOPSIS
       /sbin/shutdown [-t sec] [-arkhncfFHP] time [warning-message]

DESCRIPTION
       shutdown
  brings  the system down in a secure way.  All logged-in users
       are notified that the system is going down, and  login(1)  is  blocked.
       It is possible to shut the system down immediately or after a specified

中間略
OPTIONS
       -a Use /etc/shutdown.allow.

       -t sec Tell init(8) to wait sec seconds between sending processes the
          warning and the kill signal, before changing to another run-
          level.
中間略
SEE ALSO
       fsck(8), init(8), halt(8), poweroff(8), reboot(8)

進入 man 的指令參考手冊其後的操控如下:(如熟 vi 應會發現兩者的操作很像) 另外上例中的 man page 左上出現的數字如〝SHUTDOWN(8)〞那數字代表什麼意思呢?原來那數字代表〝手冊區段級別〞(manual sections),其數字意義如下:

man section numbers 說明
1 一般命令
2 系統呼叫(System call)
3 C 語言函數 (C library functions)
4 裝置檔
5 檔案格式
6 遊戲或螢幕保護程式
7 雜項
8 系統管理員的指令
9 Kernel Interface

所以〝SHUTDOWN(8)〞數字 8 表示目前的 man page 查到的用法為系統管理員的指令。
那我們怎知我們所要查的指令有那些〝section number〞呢?用 man -f 指令 即可了解。

例:
[aaa@localhost ~]$ man -f shutdown
shutdown            (2) - shut down part of a full-duplex connection
shutdown            (3p) - shut down socket send and receive operations
shutdown            (8) - bring the system down

上例 shutdown 的 section numbers 有 2、3p、8 。預設的情況,如沒指定section numbers,用 man 查的 section numbers 為 1 或 8,但如果是軟體開發人員,想查 shutdown 的系統呼叫(system call) 可指定 section numbers 為 2 或 3p,如 man 2 shutdown man 3p shutdown

為什麼 section numbers 除了數字,還會出現〝3p〞什麼是 3p?原來section numbers 還可能有〝subsection〞,次區段級別意義如下:

man Subsection 說明
p POSIX
x X Window System

subsection〝p〞即所謂的 POSIX,是〝Portable Operating System Interface〞(可移植作業系統介面)的縮寫,因 UNIX/Linux 版本眾多,為了要求不同版本也有一致的操作,IEEE(電機電子工程師學會)制定了 POSIX 標準。

另一次級別〝x〞即 X Window System 為 UNIX/Linux 下的圖形操作界面(GUI)。

shutdown 指令為例,雖然 shutdown 只有系統管理員(root)才可執行,但一般的使用者也可查閱不屬於自己權限的指令。且不管用 man 查那個指令,其結構都很類似,還算容易閱讀,man page 可能有的結構如下:

對記性不好的我而言 SEE ALSO 還蠻重要的,例如我可能只記得關機指令是 shutdown, 但 SEE ALSO 會提醒我和 shutdown 有相關的 initreboothalt 等指令。

man page 各參考手冊的資料都存放在那個目錄呢?可由指令 manpath 查閱其路徑,所以自行下載的指令如有附 man page 說明檔,記得要把該指令的 man page 存放在正確的位置,不然 man 會查不到喔。

例:
[aaa@localhost ~]$ man whereis | col -b > whereis.txt ←將 man page 存成文字檔

man 更詳細的用法請自行輸入 man man

^ back on top ^


info 指令參考手冊
傳統的 UNIX 輔助的說明文件只有 man page 的格式文件,但 man page 的格式文件有如〝神喻〞,隱晦難懂。所以 Linux 又提供 info 指令來查閱 info 格式文件,個人是覺得 info 所提供的格式文件比較〝親民〞,但 info 格式文件 比 man page 格式文件少很多,可不是所有的指令都有提供 info 格式的文件。如某指令沒提供 info 格式的文件,info 會用 man page 的格式文件輸出。

例:
[aaa@localhost ~]$ info shutdown
file: *manpages*,  Node: shutdown, Up:  (dir) ←如出現〝*manpages*〞表示無 info 格式文件,故借用 man page 的文件
SHUTDOWN(8)       Linux System Administrator’s Manual       SHUTDOWN(8)  

以下略

例:
[aaa@localhost ~]$ info su
file:coreutils.info, Node: su invocation, Next: dir invocation, Up: Modif\
ied command invocation ←如出現〝file:coreutils.info〞表示是正確的 info 格式文件

2.5 'su' : Run a command with substitute user and group ID
以下略
info page 的格式文件和 man page 格式文件最大的不同點是 info page 比較像瀏覽器,只是操作由瀏覽器的滑鼠改成鍵盤,按 Tab 可在不同的主題(node)間選擇,按 ↵ Enter 進入該主題,其詳細的瀏覽操控如下:
--help 指令自帶說明
大部分的情況,可能只是忘記指令有那些選項,動不動就用 maninfo 有點殺雞用牛刀。如忘了指令的選項一般我都會先試看看某指令有無自帶說明〝--help〞的次選項:

例:
[aaa@localhost ~]$ reboot --help
usage: reboot [-n] [-w] [-d] [-f] [-h] [-i]
        -n: don't sync before halting the system
        -w: only write a wtmp reboot record and exit.
        -d: don't write a wtmp record.
        -f: force halt/reboot, don't call shutdown.
        -h: put harddisks in standby mode.
        -i: shut down all network interfaces.

一般來說如果某指令有--help 的次選項,說明會比較短小精悍和淺顯易懂,但並不是所有的指令都有〝--help〞的次選項。

^ back on top ^




[註]可輸入 echo $HISTSIZE 來查詢可被記錄的指令筆數,而指令 histroy 實際上是登入後讀取家目錄的檔案〝.bash_history〞或〝histfiles〞的記錄 ,然後就把些記錄放在 memroy 累計,直到登出才再寫入,或下指令 histroy -w 強制寫入。