Thread Scheduling
In Java technology,threads are usually preemptive,but not necessarily Time-sliced(the process of giving each thread an equal amount of CPU time).It is common mistake to believe that "preemptive" is a fancy word for "does time-slicing".
For the runtime on a Solaris Operating Environment platform,Java technology does not preempt threads of the same priority.However,the runtime on Microsoft Windows platforms uses time-slicing,so it preempts threads of the same priority and even threads of higher priority.Preemption is not guaranteed;however,most JVM implementations result in behavior that appears to be strictly preemptive.Across JVM implementations,there is no absolute guarantee of preemption or time-slicing.The only guarantees lie in the coder’s use of wait and sleep.
The model of a preemptive scheduler is that many threads might be runnable,but only one thread is actually running.This thread continues to run until it ceases to be runnable or another thread of higher priority becomes runnable.In the latter case,the lower priority thread is preempted by the thread of higher priority,which gets a chance to run instead.
A thread might cease to runnable (that is,because blocked) for a variety of reasons.The thread’s code can execute a Thread.sleep() call,deliberately asking the thread to pause for a fixed period of time.The thread might have to wait to access a resource and cannot continue until that resource become available.
All thread that are runnable are kept in pools according to priority.When a blocked thread becomes runnable,it is placed back into the appropriate runnable pool.Threads from the highest priority nonempty pool are given CPU time.
The last sentence is worded loosed because:
(1) In most JVM implementations,priorities seem to work in a preemptive manner,although there is no guarantee that priorities have any meaning at all;
(2) Microsoft Window’s values affect thread behavior so that it is possible that a Java Priority 4 thread might be running,in spite of the fact that a runnable Java Priority 5 thread is waiting for the CPU.
In reality,many JVMs implement pool as queues,but this is not guaranteed hehavior.
一般我們在java中運行其它類中的方法時,無論是靜態調用,還是動態調用,都是在當前的進程中執行的,也就是說,只有一個java虛擬機實例在運行。而有的時候,我們需要通過java代碼啟動多個java子進程。這樣做雖然占用了一些系統資源,但會使程序更加穩定,因為新啟動的程序是在不同的虛擬機進程中運行的,如果有一個進程發生異常,并不影響其它的子進程。
在Java中我們可以使用兩種方法來實現這種要求。最簡單的方法就是通過Runtime中的exec方法執行java classname。如果執行成功,這個方法返回一個Process對象,如果執行失敗,將拋出一個IOException錯誤。下面讓我們來看一個簡單的例子。
|
通過java Test_Exec運行程序后,發現在C盤多了個Test1.txt文件,但在控制臺中并未出現“被調用成功!”的輸出信息。因此可以斷定,Test已經被執行成功,但因為某種原因,Test的輸出信息未在Test_Exec的控制臺中輸出。這個原因也很簡單,因為使用exec建立的是Test_Exec的子進程,這個子進程并沒有自己的控制臺,因此,它并不會輸出任何信息。
如果要輸出子進程的輸出信息,可以通過Process中的getInputStream得到子進程的輸出流(在子進程中輸出,在父進程中就是輸入),然后將子進程中的輸出流從父進程的控制臺輸出。具體的實現代碼如下如示:
|
從上面的代碼可以看出,在Test_Exec_Out.java中通過按行讀取子進程的輸出信息,然后在Test_Exec_Out中按每行進行輸出。上面討論的是如何得到子進程的輸出信息。那么,除了輸出信息,還有輸入信息。既然子進程沒有自己的控制臺,那么輸入信息也得由父進程提供。我們可以通過Process的getOutputStream方法來為子進程提供輸入信息(即由父進程向子進程輸入信息,而不是由控制臺輸入信息)。我們可以看看如下的代碼:
|
從以上代碼可以看出,Test1得到由Test_Exec_In發過來的信息,并將其輸出。當你不加bw.flash()和bw.close()時,信息將無法到達子進程,也就是說子進程進入阻塞狀態,但由于父進程已經退出了,因此,子進程也跟著退出了。如果要證明這一點,可以在最后加上System.in.read(),然后通過任務管理器(在windows下)查看java進程,你會發現如果加上bw.flush()和bw.close(),只有一個java進程存在,如果去掉它們,就有兩個java進程存在。這是因為,如果將信息傳給Test2,在得到信息后,Test2就退出了。
在這里有一點需要說明一下,exec的執行是異步的,并不會因為執行的某個程序阻塞而停止執行下面的代碼。因此,可以在運行test2后,仍可以執行下面的代碼。
exec方法經過了多次的重載。上面使用的只是它的一種重載。它還可以將命令和參數分開,如exec(“java.test2”)可以寫成exec(“java”, “test2”)。exec還可以通過指定的環境變量運行不同配置的java虛擬機。
除了使用Runtime的exec方法建立子進程外,還可以通過ProcessBuilder建立子進程。ProcessBuilder的使用方法如下:
|
在建立子進程上,ProcessBuilder和Runtime類似,不同的ProcessBuilder使用start()方法啟動子進程,而Runtime使用exec方法啟動子進程。得到Process后,它們的操作就完全一樣的。
ProcessBuilder和Runtime一樣,也可設置可執行文件的環境信息、工作目錄等。下面的例子描述了如何使用ProcessBuilder設置這些信息。
|
最近不少Web技術圈內的朋友在討論協議方面的事情,有的說web開發者應該熟悉web相關的協議,有的則說不用很了解。個人認為這要分層次來看待這個問題,對于一個新手或者剛入門的web開發人員而言,研究協議方面的東西可能會使得web開發失去趣味性、抹煞學習積極性,這類人應該更多的了解基本的Web技術使用。而對于在該行業工作多年的老鳥來說,協議相關的內容、標準相關內容應該盡量多些的了解,因為只有這樣才能使得經手的web系統更加優秀(安全、漂亮、快速、兼容性好、體驗好……)。本文我們來說一下MIME 協議的一個擴展Content-disposition。
我們在開發web系統時有時會有以下需求:
要解決上述需求就可以使用Content-disposition來解決。第一個需求的解決辦法是
Response.AddHeader "content-disposition","attachment; filename=fname.ext"
public static void ToDownload(string serverfilpath,string filename)
{
FileStream fileStream = new FileStream(serverfilpath, FileMode.Open);
long fileSize = fileStream.Length;
HttpContext.Current.Response.ContentType = "application/octet-stream";
HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=\"" + UTF_FileName(filename) + "\";");
////attachment --- 作為附件下載
////inline --- 在線打開
HttpContext.Current.Response.AddHeader("Content-Length", fileSize.ToString());
byte[] fileBuffer = new byte[fileSize];
fileStream.Read(fileBuffer, 0, (int)fileSize);
HttpContext.Current.Response.BinaryWrite(fileBuffer);
fileStream.Close();
HttpContext.Current.Response.End();
}
public static void ToOpen(string serverfilpath, string filename)
{
FileStream fileStream = new FileStream(serverfilpath, FileMode.Open);
long fileSize = fileStream.Length;
HttpContext.Current.Response.ContentType = "application/octet-stream";
HttpContext.Current.Response.AddHeader("Content-Disposition", "inline; filename=\"" + UTF_FileName(filename) + "\";");
HttpContext.Current.Response.AddHeader("Content-Length", fileSize.ToString());
byte[] fileBuffer = new byte[fileSize];
fileStream.Read(fileBuffer, 0, (int)fileSize);
HttpContext.Current.Response.BinaryWrite(fileBuffer);
fileStream.Close();
HttpContext.Current.Response.End();
}
private static string UTF_FileName(string filename)
{
return HttpUtility.UrlEncode(filename, System.Text.Encoding.UTF8);
}
簡單的對上述代碼做一下解析,ToDownload方法為將一個服務器上的文件(serverfilpath為服務器上的物理地址),以某文件名(filename)在瀏覽器上彈出“文件下載”對話框,而ToOpen是將服務器上的某文件以某文件名在瀏覽器中顯示/打開的。注意其中我使用了UTF_FileName方法,該方法很簡單,主要為了解決包含非英文/數字名稱的問題,比如說文件名為“衣明志.doc”,使用該方法客戶端就不會出現亂碼了。
需要注意以下幾個問題:
可參看以下幾篇文檔:
第一章 目錄及文件操作命令
1.1 ls
[語法]: ls [-RadCxmlnogrtucpFbqisf1] [目錄或文件......]
[說明]: ls 命令列出指定目錄下的文件,缺省目錄為當前目錄 ./,缺省輸出順序為縱向按字符順序排列。
-R 遞歸地列出每個子目錄的內容
-a 列出所有文件,包括第一個字符為“.”的隱藏文件
-d 若后面參數是目錄,則只列出目錄名而不列出目錄內容,常與-l選項連
用以顯示目錄狀態。
-C 輸出時多列顯示
-x 橫向按字符順序排列
-m 輸出按流式格式橫向排列,文件名之間用逗號(,)分隔
-l 長列表輸出,顯示文件詳細信息,每行一個文件,從左至右依次是:
文件存取模式 鏈接數 文件主 文件組 文件字節數 上次修改時間
其中文件存取模式用10個字母表示,從左至右的意義如下:
第一個字母表示文件種類,可以是以下幾種情況:
d 為目錄文件
l 為鏈接
b 為塊文件
c 為字符型文件
p 為命名管道(FIFO)
- 為普通文件
后面9個字母分別表示文件主、同組用戶、其他用戶對文件的權力,用r表示可讀,w 表示可寫,x 表示可執行。如果是設備文件,則在文件字節數處顯示:主設備 從設備。
-n 與-l選項相同,只是文件主用數字(即UID)顯示,文件組用數字
(即GID)表示
-o 與-l選項相同,只是不顯示文件組
-g 與-l選項相同,只是不顯示文件主
-r 逆序排列
-t 按時間順序排列而非按名字
-u 顯示時間時使用上次訪問時間而非上次修改時間
-c 顯示時間時使用上次修改i節點時間而非上次修改時間
-p 若所列文件是目錄文件,則在其后顯示斜杠(/)
-F 在目錄文件后加’/’,在可執行文件后加’*’
-b 文件名中若有非打印字符,則用八進制顯示該字符
-q 文件名中的打印字符用’?’表示
-i 顯示節點號
-s 顯示文件長度時使用塊長度而非字節長度
-f 將后面的參數解釋為目錄并列出其中的每一項
-1 每行僅列一項
[例子]:
ls 列出當前目錄下的文件
ls -al /bin 以長列表的形式列出目錄 /bin 下的所有文件,包括隱藏文件
1.2 pwd
[語法]: pwd
[說明]: 本命令用于顯示當前的工作目錄
[例子]:
pwd 顯示出當前的工作目錄
1.3 cd
[語法]: cd [目錄]
[說明]:本命令用于改變當前的工作目錄,無參數時使用環境變量$HOME 作為其參數,$HOME 一般為注冊時進入的路徑。
[例子]:
cd 回到注冊進入時的目錄
cd /tmp 進入 /tmp 目錄
cd ../ 進入上級目錄
1.4 mkdir
[語法]: mkdir [-m 模式] [-p] 目錄名
[說明]: 本命令用于建立目錄,目錄的存取模式由掩碼(umask)決定,要求對其父目錄具有寫權限,目錄的UID和GID為實際UID和GID
-m 按指定存取模式建立目錄
-p 建立目錄時建立其所有不存在的父目錄
[例子]:
mkdir tmp 在當前目錄下建立子目錄 tmp
mkdir -m 777 /tmp/abc 用所有用戶可讀可寫可執行的存取模式
建立目錄 /tmp/aaa ,存取模式參看命令 chmod
mkdir -p /tmp/a/b/c 建立目錄 /tmp/a/b/c ,若不存在目錄 /tmp/a
及/tmp/a/b 則建立之
1.5 rmdir
[語法]: rmdir [-p] [-s] 目錄名
[說明]: 本命令用于刪除目錄
-p 刪除所有已經為空的父目錄
-s 當使用-p 選項時,出現錯誤不提示
[例子]:
rmdir /tmp/abc 刪除目錄 /tmp/abc
rmdir -p /tmp/a/b/c 刪除目錄 /tmp/a/b/c ,若目錄 /tmp/a /b
及/tmp/a 空,則刪除
1.6 cat
[語法]: cat [-u] [-s] [-v[-t] [-e]] 文件...
[說明]: 顯示和連接一個或多個文件至標準輸出
-u 無緩沖的輸出(缺省為有緩沖輸出)
-s 對不存在的文件不作提示
-v 顯示出文件中的非打印字符,控制字符顯示成^n ,n為八進制數字,
其他非打印字符顯示成M-x , x 為該字符低7位的8進制數值
-t 在使用-v 選項時,將制表符(tab) 顯示成 ^I,將換頁符
(formfeed)顯示成 ^ L
-e 在使用-v 選項時,在每一行的行尾顯示 $
[例子]:
cat file 顯示文件
cat -s -v -e file1 file2 file3 逐個顯示文件 file1 file2 file3
1.7 head
[語法]: head [-n] [文件 ...]
[說明]: 將文件的頭n 行顯示輸出,缺省值為 10 行,顯示多個文件時,在每個文件的前面加上 ==> 文件名 <==
[例子]:
head -9999 file1 file2 顯示文件 file1 和 file2 的頭 9999 行
1.8 more
[語法]: more [-cdflrsuw] [- 行數] [+ 行數] [+ / 模式 ] [ 文件 ... ]
[說明]: 將文件顯示在終端上,每次一屏,在左下部顯示 --more--,若是從文件讀出而非從管道,則在后面顯示百分比,表示已顯示的部分,按回車鍵則上滾一行,按空格鍵則上滾一屏,未顯示完時可以使用more 命令中的子命令。
-c 顯示文件之前先清屏
-d 當輸錯命令時顯示錯誤信息而不是響鈴(bell)
-f 不折疊顯示長的行
-l 不將分頁控制符(CTRL D)當作頁結束
-r 一般情況下,more 不顯示控制符,本選項使more 顯示控制符,
例如,將 (CTRL C) 顯示成 ^ C
-s 將多個空行轉換成一個空行顯示
-u 禁止產生下劃線序列
-w 一般情況下 more 顯示完后立即推出,本選項在顯示完后作提
示,敲任意鍵后推出
-n 行數 指定每屏顯示的行數
+ 行號 從指定行號開始顯示
+/模式 在文件中搜索指定模式,從模式出現行的上兩行開始顯示 文件未顯示完時,可以使用more 命令中的子命令,命令中除了! 和 / 以外均不回顯,也不用敲回車,當命令破壞 more 提示行時,可用退格鍵恢復提示行。在以下子命令操作中,i 表示數字,缺省值為 1。
i 空格 上滾一屏多 i 行
i 回車 上滾 i 行
i CTRL+D i 缺省時上滾 11 行,否則上滾 i 行
id i 缺省時上滾 11 行,否則上滾 i 行
iz i 缺省時上滾一屏,否則定義每屏為 i 行
is 跳過 i 行后顯示一屏
if 跳過 i 屏后顯示一屏
i CTRL+B 跳回 i 屏后顯示一屏
b 跳回 一屏后顯示一屏
q 或 Q 推出 more
= 顯示當前行號
v 從當前行開始編輯當前文件編輯器由環境變量
$EDITOR定義
h 顯示幫助信息
i / 模式 向前搜索,直至模式的第 i 次出現 , 從該行的上 兩行開始顯示一屏
in 向前搜索,直至上一模式的第 i 次出現 , 從該行 的上兩行開始顯示一屏
單引號 回到上次搜索的出發點,若無搜索則回到開始位置
! 命令 激活一個sh 去執行指定的命令
i : n 跳到后面第 i 個文件,若不存在則跳到最后一個文件
:f 顯示當前文件名和行號
:q 或 :Q 推出 more
. (點) 重復上次命令
[ 例子]:
more -c +50 file 清屏后,從第50行開始顯示文件 file
more -s -w file1 file2 file3 顯示文件 file1 file2 file3
1.9 cp
[語法]: cp [ -p ] [ -r ] 文件 1 [ 文件 2 ...] 目標
[說明]: 將文件1(文件2 ...)拷貝到目標上,目標不能與文件同名, 若目標是文件名,則拷貝的文件只能有一個,若目標是目錄, 則拷貝的文件可以有多個,若目標文件不存在,則建立這個文件,若存在,則覆蓋其以前的內容,若目標是目錄,則將文件拷貝到這個目錄下。
- i 在覆蓋已存在文件時作提示,若回答 y 則覆蓋,其他則中止
- p 不僅拷貝文件內容,還有修改時間,存取模式,存取控制表, 但不拷貝
UID 及 GID
- r 若文件名為目錄,則拷貝目錄下所有文件及子目錄和它們的文件,此時
目標必須為目錄
[例子]:
cp file1 file2 將文件 file1 拷貝到文件 file2
cp file1 file2 /tmp 將文件 file1 和文件 file2 拷貝到目錄 /tmp 下
cp -r /tmp /mytmp 將目錄 /tmp 下所有文件及其子目錄拷貝至目錄/mytmp
1.10 mv
[語法]: mv [-f] [-i] 文件1 [文件2...] 目標
[說明]: 將文件移動至目標,若目標是文件名,則相當于文件改名
- i 在覆蓋已存在文件時作提示,若回答 y 則覆蓋,其他則中止
- f 覆蓋前不作任何提示
[例子]:
mv file1 file2 將文件 file1 改名為 file2
mv file1 file2 /tmp 將文件 file1 和文件 file2 移動到目錄 /tmp 下
1.11 rm
[語法]: rm [-f] [-i] 文件...
或 rm -r [-f] [-i] 目錄名... [文件]
[說明]: 用來刪除文件或目錄
- f 刪除文件時不作提示
- r 遞歸地刪除目錄及其所有子目錄
- i 刪除文件之前先作提示
[例子]:
rm file1 刪除文件 file1
rm -i /tmp/* 刪除目錄 /tmp 下的所有文件
rm -r /mytmp 遞歸地刪除目錄 /mytmp
1.12 chmod
[語法]: chmod [-R] 模式 文件...
或 chmod [ugoa] {+|-|=} [rwxst] 文件...
[說明]: 改變文件的存取模式,存取模式可表示為數字或符號串,例如:
chmod nnnn file , n為0-7的數字,意義如下:
4000 運行時可改變UID
2000 運行時可改變GID
1000 置粘著位
0400 文件主可讀
0200 文件主可寫
0100 文件主可執行
0040 同組用戶可讀
0020 同組用戶可寫
0010 同組用戶可執行
0004 其他用戶可讀
0002 其他用戶可寫
0001 其他用戶可執行
nnnn 就是上列數字相加得到的,例如 chmod 0777 file 是指將文件 file 存取權限置為所有用戶可讀可寫可執行。
-R 遞歸地改變所有子目錄下所有文件的存取模式
u 文件主
g 同組用戶
o 其他用戶
a 所有用戶
+ 增加后列權限
- 取消后列權限
= 置成后列權限
r 可讀
w 可寫
x 可執行
s 運行時可置UID
t 運行時可置GID
[例子]:
chmod 0666 file1 file2 將文件 file1 及 file2 置為所有用戶可讀可寫
chmod u+x file 對文件 file 增加文件主可執行權限
chmod o-rwx 對文件file 取消其他用戶的所有權限
1.13 chown
[語法]: chown [-R] 文件主 文件...
[說明]: 文件的UID表示文件的文件主,文件主可用數字表示, 也可用一個有效的用戶名表示,此命令改變一個文件的UID,僅當此文件的文件主或超級用戶可使用。
-R 遞歸地改變所有子目錄下所有文件的存取模式
[例子]:
chown mary file 將文件 file 的文件主改為 mary
chown 150 file 將文件 file 的UID改為150
1.14 chgrp
[語法]: chgrp [-R] 文件組 文件...
[說明]: 文件的GID表示文件的文件組,文件組可用數字表示, 也可用一個有效的組名表示,此命令改變一個文件的GID,可參看chown。
-R 遞歸地改變所有子目錄下所有文件的存取模式
[例子]:
chgrp group file 將文件 file 的文件組改為 group
1.15 cmp
[語法]: cmp [-l] [-s] 文件1 文件2
[說明]: 比較兩個文件,若文件1 為 - ,則使用標準輸入, 兩個文件相同則無提示,不同則顯示出現第一個不同時的字符數和行號。
-l 顯示每個不同處的字節數(10進制)和不同的字節(8進制)
-s 不作任何提示,只返回碼
[例子]:
cmp file1 file2 比較文件 file1 和 file2
cmp -l file1 file2 比較文件file1 和 file2 的每處不同
1.16 diff
[語法]: diff [-be] 文件1 文件2
[說明]: 本命令比較兩個文本文件,將不同的行列出來
-b 將一串空格或TAB轉換成一個空格或TAB
-e 生成一個編輯角本,作為ex或ed的輸入可將文件1轉換成文件2
[例子]:
diff file1 file2
diff -b file1 file2
diff -e file1 file2 >edscript
1.17 wc
[語法]: wc [-lwc] 文件...
[說明]: 統計文件的行、字、字符數,若無指定文件,則統計標準輸入
-l 只統計行數
-w 只統計字數
-c 只統計字符數
[例子]:
wc -l file1 file2 統計文件file1和file2 的行數
1.18 split
[語法]: split [-n] [ 文件 [名字]]
[說明]: split 將指定大文件分解為若干個小文件,每個文件長度為n行(n 缺省時為1000),第一個小文件名為指定的名字后跟aa,直至zz,名字缺省值為x,若未指定大文件名,則使用標準輸入
[例子]:
split -500 largefile little
將文件largefile 每500行寫入一個文件,第一個文件名為littleaa
1.19 touch
[語法]: touch [-amc] [mmddhhmm[yy]] 文件...
[說明]: 將指定文件的訪問時間和修改時間改變,若指定文件不存在則創建之,若無指定時間,則使用當前時間,返回值是未成功改變時間的文件個數,包括不存在而又未能創建的文件。
-a 只改變訪問時間
-m 只改變修改時間
-c 若文件不存在,不創建它且不作提示
mmddhhmm[yy] 兩位表示 月日時分[年]
[例子]:
touch file
更新文件file的時間
touch 0701000097 HongKong
將文件HongKong的時間改為97年7月1日0時0分
1.20 file
[語法]: file [-f 文件名文件] 文件...
[說明]: file 對指定文件進行測試,盡量猜測出文件類型并顯示出來
-f 文件名文件 文件名文件是一個包含了文件名的文本文件, -f 選項測試
文件名文件中所列出的文件
[例子]:
file * 顯示當前目錄下所有文件的類型
1.21 pack
[語法]: pack 文件...
[說明]: pack 將指定文件轉儲為壓縮格式,文件名后加 .z , 文件存取模式,訪問時間,修改時間等均不變
[例子]:
pack largefile 將largefile 壓縮后轉儲為largefile.z
1.22 pcat 顯示壓縮文件
[語法]: pcat 文件...
[說明]: pcat 顯示輸出壓縮文件
[例子]:
pcat largefile.z 顯示壓縮前的largefile
pcat largefile.z > oldfile 顯示壓縮前的laregfile,并將其重定向到
文件oldfile中
1.23 unpack
[語法]: unpack 文件...
[說明]: 將壓縮后的文件解壓后轉儲為壓縮前的格式
[例子]:
unpack largefile.z 將壓縮文件largefile.z解壓后轉儲為largefile
1.24 find
[語法]: find 路徑名... 表達式
[說明]: find 命令遞歸地遍歷指定路徑下的每個文件和子目錄,看該文件是否能使表達式值為真,以下 n 代表一個十進制整數,+n 代表打印 n , -n 代表小于 n ,下面是合法表達式說明:
-name 模式 文件名與模式匹配則為真,(\ 為轉意符)
-perm [-]八進制數 文件存取模式與八進制數相同則為真若有- 選項,則文件存
取模式含有八進制數規定模式即為真
-size n[c] 文件塊長度為 n 則真(一塊為512字節),若
有c 選項,則文件字節長度為 n 則真
-atime n 若文件的最近訪問時間為 n 天前則為真,
find 命令將改變其訪問的目錄的訪問時間
-mtime n 若文件的最近修改時間為 n 天前則為真
-ctime n 若文件狀態為 n 天前改變則為真
-exec 命令 { }\; 若命令返回值為0則真,{ }內為命令參數,
此命令必須以 \; 為結束
-ok 命令 { }\; 與 exec 相同,只是在命令執行前先提示,若
回答 y 則執行命令
-print 顯示輸出使表達式為真的文件名
-newer 文件 若文件的訪問時間比newer 指定的文件新則真
-depth 先下降到搜索目錄的子目錄,然后才至其自身
-mount 僅查找包含指定目錄的文件系統
-local 文件在當前文件系統時為真
-type c 文件類型為 c 則真,c 取值可為 b(塊文件) c (字符文件)
d(目錄) l (符號鏈接) p (命名管道) f (普通文件)
\( 表達式 \) 表達式為真則真
-links n 文件鏈接數為 n 時為真
-user 用戶 當文件屬于用戶時為真,用戶可用數字表示UID
-nouser 當文件不屬于 /etc/passwd 中的一個用戶時為真
-group 文件組 當文件屬于文件組時為真,文件組可用數字表示GID
-nogroup 當文件不屬于 /etc/group 中的一個組時為真
-fstype 類型 當文件所屬文件系統類型為指定類型時真
-inum n 當文件 i 節點號為 n 時為真
-prune 當目錄名與模式匹配時,不再搜索其子目錄
可以用邏輯操作符將簡單表達式連接成復雜表達式
邏輯操作符有 ! 表示非操作, -o 表示或操作,兩個表達式并列則表示
與操作
[例子]:
find / -name find* -print
從根目錄開始搜索文件名如 find* 的文件并顯示之
find ./ -exec sleep{1}\; -print
每秒顯示一個當前目錄下的文件
find $HOME \(-name a.out -o -name '*.o' \) -atime +7 -exec rm {} \;
從$HOME目錄開始搜索,刪除所有文件名為a.out 或 *.o 且訪問時間在7天前的文件
1.25 grep
[語法]: grep [選項] 模式 [文件...]
[說明]: 在指定的文件中搜索模式,并顯示所有包含模式的行,模式是一個正規表達式,在使用正規表達式時,最好將其引在單引號(') 中,若指定文件為缺省,則使用標準輸入,正規表達式可以是:
. 匹配任意一個字符
* 匹配0個或多個*前的字符
^ 匹配行開頭
$ 匹配行結尾
[] 匹配[ ]中的任意一個字符,[]中可用 - 表示范圍,
例如[a-z]表示字母a 至z 中的任意一個
\ 轉意字符
命令中的選項為:
-b 顯示塊號
-c 僅顯示各指定文件中包含模式的總行數
-i 模式中字母不區分大小寫
-h 不將包含模式的文件名顯示在該行上
-l 僅顯示包含模式的文件名
-n 顯示模式所在行的行號
-s 指定文件若不存在或不可讀,不提示錯誤信息
-v 顯示所有不包含模式的行
[例子]:
grep 'good' * 在所有文件中搜索含有字符串 good 的行
grep '^myline' mytext 在文件mytext中搜索行首出現myline字符串的行
1.26 vi
[語法]:vi [-wn] [-R] 文件...
[說明]: vi 是一個基于行編輯器 ex 上的全屏幕編輯器,可以在vi 中使用 ex,ed的全部命令,vi選項中 -wn 指將編輯窗口大小置為n行,-R 為將編輯的文件置為只讀模式, vi 工作模式分為命令模式和輸入模式,一般情況下在命令模式下,可敲入vi命令,進入輸入模式下時可以編輯要編輯的文本,命令 a A i I o O c C s S R 可進入輸入模式,在輸入模式下按 ESC 鍵可推出輸入模式,回到命令模式,在命令模式中敲入: 命令,則可進入ex方式,在屏幕底部出現提示符 : ,此時可使用任意ex命令,屏幕底行也用來作/ ? ! 命令的提示行,大多數命令可以在其前面加數字,表示命令執行的重復次數,下面簡單介紹一下vi 的命令集,^ 表示(CTRL)鍵
^B 退回前一頁,前面加數字表示重復次數,每次換頁時
保留上一頁的兩行
^D 在命令模式下,表示下滾屏幕的一半,在輸入模式下,表示回退至
左邊的自動縮進處
^E 顯示屏幕底線之下的一行
^F 前進一頁,前面加數字表示重復次數,每次換頁時
保留上一頁的兩行
^G 顯示當前文件名,當前行號和文件總行數,并用百分號當前行在
整個文件中的位置
^H(退格) 在命令模式下,光標左移一格;在輸入模式下,刪去前面的字符
^I(TAB) 在輸入模式下,產生一串空格
^J(LF) 光標下移一行
^L 刷新屏幕,即將屏幕重新顯示
^M(回車) 在命令模式下,光標移動至下行開頭
在輸入模式下,開辟一新行
^N 光標下移一行
^P 光標上移一行
^Q 在輸入模式下,將其后的非打印字符作為正文插入
^R 刷新屏幕
^U 屏幕上滾一半,前面加數字時表示上滾的行數,此數字對
以后的^D ^U 命令有效
^V 在輸入模式下,將其后的非打印字符作為正文插入
^W 在輸入模式下,使光標回退一個字
^Y 顯示屏幕底線之上的一行
^Z 暫停編輯,退回上層Shell
^[(ESC) 退出輸入模式,回到命令模式
! 暫時退出編輯,執行Shell命令
(雙引號) 用于標志有名緩沖區,編號緩沖區1-9用于保存被刪去的正文,字
母名緩沖區a-z供用戶存放自定義的正文
$ 將光標移動到當前行尾,前加數字則表示前移行數,如2$表示移動
到下一行行尾
% 將光標移動到配對的小括號()或大括號{}上去
( 退回句子開頭
) 前移到句子開頭
- 退到上一行第一個非空格字符
. 重復上一次改變緩沖區內容的命令
/ 模式 向前搜索模式,將光標移動到模式出現處,模式是一個正規
表達式,(參看 grep)
: 在屏幕底部提示:,其后可使用ex命令
? 功能同 / ,但方向是向前查找
[[ 光標回退至前一節分界處
\ 轉意符
]] 光標前移至節分界處
^(不是CTRL) 光標移至當前行第一個非空字符上
' 連續兩個''表示將光標移至其移動前的位置,'后跟字母表示光標字
母標記的行首(參看 m 命令)
A 在行尾插入正文,進入輸入模式
B 光標回退一個字
C 替換光標后的內容
D 刪除光標后的內容
E 光標前移到字尾
F 字符 在當前行向左查找指定字符
G 光標移動到其前面數字指定的行,若未指定則移動到最后一行
H 光標移動到屏幕頂行,若前面有數字,則移動到屏幕上該數字
指定的行
I 在行開頭插入正文
J 連接兩行,若前面有數字則連接數字指定的行
L 光標移動到屏幕底行,若前面有數字,則移動到屏幕底線往上數該
數字指定的行
M 光標移動到屏幕中線
N 使用模式查找/或?時,重復找下一個匹配的模式,但方向與上次相
反,其功能同 n ,但方向相反
O 在當前行上開辟一新行
P 將上次被刪除的正文插入光標前面,可在其前面加緩沖區編號,編
號1-9用于保存被刪去的正文,字母名緩沖區a-z供用戶存放自定
義的正文
Q 從vi 推出進入ex命令狀態
R 替換字符串
S 替換整行
T 字符 向左查找字符
U 將當前行恢復至第一次修改前的狀態
W 光標移至下一個字首
X 刪除光標前的字符
Y 將當前行存入無名緩沖區,前面加數字表示存入的行數,也可用有
名緩沖區來保存,以后可用命令p或P將其取出
ZZ 存盤退出vi
a 光標后插入正文
b 光標回退至上一個字首
cw 替換當前字
c) 替換當前句子
dw 刪除一個字
dd 刪除一行
e 光標移到下一個字末
f 字符 在當前行向前查找字符
h 光標左移一格
i 在光標前插入正文
j 光標下移一行
k 光標上移一行
l 光標右移一格
m 字母 用字母標記當前行,以后可用 '字母使光標移動到當前行,
(參看'命令)
n 重復上次 / 或 ? 命令
o 在當前行下開辟一新行
p 將用戶緩沖區內容放到光標位置(參看P命令)
r 替換當前字符
s 用一串字符替換當前字符
t 字符 光標移動至字符前
u 取消上次操作
w 光標移至下一字首
x 刪除當前字符
yw 將當前字存入無名緩沖區,前面可加x,表示存入名字為x的有名
緩沖區(x為a-z),也可加數字表示存入的字數,以后可用P或p命
令取出
yy 將當前行存入無名緩沖區,用法參看yw
{ 光標移動至前一段開頭
| 光標移至行首,若前面加數字,則移到數字指定行的行首
} 光標移至下一段開頭
在:提示符下,常用命令如下:
:w 當前文件存盤
:w! 強制存盤
:w 文件 將內容寫入指定文件
:w! 文件 強制寫入指定文件
:x,y w 文件 將 x至 y 行寫入指定文件中
:r 文件 將文件讀到光標位置
:r ! 命令 將系統命令的輸出讀到光標位置
:q 退出編輯
:q! 強制退出
:x 與命令ZZ相同
:e 文件名 編輯另一文件
:e ! 重新編輯文件,放棄任何改變
:sh 執行sh,結束后回到編輯
:! 命令 執行命令后回到編輯
:n 編輯下一文件
:n 文件表 重新定義待編輯文件表
:set 設置 vi 的選項,例如 set nu 表示每行前顯示行號,在選項前
加no則表示清除該選項,例如 set nonu 表示每行前不顯示行
號,下面是一些常用的選項:
ai 自動縮進
aw 編輯下一文件前自動存盤
ic 查找字符串時不區分大小寫
nu 每行前顯示行號
sm 輸入)及}時顯示與之配對的( 或 {
slow 插入時延遲屏幕刷新
ws 使查找能繞過文件尾從頭進行
wa 寫文件之前不作對文件的檢查
第二章 設備管理
2.1 stty
[語法]: stty [-a] [-g] [選項]
[說明]: 本命令設置終端,無參數時報告終端設置,本命令功能十分強大,應謹慎使用,下面僅介紹部分常用功能
-a 顯示當前終端所有設置
-g 以能作為 stty 命令參數的方式顯示終端設置
以下是終端常用設置,在設置前加-表示清除設置:
1.控制方式
ispeed 0 110 300 600 1200 1800 2400 4800 9600 19200 38400
本命令設置終端輸入波特率,若為0則使用缺省波特率。
例如 stty ispeed 9600
ospeed 0 110 300 600 1200 1800 2400 4800 9600 19200 38400
本命令設置終端輸出波特率,參看 ispeed。
2.輸入方式
ingbrk(-ignbrk) 忽略(不忽略)中斷(BREAK)
brkint(-brkint) 設置(清除)信號INTR為中斷信號
inlcr(-inlcr) 將換行轉換(不轉換)成回車
icrnl( -icrnl) 將回車轉換(不轉換)成換行
igncr(-ignrc) 忽略(不忽略)回車
iuclc( -iuclc) 將大寫字母轉換(不轉換)成小寫字母
3.輸出方式
olcut(-olcut) 將小寫字母轉換(不轉換)為大寫字母
onlcr(-onlcr) 輸出時將換行符轉換(不轉換)為回車換行
ocrnl(-ocrnl) 輸出時將回車符轉換(不轉換)為換行符
4.本地方式
echo (-echo) 設置(清除)回顯
stwrap(-stwrap) 截斷(不截斷)大于79個字符的行
echoctl(-echoctr) 將控制鍵回顯為^
2.2 tty
[語法]: tty
[說明]: 顯示出終端的設備名
[例子]:
tty
2.3 lp
[語法]: lp 文件...
[說明]: 將文件送打印機打印
[例子]:
lp myfile 將文件myfile 送打印機輸出
2.4 lpstat
[語法]: lpstat [選項] [打印任務號]
[說明]: 顯示打印機狀態,選項的意義如下:
-a [打印機表] 顯示打印機表中指定的打印機可否接收打印請求
-c [打印機類名] 顯示打印機種類及在該打印機種類下的成員
-d 顯示系統預設的打印機
-p [打印機表] 顯示打印機表中打印機狀態
-r 顯示lp 請求程序表( lp request scheduler)
-s 打印系統統計表
-t 打印所有狀態信息
-u [用戶] 顯示由用戶發出的打印請求
-v [打印機名表] 顯示每個打印機名稱,是對應于該打印機設備文件的路徑名
[例子]:
lpstat -t 打印所有狀態信息
2.5 cancel
[語法]: cancel 打印任務號
cancel 打印機名
cancel -u 用戶名 [打印機]
[說明]: 本命令可按打印機名,打印任務,用戶來取消打印任務
[例子]:
cancel -u mary 取消用戶 mary 的所有打印請求
2.6 enable
[語法]: enable 打印機表
[說明]: 本命令可激活一個或多個打印機
2.7 disable
[語法]: disable [-cw] 打印機表
[說明]: 使一個或多個打印機不能打印
-c 立即取消正在打印的打印請求
-w 等正在打印的內容打完后,才禁止打印機
2.8 sync
[語法]: sync
[說明]: 將磁盤緩沖區內容寫回磁盤
2.9 mount
[語法]: mount [-r] 設備 目錄
[說明]: 將設備安裝到目錄下
-r 以只讀方式安裝
2.10 umount
[語法]: umount 設備
[說明]: 將已安裝的文件系統卸下
2.11 tar
[語法]: tar -c[vwfbL] [設備] [塊] 文件...
tar -r[vwfbL] [設備] [塊] 文件...
tar -t[vfL] [設備] [文件...]
tar -u[vwfbL] [設備] [塊] 文件...
tar -x[lmovwfL] [設備] [文件...]
[說明]: 將多個文件歸檔,命令中各參數的意義為:
r 附加方式歸檔
x 抽取文件
t 顯示文件
u 附加方式歸檔,同時刪除舊版文件
c 建立新檔案文件
v 顯示所處理的文件名
w 處理文件前,要求用戶確認
f 文件名 使用指定文件名作為檔案文件
bn 每次讀寫 n 塊,缺省值為1,最大值為20
m 將新的文件修改時間設為獲取時的時間
o 獲取出來的文件以下達tar指令的UID和GID存儲
[例子]:
tar cvf file.tar *
tar tvf file.tar
2.12 df
[語法]: df [-t] [文件系統]
[說明]: 顯示剩余 i 節點和塊數,使用 -t 選項,還顯示總塊數和 i 節點數
[例子]: df -t
2.13 du
[語法]: du [-ars] [目錄]
[說明]: 顯示磁盤空間專用情況
-r 提供無法打開的文件信息
-s 僅顯示指定目錄所占空間的總和
-a 顯示文件大小及目錄總空間,其后可根文件名作參數
第三章 進程管理
3.1 sleep
[語法]: sleep 時間
[說明]: 掛起參數指定的秒數
3.2 ps
[語法]: ps [ -efl] [ -t 終端表] [ -u 用戶表] [ -g 組表]
[說明]: 顯示出有關進程的狀態
-e 顯示出現在正在運行的所有進程
-f 顯示所有信息
-l 產生一個長列表
-t 顯示指定終端進程
-u 顯示指定用戶進程
-g 顯示指定組進程
3.3 at
[語法]: at [-f 命令文件] [-m] [-q 隊列] -t 時間
[說明]: at命令由cron管理,在未來一個指定的時間內執行一組命令,命令可以從指定文件讀入,也可從鍵盤讀入,從鍵盤讀入時以EOF結束,(通常為CTRL D)
-f 從指定命令文件中讀入命令
-m 命令執行完后給用戶發郵件
-q 將命令放入指定隊列
-t 指定時間 指定的時間格式為 [[CC]YY]MMDDhhmm[.ss],CC表示
年的前兩位,YY表示年的后兩位,MM表示月,DD表示日,hh表
示時,mm表示分,ss表示秒
3.4 kill
[語法]: kill -信號 進程號
[說明]: kill 將信號傳遞給指定進程,信號意義如下:
1 暫停(hangup)
2 中斷(interrupt)
3 退出(quit)
4 非法指令(illeqgal instruction)
5 跟蹤中斷(trace trap)
6 Abort
7 EMT 指令(Emulation trap)
8 浮點格式異常(floating point exception)
9 kill(不可忽略)
10 通道錯誤(bus error)
11 不合法內存段
12 錯誤的系統調用參數
13 寫入不可讀的連通管道
14 alarm clock
15 軟件結束信號
16 用戶定義信號一
17 用戶定義信號二
[例子]:
kill -9 444 殺死進程號為 444 的進程
第四章 系統管理和用戶管理
4.1 who
[語法]: who
who am i
[說明]: 列出現在系統中的用戶,who am i 顯示自己
4.2 whodo
[語法]: whodo [-h] [-l] [用戶]
[說明]: 顯示系統中用戶及進程,若指定用戶,則只列出該用戶的信息
-h 不顯示頭部信息
-l 長列表格式輸出
4.3 passwd
[語法]: passwd [用戶]
[說明]: 修改密碼,指定用戶則修改指定用戶密碼
4.4 logname
[語法]: logname
[說明]: 取得當前用戶注冊名
4.5 su
[語法]: su [- ] [用戶名]
[說明]: su 命令使當前用戶成為指定用戶,若無指定,則成為超級用戶,但必須輸入該用戶的密碼,-選項表示用該用戶的注冊環境成為該用戶
4.6 time
[語法]: time 命令
[說明]: 執行命令,并在執行完后顯示其運行的時間
4.7 date
[語法]: date
date mmddhhmm[yy]
[說明]: date 無參數時用于顯示系統時間,修改時間時參數形式為
月日時分[年]
4.8 shutdown
[語法]: shutdown [-y] [-gn] [-in]
[說明]: UNIX 系統必須先關閉系統,再關電源
-y 對提示的所有問題都回答 y
-gn 給其他用戶n 秒的時間退出,缺省值為60秒
-in 系統退到第n種方式,方式如下:
0 關機
1 單用戶模式
2 多用戶模式
3 網絡下的多用戶模式
6 關機并重新啟動
4.9 fsck
[語法]: fsck [-y]
[說明]: 本命令用于檢查和修復文件系統,當文件系統出現混亂時,可使用本命令,-y選項表示對所有提問都回答YES
第五章 通信和郵件
5.1 wall
[語法]: wall
[說明]: 向所有用戶廣播通知信息,常用于警告所有用戶
5.2 mesg
[語法]: mesg [-n] [-y]
[說明]: mesg 用 -n 參數則禁止其他用戶用 write 發消息,用 -y 參數則允許接收消息,若無參數則報告現在的狀況
5.3 write
[語法]: write 用戶 終端
[說明]: write 與指定的終端上的用戶直接對話,直到接收到文件結束符
[例子]:
write mary console
5.4 mailx
[語法]: mailx [選項] [名字]
[說明]: 本命令用于發送和接收郵件,名字是收信人的用戶名,本命令有許多內部命令,選項說明如下:
-e 檢查是否有郵件,若有則返回0
-f 文件名 從文件中讀取郵件而非從郵箱中
-H 只顯示信件標題
-s 標題 設定標題為指定標題
[命令說明]
. 當前信件
n 第 n 封信
^ 第一封未被處理的信
$ 最后一封信
* 所有的信
n-m 第n 封至第m封信
用戶 由指定用戶發出的信
/ 字符串 標題中包含字符串的信
:c 滿足指定類型c的信,類型可為
d 已刪除的信
n 信傳送的信
o 舊信件
r 已讀過的信
u 未讀過的信
p 一次顯示多封信
t 顯示某封信的前若干行
si 顯示信件字符數
h 顯示信件標題
d 刪除信件
u 恢復信件
s [信件表] 文件名
將信件存入指定文件中
q 退出
r 回信
~e 編輯信件
~r 文件 從文件中讀取信件
[例子]:
mailx mary < myletter
第六章 Shell 編程
shell 不但是 Unix 的用戶交互界面,還是一門程序設計語言,系統注冊進入時就會執行一個shell命令文件 .profile ,下面對shell中的常用命令作簡單介紹。
$n shell 程序命令行中的第n 個參數,n為0-9,當n 為0時表示命令名
$# 命令行中參數的個數
$$ 本shell 命令的進程號
$! 最后一個后臺進程的代號
$* 所有命令行參數
$@ 與$*相似,但其值不同
$HOME 注冊時進入的目錄
$PATH 命令的搜索目錄
$PS1 系統第一個提示符,一般為$
$PS2 系統第二個提示符,一般為>
shift [n] 將命令行參數往左移一位,但$0不變
變量名=字符串 將字符串賦予變量名,以后可用$變量名引用該變量
export 變量名表 將變量名表所列變量傳遞給子進程
read 變量名表 從標準輸入讀字符串,傳給指定變量
echo 變量名表 將變量名表指定的變量顯示到標準輸出
set 顯示設置變量
env 顯示目前所有變量
if 條件執行,語法是: if 條件
then 指令
fi
case 分支執行,語法是: case 字符串變量 in
值1) 指令...
值2) 指令...
...
esac
while 條件為真時循環,語法是:
while 條件
do
指令...
done
until 條件為假時循環,語法是:
until 條件
do
指令...
done
for 變量在表中時循環,語法是:
for 變量名 in 字組表
do
指令...
done
break 從循環中退出,語法:
break n
n 表示跳出循環的層數
continue 繼續循環,語法:
continue n
n 表示退到包含continue 語句的第n 層繼續循環
exit 退出shell
func shell內部可定義函數,語法: func 函數名()
{
指令...
}
expr 將其后的串解釋為表達式并計算其值,運算符前后需有空格
trap 捕獲信號,語法 trap n ,捕獲信號 n (信號說明參見kill)
test 條件測試,語法 test [選項] 參數
選項 -f 文件 若文件存在且可讀則真
-w 文件 若文件存在且可寫則真
-x 文件 若文件存在且可執行則真
-f 文件 若文件存在且為普通文件則真
-d 文件 若文件存在且為目錄文件則真
-p 文件 若文件存在且為fifo文件則真
-s 文件 若文件存在且不空則真
-z 串 若串長度為0則真
-n 串 若串長度不為0則真
串 若串不是空串則真
串1=串2 若串1等于串2則真
串1!=串2 若串1不等于串2則真
n1 -eq n2 若n1與n2數值相當則真
n1 -ne n2 若n1與n2數值不相當則真
n1 -lt n2 若n1小于n2則真
n1 -le n2 若n1小于等于n2則真
n1 -gt n2 若n1大于n2則真
n1 -ge n2 若n1大于等于n2則真
可用 與 -a 或 -o 非 ! 將條件表達式連接起來
第七章 數學計算命令
[語法]: bc [-c] [-l] [文件...]
[說明]: bc是一個交互式的高精度計算工具,采用類似于C語言的語法,能夠從指定文件指定文件中讀出命令執行,然后再進入交互式執行,事實上,bc是dc的預編譯器,它自動激活dc,將語句經預編譯后傳遞給dc,退出bc的命令是quit,bc中的ibase,obase,scale分別表示輸入基數,輸出基數,小數點右邊的位數。
-c bc 只編譯,而不將編譯結果送dc,將其送到標準輸出上
-l 預定義一個數學函數庫,可在bc中使用以下函數
s(x) sine
c(x) cosine
e(x) exponential
l(x) log
a(x) arctangent
j(n,x) Bessel
[例子]:
bc -l 進入bc
scale=10 將小數位定為10位
e(1) 計算e的小數點后10位
quit 退出bc
附錄 UNIX 常用命令簡單說明
UNIX 命令大多數可用聯機幫助手冊 man 獲得幫助,下面是常用命令及簡單說明,可供用戶快速查找使用。
命令 功能簡述
acctcom 等于進程記帳文件
accton 啟動或中止記帳進程
adb 匯編語言調試工具
admin 創建和管理SCCS文件
ar 檔案文件和庫文件管理程序
as 匯編器
asa 回車控制
at 在指定時間執行程序
awk 模式搜索和處理語言
banner 制作標題
basename 生成文件基本名(無前。后綴)
batch 命令的延遲執行
bc 計算器
bdiff 大型文件比較
bfs 大文件搜索
break 退出循環
cal 打印日歷表
calendar 打印日歷表
cancel 取消打印任務
case 分支語句
cb C語言整理程序
cd 改變當前目錄
cc C語言編譯器
cdc SCCS實用程序
cflow 生成C語言流程圖
checkeq 數學公式排版命令
chgrp 改變文件組
chmod 改變文件存取模式
chown 改變文件主
chroot 改變根目錄
cksum 顯示校驗和
clri 清除指定的I節點
cmp 文件比較
col 過濾反向換行
comb SCCS實用程序
comm 顯示兩個排序文件的公共行
command 執行簡單命令
continue 進入下一循環
cp 復制文件
cpio 復制文件檔案
cpp C語言預處理程序
crash 檢查系統內存映象
create 建立臨時文件
cref 生成交叉引用表
cron 在指定時間執行一組命令
crontab 為命令cron 準備crontab文件
crypt 加密/解密
csplit 將一個文件分解
ct 遠程終端注冊
ctags 創建供vi使用的標識符
cu 呼叫另一UNIX系統
cut 斷開一文件中所選擇的字段
cxref 生成C程序交叉訪問表
date 打印和設置時間
dc 桌面計算器
dd 轉換和復制文件
delta SCCS實用程序
deroff 去掉排版格式
devnm 標識設備名
df 顯示可用磁盤空間
diff 顯示兩個文件的差異
diff3 顯示三個文件的差異
dircmp 目錄比較
dis 反匯編程序
du 顯示對磁盤的占用情況
dump 對指定文件備份
echo 回顯指定參數
ed 行編輯器
edit 文本編輯器
egrep 在文件中查找指定模式
env 設置命令執行環境
eqn 數學公式排版命令
eval 執行指定命令
ex 行編輯器
exec 執行指定命令
exit 進程中止
expand 使表格占滿行寬
export 將變量傳遞給子程序
expr 計算表達式值
factor 因式分解
false 返回FALSE
fgrep 在文件中查找指定模式
file 確定文件類型
find 查找符號條件的文件
fmt 安排簡單的文本格式
fold 折行
for 循環語句
fsck 文件系統檢查和修復
fsdb 文件系統調試程序
fumount 強制性拆協指定資源
function 函數說明
fuser 列出使用文件的進程
fwtmp 產生記帳記錄
get SCCS實用程序
getconf 查找配置參數
getopt 獲得命令中的選擇項
getopts 獲得命令中的選擇項
getty 設置終端類型、模式、行律等
grep 在文件中查找指定模式
head 打印文件的頭若干行
hexdump 按十六進制轉儲文件
id 顯示用戶號
if 條件語句
init UNIX 初啟進程
install 安裝一個文件到文件系統
ipcrm 刪除IPC隊列
ipcs 顯示IPC狀態
join 連接兩個文件(關系操作〕
kill 中止指定進程
killall 中止所有活動進程
labelit 給文件系統提供標號
ld 目標文件鏈接編輯器
lex 詞法分析程序
line 讀一行
link 連接文件
lint C程序檢查程序
ln 鏈接文件
local 建立局部變量
logger 顯示注冊信息
login 注冊
logname 獲取注冊名
look 在排序文件中查找某行
lorder 查找目標庫的次序關系
lp 打印文件
lpr 打印文件
lpstat 顯示打印隊列狀態
ls 目錄列表
mail 發送或接收電子郵件
mailx 發送、接收或處理電子郵件
make 執行有選擇的編譯
makekey 生成加密碼
man 顯示命令用法
mesg 接收或取消對話方式
mkdir 建立目錄
mkfifo 建立FIFO文件
mkfs 建立文件系統
mknod 建立文件系統的I節點
mount 安裝文件系統
mv 移動文件
mvdir 移動目錄
ncheck 按節點號生成節點名清單
neqn 數學公式排版命令
newgrp 把用戶加入到新組
news 打印消息
nice 改變命令執行優先級
nl 給文件加行號
nm 顯示目標文件符號表
nohup 忽略掛起或退出執行命令
nroff 文本文件排版
od 按八進制轉儲文件
pack 壓縮文件
passwd 改變口令
paste 文件合并
pax 可移植檔案管理程序
pcat 顯示壓縮格式文件
pg 分屏顯示
pr 按打印格式顯示文件
pstat 報告系統信息
pwck 口令文件校驗程序
pwd 顯示當前工作目錄
quot 檢查文件系統所有權
ratfor 轉換成標準FORTRANC程序
read 從標準輸入讀一行
readonly 標記變量為只讀
red 文本編輯器
regcmp 正規表達式編輯
restor 文件系統恢復程序
restore 文件系統恢復程序
return 返回語句
rev 顛倒文件中每行字符次序
rm 刪除文件
rmdel SCCS使用程序
rmdir 刪除目錄
rsh(net) 遠程SHELL
rsh(sec) 受限SHELL
runacct 運行日常記帳程序
sact SCCS實用程序
sag 打印系統活動圖
sar 報告系統活動
sccsdiff SCCS實用程序
sdb 符號調試器
sdiff 并列顯示兩個文件的差別
sed 流編輯器
sendto 發送郵件
set 設置選項或參數
setmnt 建立文件系統安裝表
sh SHELL解釋器
shift 命令行參數移位
shl SHELL層(layer)管理程序
shutdown 關機
size 顯示目標文件長度
sleep 掛起進程一段時間
sort 文件排序和合并
spell 拼寫錯誤檢查程序
spellin 拼寫錯誤檢查
spellout 拼寫錯誤檢查
spline 按平滑曲線輸出數據
split 分解一個文件
strings 在目標文件中尋找可打印字符
strip 刪除符號表
stty 設置終端模式
su 改變用戶
sum 顯示文件校驗和及塊數
sync 更新磁盤
tabs 設置制表符
tbl 表格排版
tee 在管道上建立多通路
tic 終端數據庫編譯程序
time 打印執行命令所花時間
tiemx 報告命令所花時間及活動
touch 更新文件時間
tput 恢復終端或查詢數據庫
tr 轉換字符
trap 捕獲信號
troff 文本文件排版
true 返回TRUE
tsort 拓撲排序
tty 顯示終端設備名
umask 設置文件掩碼
umount 拆卸文件系統
uname 顯示系統名
unget SCCS實用程序
uniq 刪除文件中重復行
units 度量單位轉換
unlink 刪除文件
unpack 將壓縮文件還原
until 循環語句
update 更新磁盤
val SCCS實用程序
vc SCCS實用程序
vi 全屏幕編輯器
volcopy 文件系統的文字拷貝
wait 等待所有字進程結束
while 循環語句
who 顯示誰在使用系統
whodo 顯示哪些用戶在做什么
write 和另一用戶直接對話
xargs 建立參數表并執行命令
yacc 語法分析程序生成器
1.登錄工作站
1.1 透過 PC 登錄工作站
執行格式:telnet hostname (在 dos 下執行)
telnet ip-address
Example:
telnet doc telnet 140.122.77.120
注: 可利用指令 arp hostname 或 arp domain_name 查詢 ip_address
1.2 登錄步驟
login : _______ > 輸入 username
password : _______ > 輸入密碼
1.3 登出步驟
% logout
或 % exit
或 %
1.4 更改帳號密碼
% yppasswd > 執行后將會出現下列信息
Changing NIS password for user on ice.
Old password: ______ > 輸入舊密碼
New password: ______ > 輸入新密碼(最好6-8字,英文字母與數字混合)
Retype new password: ______ > 再輸入一次密碼
1.5 在線幫助指令說明
執行格式: man command-name
Example: % man ls
1.6 進入遠端電腦系統
執行格式:rlogin hostname [-1 username]
Example:
%rlogin doc
remote login 進入工作站 doc 中。
%rlogin doc -l user
使用 user 帳號進入工作站 doc 中。
執行格式:telnet hostname 或 telnet IP address
Example:
%telnet doc or %telnet 140.109.20.251
2. 文件或目錄處理
2.1 列出文件或目錄下之文件名稱
執行格式: ls [-atFlgR] [name] ( name 可為文件名或目錄名稱。)
Example :
ls 列出目前目錄下之文件名。
ls –a 列出包含以.起始的隱藏檔所有文件名。
ls –t 依照文件最后修改時間之順序,依序列出文件名。
ls –F 列出目前目錄下之文件名及其類型。"/" 結尾表示為目錄名稱,
"*" 結尾表示為執行檔,"@" 結尾表示為 symblic link。
ls –l 列出目錄下所有文件之許可權、擁有者、文件大小、修改時間及名稱。
ls –lg 同上,并顯示出文件之擁有者群組名稱。
ls –R 顯示出目錄下,以及其所有子目錄之文件名。( recursive listing )
2.2 目錄之縮寫:
~ 使用者 login 時的 working directory ( 起始目錄 )
~username 指定某位 user 的 working directory ( 起始目錄 )
.. 目前的工作目錄 ( current working directory )
.. 目前目錄的上一層目錄 ( parent of working directory)
2.3 改變工作目錄位置
執行格式:cd [name] :name 可為目錄名稱、路徑或目錄縮寫。
Example:
cd 改變目錄位置,至使用者 login 時的 working directory (起始目錄)。
cd dir1 改變目錄位置,至 dir1 之目錄位置下。
cd ~user 改變目錄位置,至使用者的 working directory (起始目錄)。
cd .. 改變目錄位置,至目前目錄的上層( 即 parent of working directory)
cd ../user 改變目錄位置,至相對路徑 user 之目錄位置下。
cd /../.. 改變目錄位置,至絕對路徑( Full path ) 之目錄位置下。
2.4 復制文件
執行格式: cp [-r] source destination
Example:
cp file1 file2 將文件 file1 復制成 file2
cp file1 dir1 將文件 file1 復制到目錄 dir1 下,文件名仍為 file1。
cp /tmp/file1 將目錄 /tmp 下的文件 file1 復制到現行目錄下,文件名仍為 file1。
cp /tmp/file1 file2 將目錄 /tmp 下的文件 file1 復制到現行目錄下,文件名為 file2
cp -r dir1 dir2 (recursive copy) 復制整個目錄。
若目錄 dir2 不存在,則將目錄 dir1,及其所有文件和子目錄,復制到目錄 dir2 下,新目錄名稱為 dir1。若目錄 dir2 不存在,則將dir1,及其所有文件和子目錄,復制為目錄 dir2。
2.5 移動或更改文件、目錄名稱
執行格式: mv source destination
Example:
mv file1 file2 將文件 file1,更改文件名為 file2。
mv file1 dir1 將文件 file1,移到目錄 dir1下,文件名仍為 file1。
mv dir1 dir2 若目錄 dir2 不存在,則將目錄 dir1,及其所有文件和子目錄,移到目錄 dir2 下,新目錄名稱為 dir1。若目錄 dir2 不存在,則將dir1,及其所有文件和子目錄,更改為目錄 dir2。
2.6 建立新目錄
執行格式: mkdir directory-name
Exmaple :
mkdir dir1 建立一新目錄 dir1。
2.7 刪除目錄
執行格式: rmdir directory-name 或 rm directory-name
Example :
rmdir dir1 刪除目錄 dir1,但 dir1 下必須沒有文件存在,否則無法刪除。
rm -r dir1 刪除目錄 dir1,及其下所有文件及子目錄。
2.8 刪除文件
執行格式: rm filename (filename 可為文件名,或文件名縮寫符號。)
Example :
rm file1 刪除文件名為 file1 之文件。
rm file? 刪除文件名中有五個字符,前四個字符為file 之所有文件。
rm f* 刪除文件名中,以 f 為字首之所有文件。
2.9 文件名的縮寫符號
? 代表文件名稱中之單一字符。
* 代表文件名稱中之一字串。
2.10 列出目前所在之目錄位置
執行格式: pwd
2.11 查看文件內容
執行格式: cat filename
Example :
cat file1 以連續顯示方式,查看文件名 file1 之內容。
執行格式: more filename 或 cat filename | more
Example :
more file1 以分頁方式,查看文件名 file1 之內容。
cat file1 | more 同上。
2.12 查看目錄所占磁盤容量
執行格式: du [-s] directory
Example :
du dir1 顯示目錄 dir1 的總容量及其次目錄的容量(以 k byte 為容量)。
du -s dir1 顯示目錄 dir1 的總容量。
2.13 查看自己的 disk quota 使用狀況
disk quota : 工作站磁盤空間的使用限額。
執行格式: quota -v
Example :
quota -v 將會顯示下列信息
Filesystem usage quota limit timeleft files quota limit timelef.
/home/ice/u01 9344 8192 12288 1.9 days 160 0 0
欄位解說:
usage : 目前的磁盤用量。
quota : 你的磁盤使用額度。當你的 usage 超過 quota 時,雖然可以繼續使用,但是必須七天之內降到 quota 以下,否則即使用量沒有超 limit(最高限額),也無法再寫入或復制任何文件。
limit : 最高使用額度。當你的 usage 達到 limit 時,無法再寫入或復制任何文件。
3. 文件傳輸
3.1 拷貝文件或目錄至遠端工作站
執行格式: rcp [-r] source hostnome:destination
source 可為文件名、目錄名或路徑,hostnome 為工作站站名,destination 為路徑名稱.
Example :
rcp file1 doc:/home/user
將文件 file1,拷貝到工作站 doc 路徑 /home/user 之目錄下。
rcp -r dir1 doc:/home/user
將目錄 dir1,拷貝到工作站 doc 路徑/home/user 之目錄下。
3.2 自遠端工作站,拷貝文件或目錄
執行格式: rcp [-r] hostname:source destination
( hostname 為工作站名,source 為路徑名,destination 可為文件名、目錄名或路徑 )。
Example :
rcp doc:/home/user/file1 file2
將工作站 doc 中,位于 /home/user 目錄下之目錄 dir1,拷貝到目前工作站之目錄下,目錄名稱仍為 dir1。
rcp -r doc:/home/user/dir1 .
將工作站 iis1 中,位于 /home/user 目錄下之目錄 dir1,拷貝到目前工作站之目錄下目錄名稱仍為 dir1。
3.3 本地工作站與遠端工作站之間文件傳輸
( 必須擁有遠端工作站之帳號及密碼,才可進行傳輸工作 )
執行格式: ftp hostname or ftp ip_address
Example :
ftp doc 與遠端工作站 doc ,進行文件傳輸
Name (doc:user-name) : 輸入帳號
Password (doc:user-name): 輸入密碼
ftp> help 列出 ftp 文件傳輸,可使用之任何命令。
ftp> !ls 列出本地工作站,目前目錄下之所有文件名。
ftp> !pwd 列出本地工作站,目前所在之工作目錄位置。
ftp> ls 列出遠端工作站目前目錄下之所有文件名。
ftp> dir 列出遠端工作站目前目錄下之所有文件名(略同于 UNIX 的 ls -l 指令).
ftp> dir . |more 同上,但每頁會暫停(可能不適用 Unix 以外的 ftp)。
ftp> pwd 列出遠端工作站目前所在之目錄位置。
ftp> cd dir1 更改遠端工作站之工作目錄位置至 dir1 之下。
ftp> get file1 將遠端工作站之文件 file1 ,拷貝到本地工作站中。
ftp> put file2 將本地工作站之文件 file2 ,拷貝到遠端工作站中。
ftp> mget *.c 將遠端工作站中,副文件名為 c 之所有文件,拷貝到本地工作站中。
ftp> mput *.txt 將本地工作站中,副文件名為 txt 之所有文件,拷貝遠端工作站中。
ftp> prompt 切換交談式指令(使用 mput/mget 時不用每個文件皆詢問yes/no)。
ftp> quit 結束 ftp 工作。
ftp> bye 結束 ftp 工作。
注: 從PC與工作站間的文件傳輸也可透過在 PC端的 FTP指令進行文件傳輸,指令用法與上所述大致相同。
4. 文件模式之設定
4.1 改變文件或目錄之讀、寫、執行之允許權
執行格式:chmod [-R] mode name
( name 可為文件名或目錄名;mode可為 3 個 8 位元之數字,或利用ls -l 命令,列出文件或目錄之讀、寫、執行允許權之文字縮寫。)
mode : rwx rwx rwx r:read w:write x:execute
user group other
縮寫 : (u) (g) (o)
Example :
%chmod 755 dir1
將目錄dir1,設定成任何使用者,皆有讀取及執行之權利,但只有擁有者可做修改。
%chmod 700 file1
將文件file1,設定只有擁有者可以讀、寫和執行。
%chmod o+x file2
將文件file2,增加擁有者可以執行之權利。
%chmod g+x file3
將文件file3,增加群組使用者可執行之權利。
%chmod o-r file4
將文件file4,除去其它使用者可讀取之權利。
4.2 改變文件或目錄之擁有權
執行格式:chown [-R] username name ( name 可為文件名或目錄名。)
Example :
%chown user file1
將文件 file1 之擁有權,改為使用者 user 所有。
%chown -R user dir1
將目錄 dir1,及其下所有文件和子目錄之擁有權,改為使用者 user 所有。
4.3 檢查自己所屬之群組名稱
執行格式:groups
4.4 改變文件或目錄之群組擁有權
執行格式:chgrp [-R] groupname name ( name 可為文件名或目錄名 )
Example :
%chgrp vlsi file1
將文件 file1 之群組擁有權,改為 vlsi 群組。
%chgrp -R image dir1
將目錄dir1,及其下所有文件和子目錄,改為 image 群組。
4.5 改變文件或目錄之最后修改時間
執行格式:touch name ( name 可為文件或目錄名稱。)
4.6 文件之連結
同一文件,可擁有一個以上之名稱,可將文件做數個連結。
執行格式:ln oldname newname ( Hard link )
Example :
ln file1 file2 將名稱 file2,連結至文件 file1。
執行格式:ln -s oldname newname ( Symblick link )
Example :
ln -s file3 file4 將名稱 file4,連結至文件file3。
4.7 文件之字串找尋
執行格式:grep string file
Example :
grep abc file1
尋找文件file1中,列出字串 abc 所在之整行文字內容。
4.8 找尋文件或命令之路徑
執行格式:whereis command ( 顯示命令之路徑。)
執行格式:which command ( 顯示命令之路徑,及使用者所定義之別名。)
執行格式:whatis command ( 顯示命令功能之摘要。)
執行格式:find search-path -name filename -print
( 搜尋指定路徑下,某文件之路徑 。)
Example :
%find / -name file1 -print ( 自根目錄下,尋找文件名為 file1 之路徑。.
4.9 比較文件或目錄之內容
執行格式:diff [-r] name1 name2 ( name1 name2 可同時為文件名,或目錄名稱。)
Example :
%diff file1 file2
比較文件 file1 與 file2 內,各行之不同處。
%diff -r dir1 dir2
比較目錄 dir1 與 dir2 內,各文件之不同處。
4.10 文件打印輸出
使用者可用 .login 檔中之 setenv PRINTER,來設定打印資料時的打印機名。
printername :sp1 或 sp2
Example :
%setenv PRINTER sp2 設定自 sp2 打印資料。
4.11 一般文件之打印
執行格式:lpr [-Pprinter-name] filename
%lpr file1 或 lpr -Psp2 file1
自 sp2,打印文件 file1。
執行格式:enscript [-Pprinter-name] filename
%enscript file3 或 enscript -Psp1 file3
自 sp1 打印文件 file3。
4.12 troff 文件之打印
執行格式:ptroff [-Pprinter-name] [-man][-ms] filename
%ptroff -man /usr/local/man/man1/ptroff.1
以 troff 格式,自 Apple laser writer 打印 ptroff 命令之使用說明。
%ptroff -Psp2 -man /usr/man/man1/lpr1
以 troff 格式,自 sp2 打印 lpr 命令之使用說明。
5. 打印機控制命令
5.1 檢查打印機狀態,及打印工作順序編號和使用者名稱
執行格式:lpq [-Pprinter -name]
%lpq 或 lpq -Psp1
檢查 sp1 打印機之狀態。
5.2 刪除打印機內之打印工作 (使用者僅可刪除自己的打印工作 )
執行格式:lprm [-Pprinter -name] username 或 job number
%lprm user 或 lprm -Psp1 user
刪除 sp1 中,使用者 user 的打印工作,此時使用者名稱必須為 user。
%lprm -Psp2 456
刪除 sp2 編號為 456 之打印工作。
6. Job 之控制
UNIX O.S.,可于 foregrourd 及 background 同時處理多個 process。
一般使用者執行命令時,皆是在 foreground 交談式地執行 process,亦可將 process置于 background 中,以非交談式來執行 process。
6.1 查看系統之 process
執行格式:ps [-aux]
Example:
%ps 或 ps –x (查看系統中,屬于自己的 process。)
%ps –au (查看系統中,所有使用者的 process。)
%ps –aux (查看系統中,包含系統內部,及所有使用者的 process。)
6.2 結束或終止 process
執行格式:kill [-9] PID ( PID 為利用 ps 命令所查出之 process ID。)
Example:
%kill 456 或 kill -9 456
終止 process ID 為 456 之 process。
6.3 在 background 執行 process 的方式
執行格式:command & (于 command 后面加入一 "&" 符號即可。)
Example:
%cc file1.c &
將編譯 file1.c 文件之工作,置于 background 執行。
執行格式:按下 "Control Z" 鍵,暫停正在執行的 process。鍵入 "bg" 命令,將所暫停的 process,置入 background 中繼續執行。
Example:
%cc file2.c
^Z
Stopped
%bg
6.4 查看正在 background 中執行的 process
執行格式:jobs
6.5 結束或終止在 background 中的 process
執行格式:kill %n
(n 為利用 "jobs" 命令,所查看出的 background job 編號)
Example:
%kill % 終止在 background 中的第一個 job。
%kill %2 終止在 background 中的第二個 job。
7. shell varialbe
7.1 查看 shell variable 之設定值
執行格式:set 查看所有 shell variable 之設定值。
%set
執行格式:echo $variable-name 顯示指定的 shell variable 之設定值。
%echo $PRINTER
sp1
7.2 設定 shell variable
執行格式:set var value
Example:
%set termvt100
設定 shell variable "term" 為 VT100 終端機之型式。
7.3 刪除 shell variable
執行格式:unset var
Example:
%unset PRINTER
刪除 shell variable "PRINTER" 之設定值。
8. environment variable
8.1 查看 environment variable 之設定值
執行格式:setenv 查看所有 environment variable 之設定值。
Example: %setenv
執行格式:echo $NAME 顯示指定的 environment variable "NAME" 之設定值。
Example:
%echo $PRINTER
顯示 environment variable "PRINTER" 打印機名稱之設定值。
8.2 設定 environment variable
執行格式:setenv NAME word
Example:
%setenv PRINTER sp1
設定 environment variable "PRINTER" 打印機名稱為 sp1。
8.3 刪除 environment variable
執行格式:unsetenv NAME
Example:
%unsetenv PRINTER
刪除 environment variable "PRINTER" 打印機名稱之設定值。
9. alias
9.1 查看所定義的命令之 alias
執行格式: alias 查看自己目前定義之所有命令,及所對應之 alias 名稱。
執行格式: alias name 查看指定之 alias 名稱所定義之命令。
Example:
%alias dir (查看別名 dir 所定義之命令)
ls -atl
9.2 定義命令之 alias
執行格式: alias name \'command line\'
Example:
% alias dir \'ls -l\'
將命令 "ls - l" 定義別名為 dir。
9.3 刪除所定義之 alias
執行格式: unalias name
Example:
%unalias dir (刪除別名為 dir 之定義。)
%unalias * (刪除所有別名之設定。)
10. history
10.1 設定命令記錄表之長度
執行格式: set history n
Example:
%set history 40
設定命令記錄表之長度為 40 (可記載執行過之前面 40 個命令)。
10.2查看命令記錄表之內容
執行格式: history
10.3 使用命令記錄表
執行格式: !!
Example: %!! (重復執行前一個命令)
執行格式: !n ( n 為命令記錄表之命令編號。)
Example: %!5 ( 執行命令記錄表中第五個命令。)
執行格式: !string ( 重復前面執行過以 string 為起始字符之命令。)
Example: %!cat ( 重復前面執行過,以 cat 為起始字符之命令。)
10.4 顯示前一個命令之內容
執行格式: !!:p
10.5 更改前一命令之內容并執行之
執行格式: ^oldstring ^newstring
將前一命令中 oldstring 的部份,改成 newstring,并執行之。
Example:
%find . -name file1.c -print
^file1.c^core
%find . -name core -print
注:文件 core 為執行程序或命令發生錯誤時,系統所產生的文件。作為偵錯(debug)之,因其所占空間極大,通常將之刪除。
11. 資料之壓縮
為了避免不常用的文件或資料,占用太大的磁盤空間,請使用者將之壓縮。欲使用壓縮過的文件或資料前,將之反壓縮,即可還原成原來之資料型式。凡是經過壓縮處理之文件,會在文件名后面附加 " .Z " 之字符,表示此為一壓縮文件。
11.1 壓縮資料
執行格式:compress filename 壓縮文件
執行格式:compressdir directory-name 壓縮目錄
11.2 解壓縮還原資料
執行格式:uncompress filename 反壓縮文件
執行格式:uncompressdir directory-name 反壓縮目錄
12. pipe-line 之使用
執行格式:command1 | command2
將 command1 執行結果,送到 command2 做為 command2 的輸入。
Example:
%ls -Rl | more
以分頁方式,列出目前目錄下所有文件,及子目錄之名稱。
%cat file1 | more
以分頁方式,列出文件 file1 之內容。
13. I/O control
13.1 標準輸入之控制
執行格式:command-line < file
將 file 做為 command-line 之輸入。
Example:
%mail -s "mail test" user@iis.sinica.edu.tw < file1
將文件 file1 當做信件之內容,Subject 名稱為 mail test,送給收信人。
13.2 標準輸出之控制
執行格式:command > filename
將 command 之執行結果,送至指定的 filename 中。
Example: %ls -l > list
將執行 "ls -l" 命令之結果,寫入文件 list 中。
執行格式:command >! filename
同上,若 filename 之文件已經存在,則強迫 overwrite。
Example: %ls -lg >! list
將執行 "ls - lg" 命令之結果,強迫寫入文件 list 中。
執行格式:command >& filename
將 command 執行時,屏幕上所產生的任何信息,寫入指定的 filename 中。
Example: %cc file1.c >& error
將編譯 file1.c 文件時,所產生之任何信息,寫入文件 error 中。
執行格式:command >> filename
將 command 執行結果,附加(append)到指定的 filename 中。
Example: %ls - lag >> list
將執行 "ls - lag" 命令之結果,附加(append)到文件 list 中。
執行格式:command >>& filename
將 command 執行時,屏幕上所產生的任何信息,附加于指定的 filename中。
Example: %cc file2.c >>& error
將編譯 file2.c 文件時,屏幕所產生之任何信息,附加于文件 error 中。
14. 查看系統中的使用者
執行格式: who 或 finger
執行格式: w
執行格式: finger username or finger username@domainname
15. 改變自己的 username 進入其他使用者的帳號,擁有其使用權利。
執行格式: su username
Example:
%su user 進入使用者 user 之帳號
passwrod: 輸入使用者 user 之密碼
16. 查看 username
執行格式: whoami 查看 login 時,自己的 username。
執行格式: whoami 查看目前的 username。若已執行過 "su"命令tch user),則顯示出此 user 之 username。
17. 查看目前本地所有工作站的使用者
執行格式: rusers
18. 與某工作站上的使用者交談
執行格式: talk username@hostname 或 talk username@ip_address
Example:
1. 可先利用 rusers 指令查看網路上的使用者
2. 假設自己的帳號是 u84987 ,在工作站 indian 上使用,現在想要與 doc 上的u84123 交談。
%talk u84123@doc > 此時屏幕上將會出現等待畫面
在對方(u84123)屏幕上將會出現下列信息
Message from Talk_Daemon@Local_host_name at xx:xx
talk: connection requested by u84987@indian
talk: respond with: talk u84987@indian
此時對方(u84123) 必須執行 talk u84987@indian 即可互相交談。最后可按
19. 檢查遠端電腦系統是否正常
執行格式:ping hostname 或 ping IP-Address
Example:
%ping doc
20. 電子郵件(E-mail)的使用簡介
20.1將文件當做 E-mail 的內容送出
執行格式:mail -s "Subject-string" username@address < filename
%mail -s "program" user < file.c
將 file.c 當做 mail 的內容,送至 user, subject name 為 program。
20.2 傳送 E-mail 給本地使用者
執行格式:mail username
%mail user
20.3 傳送 E-mail 至 外地
執行格式: mail username@receiver-address
Example
%mail paul@gate.sinica.edu.tw
Subject : mail test
:
:
鍵入信文內容
:
:
按下 "Control D" 鍵或 " . " 鍵結束信文。
連按兩次 "Control C" 鍵,則中斷工作,不送此信件。
Cc:
( Carbon copy : 復制一份信文,給其他的收信人 )
20.4 檢查所傳送之 E-mail 是否送出,或滯留于本所之郵件伺服站中
執行格式:/usr/lib/sendmail -bp
( 若屏幕顯示為 "Mail queue is empty" 之信息,表示 mail 已送出。
若為其它錯誤信息,表示 E-mail 因故尚未送出。)
20.5 讀取信件
執行格式: mail
常用指令如下:
cd [directory] chdir to directory or home if none given
d [message list] delete messages
h print out active message headers
m [user list] mail to specific users
n goto and type next message
p [message list] print messages
q quit, saving unresolved messages in mbox
r [message list] reply to sender (only) of messages
R [message list] reply to sender and all recipients of messages
s [message list] file append messages to file
t [message list] type messages (same as print)
u [message list] undelete messages
v [message list] edit messages with display editor
w [message list] file append messages to file, without from line
x quit, do not change system mailbox
z [-] display next [previous] page of headers
! shell escape
21.文件編輯器 vi 之使用方法簡介
vi、celvis(cvi) 是在工作站上被廣大使用的中英文編輯軟體。對初學者而言,常因其特殊的使用方法,而不得其門而入;對已經在使用 vi 的使用者來說,也常見因對 vi 的不熟悉或不夠了解,而無法發揮出 vi 強大的編輯能力,以下將介紹 vi 之使用方法簡介。
21.1本文內容大綱
進入 vi
離開 vi
輸入模式
如何進入輸入模式
如何離開輸入模式
指令模式
光標的移動
視窗的移動
刪除、復制及修改指令介紹(delete、change、yank)
刪除與修改(delete、replace)
移動與復制(delete/put、yank/put)
指令重復
取消前一動作(undo)
字串搜尋
資料的連接與分行
環境的設定
ex 指令
其它方面
中文編輯
恢復編輯時被中斷的文件
編輯多個文件
vi 是 visual editor 的縮寫,是 UNIX 所提供的編輯器之一。它提供使用者一個視窗的編輯環境,在此視窗下,使用者可編輯所要的文件。
21.2 進入vi
直接執行 vi編輯程序即可:
%vi test
此刻屏幕上會出現 vi 的編輯視窗,同時 vi 會將文件復制一份至記憶體中的緩沖區 (buffer) 。 vi會保留在磁盤中的文件不變,而先對緩沖區的文件作編輯,編輯完成后,使用者可決定是否要取代原來舊有的文件。
--------------------------------------------------------------------------------
-- 作者:itvue
-- 發布時間:2005-5-11 10:17:42
--
21.3 離開vi
若在輸入模式下,則先利用《ESC》進入指令模式,而后即可選用下列指令
離開vi。
:q! 離開vi,并放棄剛在緩沖區內編輯的內容。
:wq 將緩沖區內的資料寫入磁盤中,并離開vi。
:ZZ 同wq。
:x 同wq。
:w 將緩沖區內的資料寫入磁盤中,但并不離開vi。
:q 離開vi,若文件被修改過,則會被要求確認是否放棄修改的內容。
此指令可與:w 配合使用。
21.4 vi 的操作模式
vi 提供兩種操作模式:輸入模式(insert mode)和指令模式(command mode)。當使用者進入 vi 后,即處在指令模式下,此刻鍵入之任何字符皆被視為指令。在此模式下可進行刪除、修改等動作。若要輸入資料,則需進入輸入模式。
21.5 輸入模式
如何進入輸入模式
l a (append) 由光標之后加入資料。
l A 由該行之末加入資料。
l i (insert) 由光標之前加入資料。
l I 由該行之首加入資料。
l o (open) 新增一行于該行之下供輸入資料之用。
l 新增一行于該行之上供輸入資料之用。
如何離開輸入模式
l 《ESC》 結束輸入模式。
21.6 指令模式
光標之移動
l h 向左移一個字符。
l J 向上移一個字符。
l K 向下移一個字符。
l L 向右移一個字符。
l 移至該行之首
l $ 移至該行之末。
l ^ 移至該行的第一個字符處。
l H 移至視窗的第一列。
l M 移至視窗的中間那列。
l L 移至視窗的最后一列。
l G 移至該文件的最后一列。
l + 移至下一列的第一個字符處。
l - 移至上一列的第一個字符處。
l ( 移至該句之首。 (注一)
l ) 移至該句之末。
l { 移至該段落之首。 (注二)
l } 移至該段落之末。
l nG 移至該文件的第 n 列。
l n+ 移至光標所在位置之后的第 n 列。
l 移至光標所在位置之前的第 n 列。
l
注一:句子(sentence)在vi中是指以『!』、『.』或『?』結束的一串字。
注二:段落(paragraph)在vi中是指以空白行隔開的文字。
21.7 視窗的移動
l
視窗往下卷一頁。
l視窗往上卷一頁。
l視窗往下卷半頁。
l視窗往上卷半頁。
l視窗往下卷一行。
l視窗往上卷一行。
21.8 刪除、復制及修改指令介紹 (此單元較少使用)
d(delete)、c(change)和y(yank)這一類的指令在 vi 中的指令格式為:
Operator + Scope command
(運算子) (范圍)
運算子:
l d 刪除指令。刪除資料,但會將刪除資料復制到記憶體緩沖區。
l y 將資料(字組、行列、句子或段落)復制到緩沖區。
l p 放置(put)指令,與 d 和 y 配和使用。可將最后delete或yank的資料放置于光標所在位置之行列下。
l c 修改(change)指令,類似delete與insert的組和。刪除一個字組、句子等之資料,并插入新鍵資料。
范圍:
l e 由光標所在位置至該字串的最后一個字符。
l w 由光標所在位置至下一個字串的第一個字符。
l b 由光標所在位置至前一個字串的第一個字符。
l $ 由光標所在位置至該行的最后一個字符。
l 由光標所在位置至該行的第一個字符。
l ) 由光標所在位置至下一個句子的第一個字符。
l ( 由光標所在位置至該句子的第一個字符。
l { 由光標所在位置至該段落的最后一個字符。
l } 由光標所在位置至該段落的第一個字符。
整行動作:
l dd 刪除整行。
l D 以行為單位,刪除光標后之所有字符。
l cc 修改整行的內容。
l yy yank整行,使光標所在該行復制到記憶體緩沖區。
21.9 刪除與修改
l x 刪除光標所在該字符。
l X 刪除光標所在之前一字符。
l dd 刪除光標所在該行。
l r 用接于此指令之后的字符取代(replace)光標所在字符。如: ra 將光標所在字符以 a 取代之。
l R 進入取代狀態,直到《ESC》為止。
l s 刪除光標所在之字符,并進入輸入模式直到《ESC》。
l S 刪除光標所在之該行資料,并進入輸入模式直到《ESC》。
21.10 移動與復制
利用 delete 及 put 指令可完成資料移動之目的。
利用 yank 及 put 指令可完成資料復制之目的。
yank 和 delete 可將指定的資料復制到記憶體緩沖區,而藉由 put 指令可將緩沖區內的資料復制到屏幕上。
例:
移動一行 .在該行執行 dd
.光標移至目的地
.執行 p
復制一行 .在該行執行 yy
.光標移至目的地
.執行 p
21.11 指令重復
在指令模式中,可在指令前面加入一數字 n,則此指令動作會重復執行 n次。
例:
刪除10行 .10dd
復制10行 .10yy
指標往下移10行 .10j
21.12 取消前一動作(Undo)
即復原執行上一指令前的內容。
u 恢復最后一個指令之前的結果。
U 恢復光標該行之所有改變。
21.13 搜尋
在vi中可搜尋某一字串,使光標移至該處。
/字串 往光標之后尋找該字串。
?字串 往光標之前尋找該字串。
n 往下繼續尋找下一個相同的字串。
N 往上繼續尋找下一個相同的字串。
21.14資料的連接
J 句子的連接。將光標所在之下一行連接至光標該行的后面。
若某行資料太長亦可將其分成兩行,只要將光標移至分開點,進入輸入模式 (可利用 a、i等指令)再按《Enter》即可。
21.15 環境的設定
:set nu 設定資料的行號。
:set nonu 取消行號設定。
:set ai 自動內縮。
:set noai 取消自動內縮。
自動內縮(automatic indentation)
在編輯文件或程序時,有時會遇到需要內縮的狀況,『:set ai』即提供自動內縮的功能,用下例解釋之:
.vi test
.(進入編輯視窗后)
this is the test for auto indent
《Tab》start indent ← :set ai (設自動內縮)
《Tab》data
《Tab》data
《Tab》data ← :set noai (取消自動內縮)
the end of auto indent.
.注:
21.16 ex指令
讀寫資料
:w 將緩沖區的資料寫入磁盤中。
:10,20w test 將第10行至第20行的資料寫入test文件。
:10,20w>>test 將第10行至第20行的資料加在test文件之后。
:r test 將test文件的資料讀入編輯緩沖區的最后。
刪除、復制及移動
:10,20d 刪除第10行至第20行的資料。
:10d 刪除第10行的資料。
:%d 刪除整個編輯緩沖區。
:10,20co30 將第10行至第20行的資料復制至第30行之后。
:10,20mo30 將第10行至第20行的資料移動至第30行之后。
字串搜尋與取代
s(substitute)指令可搜尋某行列范圍。g(global)指令則可搜尋整個編輯緩沖區的資料。
s指令以第一個滿足該條件的字串為其取代的對象,若該行有數個滿足該條件的字串,也僅能取代第一個,若想取代所有的字串則需加上g參數。
:1,$s/old/new/g 將文件中所有的『old』改成『new』。
:10,20s/^/ / 將第10行至第20行資料的最前面插入5個空白。
:%s/old/new/g 將編輯緩沖區中所有的『old』改成『new』。
21.17 恢復編輯時被中斷的文件
在編輯過程中,若系統當掉或連線中斷,而緩沖區的資料并還未被寫回磁盤時,當再度回到系統,執行下列指令即可回復中斷前的文件內容。
%vi -r filename
21.18 編輯多個文件
vi亦提供同時編輯多個文件的功能,方法如下:
%vi file1 file2 ...
當第一個文件編修完成后,可利用『:w』將該緩沖區存檔,而后再利用 『:n』載入下一個文件。