標籤

網誌存檔

2009年10月12日 星期一

Linux重要指令

一、unix下一些控制鍵的用法 :

Ctrl-C 中斷程式或 shell script

Ctrl-D 終止檔案輸入(EOF), 或 Logout

Ctrl-O 不要程式的輸出, 但不中斷程式

Ctrl-Q 繼續往下顯示

Ctrl-S 暫停往下顯示

Ctrl-U 刪除整行

Ctrl-W 刪除命令行的最後一個字(Word)

Ctrl-Z 暫停程式或 shell script


改變目錄和檔名的捷徑

. 表目前所在的目錄

.. 表目前所在目錄的上一層目錄

~ 使用者的根目錄

/ 根目錄

*以上可配合 ls,rm,mv,cp...等指令,靈活運用
examples:
%cd .
%cd ..
%mkdir ~/dir1

檔名字元取代

* 取代一組字元

? 取代一個字元

[ ] 可於[ ]內列舉適當取代的字元

- 在[ ]內指定範圍

examples:
%ls -l *.c 列出現在目錄中所有c的檔案
%ls [a-z]* 列出現在目錄中所有以a,b,...,z 開頭的檔案
%cp [abc]* dir 將以a,b,c為首的檔案拷備至dir目錄下


二、有關線上查詢的指令

1.man
用來介紹UNIX系統各個命令的詳細用法。

格式:man command
command 為 UNIX 所接受的命令
%man man
%man pwd


2.learn
幫助初學者學習使用系統之工具,欲結束程式打入bye即可。
(PANKU專用) %learn


3.info(help)
同learn指令,為幫助初學者,或忘記如何下指令之使用者之諮詢程式。
(PANKU專用) %help


三、有關檔案、目錄的指令

1.pwd 列出現在的工作目錄
%pwd
所顯示如下行所示
/home/s2847007


2.ls列出目錄內的檔案名稱
  格式:ls [options][directory][file]
options:
-a 印出全部的檔案。
-l 列出檔名外,並加上各種資訊。
-F 加此參數則會在目錄檔後加上 /,執行檔後加上 *,鏈結檔加上 @,其
餘為一般檔案。 
-g 列出檔案的所屬群體名稱。 
-t 列出的檔名依日期排序,若沒指定則依檔名排序。
 examples:
 %ls
 dir1 file.1
 %ls -a
 . .login file.1 dir1
 .. .cshrc file.2 dir2
 %ls -lg
 total 4
drwxr-xr-x 3 huang center 2048 Oct 14 10:30 bin
-rwxr-xr-x 1 huang center 233 Sep 11 09:38 letter
 %
 第一行 total 4 表示所 bin, letter 所佔的記憶體容量(以 block 為單
位)有關每個目錄、 檔案的資訊, 說明如下:  
- rwxr-xr-x 1 huang center 23 Sep 11 09:38 letter
(1) (2) (3) (4) (5) (6) (7) (8)

(1)檔案型態
d 表目錄
 c 表字元式特殊檔案
 b 表區塊式特殊檔案
  l 表鏈結檔案數
 - 表一般檔案
  s 表 socket 檔

(2)使用權:表示誰有權去讀取及使用此檔案,從左至右 3 字元為一組,
分成自己、群體及其它三部份,其中
r 表讀取
w 表寫入
x 表執行
- 表對應項目的動作不被執行

(3)鏈結次數:是指鏈結至該檔的數目,以目錄而言,表示在檔案系統中的
目錄個數。

(4)檔案擁有者:該檔的擁有者。

(5)檔案所屬群體:該檔的所屬群體。

(6)字元個數:即檔案大小,以位元(byte)為單位。

(7)最後一次修改的日期與時間:為檔案最後一次修改的日期與時間。

(8)檔案名稱

%ls -F
ac@  @letters/ actwhocheck@ bmag.nurc backup*
bmaf.bat* bmaf.nurc bmag.bat* bmag.his* catman

