資訊處理 - 認識自己、了解別人

ar

【功能】

建立新的文件檔或是對其內容進行取出、新增或刪除部分資料等處理。

【語法】

ar [-V] -key [arg][posname] afile [name...]

【說明】

文件檔案是由多個檔案所合併而成的,它的內容可由使用者來進行變動。其內容通
常是包含多個目的檔而組成的程式庫,或者只有文字檔案。ar指令並不是用來壓縮檔案的內容或重新編碼,它的功能僅是將多個檔案合併成為一個。常用來產生程式庫之後,供 ld 指令來使用。或是運用在必須節省 i-node數目的時機。

【選項】

選 項

說 明

-d 從文件檔案中刪除指定的檔案。
-r 將指定的新檔案取代或加到文件檔案中。在新增時,新檔案會加在文件檔案的尾端。

若 -u 和 -r 選項同時使用時,則表示只把新的檔案加入文件檔案內。若在引數中有指定位置,則 a 代表新檔案是加在 posname 之後, b 及 i 是代表新檔案是加在 posname 之前。否則一般的情形下,新增檔案是置於文件檔的尾端。

-q 快速的將新檔案直接加入文件檔的尾端,而不檢查新增的檔案是否已存在文件檔內。
-t 印出在文件檔案內有那些檔案名稱。若無指定檔案名稱,則自動會印出文件檔內所包含的每一個檔名。
在有指定檔案名稱時,則只會印出文件檔內所包含的檔名。
-p 顯示文件檔已包含的檔案名稱。
-m 將指定的檔案移入文件檔的尾端。
-x 從文件檔中取出指定的檔案到目前的工作目錄。若無指定檔案則會自動取出文件檔內
所有的檔案。
該選項在取出檔案時不會變更文件檔的內容,而只是以複製的方式將資料
取出。若要刪除文件檔內的部份檔案,應使用 -d 選項。
以下是選項之後的控制字元:
v 要求在進行處理時顯示較詳細的資訊若與 -t 選項同時使用,則為顯示檔案的詳細資訊。
若與 -x 選項同時使用,則在取出指定的檔案時會印出那一個檔案正在進行中。
c 要求在建立文件檔案時不產生任何訊息。
l 該選項是過時的選項,已無任何的功能,在下一個新版本中將會被刪除。
s 要求重新產生一份文件檔案的符號表。例如在 strip 指令修改過文件檔
後,可恢復文件檔的符號表。

【範例】1.將指定的檔案合併為一個

ar -q libgks.a gdp.o pick.o text.o

2.要求顯示指定文件檔案內的內容

ar -tv libgks.a

3.刪除文件檔案內的指定檔案

ar -d libgks.a text.o

4.將文件檔案內的指定檔案取出,放到現
在的工作目錄下

ar -x libgks.a gdp.o

calcalendar

【功能】

印出指定年份或月份的月曆

【語法】

cal [[month] year]

【說明】

cal 指令可將指定年份中的 12 個月的月曆印出。若使用者在年份前有指定月份,則僅印出該月份的月曆,在年份亦無指定的情形下(即無任何引數時),將會印出現在這個月的月曆。

year(年份)的有效範圍是 1 到 9999 的數字,month(月份)則是 1 到 12 的數字。在指定某一年份時要給予全部的數字名稱,不可簡寫,例如西元年數在 cal 99 指令中的有效值是指西元 99 年而非西元 1999 年。

【範例】

1. 顯示西元 1999 年全年的月曆:

$ cal 1999

1999

Jan Feb
S M Tu W Th F S S M Tu W Th F S
1 2 1 2 3 4 5 6
3 4 5 6 7 8 9 7 8 9 10 11 12 13
10 11 12 13 14 15 16 14 15 16 17 18 19 20
17 18 19 20 21 22 23 21 22 23 24 25 26 27
24 25 26 27 28 29 30 28
31
Mar Apr
S M Tu W Th F S S M Tu W Th F S
1 2 3 4 5 6 1 2 3
7 8 9 10 11 12 13 4 5 6 7 8 9 10
14 15 16 17 18 19 20 11 12 13 14 15 16 17
21 22 23 24 25 26 27 18 19 20 21 22 23 24
28 29 30 31 25 26 27 28 29 30
May Jun
S M Tu W Th F S S M Tu W Th F S
1 1 2 3 4 5
2 3 4 5 6 7 8 6 7 8 9 10 11 12
9 10 11 12 13 14 15 13 14 15 16 17 18 19
16 17 18 19 20 21 22 20 21 22 23 24 25 26
23 24 25 26 27 28 29 27 28 29 30
30 31
Jul Aug
S M Tu W Th F S S M Tu W Th F S
1 2 3 1 2 3 4 5 6 7
4 5 6 7 8 9 10 8 9 10 11 12 13 14
11 12 13 14 15 16 17 15 16 17 18 19 20 21
18 19 20 21 22 23 24 22 23 24 25 26 27 28
25 26 27 28 29 30 31 29 30 31
Sep Oct
S M Tu W Th F S S M Tu W Th F S
1 2 3 4 1 2
5 6 7 8 9 10 11 3 4 5 6 7 8 9
12 13 14 15 16 17 18 10 11 12 13 14 15 16
19 20 21 22 23 24 25 17 18 19 20 21 22 23
26 27 28 29 30 24 25 26 27 28 29 30
31
Nov Dec
S M Tu W Th F S S M Tu W Th F S
1 2 3 4 5 6 1 2 3 4
7 8 9 10 11 12 13 5 6 7 8 9 10 11
14 15 16 17 18 19 20 12 13 14 15 16 17 18
21 22 23 24 25 26 27 19 20 21 22 23 24 25
28 29 30 26 27 28 29 30 31

