Linux 系統命令精通指南
針對 Linux 初學者的系統命令簡介
在 “ ” 中,我們討論了利用最基礎和最常用 Linux 檔案命令所需的基本資訊。在本文中,我將對 Linux 系統命令作同樣的討論。
我們在前一篇文章中瞭解到,在 Linux/UNIX 世界中,一切都被看作檔案,包括系統管理命令。單獨對於組織而言,我們在本系列的第一部分中討論了檔案命令,並將在本文中提供最有用的系統診斷和維護命令。
對於檔案命令,我們在此處詳盡討論了某些相當簡單和直觀的管理命令。而只描述了其他較複雜命令的功能,以便在您需要使用時,知道存在這些命令及其用途。本文不涉及對每個命令使用背後的基本原理的詳細討論,但是我們將討論最基本和最有用的命令,這些命令用於監視和管理印表機服務、檔案系統、磁碟和程式。
[@more@]有關超級使用者的更多資訊
這裡討論的很多命令可以由常規使用者在其自己的檔案和程式中執行。但是,某些命令,如 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 =
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
Server:pid 1929 active
Unspooler:pid 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 的最簡單形式:
$ 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 的銷售主席。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/653579/viewspace-894449/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 精通 Linux 的 ls 命令Linux
- 精通 Linux 的 “kill” 命令Linux
- Linux系統命令之systemctl命令。Linux
- Linux系統命令大全。Linux
- Linux常用系統命令Linux
- Linux系統命令3Linux
- Linux 系統監控指南Linux
- Linux 系統檢視命令Linux
- Linux常用系統管理命令Linux
- linux系統命令記錄Linux
- linux命令入門指南Linux
- uname命令顯示系統資訊?linux系統運維命令Linux運維
- Linux系統管理命令二(轉)Linux
- Linux系統常用命令Linux
- Linux系統如何使用Fuser命令Linux
- Linux作業系統 paste命令Linux作業系統AST
- Linux系統執行命令方法Linux
- Linux系統下活用History命令Linux
- 全新 Kali Linux 系統安裝指南Linux
- Linux系統檔案學習內容多嗎?linux系統命令Linux
- Linux系統中的管道命令、grep命令、sed命令和awk命令Linux
- 快速上手Linux核心命令(七):Linux系統資訊相關命令Linux
- Linux系統管理-常用命令Linux
- linux系統awk命令使用詳解Linux
- Linux檢視系統版本命令Linux
- Linux 檢視系統檔案命令Linux
- Linux系統中head命令例項Linux
- Linux 根檔案系統的移植(從入門到精通)Linux
- 對於Linux系統管理命令方面都有哪些?怎樣學習Linux系統Linux
- Linux系統的命令應該如何記?Linux
- 【Linux系統】fdisk相關分割槽命令。Linux
- Python 執行 Linux 作業系統命令PythonLinux作業系統
- Linux 檔案系統掛載mount命令Linux
- 非常有用的Linux系統操作命令Linux
- Linux中系統狀態檢測命令Linux
- linux系統中xargs命令的使用方式Linux
- 虛擬機器之linux系統命令虛擬機Linux
- Linux系統下find、locate命令如何使用?Linux
- Linux檔案系統iNode及stat命令Linux