天天看點

linux常用指令加執行個體大全

目  錄

引言    1

一、安裝和登入    2

(一)    login    2

(二)    shutdown    2

(三)    halt    3

(四)    reboot    3

(五)    install    4

(六)    mount    4

(七)    umount    6

(八)    chsh    6

(九)    exit    7

(十)    last    7

(十一)    動手練習    7

二、檔案處理    9

(一)    file    9

(二)    mkdir    9

(三)    grep    10

(四)    dd    11

(五)    find    11

(六)    mv    13

(七)    ls    13

(八)    diff    14

(九)    cmp    15

(十)    cat    15

(十一)    ln    16

(十二)    動手練習    16

三、系統管理    18

(一)    df    18

(二)    top    19

(三)    free    20

(四)    quota    20

(五)    at    21

(六)    lp    21

(七)    useradd    22

(八)    groupadd    23

(九)    kill    23

(十)    crontab    24

(十一)    動手練習    25

四、網絡操作    27

(一)    ifconfig    27

(二)    ip    27

(三)    ping    28

(四)    netstat    29

(五)    telnet    30

(六)    ftp    31

(七)    route    32

(八)    rlogin    33

(九)    rcp    33

(十)    finger    34

(十一)    mail    34

(十二)    nslookup    34

(十三)    動手練習    35

五、系統安全    38

(一)    passwd    38

(二)    su    38

(三)    umask    39

(四)    chgrp    39

(五)    chmod    40

(六)    chown    41

(七)    chattr    42

(八)    sudo    43

(九)    ps    43

(十)    who    44

(十一)    動手練習    45

六、其他    47

(一)    tar    47

(二)    unzip    48

(三)    gunzip    49

(四)    unarj    50

(五)    mtools    50

(六)    man    51

(七)    unencode    53

(八)    uudecode    53

(九)    動手練習    53

引言

Linux提供了大量的指令,利用它可以有效地完成大量的工作,如磁盤操作、檔案存取、目錄操作、程序管理、檔案權限設定等。是以,在Linux系 統上工作離不開使用系統提供的指令。要想真正了解Linux系統,就必須從Linux指令學起,通過基礎的指令學習可以進一步了解Linux系統。

不同Linux發行版的指令數量不一樣,但Linux發行版本最少的指令也有200多個。這裡筆者把比較重要和使用頻率最多的指令,按照它們在系統中的作用分成下面六個部分一一介紹。

◆ 安裝和登入指令:login、shutdown、halt、reboot、install、mount、umount、chsh、exit、last;

◆ 檔案處理指令:file、mkdir、grep、dd、find、mv、ls、diff、cat、ln;

◆ 系統管理相關指令:df、top、free、quota、at、lp、adduser、groupadd、kill、crontab;

◆ 網絡操作指令:ifconfig、ip、ping、netstat、telnet、ftp、route、rlogin、rcp、finger、mail、 nslookup;

◆ 系統安全相關指令:passwd、su、umask、chgrp、chmod、chown、chattr、sudo ps、who;

◆ 其它指令:tar、unzip、gunzip、unarj、mtools、man、unendcode、uudecode。

一、安裝和登入

本文以Mandrake Linux 9.1(Kenrel 2.4.21)為例,介紹Linux下的安裝和登入指令。

(一)    login

1.作用

login的作用是登入系統,它的使用權限是所有使用者。

2.格式

login [name][-p ][-h 主機名稱]

3.主要參數

-p:通知login保持現在的環境參數。

-h:用來向遠端登入的之間傳輸使用者名。

如果選擇用指令行模式登入Linux的話,那麼看到的第一個Linux指令就是login:。

一般界面是這樣的:

Manddrake Linux release 9.1(Bamboo) for i586

renrel 2.4.21-0.13mdk on i686 / tty1

localhost login:root

password:

登入後會看到下面這個界面(以超級使用者為例):

[root@localhost root]#

last login:Tue ,Nov 18 10:00:55 on vc/1

上面顯示的是登入星期、月、日、時間和使用的虛拟控制台。

4.應用技巧

Linux是一個真正的多使用者作業系統,可以同時接受多個使用者登入,還允許一個使用者進行多次登入。這是因為Linux和許多版本的Unix一樣,提 供了虛拟控制台的通路方式,允許使用者在同一時間從控制台(系統的控制台是與系統直接相連的螢幕和鍵盤)進行多次登入。每個虛拟控制台可以看作是一個獨立 的工作站,工作台之間可以切換。虛拟控制台的切換可以通過按下Alt鍵和一個功能鍵來實作,通常使用F1-F6 。

例如,使用者登入後,按一下“Alt+F2”鍵,使用者就可以看到上面出現的“login:”提示符,說明使用者看到了第二個虛拟控制台。然後隻需按 “Alt+ F1”鍵,就可以回到第一個虛拟控制台。一個新安裝的Linux系統允許使用者使用“Alt+F1”到“Alt+F6”鍵來通路前六個虛拟控制台。虛拟控制 台最有用的是,當一個程式出錯造成系統死鎖時,可以切換到其它虛拟控制台工作,關閉這個程式。

(二)    shutdown

shutdown指令的作用是關閉計算機,它的使用權限是超級使用者。

shutdown [-h][-i][-k][-m][-t]

3.重要參數

-t:在改變到其它運作級别之前,告訴init程式多久以後關機。

-k:并不真正關機,隻是送警告信号給每位登入者。

-h:關機後關閉電源。

-F:在重新開機計算機時強迫fsck。

-time:設定關機前的時間。

-m: 将系統改為單使用者模式。

-i:關機時顯示系統資訊。

4.指令說明

(三)    halt

halt指令的作用是關閉系統,它的使用權限是超級使用者。

halt [-n] [-w] [-d] [-f] [-i] [-p]

3.主要參數說明

-n:防止sync系統調用,它用在用fsck修補根分區之後,以阻止核心用老版本的超級塊覆寫修補過的超級塊。

-w:并不是真正的重新開機或關機,隻是寫wtmp(/var/log/wtmp)紀錄。

-f:沒有調用shutdown,而強制關機或重新開機。

-i:關機(或重新開機)前,關掉所有的網絡接口。

-f:強迫關機,不呼叫shutdown這個指令。

-p: 當關機的時候順便做關閉電源的動作。

-d:關閉系統,但不留下紀錄。 

halt就是調用shutdown -h。halt執行時,殺死應用程序,執行sync(将存于buffer中的資料強制寫入硬碟中)系統調用,檔案系統寫操作完成後就會停止核心。若系統的 運作級别為0或6,則關閉系統;否則以shutdown指令(加上-h參數)來取代。 

(四)    reboot

reboot指令的作用是重新啟動計算機,它的使用權限是系統管理者。

reboot [-n] [-w] [-d] [-f] [-i]

-n: 在重開機前不做将記憶體資料寫回硬碟的動作。

-w: 并不會真的重開機,隻是把記錄寫到/var/log/wtmp檔案裡。

-d: 不把記錄寫到/var/log/wtmp檔案裡(-n這個參數包含了-d)。

-i: 在重開機之前先把所有與網絡相關的裝置停止。

(五)    install

install指令的作用是安裝或更新軟體或備份資料,它的使用權限是所有使用者。

(1)install [選項]... 來源 目的地

(2)install [選項]... 來源... 目錄

(3)install -d [選項]... 目錄...

在前兩種格式中,會将<來源>複制至<目的地>或将多個<來源>檔案複制至已存在的<目錄>,同 時設定權限模式及所有者/所屬組。在第三種格式中,會建立所有指定的目錄及它們的主目錄。長選項必須用的參數在使用短選項時也是必須的。

--backup[=CONTROL]:為每個已存在的目的地檔案進行備份。

-b:類似 --backup,但不接受任何參數。

-c:(此選項不作處理)。

-d,--directory:所有參數都作為目錄處理,而且會建立指定目錄的所有主目錄。

-D:建立<目的地>前的所有主目錄,然後将<來源>複制至 <目的地>;在第一種使用格式中有用。

-g,--group=組:自行設定所屬組,而不是程序目前的所屬組。

-m,--mode=模式:自行設定權限模式 (像chmod),而不是rwxr-xr-x。

-o,--owner=所有者:自行設定所有者 (隻适用于超級使用者)。

-p,--preserve-timestamps:以<來源>檔案的通路/修改時間作為相應的目的地檔案的時間屬性。

-s,--strip:用strip指令删除symbol table,隻适用于第一及第二種使用格式。

-S,--suffix=字尾:自行指定備份檔案的<字尾>。

-v,--verbose:處理每個檔案/目錄時印出名稱。

--help:顯示此幫助資訊并離開。

--version:顯示版本資訊并離開。

(六)    mount

mount指令的作用是加載檔案系統,其使用權限是超級使用者或/etc/fstab中允許的使用者。

mount -a [-fv] [-t vfstype] [-n] [-rw] [-F] device dir

-h:顯示輔助資訊。

-v:顯示資訊,通常和-f用來除錯。

-a:将/etc/fstab中定義的所有檔案系統挂上。

-F:這個指令通常和-a一起使用,它會為每一個mount的動作産生一個行程負責執行。在系統需要挂上大量NFS檔案系統時可以加快加載的速度。

-f:通常用于除錯。它會使mount不執行實際挂上的動作,而是模拟整個挂上的過程,通常會和-v一起使用。

-t vfstype:顯示被加載檔案系統的類型。

-n:一般而言,mount挂上後會在/etc/mtab中寫入一筆資料,在系統中沒有可寫入檔案系統的情況下,可以用這個選項取消這個動作。

在Linux和Unix系統上,所有檔案都是作為一個大型樹(以/為根)的一部分通路的。要通路CD-ROM上的檔案,需要将CD-ROM裝置挂裝 在檔案樹中的某個挂裝點。如果發行版安裝了自動挂裝包,那麼這個步驟可自動進行。在Linux中,如果要使用硬碟、光驅等儲存裝置,就得先将它加載,當儲存裝置挂上了之後,就可以把它當成一個目錄來通路。挂上一個裝置使用mount指令。在使用mount這個指令時,至少要先知道下列三種資訊:要加載對象 的檔案系統類型、要加載對象的裝置名稱及要将裝置加載到哪個目錄下。

(1)Linux可以識别的檔案系統

◆ Windows 95/98常用的FAT 32檔案系統:vfat ;

◆ Win NT/2000 的檔案系統:ntfs ;

◆ OS/2用的檔案系統:hpfs;

◆ Linux用的檔案系統:ext2、ext3;

◆ CD-ROMCD光牒用的檔案系統:iso9660。

雖然vfat是指FAT 32系統,但事實上它也相容FAT 16的檔案系統類型。

(2)确定裝置的名稱

在Linux中,裝置名稱通常都存在/dev裡。這些裝置名稱的命名都是有規則的,可以用“推理”的方式把裝置名稱找出來。例如,/dev /hda1這個 IDE裝置,hd是Hard Disk(硬碟)的,sd是SCSI Device,fd是Floppy Device(或是Floppy Disk?)。a代表第一個裝置,通常IDE接口可以接上4個IDE裝置(比如4塊硬碟)。是以要識别IDE硬碟的方法分别就是hda、hdb、hdc、 hdd。hda1中的“1”代表hda的第一個硬碟分區 (partition),hda2代表hda的第二主分區,第一個邏輯分區從hda5開始,依此類推。此外,可以直接檢查/var/log /messages檔案,在該檔案中可以找到計算機開機後系統已辨認出來的裝置代号。

(3)查找挂接點

在決定将裝置挂接之前,先要檢視一下計算機是不是有個/mnt的空目錄,該目錄就是專門用來當作挂載點(Mount Point)的目錄。建議在/mnt裡建幾個/mnt/cdrom、/mnt/floppy、/mnt/mo等目錄,當作目錄的專用挂載點。舉例而言,如要挂載下列5個裝置,其執行指令可能如下 (假設都是Linux的ext2系統,如果是Windows XX請将ext2改成vfat):

軟碟 ===>mount -t ext2 /dev/fd0 /mnt/floppy

cdrom ===>mount -t iso9660 /dev/hdc /mnt/cdrom

SCSI cdrom ===>mount -t iso9660 /dev/sdb /mnt/scdrom

SCSI cdr ===>mount -t iso9660 /dev/sdc /mnt/scdr

不過目前大多數較新的Linux發行版本(包括紅旗 Linux、中軟Linux、Mandrake Linux等)都可以自動挂裝檔案系統,但Red Hat Linux除外。

(七)    umount

umount指令的作用是解除安裝一個檔案系統,它的使用權限是超級使用者或/etc/fstab中允許的使用者。

unmount -a [-fFnrsvw] [-t vfstype] [-n] [-rw] [-F] device dir

3.使用說明

umount指令是mount指令的逆操作,它的參數和使用方法和mount指令是一樣的。Linux挂裝CD-ROM後,會鎖定CD—ROM,這 樣就不能用CD-ROM面闆上的Eject按鈕彈出它。但是,當不再需要CD光牒時,如果已将/cdrom作為符号連結,請使用umount/cdrom來卸 裝它。僅當無使用者正在使用CD光牒時,該指令才會成功。該指令包括了将帶有目前工作目錄當作該CD光牒中的目錄的終端視窗。

(八)    chsh

chsh指令的作用是更改使用者shell設定,它的使用權限是所有使用者。

chsh [ -s ] [ -list] [ --help ] [ -v ] [ username ]

-l:顯示系統所有Shell類型。

-v:顯示Shell版本号。

前面介紹了Linux下有多種Shell,一般預設的是Bash,如果想更換Shell類型可以使用chsh指令。先輸入賬戶密碼,然後輸入新Shell類型,如果操作正确系統會顯示“Shell change”。其界面一般如下:

Changing fihanging shell for cao

Password:

New shell [/bin/bash]: /bin/tcsh

上面代碼中,[ ]内是目前使用的Shell。普通使用者隻能修改自己的Shell,超級使用者可以修改全體使用者的Shell。要想查詢系統提供哪些Shell,可以使用chsh -l 指令,見圖1所示。

圖1 系統可以使用的Shell類型

從圖1中可以看到,筆者系統中可以使用的Shell有bash(預設)、csh、sh、tcsh四種。

(九)    exit

exit指令的作用是退出系統,它的使用權限是所有使用者。

exit

3.參數

exit指令沒有參數,運作後退出系統進入登入界面。