2. 顯示西元 1999 年1月份的月曆:

$ cal 1 1999

結果顯示如下:

January

1999

S M Tu W Th F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31

crypt

【功能】

對資料進行加密及解密的處理。

【語法】

crypt [passwd]
crypt [-k]

【說明】

crypt 會將原來的資料經過編碼,而成為完全不同的形式儲存。因此,經過加密後的資料對於不知道密碼的人而言是沒有任何意義的。在要求 crypt 指令進行加密時必須給予passwd(密碼)才能進行。而解密時也必須給予原先設定相同的密碼,否則處理後的結果也將是無意義的亂碼,而不是原來的內容。使用者在加密時必須牢記密碼,否則資料的內容可能將永遠也無法恢復,即使是超級使用者也無法幫上忙。

另外,讀者在使用 crypt 指令來進行加密、解密時,筆者建議不要將密碼放在同一個命令列,因為他人可使用 "ps -a"這個指令來查出目前系統上每個使用者所下的命令,如此一來,密碼就不是密碼了,所以在下這指令時,可先不給予密碼,而留在 crypt 指令顯示 "Enter Key:" 要求輸入時才來設定,這時打入的密碼就不會被別人獲知。

crypt 指令會從標準輸入讀取資料,並將處理後的結果送到輸準輸出,使用者可加以重新導向指定讀取及輸出的檔案名稱。
加密與解密的方式是相同的。

【選項】

選 項

說 明

-k

要求使用環境變數 CRYPTKEY 的內容做為 passwd 。

注意:使用這選項時,要注意安全性,因為對於每一個檔案最好採用不同的 passwd,否則 passwd一旦被人所獲悉,則你所建立的每個加密檔的原始內容對別人而言將會成為公開的祕密。

【範例】

1.將檔案的內容做保密的處理

crypt <important >forme

2.將檔案的內容做解密的處理

crypt <forme >important

cu

【功能】

連接別的 UNIX 系統

【語法】

cu [options] [destination]

【說明】

cu指令在連接別的 UNIX 系統時可分為二階段。首先是與指定的系統建立連接,接著是進行資料的處理或是交換。在建立連接後必須重覆對方系統的簽入程序,也就是必須擁有對方系統的帳號及密碼,否則無法繼續使用。

實質上,建立連接可以經由多種的傳輸媒體,如電話線、直接連接或經由區域網路(LAN)。 在使用者的系統中有二個相關的檔案 /etc/uucp/Device 和 /etc/uucp/System,分別記錄著目前有那些傳輸媒體可供使用以及建立連接的相關資訊。

引數中的 destination 是用來指定連著接的系統,空白、電話號碼或系統名稱、區域網路上的特定位址皆可用來指定要與那個系統相連。在電話號碼前可使用外線連接的選擇鍵 0 到 9 或是 *、# ,加上 = 代表等待撥號音或是-代表等待 4 秒後才開始送出電話號碼,例如 0 = 3111531即表示先產生 0 的碼,等到接上外線後再繼續撥出 3111531 的號碼。系統名稱則是 uucp 可辨識的名稱。 cu 指令會自動依使用者所指定的系統而設定適合的傳送速率。連接建立完成後會要求使用者輸入在該系統上的使用者識別碼及密識,例如:

$ cu sea
Connected
login:

在完成簽入步驟後,使用者可在遠端系統上執行指令,就如同在該系統下做處理。建立連接後會有二個處理程序 -transmit 及 receive 在系統上執行,功能分別如下: transmit 處理程序會從標準輸入(通常指鍵盤)讀取資料,並送往遠端系統,除了以∼符號起始的命令列, receive 處理程序則會從遠端系統讀取資料,然後送到使用者的標準輸出。而在遠端系統所執行的命令中,若是以∼符號起始,則代表有特殊的意義。

命令

說 明

∼.

停止連接。

∼! 暫時回到本地系統的 shell 程式。
∼!cmd 要求本地系統執行 cmd 命令(通過sh -c 的模式)。
∼$cmd 要求本地系統執行 cmd 命令,並將結果送到指定的遠端系統。
∼%cd 變換本地系統上的目錄名稱。
∼%take from [to] 從遠方系統上的檔案 from 複製到自己系統上(檔名為 to ,若省略則以相同檔名處理)該命令會在遠方系統上使用 echo 及 cat 指令。因此,必須使用 stty 指令來將遠方系統設定成 tabs 模式,以免 tabs 字元被擴展成空白字元。
∼%put from [to] 將自己系統上的檔案 from 複製到遠方系統上(檔名為 to ,若省略則以相同檔名處理)該命令會在遠方系統上使用 stty 及 cat 指令。因此,必須在二邊系統都須將 erase 字元以及 kill 字元設定成相同的。
∼∼line 傳送∼line到遠方系統。可使∼line在遠方系統上執行。
∼%break 傳送 BREAK 訊號到遠方系統。(可簡寫為∼%b )
∼%debug 切換除錯選項 -d 的控制為 on 或是 off。(可簡寫為∼%d )
∼t 列出目前使用者終端機的相關資料(termio structure) 。
∼l 列出遠端系統上終端機的相關資料(termio structure)。
∼%ifc 切換輸入控制的模式為 DC3/DC1 或是取消。適用於當遠端系統無法接受流量控制字元時。(亦可寫成∼%nostop)
∼%divert 切換是否接受轉換。
∼%old 切換成接受 cu 舊語法( release 4 之前)的轉換。適用於從較早版本的系統上接收檔案。