%ls -alt
*在 Convex 系統上,使用 ll 指令代替 ls -l,而以lf 指令代替ls -F



3.mkdir 建立目錄
格式:mkdir directory1 [directory2 ...]
%mkdir dir1 dir2



4.cd 改變目前的工作目錄
格式:cd [directory]
 %cd dir1



5.mv 移動或更改檔案名稱
格式:mv [options] file1 file2
mv [options] file dir
options:
-i 可避免覆蓋原有的檔案。
-f 強制覆蓋原有的檔案。

examples:
%mv file.1 file.2
%mv -i file.2 file.2
%mv -f file.2 file.3



6.rm 刪除檔案
格式:rm [options] file1 file2 file3 ...
options:
-i 刪除檔案前會先詢問
-f 強制刪除檔案
-r 刪除目錄及其下所有檔案、子目錄

examples:
%rm file.1 file.2 file.3
%rm -r dir1
*用 rm 刪除的檔案將永久的被刪除,救不回來。



7.rmdir 刪除目錄
格式:rmdir directory

%rmdir dir1
*被刪除的目錄必須是空的亦即不包含任何檔案或次目錄。



8.cp 複製檔案
  格式:cp [options] file1 file2
cp [options] dir1 dir2
cp [options] file directory

 options:
 -i 可避免覆蓋原有的檔案
 -r 拷備目錄及其下所有檔案、子目錄

 examples:
 %cp file.1 file.2
 %cp file.1 dir1
 %cp -r dir1 dir2


9.cat 顯示檔案內容,類似於 DOS 的type。
格式:cat [options] filename

options:
-n 產生行號
-s 檔案中連續空白行,僅輸出一行\line

examples:
%cat -n file.1
%cat -s file.2




10. more 顯示檔案內容,每次僅顯示一個螢幕之檔案內容。
格式:more [options] filename

options:
+line number 從第n行開始顯示
+/pattern 從含有pattern的前兩行開始顯示
-d 設定列印行數

在more中常用之指令如下:
space 鍵往下捲動一個螢幕
enter 鍵下捲動一行, 鍵入數字後,再按 enter 可向下捲動指定之行數
q 鍵停止輸出

%more -d20 more.man 一次顯示20行
%more +50 more.man 從第50行開始顯示
%more +/terminal more.man 從含有terminal的前兩行開始顯示



11.chmod 改變檔案許可權
  *權限說明:

(1) 權限可分為三種: 擁有者、同群組的使用者、其他使用者

(2) 權限之取得可由ls -lg 所顯示

r.....表示有讀取的權利
w.....表示有寫入的權利
x.....表示有可執行的權利

(3)其表示方式有以下三種:

+.....增加權限
-.....減少權限
=.....設定權限

(4)who可以是

u.....檔案擁有者的存取權
g.....檔案所屬群體的存取權
o.....其它使用者的存取權
a.....全部使用者的存取權

*如果省略此參數,則預設值為a
Ex: rwxr--r-x .

前面三個字母 (rwx).. 表示檔案擁有者的權利擁有者有可讀取、寫入和
可執行之權利.

中間三個字母 (r--)..表示同群組使用者的權利.
他只能讀取資料的權利,沒有寫入和執行的權利


後面三個字母 (r-x)..表示其他使用者的權利.
他有讀取資料和執行的權利,但沒有寫入資料的
權利

(5)若用數字法

r.....表示值為4
w.....表示值為2
x.....表示值為1
Ex: 5....表示為可讀取及可執行 (r+x=4+1)

(6)現在我們來看看以下的例子

%chomd u+x doc 將檔案doc加上擁有者可執行的權利

%chomd 745 doc 將檔案doc變為擁有者有可讀寫可執行
的權利 (r+w+x=7),同群組的使用者
只能有讀取資料的權利(r=4),其他使