(十)    last

last指令的作用是顯示近期使用者或終端的登入情況,它的使用權限是所有使用者。通過last指令檢視該程式的log,管理者可以獲知誰曾經或企圖連接配接系統。

1ast[—n][-f file][-t tty] [—h 節點][-I —IP][—1][-y][1D]

-n:指定輸出記錄的條數。

-f file:指定用檔案file作為查詢用的log檔案。

-t tty:隻顯示指定的虛拟控制台上登入情況。

-h 節點:隻顯示指定的節點上的登入情況。

-i IP:隻顯示指定的IP上登入的情況。

-1:用IP來顯示遠端位址。

-y:顯示記錄的年、月、日。

-ID:知道查詢的使用者名。

-x:顯示系統關閉、使用者登入和退出的曆史。

(十一)    動手練習

上面介紹了Linux安裝和登入指令,下面介紹幾個執行個體,動手練習一下剛才講過的指令。

1.一次運作多個指令

在一個指令行中可以執行多個指令,用分号将各個指令隔開即可,例如:

#last -x;halt

上面代碼表示在顯示系統關閉、使用者登入和退出的曆史後關閉計算機。

2.利用mount挂裝檔案系統通路Windows系統

許多Linux發行版本現在都可以自動加載Vfat分區來通路Windows系統,而Red Hat各個版本都沒有自動加載Vfat分區,是以還需要進行手工操作。

mount可以将Windows分區作為Linux的一個“檔案”挂接到Linux的一個空檔案夾下,進而将Windows的分區和/mnt這個目 錄聯系起來。是以,隻要通路這個檔案夾就相當于通路該分區了。首先要在/mnt下建立winc檔案夾,在指令提示符下輸入下面指令:

#mount -t vfat /dev/hda1 /mnt/winc

即表示将Windows的C分區挂到Liunx的/mnt/winc目錄下。這時,在/mnt/winc目錄下就可以看到Windows中C槽的内 容了。使用類似的方法可以通路Windows系統的D、E盤。在Linux系統顯示Windows的分區一般順序這樣的:hda1為C槽、hda5為D 盤、 hda6為E盤……以此類推。上述方法可以檢視Windows系統有一個很大的問題,就是Windows中的所有中文檔案名或檔案夾名全部顯示為問号 “?”,而英文卻可以正常顯示。我們可以通過加入一些參數讓它顯示中文。還以上面的操作為例,此時輸入指令:

#mount -t vfat -o iocharset=cp936 /dev/hda1 /mnt/winc

現在它就可以正常顯示中文了。

3.使用mount加挂閃盤上的檔案系統

在Linux下使用閃盤非常簡單。Linux對USB裝置有很好的支援,當插入閃盤後,閃盤被識别為一個SCSI盤,通常輸入以下指令:

# mount /dev/sda1 /usb

就能夠加挂閃盤上的檔案系統。

(十二)    小知識

Linux指令與Shell

所謂Shell,就是指令解釋程式,它提供了程式設計接口,可以使用程式來程式設計。學習Shell對于Linux初學者了解Linux系統是非常重要 的。 Linux系統的Shell作為作業系統的外殼,為使用者提供了使用作業系統的接口。Shell是指令語言、指令解釋程式及程式設計語言的統稱,是使用者和 Linux核心之間的接口程式。如果把Linux核心想象成一個球體的中心,Shell就是圍繞核心的外層。當從Shell或其它程式向Linux傳遞指令時,核心會做出相應的反應。Shell在Linux系統的作用和MS DOS下的COMMAND.COM和Windows 95/98 的 explorer.exe相似。Shell雖然不是系統核心的一部分,隻是系統核心的一個外延,但它能夠調用系統核心的大部分功能。是以,可以說 Shell是Unux/Linux最重要的實用程式。

Linux中的Shell有多種類型,其中最常用的是Bourne Shell(sh)、C Shell(csh)和Korn Shell(ksh)。大多數Linux發行版本預設的Shell是Bourne Again Shell,它是Bourne Shell的擴充,簡稱bash,與Bourne Shell完全向後相容,并且在Bourne Shell的基礎上增加了很多特性。bash放在/bin/bash中,可以提供如指令補全、指令編輯和指令曆史表等功能。它還包含了很多C Shell和Korn Shell中的優點,有靈活和強大的程式設計接口,同時又有很友好的使用者界面。Linux系統中200多個指令中有40個是bash的内部指令,主要包括 exit、less、lp、kill、 cd、pwd、fc、fg等。

二、檔案處理

Linux 系統資訊存放在檔案裡,檔案與普通的公務檔案類似。每個檔案都有自己的名字、内容、存放位址及其它一些管理資訊,如檔案的使用者、檔案的大小等。檔案可以是一封信、一個通訊錄,或者是程式的源語句、程式的資料,甚至可以包括可執行的程式和其它非正文内容。 Linux檔案系統具有良好的結構,系統提供了很多檔案處理程式。這裡主要介紹常用的檔案處理指令。

(一)    file

根據檔案内容判斷檔案類型,使用權限是所有使用者。

file通過探測文

file [options] 檔案名

3.[options]主要參數

-v:在标準輸出後顯示版本資訊,并且退出。

-z:探測壓縮過的檔案類型。

-L:允許符合連接配接。

-f name:從檔案namefile中讀取要分析的檔案名清單。

4.簡單說明

使用file指令可以知道某個檔案究竟是二進制(ELF格式)的可執行檔案, 還是Shell Script檔案,或者是其它的什麼格式。file能識别的檔案類型有目錄、Shell腳本、英文文本、二進制可執行檔案、C語言源檔案、文本檔案、DOS的可執行檔案。

5.應用執行個體

如果我們看到一個沒有字尾的檔案grap,可以使用下面指令:

$ file grap

grap: English text

此時系統顯示這是一個英文文本檔案。需要說明的是,file指令不能探測包括圖形、音頻、視訊等多媒體檔案類型。

(二)    mkdir

mkdir指令的作用是建立名稱為dirname的子目錄,與MS DOS下的md指令類似,它的使用權限是所有使用者。

mkdir [options] 目錄名

-m, --mode=模式:設定權限<模式>,與chmod類似。

-p, --parents:需要時建立上層目錄;如果目錄早已存在,則不當作錯誤。

-v, --verbose:每次建立新目錄都顯示資訊。

--version:顯示版本資訊後離開。

4.應用執行個體

在進行目錄建立時可以設定目錄的權限,此時使用的參數是“-m”。假設要建立的目錄名是“tsk”,讓所有使用者都有rwx(即讀、寫、執行的權限),那麼可以使用以下指令:

$ mkdir -m 777 tsk

(三)    grep

grep指令可以指定檔案中搜尋特定的内容,并将含有這些内容的行标準輸出。grep全稱是Global Regular Expression Print,表示全局正規表達式版本,它的使用權限是所有使用者。

grep [options]

[options]主要參數:

-c:隻輸出比對行的計數。

-I:不區分大小寫(隻适用于單字元)。

-h:查詢多檔案時不顯示檔案名。

-l:查詢多檔案時隻輸出包含比對字元的檔案名。

-n:顯示比對行及行号。

-s:不顯示不存在或無比對文本的錯誤資訊。

-v:顯示不包含比對文本的所有行。

pattern正規表達式主要參數:

\:忽略正規表達式中特殊字元的原有含義。

^:比對正規表達式的開始行。

$: 比對正規表達式的結束行。

\<:從比對正規表達式的行開始。

\>:到比對正規表達式的行結束。

[ ]:單個字元,如[A]即A符合要求 。

[ - ]:範圍,如[A-Z],即A、B、C一直到Z都符合要求 。

. :所有的單個字元。

* :有字元,長度可以為0。

正規表達式是Linux/Unix系統中非常重要的概念。正規表達式(也稱為“regex”或“regexp”)是一個可以描述一類字元串的模式 (Pattern)。如果一個字元串可以用某個正規表達式來描述,我們就說這個字元和該正規表達式比對(Match)。這和DOS中使用者可以使用通配符 “*”代表任意字元類似。在Linux系統上,正規表達式通常被用來查找文本的模式,以及對文本執行“搜尋-替換”操作和其它功能。