【選項】

選 項

說 明

-d

產生處理的過程做為除錯。

以下的選項是供建立連接時的設定:

設 定

說 明

-sspeed

設定傳送的速率,如 300 、 1200、2400、4800、9600等。預設值由系統中 /etc/uucp/Device 檔案所設定。

-ctype type是區域網路的名稱,必須是系統中 /etc/uucp/Device 檔案中第一欄其中之一。
-lline 指定某一設備名稱做為通訊的設備。若只有使用 -l 選項而無配合 -s 選項,則會從 /etc/uucp/Device 檔案中的第二欄取出line所指定的設備。
若同時使用 -l 與 -s 選項,則會去找出同時符合的設備及速度,否則會產生錯誤的訊息。
-bn n 可為 7 或是 8 ,用來指定位元數,使二個不同字元大小的系統可互相連接。
-e 設定在傳送時的檢查碼為偶同位(EVEN parity)的形式。
-h 設定通訊模式為半雙工(half-duplex)。
-n 要求電話號碼的設定是由提示符號後所輸入,而不是在 destination 處給予。以這種方式的設定可提高系統的安全性。
-o 設定在傳送時的檢查碼為奇同位(ODD parity)的形式。
-t 使用數據機做為與終端機的連接。

【傳回值】

0 - 正常的結束
1 - 不正常的結束

【範例】

1.叫用指定的遠方系統。

$ cu chicago
$ cu 0=3111531
$ cu -s1200 3111533

2.透過名稱為 modem1 的設備來連接上遠方系統。

$ cu -l modem1 7710244

date

【功能】

印出或設定現在的時間、日期

【語法】

date [-u] [+format ]
date [-a [-] sss.fff ] [-u] [[mmdd ] HHMM | mmddHHMM [cc] yy ]

【說明】

date 指令有兩種格式可供使用,分別為印出及設定的功能。

1.第一種格式是給一般使用者使用:可印出系統的時間或設定印出的格式。

2.第二種格式只能由超級使用者來設定系統時間,在正確的設定後會以預設的格式印出目前的時間。

在無引數或選項是以加號 '+' 開始,表示要求 date指令印出系統的時間。下面的例子是 date 指令預設的印出格式:

Sun Nov 1 18:33:47 EST 199

預設的 format 是 %c,亦即為 %a %b %e %T %Z %Y。 使用者可依自己的喜好加以修改印出的格式,在引數format 中說明新的格式。

format 是以單引號包含的字串(若字串中無空白字元則可省略單引號),其中是以百分號 '%'後接控制字元的方式設定格式(在後面控制字元說明的部份中會有進一步的介紹)。

【控制字元】

第一種格式的 format 控制字元。

控制字元

說 明

a

星期幾的縮寫名稱(Sunday 到 Saturday,分別以 SUN 到 SAT 表示)。

A

星期幾的全部名稱(Sunday 到 Saturday)。

b

月份的縮寫名稱(January 到 December,分別以 Jan 到 Dec 表示)。

B

月份的全部名稱(January 到 December)。

c

預設的日期和時間格式。

d

該月的第幾天(01 到 31)。

D

日期的格式為 %M/%D/%Y。

e

該月的第幾天,若為個位數時則在天數前加上空白(1 到 31)。

h

月份的縮寫(為%b的別名,功能完全相同)。

H

小時(00 到 23)。

I

小時(01 到 12)。

j

年中的天數(001 到 366)。

m

年中的月數(01 到 12)。

M

分鐘(00 到 59)。

n

插入換行(new-line)字元。

p

以 AM 或 PM 字串表示上午或下午。

r

印出的時間格式為 %I:%M:%S %p。

R

印出的時間格式為 %H:%M。

S

秒鐘(00 到 61,允許潤秒)。

t

插入跳格(tab)字元。

T

印出的時間格式為 %H:%M:%S。

U

年中的星期數(星期日為該星期的第一天,00 到 53)。

w

星期中的天數(星期日為 0)。

W

年中的星期數(星期一為該星期的第一天,00 到 53)。

x

預設的日期格式。

X

預設的時間格式。

y

世紀中的年數(00 到 99)。

Y

以 4 位數方式印出年份。

Z

時區名稱。

★註:控制字元 AbBceIpRUWxXYZ 是在 SVR4 版本時才開始提供。

第二種格式的控制字元。

控制字元

說 明

-a [-] sss.fff

微調秒數,可加快或減慢。

sss 是秒,而 fff 是秒的小數。

-u

顯示或設定格林威治時間,而非本地的時間。

mm

月(2 位數,01-12)。

dd

日(2 位數,00-31)。

HH

時(2 位數,00-23)。

MM

分(2 位數,00-59)。

cc

世紀數減 1。

yy

西元年數的最後 2 位數字。

★註:選項 -a、-u 是在 SVR4 版本時才開始提供。

【範例】

1. 印出現在的日期和時間:

$ date
Sun Nov 1 18:33:47 EST 1992

2. 以新的格式印出日期和時間:

$ date '+DATE:%m/%d/%y %t TIME:%H/%M/%S'
DATE:11/01/92 TIME:18/35/49

下完指令後,系統的日期、時間即以使用者所要求的格式印出。