12.jobs 列出在此台終端機上所有的job
  Ex :
  %mail s2847007
 Ctrl-z

 %cat > file.1
 Ctrl-z

 %vi
 Ctrl-z

 %Jobs

 [1] Stopped mails2847007

 [2] - Running cat>file.1

 [3] + Stopped vi

 (1) (2) (3) (4)

 (1)jobnumber工作代號
 (2)+表示current job
  -表示next current

 (3)每個job目前執行的狀況

 (4)job的作業內容





13.fg 啟動被暫停的 job,並改為前景作業
將目前目錄下在背景執行的 process 移至前景(foreground) 執行

格式:fg %job_number

  fg %2 將job 移至 前景 (foreground) 執行

Ex :
  %fg 啟動current job,改為前景作業

  %fg%1 啟動job1,改為前景作業或%%1 亦可


14.bg 啟動被暫停的job,並改為背景作業
將目前目錄下在背景執行的 process 移至背景(background) 執行

格式:bg %job_number

Ex :
  CRTL-Z 先將在執行的 process 暫停

 bg 方可下 bg 命令將此 job 移至 background 執行
  %bg 啟動currentjob,改為背景作業

%bg%1 啟動job1,改為背景作業或

%%1& 亦可
用者有讀取資料和執行的權利(r+x=5)

15.stop 暫停一個正在執行的job
格式:stop %job_number

Ex :
%stop %2 暫停%2正在執行的工作



16.kill 刪除一個job
格式:kill %job_number 或 kill pid

Ex :
%kill %3

%kill 8122

*如果尚無法清除此 job 則可改用以 kill -9 取代 kill指令。

%kill -9 8122

kill 刪除 process 或 job

kill -9 1340 刪除 process 1340,必須是自已的process

kill %1 刪除第一個 Job (background 或 暫停)



17.at
指一串指令於特定時間執行某些指令, 執行後產生的 standard output 必
須自己以輸出轉向的方式處理,否則看不到結果。

格式:at [options] time [day][script]

options:

-m......執行完畢後會送mail給使用者。當執行過程中若
有錯誤,則雖未給予此參數,亦會送 mail 告知
使用者。

time....執行命令的時間,前2位是時,後2位是分。

day.....執行命令的日期,若省略則指當天。

script..內含要執行的命令,類似pc的批次檔,若省略此
參數,則可將命令直接終端機輸入,欲結束按
Ctrl-d。

Ex :
%at -m 1040 Aug 20 在8月20日10點40分時,去
執行who>list的動作

at > who > list 執行完送一mail給使用者

Ctrl-d

%at -m 1050 scrfile 在10點50分時,去執行script
的動作,執行完送一mail給使
用者

 %at 6:00 tomorrow file1 在明天早晨 6:00 開始執行批
批次檔 file1


18. atq 查詢等待執行之作業(顯示有那些 Job 在 queue 中)
Ex :
%atq
Rank Execution Date Owner Job# Queue JobName

1st Aug 14,1996 17:00 2847007 4510 a stdin


19.atrm job# 取消 at 命令,刪除 at_queue 中的 job
Ex :
%atrm 4510 刪除 queue 中的Job_number 4510


20.write 送一個訊息給正在上線使用的 User

21.wall 送一個訊息給正所有在上線使用的 User

22. batch 使一串指令在 Background 執行 (執行速度會較慢)
@ batch file3 執行批次檔 file3

23.history 顯示前幾次所鍵入的命令(預設是 40 個)

24.!! 重覆上一命令

25.passwd 更改密碼

26.chfn 更改 full name

27.clear 清除終端機螢幕

28.date 顯示日期(可以特殊日期格式顯示)

29.df 顯示磁碟使用量

30.du 顯示目錄下所使用的磁碟空間

  du . 顯示現目錄下之各子目錄使用 Block 數

du -s . 只顯示現目錄以下所使用的 Block 總計


31.env 顯示目前所有的環境變數

32.setenv
指定變數值於 shell 中, 供子 shell 使用 setenv LD_LIBRARY_PATH
/usr/openwin/lib


