史萊姆論壇

返回   史萊姆論壇 > 專業主討論區 > 網路疑難應用技術研討區
忘記密碼?
論壇說明

歡迎您來到『史萊姆論壇』 ^___^

您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的!

請點擊這裡:『註冊成為我們的一份子!』

Google 提供的廣告


發文 回覆
 
主題工具 顯示模式
舊 2004-08-06, 06:43 PM   #1
貝斯特 帥哥
長老會員
 
貝斯特 的頭像
榮譽勳章
UID - 90669
在線等級: 級別:1 | 在線時長:11小時 | 升級還需:1小時
註冊日期: 2003-08-06
住址: The Gates of Hell
文章: 1758
現金: 15064 金幣
資產: 5185909 金幣
預設 Linux 文件命令精通指南

Linux 文件命令精通指南(上)
=======================================================
雖然 GUI 桌面(如 KDE 和 GNOME)能夠幫助用戶利用 Linux 特性,而無需關於命令行接口的功能知識,但還是經常會需要更多的功能和靈活性。而且,基本熟悉這些命令對於在 shell 腳本中正確地使某些功能自動化仍然是必需的。

這篇文章是關於 Linux 文件命令的一個「速成教程」,它是為那些剛接觸這個操作系統或者只是需要補充這方面知識的用戶提供的。它包含了對一些更有用的命令的一個簡明的概述以及關於它們的最強大的應用的指導。下面包含的信息 — 結合一些實驗 — 將使您能夠容易地掌握這些基本的命令。(注意:當涉及到一個與 Oracle 集群文件系統 (OCFS) 結合的內核時,這些命令中的某些命令的行為可能會稍微有所不同。在此情況下,Oracle 提供了一個 OCFS 工具集,該工具集可以為文件命令應用提供一個更好的選擇。)

注意,這裡包含的所有示例都在 SUSE Linux 8.0 Professional 上進行了測試。雖然沒有理由相信它們在其它的系統上將不能工作,但如果出現問題,您應當查看您的文檔,以瞭解可能的變化。

背景概念
在深入研究規範之前,讓我們回顧一些基礎知識。

文件和命令
在 Linux/UNIX 操作系統中,所有事物都被當作文件來處理:硬件設備(包括鍵盤和終端)、目錄、命令本身,當然還有文件。這個奇怪的慣例實際上是 Linux/UNIX 的能力和靈活性的基礎。

大多數(幾乎是全部)的命令形式如下:
command [option] [source file(s)] [target file]

獲取幫助
最有用的命令之一是那些提供幫助的命令(特別是對那些學習 Linux 的人而言)。Linux 中的兩個重要的信息來源是聯機參考手冊,或 man 頁面和 whatis 工具。您可以用 whatis 命令來訪問一個不熟悉的命令的 man 頁面。
$ whatis echo

要瞭解關於這個命令的更多信息,可以使用:
$ man echo

如果您不知道某個特殊任務所需的命令,您可以用 man -k (也稱為 apropos)和一個主題來生成可能的命令。例如:
$ man -k files

一個很有用但常常被忽視的命令可以提供關於使用 man 本身的信息:
$ man man

您可以用 SPACEBAR 來瀏覽任意的 man 頁面;UP ARROW 將向上翻滾文件。.要退出,則輸入 q,!,或 CTRL-Z。

用戶類別

記得那句名言「所有動物一例平等但有些動物比其他動物更加平等」嗎?在 Linux 世界中,根用戶掌管一切。

根用戶可以以另一個用戶名 su (源自 "superuser")登錄。要執行諸如添加一個新用戶、打印機或文件系統之類的任務,必須作為根用戶登錄或者用 su 命令和根用戶密碼切換到超級用戶。系統文件(包括控制初始化過程的系統文件)歸根用戶所有。雖然可能允許普通用戶對它們進行讀操作,但出於系統安全性的原因,編輯的權利將留給根用戶。

BASH shell

雖然提供了其它的 shell,但 BASH (Bourne Again Shell) 是 Linux 的預設 shell。它結合了與它同名的 Bourne shell 的特性和 Korn、C 和 TCSH shell 的特性。

BASH 內置的命令 history 預設記錄最後輸入的 500 條命令。可以通過在命令提示符下輸入 history 來查看它們。要檢索某個特定的命令,可以在命令提示符下按 UP ARROW 或 DOWN ARROW,或在歷史列表中輸入它的編號,並在編號前面加上 "!",例如:
$ !49

您還可以通過一條命令在歷史列表中離位置最靠前的項目的距離來執行該命令:如果在歷史列表中有 53 個事件,$ !-3 將執行事件號 51。

像 UNIX/Linux 世界的其它 shell 一樣,BASH 使用了特殊的環境變量來方便系統管理。例如:

HOME,用戶主目錄

PATH,Linux 用來搜索您輸入的命令的可執行鏡像的搜索路徑