3. 由超級使用者設定系統日期、時間:

date 1410

執行的結果會將時間改變為 14 點 10 分(即下午的 2 點10 分),日期則不變。

date 11200930

表示將系統的日期、時間設為 12 月 20 號早上 9 點 30分(若無給予年份則以預設值設定)。

dfdisk free

【功能】

顯示還可使用的檔案儲存空間及檔案數目

【語法】

df [-F FSType] [-begklntV] [current_options] [-o specific_options][directory | special | resource]

【說明】

df 指令會將所有檔案系統上可使用的空間印出。使用的引數可為:

1. 目錄名稱(directory),則會報告包含該目錄的檔案系統使用情形。
2. 特別的設備名稱(special device)。
3. 資源的名稱(resource)是 RFS/NFS 資源的名稱。
4. 若引數為路徑名稱,則會印出包含該檔案的檔案系統使用情形。

【選項】

選 項

說 明

-F(FSType)

指定 FSType。通常是在該檔案系統沒有mount 時才需使用。

FSType可在 /etc/vfstab 這個檔案中找出可使用的名稱。

-b

只印出以 k(1024 個 bytes)為單位,計算出還可使用的空間。

-e

只印出還可使用的檔案數目。

-g

印出整個 statvfs 的結構。通常是在該檔案系統已 mount 時。 這個選項不可與 current-options 或 -o 選項共同使用,且 -g選項還會取消下列的 -b、-e、-k、-n、-t 等選項。

-k(kilobytes)

印出以 k(kilobytes)為計算空間的單位(此選項的輸出有較多的資料,讓使用者易於了解)。

-l(local)

印出本地所使用的檔案系統名稱。此選項不可與 current-option 或 -o 選項同時使用。

-n(name)

只印出有那些 FSType 的名稱。此選項不可與 current-option 或 -o 選項同時使用。

-t(total)

印出總合的報告,包含原有多少空間以及還可使用的空間大小。這選項會取消 -b、-e 和 -n 選項。

-V

印出可指定的 FSType 的名稱。

-o

指定 FSType-specific。

★註:在 SVR4 之前的版本只有 -t 選項可使用,其餘的選項是在 SVR4 版本時才新加入的。

【範例】

1. 查詢還有多少檔案儲存空間及檔案數目可使用:

$ df
/ (        /dev/root ): 20972 blocks 4625 files
/proc (              /proc ): 0 blocks 189 files
/dev/fd (           /dev/fd ): 0 blocks 0 files
/stand ( /dev/dsk/0s10 ): 8137 blocks 90 files

查詢的結果為在根目錄下(檔案系統名稱為 /dev/root),還可使用 20972 個區塊的檔案儲存空間及 4625 個檔案。其餘還有 /proc、/dev/fd、/dev/dsk/0s10 等檔案系統。

2. 查詢整個系統的資料,如原有空間的大小等:

$ df -t
/ (/dev/root ): 20970 blocks 4624 files
total : 63648 blocks 7952 files
/proc (/proc ): 0 blocks 189 files
total : 0 blocks 202 files
/dev/fd (/dev/fd ): 0 blocks 0 files
total : 0 blocks 26 files
/stand (/dev/dsk/0s10 ): 18137 blocks 90 files
total : 10296 blocks 96 files

結果為在根目錄下的原有空間是 63648 個區塊,最大的檔案存放數為 7952 個檔案。

3. 要求印出以 k 為計算單位的結果:

$ df -k
filesystem kbytes used avail capacity mounted on
/dev/root 31824 21340 10484 67% /
/proc 0 0 0 0% /proc
/dev/fd 0 0 0 0% /dev/fd
/dev/dsk/0s10 5148 1080 4068 21% /stand

輸出時除了是以 k 為計算的單位外,還包含原有的空間、已使用的空間以及剩下可使用的空間大小,另外還有使用的百分比和檔案系統相對應的目錄位置。

4. 印出有那些 FSType 名稱可供使用:

$ df -n
/ : s5
/proc : proc
/dev/fd : fdfs
/stand : bfs

dispadmin

【功能】

管理系統排程程式

【語法】

dispdamin -l

dispadmin -c class -g [-r res]

dispadmin -c class -s file

【說明】我們直接以幾個指令來解釋的用法,首先

#dispadmin -l
CONFIGURED CLASSES
=====================
SYS (System Class)
RT (Real Time)
TS (Time Sharing)

由這個指令的輸出您可以獲知系統有那些層級,如果有人改了層級的名稱您亦能由此知道。試看下例:

#deispadmin -g -c TS
# Time Sharing Dispatcher Configuration
RES=1000
# ts_quantum ts_tqexp ts_slpret ts_maxwait ts_lwait PRIORITY LEVEL
1000 0 10 5 10 # 0
1000 0 11 5 11 # 1
1000 0 12 5 12 # 2
............ ........ ......... .......... ......... ......... .....
............ ........ ......... .......... ......... ......... .....
800 5 20 5 20 # 10
800 5 21 5 21 # 11
800 6 22 5 22 # 12
............ ........ ......... .......... ......... ......... .....
............ ........ ......... .......... ......... ......... .....
400 21 41 5 41 # 31
400 22 42 5 42 # 32
400 32 43 5 43 # 33
............ ........ ......... .......... ......... ......... .....
............ ........ ......... .......... ......... ......... .....
200 30 50 5 50 # 40
200 31 50 5 50 # 41
200 32 51 5 51 # 42
............ ........ ......... .......... ......... ......... .....
............ ........ ......... .......... ......... ......... .....
100 40 55 5 55 # 50
100 41 55 5 55 # 51
............ ........ ......... .......... ......... ......... .....
............ ........ ......... .......... ......... ......... .....
100 49 59 5 59 # 59