查詢DNS服務是日常工作之一,這意味着要維護覆寫不同網絡的大量IP位址。有時IP位址會超過2000個。如果要檢視nnn.nnn網絡位址,但 是卻忘了第二部分中的其餘部分,隻知到有兩個句點,例如nnn nn..。要抽取其中所有nnn.nnn IP位址,使用[0-9 ]\{3 \}\.[0-0\{3\}\。含義是任意數字出現3次,後跟句點,接着是任意數字出現3次,後跟句點。

$grep '[0-9 ]\{3 \}\.[0-0\{3\}\' ipfile

補充說明,grep家族還包括fgrep和egrep。fgrep是fix grep,允許查找字元串而不是一個模式;egrep是擴充grep,支援基本及擴充的正規表達式,但不支援\q模式範圍的應用及與之相對應的一些更加規範的模式。

(四)    dd

dd指令用來複制檔案,并根據參數将資料轉換和格式化。

dd [options]

3.[opitions]主要參數

bs=位元組:強迫 ibs=<位元組>及obs=<位元組>。

cbs=位元組:每次轉換指定的<位元組>。

conv=關鍵字:根據以逗号分隔的關鍵字表示的方式來轉換檔案。

count=塊數目:隻複制指定<塊數目>的輸入資料。

ibs=位元組:每次讀取指定的<位元組>。

if=檔案:讀取<檔案>内容,而非标準輸入的資料。

obs=位元組:每次寫入指定的<位元組>。

of=檔案:将資料寫入<檔案>,而不在标準輸出顯示。

seek=塊數目:先略過以obs為機關的指定<塊數目>的輸出資料。

skip=塊數目:先略過以ibs為機關的指定<塊數目>的輸入資料。

dd指令常常用來制作Linux啟動盤。先找一個可引導核心,令它的根裝置指向正确的根分區,然後使用dd指令将其寫入軟碟:

$ rdev vmlinuz /dev/hda

$dd if=vmlinuz of=/dev/fd0

上面代碼說明,使用rdev指令将可引導核心vmlinuz中的根裝置指向/dev/hda,請把“hda”換成自己的根分區,接下來用dd指令将該核心寫入軟碟。

(五)    find

find指令的作用是在目錄中搜尋檔案,它的使用權限是所有使用者。

find [path][options][expression]

path指定目錄路徑,系統從這裡開始沿着目錄樹向下查找檔案。它是一個路徑清單,互相用空格分離,如果不寫path,那麼預設為目前目錄。

[options]參數:

-depth:使用深度級别的查找過程方式,在某層指定目錄中優先查找檔案内容。

-maxdepth levels:表示至多查找到開始目錄的第level層子目錄。level是一個非負數,如果level是0的話表示僅在目前目錄中查找。

-mindepth levels:表示至少查找到開始目錄的第level層子目錄。

-mount:不在其它檔案系統(如Msdos、Vfat等)的目錄和檔案中查找。

-version:列印版本。

[expression]是比對表達式,是find指令接受的表達式,find指令的所有操作都是針對表達式的。它的參數非常多,這裡隻介紹一些常用的參數。

—name:支援統配符*和?。

-atime n:搜尋在過去n天讀取過的檔案。

-ctime n:搜尋在過去n天修改過的檔案。

-group grpoupname:搜尋所有組為grpoupname的檔案。

-user 使用者名:搜尋所有檔案屬主為使用者名(ID或名稱)的檔案。

-size n:搜尋檔案大小是n個block的檔案。

-print:輸出搜尋結果,并且列印。

find指令查找檔案的幾種方法:

(1)根據檔案名查找

例如,我們想要查找一個檔案名是lilo.conf的檔案,可以使用如下指令:

find / -name lilo.conf

find指令後的“/”表示搜尋整個硬碟。

(2)快速查找檔案

根據檔案名查找檔案會遇到一個實際問題,就是要花費相當長的一段時間,特别是大型Linux檔案系統和大容量硬碟檔案放在很深的子目錄中時。如果我 們知道了這個檔案存放在某個目錄中,那麼隻要在這個目錄中往下尋找就能節省很多時間。比如smb.conf檔案,從它的檔案字尾“.conf”可以判斷這 是一個配置檔案,那麼它應該在/etc目錄内,此時可以使用下面指令:

find /etc -name smb.conf

這樣,使用“快速查找檔案”方式可以縮短時間。

(3)根據部分檔案名查找方法

有時我們知道隻某個檔案包含有abvd這4個字,那麼要查找系統中所有包含有這4個字元的檔案可以輸入下面指令:

find / -name '*abvd*'

輸入這個指令以後,Linux系統會将在/目錄中查找所有的包含有abvd這4個字元的檔案(其中*是通配符),比如abvdrmyz等符合條件的檔案都能顯示出來。

(4) 使用混合查找方式查找檔案

find指令可以使用混合查找的方法,例如,我們想在/etc目錄中查找大于500000位元組,并且在24小時内修改的某個檔案,則可以使用-and (與)把兩個查找參數連結起來組合成一個混合的查找方式。

find /etc -size +500000c -and -mtime +1

(六)    mv

mv指令用來為檔案或目錄改名,或者将檔案由一個目錄移入另一個目錄中,它的使用權限是所有使用者。該指令如同DOS指令中的ren和move的組合。

mv[options] 源檔案或目錄 目标檔案或目錄

-i:互動方式操作。如果mv操作将導緻對已存在的目标檔案的覆寫,此時系統詢問是否重寫,要求使用者回答“y”或“n”,這樣可以避免誤覆寫檔案。

-f:禁止互動操作。mv操作要覆寫某個已有的目标檔案時不給任何訓示,指定此參數後i參數将不再起作用。

(1)将/usr/cbu中的所有檔案移到目前目錄(用“.”表示)中:

$ mv /usr/cbu/ * .

(2)将檔案cjh.txt重命名為wjz.txt:

$ mv cjh.txt wjz.txt

(七)    ls

ls指令用于顯示目錄内容,類似DOS下的dir指令,它的使用權限是所有使用者。

ls [options][filename]

3.options主要參數

-a, --all:不隐藏任何以“.” 字元開始的項目。

-A, --almost-all:列出除了“ . ”及 “.. ”以外的任何項目。

--author:印出每個檔案著作者。

-b, --escape:以八進制溢出序清單示不可列印的字元。

--block-size=大小:塊以指定<大小>的位元組為機關。

-B, --ignore-backups:不列出任何以 ~ 字元結束的項目。

-f:不進行排序,-aU參數生效,-lst參數失效。

-F, --classify:加上檔案類型的訓示符号 (*/=@| 其中一個)。

-g:like -l, but do not list owner。

-G, --no-group:inhibit display of group information。

-i, --inode:列出每個檔案的inode号。

-I, --ignore=樣式:不印出任何符合Shell萬用字元<樣式>的項目。

-k:即--block-size=1K。

-l:使用較長格式列出資訊。

-L, --dereference:當顯示符号連結的檔案資訊時,顯示符号連結所訓示的對象,而并非符号連結本身的資訊。

-m:所有項目以逗号分隔,并填滿整行行寬。

-n, --numeric-uid-gid:類似-l,但列出UID及GID号。

-N, --literal:列出未經處理的項目名稱,例如不特别處理控制字元。

-p, --file-type:加上檔案類型的訓示符号 (/=@| 其中一個)。

-Q, --quote-name:将項目名稱括上雙引号。

-r, --reverse:依相反次序排列。

-R, --recursive:同時列出所有子目錄層。

-s, --size:以塊大小為序。

4.應用舉例

ls 指令是Linux系統使用頻率最多的指令,它的參數也是Linux指令中最多的。使用ls指令時會有幾種不同的顔色,其中藍色表示是目錄,綠色表示是可執 行檔案,紅色表示是壓縮檔案,淺藍色表示是連結檔案,加粗的黑色表示符号連結,灰色表示是其它格式檔案。ls最常使用的是ls- l,見圖1所示。

圖1 使用ls-l指令

檔案類型開頭是由10個字元構成的字元串。其中第一個字元表示檔案類型,它可以是下述類型之一:-(普通檔案)、d(目錄)、l(符号連結)、 b(塊裝置檔案)、c(字元裝置檔案)。後面的9個字元表示檔案的通路權限,分為3組,每組3位。第一組表示檔案屬主的權限,第二組表示同組使用者的權限, 第三組表示其他使用者的權限。每一組的三個字元分别表示對檔案的讀(r)、寫(w)和執行權限(x)。對于目錄,表示進入權限。s表示當檔案被執行時,把該 檔案的UID 或GID賦予執行程序的UID(使用者ID)或GID(組 ID)。t表示設定标志位(留在記憶體,不被換出)。如果該檔案是目錄,那麼在該目錄中的檔案隻能被超級使用者、目錄擁有者或檔案屬主删除。如果它是可執行文 件,那麼在該檔案執行後,指向其正文段的指針仍留在記憶體。這樣再次執行它時,系統就能更快地裝入該檔案。接着顯示的是檔案大小、生成時間、檔案或指令名 稱。

(八)    diff

diff指令用于兩個檔案之間的比較,并指出兩者的不同,它的使用權限是所有使用者。

diff [options] 源檔案 目标檔案

-a:将所有檔案當作文本檔案來處理。

-b:忽略空格造成的不同。

-B:忽略空行造成的不同。

-c:使用綱要輸出格式。

-H:利用試探法加速對大檔案的搜尋。

-I:忽略大小寫的變化。

-n --rcs:輸出RCS格式。

(九)    cmp

cmp(“compare”的縮寫)指令用來簡要指出兩個檔案是否存在差異,它的使用權限是所有使用者。

cmp[options] 檔案名

-l: 将位元組以十進制的方式輸出,并友善将兩個檔案中不同的以八進制的方式輸出。

(十)    cat

cat(“concatenate”的縮寫)指令用于連接配接并顯示指定的一個和多個檔案的有關資訊,它的使用權限是所有使用者。

cat [options] 檔案1 檔案2……

-n:由第一行開始對所有輸出的行數編号。

-b:和-n相似,隻不過對于空白行不編号。

-s:當遇到有連續兩行以上的空白行時,就代換為一行的空白行。

(1)cat指令一個最簡單的用處是顯示文本檔案的内容。例如,我們想在指令行看一下README檔案的内容,可以使用指令:

$ cat README 

(2)有時需要将幾個檔案處理成一個檔案,并将這種處理的結果儲存到一個單獨的輸出檔案。cat指令在其輸入上接受一個或多個檔案,并将它們作為一 個單獨的檔案列印到它的輸出。例如,把README和INSTALL的檔案内容加上行号(空白行不加)之後,将内容附加到一個新文本檔案File1 中:

$ cat README INSTALL File1

(3)cat還有一個重要的功能就是可以對行進行編号,見圖2所示。這種功能對于程式文檔的編制,以及法律和科學文檔的編制很友善,列印在左邊的行号使得參考文檔的某一部分變得容易,這些在程式設計、科學研究、業務報告甚至是立法工作中都是非常重要的。

圖2 使用cat指令/etc/named.conf檔案進行編号

對行進行編号功能有-b(隻能對非空白行進行編号)和-n(可以對所有行進行編号)兩個參數:

$ cat -b /etc/named.conf

(十一)    ln

ln指令用來在檔案之間建立連結,它的使用權限是所有使用者。

ln [options] 源檔案 [連結名]

-f:鍊結時先将源檔案删除。

-d:允許系統管理者硬鍊結自己的目錄。

-s:進行軟鍊結(Symbolic Link)。

-b:将在鍊結時會被覆寫或删除的檔案進行備份。

連結有兩種,一種被稱為硬連結(Hard Link),另一種被稱為符号連結(Symbolic Link)。預設情況下,ln指令産生硬連結。

硬連接配接指通過索引節點來進行的連接配接。在Linux的檔案系統中,儲存在磁盤分區中的檔案不管是什麼類型都給它配置設定一個編号,稱為索引節點号 (Inode Index)。在Linux中,多個檔案名指向同一索引節點是存在的。一般這種連接配接就是硬連接配接。硬連接配接的作用是允許一個檔案擁有多個有效路徑名,這樣使用者 就可以建立硬連接配接到重要檔案,以防止“誤删”的功能。其原因如上所述,因為對應該目錄的索引節點有一個以上的連接配接。隻删除一個連接配接并不影響索引節點本身和 其它的連接配接,隻有當最後一個連接配接被删除後,檔案的資料塊及目錄的連接配接才會被釋放。也就是說,檔案才會被真正删除。

與硬連接配接相對應,Lnux系統中還存在另一種連接配接,稱為符号連接配接(Symbilc Link),也叫軟連接配接。軟連結檔案有點類似于Windows的快捷方式。它實際上是特殊檔案的一種。在符号連接配接中,檔案實際上是一個文本檔案,其中包含的有另一檔案的位置資訊。

(十二)    動手練習

上面我們介紹了Linux檔案處理指令,下面介紹幾個執行個體,大家可以動手練習一下剛才講過的指令。

1.利用符号連結快速通路關鍵目錄

符号連結是一個非常實用的功能。假設有一些目錄或檔案需要頻繁使用,但由于Linux的檔案和目錄結構等原因,這個檔案或目錄在很深的子目錄中。比 如, Apache Web伺服器文檔位于系統的/usr/local/httpd/htdocs中,并且不想每次都要從主目錄進入這樣一個長的路徑之中(實際上,這個路徑也 非常不容易記憶)。

為了解決這個問題,可以在主目錄中建立一個符号連結,這樣在需要進入該目錄時,隻需進入這個連結即可。

為了能友善地進入Web伺服器(/usr/local/httpd/htdocs)文檔所在的目錄,在主目錄下可以使用以下指令:

$ ln -s /usr/local/httpd/htdocs gg

這樣每次進入gg目錄就可通路Web伺服器的文檔,以後如果不再通路Web伺服器的文檔時,删除gg即可,而真正的Web伺服器的文檔并沒有删除。

2.使用dd指令将init.rd格式的root.ram内容導入記憶體

dd if=/dev/fd0 of=floppy.fd

dd if=root.ram of=/dev/ram0 #

3.grep指令系統調用

grep是Linux/Unix中使用最廣泛的指令之一,許多Linux系統内部都可以調用它。

(1)如果要查詢目錄清單中的目錄,方法如下:

$ ls -l | grep '∧d'

(2)如果在一個目錄中查詢不包含目錄的所有檔案,方法如下:

$ ls -l | grep '∧[∧d]'

(3)用find指令調用grep,如所有C源代碼中的“Chinput”,方法如下:

$find /ZhXwin -name *.c -exec grep -q -s Chinput {} \;-print

三、系統管理

對于Linux系統來說,無論是中央處理器、記憶體、磁盤驅動器、鍵盤、滑鼠,還是使用者等都是檔案,Linux系統管理的指令是它正常運作的核心。熟悉了Linux常用的檔案處理指令以後,這一講介紹對系統和使用者進行管理的指令。

(一)    df

df指令用來檢查檔案系統的磁盤空間占用情況,使用權限是所有使用者。

df [options]

-s:對每個Names參數隻給出占用的資料塊總數。

-a:遞歸地顯示指定目錄中各檔案及子目錄中各檔案占用的資料塊數。若既不指定-s,也不指定-a,則隻顯示Names中的每一個目錄及其中的各子目錄所占的磁盤塊數。

-k:以1024位元組為機關列出磁盤空間使用情況。

-x:跳過在不同檔案系統上的目錄不予統計。

-l:計算所有的檔案大小,對硬連結檔案則計算多次。

-i:顯示inode資訊而非塊使用量。

-h:以容易了解的格式印出檔案系統大小,例如136KB、254MB、21GB。

-P:使用POSIX輸出格式。

-T:顯示檔案系統類型。

4.說明

df指令被廣泛地用來生成檔案系統的使用統計資料,它能顯示系統中所有的檔案系統的資訊,包括總容量、可用的空閑空間、目前的安裝點等。

超級權限使用者使用df指令時會發現這樣的情況:某個分區的容量超過了100%。這是因為Linux系統為超級使用者保留了10%的空間,由其單獨支 配。也就是說,對于超級使用者而言,他所見到的硬碟容量将是110%。這樣的安排對于系統管理而言是有好處的,當硬碟被使用的容量接近100%時系統管理者 還可以正常工作。

Linux支援的檔案系統非常多,包括JFS、ReiserFS、ext、ext2、ext3、ISO9660、XFS、Minx、vfat、MSDOS等。使用df -T指令檢視磁盤空間時還可以得到檔案系統的資訊:

#df -T

檔案系統 類型 容量 已用 可用 已用% 挂載點

/dev/hda7 reiserfs 5.2G 1.6G 3.7G 30% /

/dev/hda1 vfat 2.4G 1.6G 827M 66% /windows/C

/dev/hda5 vfat 3.0G 1.7G 1.3G 57% /windows/D

/dev/hda9 vfat 3.0G 2.4G 566M 82% /windows/E

/dev/hda10 NTFS 3.2G 573M 2.6G 18% /windows/F

/dev/hda11 vfat 1.6G 1.5G 23M 99% /windows/G

從上面除了可以看到磁盤空間的容量、使用情況外,分區的檔案系統類型、挂載點等資訊也一覽無遺。

(二)    top

top指令用來顯示執行中的程式程序,使用權限是所有使用者。

top [-] [d delay] [q] [c] [S] [s] [i] [n]

d:指定更新的間隔,以秒計算。

q:沒有任何延遲的更新。如果使用者有超級使用者,則top指令将會以最高的優先序執行。

c:顯示程序完整的路徑與名稱。

S:累積模式,會将己完成或消失的子行程的CPU時間累積起來。

s:安全模式。

i:不顯示任何閑置(Idle)或無用(Zombie)的行程。

n:顯示更新的次數,完成後将會退出top。

top指令是Linux系統管理的一個主要指令,通過它可以獲得許多資訊。這裡我們結合圖1來說明它給出的資訊。

圖1 top指令的顯示

在圖1中,第一行表示的項目依次為目前時間、系統啟動時間、目前系統登入使用者數目、平均負載。第二行顯示的是所有啟動的程序、目前運作的、挂起 (Sleeping)的和無用(Zombie)的程序。第三行顯示的是目前CPU的使用情況,包括系統占用的比例、使用者使用比例、閑置(Idle)比例。 第四行顯示實體記憶體的使用情況,包括總的可以使用的記憶體、已用記憶體、空閑記憶體、緩沖區占用的記憶體。第五行顯示交換分區使用情況,包括總的交換分區、使用 的、空閑的和用于高速緩存的大小。第六行顯示的項目最多,下面列出了詳細解釋。

PID(Process ID):程序标示号。

USER:程序所有者的使用者名。

PR:程序的優先級别。

NI:程序的優先級别數值。

VIRT:程序占用的虛拟記憶體值。

RES:程序占用的實體記憶體值。

SHR:程序使用的共享記憶體值。

S:程序的狀态,其中S表示休眠,R表示正在運作,Z表示僵死狀态,N表示該程序優先值是負數。

%CPU:該程序占用的CPU使用率。

%MEM:該程序占用的實體記憶體和總記憶體的百分比。

TIME+:該程序啟動後占用的總的CPU時間。

Command:程序啟動的啟動指令名稱,如果這一行顯示不下,程序會有一個完整的指令行。

top指令使用過程中,還可以使用一些互動的指令來完成其它參數的功能。這些指令是通過快捷鍵啟動的。

<空格>:立刻重新整理。

P:根據CPU使用大小進行排序。

T:根據時間、累計時間排序。

q:退出top指令。

m:切換顯示記憶體資訊。

t:切換顯示程序和CPU狀态資訊。

c:切換顯示指令名稱和完整指令行。

M:根據使用記憶體大小進行排序。

W:将目前設定寫入~/.toprc檔案中。這是寫top配置檔案的推薦方法。

可以看到,top指令是一個功能十分強大的監控系統的工具,對于系統管理者而言尤其重要。但是,它的缺點是會消耗很多系統資源。

使用top指令可以監視指定使用者,預設情況是監視所有使用者的程序。如果想檢視指定使用者的情況,在終端中按“U”鍵,然後輸入使用者名,系統就會切換為指定使用者的程序運作界面,見圖2所示。

圖2 使用top指令監視指定使用者

(三)    free

free指令用來顯示記憶體的使用情況,使用權限是所有使用者。

free [-b|-k|-m] [-o] [-s delay] [-t] [-V]

-b -k -m:分别以位元組(KB、MB)為機關顯示記憶體使用情況。

-s delay:顯示每隔多少秒數來顯示一次記憶體使用情況。

-t:顯示記憶體總和列。

-o:不顯示緩沖區調節列。

free指令是用來檢視記憶體使用情況的主要指令。和top指令相比,它的優點是使用簡單,并且隻占用很少的系統資源。通過-S參數可以使用free指令不間斷地監視有多少記憶體在使用,這樣可以把它當作一個友善實時監控器。

#free -b -s5

使用這個指令後終端會連續不斷地報告記憶體使用情況(以位元組為機關),每5秒更新一次。

(四)    quota

quota指令用來顯示磁盤使用情況和限制情況,使用權限超級使用者。

quota [-g][-u][-v][-p] 使用者名 組名

-g:顯示使用者所在組的磁盤使用限制。

-u:顯示使用者的磁盤使用限制。

-v:顯示沒有配置設定空間的檔案系統的配置設定情況。

-p:顯示簡化資訊。

在企業應用中磁盤配額非常重要,普通使用者要學會看懂自己的磁盤使用情況。要查詢自己的磁盤配額可以使用下面指令(下例中使用者賬号是caojh):

#quota caojh

Disk quotas for user caojh(uid 502):

Filesystem blocks quota limit grace files quota limit grace

/dev/hda3 58 200000 400000 41 500 1000

以上顯示ID号為502的caojh賬号,檔案個數設定為500~1000個,硬碟空間限制設定為200MB~400MB。一旦磁盤配額要用完時,就需要删除一些垃圾檔案或向系統管理者請求追加配額。

(五)    at

at指令用來在指定時刻執行指定的指令序列。

at [-V] [-q x] [-f file] [-m] time

-V:顯示标準錯誤輸出。

-q:許多隊列輸出。

-f:從檔案中讀取作業。

-m:執行完作業後發送電子郵件到使用者。

time:設定作業執行的時間。time格式有嚴格的要求,由小時、分鐘、日期和時間的偏移量組成,其中日期的格式為MM.DD.YY,MM是分鐘,DD是日期,YY是指年份。偏移量的格式為時間+偏移量,機關是minutes、hours和days。

#at -f data 15:30 +2 days

上面指令表示讓系統在兩天後的17:30執行檔案data中指明的作業。

(六)    lp

lp是列印檔案的指令,使用權限是所有使用者。

lp [-c][-d][-m][-number][-title][-p]

-c:先拷貝檔案再列印。

-d:列印隊列檔案。

-m:列印結束後發送電子郵件到使用者。

-number:列印份數。

-title:列印标題。

-p:設定列印的優先級别,最高為100。

(1)使用lp指令列印多個檔案

#lp 2 3 4

request id is 11 (3 file(s))

其中2、3、4分别是檔案名;“request id is 11 (3 file(s)) ”表示這是第11個列印指令,依次列印這三個檔案。

(2)設定列印優先級别

#lp lp -d LaserJet -p 90 /etc/aliases

通過添加“-p 90”,規定了列印作業的優先級為90。它将在優先級低于90的列印作業之前列印,包括沒有設定優先級的作業,預設優先級是50

(七)    useradd

useradd指令用來建立使用者帳号和建立使用者的起始目錄,使用權限是超級使用者。

useradd [-d home] [-s shell] [-c comment] [-m [-k template]] [-f inactive] [-e expire ] [-p passwd] [-r] name

-c:加上備注文字,備注文字儲存在passwd的備注欄中。 

-d:指定使用者登入時的啟始目錄。

-D:變更預設值。

-e:指定賬号的有效期限,預設表示永久有效。

-f:指定在密碼過期後多少天即關閉該賬号。

-g:指定使用者所屬的群組。

-G:指定使用者所屬的附加群組。

-m:自動建立使用者的登入目錄。

-M:不要自動建立使用者的登入目錄。

-n:取消建立以使用者名稱為名的群組。

-r:建立系統賬号。

-s:指定使用者登入後所使用的shell。

-u:指定使用者ID号。

useradd可用來建立使用者賬号,它和adduser指令是相同的。賬号建好之後,再用passwd設定賬号的密碼。使用useradd指令所建立的賬号,實際上是儲存在/etc/passwd文本檔案中。

建立一個新使用者賬戶,并設定ID:

#useradd caojh -u 544

需要說明的是,設定ID值時盡量要大于500,以免沖突。因為Linux安裝後會建立一些特殊使用者,一般0到499之間的值留給bin、mail這樣的系統賬号。

(八)    groupadd

groupadd指令用于将新組加入系統。

groupadd [-g gid] [-o]] [-r] [-f] groupname