33.set 顯示或定義變數
  set term=vt100


34.unset 取消某個變數的定義
  unset term


35.stty 設定終端機
stty pass8 rows 24


36.finger 顯示遠端主機 login 狀況
  finger @dec2


37.rehash
若有新的命令檔存入 path 所指定的目錄時, 使hash table 重建


38.head 顯示檔首( 行,block,字元)
head -5 mbox 顯示 mbox 前五行, 若未指定預設是10 行


39.tail 顯示檔尾(行、Block、字元)
tail -100 file1


40.rcp 與遠端主機間的檔案拷貝
rcp file1 mail:/home/user/user1 將 file1 拷貝至
mail_host 的/home/user/user1


41.rsh 執行遠端主機的命令
rsh sparc20 ls -al 執行 sparc20 的命令


42.rlogin Login至遠端主機目錄下之子目錄 games
rlogin sparc4


43.split 將大檔案分割成數個小檔案
split -100 big_file sf 將 big_file
以每100行為一個檔案寫至 staa sfab ...


44.sort 排序檔案內容
sort file1 > file2
將 file1 由小到大排序至 file2

sort -t: +2 file3 > file4
將 file3 以 : 作欄分界,以第三欄排序至 file4

45.cut 挑出檔案的部份欄資料
cut -f1,5 -d. file1 >file2
將 file1 以 . 作欄分界,分出第一、五欄寫至 file


46.source 執行一 shell script file
source .cshrc


47.tar 產生或解開檔案庫

tar -cvf bin.tar ./bin
將 ./bin 下之檔案及其子目錄製成一檔案庫 bin.tar

 tar -xvf bin.tar 將檔案庫 bin.tar 解開

tar -xzvf chdrvfont.tar.gz 將 chdrvfont.tar.gz 解開


48.umask 設定以後建立檔案及目錄的存取權利
umask 077 使其它 User 皆無法讀寫執行您的檔案及目錄


49.wc 計算檔案長度


50.find 找尋檔案

find . -atime +7 -print
找尋現目錄下的所有子目錄及檔案,其最後一次讀取為 7 天以上者

find /usr -name "*.h" -print
找尋 /usr下的所有子目錄及檔案, 其檔名為.h 結尾者


51.uuencode 將二進位檔以編碼方式變成一 ASCII 檔
uuencode file_a file_b >file_c
將 file_a 編碼並以 file_b 為 Label 寫至file_c


52.uudecode 將 uuencode 過的檔案回復為原來的內容
  uudecode file_c 解碼後的檔案其檔名為 file_b


53.compress 將檔案壓縮以減少空間
compress file1 >file1.Z


54.uncompress 將壓縮過的檔案回復
uncompress file1.Z


55.diff 比較兩個本文檔不同的地方


56.cmp 比較兩個本文檔或非本文檔不同的地方


57.sh 開一個 Bourne Shell 命令解譯器


58.ln 連結檔案或目錄

ln file1 file2 將原先檔案 file1 連結一份至 file2

ln -s /usr/games games 將 /usr/grams 連結成現目


59.grep 在本文檔中找尋字串

grep 'how are you' file1

ps -aux |grep user1 找尋所有 process 中有 user1


四、輸出入轉向
在 UNIX 系統中,大多數的指令,內定從鍵盤輸入資料,而將輸出資料顯示
在終端機螢幕上,因此鍵盤稱為標準輸入,終端機螢幕稱為標準輸出。但使用者
可以使用一種具有重定方向特性的指令來更改這些內定動作,將其輸出輸入的螢
幕、鍵盤改為檔案或其它設備,而原命令不須做任何的修改。

利用重定方向的特性,我們可以做以下的動作:

.將輸出原本應顯示在終端機螢幕上的程式,改為輸出給一個指定的檔案。

.將原本該終端機鍵盤輸入的程式,改為以檔案做為其輸入資料。