由於這個指令的輸出太長,我們僅節錄部份,但從這媗牧怚i看出分時排程的優先等級確實是從 0 至 59 共計 60 個層級(參看欄位六:PRIORITY LEVEL)。
從輸出中讀者可以發現 RES的值為1000,表示系統的時間配額是以 1 秒為單位。

注意:分時排程是以 1秒為時間配額並不代表即時排程也是採用相同的時間配額,在 SVR4 堻o兩者是允許不同的。

上表的輸出十分複雜,最右邊的欄位 PRI-ORITY LEVEL 定義著處理程序的層級高下,59 最高, 1 最低。其餘從左到右的五個欄位依次是:

ts_quantum:
執行時間,這是指一個分時處理程序的時間配額,以這個例子來說, PRIORITY LEVEL 0  的處理程序其時間配額為 1000* 1 等於 1 秒。

ts_tqexp:
終止層(expired level), 這是指一個處理程序如果將時間配額用盡時,所被分派到的優先等級,以一個 PRIORITY LEVEL 為 50 的處理程序做例子,如果它在用完其 CPU 時間配額才釋出 CPU ,則其優先等級將被降至 PRIORITY LEVEL 40。

ts_slpret:
睡眠層(sleep level), 這是指一個處理程序在未用盡其時間配額前就釋出 CPU時,它的下一個 run 所配給之優先等級。這個優先等級必定是大於或等於原先的等級,假使以 PRIORITY LEVEL 0 為例,它若是未用完所配得的時間配額就釋放出 CPU 則其下次執行的優先等級將昇至 PRI-ORITY LEVEL 10 做為報酬

ts_maxwait:
最長等待時間,這是指在該層級的處理程序最多等待時間的極限。如果一個處理程序的等候執行時間超出了此一界限,則它將被自動移至ts_lwait所指名的優先等級。以這份分時系統排程表為例,PRIORITYLEVEL 1-42 每個處理程序在等候 5 後,其優先等級就會上昇一級。

ts_lwait:
等候時間過長的處理程序將被擢昇(pro-mot )到這一欄位所指定的層級,其值一定是高於原有的優先等級。

【選項】

選 項

說 明

-l

列出系統之排程層級。

-g 顯示所指定之層級(以-c選項指定)的排程表(schduling table)。
-r 設定系統時間的解析度(resolution)。
-s 以 file 取代 -c 所指定的層級之排
程表。

dudisk usage

【功能】

計算磁碟機的使用情形

【語法】

du [-sar] [name...]

【說明】

du 指令會印出目前工作目錄下所有的子目錄以及檔案所使用的區塊數。

可使用 name 做為指定被計算的目錄名稱,若無指定則計算目前所在的目錄。

計算時,倘若有檔案在同一個檔案系統中連接一次以上者,仍只計算一次的空間,對於無法開啟的目錄及無法讀取的檔案則不計入。

【選項】

選 項

說 明

-s(summary)

只印出使用空間的總合。若有給予 name 則是印出各個 name 目錄的大小。

-a(all)

印出每個檔案所使用的大小(預設值是只印出每個目錄)。

-r(report)

遇到無法開啟的目錄或無法讀取的檔案時會印出訊息(預設的情形是不會有任何警告訊息)。

【範例】

1. 印出目前目錄及每個子目錄所佔的空間大小:

$ du
6 ./direc1/smart
296 ./direc1/film
316 ./direc1
18 ./direc2
2 ./direc3/d1
2 ./direc3/d2/d1
2 ./direc3/d2/d2
12 ./direc3/d2
16 ./direc3
12 ./account
408 .

執行後可看到現行目錄下的子目錄 direc1/smart 佔 6 個區塊,direc1/film 佔 296 個區塊,最後一行則印出現行目錄下所有的檔案、子目錄所佔的空間總計 408 個區塊。

2. 印出指定目錄下每個檔案的大小:

$ du -a
4 ./text1
4 ./text2
2 ./text3
2 ./smart/file1
2 ./smart/file2
6 ./smart
92 ./film/ar
60 ./film/at
30 ./film/atq
112 ./film/awk
296 ./film
0 ./du.2
314 .

從以上的結果得知所有檔案所佔的區塊,如檔案 text1 佔了 4 個區塊, text2 佔了4 個區塊等。最後一行是表示我們所指定目錄下的檔案總共使用 314 個區塊。

3. 要求對無法開啟的目錄或無法讀取的檔案做一報告:

$ du -r
du: ./listing: Permission denied
18              .

結果可知在目前工作目錄下的 listing 檔案無法讀取。

finger

【功能】

顯示系統上使用者的資料(包含本地及外地)

【語法】

finger [-bfhilmpqsw] username...
finger [-l] username@hostname...(TC/IP)

【說明】

輸出的結果包含使用者名稱(包含簽入名稱及姓名)、終端機名稱、Idle 的時間、簽入的時間及所在的位置。

若在終端機名稱前有 '*' 字元,表示該使用者已設定為禁止傳送訊息的模式。

Idle 是個整數,代表使用者有多久沒下命令,計算的時間是以分鐘為最小的單位。若出現 ':' 字元表示分隔小時及分鐘;若出現 'd' 字元則表示分隔的是天數及小時。不管使用者 username 目前是否正在使用系統,都可在引數中給予本地(local)使用者的名稱,其輸出則只是包含使用者 username 的相關資訊。