-g gid:指定組ID号。

-o:允許組ID号,不必惟一。

-r:加入組ID号,低于499系統賬号。

-f:加入已經有的組時,發展程式退出。

建立一個新組,并設定組ID加入系統:

#groupadd -g 344 cjh

此時在/etc/passwd檔案中産生一個組ID(GID)是344的項目。

(九)    kill

kill指令用來中止一個程序。

kill [ -s signal | -p ] [ -a ] pid ...

kill -l [ signal ]

-s:指定發送的信号。

-p:模拟發送信号。

-l:指定信号的名稱清單。

pid:要中止程序的ID号。

Signal:表示信号。

程序是Linux系統中一個非常重要的概念。Linux是一個多任務的作業系統,系統上經常同時運作着多個程序。我們不關心這些程序究竟是如何配置設定的,或者是核心如何管理配置設定時間片的,所關心的是如何去控制這些程序,讓它們能夠很好地為使用者服務。

Linux 作業系統包括三種不同類型的程序,每種程序都有自己的特點和屬性。互動程序是由一個Shell啟動的程序。互動程序既可以在前台運作,也可以在背景運作。 批處理程序和終端沒有聯系,是一個程序式列。監控程序(也稱系統守護程序)時Linux系統啟動時啟動的程序,并在背景運作。例如,httpd是著名的 Apache伺服器的監控程序。

kill指令的工作原理是,向Linux系統的核心發送一個系統操作信号和某個程式的程序辨別号,然後系統核心就可以對程序辨別号指定的程序進行操 作。比如在top指令中,我們看到系統運作許多程序,有時就需要使用kill中止某些程序來提高系統資源。在講解安裝和登陸指令時,曾提到系統多個虛拟控 制台的作用是當一個程式出錯造成系統死鎖時,可以切換到其它虛拟控制台工作關閉這個程式。此時使用的指令就是kill,因為kill是大多數Shell内 部指令可以直接調用的。

(1)強行中止(經常使用殺掉)一個程序辨別号為324的程序:

#kill -9 324

(2)解除Linux系統的死鎖

在Linux 中有時會發生這樣一種情況:一個程式崩潰,并且處于死鎖的狀态。此時一般不用重新啟動計算機,隻需要中止(或者說是關閉)這個有問題的程式即可。當 kill處于X-Window界面時,主要的程式(除了崩潰的程式之外)一般都已經正常啟動了。此時打開一個終端,在那裡中止有問題的程式。比如,如果 Mozilla浏覽器程式出現了鎖死的情況,可以使用kill指令來中止所有包含有Mozolla浏覽器的程式。首先用top指令查處該程式的PID,然 後使用kill指令停止這個程式:

#kill -SIGKILL XXX

其中,XXX是包含有Mozolla浏覽器的程式的程序辨別号。

(3)使用指令回收記憶體

我們知道記憶體對于系統是非常重要的,回收記憶體可以提高系統資源。kill指令可以及時地中止一些“越軌”的程式或很長時間沒有相應的程式。例如,使用top指令發現一個無用 (Zombie) 的程序,此時可以使用下面指令:

#kill -9 XXX

其中,XXX是無用的程序辨別号。

然後使用下面指令:

#free

此時會發現可用記憶體容量增加了。

(4)killall指令

Linux下還提供了一個killall指令,可以直接使用程序的名字而不是程序辨別号,例如:

# killall -HUP inetd

(十)    crontab

使用crontab指令可以修改crontab配置檔案,然後該配置由cron公用程式在适當的時間執行,該指令使用權限是所有使用者。

crontab [ -u user ] 檔案

crontab [ -u user ] { -l | -r | -e }

-e:執行文字編輯器來設定時程表,内定的文字編輯器是vi。

-r:删除目前的時程表。

-l:列出目前的時程表。

crontab 檔案的格式為“M H D m d cmd”。其中,M代表分鐘(0~59),H代表小時(0~23),D代表天(1~31),m代表月(1~12),d代表一星期内的天(0~6,0為星期 天)。cmd表示要運作的程式,它被送入sh執行,這個Shell隻有USER、HOME、SHELL三個環境變量。

和at指令相比,crontab指令适合完成固定周期的任務。

設定一個定時、定期的系統提示:

[cao @www cao]#crontab -e

此時系統會打開一個vi編輯器。

如果輸入以下内容:35 17 * * 5 wall "Tomorrow is Saturday I will go CS",然後存盤退出。這時在/var/spool/cron/目錄下會生産一個cao的檔案,内容如下:

# DO NOT EDIT THIS FILE - edit the master and reinstall.

# (/tmp/crontab.2707 installed on Thu Jan 1 22:01:51 2004)

# (Cron version -- $Id: crontab.c,v 2.13 1994/01/17 03:20:37 vixie Exp $)

35 17 * * 5 wall "Tomorrow is Saturday I will play CS "

這樣每個星期五17:35系統就會彈出一個終端,提醒星期六可以打打CS了!顯示結果見圖3所示。

圖3 一個定時、定期的系統提示

1.聯合使用kill和top指令觀察系統性能的變化

首先啟動一個終端運作top指令,然後再啟動一個終端使用kill指令,見圖4所示。

圖4 觀察kill指令對top終端的影響

這時利用上面介紹的kill指令來中止一些程式:

#kill SIGKILL XXX

然後再看top指令終端的變化,包括記憶體容量、CPU使用率、系統負載等。注意,有些程序是不能中止的,不過學習Linux指令時可以試試,看看系統有什麼反應。

2.使用at和halt指令定時關機

首先設定關機時間是17:35,輸入下面代碼:

#at 17:35

warning: commands will be executed using (in order) a) $SHELL b) login shell c) /bin/sh