HISTSIZE,系統保存的歷史事件的數量

除了這些保留的關鍵字之外,您還可以定義您自己的環境變量。例如,Oracle 使用 ORACLE_HOME (還有其它一些變量),要使 Oracle 安裝成功完成,必須在您的環境中設置這些變量。

可以在提示符下臨時設置變量:
$HISTSIZE=100

或者,在 /etc/profile (需要根用戶權限)中進行系統範圍的永久設置,或在 .profile 中進行局部永久設置。

可以通過 echo 命令,並用一個 $ 符號來訪問一個環境變量的值,進而查看該值。
$ echo $HOME
/home/bluher

可以用 env 命令來查看目前所有的環境變量。

正則表達式和通配符

許多 Linux 命令使用通配符 * 和 ? 來匹配任意數量的字符或分別匹配任意的單個字符;正則模式匹配表達式利用一個句點 (.) 來匹配除「換行符」之外的任意單個字符。這兩種情況下都使用方括號 ([ ]) 來匹配除「*」號之外的字符組。不過,* 號在各種情況下有類似但不同的意義:雖然它在 shell 中將匹配一個或更多的字符,但在正則表達式中,它匹配上述字符的零個或更多的實例。一些命令(如 egrep 和 awk)使用了一組更廣泛的特殊字符來進行模式匹配。

文件處理命令

剖析一個文件列表

ls 命令用來查看用戶有執行權限的任意目錄中的文件列表,該命令有許多有趣的選項。例如:
$ ls -liah *
22684 -rw-r--r-- 1 bluher users 952 Dec 28 18:43 .profile
19942 -rw-r--r-- 1 scalish users 30 Jan 3 20:00 test2.out
925 -rwxr-xr-x 1 scalish users 378 Sep 2 2002 test.sh

上面的列表顯示 8 列:

第 1 列指示文件的 inode,因為我們使用了 -i 選項。剩下的列通過 -l 選項來進行正常顯示。
第 2 列顯示文件類型和文件訪問權限。
第 3 列顯示連結數,包括目錄。
第 4 和第 5 列顯示文件的所有者和組所有者。這裡,所有者 "bluher" 屬於組 "users"。
第 6 列顯示文件大小(單位為所顯示的單位,而不是預設的字節數,因為我們使用了 -h 選項。
第 7 列顯示日期(它看起來像是三列),包括月、日和年,以及當天的時間。
第 8 列顯示文件名。在選項列表中使用 -a 將使列表中包含隱藏文件(如 .profile)的列表。

處理文件

可以移動 (mv)、複製 (cp) 或刪除 (rm) 文件和目錄。明智地使用 -i 選項,以獲得確認通常是個不錯的主意。
$ cp -i ls.out ls2.out
cpverwrite `ls2.out'?

mv 命令允許使用 -b 選項,這將在移動文件之前作一個備份拷貝。rm 和 cp 接受功能強大但卻危險的 -r 選項,它將在一個目錄和它的文件上遞歸執行。
$ rm -ir Test
rm:descend into directory `Test'? y

可以用 mkdir 來建立目錄,用 rmdir 來刪除目錄。不過,因為不能用 rmdir 來刪除包含文件的目錄,所以使用 rm 加 -r 選項通常要更方便些。

出於安全的原因,所有的文件都有所有權和保護。文件訪問權限(或文件模式)包含之前提到的相同的 10 個字符:

第一個字符指示文件類型。最常見的是 - 代表文件,d 代表目錄,而 l 代表連結。
接下來的 9 個字符是三種用戶類別的訪問權限:文件所有者(字符 2-4),用戶組 (5-7) 和其它 (8-10),其中 r 表示讀權限,w 表示寫權限,x 指示一個文件上的執行權限。破折號 - 如果出現在這九個位置的任意一個,則指示這個操作對該類別的用戶禁止。

可以使用 chmod 命令通過字符符號或二進制掩碼來設置訪問權限。要使用二進制掩碼,必須將三個權限組的字符表示轉換成二進制格式,然後轉換成八進制格式:

用戶類別: 所有者 用戶組 其它
字符表示: rwx r-x r--
二進製表示: 111 101 100
八進製表示: 7 5 4

將寫權限賦予用戶組,您可以使用:
chmod g+w test.sh or chmod 774 test.sh

用 umask 命令,在 /etc/init.dev 文件中進行系統範圍內的、或在 .profile 文件中進行的本地的文件權限預設設置。這個命令指示用 777 減去這個數字來獲取預設的權限:
$ umask 022

這將為用戶建立的所有新文件生成一個預設的文件權限 755。

可以用 chown 來修改文件的所有權:
$ chown bluher ls.out

這裡,bluher 是新的文件所有者。類似地,組成員資格將按以下方式修改:
$ chgrp devgrp ls.out

這裡,devgrp 是新的用戶組。

ls 不提供哪些文件是文本的,哪些文件是二進制的的信息。要瞭解這個信息,您可以使用 file * 命令。

重命名文件

賦予一個文件多個名字的兩種流行的方法是利用連結和 alias 命令。Alias 可以用來為一個更長的命令重新起一個更方便的名字:
$ alias ll='ls -l'
$ ll

注意單引號的使用,這使得 BASH 將該項目傳遞給別名,而不是自己估計它。別名還可用作較長的路徑名的縮寫:
$ alias jdev9i=/jdev9i/jdev/bin/jdev

關於 alias 和它的反命令 unalias 的更多信息,請查看 BASH 的 man 頁面的 "SHELL BUILTIN COMMANDS" 子部分。在最後一個例子中,定義了一個環境變量來實現相同的結果。
$ export JDEV_HOME=/jdev9i/jdev/bin/jdev
$ echo $JDEV_HOME
/jdev9i/jdev/bin/jdev
$ $JDEV_HOME

連結允許幾個文件名引用單個源文件,格式如下:
ln [-s] fileyouwanttolinkto newname

單獨的 ln 命令建立到文件的一個硬連結,而使用 -s 選項來建立一個符號連結。簡而言之,一個硬連結幾乎不能和原始的文件區分開(除了這兩個文件的 inode 將相同之外)。符號連結較容易區分,因為它們出現在一個長的文件列表中,並用 -> 來指示源文件,l 指示文件類型。

查看和查找文件

文件過濾器

用來讀取文件內容和在文件內容上執行操作的命令有時被稱為 1y濾器。sed 和 awk 命令是兩個濾波器的例子,因為在以前的 OTN 文章中有它們詳細的討論,在這裡將略過。

諸如 cat、 more 和 less 之類的命令讓您能夠從命令行查看一個文本文件的內容,而無需調用編輯器。Cat 是 "concatenate" 的縮寫,它將預設地在標準輸出(顯示屏)上顯示文件內容。和 cat 一起提供的最有趣的選項之一是 -n 選項,它用編號的輸出行來顯示文件內容。
$ cat -n test.out
1 This is a test.

因為 cat 一次性輸出文件中的所有行,所以您可能更喜歡用 more 和 less,因為它們都一次輸出一屏的文件內容。Less 是 more 的一個增強的版本,它允許用來自 vi 文本編輯器的關鍵命令來增強文件查看。例如,d 向前翻滾、b 向後翻滾 N 行(如果 N 是在 d 或 b 之前指定的)。為 N 輸入的值成為隨後的 d 命令的預設值。man 頁面實用工具使用 less 來顯示使用說明的內容。

重定向和管道

重定向允許將命令輸出重定向到文件中,而不是標準輸出,或者類似地,也可重定向輸入。重定向的標準符號 > 建立一個新的文件。>> 符號將輸出添加到一個現有的文件中:
$ more test2.out
Another test.
$ cat test.out >> test2.out
$ cat test2.out
Another test.
This is a test.

到文件的標準輸入可以用 < 符號來重定向:
$ cat < test2.out

錯誤消息用 2> 和 2>> 來重定向和添加,格式如下:
$ command 2> name_of_error_file

要避免無意地覆蓋一個現有的文件,使用 BASH 內置的命令集:
$ set -o noclobber

可以在命令和輸出文件之間用 >! 符號來重載這個特性。要關閉這個特性,用 +o 代替 -o。
重定向在一個命令和文件之間、或文件和文件之間工作。重定向語句的一項必須是一個文件。

管道使用 |符號,並且在命令之間工作。例如,您可以用以下方式將一個命令的輸出直接發送到打印機上:
$ ls -l * | lpr

可以用以下方式快速地找到歷史列表中的一個命令:
$ history | grep cat

更多的濾波器

Grep、fgrep 和 egrep 都顯示匹配一種模式的行。所有這三個命令都在文件中搜索指定的模式,如果您想不起來一個所需文件的名稱,這將非常有用。基本格式是:
grep [options] PATTERN [FILE...]
$ grep -r 'Subject' nsmail
CTRL-Z 將終止上述或其它任何命令。

grep 的最有用的選項可能是 -s。如果您以除根用戶之外的任何身份搜索系統文件,那麼對於每一個您沒有訪問權限的文件,都將產生錯誤消息。這個命令禁止那些消息。

Fgrep(也以 grep -F 調用)只查找固定的字符串,而不是 grep 接收的正則表達式。而 egrep 接收包含更大範圍的特殊字符(如 「|」,它指示條件 OR 運算符)的模式。
$ egrep 'Subject|mailto' *

查找文件

find 命令的 GNU 版本非常強大、靈活並且比 UNIX 系統上存在的經典版本更具包容性。它對於涉及到目錄結構的任務非常有用,包括在文件上查找和執行命令。find 命令的基本格式是:
$ find startdirectory options matchcriteria [actionoptions]

如果您知道文件的名稱、或者甚至名稱的一部分,但不知道它所處的目錄,您可以這麼做:
$ find .-name 'test*'
./test
./jdevhome/mywork/EmpWS/EmpBC4J/test

與經典的 UNIX 系統不同,在 Linux 中不需要在末尾添加 -print 操作,因為如果沒有指定其它的操作選項,就將假定執行這個操作。在目錄起始位置上的一個點 ( . ) 將使 find 在您的工作目錄中開始搜索。兩個點, ..,在父目錄中開始搜索。您可以在任意目錄下開始搜索。

注意,您可以使用通配符作為搜索準則的一部分(只要用單引號將整個項目括起來)。
$ find .-name 'test*' -print
./test.out
./test2.out

顯示擁有 .out 副檔名的一系列文件:
$ find /home -name '*.out'

不過記住,除非您是作為超級用戶運行這個命令,否則您將可能得到許多的 "Permission denied" 錯誤消息。

最強大的搜索工具之一是和 grep 一起使用的 -exec 操作:
$ find .-name '*.html' -exec grep 'mailto:foo@yahoo.com' {} \;

這裡,我們讓 find 命令在目前目錄中開始執行,.,查找一個 html 文件,*.html,並在目前文件上執行 (-exec) grep 命令,{}。當使用 -exec 操作時,需要一個分號 ;,這是用來在使用 find 命令時執行其它一些操作。需要反斜線 \ 和引號來確保這些項目通過 BASH,以使它們由命令而不是 shell 來進行解釋。

立即掌握 Linux 文件命令

在 Linux 中提供了許多有用的命令和利用它們的強大的方法,在此無法一一說明。此外,完成許多任務通常都存在多種方法。

我們已經看到了一些最常用和最有啟發意義的 Linux 文件命令。掌握這些基礎但卻關鍵的工具將使您的 Linux 學習走上快車道。利用您手頭上的 man 頁面,和試驗的積極性,您現在擁有了足夠的信息來開始探索 Linux 文件操作的力量。

在我的下一篇文章中,我將提供 Linux 系統命令的一個類似的說明。

作者簡介

Sheryl Calish [scalish@earthlink.net] 是 Blue Heron Consulting 的一位專門研究 Linux 的 Oracle 開發人員。她還是 Central Florida Oracle Users Group 的基金主席和 IOUG Linux SIG 的銷售主席。
__________________

給自己看也給所有需要這些話鼓勵的人看!

認真不一定會得到美好的結果,但是不認真就一定沒有

想要有什麼結果,就秉持你的雙手
放手去做
總比什麼都沒付出最後失敗了才嘆氣來的好吧
沒努力的人.沒有資格說放棄
努力過的人.更要有勇氣繼續努力下去
貝斯特 目前離線  
送花文章: 1, 收花文章: 38 篇, 收花: 123 次
回覆時引用此帖
舊 2004-08-06, 06:44 PM   #2 (permalink)
長老會員
 
貝斯特 的頭像
榮譽勳章
UID - 90669
在線等級: 級別:1 | 在線時長:11小時 | 升級還需:1小時
註冊日期: 2003-08-06
住址: The Gates of Hell
文章: 1758
現金: 15064 金幣
資產: 5185909 金幣
預設

Linux 文件命令精通指南(下)
==========================================================
在「Linux 文件命令精通指南(上)」中,我們討論了利用最基礎和最常用 Linux 文件命令所需的基本訊息。在本文中,我將對 Linux 系統命令作同樣的討論。

我們在前一篇文章中瞭解到,在 Linux/UNIX 世界中,一切都被看作文件,包括系統管理命令。單獨對於組織而言,我們在本系列的第一部分中討論了文件命令,並將在本文中提供最有用的系統診斷和維護命令。

對於文件命令,我們在此處詳盡討論了某些相當簡單和直觀的管理命令。而只描述了其他較複雜命令的功能,以便在您需要使用時,知道存在這些命令及其用途。本文不涉及對每個命令使用背後的基本原理的詳細討論,但是我們將討論最基本和最有用的命令,這些命令用於監視和管理印表機服務、文件系統、磁碟和進程。

有關超級用戶的更多訊息

這裡討論的很多命令可以由常規用戶在其自己的文件和進程中執行。但是,某些命令,如 fdisk,需要有 root 權限才能運行。

為了您的系統的完整性,建議您避免直接以 "root" 登錄到系統中。相反,通常更適合以常規用戶登錄,然後執行 su 或從 X window 執行 sux 命令來運行系統管理功能。(Sux 為您提供 X window 環境以及 root 權限。)當您以 root 用戶登錄時,您會始終知道您處於這種狀態,因為您的提示符變為「#」。

超級用戶能夠使用 sudo,有選擇地將那些通常為 root 用戶或其他特殊用戶所保留的權限分配給一個不同的常規用戶。root 用戶可以定義實際和有效的用戶和組標識號 uid 和 gid,以便與預期用戶的標識相匹配。這種預期用戶可以是(但不必是)被允許運行該命令的用戶。

換言之,超級用戶可以允許其他用戶執行某個命令,但也可以確定由進程所產生的任何結果文件應該屬於 root 用戶或任何由超級用戶指定的其他用戶。Sudo 權限一經分配,則只需要用戶使用自己的口令進行驗證,而不需要 root 用戶口令。

通用命令

從技術上講,Uname、diff、date、sort 和 uniq 應該看作文件命令,但由於它們經常用於診斷和維護例程的系統管理方面,在這裡解釋它們更有意義。

Uname
Uname 提供了常規系統訊息。當指定 -a 選項時,顯示所有可用訊息:
$ uname -a
Linux linux 2.4.18-4GB #1 Wed Mar 27 13:57:05 UTC 2002 i686 unknown

在這裡我們從左向右看到常規的系統訊息。每條訊息都有自己的選項(在下面的圓括號中),可以單獨顯示:

操作系統名稱為 Linux(-s)。

本機的網絡節點名為 linux (-n)。

操作系統發佈版本為 4.5.18-4GB (-r)。

操作系統版本為 #1 Wed Mar 27 13:57:05 UTC 2002 (-v)。

機器類型為 i686 (-m)。

這裡的處理器類型 (-p) 為未知。

類似地,stty 顯示關於您的終端設定的訊息:
$ stty -a
speed 38400 baud; rows 40; columns 103; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = ; eol2 = ; start = ^Q;
stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts -ignbrk -brkint -ignpar -parmrk -inpck
-istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke

第二行和第三行顯示了將在命令行分別調用的特殊字符和鍵序列。例如,"^Z" 即 CNTRL-Z 在本系統中發送一個終端休止符。退出符號以 "^\" 即 CNTRL-\ 發送,而我們可以將其改為 "^X",如下所示:
$ stty quit ^X

在這種情況下,您實際要輸入 ^ 符號,而不是 CNTRL 鍵。這種改變只在目前窗口中起效。為了使這種改變永久生效,需要在您的 .bashrc 文件中輸入該語句。

Diff 和 Date。顧名思義,Diff 比較兩個文件。它返回那些導致文件不同的行,並返回關於如何使文件變得相同的一些含義隱晦的輸出:
$ diff test.out test2.out
0a1
> Another test.

在這裡我們被告知,需要將 "Another test." 這一行添加到 test.out,以便使它與 test2.out 相似。第一個字符 "0" 是要在 test.out 中編輯的行號;"a" 表示該行應該被添加到 test.out,以便與 test2.out 的第一行 "1" 相匹配。如果我們需要更改 test.out,則第二個字符也可以是 "c",而如果我們需要從 test.out 中刪除一些內容,則第二個字符是 "d"。

您可能希望使一個文件與另一個文件相似,以便為某些程式碼提供修正。diff 還經常作為分析工具,用於驗證程序或腳本 — 例如 sed 腳本 — 的輸出是否是所預期的輸出。

date 命令可用於顯示或設定日期。如果用戶具有超級用戶權限,則他或她可以通過在以下命令中提供一個數字型字符串來設定日期:
$ date 0101010004
此命令將日期設定為 2004 年 (04) 1 月 1 日 (0101) 凌晨 1 時 (0100)。

但是,任何用戶可以用所需的格式來顯示日期。注意在格式序列之前需要一個加號 "+"。如果沒有出現此命令的預期輸出,則嘗試將它包含在單引號中:
$ date +'%H%M%S'
204748

您可以在序列中包含空格,這時您需要使用雙引號:
$ date +"%H %M %S"
20 47 51

在日期的主頁上列有三十多種不同的格式序列,這些序列可以按需要結合起來,以獲得您最後的輸出格式。

date 的輸出還可以用於腳本中,如:
$ date -d '2 day'
Thu Jan 29 19:02:02 EST 2004

-d 選項指示 date 顯示其後字符串中所描述的時間。在上例中,我們要求顯示從現在起(2004 年 1 月 27 日)兩天後的日期。我們也可以要求顯示三天前的日期,其命令為:
$ date -d '-3 day'
Sun Jan 25 20:56:59 EST 2004

date 多種功能的另一個示例是能夠向其輸出附加字符串,為生成唯一的文件名提供了一種便利的方法。
$ ls -l | cat > $(date +ls_%d%b%y%H%M.out)
$ ls ls_*.out
ls_04Feb041633.out

在這裡,我們將一個長文件列表的輸出傳送給 cat,它將我們的輸出再傳送到一個名為 ls_04Feb041609.out 的文件。注意我們為文件名使用了一個變量,由美元符號 "$" 表示。依次將 "ls_" 和 ".out" 附加到日期,其格式為月份中的日 (%d)、本地的月份名稱縮寫 (%b)、年份的最後兩位數字 (%y)、小時 (%H) 和分鐘 (%M),從而產生此文件名。

Sort 和 Uniq。 您可以從管道或從命令行所指定的文件對文本文件的行進行 sort 操作。除非另外指定,sort 對多列輸出的第一列進行操作。在預設情況下,除非使用 -n 選項,數字型的列按字母順序排序。

Sort 列可以用兩種不同的格式指定。如果使用 -k 選項,則列的位置從 1 開始進行編號。您還可以使用 +POS1 格式,從第一列編號為零開始進行列的編號。以下兩個命令產生相同的輸出:
$ ls -l *.out | sort +5 -7
$ ls -l *.out | sort -k 6,8
-rw-r--r-- 1 bluher users 375 Dec 5 2002 fdisk.out
-rw-r--r-- 1 bluher users 2447 Dec 28 20:15 ls.out
-rw-r--r-- 1 bluher users 590 Jan 4 21:24 greps.out
-rw-r--r-- 1 bluher users 78 Jan 4 21:25 sgrep.out
...

在預設情況下,sort 命令的列分隔符是空格和製表符。可以使用 -t SEP 選項指定其他分隔符,其中 SEP 是您指定的分隔符號。sort 的預設順序是從最低到最高,利用 -r 選項可以將順序顛倒。

Sort 可用於很多不同的任務。例如,它可用於對文件輸出進行排序(如 /etc/passwd),或者如我們在下面所看到的那樣,對 du 的輸出進行排序。當使用 -m 選項時,sort 將文件合併,實際上並沒有對它們進行排序。但是,如果您希望將它們排序,就應該在文件合併前對它們排序。

Sort 經常與 uniq 命令一起使用,從已排序的文件中刪除完全相同的行。uniq 命令在管道中經常跟在 sort 命令的後面,還可以使用 -c 選項來計算某一行所出現的次數,或者使用 -d 選項,只報告完全相同的行:
$ sort -m test.out test2_sort.out | uniq -c
1 Another test.
1 Testing testing
2 This is a test.

在這裡我們合併兩個文件 test.out 和 test2_sort.out。然後我們使用 -c 選項,將輸出傳送到 uniq,這樣最後的結果是按字母順序排列的列表,完全相同的行被刪除,並帶有一個關於每行出現頻率的報告。

印表機控制

在多數情況下,印表機命令的使用相對較為明確。通過在 lpr 命令後面指定文件名,將作業發送到印表機。如果沒有提供文件名,則假定使用標準輸入。使用 lpq 命令,您可以獲得關於發送到印表機的作業的狀態報告。當您指定作業號時,Lprm 將作業從行印表機後台列印隊列中刪除。
引用:
$ lpr grep2.out
$ lpq
Printer:lp@linux 'lpdfilter drv=upp method=auto color=yes'
Queue:1 printable job
Serverid 1929 active
Unspoolerid 1930 active
Status:waiting for subserver to exit at 21:24:14.637
Rank Owner/ID Class Job Files Size Time
active bluher@linux+928 A 928 grep2.out 779 21:24:14
done bluher A 877 (STDIN) 117258 13:09:53
$ lprm 928
Printer lp@linux:
checking perms 'cfA928linux.local'
dequeued 'cfA928linux.local'
在這裡,當我們將作業發送到印表機後,我們查詢其狀態。Lpq 向我們顯示編號為 877 的作業已經完成,而我們剛發送的作業編號為 928。我們使用命令 lprm 928 將活動的作業從隊列中刪除。

磁碟訊息

無論您是維護自己的系統還是支持具有很多用戶的企業,監視磁碟空間都是系統管理員更重要的職責之一。du、df 和 fdisk 命令提供了可用磁碟空間的不同視圖。

du 命令提供對每個目錄的文件空間使用情況的評估。在預設情況下,測量的單位是塊的數目,塊的大小通常在安裝您的系統時確定。

在以下的示例中,系統是使用 1024 字節的塊安裝的。如果沒有指定目錄,則 du 開始對目前目錄進行計算。-h 選項以易於讀懂的形式提供大小的值:
引用:
$ du -h Documents
105k Documents/jj
573k Documents/John
682k Documents
可以使用 -a 選項更改輸出,該選項指示 du 顯示文件和目錄的塊數。選項 --block-size=SIZE 指示 du 以 SIZE 所指定字節大小的塊的數目來顯示輸出。
引用:
$ du --block-size=512 Documents
209 Documents/jj
1146 Documents/John
1363 Documents
在預設情況下,du 還為每個子目錄遞歸地列印訊息。通過使用 max-depth=N 選項可以限制這種操作,其中 N 等於被報告的最大級數:
引用:
$ du --max-depth=2 .
$ du --max-depth=2 | sort -n
4 ./.xemacs
4 ./public_html
105 ./Documents/jj
573 ./Documents/Ian
682 ./Documents
2420 ./jdevhome/system
8350 ./jdevhome/system9.0.3.1035
13483 ./jdevhome/mywork
24252 ./jdevhome
...
du 報告目錄和子目錄的空間使用情況,而 df 報告已安裝文件系統的磁碟空間使用情況:
引用:
$ df
Filesystem 1k-blocks Used Available Use% Mounted on
/dev/hda6 4195632 1983656 2211976 48% /
/dev/hda5 14607 3778 10075 28% /boot
/dev/hda9 937372 494028 443344 53% /home
/dev/hda8 6297248 3876880 2420368 62% /opt
shmfs 256220 0 256220 0% /dev/shm
在這裡,df 報告了五個文件系統的狀態。與 du 類似,df 利用 -h 選項提供人類可讀的輸出:
引用:
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/hda6 4.0G 1.9G 2.1G 48% /
/dev/hda5 14M 3.7M 9.8M 28% /boot
/dev/hda9 915M 476M 440M 52% /home
/dev/hda8 6.0G 3.7G 2.3G 62% /opt
shmfs 250M 0 250M 0% /dev/shm
df 命令還允許您利用 -block-size=SIZE 選項來指定塊的大小。

fdisk 命令是 Linux 的分區表操作命令。與 du 和 df 不同,沒有 root 用戶權限時不能運行該命令。如果指定了 -l 選項,則可以將它僅用於報告的目的。它提供了您的整個分區表的完整視圖,而不僅僅是您使用 df 所看到的擴展 Linux 分區:
引用:
# fdisk -l

Disk /dev/hda:240 heads, 63 sectors, 1940 cylinders
Units = cylinders of 15120 * 512 bytes

Device Boot Start End Blocks Id System
/dev/hda1 1 286 2162128+ c Win95 FAT32 (LBA)
/dev/hda2 * 288 1940 12496680 5 Extended
/dev/hda5 288 289 15088+ 83 Linux
/dev/hda6 290 844 4195768+ 83 Linux
/dev/hda7 845 983 1050808+ 82 Linux swap
/dev/hda8 984 1816 6297448+ 83 Linux
/dev/hda9 1817 1940 937408+ 83 Linux
進程監視

在繁忙的多用戶系統中,進程監視也是 Linux 系統管理員的一項重要職責。在這方面,ps 和 top 是兩個最有用的命令。
ps 命令提供了目前運行進程的快照。

生動詳實的一課
引用:
$ ps
PID TTY TIME CMD
3884 pts/1 00:00:00 bash
3955 pts/2 00:00:00 more
3956 pts/5 00:00:05 sqlplus
PID 是進程的標識號。
TTY 是進程所屬的終端控制台。
TIME 列是進程所使用的總的 CPU 時間。
CMD 列列出正在執行的命令行。

使用帶有 -ef 選項的 ps,返回系統中所有用戶的所有進程的完整列表。如果您將此 ps 命令的結果傳送到 grep 中,則該結果更易於查看。例如:
引用:
$ ps -ef | grep oracle
UID PID PPID C STIME TTY TIME CMD
oracle 1633 1 0 13:58 ?00:00:00 ora_pmon_ora1
oracle 1635 1 0 13:58 ?00:00:00 ora_dbw0_ora1
oracle 1637 1 0 13:58 ?00:00:01 ora_lgwr_ora1
oracle 1639 1 0 13:58 ?00:00:02 ora_ckpt_ora1
oracle 1641 1 0 13:58 ?00:00:02 ora_smon_ora1
oracle 1643 1 0 13:58 ?00:00:00 ora_reco_ora1
oracle 1645 1 0 13:58 ?00:00:00 ora_cjq0_ora1
oracle 1647 1 0 13:58 ?00:01:18 ora_qmn0_ora1
oracle 1649 1 0 13:58 ?00:00:00 ora_s000_ora1
oracle 1651 1 0 13:58 ?00:00:00 ora_d000_ora1
注意,當您將 ps 的輸出傳送到 grep 命令時,列標題並不像在 ps 命令本身所使用時那樣正常地顯示。為便於說明,標題位於輸出的上方,以便清楚地顯示其聯繫。

雖然 uid 通常是指數字型的標識,但在第一列下指定的是用戶名,標記為 UID。

PPID 是父進程的標識號。對於 Oracle 進程,這裡的標識號為 1 — 它是 init 進程(所有進程的父進程)的 id,因為在本系統中安裝的 Oracle 是作為登錄進程的一部分而啟動的。
標為 C 的列是由 CPU 用於計算執行優先級的因子。
STIME 是指進程的啟動時間。
問號表示這些進程不屬於任何 TTY,因為它們是由系統啟動的。

以下是 ps 命令帶有某些不同選項的另一個示例。注意,其中很多列與執行帶有 -ef 選項的 ps 時的列相同:
引用:
$ ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
bluh 4024 0.0 0.2 2240 1116 pts/1 S 20:59 0:00 su bluher
bluh 4025 0.0 0.3 2856 1668 pts/1 S 20:59 0:00 bash
bluh 4051 0.0 0.2 2488 1504 pts/1 R 21:01 0:00 ps aux
bluh 4052 0.0 0.1 1636 600 pts/1 S 21:01 0:00 grep bluher
除了提供重要的診斷訊息,ps 命令還經常用於找出失控進程的 PID。例如,您的一個用戶在 SQL*Plus 會話中輸入一個笛卡爾聯接。您可以執行以下的 ps 命令來找出其 PID:
引用:
$ ps -ef | grep bluher
...
bluher 4068 4064 0 21:14 pts/6 00:00:00 less
bluher 4112 3945 0 21:28 pts/5 00:08:42 sqlplus
...
然後您可以使用以下命令將其終止:
$ kill 4112

常規用戶可以看到所有的系統進程,但他們只能終止他們自己擁有的進程。

Ps 只為您提供目前進程的快照。要即時查看最活躍的進程,可使用 top。Top 實時地提供進程訊息。它還擁有交互式的狀態,允許用戶輸入命令,如 n 後面跟有 5 或 10 等數字。其結果是指示 top 顯示 5 或 10 個最活躍的進程。Top 持續運行,直到您按 "q" 退出 top 為止。

以下是 top 的部分顯示:
引用:
8:14pm up 51 min, 7 users, load average: 0.02, 0.03, 0.05
96 processes:87 sleeping, 2 running, 0 zombie, 7 stopped
CPU states:6.4% user, 3.5% system, 0.0% nice, 89.9% idle
Mem:512440K av, 392288K used, 120152K free, 0K shrd, 55668K buff
Swap:1050800K av, 0K used, 1050800K free 236128K cached

PID USER PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME COMMAND
1289 root 18 0 78008 11M 1796 R 3.7 2.2 0:49 X
1965 bluher 20 0 12244 11M 10456 S 1.9 2.3 0:01 kdeinit
1986 bluher 18 0 996 996 768 R 1.5 0.1 0:00 top
1803 bluher 20 0 16960 16M 13508 S 0.9 3.3 0:03 kdeinit
1804 bluher 20 0 16964 16M 13508 S 0.9 3.3 0:03 kdeinit
1800 bluher 19 0 12260 11M 10076 S 0.1 2.3 0:04 kdeinit
1 root 20 0 220 220 188 S 0.0 0.0 0:04 init
...
關閉

看來應該以 shutdown 命令來結束本次討論。與本文以及上一篇文章中所討論的許多命令一樣,通常有一種 GUI 形式的替代方法可以關閉您的系統。但是,當您需要手動關閉時,您可以使用以下命令立即進行關閉:
$ shutdown -h now

您可以使用以下命令手動地重新啟動系統:
$ shutdown -r now

注意這兩個命令都需要指定時間。您可以指定 "now" 或使用帶有時間秒數的 -t 選項。

我們在這兩篇文章中討論了大量內容,但我們絕對無法涵蓋 Linux 可能具有的全部內容。我們沒有討論的命令還有很多,而我們沒有看到的命令選項則更多。但是,在這裡我們希望您至少找到了開始管理 Linux 系統所需的最少限度的工具。

作者簡介

Sheryl Calish 是 Blue Heron Consulting 的一位專門研究 Linux 的 Oracle 開發人員。她還是 Central Florida Oracle Users Group 的基金主席和 IOUG Linux SIG 的銷售主席。




貝斯特 目前離線  
送花文章: 1, 收花文章: 38 篇, 收花: 123 次
回覆時引用此帖
發文 回覆



發表規則
不可以發文
不可以回覆主題
不可以上傳附加檔案
不可以編輯您的文章

論壇啟用 BB 語法
論壇啟用 表情符號
論壇啟用 [IMG] 語法
論壇禁用 HTML 語法
Trackbacks are 禁用
Pingbacks are 禁用
Refbacks are 禁用

相似的主題
主題 主題作者 討論區 回覆 最後發表
linux - 完全用Linux工作 psac 作業系統操作技術文件 10 2006-10-02 04:41 AM
100個最佳Linux站點 psac 網路疑難應用技術研討區 6 2005-03-03 08:31 AM
100個最佳Linux站點 飛鳥 網路疑難應用技術研討區 7 2004-07-03 11:43 PM
理解 GNU/Linux psac 網路疑難應用技術研討區 13 2004-04-16 12:17 PM
100個最佳Linux站  aacced 網路疑難應用技術研討區 0 2003-11-14 06:49 PM


所有時間均為台北時間。現在的時間是 02:15 AM


Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2024, Jelsoft Enterprises Ltd.


SEO by vBSEO 3.6.1