finger 指令也可用來查詢遠端(remote)使用者的資料,其格式為 username@hostname('@' 符號可視為 '在那個系統')。若只有給予 @hostname 則會印出外地的 hostname 系統中每個使用者的資料,若有給予 username 時,其輸出資訊包含如下:

1. 使用者的啟用目錄。
2. 簽入時的 shell。
3. 若使用者目前在系統時,會印出已簽入的時間長度,否則印出上次簽入的時間。
4. 使用者所使用的終端機名稱。
5. 上次收到郵件的時間。
6. 上次使用者讀取郵件的時間。
7. 在啟用目錄下 .plan 檔案的內容。
8. 在啟用目錄下 .project 檔案第一行的內容。

【選項】

選 項

說 明

-b

在長格式的輸出時,取消使用者啟用目錄及shell 名稱的印出。

-f

在非長格式的輸出時,取消標題的印出。

-h

在長格式的輸出時,取消 .project 檔案內容的印出。

-i(idle)

只列出簽入名稱、終端機名稱、簽入時間及 Idle 的時間長度。

-l(long)

以長格式輸出,可使用於 TCP/IP。

-m(match)

在引數比對使用者名稱時,只與使用者簽入名稱相比對。

-p(plan)

在長格式的輸出時,取消 .plan 檔案的印出。

-q(quick)

以快速格式的輸出,與短格式類似,只列出簽入名稱、終端機名稱及簽入時間。

-s(short)

以短格式輸出資料。

-w

在短格式的輸出時,使用者名稱是以較短的格式印出。

【範例】

1. 顯示目前系統上所有使用者的資料。

$ finger
Login Name TTY Idle When Where
eric Manager co Mon 09:42
eric Manager p2 Mon 09:47 :0.0

2. 以長格式顯示系統上使用者的資料。

$ finger -l
Login name: eric In real life: Manager
Directory:/manager/eric Shell: /bin/csh
On since Sep 21 09:42:04 on console
No unread mail
Plan:
silicon house planning ...
a good book is a good news
Login name: eric In real life: Manager
Directory: /manager/eric Shell: /bin/csh
On since Sep 21 09:47:01 on ttyp2 from :0.0

在長格式的輸出時,會有使用者簽入名稱、實際名稱、啟用目錄、使用的 shell 名稱、終端機名稱等資料。

id

【功能】

印出使用者名稱、使用者識別碼、群名稱以及群識別碼

【語法】

id [-a]

【說明】

這指令印出的結果是使用者的基本資料,內容只包含使用者的、群的名稱及識別碼。

當真實識別碼(real ID)和有效識別碼(effective ID)不同時,二者都會印出。

【選項】

選 項

說 明

-a

印出使用者的每一個群名稱。

★註:以上選項是在 SVR4 版本時才開始提供。

【範例】

1. 查詢自己的使用者及群的名稱、識別碼:

$ id
uid=100(eric)gid=1(other)

lognamelogin name

【功能】

印出使用者的簽入名稱

【語法】

logname

【說明】

logname 指令可取得使用者的簽入名稱。

【範例】

1. 印出是誰正在使用此系統:

$ logname
eric

印出的結果是使用者 eric 正在使用此系統。

news

【功能】

印出該系統的新消息

【語法】

news [-a] [-n] [-s] [items]

【說明】這個指令是用來印出該系統上的新消息。

在內部的運作中存有一個目錄 /var/news,專門用來放置消息。使用者第一次用這個指令時,會在你的啟用目錄(home directory)下建立一個空檔案 .news_time,用來記錄使用的時間,以後每次使用 news 指令時,即更新此檔案的修改時間,將之重新設定為目前系統的時間。在下一次要求印出系統新的消息時,再把 /var/news 目錄中各個消息檔案的時間和使用者的 .news_time 檔案做一比較,判斷那些檔案是屬於新消息。

在閱讀消息中,若按 <DELETE> 鍵會跳過目前正在查看的消息而直接到下一個消息項目。倘若在 1 秒之內連續按二次 <DELETE> 鍵則會使 news 指令停止執行。

當使用者簽入系統時,可從終端機上看到有那些新消息的項目。

【選項】

選 項

說 明

-a(all)

印出 /var/news 目錄中所有的消息檔,包括名稱、內容。

-n

印出新消息的項目而無內容。

-s

要求 news 指令印出有多少個新消息存在。

★註:這 3 個選項在使用時,將不會改變檔案 .new_time 的修改時間。

【範例】

1. 查詢新的消息:

$ news
child(root)Sun Nov 1 21:48:36 1992
How well-behaved those children are !

在每個消息項目之前會有一行這項消息的基本資料。如消息的名稱、擁有者是誰及產生的日期,接著才是消息的內容。

2. 要求印出有幾項新消息:

$ news -s
2 news items.

表示現在有 2 項新消息。

3. 只列出新消息的項目:

$ news -n
news: child readmenow

新消息的項目名稱為 child 及 readmenow。

4. 指定印出某一項消息:

news readmenow

passwdpassword

【功能】

改變簽入時所使用的密碼或超級使用者管理密碼的特性

【語法】

passwd [name]
passwd [-l | -d] [-f] [-n min] [-x max] [-w warn] name
passwd -s [-a]
passwd -s [name]

【說明】