.將一程式的輸出,當成另一程式的輸入資料。



1. > 重定標準輸出的方向
格式:command > newfile

%ls -al > list

*將 ls-al 命令的輸出資料放在名為 list 的檔案中。

* 若將輸出轉向一個已存在的檔案時, 會把原檔案內容蓋掉, 為避免此種
情況發生,請於事先下 set noclobber 命令,或將此命令加入.cshrc 檔
,然後再執行

%source.cshrc

%set noclobber

%date > list

list:file exists

 *可用 >! 強迫 overwrite

%date >! list


2. >> 重定和附加標準輸出
格式:command >> file

透過”>>”符號,可將一個命令的輸出附加於一個檔案之後。

%date > list.new將date命令的輸出放在list.new的檔案中

%pwd >>list.new再將pwd命令的輸出附加在list.new的檔案中


3.重定標準輸入的方向
格式:command file

透過” ”符號來重導命令的輸入設備。

%cat list

%mail user letter


4. >& 標準錯誤重導方向
透過”>& ”符號,可將標準錯誤重導至與標準輸出相同的目標。

%ls-al >& list

*若要將標準輸出和標準錯誤區隔開,請使用下列格式的命令

%(command>outfile) >& errorfile

%(program>/dev/null) >& /dev/tty

* 不顧標準輸出,只看程式所產生的錯誤訊息。( 當你執行較大程式時,可
使用此指令,以節省時間 )



5.程式的連結
%ls -al > file.list 將ls -al的輸出放在名為file.list檔案

%pr file.list > temp 再將此檔透過pr做文件處理,並將處理完後的資
料放在temp檔

%lpr temp 將temp檔列印出來



6.| 連結命令
格式:command|command

某個命令的輸出可以直接作為另一個命令的輸入。

%ps -aux|more



7.其它應用
(1)用 cat 建立新檔

%cat > work.txt
..........
.......... 按Ctrl-d結束

(2)用 cat 合併檔案

%cat file1 file2 > files
將 file1 及 file2 的內容合併在 files

%cat file3 >> files
將 file3 的內容附加在 files 之後。


五、有關列印的指令

1.lpr 送印指令
格式:lpr [options] filename ....

options:
-Pprinter 指定印表機,若省略此參數,則指預設印表機lp

examples:
%lpr
%lpr -Psp



2.lprm 取消已送印的檔案
格式:lprm [options] job#

options:
-Pprinter 印表機,若省略此參數,則為預設印表機 lp

-username 將此user欲列印的檔案取消,若省略此參數,
則指自己

examples:
%lpq -Psp

Rank Owner Job Files Total Size
1st s2847007 235 test.1 38 bytes
2nd s2847007 236 test.2 38 bytes
3rd s2847007 237 test.3 300 bytes

%lprm -Psp 236 237



六、節省輸出入時間之指令
1.history 將你所下過的指令記錄下來
格式:history [options]

 options:
 -r 以反方向顯示所下過的指令
 n 顯示前n次所下過的指令

examples:
%history
%history -r
%history 5
%history -r 5

(1)set history=n 設定history記錄命令的量
%set history=50
*從目前開始,直到退離系統,保留最後50 個命 令。
*如果你想讓此命令永遠有效,可將此命令加入.cshrc
這個檔案內,然後執行。 %source .cshrc
  (2)如何利用history 記錄的命令
%history
1 w
2 date
3 vi .cshrc
4 pwd
5 ls -al
6 history

%!! 執行前一次的命令,即history
%!4 執行第四次的命令,即pwd
%!vi 執行最近一次的\fs24 vi 命令,即vi .cshrc
%!?ls? 執行最近一次命令中含有ls 的命令,即ls -al
%!5 /usr 執行第五次的命令並加/usr,即ls -al /usr
%!2 > status 即date > status



2.alias
(1)alias 將命令用一別名取代

格式:alias alias_name command
examples:

%alias copy 'cp -i'
%copy
*執行 copy 視同執行'cp -i' 。
*可將 alias 的設定加入.cshrc檔內,讓每次進系統時,這些設定
永遠有效。

(2)unalias 取消alias的設定

  格式:unalias alias_name examples:%unalias copy

(3)亦可將數個命令結合起來取一個別名

格式:alias alias_name 'command;command;....'
examples:
%alias status 'date;uptime'

(4)alias 用 \!* 來傳參數

examples:
%alias L 'ls -l \!* | more'
%L /usr 視同執行\fs24 'ls -l /usr | more',/usr取代 alias L
中的\!*


(5)指令更正

格式: ^incorrect^correct
*針對前一次的指令作更改

example:
%pc file.1 file.2
pc: Command not found.
%^pc^cp
cp file.1 file.2
格式:!5:s^search^replacement
或 !5:s/search/replacement

*針對history所記錄的指令作更改

examples:
%!3:s/.cshrc/myfile 將第3次命令中的.cshrc改為myfile
%vi myfile

*先確定指令更改無誤後再執行
%!3:p:s/.cshrc/myfile 加上參數p,可先確認更改動作是否無
%!! 誤,確定後vi myfile,再使用!!執行
%vi myfile
%!!


七、作業環境之設定
當你進入系統時,CShell 會自動地執行使用者目錄下的.login 及.cshrc。
若是在作業的當中啟開某個 subshell,使.cshrc 會再執行一次,其目的是讓你
的工作,預先設定一個完整的作業環境以便於使用。


1.set 設定 Shell 變數
格式:set variable 或 set variable = value

(1)欲看目前的設定,可鍵入set指令。

%set

argv()

history 40
..........
..........



2.set autologout=n
%set autologout=30 設定於30分鐘內,若使用者一直未按任一鍵,則自動
將此使用者退離系統


3.set history=n
%set history=50 設定歷史命令記錄最後50個指令


4.set savehist=n
% set savehist=50 將最後 50 個指令儲存起來, 做為下次進入系統時的
歷史命令


5.set prompt=variable
%set prompt=% 將系統提示符號改為%


6.setpath=dir
設定路徑
%setpath=(.~~/bin /usr/local /usr/ucb /usr/bin /usr/etc)

%setpath=($path $OPENWINHOME/bin
$OPENWINHOME/bin/xview)


7.set term=ternimal_type
設定終端機型號
%set term=vt100


8.set ignoreeof
防止鍵入 Ctrl-d 時執行logout的動作


9.set notify
背景作業執行完畢,會顯示 [Done] 以告知使用者


10.set noclobber
當已存在之檔案被 overwrite 時,會顯示 "Fileexists" 訊息

*以上所介紹的 set 指令,可將常用之指令寫在.cshrc檔內, 如
此使用者可以不必每次進入系統都要做這些設定動作。

Ex :
%source.cshrc

*若要取消設定則鍵入 unset variable。

*注意:重新修改的.login,須先logout離開,再login進來使用

另外節省輸入時間之指令alias也可寫在.cshrc檔內

%alias h 'history'

11.setenv 設定環境變數

%setenv OPENWINHOME /usr/openwin

%setenv TERM vt100

*設定終端機型號

*若欲知環境變數,鍵入printenv
%printenv
HOME=/home1/center/kai
SHELL=/bin/csh
TERM=sun
USER=kai
PATH=......
..........



八、其它UNIX的指令
1.date 顯示現在之年、月、日、時間、及星期。
%date

Sat Oct 26 10:10 :40CST1991



2.cal 顯示月曆
格式:cal [[month] year]

Ex :
%cal

%cal 81900



3.who 查詢現在進入系統的使用者。
Ex :
%who



4.which 查詢某一個執行檔位於那一個目錄下。
Ex :
%which vi



5.quota 使用者可使用之磁碟空間(kbyte)及檔案個數。
Ex :
%quota -v