at>halt `-i -p

at> <EOT>

job 6 at 2004-01-01 17:35

此時實際上就已經進入Linux系統的Shell,并且編寫一個最簡單程式:halt -i -p。上面Shell中的文本結束符号表示按“Ctrl+D”組合鍵關閉指令,送出任務退出Shell。“Job 6 at 2004-01-01 17:35”表示系統接受第6個at指令,在“2004-01-01 17:35”時執行指令:先把所有網絡相關的裝置停止,關閉系統後關閉電源。

3.用crontab指令實作每天定時的病毒掃描

前面已經介紹了一個簡單的crontab指令操作,這裡看一些更重要的操作。

(1)建立一個檔案,檔案名稱自己設定,假設為caoproject:

#crontab -e

(2)檔案内容如下:

05 09 * * * antivir

用vi編輯後存盤退出。antivir是一個清除Linux病毒的軟體,當然需要時先安裝在系統中。

(3)使用crontab指令添加到任務清單中:

#crontab caoproject

這樣系統内所有使用者在每天的9點05分會自動進行病毒掃描。

4.用kill使修改的配置檔案馬上生效

Windows使用者一般都知道,重要配置檔案修改後往往都要重新啟動計算機才能使修改生效。而Linux由于采用了子產品化設計,可以自己根據需要實時設定服務。這裡以網絡服務inetd為例介紹一些操作技巧。

inetd 是一個監聽守護程序,監聽與提供網際網路服務程序(如rlogin、telnet、ftp、rsh)進行連接配接的要求,并擴充所需的服務程序。預設情況 下,inetd監聽的這些daemon均列于/etc /inetd.conf檔案中。編輯/etc/inetd.conf檔案,可以改變inetd啟動伺服器守護程序的選項,然後驅使inetd以 SIGHUP(signal 1)向目前的inetd程序發送信号,使inetd重讀該檔案。這一過程由kill指令來實作。

用vi或其它編輯器修改inetd.conf後,首先使用下面指令:

#ps -ef |grep inetd

上面代碼表明查詢inetd.conf的程序号(PID),這裡假設是1426,然後使用下面指令:

# kill -1426 inetd

這樣配置檔案就生效了。

這一講介紹的系統管理指令都是比較重要的,特别是crontab指令和quota指令使用起來會有一定難度,需要多做一些練習。另外,使用kill指令要注意“-9“這個參數,練習時最好不要運作一些重要的程式。

四、網絡操作

因為Linux系統是在Internet上起源和發展的,它與生俱來擁有強大的網絡功能和豐富的網絡應用軟體,尤其是TCP/IP網絡協 議的實作尤為成 熟。Linux的網絡指令比較多,其中一些指令像ping、 ftp、telnet、route、netstat等在其它作業系統上也能看到,但也有一些Unix/Linux系統獨有的指令,如ifconfig、 finger、mail等。Linux網絡操作指令的一個特點是,指令參數選項和功能很多,一個指令往往還可以實作其它指令的功能。

(一)    ifconfig

ifconfig用于檢視和更改網絡接口的位址和參數,包括IP位址、網絡掩碼、廣播位址,使用權限是超級使用者。

ifconfig -interface [options] address

-interface:指定的網絡接口名,如eth0和eth1。

up:激活指定的網絡接口卡。

down:關閉指定的網絡接口。

broadcast address:設定接口的廣播位址。

pointopoint:啟用點對點方式。

address:設定指定接口裝置的IP位址。

netmask address:設定接口的子網路遮罩。

4.應用說明

ifconfig是用來設定和配置網卡的指令行工具。為了手工配置網絡,這是一個必須掌握的指令。使用該指令的好處是無須重新啟動機器。要賦給eth0接口IP位址207.164.186.2,并且馬上激活它,使用下面指令:

#fconfig eth0 210.34.6.89 netmask 255.255.255.128 broadcast 210.34.6.127

該指令的作用是設定網卡eth0的IP位址、網絡掩碼和網絡的本地廣播位址。若運作不帶任何參數的ifconfig指令,這個指令将顯示機器所有激 活接口的資訊。帶有“-a”參數的指令則顯示所有接口的資訊,包括沒有激活的接口。注意,用ifconfig指令配置的網絡裝置參數,機器重新啟動以後将 會丢失。

如果要暫停某個網絡接口的工作,可以使用down參數:

#ifconfig eth0 down

(二)    ip

ip是iproute2軟體包裡面的一個強大的網絡配置工具,它能夠替代一些傳統的網絡管理工具,例如ifconfig、route等,使用權限為超級使用者。幾乎所有的Linux發行版本都支援該指令。

ip [OPTIONS] OBJECT [COMMAND [ARGUMENTS]]

OPTIONS是修改ip行為或改變其輸出的選項。所有的選項都是以-字元開頭,分為長、短兩種形式。目前,ip支援如表1所示選項。

OBJECT是要管理者擷取資訊的對象。目前ip認識的對象見表2所示。

表1 ip支援的選項

-V,-Version 列印ip的版本并退出。

-s,-stats,-statistics 輸出更為詳盡的資訊。如果這個選項出現兩次或多次,則輸出的資訊将更為詳盡。

-f,-family 這個選項後面接協定種類,包括inet、inet6或link,強調使用的協定種類。如果沒有足夠的資訊告訴ip使用的協定種類,ip就會使用預設值inet或any。link比較特殊,它表示不涉及任何網絡協定。

-4 是-family inet的簡寫。

-6 是-family inet6的簡寫。

-0 是-family link的簡寫。

-o,-oneline 對每行記錄都使用單行輸出,回行用字元代替。如果需要使用wc、grep等工具處理ip的輸出,則會用到這個選項。

-r,-resolve 查詢域名解析系統,用獲得的主機名代替主機IP位址

COMMAND 設定針對指定對象執行的操作,它和對象的類型有關。一般情況下,ip支援對象的增加(add)、删除(delete)和展示(show或list)。有些 對象不支援這些操作,或者有其它的一些指令。對于所有的對象,使用者可以使用help指令獲得幫助。這個指令會列出這個對象支援的指令和參數的文法。如果沒 有指定對象的操作指令,ip會使用預設的指令。一般情況下,預設指令是list,如果對象不能列出,就會執行help指令。

ARGUMENTS 是指令的一些參數,它們倚賴于對象和指令。ip支援兩種類型的參數:flag和parameter。flag由一個關鍵詞組成;parameter由一個 關鍵詞加一個數值組成。為了友善,每個指令都有一個可以忽略的預設參數。例如,參數dev是ip link指令的預設參數,是以ip link ls eth0等于ip link ls dev eth0。我們将在後面的詳細介紹每個指令的使用,指令的預設參數将使用default标出。

添加IP位址192.168.2.2/24到eth0網卡上:

#ip addr add 192.168.1.1/24 dev eth0

丢棄源位址屬于192.168.2.0/24網絡的所有資料報:

#ip rule add from 192.168.2.0/24 prio 32777 reject

(三)    ping

ping檢測主機網絡接口狀态,使用權限是所有使用者。

ping [-dfnqrRv][-c][-i][-I][-l][-p][-s][-t] IP位址

-d:使用Socket的SO_DEBUG功能。

-c:設定完成要求回應的次數。

-f:極限檢測。

-i:指定收發資訊的間隔秒數。

-I:網絡界面使用指定的網絡界面送出資料包。

-l:前置載入,設定在送出要求資訊之前,先行發出的資料包。

-n:隻輸出數值。

-p:設定填滿資料包的範本樣式。

-q:不顯示指令執行過程,開頭和結尾的相關資訊除外。

-r:忽略普通的Routing Table,直接将資料包送到遠端主機上。

-R:記錄路由過程。

-s:設定資料包的大小。

-t:設定存活數值TTL的大小。

-v:詳細顯示指令的執行過程。

ping 指令是使用最多的網絡指令,通常我們使用它檢測網絡是否連通,它使用ICMP協定。但是有時會有這樣的情況,我們可以浏覽器檢視一個網頁,但是卻無法 ping通,這是因為一些網站處于安全考慮安裝了防火牆。另外,也可以在自己計算機上試一試,通過下面的方法使系統對ping沒有反應:

# echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

(四)    netstat

檢查整個Linux網絡狀态。

netstat [-acCeFghilMnNoprstuvVwx][-A][--ip]

-a--all:顯示所有連線中的Socket。

-A:列出該網絡類型連線中的IP相關位址和網絡類型。

-c--continuous:持續列出網絡狀态。

-C--cache:顯示路由器配置的快取資訊。

-e--extend:顯示網絡其它相關資訊。

-F--fib:顯示FIB。

-g--groups:顯示多重廣播功能群組組員名單。

-h--help:線上幫助。

-i--interfaces:顯示網絡界面資訊表單。

-l--listening:顯示監控中的伺服器的Socket。

-M--masquerade:顯示僞裝的網絡連線。

-n--numeric:直接使用IP位址,而不通過域名伺服器。

-N--netlink--symbolic:顯示網絡硬體外圍裝置的符号連接配接名稱。

-o--timers:顯示計時器。

-p--programs:顯示正在使用Socket的程式識别碼和程式名稱。

-r--route:顯示Routing Table。

-s--statistice:顯示網絡工作資訊統計表。

-t--tcp:顯示TCP傳輸協定的連線狀況。

-u--udp:顯示UDP傳輸協定的連線狀況。

-v--verbose:顯示指令執行過程。

-V--version:顯示版本資訊。

-w--raw:顯示RAW傳輸協定的連線狀況。

-x--unix:和指定“-A unix”參數相同。

--ip--inet:和指定“-A inet”參數相同。

netstat 主要用于Linux察看自身的網絡狀況,如開啟的端口、在為哪些使用者服務,以及服務的狀态等。此外,它還顯示系統路由表、網絡接口狀态等。可以說,它是一 個綜合性的網絡狀态的察看工具。在預設情況下,netstat隻顯示已建立連接配接的端口。如果要顯示處于監聽狀态的所有端口,使用-a參數即可:

#netstat -a

Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address Foreign Address State

tcp 0 0 *:32768 *:* LISTEN

tcp 0 0 *:32769 *:* LISTEN

tcp 0 0 *:nfs *:* LISTEN

tcp 0 0 *:32770 *:* LISTEN

tcp 0 0 *:868 *:* LISTEN

tcp 0 0 *:617 *:* LISTEN

tcp 0 0 *:mysql *:* LISTEN

tcp 0 0 *:netbios-ssn *:* LISTEN

tcp 0 0 *:sunrpc *:* LISTEN

tcp 0 0 *:10000 *:* LISTEN

tcp 0 0 *:http *:* LISTEN

......

上面顯示出,這台主機同時提供HTTP、FTP、NFS、MySQL等服務。

(五)    telnet

telnet表示開啟終端機階段作業,并登入遠端主機。telnet是一個Linux指令,同時也是一個協定(遠端登陸協定)。

telnet [-8acdEfFKLrx][-b][-e][-k][-l][-n][-S][-X][主機名稱IP位址<通信端口>]

-8:允許使用8位字元資料,包括輸入與輸出。

-a:嘗試自動登入遠端系統。

-b:使用别名指定遠端主機名稱。

-c:不讀取使用者專屬目錄裡的.telnetrc檔案。

-d:啟動排錯模式。

-e:設定脫離字元。

-E:濾除脫離字元。

-f:此參數的效果和指定“-F”參數相同。

-F:使用Kerberos V5認證時,加上此參數可把本地主機的認證資料上傳到遠端主機。

-k:使用Kerberos認證時,加上此參數讓遠端主機采用指定的領域名,而非該主機的域名。

-K:不自動登入遠端主機。

-l:指定要登入遠端主機的使用者名稱。

-L:允許輸出8位字元資料。

-n:指定檔案記錄相關資訊。

-r:使用類似rlogin指令的使用者界面。

-S:服務類型,設定telnet連線所需的IP TOS資訊。

-x:假設主機有支援資料加密的功能,就使用它。

-X:關閉指定的認證形态。

使用者使用telnet指令可以進行遠端登入,并在遠端計算機之間進行通信。使用者通過網絡在遠端計算機上登入,就像登入到本地機 上執行指令一樣。為了通過 telnet登入到遠端計算機上,必須知道遠端機上的合法使用者名和密碼。雖然有些系統确實為遠端使用者提供登入功能,但出于對安全的考慮,要限制來賓的操作 權限,是以,這種情況下能使用的功能是很少的。

telnet隻為普通終端提供終端仿真,而不支援X-Window等圖形環境。當允許遠端使用者登入時,系統通常把這些使用者放在一個受限制的 Shell中,以防系統被懷有惡意的或不小心的使用者破壞。使用者還可以使用telnet從遠端站點登入到自己的計算機上,檢查電子郵件、編輯檔案和運作程 序,就像在本地登入一樣。

(六)    ftp

ftp指令進行遠端檔案傳輸。FTP是ARPANet的标準檔案傳輸協定,該網絡就是現今Internet的前身,是以ftp既是協定又是一個指令。

ftp [-dignv][主機名稱IP位址]

-d:詳細顯示指令執行過程,便于排錯分析程式執行的情形。

-i:關閉互動模式,不詢問任何問題。

-g:關閉本地主機檔案名稱支援特殊字元的擴充特性。

-n:不使用自動登陸。

-v:顯示指令執行過程。

ftp 指令是标準的檔案傳輸協定的使用者接口,是在TCP/IP網絡計算機之間傳輸檔案簡單有效的方法,它允許使用者傳輸ASCⅡ檔案和二進制檔案。為了使用ftp 來傳輸檔案,使用者必須知道遠端計算機上的合法使用者名和密碼。這個使用者名/密碼的組合用來确認ftp會話,并用來确定使用者對要傳輸的檔案進行什麼樣的通路。 另外,使用者需要知道對其進行ftp會話的計算機名字的IP位址。

使用者可以通過使用ftp客戶程式,連接配接到另一台計算機上;可以在目錄中上下移動、列出目錄内容;可以把檔案從遠端計算機機拷貝到本地機上;還可以把檔案從本地機傳輸到遠端系統中。ftp内部指令有72個,下面列出主要幾個内部指令:

ls:列出遠端機的目前目錄。

cd:在遠端機上改變工作目錄。

lcd:在本地機上改變工作目錄。

close:終止目前的ftp會話。

hash:每次傳輸完資料緩沖區中的資料後就顯示一個#号。

get(mget):從遠端機傳送指定檔案到本地機。

put(mput):從本地機傳送指定檔案到遠端機。

quit:斷開與遠端機的連接配接,并退出ftp。

(七)    route

route表示手工産生、修改和檢視路由表。

#route [-add][-net|-host] targetaddress [-netmask Nm][dev]If]

#route [-delete][-net|-host] targetaddress [gw Gw] [-netmask Nm] [dev]If]

-add:增加路由。

-delete:删除路由。

-net:路由到達的是一個網絡,而不是一台主機。

-host:路由到達的是一台主機。

-netmask Nm:指定路由的子網路遮罩。

gw:指定路由的網關。

[dev]If:強迫路由鍊指定接口。

route指令是用來檢視和設定Linux系統的路由資訊,以實作與其它網絡的通信。要實作兩個不同的子網之間的通信,需要一台連接配接兩個網絡的路由器,或者同時位于兩個網絡的網關來實作。

在Linux系統中,設定路由通常是為了解決以下問題:該Linux系統在一個區域網路中,區域網路中有一個網關,能夠讓機器通路Internet,那麼就需要将這台機器的IP位址設定為Linux機器的預設路由。使用下面指令可以增加一個預設路由:

route add 0.0.0.0 192.168.1.1

(八)    rlogin

rlogin用來進行遠端注冊。

rlogin [ -8EKLdx ] [ -e char ] [-k realm ] [ - l username ] host

-8:此選項始終允許8位輸入資料通道。該選項允許發送格式化的ANSI字元和其它的特殊代碼。如果不用這個選項,除非遠端的不是終止和啟動字元,否則就去掉奇偶校驗位。

-E:停止把任何字元當作轉義字元。當和-8選項一起使用時,它提供一個完全的透明連接配接。

-K:關閉所有的Kerberos确認。隻有與使用Kerberos 确認協定的主機連接配接時才使用這個選項。

-L:允許rlogin會話在litout模式中運作。要了解更多資訊,請查閱tty聯機幫助。

-d:打開與遠端主機進行通信的TCP sockets的socket調試。要了解更多資訊,請查閱setsockopt的聯機幫助。

-e:為rlogin會話設定轉義字元,預設的轉義字元是“~”。

-k:請求rlogin獲得在指定區域内遠端主機的Kerberos許可,而不是獲得由krb_realmofhost(3)确定的遠端主機區域内的遠端主機的Kerberos許可。

-x:為所有通過rlogin會話傳送的資料打開DES加密。這會影響響應時間和CPU使用率,但是可以提高安全性。

4.使用說明

如果在網絡中的不同系統上都有賬号,或者可以通路别人在另一個系統上的賬号,那麼要通路别的系統中的賬号,首先就要注冊到系統中,接着通過網絡遠端注冊到賬号所在的系統中。rlogin可以遠端注冊到别的系統中,它的參數應是一個系統名。

(九)    rcp

rcp代表遠端檔案拷貝,用于計算機之間檔案拷貝,使用權限是所有使用者。

rcp [-px] [-k realm] file1 file2 rcp [-px] [-r] [-k realm] file

-r:遞歸地把源目錄中的所有内容拷貝到目的目錄中。要使用這個選項,目的必須是一個目錄。

-p:試圖保留源檔案的修改時間和模式,忽略umask。

-k:請求rcp獲得在指定區域内的遠端主機的Kerberos許可,而不是獲得由krb_relmofhost(3)确定的遠端主機區域内的遠端主機的Kerberos許可。

-x:為傳送的所有資料打開DES加密。

(十)    finger

finger用來查詢一台主機上的登入賬号的資訊,通常會顯示使用者名、主目錄、停滞時間、登入時間、登入Shell等資訊,使用權限為所有使用者。

finger [選項] [使用者] [使用者@主機]

-s:顯示使用者注冊名、實際姓名、終端名稱、寫狀态、停滞時間、登入時間等資訊。

-l:除了用-s選項顯示的資訊外,還顯示使用者主目錄、登入Shell、郵件狀态等資訊,以及使用者主目錄下的.plan、.project和.forward檔案的内容。

-p:除了不顯示.plan檔案和.project檔案以外,與-l選項相同。

在計算機上使用finger:

[root@localhost root]# Finger

Login Name Tty Idle Login Time Office Office Phone

root root tty1 2 Dec 15 11

root root pts/0 1 Dec 15 11

root root *pts/1 Dec 15 11

5.應用說明

如果要查詢遠端機上的使用者資訊,需要在使用者名後面接“@主機名”,采用[使用者名@主機名]的格式,不過要查詢的網絡主機需要運作finger守護程序的支援。

(十一)    mail

mail作用是發送電子郵件,使用權限是所有使用者。此外,mail還是一個電子郵件程式。

mail [-s subject] [-c address] [-b address]

mail -f [mailbox]mail [-u user]

-b address:表示輸出資訊的匿名收信人位址清單。

-c address:表示輸出資訊的抄送()收信人位址清單。

-f [mailbox]:從收件箱者指定郵箱讀取郵件。

-s subject:指定輸出資訊的主體行。

[-u user]:端口指定優化的收件箱讀取郵件。

(十二)    nslookup

nslookup指令的功能是查詢一台機器的IP位址和其對應的域名。使用權限所有使用者。它通常需要一台域名伺服器來提供域名服務。如果使用者已經設定好域名伺服器,就可以用這個指令檢視不同主機的IP位址對應的域名。

nslookup [IP位址/域名]

3.應用執行個體

(1)在本地計算機上使用nslookup指令

$ nslookup

Default Server: name.cao.com.cn

Address: 192.168.1.9

>

在符号“>”後面輸入要查詢的IP位址域名,并回車即可。如果要退出該指令,輸入“exit”,并回車即可。

(2)使用nslookup指令測試named

輸入下面指令:

nslookup

然後就進入交換式nslookup環境。如果named正常啟動,則nslookup會顯示目前DNS伺服器的位址和域名,否則表示named沒能正常啟動。

下面簡單介紹一些基本的DNS診斷。

◆ 檢查正向DNS解析,在nslookup提示符下輸入帶域名的主機名,如hp712.my.com,nslookup應能顯示該主機名對應的IP位址。如 果隻輸入hp712,nslookup會根據/etc/resolv.conf的定義,自動添加my.com域名,并回答對應的IP位址。

◆檢查反向DNS解析,在nslookup提示符下輸入某個IP位址,如192.22.33.20,nslookup應能回答該IP位址所對應的主機名。

◆檢查MX郵件位址記錄在nslookup提示符下輸入:

set q=mx

然後輸入某個域名,輸入my.com和mail.my.com,nslookup應能夠回答對應的郵件伺服器位址,即support.my.com和support2.my.com。

(十三)    動手練習

1.危險的網絡指令

網際網路的發展使安全成為一個不能忽視的問題,finger、ftp、rcp和telnet在本質上都是不安全的,因為它 們在網絡上用明文傳送密碼和資料,嗅探器可以非常容易地截獲這些密碼和資料。而且,這些服務程式的安全驗證方式也是有弱點的,很容易受到“中間伺服器”方 式的攻擊。這裡筆者把一些不安全的指令根據危險等級列出,見表3所示。

現在ftp、telnet可以被SSH指令代替綁定在端口22上,其連接配接采用協商方式,使用RSA加密。身份鑒别完成之後,後面的所有流量都使用 IDEA 進行加密。SSH(Secure Shell)程式可以通過網絡登入到遠端主機,并執行指令。rcp、rlogin等遠端調用指令也逐漸被VNC軟體代 替。

2.在一張網卡上綁定多個IP位址

在Linux下,可以使用ifconfig友善地綁定多個IP位址到一張網卡。例如,eth0接口的原有IP位址為192.168.0 .254,可以執行下面指令:

ifconfig eth0:0 192.168.0.253 netmask 255.255.255.0

ifconfig eth0:1 192.168.0.252 netmask 255.255.255.0

3.修改網卡MAC位址

首先必須關閉網卡裝置,指令如下:

/sbin/ifconfig eth0 down

修改MAC位址,指令如下:

/sbin/ifconfig eth0 hw ether 00:AA:BB:CC:DD:EE

重新啟用網卡:

/sbin/ifconfig eht0 up

這樣網卡的MAC位址就更改完成了。每張網卡的MAC位址是惟一,但不是不能修改的,隻要保證在網絡中的MAC位址的惟一性就可以了。

4.初步部署IPv6

IPv4 技術在網絡發展中起到了巨大的作用,不過随着時間的流逝它無論在網絡位址的提供、服務品質、安全性等方面都越來越力不從心,IPv6呼之欲出。Linux 是所有作業系統中最先支援IPv6的,一般Linux基于2.4核心的Linux發行版本都可以直接使用IPv6,不過主要發行版本沒有加載IPv6模 塊,可以使用指令手工加載,需要超級使用者的權限。

(1)加載IPv6子產品

使用指令檢測,其中inet6 addr: fe80::5054:abff:fe34:5b09/64,就是eth0網卡的IPv6位址。

# modprobe IPv6

#ifconfig

eth0 Link encap:Ethernet HWaddr 52:54:AB:34:5B:09

inet addr:192.168.1.2 Bcast:192.168.1.255 Mask:255.255.255.0

inet6 addr: fe80::5054:abff:fe34:5b09/64 Scope:Link

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

RX packets:0 errors:0 dropped:0 overruns:0 frame:0

TX packets:21 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:100

RX bytes:0 (0.0 b) TX bytes:1360 (1.3 Kb)

Interrupt:5 Base address:0xec00

(2)使用ping指令檢測網卡的IPv6位址是否有效

#ping6 -I eth0 -c 2 fe80::200:e8ff:fea0:2586

和IPv4不一樣,使用ping6指令時必須指定一個網卡界面,否則系統不知道将資料包發送到哪個網絡裝置。I表示Interface、eth0是第一個網卡,-c表示回路,2表示ping6操作兩次。結果見圖1所示。

圖1 IPv6網絡下的ping6指令

(3)使用ip指令在IPv6下為eth0增加一個IP位址

#ip -6 addr add 3ffe:ffff:0:f101::1/64 dev eth0

使用ifconfig指令,檢視網卡是否出現第二個IPv6位址。

Linux網絡的主要優點是能夠實作資源和資訊的共享,并且使用者可以遠端通路資訊。Linux提供了一組強有力的網絡指令來為使用者服務,這些工具能夠幫助使用者進行網絡設定、檢查網絡狀況、登入到遠端計算機上、傳輸檔案和執行遠端指令等。

上面介紹了Linux中比較重要的網絡指令,其實Linux還有許多指令需要學習。Linux網絡操作指令的一個特點就是指令參數選項很多,并不要求全部記住,關鍵在于了解指令的主要用途和學會使用幫助資訊。

五、系統安全

雖然Linux和Windows NT/2000系統一樣是一個多使用者的系統,但是它們之間有不少重要的差别。對于很多習慣了Windows系統的管理者來講,如何保證Linux作業系統安全、可靠将會面臨許多新的挑戰。本文将重點介紹Linux系統安全的指令。

(一)    passwd

passwd指令原來修改賬戶的登陸密碼,使用權限是所有使用者。

passwd [選項] 賬戶名稱

-l:鎖定已經命名的賬戶名稱,隻有具備超級使用者權限的使用者方可使用。

-u:解開賬戶鎖定狀态,隻有具備超級使用者權限的使用者方可使用。

-x, --maximum=DAYS:最大密碼使用時間(天),隻有具備超級使用者權限的使用者方可使用。

-n, --minimum=DAYS:最小密碼使用時間(天),隻有具備超級使用者權限的使用者方可使用。

-d:删除使用者的密碼, 隻有具備超級使用者權限的使用者方可使用。

-S:檢查指定使用者的密碼認證種類, 隻有具備超級使用者權限的使用者方可使用。

$ passwd

Changing password for user cao.

Changing password for cao

(current) UNIX password:

New UNIX password:

Retype new UNIX password:

passwd: all authentication tokens updated successfully.

從上面可以看到,使用passwd指令需要輸入舊的密碼,然後再輸入兩次新密碼。

(二)    su

su的作用是變更為其它使用者的身份,超級使用者除外,需要鍵入該使用者的密碼。

su [選項]... [-] [USER [ARG]...]

-f , --fast:不必讀啟動檔案(如 csh.cshrc 等),僅用于csh或tcsh兩種Shell。

-l , --login:加了這個參數之後,就好像是重新登陸為該使用者一樣,大部分環境變量(例如HOME、SHELL和USER等)都是以該使用者(USER)為主,并且工作目錄也會改變。如果沒有指定USER,預設情況是root。

-m, -p ,--preserve-environment:執行su時不改變環境變數。

-c command:變更賬号為USER的使用者,并執行指令(command)後再變回原來使用者。

USER:欲變更的使用者賬号,ARG傳入新的Shell參數。

變更賬号為超級使用者,并在執行df指令後還原使用者。 su -c df root

(三)    umask

umask設定使用者檔案和目錄的檔案建立預設屏蔽值,若将此指令放入profile檔案,就可控制該使用者後續所建檔案的存取許可。它告訴系統在建立檔案時不給誰存取許可。使用權限是所有使用者。

umask [-p] [-S] [mode]

-S:确定目前的umask設定。

-p:修改umask 設定。

[mode]:修改數值。

傳統Unix的umask值是022,這樣就可以防止同屬于該組的其它使用者及别的組的使用者修改該使用者的檔案。既然每個使用者都擁有并 屬于一個自己的私有組,那麼這種“組保護模式”就不在需要了。嚴密的權限設定構成了Linux安全的基礎,在權限上犯錯誤是緻命的。需要注意的 是,umask指令用來設定程序所建立的檔案的讀寫權限,最保險的值是0077,即關閉建立檔案的程序以外的所有程序的讀寫權限,表示為 -rw-------。在~/.bash_profile中,加上一行指令umask 0077可以保證每次啟動Shell後, 程序的umask權限都可以被正确設定。

umask -S

u=rwx,g=rx,o=rx

umask -p 177

u=rw,g=,o=

上述5行指令,首先顯示目前狀态,然後把umask值改為177,結果隻有檔案所有者具有讀寫檔案的權限,其它使用者不能通路該檔案。這顯然是一種非常安全的設定。

(四)    chgrp

chgrp表示修改一個或多個檔案或目錄所屬的組。使用權限是超級使用者。

chgrp [選項]... 組 檔案...

chgrp [選項]... --reference=參考檔案 檔案...

将每個<檔案>的所屬組設定為<組>。

-c, --changes :像 --verbose,但隻在有更改時才顯示結果。

--dereference:會影響符号連結所訓示的對象,而非符号連結本身。

-h, --no-dereference:會影響符号連結本身,而非符号連結所訓示的目的地(當系統支援更改符号連結的所有者,此選項才有效)。

-f, --silent, --quiet:去除大部分的錯誤資訊。

--reference=參考檔案:使用<參考檔案>的所屬組,而非指定的<組>。

-R, --recursive:遞歸處理所有的檔案及子目錄。

-v, --verbose:處理任何檔案都會顯示資訊。

該指令改變指定指定檔案所屬的使用者組。其中group可以是使用者組ID,也可以是/etc/group檔案中使用者組的組名。檔案名是以空格分開的要改變屬組的檔案清單,支援通配符。如果使用者不是該檔案的屬主或超級使用者,則不能改變該檔案的組。

改變/opt/local /book/及其子目錄下的所有檔案的屬組為book,指令如下:

$ chgrp - R book /opt/local /book

(五)    chmod

chmod指令是非常重要的,用于改變檔案或目錄的通路權限,使用者可以用它控制檔案或目錄的通路權限,使用權限是超級使用者。

chmod指令有兩種用法。一種是包含字母和操作符表達式的字元設定法(相對權限設定);另一種是包含數字的數字設定法(絕對權限設定)。

(1)字元設定法

chmod [who] [+ | - | =] [mode] 檔案名

◆操作對象who可以是下述字母中的任一個或它們的組合

u:表示使用者,即檔案或目錄的所有者。

g:表示同組使用者,即與檔案屬主有相同組ID的所有使用者。

o:表示其它使用者。

a:表示所有使用者,它是系統預設值。

◆操作符号

+:添加某個權限。

-:取消某個權限。

=:賦予給定權限,并取消其它所有權限(如果有的話)。

◆設定mode的權限可用下述字母的任意組合

r:可讀。

w:可寫。

x:可執行。

X:隻有目标檔案對某些使用者是可執行的或該目标檔案是目錄時才追加x屬性。

s:檔案執行時把程序的屬主或組ID置為該檔案的檔案屬主。方式“u+s”設定檔案的使用者ID位,“g+s”設定組ID位。

t:儲存程式的文本到交換裝置上。

u:與檔案屬主擁有一樣的權限。

g:與和檔案屬主同組的使用者擁有一樣的權限。

o:與其它使用者擁有一樣的權限。

檔案名:以空格分開的要改變權限的檔案清單,支援通配符。

一個指令行中可以給出多個權限方式,其間用逗号隔開。

(2) 數字設定法

數字設定法的一般形式為: chmod [mode] 檔案名

數字屬性的格式應為3個0到7的八進制數,其順序是(u)(g)(o)檔案名,以空格分開的要改變權限的檔案清單,支援通配符。

數字表示的權限的含義如下:0001為所有者的執行權限;0002為所有者的寫權限;0004為所有者的讀權限;0010為組的執行權限;0020 為組的寫權限;0040為組的讀權限;0100為其他人的執行權限;0200為其他人的寫權限;0400為其他人的讀權限;1000為粘貼位置 位;2000表示假如這個檔案是可執行檔案,則為組ID為位置位,否則其中檔案鎖定位置位;4000表示假如這個檔案是可執行檔案,則為使用者ID為位置 位。

3.執行個體

如果一個系統管理者寫了一個表格(tem)讓所有使用者填寫,那麼必須授權使用者對這個檔案有讀寫權限,可以使用指令:#chmod 666 tem

上面代碼中,這個666數字是如何計算出來的呢?0002為所有者的寫權限,0004為所有者的讀權限,0020為組的寫權限,0040為組的讀權 限, 0200為其他人的寫權限,0400為其他人的讀權限,這6個數字相加就是666(注以上數字都是八進制數),結果見圖1所示。

圖1 用chmod數字方法設定檔案權限

從圖1可以看出,tem檔案的權限是-rw-rw-rw-,即使用者對這個檔案有讀寫權限。

如果用字元權限設定使用下面指令:

#chmod a =wx tem

(六)    chown

更改一個或多個檔案或目錄的屬主和屬組。使用權限是超級使用者。

chown [選項] 使用者或組 檔案

--dereference:受影響的是符号連結所訓示的對象,而非符号連結本身。

--from=目前所有者:目前組隻當每個檔案的所有者群組符合選項所指定的,才會更改所有者群組。其中一個可以省略,這已省略的屬性就不需要符合原有的屬性。

chown 将指定檔案的擁有者改為指定的使用者或組,使用者可以是使用者名或使用者ID;組可以是組名或組ID;檔案是以空格分開的要改變權限的檔案清單,支援通配符。系統管理者經常使用chown指令,在将檔案拷貝到另一個使用者的目錄下以後,讓使用者擁有使用該檔案的權限。

1.把檔案shiyan.c的所有者改為wan

$ chown wan shiyan.c

2.把目錄/hi及其下的所有檔案和子目錄的屬主改成wan,屬組改成users。

$ chown - R wan.users /hi

(七)    chattr

修改ext2和ext3檔案系統屬性(attribute),使用權限超級使用者。

chattr [-RV] [-+=AacDdijsSu] [-v version] 檔案或目錄

-R:遞歸處理所有的檔案及子目錄。

-V:詳細顯示修改内容,并列印輸出。

-:失效屬性。

+:激活屬性。

= :指定屬性。

A:Atime,告訴系統不要修改對這個檔案的最後通路時間。

S:Sync,一旦應用程式對這個檔案執行了寫操作,使系統立刻把修改的結果寫到磁盤。

a:Append Only,系統隻允許在這個檔案之後追加資料,不允許任何程序覆寫或截斷這個檔案。如果目錄具有這個屬性,系統将隻允許在這個目錄下建立和修改檔案,而不允許删除任何檔案。

i:Immutable,系統不允許對這個檔案進行任何的修改。如果目錄具有這個屬性,那麼任何的程序隻能修改目錄之下的檔案,不允許建立和删除檔案。

D:檢查壓縮檔案中的錯誤。

d:No dump,在進行檔案系統備份時,dump程式将忽略這個檔案。

C:Compress,系統以透明的方式壓縮這個檔案。從這個檔案讀取時,傳回的是解壓之後的資料;而向這個檔案中寫入資料時,資料首先被壓縮之後才寫入磁盤。

s:Secure Delete,讓系統在删除這個檔案時,使用0填充檔案所在的區域。

u:Undelete,當一個應用程式請求删除這個檔案,系統會保留其資料塊以便以後能夠恢複删除這個檔案。

chattr 指令的作用很大,其中一些功能是由Linux核心版本來支援的,如果Linux核心版本低于2.2,那麼許多功能不能實作。同樣-D檢查壓縮檔案中的錯誤 的功能,需要2.5.19以上核心才能支援。另外,通過chattr指令修改屬性能夠提高系統的安全性,但是它并不适合所有的目錄。chattr指令不能 保護/、/dev、/tmp、/var目錄。

1.恢複/root目錄,即子目錄的所有檔案

# chattr -R +u/root

2.用chattr指令防止系統中某個關鍵檔案被修改

在Linux下,有些配置檔案(passwd ,fatab)是不允許任何人修改的,為了防止被誤删除或修改,可以設定該檔案的“不可修改位(immutable)”,指令如下:

# chattr +i /etc/fstab

(八)    sudo

sudo是一種以限制配置檔案中的指令為基礎,在有限時間内給使用者使用,并且記錄到日志中的指令,權限是所有使用者。

sudo [-bhHpV] [-s <shell>] [-u <使用者>] [指令]

sudo [-klv]

-b:在背景執行指令。

-h:顯示幫助。

-H:将HOME環境變量設為新身份的HOME環境變量。

-k:結束密碼的有效期,即下次将需要輸入密碼。

-l:列出目前使用者可以使用的指令。

-p:改變詢問密碼的提示符号。

-s <shell>:執行指定的Shell。

-u <使用者>:以指定的使用者為新身份,不使用時預設為root。

-v:延長密碼有效期5分鐘。

sudo 指令的配置在/etc/sudoers檔案中。當使用者使用sudo時,需要輸入密碼以驗證使用者身份。随後的一段時間内可以使用定義好的指令,當使用配置檔案中沒有的指令時,将會有報警的記錄。sudo是系統管理者用來允許某些使用者以root身份運作部分/全部系統指令的程式。一個明顯的用途是增強了站點的安全性,如果需要每天以超級使用者的身份做一些日常工作,經常執行一些固定的幾個隻有超級使用者身份才能執行的指令,那麼用sudo是非常适合的。

(九)    ps

ps顯示瞬間程序 (process) 的動态,使用權限是所有使用者。

ps [options] [--help]

ps的參數非常多, 此出僅列出幾個常用的參數。

-A:列出所有的程序。

-l:顯示長清單。

-m:顯示記憶體資訊。

-w:顯示加寬可以顯示較多的資訊。

-e:顯示所有程序。

a:顯示終端上的所有程序,包括其它使用者的程序。

-au:顯示較詳細的資訊。

-aux:顯示所有包含其它使用者的程序。

要對程序進行監測和控制,首先要了解目前程序的情況,也就是需要檢視目前程序。ps指令就是最基本、也是非常強大的程序檢視指令。 使用該指令可以确定有哪些程序正在運作、運作的狀态、程序是否結束、程序有沒有僵屍、哪些程序占用了過多的資源等。圖2給出了ps-aux指令詳解。大部 分資訊都可以通過執行該指令得到。最常用的三個參數是u、a、x。下面就結合這三個參數詳細說明ps指令的作用:ps aux

圖2 ps-aux指令詳解

圖2第2行代碼中,USER表示程序擁有者;PID表示程序标示符;%CPU表示占用的CPU使用率;%MEM占用的實體記憶體使用率;VSZ表示占用的虛拟記憶體大小;RSS為程序占用的實體記憶體值;TTY為終端的次要裝置号碼。

STAT 表示程序的狀态,其中D為不可中斷的靜止(I/O動作);R正在執行中;S靜止狀态;T暫停執行;Z不存在,但暫時無法消除;W沒有足夠的記憶體分頁可分 配;高優先序的程序;N低優先序的程序;L有記憶體分頁配置設定并鎖在記憶體體内 (實時系統或 I/O)。START為程序開始時間。TIME為執行的時間。COMMAND是所執行的指令。

在進行系統維護時,經常會出現記憶體使用量驚人,而又不知道是哪一個程序占用了大量程序的情況。除了可以使用top指令檢視記憶體使用情況之外,還可以使用下面的指令:

ps aux | sort +5n

(十)    who

who顯示系統中有哪些使用者登陸系統,顯示的資料包含了使用者ID、使用的登陸終端、上線時間、呆滞時間、CPU占用,以及做了些什麼。 使用權限為所有使用者。

who - [husfV] [user]

-h:不要顯示标題列。

-u:不要顯示使用者的動作/工作。

-s:使用簡短的格式來顯示。

-f:不要顯示使用者的上線位置。

-V:顯示程式版本。

該指令主要用于檢視目前線上上的使用者情況。如果使用者想和其它使用者建立即時通信,比如使用talk指令,那麼首先要确定的就是該使用者 确實線上上,不然 talk程序就無法建立起來。又如,系統管理者希望監視每個登入的使用者此時此刻的所作所為,也要使用who指令。who指令應用起來非常簡單,可以比較準 确地掌握使用者的情況,是以使用非常廣泛。

1.使用Linux指令檢測系統入侵者

安裝過Mandrake Linux和Red Hat Linux的使用者都會知道,Linux系統會内置三種不同級别(标準、高、更高)的防火牆,當進行了Linux伺服器的安裝和一些基本的設定後,伺服器應 該說是比較安全的,但是也會有黑客通過各種方法利用系統管理者的疏忽侵入系統。如何快速查找黑客非常重要。一般來說,可以使用指令查詢黑客是否入侵,見表 1。

表1 查詢黑客入侵現象的指令對應表

舉例說明,如果黑客嗅探網絡,那麼它必須使網卡接口處于混雜模式,使用下面指令進行查詢:

#ifconfig -a

eth0 Link encap:Ethernet HWaddr 00:00:E8:A0:25:86

inet addr:192.168.1.7 Bcast:192.168.1.255 Mask:255.255.255.0

UP BROADCAST RUNNING PROMISCUOUS MTU:1500 Metric:1

從這個指令的輸出中,可以看到上面講到的這些概念。第一行的00:00:E8:A0:25:86是mac位址,第二行的192.168.1.7是 IP位址,第四行講的是接收資料狀态,這時正在被黑客嗅探。一般而言,網卡有幾種接收資料幀的狀态,如Broadcast、Multicast、 Promiscuous等。Broadcast是指接收所有類型為廣播封包的資料幀;Multicast是指接收特定的多點傳播封包;Promiscuous 則是通常說的混雜模式,是指對封包中的目的硬體位址不加任何檢查、全部接收的工作模式。

2.限制su指令的濫用

我們知道,超級使用者在Linux中有最大的權利,幾乎所有黑客都想得到這個目标。Linux可以增加對切換到超級用 戶的限制。使用PAM (Pluggable Authentication Modules)可以禁止除在wheel組以外的任何人su成root,修改/etc/pam.d/su檔案,除去屏蔽辨別#。使用 /usr/sbin/usermod G10 bjecadm将bjecadm這個賬号加入gid為10的組,就是wheel組。指令如下:

/etc/pam.d/su # 使用密碼驗證#

auth sufficient /lib/security/pam_wheel.so debug

# 限制隻有wheel組使用者才可以切換到root#

auth required /lib/security/pam_wheel.so use_uid

chmod -G10 bjecadm

另外,每當使用者試圖使用su指令進入系統使用者時,指令将在/usr/adm/sulog檔案中寫一條資訊,若該檔案記錄了大量試圖用su進入root的無效操作資訊,則表明了可能有人企圖破譯root密碼。

Linux指令有着強大的功能。對于Linux系統管理者來說,往往隻需要通過各種安全指令技巧,組合構成安全防線。從計算機安全的角度看,世界上沒有絕對安全的計算機系統,Linux系統也不例外。

六、其他

在前面幾講中,我們把Linux指令按照在系統中的作用分成幾個部分分别予以介紹。但是,還有一些指令不好劃分,然而學習它們同樣是比較重要的。

(一)    tar

tar指令是Unix/Linux系統中備份檔案的可靠方法,幾乎可以工作于任何環境中,它的使用權限是所有使用者。

tar [主選項+輔選項] 檔案或目錄

使用該指令時,主選項是必須要有的,它告訴tar要做什麼事情,輔選項是輔助使用的,可以選用。

主選項:

-c 建立新的檔案檔案。如果使用者想備份一個目錄或是一些檔案,就要選擇這個選項。

-r 把要存檔的檔案追加到檔案檔案的未尾。例如使用者已經做好備份檔案,又發現還有一個目錄或是一些檔案忘記備份了,這時可以使用該選項,将忘記的目錄或檔案追加到備份檔案中。

-t 列出檔案檔案的内容,檢視已經備份了哪些檔案。

-u 更新檔案。就是說,用新增的檔案取代原備份檔案,如果在備份檔案中找不到要更新的檔案,則把它追加到備份檔案的最後。

-x 從檔案檔案中釋放檔案。

輔助選項:

-b 該選項是為錄音帶機設定的,其後跟一數字,用來說明區塊的大小,系統預設值為20(20×512 bytes)。

-f 使用檔案檔案或裝置,這個選項通常是必選的。

-k 儲存已經存在的檔案。例如把某個檔案還原,在還原的過程中遇到相同的檔案,不會進行覆寫。

-m 在還原檔案時,把所有檔案的修改時間設定為現在。

-M 建立多卷的檔案檔案,以便在幾個磁盤中存放。

-v 詳細報告tar處理的檔案資訊。如無此選項,tar不報告檔案資訊。

-w 每一步都要求确認。

-z 用gzip來壓縮/解壓縮檔案,加上該選項後可以将檔案檔案進行壓縮,但還原時也一定要使用該選項進行解壓縮。

tar 是Tape Archive(錄音帶歸檔)的縮寫,最初設計用于将檔案打包到錄音帶上。如果下載下傳過Linux的源代碼,或許已經碰到過tar檔案

請注意,不要忘了Linux是區分大小寫的。例如,tar指令應該總是以小寫的形式執行。指令行開關可以是大寫、小寫或大小寫的混合。例如,-t和-T執行不同的功能。檔案或目錄名稱可以混合使用大小寫,而且就像指令和指令行開關一樣是區分大小寫的。

tar是一個指令行的工具,沒有圖形界面。使用Konsole打開一個終端視窗,接下來是一個簡單的備份指令(在/temp目錄中建立一個back.tar的檔案,/usr目錄中所有内容都包含在其中。):

$tar cvf - /usr > /temp/back.tar

另外,tar指令支援前面第三講中講過的crontab指令,可以用crontab工具設定成基于時間的有規律地運作。例如,每晚6點把/usr目 錄備份到hda—第一個IDE接口的主驅動器 (總是位于第一個硬碟)中,隻要将下面語句添加到root的crontab中即可:

$00 06 * * * tar cvf /dev/hda1/usrfiles.tar - /usr

一般情況下,以下這些目錄是需要備份的:

◆/etc 包含所有核心配置檔案,其中包括網絡配置、系統名稱、防火牆規則、使用者、組,以及其它全局系統項。

◆ /var 包含系統守護程序(服務)所使用的資訊,包括DNS配置、DHCP租期、郵件緩沖檔案、HTTP伺服器檔案、dB2執行個體配置等。

◆/home 包含所有預設使用者的主目錄,包括個人設定、已下載下傳的檔案和使用者不希望失去的其它資訊。

◆/root 根(root)使用者的主目錄。

◆/opt 是安裝許多非系統檔案的地方。IBM軟體就安裝在這裡。OpenOffice、JDK和其它軟體在預設情況下也安裝在這裡。

有些目錄是可以不備份的:

◆ /proc 應該永遠不要備份這個目錄。它不是一個真實的檔案系統,而是運作核心和環境的虛拟化視圖,包括諸如/proc/kcore這樣的檔案,這個檔案是整個運作記憶體的虛拟視圖。備份這些檔案隻是在浪費資源。

◆/dev 包含硬體裝置的檔案表示。如果計劃還原到一個空白的系統,就可以備份/dev。然而,如果計劃還原到一個已安裝的Linux 系統,那麼備份/dev是沒有必要的。

(二)    unzip

unzip 指令位于/usr/bin目錄中,它們和MS DOS下的pkzip、pkunzip及MS Windows中的Winzip軟體功能一樣,将檔案壓縮成.zip檔案,以節省硬碟空間,當需要的時候再将壓縮檔案用unzip指令解開。該指令使用權 限是所有使用者。

unzip [-cflptuvz][-agCjLMnoqsVX][-P <密碼>][.zip檔案][檔案][-d <目錄>][-x <檔案>]

-c:将解壓縮的結果顯示到螢幕上,并對字元做适當的轉換。

-f:更新現有的檔案。

-l:顯示壓縮檔案内所包含的檔案。

-p:與-c參數類似,會将解壓縮的結果顯示到螢幕上,但不會執行任何的轉換。

-t:檢查壓縮檔案是否正确。

-u:與-f參數類似,但是除了更新現有的檔案外,也會将壓縮檔案中的其它檔案解壓縮到目錄中。

-v:執行是時顯示詳細的資訊。

-z:僅顯示壓縮檔案的備注文字。

-a:對文本檔案進行必要的字元轉換。

-b:不要對文本檔案進行字元轉換。

-C:壓縮檔案中的檔案名稱區分大小寫。

-j:不處理壓縮檔案中原有的目錄路徑。

-L:将壓縮檔案中的全部檔案名改為小寫。

-M:将輸出結果送到more程式處理。

-n:解壓縮時不要覆寫原有的檔案。

-o:不必先詢問使用者,unzip執行後覆寫原有檔案。

-P<密碼>:使用zip的密碼選項。

-q:執行時不顯示任何資訊。

-s:将檔案名中的空白字元轉換為底線字元。

-V:保留VMS的檔案版本資訊。

-X:解壓縮時同時回存檔案原來的UID/GID。

[.zip檔案]:指定.zip壓縮檔案。

[檔案]:指定要處理.zip壓縮檔案中的哪些檔案。

-d<目錄>:指定檔案解壓縮後所要存儲的目錄。

-x<檔案>:指定不要處理.zip壓縮檔案中的哪些檔案。

-Z unzip:-Z等于執行zipinfo指令。在Linux中,還提供了一個叫zipinfo的工具,能夠察看zip壓縮檔案的詳細資訊。unzip最新版本是5.50。

(三)    gunzip

gunzip指令作用是解壓檔案,使用權限是所有使用者。

gunzip [-acfhlLnNqrtvV][-s <壓縮字尾字元串>][檔案...]

或者

gunzip [-acfhlLnNqrtvV][-s <壓縮字尾字元串>][目錄]

-a或--ascii:使用ASCII文字模式。

-c或--stdout或--to-stdout:把解壓後的檔案輸出到标準輸出裝置。

-f或-force:強行解開壓縮檔案,不理會檔案名稱或硬連接配接是否存在,以及該檔案是否為符号連接配接。

-h或--help:線上幫助。

-l或--list:列出壓縮檔案的相關資訊。

-L或--license:顯示版本與版權資訊。

-n或--no-name:解壓縮時,若壓縮檔案内含有原來的檔案名稱及時間戳記,則将其忽略不予處理。

-N或--name:解壓縮時,若壓縮檔案内含有原來的檔案名稱及時間戳記,則将其回存到解開的檔案上。

-q或--quiet:不顯示警告資訊。

-r或--recursive:遞歸處理,将指定目錄下的所有檔案及子目錄一并處理。

-S<壓縮字尾字元串>或--suffix<壓縮字尾字元串>:更改壓縮字尾字元串。

-t或--test:測試壓縮檔案是否正确無誤。

-v或--verbose:顯示指令執行過程。

-V或--version:顯示版本資訊。

gunzip是個使用廣泛的解壓縮程式,它用于解開被gzip壓縮過的檔案,這些壓縮檔案預設最後的擴充名為“.gz”。事實上,gunzip就是gzip的硬連接配接,是以不論是壓縮或解壓縮,都可通過gzip指令單獨完成。gunzip最新版本是1.3.3 。

(四)    unarj

unarj解壓縮格式為.arj格式的檔案,使用權限是所有使用者。

unarj [eltx][.arj壓縮檔案]

e:解壓縮.arj檔案。

l:顯示壓縮檔案内所包含的檔案。

t:檢查壓縮檔案是否正确。

x:解壓縮時保留原有的路徑。

帶有.arj擴充名的檔案是由用于MS DOS和Windows的ARJ實用程式建立的。因為ARJ是一種不能免費獲得源代碼的共享件程式,是以在

(五)    mtools

mtools 實際上是一個指令集合,是DOS檔案系統的工具程式,它可以模拟許多DOS指令,使用起來非常友善。使用權限是所有使用者。Linux系統提供了一組稱為 mtools的可移植工具,可以讓使用者輕松地從标準的DOS軟碟上讀、寫檔案和目錄。它們對DOS和Linux環境之間交換檔案非常有用。mtools的 使用非常簡單,如果想把軟碟裡所有的檔案都拷貝到硬碟上,那麼就可以執行以下指令:

mcopy a:*.*

也就是說,隻需要在相應的DOS指令之前加上一個字母“m”,就可以完成對應的功能了。一般Linux發行版本中都有這個軟體,可以使用下面指令檢查一下。

rpm -qa|grep mtools

2.包括的指令

mcd 目錄名:改變MS DOS下的目錄。

mcopy 源檔案 目标檔案:在MS DOS和Unix之間複制檔案。

mdel 檔案名:删除MS DOS下的檔案。

mdir 目錄名:顯示MS DOS下的目錄。

mformat 驅動器号:在低級格式化的軟碟上建立MS DOS檔案系統。

rnlabel 驅動器号:産生MS DOS下的卷标。

mmd 目錄名:建立MS DOS下的目錄。

mrd 目錄名:删除MS DOS下的目錄。

mren 源檔案 目标檔案:重新命名已存在的MS DOS檔案。

mtype 檔案名:顯示MS DOS檔案的内容。

請注意,這些指令和對應的MS DOS指令非常相似。在mtools指令中,“/”和“\”是可以混用的。因為檔案清單的是DOS系統下的文檔,對大小寫并不敏感,是以“CDE”和“cde”在這裡是一樣的。

(1)如果把軟碟進行快速格式化,可以使用指令mformat:

mformat A:

mtools 當初發展的目的是用來處理DOS檔案系統的,是以隻能用在FAT檔案格式的分區上。需要注意的是,如果用mount指令來挂載了FAT16/32分區,那 麼就不能使用mtools的指令來處理這些分區上的檔案。這是因為一旦FAT16/32分區挂到了Linux檔案目錄下,Linux就會将其視為檔案系統 本身的一部分,這時如果要對其操作就必須使用Linux本身所附帶的指令集。

(2)将DOS盤上的檔案htca.c複制到目前目錄下,并用ls指令進行驗證。

$ mcopy a:\htca.c

$ ls -l htca.c

-rw-r- -r- - 1 xxq xxq 27136 Jan 1 01:80 htca.c

(六)    man

man指令用來提供線上幫助,使用權限是所有使用者。在Linux系統中存儲着一部聯機使用的手冊,以供使用者在終端上查找。使用man指令可以調閱其中的幫助資訊,非常友善和實用。

man 指令名稱

man [-acdfhkKtwW] [-m system] [-p string] [-C config_file] [-M path] [-P pager] [-S section_list] [section] name ...

-C config_file:指定設定檔案man.conf,預設值是/etc/man.conf。

-M path:指定了聯機手冊的搜尋路徑, 如果沒有指定則使用環境變數MANPATH的設定;如果沒有使用MANPATH, 則會使用/usr/lib/man.conf内的設定;如果MANPATH是空字串,則表示使用預設值。

-P pager:指定使用何種pager.man會優先使用此選項設定,然後是依環境變數MANPAGER設定,然後是環境變數PAGER;man預設使用/usr/bin/less -is。

-S section_list man:所搜尋的章節清單(以冒号分隔),此選項會覆寫環境變數MANSECT的設定。

-a man:預設情況是在顯示第一個找到的手冊之後,就會停止搜尋,使用此選項會強迫man繼續顯示所有符合name的聯機手冊。

-c:即使有最新的cat page,也繼續對聯機手冊重新作排版,本選項在螢幕的行列數改變時或已排版的聯機手冊損壞時特别有意義。

-d:不要真的顯示聯機手冊,隻顯示除錯訊息。

-D:同時顯示聯機手冊與除錯訊息。

-h:顯示求助訊息然後結束程式 。

-K:對所有的聯機手冊搜尋所指定的字串。請注意,本功能回應速度可能很慢,如果指定section(區域)會對速度有幫助。

-m system:依所指定的system名稱而指定另一組的聯機手冊。

man:是manual(手冊)的縮寫。在輸入指令有困難時,可以立刻得到這個文檔。例如, 如果使用ps指令時遇到困難,可以輸入man ps得到幫助資訊,此時會顯示出ps的手冊頁(man page)。

由于手冊頁man page是用less程式來看的(可以友善地使螢幕上翻和下翻), 是以在man page裡可以使用less的所有選項。

less中比較重要的功能鍵有:

[q] 退出;

[Enter] 一行行地下翻;

[Space] 一頁頁地下翻;

[b] 上翻一頁;

[/] 後跟一個字元串和[Enter]來查找字元串;

[n] 發現上一次查找的下一個比對。

4.閱讀手冊頁

手冊頁在很少的空間裡提供了很多的資訊,這裡簡單介紹一下大多數手冊頁中都有的部分内容。Linux 手冊頁主要有九個部分: 使用者指令、系統調用、程式庫、裝置說明、檔案格式、遊戲、雜項、系統指令、核心,手冊頁快照見圖1所示。

圖1 ps指令手冊頁快照

Linux手冊頁布局見表1。

Linux 指令中有一些基礎的、重要的指令,例如ps、find、cat和ls等。下面來舉一個綜合應用的例子,由此可以看出man的地位在Linux中可謂至關重 要。但是,man所顯示的資訊卻不是普通的文本,如果直接将這些文字重定向到一個文本檔案,就會發現在man中高亮顯示的文字就變成了兩個,而且有不計其數的制表符,使列印、編輯都變得非常不便。不過,使用下面這樣一條語句就能得到ps指令列印。

# man ps | col -b | lpr

這條指令同時運用了輸出重定向和管道兩種技巧,作用是将ps指令的幫助資訊可以直接列印出來。更多的Man檔案可以檢視Linux Man

(七)    unencode

unencode指令可以把一個二進制檔案表編碼為一個文本檔案,使用權限是所有使用者。

uuencode [-hv] [源檔案] 目标檔案

-h:列出指令使用格式(help) 。

-v:列出版本資訊。

uuencode指令可以将二進制檔案轉化成可使用電子郵件發送的ASCII編碼形式。uuencode編碼後的資料都以 begin開始,以end作為結束,且通常其中的每一行的開始均為“M”,中間部分是編碼過的檔案,編碼後的檔案比源檔案要大一些。

(八)    uudecode

uudecode指令用來将uuencode編碼後的檔案還原,uudecode隻會将begin與end标記之間的編碼資料還原,程式會跳過标記以外的資料。它的使用權限為所有使用者。

uuencode [-hv] [file1 ...]

-h:列出指令使用格式(help)。

使用下面指令一次還原幾個檔案:

uuencode file1.uud file2.uud file3.uud

(九)    動手練習

1.在Linux指令行下發送郵件

雖然Linux桌面應用發展很快,但是指令行(Shell)在Linux中依然有很強的生命力。如果能确認電子郵件伺服器支援8bit的位元組,就可以直接使用下面指令:

cat <附件檔案名> | mail <郵件位址>

cat(cat是concatenate的縮寫)指令是将幾個檔案處理成一個檔案,并将這種處理的結果儲存到一個單獨的輸出檔案,這裡我們用它來合并郵件的文本。

寫好郵件名稱,比如叫cjkmail,然後使用下面指令:

$uuencode <附件檔案名> <附件檔案名> >>cjkmail

這樣就可以用vi編輯器寫cjkmail檔案,并在前面寫上信的正文,然後寄出。

對方收到信後,把信中屬于cjkmail中的内容拷貝出來,存為themail.uue。如果對方是在Windows下,就可以用WinRAR或WinZip解壓,這樣就可以看到附件。

如果對方也使用Linux,可以用undecode指令還原:

$ uudencode -o<附件檔案名> themail.uue

2.實作tar的分卷

筆者想把一個378MB的檔案壓縮成多個63MB的檔案(筆者的USB為64MB),使用下面指令:

$tar czvf - dir | split -d -b 63m

然後合并指令:

$cat x* > dir.tgz

以上例子實際是由三個指令組合完成的,即用tar打包,用split分割,用cat合并。“tar czvf - dir”的意思是把dir目錄打包,并輸出到标準輸出(argv),這樣就可以直接用管道輸出給split。

3.連續執行一個指令

使用watch指令,可以反複執行指令。如果和ls配合,可以達到觀察某檔案大小變化的效果。

$watch ls -l file.name

4.用tar指令導出一個檔案

有一個tar格式的DVD檔案GLvPro6.4_linux.tar,因為該檔案非常大(4.7GB),如果全部解壓比較麻煩,可以用下面指令先導出readme.txt看看。

tar xvf GLvPro6.4_linux.tar readme.txt

這樣readme.txt就單獨被導出了。

5.用tar打包一個目錄時隻備份其中的幾個子目錄

tar cf --exclude home/cjh home/cao

這樣home目錄下隻有cjh和cao兩個子目錄備份。

到此為止,Linux必學的60個指令已經全部介紹完了。Linux的指令行方式功能強大,如果熟練掌握了Linux的常用指令,往往隻需要通過各 種技巧就可以組合構成一條複雜的指令,進而完成使用者任務。Linux系統中的指令實在是太多了,不可能像在MS DOS中把所有的指令及參數都記住。Linux系統提供了一些方法,比如可以通過“help”和“man”來查詢名令。

繼續閱讀