對於一般使用者而言,passwd 提供的功能僅是改變進入 UNIX系統時的密碼或是印出使用者 name 的密碼特性;而對超級使用者來說,passwd 指令則更具備了管理密碼特性的功能,例如改變使用者name 的密碼或相關的密碼特性-幾天內不可改變、每隔幾天必須改變等。

在一般使用者進行改變密碼時,會先要求使用者輸入正確的舊密碼,之後才要求重複輸入新的密碼二次,以免錯誤的情形發生。在輸入舊的密碼之後,passwd 指令會去檢查該使用者是否在密碼的時間限制內使用,若是不被允許時(如設定每次修改時間的間隔不得少於二天),則會停止執行。

在重複輸入新的密碼時,二次必須是相同,否則會要求使用者重新輸入,若連續三次失敗則停止執行。密碼的組成須符合下面幾點:

1. 密碼至少應有 6 個字元。在 /etc/default/passwd 檔案中有定義 PASSLEN 為 6。
2. 密碼只有前 8 個字元有效,超過的字元則被忽略。
3. 密碼至少應包含有2個英文字母(大小寫皆可,但會被視為不同的字元),及1個數字或特殊符號,以符合保密性。
4. 密碼應與使用者簽入名稱完全不同,且不得使用原有名稱的變化,例如相反順序或只是左右移位(在這裡做比較時,大小寫字母被視為相同的)。
5 舊密碼之間至少應相差3個字元以上(在這裡做比較時, 大小寫字元被視為相同的)。

超級使用者有權去改變任何人的密碼,故 passwd 指令不會對他要求輸入舊密碼。另外也不用遵守其他的法則,如密碼的時間規定、組成的字元,並且在建立新的密碼時可以不輸入任何字元而直接按下 <ENTER>鍵,表示無需輸入密碼即可進入 UNIX 系統。

【選項】

選 項

說 明

提供給一般使用者的選項

-s(show)

可印出關於自己密碼的相關資料,格式如下

name status mm/dd/yy min max warn

若無密碼的時間限制時,則只有 name 和 status 二欄。

name

代表使用者簽入的名稱。

status

狀態欄可能有 3 種名稱。

1. 'PS' 表示有密碼的設定。

2. 'LK' 表示無法進入系統。

3. 'NP' 表示無需密碼即可進入糸統。

mm/dd/yy

使用者上次改變密碼的日期。

min

每次改變密碼最少應間隔的天數

max

每隔幾天應改變密碼。

warn

在密碼到期的幾天前系統會給予警告,要求重設密碼。

min、max、warn 皆可在 /etc/default/passwd 檔案中找到,以了解系統的設定情形,若是 NULL 表示無設定。

提供給超級使用者的選項

-l(lock)

設定使用者 name 禁止進入系統。

-d(delete)

刪除使用者 name 的密碼。

-n(min)

對使用者 name 設定 min 欄位。這個欄位是要求使用者在改變密碼後的幾天內不得再重新設定。若 min 大於 max 則表示該使用者不可變換密碼。此選項應與 -x 選項共同使用,除非 max 是設為 -1 時(表示沒有密碼的時間限制),則 min 欄位無需設定。

-x(max)

對使用者 name 設定 max 欄位。這個欄位是要求使用者在改變密碼後的幾天內必須重新設定。

若 max 的值是 -1,表示無密碼的時間限制

若 max 的值是 0,表示使用者在下次簽入時,系統會強迫其改變密碼,以後則無密碼的時間限制。

-w(warn)

對使用者 name 設定 warn 欄位。這個欄位若是設定密碼到期日的前幾天時,系統將會給予警告,要求使用者改變密碼。

-a(all)

顯示所有使用者密碼的時間限制。使用時須與 -s 選項配合使用,而不需給予name 引數。

-f(force)

當下次使用者 name 進入系統時,要求name 改變密碼。

★註:所有的選項是在 SVR4 版本時才開始提供。

【傳回值】

0 - 成功的執行結束。
1 - 不允許使用。
2 - 選項使用錯誤。
3 - 系統錯誤(無法改變密碼檔)。
4 - 系統錯誤(密碼檔不存在)。
5 - 密碼檔正被他人使用,請再試一次。
6 - 不正確的使用選項及引數。

【範例】

1. 改變使用者的密碼:

$ passwd
passwd: Changing password for joe
Old password:
New password:
Re-enter new password:

系統會先要求使用者輸入舊的密碼,然後再輸入二次新的密碼。

由於輸入時,使用者所鍵入的字元會被隱藏不出現,故須輸入二次新的密碼檢查是否一致,以避免錯誤的情形發生。新密碼第二次輸入後若無訊息產生,則表示已經成功的改變密碼。

2. 顯示密碼的時間限制:

$ passwd -s
joe PS 11/02/92 0 168 7

印出的結果分別是使用者的名稱為 joe,密碼的狀態為PS,上次改變密碼的日期為 92 年 11 月 2 日,每次改變密碼最少應間隔的天數為 0(即表示無限制),每隔 168天應改變密碼,另外在到期日的前 7 天開始,系統會給予警告要求改變密碼。

3. 強迫使用者在下次簽入時改變密碼(只能由超級使用者來使用):

passwd -f fish

使用者 fish 下次簽入時,系統會要求重新設定新的密碼。

tty

【功能】

取得終端機的名稱

【語法】

tty [-l] [-s]

【說明】

在 UNIX 系統中,每個設備(包含終端機)都是以檔案的方式處理,這些設備都可在 /dev 這個目錄下找到相對應的檔案。tty 指令即是要求系統印出使用者現在所使用終端機的路徑名稱另一個使用的情形為判斷目前的標準輸入是否為一終端機。

【選項】

選 項

說 明

-l(line)

列出所有在同一個線上的終端機號碼。

-s(silent)

執行後將不會有結果印出,經常用在只要取得傳回值時。

★ 註:: 選項 -l 是在 SVR3 版本時才開始提供。

【傳回值】

0 - 標準輸入為終端機。
1 - 標準輸入不是終端機。
2 - 選項使用錯誤。

【範例】

1. 要求印出現在所使用終端機對應的路徑名稱:

$ tty
/dev/console

結果顯示現在的終端機所對應的設備名稱是/dev/console。

unameunix name

【功能】

印出使用中 UNIX 系統的相關資訊

【語法】

uname [-amnprsv]
uname [-S system_name]

【說明】

使用 uname 指令可印出使用中的 UNIX 系統之相關資訊。在配合各個選項的使用下,可得到所需的資料。

【選項】

選 項

說 明

-a(all)

印出所有的資料。

-m(machine)

只印出機器硬體的名稱。

-n(node name)

只印出節點名稱(使用網路連線時)。

-p(processor)

只印出主機的處理機型式。

-r(release)

只印出作業系統的 release 編號。

-s(system)

只印出系統的名稱。

-v(version)

只印出作業系統的 version 編號。

-S system-name

由超級使用者來改變系統的節點名稱為 system-name。

★註:: 選項 -p 是在 SVR4 版本時才開始提供。

【範例】

1. 印出節點名稱:

$ uname
Silicon

使用中的節點名稱是 Silicon。

2. 印出所有的資訊。

$ uname -a
Silicon Silicon 4.0 3.0 i386 386/AT

印出的 6 項資訊分別是系統的名稱、網路的節點名稱、release 編號、version 編號、機器硬體的名稱及主機的處理機型式。

who

【功能】

印出有那些使用者簽入系統

【語法】

who [-uTlHqpdbrtas] [file]
who -qn x [file]
who am i
who am I

【說明】

who 這個指令可幫助我們了解,有那些使用者正在使用 UNIX 系統,並會列出每個使用者的使用者名稱、終端機名稱、多久沒下命令以及所使用 shell 的處理程序識別碼(PID)。

who 指令主要是從 /var/adm/utmp檔案讀取相關的資料後印出。使用者可指定 file 檔案代替,另外 /var/adm/wtmp 檔案是用來記錄所有使用者簽入的動作。

若使用的指令是 who am i 或是 who am I ,則只會印出自己的相關資料。印出的格式如下:

name [state] line time [idle] [pid] [comment] [exit]

name 使用者簽入時的名稱。

state 指別人可否寫入資料到此終端機。

'+' 符號表示可寫,亦即可用 write 指令與之交談

'-' 符號表示不可寫。

'?' 符號表示終端機有錯誤的情形產生。

line 終端機的名稱,可在 /dev 目錄下找到相對應的檔案。

time 使用者簽入的時間。

idle 使用者有多久沒下命令的時間,以分為最小單位。

若在此欄出現的是 '.' 符號,則表示使用中。

若在此欄出現的是 'old' 字串,則表示超過 24 小時以上未使用過,或是從上次重新啟動系統後還未使用。這一欄常用來了解使用者的使用情形。

pid 是每個使用者的 shell 處理程序識別碼。

comment 註解欄位,用來說明終端機的位置、電話號碼、終端機型態等資訊(相關的資料是放置於 /sbin/inittab 檔案內)。

exit 已結束的處理程序傳回值,可用來檢查處理程序結束的原因。

【選項】

選 項

說 明

-u(user)

列出那些使用者還在系統中。

-T

只列出 name、state、line 及 time 等 4 欄。

-l(line)

列出那些終端機還可讓使用者簽入。在 name 這一欄會有 'LOGIN',且 state 欄不會顯示。

-H(heading)

在輸出資料前加印表頭,使資料容易閱讀。

-q(quick)

只列出還在系統中的使用者名稱和數目。這個選項會取消其它選項的使用。

-p(process)

列出那些還存在系統中的處理程序是由系統程式 init 所啟動。

-d(display)

只列出已經結束但還未被 init 程式重新產生的處理程序。在 exit 欄位中會顯示傳回值,以說明結束的原因。

-b(boot)

印出上次系統重新啟動的時間、日期。

-r

印出 init 處理程序的 run-level。

-t

印出上次超級使用者 root 設定系統時鐘的時間。

-a(all)

使用所有的選項。

-s

只列出 name、line 及 time 欄位(預設的欄位)。

-n x

x 是數字,代表每行中印出使用者的數目( x 至少為 1)。此選項須與 -q 選項共同使用。

★註:選項 -H、-q 是在 SVR2 版本時才開始提供。選項 -n 是在 SVR4 版本時才開始提供。

【範例】

1. 查詢有那些使用者在系統中:

$ who
joe   console Nov 1 22:29

2. 查詢較詳細的資料:

$ who -Ha
NAME LINE TIME IDLE PID COMMENTS
. system boot Nov 1 18:57
. run-level 2 Nov 1 18:57 2 0

S

rc2 . Nov 1 18:57 4:57 23 id= r2 term=0 exit=0
ln . Nov 1 18:57 4:57 177 id= li term=0 exit=2
sac . Nov 1 18:57 4:57 178 id= sc
joe console Nov 1 22:29 . 1245