歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> Linux基礎知識

基礎知識 - linux知識大全

linux知識大全
2004-04-23 15:18 pm
來自:Linux文檔
現載:Www.8s8s.coM
地址:無名

shell命令

bash 是大多數linux系統的缺省外殼。它克服了Bourne 外殼的缺點,又和Bourne 外殼完全兼容。
Bash有以下的特點:
·補全命令行。當你在bash 命令提示符下輸入命令或程序名時,你不必輸全命令或程序名,按Tab 鍵,bash將自動補全命令或程序名。
·通配符。在bash下可以使用通配符* 和?。*可以替代多個字符,而?則替代一個字符。
·歷史命令。bash 能自動跟蹤你每次輸入的命令,並把輸入的命令保存在歷史列表緩沖區。緩沖區的大小由HISTSIZE變量控制。當你每次登錄後,home 目錄下的.bash_history 文件將初始化你的歷史列表緩沖區。你也能通過history 和fc 命令執行、編輯歷史命令。
·別名。在bash下,可用alias 和unalias 命令給命令或可執行程序起別名和清除別名。這樣你可以用自己習慣的方式輸入命令。
·輸入/輸出重定向。輸入重定向用於改變命令的輸入,輸出重定向用於改變命令的輸出。輸出重定向更為常用,它經常用於將命令的結果輸入到文件中,而不是屏幕上。輸入重定向的命令是<,輸出重定向的命令是>。
·管道。管道用於將一系列的命令連接起來。也就是把前面的命令的輸出作為後面的命令的輸入。管道的命令是|。
·提示符。bash 有兩級提示符。第一級提示符就是你登錄外殼時見到的,缺省為$。你可以通過重新給ps1變量賦值來改變第一級提示符。當bash需要進一步提示以便補全命令時,會顯示第二級提示符。第二級提示符缺省為>,你可以通過重新給ps2變量賦值來改變第二級提示符。一些特殊意義的字符也可以加入提示符賦值中。
·作業控制。作業控制是指在一個作業執行過程中,控制執行的狀態。你可以掛起一個正在執行的進程,並在以後恢復該進程的執行。按下Ctrl+Z 掛起正在執行的進程,用bg命令使進程恢復在後台執行,用fg命令使進程恢復在前台執行。

這裡列出的僅僅是最常用的bash命令子集,其他不太常用,但是在某方面有特殊用途的命令會在這個技術問題的目錄下專門提到(例如:ncheck命令會在文件系統維護裡介紹)

[目錄]
用戶常用

查找
find命令用於搜索目錄樹,並對目錄樹上的所有文件執行某種操作,參數是目錄名表(指出從哪些起點開始搜索),還可給出一個或多個選項,規定對每個文件執行什麼操作。
find / -print 將列出當前工作目錄下的目錄樹的每一個文件。
find / -user bob -print 將列出在系統中可找到的屬於bob用戶的所有文件。
find /usr/bob -perm 666 -print 將列出/usr/bob目錄樹下所有存取許可為666的文件。若將666改為-666則將列出所有具有包含了666在內的存取許可方式的文件(如777)。
find /usr/bob -type b -print 將列出/usr/bob目錄樹下所有塊特別文件(c為字符特別文件)。
find / -user root -perm -4000 -exec ls -l {} ; 是一個較復雜的命令,-exec COMMAND ;允許對所找到的每個文件運行指定的命令COMMAND。若COMMAND中含有{ },則{ }將由f i n d所找到的文件名替換。COMMAND必須以 ;結束。
各選項可組合使用以達到更強的功能。
遠程登陸
語法:rlogin 主機名[-1 用戶名]
例如:
rlogin doc 遠程登錄到工作站doc 中。
rlogin doc -l user 使用user 帳號登錄到工作站doc 中。

語法:telnet 主機名或telnet IP地址
例如:
telnet doc
telnet 140.109.20.251

更改密碼
語法: passwd
Old password: <輸入舊密碼>
New password: <輸入新密碼(最好為6~8字,英文字母與數字混合) >
Retype new password: <再輸入一次密碼>

檢查自己所屬的工作組名稱
語法:groups

查看系統中的用戶
語法: who 或finger
語法: who
語法: finger 用戶名或finger 用戶名@域名

改變用戶名
語法: su 用戶名
例如:
su user 進入用戶user 的帳號。
passwrod : <輸入用戶user 的密碼>

查看自己用戶名
語法: whoami 查看登錄時的用戶名。
語法: whoami 查看當前的用戶名。若已執行過su命令,則顯示出此用戶的用戶名。

查看當前系統上所有工作站的用戶
語法: rusers
按Ctrl+C> 結束

與某工作站上的用戶交談
語法: talk 用戶名@主機名或talk 用戶名@ I P地址
例如:
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 即可互相交談。最後可按Ctrl + C結束。

顯示文檔幫助
語法: man 命令
例如:
man ls

語法:howto 主題
例如:
howto man

[目錄]

--------------------------------------------------------------------------------

文件或目錄處理

列出文件或目錄下的文件名。
語法: ls [-atFlgR] [name]
name :文件名或目錄名。
例如:
ls 列出目前目錄下的文件名。
ls -a 列出包括以.開始的隱藏文件的所有文件名。
ls -t 依照文件最後修改時間的順序列出文件名。
ls -F 列出當前目錄下的文件名及其類型。以/ 結尾表示為目錄名,以* 結尾表示為
可執行文件,以@ 結尾表示為符號連接。
ls -l 列出目錄下所有文件的權限、所有者、文件大小、修改時間及名稱。
ls -lg 同上,並顯示出文件的所有者工作組名。
ls -R 顯示出目錄下以及其所有子目錄的文件名。
改變當前工作目錄
語法:cd [name]
name:目錄名、路徑或目錄縮寫。
例如:
cd 改變目錄位置至用戶登錄時的工作目錄。
cd dir1 改變目錄位置至d i r 1目錄下。
cd ~user 改變目錄位置至用戶的工作目錄。
cd .. 改變目錄位置至當前目錄的父目錄。
cd ../user 改變目錄位置至相對路徑user 的目錄下。
cd /../.. 改變目錄位置至絕對路徑的目錄位置下。
cd ~ 改變目錄位置至用戶登錄時的工作目錄。

復制文件或目錄
語法: cp [-r] 源地址目的地址
例如:
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 復制整個目錄。

移動文件目錄或修改名稱
語法: mv 源地址目的地址
例如:
mv file1 file2 將文件file1更名為file2。
mv file1 dir1 將文件file1移到目錄dir1 下,文件名仍為file1。
mv dir1 dir2 將目錄dir1 更改為目錄dir2。

建立新的目錄
語法: mkdir 目錄名
例如:
mkdir dir1 建立一新目錄dir1。

刪除目錄
語法: rmdir 目錄名或rm 目錄名
例如:
rmdir dir1 刪除目錄dir1,但dir1 下必須沒有文件存在,否則無法刪除。
rm -r dir1 刪除目錄dir1及其子目錄下所有文件。

刪除文件
語法: rm 文件名
例如:
rm file1 刪除文件名為file1 的文件。
rm file? 刪除文件名中有五個字符且前四個字符為file 的所有文件。
rm f* 刪除文件名中以f 為字首的所有文件。

列出當前所在的目錄位置
語法: pwd

查看文件內容
語法: cat 文件名
例如:
cat file1 以連續顯示方式,查看文件名file1 的內容。

分頁查看文件內容
語法: more 文件名或cat 文件名| more
例如:
more file1 以分頁方式查看文件名file1 的內容。
cat file1 | more 以分頁方式查看文件名file1 的內容。

查看目錄所占磁盤容量
語法: du [-s] 目錄
例如:
du dir1 顯示目錄dir1 的總容量及其子目錄的容量(以KB 為單位)。
du -s dir1 顯示目錄dir1 的總容量。

文件的鏈接
同一文件,可擁有一個以上的名稱,也就是把一個文件進行鏈接。
語法:ln 老文件名新文件名
例如:
ln file1 file2 將文件file2鏈接至文件file1。
語法:ln -s 老文件名新文件名
例如:
ln -s file3 file4 將文件file4 鏈接至文件file3。

[目錄]

--------------------------------------------------------------------------------

文件內容操作

改變文件或目錄的最後修改時間
語法:touch name
name:文件名或目錄名。
2.3.21 文件中字符串的查尋
語法:grep string file
例如:
grep abc file1 尋找文件f i l e 1中包含字符串abc 所在行的文本內容。
查尋文件或命令的路徑
語法:whereis command 顯示命令的路徑。
語法:which command 顯示命令的路徑,及使用者所定義的別名。
語法:whatis command 顯示命令功能的摘要。
語法:find search-path -name filename -print 搜尋指定路徑下某文件的路徑。
例如:
find / -name file1 -print 自根目錄下尋找文件file1 的路徑。

比較文件或目錄的內容
語法:diff [-r] name1 name2
name1 name2:可同時為文件名或目錄名。
例如:
diff file1 file2 比較文件file1 與file2 內各行的不同之處。
diff -r dir1 dir2 比較目錄dir1 與dir2 內各文件的不同之處。

文件打印輸出
用戶可用.login 文件中的setenv PRINTER來設定打印機名。
例如:
setenv PRINTER sp 設定自sp 打印機打印資料。

一般文件的打印
語法:lpr [-P打印機名] 文件名
例如:
lpr file1 或lpr -Psp file1 自sp打印機打印文件file1。
語法:enscript [-P打印機名] 文件名
例如:
enscript file3 或enscript -Psp file3 自sp打印機打印文件file3。

troff 文件的打印
語法:ptroff [-P打印機名] [-man][-ms] 文件名
例如:
ptroff -Psp -man /usr/man/man1/lpr1 以troff 格式,自sp 打印機打印lpr1 命令的使用說明。

[目錄]

--------------------------------------------------------------------------------

文件傳輸

1. 拷貝文件或目錄至遠程工作站
語法: rcp [-r] 源地址主機名:目的地址
源地址文件名、目錄名或路徑。
主機名工作站名。目的地址路徑名稱。
例如:
rcp file1 doc:/home/user 將文件f i l e 1拷貝到工作站doc 路徑/home/user 下。
rcp -r dir1 doc:/home/user 將目錄d i r 1拷貝到工作站doc 路徑/home/user 下。
2. 自遠程工作站,拷貝文件或目錄
語法: rcp [-r] 主機名:源地址目的地址
主機名工作站名。
源地址路徑名。
目的地址、文件名、目錄名或路徑。
例如:
rcp doc:/home/user/file1 file2 將工作站d o c路徑/home/user 下的目錄d i r 1,拷貝到當前工作站的目錄下,目錄名仍為d i r 1。
rcp -r doc:/home/user/dir1 . 將工作站doc 路徑/home/user 下的目錄d i r 1,拷貝到當前工作站的目錄下,目錄名仍為d i r 1。

3. 本地工作站與遠程工作站之間的文件傳輸
必須擁有遠程工作站的帳號及密碼,才可進行傳輸工作。
語法: ftp 主機名或ftp ip地址
例如:
ftp doc 與遠程工作站doc 之間進行文件傳輸。
Name (doc:user-name): <輸入帳號>
Password (doc:user-password): <輸入密碼>
ftp> help 列出ftp 文件傳輸時可使用的命令。
ftp> !ls 列出本地工作站當前目錄下的所有文件名。
ftp> !pwd 列出本地工作站當前所在的目錄位置。
ftp> ls 列出遠程工作站當前目錄下的所有文件名。
ftp> dir 列出遠程工作站當前目錄下的所有文件名。
ftp> dir . |more 分頁列出遠程工作站當前目錄下的所有文件名。
ftp> pwd 列出遠程工作站當前所在的目錄位置。
ftp> cd dir1 更改遠程工作站的工作目錄位置至dir1 之下。
ftp> get file1 將遠程工作站的文件f i l e 1拷貝到本地工作站中。
ftp> put file2 將本地工作站的文件f i l e 2拷貝到遠程工作站中。
ftp> mget *.c 將遠程工作站中擴展文件名為c 的所有文件拷貝到本地工作站中。
ftp> mput *.txt 將本地工作站中擴展文件名為txt 的所有文件拷貝到遠程工作站中。
ftp> prompt 切換交互式指令(使用mput/mget 時不是每個文件皆詢問y e s / n o )。
ftp> quit 結束ftp 工作。
ftp> bye 結束ftp 工作。
注意從PC與工作站間的文件傳輸也可透過在PC端的FTP指令進行文件傳輸,指令用法與上述指令大致相同。

[目錄]

--------------------------------------------------------------------------------

文件權限的設定

改變文件或目錄的讀、寫、執行權限
語法:chmod [-R] mode name
name:文件名或目錄名。
mode: 3個8位數字或rwx的組合。r-read (讀),w-write (寫),x-execute (執行),u-user (當前用戶),g-group(組),o-other(其他用戶)。
例如:
chmod 755 dir1 對於目錄dir1,設定成任何使用者皆有讀取及執行的權利,但只有所
有者可做修改。
chmod 700 file1 對於文件file1,設定只有所有者可以讀、寫和執行的權利。
chmod u+x file2 對於文件file2,增加當前用戶可以執行的權利。
chmod g+x file3 對於文件file3,增加工作組使用者可執行的權利。
chmod o-r file4 對於文件file4,刪除其他使用者可讀取的權利。
改變文件或目錄的所有權
語法:chown [-R] 用戶名name
name:文件名或目錄名。
例如:
chown user file1 將文件file1 改為用戶user 所有。
chown -R user dir1 將目錄dir1及其子目錄下面的所有文件改為用戶user 所有。

改變文件或目錄工作組所有權
語法:chgrp [-R] 工作組名name
name:文件名或目錄名
例如:
chgrp vlsi file1 將文件file1 的工作組所有權改為vlsi 工作組所有。
chgrp -R image dir1 將目錄dir1及其子目錄下面的所有文件,改為image 工作組所有。

[目錄]

--------------------------------------------------------------------------------

進程控制

1.查看系統中的進程
語法:ps [-aux]
例如:
p s或ps -x 查看系統中,屬於自己的進程。
ps -au 查看系統中,所有用戶的進程。
ps -aux 查看系統中,包含系統內部的及所有用戶的進程。
2. 結束或終止進程
語法:kill [-9] PID
PID:利用ps 命令所查出的進程號。
例如:
kill 456或kill -9 456 終止進程號為456 的進程。

3. 在後台執行進程的方式
語法:命令&
例如:
cc file1.c & 將編譯file1.c 文件的工作置於後台執行。
語法:按下Control+Z鍵,暫停正在執行的進程。鍵入bg命令,將暫停的進程置於後台繼
續執行。
例如:
cc file2.c
^ Z
Stopped
bg

4. 查看正在後台中執行的進程
語法:jobs

5. 結束或終止後台中的進程
語法:kill %n
n:利用jobs命令查看出的後台作業號
例如:
kill % 終止在後台中的第一個進程。
kill %2 終止在後台中的第二個進程。

[目錄]

--------------------------------------------------------------------------------

命令管道

語法:命令1 | 命令2 將命令1的執行結果送到命令2,做為命令2的輸入。
例如:
ls -Rl | more 以分頁方式列出當前目錄及其子目錄下所有文件的名稱。
cat file1 | more 以分頁方式列出文件file1 的內容。

[目錄]

--------------------------------------------------------------------------------

輸入輸出控制

1. 標准輸入的控制
語法:命令< 文件將文件做為命令的輸入。
例如:
mail -s “mail test” [email protected] < file1 將文件file1 當做信件的內容,主
題名稱為mail test,送給收信人。
2. 標准輸出的控制
語法:命令> 文件將命令的執行結果送至指定的文件中。
例如:
ls -l > list 將執行“ls -l” 命令的結果寫入文件list 中。
語法:命令>! 文件將命令的執行結果送至指定的文件中,若文件已經存在,則覆蓋。
例如:
ls -lg >! list 將執行“ls - lg” 命令的結果覆蓋寫入文件list 中。
語法:命令>& 文件將命令執行時屏幕上所產生的任何信息寫入指定的文件中。
例如:
cc file1.c >& error 將編譯file1.c 文件時所產生的任何信息寫入文件error 中。
語法:命令>> 文件將命令執行的結果附加到指定的文件中。
例如:
ls - lag >> list 將執行“ls - lag” 命令的結果附加到文件list 中。
語法:命令>>& 文件將命令執行時屏幕上所產生的任何信息附加到指定的文件中。
例如:
cc file2.c >>& error 將編譯file2.c 文件時屏幕所產生的任何信息附加到文件error 中。

[目錄]

--------------------------------------------------------------------------------

編輯

[目錄]

--------------------------------------------------------------------------------

Vi

Vi 輸入模式
要如何輸入資料呢?有好幾個指令可以進入輸入模式:

新增 (append)
a 從游標所在位置後面開始新增資料,游標後的資料隨新增資料向後移動。
A 從游標所在列最後面的地方開始新增資料。

插入 (insert)
i 從游標所在位置前面開始插入資料,游標後的資料隨新增資料向後移動。
I 從游標所在列的第一個非空白字元前面開始插入資料。

開始 (open)
o 在游標所在列下新增一列並進入輸入模式。
O 在游標所在列上方新增一列並進入輸入模式。

也許文字敘述看起來有點繁雜,但是只要實際操作一下馬上可以了解這些操作方式。實務很重要,尤其是電腦方面的東西隨時可以嘗試及驗證結果。極力建議實際去使用它而不要只是猛 K 文件,才有事半功倍的效用。(注:此段為廢話。)

Vi 基本編輯

配合一般鍵盤上的功能鍵,像是方向鍵、[Insert] 、[Delete] 等等,現在你應該已經可以利用 vi 來處理文字資料了。當然 vi 還提供其他許許多多功能讓文字的處理更形方便,有興趣的看倌請繼續。

在繼續下去之前先來點 BCC 吧。電腦有許多廠牌,不同的硬體及作業系統。PC 也不是僅僅只有 IBM PC 及其相容品而已。事實上,包括鍵盤,終端機等等往往都有不同的規格。這代表什麽?

在文書編輯軟體上會遇這樣的問題,某些電腦的鍵盤上沒有特定的幾個功能鍵!那麽不就有某些功能不能用了?這個問題在 Unix 系統上也一樣,幾乎各大電腦廠商都有自己的 Unix 系統,而 vi 的操作方法也會隨之有點出入。我們固然可以用 PC 的鍵盤來說明 vi 的操作,但是還是得提一下這個問題。

刪除與修改

何謂編輯?在這裡我們認為是文字的新增修改以及刪除,甚至包括文字區塊的搬移、復制等等。這裡先介紹 vi 的如何做刪除與修改。(注意:在 vi 的原始觀念裡,輸入跟編輯是兩碼子事。編輯是在指令模式下操作的,先利用指令移動游標來定位要進行編輯的地方,然後才下指令做編輯。)

x 刪除游標所在字元。
dd 刪除游標所在的列。
r 修改游標所在字元,r 後接著要修正的字元。
R 進入取代狀態,新增資料會覆蓋原先資料,直到按 [ESC] 回到指令模式下為止。
s 刪除游標所在字元,並進入輸入模式。
S 刪除游標所在的列,並進入輸入模式。

其實呢,在 PC 上根本沒有這麽麻煩!輸入跟編輯都可以在輸入模式下完成。例如要刪除字元,直接按 [Delete] 不就得了。而插入狀態與取代狀態可以直接用 [Insert] 切換,犯不著用什麽指令模式的編輯指令。不過就如前面所提到的,這些指令幾乎是每台終端機都能用,而不是僅僅在 PC 上。

在指令模式下移動游標的基本指令是 h, j, k, l 。想來各位現在也應該能猜到只要直接用 PC 的方向鍵就可以了,而且無論在指令模式或輸入模式下都可以。多容易不是。

當然 PC 鍵盤也有不足之處。有個很好用的指令 u 可以恢復被刪除的資料,而 U 指令則可以恢復游標所在列的所有改變。這與某些電腦上的 [Undo] 按鍵功能相同。

Vi 進階應用

相信現在對於 vi 應該已經有相當的認識。處理文字也不會有什麽麻煩才對。如果有興趣善用 vi 的其它功能進一步簡化操作過程,不妨繼續看下去。

移動游標

由於許多編輯工作是藉由游標來定位,所以 vi 提供許多移動游標的方式,這個我們列幾張簡表來說明(這些當然是指令模式下的指令):

┌—————┬—————————————┬—————┐
│指令 │說明 │功能鍵 │
├—————┼—————————————┼—————┤
│0 │移動到游標所在列的最前面 │[Home] │
├—————┼—————————————┼—————┤
│$ │移動到游標所在列的最後面 │[End] │
├—————┼—————————————┼—————┤
│[CTRL][d]│向下半頁 │ │
├—————┼—————————————┼—————┤
│[CTRL][f]│向下一頁 │[PageDown]│
├—————┼—————————————┼—————┤
│[CTRL][u]│向上半頁 │ │
├—————┼—————————————┼—————┤
│[CTRL][b]│向上一頁 │[PageUp] │
└—————┴—————————————┴—————┘
┌——┬—————————————————┐
│指令│說明 │
├——┼—————————————————┤
│H │移動到視窗的第一列 │
├——┼—————————————————┤
│M │移動到視窗的中間列 │
├——┼—————————————————┤
│L │移動到視窗的最後列 │
├——┼—————————————————┤
│b │移動到下個字的第一個字母 │
├——┼—————————————————┤
│w │移動到上個字的第一個字母 │
├——┼—————————————————┤
│e │移動到下個字的最後一個字母 │
├——┼—————————————————┤
│^ │移動到游標所在列的第一個非空白字元│
└——┴—————————————————┘
┌——┬———————————————————┐
│指令│說明 │
├——┼———————————————————┤
│n- │減號移動到上一列的第一個非空白字元 │
│ │前面加上數字可以指定移動到以上 n 列 │
├——┼———————————————————┤
│n+ │加號移動到下一列的第一個非空白字元 │
│ │前面加上數字可以指定移動到以下 n 列 │
├——┼———————————————————┤
│nG │直接用數字 n 加上大寫 G 移動到第 n 列│
└——┴———————————————————┘
┌————┬———————————————┐
│指令 │說明 │
├————┼———————————————┤
│fx │往右移動到 x 字元上 │
│Fx │往左移動到 x 字元上 │
├————┼———————————————┤
│tx │往右移動到 x 字元前 │
│Tx │往左移動到 x 字元前 │
├————┼———————————————┤
│; │配合 f&t 使用,重復一次 │
│, │配合 f&t 使用,反方向重復一次│
├————┼———————————————┤
│/string │往右移動到有 string 的地方 │
│?string │往左移動到有 string 的地方 │
├————┼———————————————┤
│n │配合 /&? 使用,重復一次 │
│N │配合 /&? 使用,反方向重復一次│
└————┴———————————————┘
┌————┬———————————————————┬——————————┐
│指令 │說明 │備注 │
├————┼———————————————————┼——————————┤
│n( │左括號移動到句子的最前面 │句子是以 │
│ │前面加上數字可以指定往前移動 n 個句子 │! . ? 三種符號來界定│
│n) │右括號移動到下個句子的最前面 │ │
│ │前面加上數字可以指定往後移動 n 個句子│ │
├————┼———————————————————┼——————————┤
│n{ │左括弧移動到段落的最前面 │段落是以 │
│ │前面加上數字可以指定往前移動 n 個段落 │段落間的空白列界定 │
│n} │右括弧移動到下個段落的最前面 │ │
│ │前面加上數字可以指定往後移動 n 個段落│ │
└————┴———————————————————┴——————————┘

不要嘗試背誦這些指令,否則後果自行負責。它們看起來又多又雜亂,事實上這是文字敘述本身的障礙。再強調一次,實際去使用它只要幾次就可以不經大腦直接下達這些奇奇怪怪的指令,遠比死記活背搞得模模糊糊強多了。(注:若真的不經大腦而誤刪資料與我無關。另,此段為廢話。)

進階編輯指令

這些編輯指令非常有彈性,基本上可以說是由指令與范圍所構成。例如 dw 是由刪除指令 d 與范圍 w 所組成,代表刪除一個字 d(elete) w(ord) 。

指令列表如下:

d 刪除(delete)
y 復制(yank)
p 放置(put)
c 修改(change)

范圍可以是下列幾個:

e 游標所在位置到該字的最後一個字母
w 游標所在位置到下個字的第一個字母
b 游標所在位置到上個字的第一個字母
$ 游標所在位置到該列的最後一個字母
0 游標所在位置到該列的第一個字母
) 游標所在位置到下個句子的第一個字母
( 游標所在位置到該句子的第一個字母
} 游標所在位置到該段落的最後一個字母
{ 游標所在位置到該段落的第一個字母

說實在的,組合這些指令來編輯文件有一點點藝術氣息。不管怎麽樣,它們提供更多編輯文字的能力。值得注意的一點是刪除與復制都會將指定范圍的內容放到暫存區裡,然後就可以用指令 p 貼到其它地方去,這是 vi 用來處理區段拷貝與搬移的辦法。

某些 vi 版本,例如 linux 所用的 elvis 可以大幅簡化這一坨指令。如果稍微觀察一下這些編輯指令就會發現問題其實是定范圍的方式有點雜,實際上只有四個指令罷了。指令 v 非常好用,只要按下 v 鍵,游標所在的位置就會反白,然後就可以移動游標來設定范圍,接著再直接下指令進行編輯即可。

對於整列操作, vi 另外提供了更方便的編輯指令。前面曾經提到過刪除整列文字的指令 dd 就是其中一個;cc 可以修改整列文字;而 yy 則是復制整列文字;指令 D 則可以刪除游標到該列結束為止所有的文字。

檔案指令

檔案指令多以 : 開頭,跟編輯指令有點區別。例如前面提到結束編輯的指令就是 :q。
現在就簡單說明一下作為本篇故事的結尾:

:q 結束編輯(quit)
如果不想存檔而要放棄編輯過的檔案則用 :q! 強制離開。
:w 存檔(write)
其後可加所要存檔的檔名。
可以將檔案指令合在一起,例如 :wq 即存檔後離開。
zz 功能與 :wq 相同。

另外值得一提的是 vi 的部份存檔功能。可以用 :n,mw filename 將第 n 列到第 m 列的文字存放的所指定的 filename 裡去哩。時代在變,世界在變, vi 也在變,不過大致上就這樣。好了,但願從此以後王子跟公主過著幸福快樂的生活。

[目錄]

--------------------------------------------------------------------------------

Emacs

Emacs 啟動:
直接打emacs, 如果有X-windows就會開視窗. 如果不想用X 的版本,
就用 emacs -nw (No windows)起動.
符號說明
C-X 表示按住CTRL鍵, 然後按X, 再把CTRL, X一起放開.
M-X META META

在沒有META鍵的電腦上, M-X 等於先按 ESC鍵, 接著按 X鍵.
Sun上面META鍵就是菱形的那個鍵.
有些系統META鍵就是ALT鍵.(或者某一邊的ALT鍵)

C-X或 M-X的X沒有大小寫分別.
Emacs按鍵命令基本上是一串C-<chr>和M-<chr>組成的.
超過兩個以上的按鍵命令, Emacs會在螢幕最下面一行顯示你按過什麽.
這一行叫作mini buffer

結束Emacs按 C-x C-c

取消執行 C-g
有些Emacs命令會跑很久, 可以用C-g中斷之. 按錯鍵也可以按C-g取消.

上下移動 C-p 向上 (previous line) C-n向下(next line)
左右移動 C-f 向右 (forward) C-b 向左 (backward)

其實Emacs內部沒有行的概念, 把一篇文章放在一個大buffer
裡面, 所以C-f (forward)就是向檔尾移動, C-b (backward)
是移回去的意思, 一次一個字.

翻頁 下一頁 C-v (view next screen)
上一頁 M-v

翻頁時,上一 末尾會留一點在螢幕最上面,以維持連續性.

Emacs在游標接近螢幕最下方時會自動跳半頁, 把檔案往前挪一點,
方便閱讀.

重畫螢幕 C-L

Emacs裡面游標的專有名詞叫point. point == 游標目前的 點

游標一次跳一個字(word) M-f 往後跳 M-b

注意 C-f 與 M-f, C-b 與 M-b的對稱性.

移到行頭 C-a 行尾 C-e
移到句首 M-a 到句尾 M-e
(M-a 到上一個句點後面,一個句子的起頭.
M-e 到句點後面)

移到檔頭 M-< 檔尾 M->

刪除游標目前指的/後面的字 C-d
前面的字 DEL (Delete鍵)
DEL的正名叫Rubout (Rub out)

M-DEL 往回刪一個字(word)
M-d 往前刪 (游標後面)
C-k 刪至行尾 (kill)
M-k 刪到一句子結尾(刪到句點) (kill)

注意Backspace = C-h 在Emacs下是help的意思
後面有(kill)的, 表示此刪除的動作是kill, 不太等於delete.
emacs會把kill掉的東西放到kill ring去, 算是一種暫存的地方,
以後可以叫出來.見 yank說明.

Undo: C-x u
C-_ 等於 C-x u 有些DEC終端機, C-/就是C-_
有時等於C-Shift- -

重復執行

舉例, 向右移 8個字, C-u 8 C-f
C-u 在Emacs裡是蠻特別的,用來設定一些引數(argument/repeat count)
給其後的命令.

C-u 2 0 C-n 向下移 20行

有一個特別的例外, C-u 3 C-v 不是翻三頁, 而是整個螢幕向上移三行.
據說這比較有意義.

C-u 1 0 C-x u UNDO 10次

給C-L一個引數會怎麽樣:
C-u 0 C-l 會重畫螢幕,並且把目前的行移到螢幕第一行.

另外, C-u 100 等於 M-100
C-u 數字 等於 M-數字

X windows 下,
C-left C-right 一次移一個字(word).
C-up C-down 移動一段 (paragraphs/C語言的話是block)
Home = C-a
End = C-e
C-Home = M-<
C-end = M->
PgUp PgDn = M-v C-v
設定重覆次數更加簡單,
比如要向右移10個字 C-1 C-0 right-arrow
就是按住CTRL, 然後打10就對了, 比 C-u 1 0 簡單.

Mouse中鍵用來選取有hi-light的地方.
右鍵是menu-button

如果不小心按兩次ESC, 等於 M-ESC, 會有一個訊息跑出來
說你按到一個被disable的命令. 這是高級指令, 作者認為
初學者用不道,所以會問你要不要啟動它, 一般回答no.

如果某一行太長, 螢幕顯示不下, Emacs會在螢幕最右邊打個$,
表示此行未完,右邊還有.

把一行拆成兩行: 在想拆處按Enter即可.
合並兩行為一行: 在行尾按C-d (或行首按DEL)

Yank: 吐出被刪掉的(killed)東西.

只要用kill (C-k, M-k等) 刪除, 超過一個字的資料,
emacs就會把它存起來, 然後C-y 可以把它叫出來.
功能跟Cut & Paste一樣. Kill 和delete不一樣, 只有被
kill掉的東西才能用yank吐回來.

游標在同一地方不動, 連續kill掉的資料會被當成一次kill掉的,
yank時會一起回來.

被Kill掉的資料是放在稱作 kill ring的資料結構上面, ring就是個圓圈,
被kill掉的東西會依序擺在圓圈上. yank 會放回最近一次kill掉的資料.
如果不是你想要的話, 用M-y 可以換. (M-y就是告訴emacs, 不對不對,
我不是要這一個,換前一個給我).

M-y 要緊接在C-y之後.

拷貝文字的方法== 連續 C-k 幾次, 把要拷貝的行全部刪掉,
然後按 C-y 弄回來. 再到想復制的地方按一次C-y, 就成了.

把要拷貝的資料kill掉在yank回來好像很笨. 是有比較文明的
方法, 那就是M-w, 不過較麻煩.

首先,要先設標記. Mark 用 C-SPC 或 C-@ 設. 然候
把游標移到另一端, 按 M-w 就可以把 mark 到 point間的
字存到kill ring上. point 就是游標的意思.

Emacs不會把Mark起來的地方用highlight表示, 除非在X下.
在X下, 可以用M-w 來拷貝用滑鼠反白的文字.

kill & yank 就是 cut & paste的意思.

以上大部份指令對Bash的命令列編輯也有效

檔案操作
讀檔: Emacs術語叫 finding a file.
C-x C-f 然後在mini-buffer輸入檔名. 輸入檔名時, SPC鍵有
auto-complete的功能,或者會秀出到目前為止檔名前幾
個字和輸入一樣的. (TAB鍵也有類似功能)

C-x C-f 叫 find-file

C-x C-s 存檔 (save current file, save current buffer)
C-x s 存所有的檔

C-x i 插入檔案 把另外的檔案的內容讀入目前編輯區內

視窗
Emacs把檔案讀進來,存在buffer中.
我們透過window來看/編輯buffer.

兩個視窗會把螢幕切成兩部份, 他們可以同時顯示
相同的, 或不同的檔案.

對初學者而言, 最需要的是記住怎樣讓不想要的視窗消失:

C-x 0 關掉目前的視窗
C-x 1 會讓目前的視窗占滿整個螢幕 (One Window),
取消/關掉其他的視窗.

Emacs裡面有許多功能都會開一個小視窗來和使用者溝通, 顯示訊息.
有時候不會自動消失很討厭, C-x 1 就很有用.

另一個功能是如何跳到另一個視窗.
C-x o (other-window)

C-x 2 把目前的視窗切成兩個 (水平分割)
C-x 3 (垂直分割)
C-x 4 是一串與視窗有關的指令.
C-x 4 是一串與視窗有關的指令.
C-x 5 則是擴展到X的視窗, 稱為frame.
C-x 5 2 就是再開另一個X視窗 (frame).

多檔編輯
C-x C-b 看目前有那些buffer (buffer就是emacs放開起的檔案的地方).
C-x b 然後在minibuffer輸入buffer的名字,可以切換編輯buffer.
TAB鍵也有作用. 有些內部的buffer (就是沒有檔案的buffer),
是用*開頭和結束, 這個也要打, 如*scratch*

最候提醒:
C-x 1 可以把多馀的視窗關掉.

Emacs擴充指令

前面介紹的emacs按鍵大部份都是C-<chr> 或者 M-<chr>的形式.
這是最簡單的按法, 由一對按鍵構成一個指令.

Emacs的按鍵可以超過2個以上. 如 C-x 1 或 C-x C-b.
一般超過一個按鍵組合的命令都是用C-x 開頭.

另外你也可以直接下命令. 按 M-x 之後就可以打一個Emacs命
令來執行. 一般這些命令名字都很長, 不過都不常用. 等一下
我們會介紹一些. 還有介紹怎麽把這些命令設成按鍵指令.

C-x C-c 就是結束Emacs. 不過一般Emacs很笨重, 一旦起動就不輕易
退出. 所以比較常用的是C-z

C-z 把Emacs暫停, 回到命令列. 當你下次再需要編輯時,打fg %emacs
就可以把Emacs喚醒.

在X下, C-z會把emacs縮成icon

mode line

emacs編輯畫面由 編輯區(buffer) 狀態列 (modeline) 和對話區 (minibuffer)
構成. 這裡解釋 modeline 顯示的訊息.

以下是個范例:

--**-XEmacs: xemacs.qs (Fundamental)----74%-------

由後面往前解釋, 74% 表示游標的位置.

(Fundamental)表示編輯模式.這是最原始的模式. 編輯不同種類的文章
可能希望用不同的模式, 比如說C-mode, lisp-mode, tex-mode, text-mode
等等. 在不同模式下可能多一些按鍵出來. 舉例text-mode.
M-x text-mode
可以切入text-mode, 這是一般人編輯文字使用的模式. 和Fundamental mode
沒什麽差異. 不過游標移動時, Emacs對一個字的定義就有所不同, 因而
M-f M-b 等移動一個字, 一個段落的指令就可能會停在標點符號的前面.
此時狀態列變為... (Text)----70%---

以上說的是Major mode. 另外還有minor mode, 其實就是一些額外的功能.
比如說, M-x auto-fill-mode 則狀態列顯示 (Text Fill).
auto-fill就是自動斷行, 讓文章每行固定有70個字.

M-X fundamental-mode 可以變回來.

這裡要說明一下, emacs在 minibuffer下有auto-completion的功能,
也就是打M-x fund 然後按 SPC, 它會自動補全 fundamental-mode,
不用全打. 如果有兩個以上的選擇, 它會告訴你. 這個功能對
find-file (C-x C-f)等等檔案編輯功能也有效. 前面提過.
最後解釋兩個**號. 右邊的*表示文章被修改過了.
左邊的* 表示這個編輯區(buffer)可以修改.
有一些emacs的buffer是read-only buffer, 就會標成%
%%表示檔案是read-only.

C-x C-q 可以解開read-only的鎖定, 無論如何你要改這個編輯區.
這是個toggle指令, 如果原來是可以修改的, C-x C-q會把它切成
read-only.

Search

沒有Search 功能的編輯器簡直就是小朋友的玩具. Search
是一項很重要的功能, 所以emacs也提供的很完善.
C-s
C-r
M-x re-search-forward
M-x re-search-backward
M-x search-forward
M-x search-backward
以上這些指令是基本的search指令. C-s, C-r是increamental search,
就是你打字的同時, emacs就直接幫你找. 一個是forward, 一個是backward.
找到了怎麽辦? 按C-g可以取消搜尋, 跳回原來的位置. 按Enter就讓游標
停在找到的地方 -- 此時minibuffer顯示:Mark saved where search started
什麽意思? 就是isearch幫你在原來的位置設了一個mark, 然後把point
(cursor) 移到新的位置.
想跳回去原先的地方?
C-x C-x 就可以了.(exchange-point-and-mark)
C-u C-SPC 可以依序跳回前幾次設mark的地方.
(C-SPC是設mark, 給它一個argument, 就是反動作)
(還記不記得C-u 可以給後面的指令設一些參數.
有些指令拿這個參數來當作repeat count,
有些指令就只拿來當作on/off, true/false, set/clear而已)

M-x re-search-forward可以讓你用regular expression搜尋.
M-x search-forward則沒有increamental的功能.

另外一個指令, 作用和grep很像:
M-x occure

和search相提並論的就是replace.
M-x replace 然後按 SPC, 就知道了.

Emacs的設定:

Emacs的設定檔是 $HOME/.emacs
你應該多少知道, emacs是用lisp寫成的編輯器, .emacs檔也都是
要用lisp的語法設定. emacs用的lisp稱為elisp, 和一般的lisp差一點點.

有一個info page, emacs-lisp-intro, 深入淺出的介紹emacs lisp.
如果你還不會, 不懂programming, 強烈建議你看這份文件. 如果你
會texinfo, 你可以把它很漂亮的印出來. (內容一點點而已, 兩三
天就看完了)

如果你把.emacs搞砸了, 進emacs很奇怪, 怎麽辦?
1. 用 vi 改 .emacs :>
2. emacs -q 進 emacs

Major Modes

一般常見的emacs major mode有
fundamental-mode
text-mode
lisp-mode 有自動對括號/重排, 直接執行lisp code功能.
c-mode/cc-mode c-mode是比較舊的c-mode, cc-mode應該是
目前新的c-mode. 有自動重排/對括號的功能.
也可以在emacs內compile, 跳到compiler error
修正錯誤. 執行程式時debug. (配合dbx/gdb)
compile是透過Makefile進行.
tex-mode Tex/Latex編輯模示. 可能是打一些奇怪的標點
符號比較方便.
<programming-language>-mode
同lisp/cc-mode. 如果是interpreter的話,
emacs通常都可以直接執行/debug.
<programming-language>-mode還有tags的功能, 後述.

html-mode, texinfo-mode, sgml-mode: 編寫html, texi, sgml之用.
w3-mode WWW browser. 在x-win上不滿意,但可以接受...

Tags

Tags 是一個顯為人知的功能? 所以我想提一下. 這不是emacs發明的,
而是vi 原本的特異功能. emacs只是發揚光大而已.
假設你有一個目錄, 裡面是一個程式的原始碼, 比如說, tin 的原始碼,
放在 ~/tin-1.3beta 下面. 你想看它們.

首先, 叫emacs cd到該目錄:
M-x cd

然後, 建立tag table.
tag table 就是一張對照表, 記錄哪個符號(variable/function call)
對映到哪個檔案的哪個地方. 有這張表, emacs可以讓我們快速的在程
式碼內游走. 一般這張表是一個檔案, 叫作TAGS (大寫)

M-! etags *.[ch]

M-! 是執行external shell command的意思. etags就是emacs的建表程式.
你只要告訴它你的source code在那□即可.

vi的話是使用ctags這個程式, 它建出來的檔名叫tags (小寫). 因為
我們介紹emacs, 所以不管它.

然後, 怎麽看程式? 你知道所有的C 程式都是由main()開始, 所以你想
找到main()在哪個檔案. 這時只要按 M-. 然後emacs會問你tag table
在哪裡. 因為我們已經cd到該目錄, 直接按enter就好了. 然後輸入main,
emacs就會把你帶到main(){ ... }去.

如果 你看到某個程式片斷呼叫一個你沒看過的函式, 你可以把游標
移到該函式的名字上, M-. ENTER 就搞定了.

如果 emacs找錯了 (比如有變數和函式同名, emacs跳到變數去),
那你可以用 C-u M-. 找下一個.

在編輯程式碼的時候, M-SPC 很有用, 它會把游標附近的空白縮成一個.
在其它地方也有效.

Emacs的一些package:

M-x dired (或C-x d)
游走/編輯 目錄, 就是檔案總管的意思 icon_smile.gif

M-x man 就是man page
M-x shell 開個command prompt, 不過不能跑vi,elm, tin...
M-x gnus 讀新聞/讀信
M-x rmail 讀信
M-x vm view mail
M-x mh-rmail 讀信 (package mh-e)
M-x mh-smail 送信 (package mh-e)

強列建議改用emacs讀news/bbs. 世界會更美好!

讀信的話就要看你的感覺. 這些讀信程式都會把信從系統的mail folder
搬到自己的目錄下, 占用quota, 我不喜歡 :p 建議elm或mutt.
除非參加mailling list配合procmail. 不然不實用.
用mh-e 須要裝mh 這個外部程式, 不太好. 建議vm 或 gnus.
寫完信, C-c C-c 就可以送信.

如果你的資料用rcs/sccs作版本管理, emacs自動會起動version control
(minor mode.), c-x c-q 變成check-in/check-out.

如何取得更多的資訊:

Emacs的lisp 經過多年的發展,已成為完整的self-documenting系統.
很多東西都可以線上找到你要的資訊.

前面說過,或者你已經不小心按backspace遇到了, C-h (就是backspace
的ascii碼) 在emacs裡面是help的意思, 它可以帶出一串指令.
常用的有:

C-h F Emacs FAQ
C-h t Emacs 使用教學
C-h n Emacs NEWS file, 介紹最近改版的新功能
C-h i Info system. Info是gnu用來取代man page的系統,
基本上和文字模示的WWW差不多. 有許多重要的資訊
可以在這邊找到. 如果你是新手, 建議你在x-win下
看. 不然, 按鍵 m (menuitem), SPC next page
l (last node: node就是章節的意思) u (up node)
d (directory, 索引). BS (Backspace, back a page).
如果全部只按SPC, 就跟man 一樣.
C-h k describe key, 告訴你按這個鍵執行那個lisp function.
C-h f describe function. 告訴你function在作什麽.
如果只按SPC, emacs會給你所有lisp 函數的列表, 和說明.
C-h v describe variable 同function.
C-h a apropos的意思(approximate). 給lisp function的部份
字串, emacs幫你找.
C-h b 列出目前所有的keybinding
C-h m mode help. 列出目前的mode的特殊說明.
C-c C-h 列出以C-c 開頭的所有key-binding. 雖然說Emacs
可以定義按鍵, 可是Ctrl- 開頭的所有組合大概都用光了,
只有C-c算是可以自定指令. 不過有些mode也侵犯這個空間.
目前的convention是C-c <chr> 留給user, C-c C-<chr>
留給package.

有以上這些help, 你的emacs/elisp功力會隨著時間成長.

Elisp 簡介:

Emacs有三份手冊.第一份是使用手冊, 第二份是Elisp 手冊, 第三份是
Elisp 簡介. 第三份的程度是入門級, 值得看. Elisp手冊其實也寫的
很簡單, 還教你lisp, 不過有點長, 適合參考.

因為我lisp沒有仔細學過, 所以:
以下所言, 如有巧合, 那才是真的.

Basic data type
字串 (string) "Hello, World"
字元 (char) ?a ; 問號開頭
atom & list:
(1 2 3 4) 是一個list, 由 4個 atom 組成.
pair: 中間是句點.
(apple . 2)
alist (associated list)
就是一堆 pair的集合,就像perl/tcl的associative array.
或者說是一個資料庫, 一堆 (key, value) pair.
'((Apple . 1)
(Orange . 2)
(PineApple . 3))
vector (?)
emacs 19用vector 來表示按鍵(key strok sequence)
[f1] [f2] [f1 a]

nil 就是空的list, 或者表示 false
t true
Forms
我們寫程式最好有樣版讓我們填空最簡單了.
Form 就是樣版, 不過意義不太一樣.
Form 就是Elisp 可以接受的句型.
lisp 解譯器 預設是對list的每個元素求值(evaluate),
除非是 special form, 有特殊的定義. 比如說

(defun FUNC (ARG-LIST)
BODY ...)
就是一個special form, 用來定義函式, 所以FUNC 不會被
求值, 被當成symbol, ...

(quote (LIST))

這也是個special form, 叫 lisp 把 (LIST)當做symbol就好了,
不要 evaluate.

quote 很常用, 所以有個縮寫:
'(LIST) 等於 (quote (LIST))
'Asymbol 可以表示一個Atom, 名稱叫Asymbol

set 可以產生/定義新的變數.
(set 'hello 1)
; hello = 1
; 注意我們用 'hello, 所以lisp不會evaluate hello的值.

這家伙很常用, 也有簡寫.
(setq hello 1)
setq 就是set quote 的縮寫. 這是個 special form, 不會對
第二個元素求值.
valuation

在Emacs下, C-x C-e 可以執行(evaluate, 求值)游標左邊的敘述.
結果會出現在minibuffer.

lisp-interaction-mode中 C-j 可以evaluate, 並且把結果append到 buffer.

lisp 程式由一堆list 構成.稱為expression.
每個expression 都回傳回一個值.
有些expression有副作用, 如刪掉一個字.
(這跟C 的int delete_char() 意思一樣, 它傳回int,
並且刪掉某個char)

定義函式:

(defun NAME (ARGS-LIST)
"注解" ; optional
(interactive) ; optional
BODY)

定義一個叫NAME的函式. BODY 是一堆expression.
注解是用來給C-h f顯示的.
(interactive) 表示這個函示會和user/buffer作用.
(interactive "B") 表示執行此函式先問user一個buffer的名字,
然後當作參數傳給它. (如, 當user透過key-binding
或者 M-x 呼叫此函式時)
(interactive "BAppend to buffer: r")
問user buffer name時, 提示號 Append to buffer:
此function有兩個引數,第一個是B, 就是buffer
第二個是r, region
用 隔開.
(interactive "p") 用C-u 設的prefix 把它當作參數傳給我.
預設值==4. C-u C-f 向右移四個字

一些lisp 函式:

(list 1 2 3 4) 產生 '(1 2 3 4)
(car '(1 2 3 4) 1
(cdr '(1 2 3 4) '(2 3 4)
(cons 1 '(2 3 4)) '(1 2 3 4)
(cons 1 2) (1 . 2)
(cons 0 (cons 1 (cons 2 nil)))
等於 '(0 1 2)
{list 是用 pair 串起來的,
用C 表示:
pair: {Object *first, Object *second};
*(pair[i].first) == i;
pair[i].second == pair[i+1]; }

(cons '(1 2) '(3 4)) '((1 2) 3 4)
(setq a 1)
(1+ a) ; a+1
(+ 2 a) ; a+2
(* 1 2 3 4)
(current-buffer) ; 傳回目前buffer的資料物件
(switch-to-buffer (other-buffer))
(set-buffer)
(buffer-size)
(setq current-pos (point))
(point-min)
(point-max)
(message "Hello") ; 在minibuffer顯示Hello
(if (test)
(then-part)
(else-part))
(cond ((test1) BODY1)
((test2) BODY2)
(t OTHER-WISE)
(let ((var1 value) ; local variable
var2 ; no value
(var3 value)
...)
BODY ...)
(lambda (ARG-LIST) ...) 同 defun, 但是沒有名字 (anonymous).
可以存到變數去:
(setq hello (lambda () (message "Hello,World")))
(funcall hello)
(goto-char (point-max))
(defvar VAR VALUE "*注解") 如果VAR 不存在才定義. 有注解可以用
C-h v 看. 注解打*號表是使用者可以直接改/ 這個變數本來就是
給使用者設定用的.
可以用 M-x edit-options 來線上設定 (emacs結束就沒有了,
不過edit-options可以給你所有可修改的變數的列表,你可以
放到.emacs檔內.

(directory-files "./" t "..*")
return a list of files under directory X
(load "xxxx.el") 同#include <stdio.h>
給使用者設定用的.
可以用 M-x edit-options 來線上設定 (emacs結束就沒有了,
不過edit-options可以給你所有可修改的變數的列表,你可以
放到.emacs檔內.

(directory-files "./" t "..*")
return a list of files under directory X
(load "xxxx.el") 同#include <stdio.h>
(setq load-path (cons "~/emacs" load-path)) ; load的search path.
(autoload ...) 不像load會直接evaluate 整個檔案, 而是需要時再
load.
(local-unset-key [(control c)])
(local-set-key [(control c) a] 'forward-sexp)
sexp 就是一個expession, n個expression如果用括號括起來就算一個.
(expression的定義隨語言的不同而有不同, 在C, lisp
tex, html, fortran 下皆有差異)

[目錄]

--------------------------------------------------------------------------------

歸檔和壓縮

[目錄]

--------------------------------------------------------------------------------

tar和gzip

最簡提示:
tar zxvf XXXX.tar.gz
tar jxvf XXXX tar.bz2

1.壓縮一組文件為tar.gz後綴。
# tar cvf backup.tar /etc #gzip -q backup.tar

# tar cvfz backup.tar.gz /etc/
2.釋放一個後綴為tar.gz的文件。
#gunzip backup.tar.gz #tar xvf backup.tar

# tar xvfz backup.tar.gz

3.用一個命令完成壓縮
#tar cvf - /etc/ | gzip -qc > backup.tar.gz

4.用一個命令完成釋放
# gunzip -c backup.tar.gz | tar xvf -

5.如何解開tar.Z的文件?
# tar xvfz backup.tar.Z 或 # uncompress backup.tar.Z #tar xvf backup.tar

6.如何解開.tgz文件?
#gunzip backup.tgz

7.如何壓縮和解壓縮.bz2的包?
#bzip2 /etc/smb.conf
這將壓縮文件smb.conf成smb.conf.bz2
#bunzip2 /etc/smb.conf.bz2
這將在當前目錄下還原smb.conf.bz2為smb.conf
(bzip2 -d也一樣)
注: .bz2壓縮格式不是很常用,你可以man bzip2

[目錄]

--------------------------------------------------------------------------------

rpm

1.安裝一個包
# rpm -ivh
2.升級一個包
# rpm -Uvh

3.移走一個包
# rpm -e

4.安裝參數
--force 即使覆蓋屬於其它包的文件也強迫安裝
--nodeps 如果該RPM包的安裝依賴其它包,即使其它包沒裝,也強迫安裝。

5.查詢一個包是否被安裝
# rpm -q < rpm package name>

6.得到被安裝的包的信息
# rpm -qi < rpm package name>

7.列出該包中有哪些文件
# rpm -ql < rpm package name>

8.列出服務器上的一個文件屬於哪一個RPM包
#rpm -qf

9.可綜合好幾個參數一起用
# rpm -qil < rpm package name>

10.列出所有被安裝的rpm package
# rpm -qa

11.列出一個未被安裝進系統的RPM包文件中包含有哪些文件?
# rpm -qilp < rpm package name>

[目錄]

--------------------------------------------------------------------------------

其他

文件的壓縮和解壓縮是計算歷史上最有用的創造之一,但缺乏可移植性和開放工具是阻礙它發揮其應有作用的最主要的一個障礙。只要我們是與其他使用類似 Unix 操作系統的用戶交換文件,就可以使用例如 compress、gzip 和 bzip2 這樣的可移植工具。但世界上其他人使用的是各種各樣的專用軟件 -- 甚至專用壓縮算法 -- 擁有者可能永遠也不會將它們公之於眾。
這種事態發展下去會很危險。想象一下,將來我們可能無法對檔案的重要部分譯碼,原因是我們創建它們時使用的是專用工具和算法,而那些工具運行所在的操作系統和硬件已逐漸過時,消失不見。這就是為什麼我們應該使用開放源碼壓縮工具,或者至少使用免費和有完善記載算法的商業壓縮工具的原因。(只是要記住避免使用任何特殊的增強。)

本文是有關在 linux 操作系統上使用 .arc、.arj、.lzh (.lha)、.rar、.sit、.zip 和 .zoo 文件的指南。我選擇討論這些特殊的格式是因為三種最流行的操作系統 (MS-DOS、微軟 Windows 和 Mac OS)的用戶最常使用它們。我之所以寫這篇指南是希望引導大家快速找出正確的工具,而不是詳細地從技術上討論文件壓縮技術。

最後,我想簡短說明一下自解壓文件。這樣的檔案往往位於包含壓縮格式數據的現實程序中。執行它們時,它們會解包,並將存儲在程序主體內的數據復制到您指定的任何驅動器上。唯一的問題是它們無法在 linux 上使用,沒有工具可以抽取它們。在這種情況下,需要讓創建檔案的那個人將它作為一個一般檔案壓縮。

參考資料

VMware:
http://www.vmware.com
DOSEMU:
http://www.dosemu.org
Aladdin Expander:
http://www.aladdinsys.com/expander/expander_linux_login.html
ARJ 軟件:
http://www.arjsoft.com
ARJ 的 FAQ 頁面:
http://www.arjsoft.com/faq.htm
ARJ 的下載頁面:
http://www.arjsoft.com/files.htm
gzip:
http://www.gnu.org/software/gzip/gzip.html
linux 發行版頁面:
http://www.linux.org/dist/index.html
RAR 站點:
http://www.rarsoft.com
macutil 軟件包:
http://www.linux.org/dist/index.html
tar:
http://www.gnu.org/software/tar/tar.html
WinZIP:
http://www.winzip.com
StuffIt:
http://www.aladdinsys.com
下載源碼形式的 Info-ZIP:
http://www.freesoftware.com/pub/infozip
下載二進制形式的 Info-ZIP:
http://www.linux.org/dist/index.html
下載 PKZIP:
http://www.pkzip.org/shareware/pkzip_unix.html

[目錄]

--------------------------------------------------------------------------------

.arc

.arc
帶有 .arc 擴展名的文件相對來說比較少見。如果您偶然碰到一個,基本上可以認定它是使用舊的 MS-DOS SAE ARC 或 PKware PKARC 歸檔實用程序創建的。這種形式在 linux 上的支持性不是太好,並很難指望在 Linux 機器上對這些文件解壓縮。如果需要創建 .arc 文件,嘗試在 DOSEMU 或 VMware 下運行原始 SAE ARC 或 PKware PKARC(在攜帶 MS-DOS 實用程序的 FTP 服務器上查找它們)。
要解壓縮 .arc 文件,使用 Aladdin Expander for linux。寫這篇文章的時候,Aladdin Expander 可以為公眾 Beta 測試目的免費獲得;它是否繼續免費還是個未知問題。

要解壓縮 .arc 文件,輸入 unstuff file.arc。-d 是個有用的選項,指定解壓縮文件的目標位置。例如:unstuff -d=./home/james/incoming file.arc。

注:要了解更多有關 Aladdin Expander for linux 的詳細信息,請閱讀有關 .sit 文件的那一節。

VMware:http://www.vmware.com
DOSEMU:http://www.dosemu.org
Aladdin 系統: http://www.aladdinsys.com/expander/expander_linux_login.html

[目錄]

--------------------------------------------------------------------------------

.arj

.arj
帶有 .arj 擴展名的文件是使用 ARJ Software 用於 MS-DOS 和 Windows 的 ARJ 實用程序創建的。 因為 ARJ 是一種不能免費獲得源代碼的共享件程序,所以在 linux 平台上幾乎不存在與其功能匹配的工具,這使得 .arj 文件使用起來相當困難。

對於 ARJ 文件,只要能成功地解壓縮就已經夠幸運的了。不可能在 linux 上進行 .arj 形式的壓縮,因為沒有用於 Linux 的、生成這種文件的本機壓縮工具。(可以嘗試在 DOSEMU 或 VMware 下運行原始 ARJ 軟件,但這根本算不上是一種易於使用的解決方案)。

要解壓縮 .arj 文件,使用 unarj 實用程序。它比 ARJ 慢,能力也不如 ARJ,但至少它能夠順利地抽取大多數 .arj 文件。它只能將文件抽取到當前的工作目錄、列出檔案內容,或者測試檔案。

要查看簡短的幫助頁面,輸入 unarj;如需較詳細的描述,請參閱 unarj.doc 文件,通常它位於 /usr/doc/unarj-2.43 目錄中。

盡管在哪裡解壓縮 .arj 文件是由您來選擇的,但為避免把主工作目錄混淆,通常應該在主目錄中創建一個臨時子目錄,將當前工作目錄更改到新目錄,將壓縮的文件移到新目錄中,然後使用 unarj e archive.arj 來解壓縮有問題的文件。

用於 linux 的 unarj 只能一次抽取所有文件;不能從檔案中抽取個別文件。至少如果文件已存在於當前的工作目錄中,即使在檔案中找到具有相同名稱的文件,您也不會覆蓋其內容。另外, unarj 不支持空目錄或自抽取檔案;後者是 MS-DOS/Windows 程序,它們無法在 Linux 上運行,但可以在 DOSEMU 或 VMware 下運行。

以下是其它一些 unarj 選項:

unarj archive.arj 或 unarj l archive.arj -- 列出檔案內容
unarj t archive.arj -- 測試檔案
unarj x archive.arj -- 帶路徑名抽取文件

請注意,unarj 選項不是以減號 (-) 開頭的。

如果 unarj 解壓縮文件失敗,嘗試使用 Aladdin Expander for linux(有關詳細信息,請參閱有關 .sit 的那一節)。您還可以讓創建檔案的人使用其它工具(例如可用於 MS-DOS 的免費 gzip)來壓縮它。您可能還需要一個 simple.arj 檔案,在其中要避免使用所有高級 ARJ 選項,例如卷、將檔案分成幾個小部分、以及自抽取。

為什麼不使用自抽取 ARJ 檔案呢?這些是不能在 linux 下運行的 MS-DOS 樣式的可執行文件;它們使用不同的系統庫,它們的內部格式也與 Linux 所需的二進制可執行文件的格式不同。可能可以在 DOSEMU 或 VMware 下運行自抽取 ARJ 檔案。

以 ARJ 或 JAR 形式進行的壓縮仍然不能在 linux 上使用,按照 ARJ Software 的 FAQ 頁面的說法,我們不應該等待 Linux 移植。如果您知道有任何 Linux 工具可以解壓縮 .jar 文件,請務必告訴我。

可以從 ARJ Software 的站點或攜帶您所需 linux 發行版的 FTP 服務器上下載 unarj 源碼。另外,unarj 通常是基本 Linux 發行版的一部分,因此可以在主要分發 CD-ROM 上找到它。如需到所有 Linux 發行版的鏈接的列表,請參閱 Linux 發行版頁面。

ARJ 軟件:http://www.arjsoft.com
ARJ 的 FAQ 頁面:http://www.arjsoft.com/faq.htm
ARJ 的下載頁面:http://www.arjsoft.com/files.htm
DOSEMU:http://www.dosemu.org
VMware:http://www.vmware.com
Aladdin Expander: http://www.aladdinsys.com/expander/expander_linux_login.html
gzip:http://www.gnu.org/software/gzip/gzip.html
linux 發行版頁面:http://www.linux.org/dist/index.html

[目錄]

--------------------------------------------------------------------------------

.lzh (.lha)

.lzh (.lha)
帶有 .lzh 或 .lha 擴展名的文件使用的是 LHa、LHarc 或 LHx 壓縮實用程序進行的壓縮。這些實用程序是由 Y. Tagawa、H. Yoshizaki、Momozou 和 Masaru Oki 開發的。這些實用程序已移植到許多操作系統,使用它們所創建的文件也具有相當的可移植性。Mats Andersson 執行了 linux 移植。
與 gzip 不同,lha 實用程序執行多個文件的壓縮。要壓縮單個文件,輸入 lha a archive file。lha 創建的檔案帶有 .lzh 擴展名。如果 archive.lzh 已在當前的工作目錄中存在,那麼您讓 lha 壓縮的文件就將添加到這一現有的檔案中。archive.lzh 先前的內容仍被保留,除非它已包含帶有相同名稱的文件,在這種情況下,舊文件將被新文件取代。該操作是 盲目的,意味著它不檢查文件的時間戳記;要確保只有帶有更新時間戳記的文件才能替換檔案中已保存的較舊的文件,這時使用 u 選項而不是 a 選項(例如,lha u archive file)。

當收到 .lzh 文件的人抱怨無法解壓縮檔案時,嘗試使用 lha ag archive file 或 lha ao archive file。g 和 o 選項分別指示 lha 使用常規或與 lha 兼容的歸檔方法。如果您只更新現有的檔案,使用 u 而不是 a。

歸檔多個文件和歸檔單個文件一樣容易:使用通配符(例如, lha a archive files*)或輸入存儲文件所在的頂級目錄(例如,lha a archive directory)。所有文件和子目錄都將自動存儲在檔案中。文件替換規則和 u 選項對多個文件和單個文件所起的作用是一樣的。通配符使用的語法和您在常用的 shell 中所使用的語法相同。

以下是其它一些 lha 選項:

l -- 列出檔案內容(例如,lha l archive.lzh)
v -- 列出詳細格式的檔案內容(例如,lha v archive.lzh)
t -- 測試檔案的完整性(例如,lha t archive.lzh)

請注意,lha 選項不必以負號 (-) 開頭,它們之間也不應該有空格。如需其它選項的列表,請輸入 lha。

.lzh 和 .lha 文件的解壓縮相當容易:只需輸入 lha e archive.lha。如果希望將文件解壓縮到不是當前工作目錄的目錄中,輸入 lha ew=path archive.lha。

也可以使用 lha w=path -e archive.lzh 將檔案的內容抽取到由 path 指定的目錄中。lha -ie archive.lzh 將抽取檔案內容,但忽略存儲在其中的目錄路徑。

lha 的源碼和二進制版本可以從攜帶您所需 linux 發行版的服務器上免費獲得。如需到所有 Linux 發行版的鏈接的列表,請參閱 Linux 發行版頁面。

linux 發行版頁面:http://www.linux.org/dist/index.html
gzip:http://www.gnu.org/software/gzip/gzip.html

[目錄]

--------------------------------------------------------------------------------

.rar

.rar
帶有 .rar 文件擴展名的文件是使用 RAR 和 WinRAR 歸檔和壓縮工具創建的,這些工具由 Eugene Roshal 開發。他先是發行了用於 MS-DOS 操作系統的這些工具。RAR 受到用戶的青睐是因為他們看重它的廣泛特性和高壓縮比率,以及友好的用戶界面,它與 Norton Commander 的界面(或 Midnight Commander 的界面)很相似。
因為 RAR For linux 是該軟件的完整移植,因此您可以享受到原始 RAR 的所有好處(除 MC 樣式的界面以外)。但要記住,RAR for Linux 不是免費的;必須向總部在芬蘭的一家公司 T:mi Softronic 注冊它。

RAR for linux 選項的列表給人的印象深刻,可以用作其它歸檔和壓縮工具開發人員的任務列表。要壓縮單個文件,輸入 rar a archive file。.rar 擴展名將自動附加到檔案後(它的完整文件名將是 archive.rar)。如果 archive.rar 已在當前工作目錄中存在,您嘗試添加到 archive.rar 的文件就將直接添加到現有檔案中。只有在 archive.rar 已包含帶有相同名稱的文件時,舊文件才會被新文件替代。其它存儲在檔案內部的文件將保持不變。請記住,該操作是 盲目的,意味著 RAR 不檢查文件的時間戳記;只有在 a 選項後添加了 -u 選項時才執行這一檢查。請注意,a 前面沒有減號 (-)(例如,rar a -u archive file)。

多個文件的歸檔非常簡單:要將當前工作目錄中的所有文件和目錄歸檔,輸入 rar a archive。要將特定目錄的內容歸檔,輸入 rar a archive /path/to/directory。要將一組文件歸檔,將它們括在引號中,象這樣: rar a archive '*.cpp'。

文件替換規則和 -u 選項對多個文件和單個文件所起的作用是一樣的。通配符使用的語法和您在常用的 shell 中所使用的語法相同,但必須記住要用引號括起它們。

以下是其它一些 RAR 選項:

l -- 列出檔案內容(例如,rar l archive.rar)
v -- 列出詳細格式的檔案內容(例如,rar v archive.rar)
t -- 測試檔案的完整性(例如,rar t archive.rar)

請注意,不是所有 RAR 選項都以減號 (-) 開頭;有關詳細信息,請運行不帶任何選項和自變量的 RAR(例如,如果 RAR 目錄位於當前工作目錄中,運行 rar/rar)。有關詳細信息,請參閱 RAR 手冊文件(它是 rar.txt 文件,同樣位於 RAR 目錄中)。

使用 RAR,您可以解壓縮整個檔案(使用 rar e archive.rar)、單個文件(使用 rar e archive.rar file)或一組文件(使用 rar e archive.rar '*.cpp')。因為 RAR 可以對多個文件使用,您也可以使用 rar e '*.rar' '*.cpp' 從多個檔案中抽取幾組文件。

當 RAR 無法從一個檔案中抽取文件時,使用修復選項進行挽救:rar r archive.rar。

可以從官方 RAR 站點獲得自抽取檔案形式的 RAR for linux。需要使用 ./rarlnx271.sfx 命令來運行它(結尾的數字可能會因為發行了新版本的 RAR 而有所不同)。檔案將其內容解包到當前工作目錄中自動創建的 rar 子目錄中。您可以在其中找到 rar 二進制。可以將 rar 二進制移到 /sbin 或 /usr/sbin 目錄中,這樣所有用戶都可以使用它。除了 RAR 本身,您還可以獲得 UnRAR,它是一個小型實用程序,用於解壓縮 .rar 文件,如果您希望允許其它用戶打開這樣的檔案但不創建它們,這個實用程序使用起來非常方便。

RAR 站點:http://www.rarsoft.com

[目錄]

--------------------------------------------------------------------------------

.sit

.sit
使用 Aladdin Systems 所開發的、用於 Mac OS 的 StuffIt 歸檔程序創建的檔案通常帶有 .sit 擴展名。這些文件還可以有其它的如 .hqx 或 .bin 這樣的擴展名,表明它們曾使用 BinHex 或 MacBinary 實用程序處理過,來創建可以在計算機網絡上以電子方式傳送的單個文本文件或二進制文件。(Macintosh 文件通常有兩部分,稱為創建子進程,必須在傳送之前將它們聯接在一起,以確保它們作為一個整體傳送。)可以使用組成 macutil 軟件包的一些實用程序來處理這樣編碼的文件,它是免費的,可用於所有正式的 linux 發行版)。
因為 Aladdin Systems 控制著 StuffIt 的源代碼,在收到 .sit 文件時唯一的選擇是使用 Aladdin Expander for linux,它當前還處於 Beta 階段(但已相當合用)。Aladdin Systems 已將這一 beta 版作為免費軟件向公眾提供:您不必為它付錢,但也無法獲得源代碼。當前沒有用於 Linux 的、創建 .sit 檔案的工具。

要解壓縮 .sit 檔案,輸入 unstuff archive.sit。如果不使用 -d 選項,抽取出的文件將放在當前工作目錄下,該選項可以讓您指定目標目錄: unstuff -d=/home/james/oldmacfiles archive.sit。如果解包的文件是受密碼保護的,使用 -p 選項:unstuff -p=secret archive.sit。文本文件轉換 filer 選項用於處理行結束字符的轉換,將 LF 轉換成 CRLF,然後再轉換回來:unstuff-text=auto -eol=unix archive.sit。

可以在 Expander 的 man page 上找到有關它的詳細信息(輸入 man unstuff 顯示它)。

Aladdin Expander for linux 可以從 Aladdin Systems 網站上獲得。使用或下載它不用付任何費用,但必須向 Aladdin Systems 注冊。有兩個版本的 Expander,一個用於基於 RPM 的系統(Red Hat、Mandrake、SuSE 等),另一個用於基於 .deb 的系統(Debian、Corel 等)。沒有特定於 Slackware 的軟件包,但要轉換 RPM 包以在 Slackware 上使用它應該並不困難。

Aladdin Systems:http://www.aladdinsys.com
linux 發行版頁面:http://www.linux.org/dist/index.html
macutil 軟件包:http://www.linux.org/dist/index.html
Aladdin Expander for linux: http://www.aladdinsys.com/expander/expander_linux_login.html

[目錄]

--------------------------------------------------------------------------------

.zip

.zip
.zip 擴展名表示文件是使用許多 zip 歸檔程序和壓縮程序之一(但不是 gzip)創建的。因為這是一種非常流行的壓縮格式,算法的詳細描述也有很多,所以可以找到用於所有操作系統的有用的移植形式。這包括創建和擴展帶有 .zip 文件擴展名的檔案的壓縮和解壓縮實用程序。在 linux 上有兩種這樣的工具:免費的 Info-ZIP 和以贏利為目的的 PKZIP for Linux。如果您只是偶爾需要創建或打開 zip 文件,使用 Info-ZIP。如果希望使用在 MS-DOS 或其它系統上使用的相同工具,請選擇 PKZIP(PKZIP 可用於許多操作系統)。用於微軟 Windows 的 WinZIP 和用於 Mac OS 的 Stufflt 這兩種實用程序可以創建和打開相互之間兼容的檔案。
Info-ZIP 在無法使用 gzip 或 tar 的情況下可以提供壓縮和解壓縮的一個不錯的選擇,這或許是在 linux、微軟 Windows 和 Mac OS 用戶之間交換壓縮文件的一種最好的形式。有許多不錯的 zip 程序(有開放源碼的,也有商業的)可用於這些操作系統,它們應該能確保文件的順利交換(當然,只要是在特定於某個特定工具的特殊功能關閉的情況下)。

要歸檔單個文件,輸入 zip archive file。要壓縮多個文件,使用通配符(例如,zip archive picture*jpg)。還有可能將文件定向輸出到 zip;輸入 man zip 獲得詳細信息。要歸檔整個目錄,包括其中所有子目錄的內容,使用 -r 選項,然後在檔案名後輸入目錄名(例如,zip -r archive directory)。還可以輸入 zip -R archive . 來將當前當前工作目錄進行歸檔。.zip 擴展名自動添加到檔案名後。

當 zip 發現已有檔案的名稱和您嘗試創建的名稱相同時,它將您希望壓縮的文件添加到現有檔案中,而不將已存在的文件除去。這一規則有一個例外:如果存儲在現有檔案中的一個或多個文件和您希望壓縮的一個或多個文件具有相同的名稱,舊文件將由新文件替換。文件替換規則可以使用 -u 選項來修改(有關詳細信息,請參閱 man zip)。

以下是其它一些 zip 選項:

-j -- 只存儲文件名,不帶訪問路徑(例如,zip -j archive file)
-t -- 測試檔案的完整性(例如,zip -t archive.zip)
-x -- 排除文件(例如,zip -r archive ./* -x *.tmp)

請注意,不是所有 zip 選項都以負號 (-) 開頭。

PKZIP 選項類似於 Info-ZIP,但您應該閱讀 pkzip.htm 手冊(它是一個 HTML 文檔;使用 lynx pkzip.htm 或 netscape pkzip.htm 閱讀)來確保您的操作正確。

要解壓縮 zip 文件,使用 unzip archive.zip 命令。如果想指定將檔案擴展到哪個目錄中,可以使用 -d 選項(例如,unzip file.zip -d /home/james/zips 將 file.zip 的內容抽取到 /home/james/zips 目錄中)。

注:Aladdin Expander for linux 也可以解壓縮 zip 文件。有關詳細信息,請參閱有關 .sit 文件的那一節。

當 zip 無法抽取檔案中的文件時,使用 -F 或 -FF 修復 zip 選項進行挽救(例如 zip -F archive.zip 或 zip -FF archive.zip)。請記住在嘗試拯救已破壞的檔案之前進行備份。

可以從官方 Info-ZIP 站點獲得二進制或源碼形式的 Info-ZIP for linux。

可以從 PKZIP 官方站點下載 PKZIP for linux。它作為自抽取檔案分發。要為它解包,輸入 ./pklin251.exe,檔案的內容將解包到當前工作目錄中。您需要將 pkzip25 二進制文件復制到 /sbin 或 /usr/sbin 目錄中,這樣系統上的所有用戶都可以使用它。(但您必須購買相應的許可證,因為它是商業軟件包。)

gzip:http://www.gnu.org/software/gzip/gzip.html
tar:http://www.gnu.org/software/tar/tar.html
WinZIP:http://www.winzip.com
StuffIt:http://www.aladdinsys.com
Aladdin Expander: http://www.aladdinsys.com/expander/expander_linux_login.html
下載源碼形式的 Info-ZIP:http://www.freesoftware.com/pub/infozip
下載二進制形式的 Info-ZIP:http://www.linux.org/dist/index.html
下載 PKZIP:http://www.pkzip.org/shareware/pkzip_unix.html

[目錄]

--------------------------------------------------------------------------------

.zoo

.zoo
.zoo 擴展名在因特網上不經常出現,但請放心,可以使用 linux 的 zoo 實用程序打開和創建這樣的文件。不過要記住,zoo 對於現在用戶的期望來說已有些陳舊和簡單。
要歸檔單個文件,輸入 zoo a archive file。同樣,要壓縮多個文件,可以使用通配符 -- 例如,zoo a archive picture*jpg。.zip 擴展名自動添加到檔案名後。

下面是其它一些 zoo 選項以及它們所添加的功能:

l -- 列出檔案內容(例如,zoo l archive.zoo)
t -- 測試檔案的完整性(例如,zoo -t archive.zoo)

請注意,不是所有 zoo 選項都以負號 (-) 開頭。

要解壓縮 .zoo 文件,輸入 zoo e archive.zoo。

可以獲得用於所有 linux 發行版的二進制形式的 zoo for Linux。

下載二進制形式的 zoo:http://www.linux.org/dist/index.html

[目錄]

--------------------------------------------------------------------------------

郵件

1. 將文件當做電子郵件的內容送出
語法:mail -s “主題”用戶名@地址< 文件
例如:
mail -s “program” user < file.c 將file.c 當做mail的內容,送至user,主題為program。
2. 傳送電子郵件給本系統用戶
語法:mail 用戶名

3. 傳送電子郵件至外地用戶
語法: mail 用戶名@接受地址
例如:
mail [email protected]
Subject : mail test
:
鍵入信文內容
: :
按下Ctrl+D 鍵或. 鍵結束正文。
連按兩次Ctrl+C鍵則中斷工作,不送此信件。
Cc( Carbon copy) : 復制一份正文,給其他的收信人。

4. 檢查所傳送的電子郵件是否送出,或滯留在郵件服務器中
語法:/usr/lib/sendmail -bp
若屏幕顯示為“Mail queue is empty” 的信息,表示mail 已送出。
若為其他錯誤信息,表示電子郵件因故尚未送出。

[目錄]

--------------------------------------------------------------------------------

快捷鍵

這裡列舉了一些你可以用來快速執行常見任務的快捷鍵。
要了解更多快捷鍵,請訪問:
http://sunsite.dk/linux-newbie/lnag_commands.html#shortcuts

[Ctrl] + [Alt] + [Backspace] = 殺死 X。這會殺死你當前的 X 會話,把你返回到登錄屏幕。如果正常退出步驟不起作用,你可以使用這種方法。

[Ctrl] + [Alt] + [Delete] = 關機和重新引導。關閉你當前的對話然後重新引導 OS。只有在正常關機步驟不起作用時才使用這種方法。

[Ctrl] + [Alt] + [Fn] = 切換屏幕。[Ctrl]+[Alt] + 功能鍵之一 會顯示一個新屏幕。[F1] 到 [F6] 是文本(控制台)屏幕, [F7] 是圖形化屏幕。

[Alt] + [Tab] = 切換任務。如果你同時打開了不止一個應用程序,你可以使用 [Alt] + [Tab] 來在打開的任務和應用程序間切換。

[Ctrl] + [a] = 把光標移到行首。它在多數文本編輯器和 Mozilla 的 URL 字段內可以使用。

[Ctrl] + [d] = 從終端或控制台中注銷,你不必鍵入 exit 或 logout.

[Ctrl] + [e] = 把光標移到行尾。它在多數文本編輯器和 Mozilla 的 URL 字段內都可使用。

[Ctrl] + [l] = 清除終端。該簡化操作與在命令行鍵入 clear 作用相同。

[Ctrl] + [u] = 清除當前行。 如果你在終端下工作,使用這一簡化操作可以清除從光標處到行尾的字符。

[鼠標中間鍵] = 粘貼突出顯示的文本。使用鼠標左鍵來突出顯示文本。把光標指向你想粘貼文本的地方。點擊鼠標中間鍵來粘貼它。

[Tab] = 命令行自動補全。在終端下工作時可使用這一命令。鍵入命令的前幾個字符,然後按 [Tab] 鍵,它會自動補全命令或顯示匹配你鍵入字符的所有命令。

[向上]和[向下]箭頭 = 顯示命令歷史。當你在終端下工作時,按[向上]或 [向下]箭頭來上下查看你在當前目錄下鍵入的命令歷史。 當你看到你想使用的命令時,按 [Enter] 鍵。

clear = 清除終端。在命令行下鍵入它會清除所有終端窗口中顯示的數據。

exit = 注銷。在命令行中鍵入它會注銷當前的用戶或根用戶帳號。

history = 顯示命令歷史。在命令行中鍵入它來顯示你所鍵入的被編號的前 500 個命令。要顯示較短的命令歷史,鍵入 history 之後,空一格,在鍵入一個數字。例如:history 20。

reset = 刷新終端屏幕。如果字符不清晰的話,在命令行中鍵入這個命令會刷新終端屏幕。

_________________
虛心學習ing,請多關照!icon_smile.gif
大音希聲、大象潛形、大公無私。
助人為樂,為人生快樂之本!
返回頁首
閱覽會員資料 發送站內信件 發送電子郵件
軒轅砍刀 性別:帥哥

精靈
級別: 精靈
注冊時間: 2003-03-30
帖子: 158
來自: 江西
帖子發表於: 2003-04-21 13:36 發表主題: 引用並回復 編輯/刪除帖子 刪除這個主題 浏覽發表者的IP地址
系統安裝配置

[目錄]

--------------------------------------------------------------------------------

配置文件

介紹
每個 linux 程序都是一個可執行文件,它含有操作碼列表,CPU 將執行這些操作碼來完成特定的操作。例如,ls 命令是由 /bin/ls 文件提供的,該文件含有機器指令的列表,在屏幕上顯示當前目錄中文件的列表時需要使用這些機器指令。幾乎每個程序的行為都可以通過修改其配置文件來按照您的偏好或需要去定制。
linux 中有沒有一個標准的配置文件格式?
一句話,沒有。不熟悉 linux 的用戶(一定)會感到沮喪,因為每個配置文件看起來都象是一個要迎接的新挑戰。在 Linux 中,每個程序員都可以自由選擇他或她喜歡的配置文件格式。可以選擇的格式很多,從 /etc/shells 文件(它包含被一個換行符分開的 shell 的列表),到 Apache 的復雜的 /etc/httpd.conf 文件。

什麼是系統配置文件?
內核本身也可以看成是一個“程序”。為什麼內核需要配置文件?內核需要了解系統中用戶和組的列表,進而管理文件權限(即根據權限判定特定用戶(UNIX_USERS)是否可以打開某個文件)。注意,這些文件不是明確地由程序讀取的,而是由系統庫所提供的一個函數讀取,並被內核使用。例如,程序需要某個用戶的(加密過的)密碼時不應該打開 /etc/passwd 文件。相反,程序應該調用系統庫的 getpw() 函數。這種函數也被稱為系統調用。打開 /etc/passwd 文件和之後查找那個被請求的用戶的密碼都是由內核(通過系統庫)決定的。

除非另行指定,Red Hat linux 系統中大多數配置文件都在 /etc 目錄中。

更改配置文件
在更改配置文件時,如果程序不是由系統管理員或內核控制的,就要確保重新啟動過使用該配置的程序。普通用戶通常沒有啟動或停止系統程序和/或守護進程的權限。

內核
更改內核中的配置文件會立即影響到系統。例如,更改 passwd 文件以增加用戶將立即使該用戶變為可用。而且任何 linux 系統的 /proc/sys 目錄中都有一些內核可調參數。只有超級用戶可以得到對所有這些文件的寫訪問權力;其它用戶只有只讀訪問權力。此目錄中文件的分類的方式和 Linux 內核源代碼的分類方式一樣。此目錄中的每個文件都代表一個內核數據結構,這些數據結構可以被動態地修改,從而改變系統性能。

注意:在更改其中任何文件的任何值之前,您應該確保自己全面了解該文件,以避免對系統造成不可修復的損害。

/proc/sys/kernel/ 目錄中的文件

文件名 描述
threads-max 內核可運行的最大任務數。
ctrl-alt-del 如果值為 1,那麼順序按下這幾個鍵將“徹底地”重新引導系統。
sysrq 如果值為 1,Alt-SysRq 則為激活狀態。
osrelease 顯示操作系統的發行版版本號
ostype 顯示操作系統的類型。
hostname 系統的主機名。
domainname 網絡域,系統是該網絡域的一部分。
modprobe 指定 modprobe 是否應該在啟動時自動運行並加載必需的模塊。

守護進程和系統程序
守護進程是永遠運行在後台的程序,它默默地執行自己的任務。常見的守護進程有 in.ftpd(ftp 服務器守護進程)、in.telnetd(telnet 服務器守護進程)和 syslogd(系統日志記錄守護進程)。有些守護進程在運行時會嚴密監視配置文件,在配置文件改變時就會自動重新加載它。但是大多數守護進程並不會自動重新加載配置文件。我們需要以某種方式“告訴”這些守護進程配置文件已經被發生了改變並應該重新加載。可以通過使用服務命令重新啟動服務來達到這個目的(在 Red Hat linux 系統上)。

例如,如果我們更改了網絡配置,就需要發出:
service network restart。

注意:這些服務最常見的是 /etc/rc.d/init.d/* 目錄中存在的腳本,在系統被引導時由 init 啟動。所以,您也可以執行如下操作來重新啟動服務:
/etc/rc.d/init.d/<script-for-the-service> start | stop | status
start、stop 和 status 是這些腳本接受的輸入值,用來執行操作。

[目錄]

--------------------------------------------------------------------------------

主機

/etc/host.conf
告訴網絡域名服務器如何查找主機名。(通常是 /etc/hosts,然後就是名稱服務器;可通過 netconf 對其進行更改)
/etc/hosts
包含(本地網絡中)已知主機的一個列表。如果系統的 IP 不是動態生成,就可以使用它。對於簡單的主機名解析(點分表示法),在請求 DNS 或 NIS 網絡名稱服務器之前,/etc/hosts.conf 通常會告訴解析程序先查看這裡。

/etc/hosts.allow
請參閱 hosts_access 的聯機幫助頁。至少由 tcpd 讀取。

/etc/hosts.deny
請參閱 hosts_access 的聯機幫助頁。至少由 tcpd 讀取。

[目錄]

--------------------------------------------------------------------------------

引導和登錄注銷

/etc/issue & /etc/issue.net
這些文件由 mingetty(和類似的程序)讀取,用來向從終端(issue)或通過 telnet 會話(issue.net)連接的用戶顯示一個“welcome”字符串。它們包括幾行聲明 Red Hat 版本號、名稱和內核 ID 的信息。它們由 rc.local 使用。
/etc/redhat-release
包括一行聲明 Red Hat 版本號和名稱的信息。由 rc.local 使用。

/etc/rc.d/rc
通常在所有運行級別運行,級別作為參數傳送。例如,要以圖形(Graphics)模式(X-Server)引導機器,請在命令行運行下面的命令:init 5。運行級別 5 表示以圖形模式引導系統。

/etc/rc.d/rc.local
非正式的。可以從 rc、rc.sysinit 或 /etc/inittab 調用。

/etc/rc.d/rc.sysinit
通常是所有運行級別的第一個腳本。

/etc/rc.d/rc/rcX.d
從 rc 運行的腳本(X 表示 1 到 5 之間的任意數字)。這些目錄是特定“運行級別”的目錄。當系統啟動時,它會識別要啟動的運行級別,然後調用該運行級別的特定目錄中存在的所有啟動腳本。例如,系統啟動時通常會在引導消息之後顯示“entering run-level 3”的消息;這意味著 /etc/rc.d/rc3.d/ 目錄中的所有初始化腳本都將被調用。

[目錄]

--------------------------------------------------------------------------------

文件系統

/proc
內核提供了一個接口,用來顯示一些它的數據結構,這些數據結構對於決定諸如使用的中斷、初始化的設備和內存統計信息之類的系統參數可能很有用。這個接口是作為一個獨立但虛擬的文件系統提供的,稱為 /proc 文件系統。很多系統實用程序都使用這個文件系統中存在的值來顯示系統統計信息。
例如,/proc/modules 文件列舉系統中當前加載的模塊。lsmod 命令讀取此信息,然後將其以人們可以看懂的格式顯示出來。下面表格中指定的 mtab 文件以同樣的方式讀取包含當前安裝的文件系統的 /proc/mount 文件。
/etc/mtab
這將隨著 /proc/mount 文件的改變而不斷改變。換句話說,文件系統被安裝和卸載時,改變會立即反映到此文件中。

/etc/fstab
列舉計算機當前“可以安裝”的文件系統。這非常重要,因為計算機引導時將運行 mount -a 命令,該命令負責安裝 fstab 的倒數第二列中帶有“1”標記的每一個文件系統。

/etc/mtools.conf
DOS 類型的文件系統上所有操作(創建目錄、復制、格式化等等)的配置。

[目錄]

--------------------------------------------------------------------------------

系統管理

/etc/group
包含有效的組名稱和指定組中包括的用戶。單一用戶如果執行多個任務,可以存在於多個組中。例如,如果一個“用戶”是“project 1”工程組的成員,同時也是管理員,那麼在 group 文件中他的條目看起來就會是這樣的:user: * : group-id : project1
/etc/nologin
如果有 /etc/nologin 文件存在,login(1) 將只允許 root 用戶進行訪問。它將對其它用戶顯示此文件的內容並拒絕其登錄。

/etc/passwd
請參閱“man passwd”。它包含一些用戶帳號信息,包括密碼(如果未被 shadow 程序加密過)。

/etc/rpmrc
rpm 命令配置。所有的 rpm 命令行選項都可以在這個文件中一起設置,這樣,當任何 rpm 命令在該系統中運行時,所有的選項都會全局適用。

/etc/securetty
包含設備名稱,由 tty 行組成(每行一個名稱,不包括前面的 /dev/),root 用戶在這裡被允許登錄。

/etc/usertty

/etc/shadow
包含加密後的用戶帳號密碼信息,還可以包括密碼時效信息。包括的字段有:
·登錄名
·加密後的密碼
·從 1970 年 1 月 1 日到密碼最後一次被更改的天數
·距密碼可以更改之前的天數
·距密碼必須更改之前的天數
·密碼到期前用戶被警告的天數
·密碼到期後帳戶被禁用的天數
·從 1970 年 1 月 1 日到帳號被禁用的天數

/etc/shells
包含系統可用的可能的“shell”的列表。

/etc/motd
每日消息;在管理員希望向 linux 服務器的所有用戶傳達某個消息時使用。

[目錄]

--------------------------------------------------------------------------------

網絡

/etc/gated.conf gated 的配置。
只能被 gated 守護進程所使用。
/etc/gated.version
包含 gated 守護進程的版本號。

/etc/gateway
由 routed 守護進程可選地使用。

/etc/networks
列舉從機器所連接的網絡可以訪問的網絡名和網絡地址。通過路由命令使用。允許使用網絡名稱。

/etc/protocols
列舉當前可用的協議。請參閱 NAG(網絡管理員指南,Network Administrators Guide)和聯機幫助頁。C 接口是 getprotoent。絕不能更改。

/etc/resolv.conf
在程序請求“解析”一個 IP 地址時告訴內核應該查詢哪個名稱服務器。

/etc/rpc
包含 RPC 指令/規則,這些指令/規則可以在 NFS 調用、遠程文件系統安裝等中使用。

/etc/exports
要導出的文件系統(NFS)和對它的權限。

/etc/services
將網絡服務名轉換為端口號/協議。由 inetd、telnet、tcpdump 和一些其它程序讀取。有一些 C 訪問例程。

/etc/inetd.conf
inetd 的配置文件。請參閱 inetd 聯機幫助頁。包含每個網絡服務的條目,inetd 必須為這些網絡服務控制守護進程或其它服務。注意,服務將會運行,但在 /etc/services 中將它們注釋掉了,這樣即使這些服務在運行也將不可用。格式為:<service_name> <sock_type> <proto> <flags> <user> <server_path> <args>

/etc/sendmail.cf
郵件程序 sendmail 的配置文件。比較隱晦,很難理解。

/etc/sysconfig/network
指出 NETWORKING=yes 或 no。至少由 rc.sysinit 讀取。

/etc/sysconfig/network-scripts/if*
Red Hat 網絡配置腳本。

[目錄]

--------------------------------------------------------------------------------

系統命令

系統命令要獨占地控制系統,並讓一切正常工作。所有如 login(完成控制台用戶身份驗證階段)或 bash(提供用戶和計算機之間交互)之類的程序都是系統命令。因此,和它們有關的文件也特別重要。這一類別中有下列令用戶和管理員感興趣的文件。
/etc/lilo.conf
包含系統的缺省引導命令行參數,還有啟動時使用的不同映象。您在 LILO 引導提示的時候按 Tab 鍵就可以看到這個列表。

/etc/logrotate.conf
維護 /var/log 目錄中的日志文件。

/etc/identd.conf
identd 是一個服務器,它按照 RFC 1413 文檔中指定的方式實現 TCP/IP 提議的標准 IDENT 用戶身份識別協議。identd 的操作原理是查找特定 TCP/IP 連接並返回擁有此連接的進程的用戶名。作為選擇,它也可以返回其它信息,而不是用戶名。請參閱 identd 聯機幫助頁。

/etc/ld.so.conf
“動態鏈接程序”(Dynamic Linker)的配置。

/etc/inittab
按年代來講,這是 UNIX 中第一個配置文件。在一台 UNIX 機器打開之後啟動的第一個程序是 init,它知道該啟動什麼,這是由於 inittab 的存在。在運行級別改變時,init 讀取 inittab,然後控制主進程的啟動。

/etc/termcap
一個數據庫,包含所有可能的終端類型以及這些終端的性能。

[目錄]

--------------------------------------------------------------------------------

守護進程

守護進程是一種運行在非交互模式下的程序。一般來說,守護進程任務是和聯網區域有關的:它們等待連接,以便通過連接提供服務。linux 可以使用從 Web 服務器到 ftp 服務器的很多守護進程。
/etc/syslogd.conf
syslogd 守護進程的配置文件。syslogd 是一種守護進程,它負責記錄(寫到磁盤)從其它程序發送到系統的消息。這個服務尤其常被某些守護進程所使用,這些守護進程不會有另外的方法來發出可能有問題存在的信號或向用戶發送消息。

/etc/httpd.conf
Web 服務器 Apache 的配置文件。這個文件一般不在 /etc 中。它可能在 /usr/local/httpd/conf/ 或 /etc/httpd/conf/ 中,但是要確定它的位置,您還需要檢查特定的 Apache 安裝信息。

/etc/conf.modules or /etc/modules.conf
kerneld 的配置文件。有意思的是,kerneld 並不是“作為守護進程的”內核。它其實是一種在需要時負責“快速”加載附加內核模塊的守護進程。

[目錄]

--------------------------------------------------------------------------------

用戶程序

在 linux(和一般的 UNIX)中,有無數的“用戶”程序。最常見的一種用戶程序配置文件是 /etc/lynx.cfg。這是著名的文本浏覽器 lynx 的配置文件。通過這個文件,您可以定義代理服務器、要使用的字符集等等。下面的代碼樣本展示了 lynx.cfg 文件的一部分,修改這部分代碼可以改變 Linux 系統的代理服務器設置。缺省情況下,這些設置適用於在各自的 shell 中運行 lynx 的所有用戶,除非某個用戶通過指定 --cfg = "mylynx.cfg" 重設了缺省的配置文件。
/etc/lynx.cfg 中的代理服務器設置

.h1 proxy
.h2 HTTP_PROXY
.h2 HTTPS_PROXY
.h2 FTP_PROXY
.h2 GOPHER_PROXY
.h2 NEWS_PROXY
.h2 NNTP_PROXY
# Lynx version 2.2 and beyond supports the use of proxy servers that can act as
# firewall gateways and caching servers. They are preferable to the older
# gateway servers. Each protocol used by Lynx can be mapped separately using
# PROTOCOL_proxy environment variables (see Lynx Users Guide). If you have
# not set them externally, you can set them at run time via this configuration file.
# They will not override external settings. The no_proxy variable can be used
# to inhibit proxying to selected regions of the Web (see below). Note that on
# VMS these proxy variables are set as process logicals rather than symbols, to
# preserve lowercasing, and will outlive the Lynx image.
#
.ex 15
http_proxy:http://proxy3.in.ibm.com:80/
ftp_proxy:http://proxy3.in.ibm.com:80/
#http_proxy:http://penguin.in.ibm.com:8080
#ftp_proxy:http://penguin.in.ibm.com:8080/

.h2 NO_PROXY
# The no_proxy variable can be a comma-separated list of strings defining
# no-proxy zones in the DNS domain name space. If a tail substring of the
# domain-path for a host matches one of these strings, transactions with that
# node will not be proxied.
.ex
no_proxy:demiurge.in.ibm.com, demiurge

用戶或系統程序在每次啟動時都會讀取其配置文件。盡管如此,請記住,有些系統程序在計算機打開時情況不一樣,它們的行為依賴於在 /etc/ 中的配置文件中讀到的內容。所以,用戶程序第一次啟動時將從 /etc/ 目錄中存在的文件讀取缺省配置。然後,用戶可以通過使用 rc 和 .(點)文件來定制程序,正如下面一節所示。

用戶配置文件:.(點)文件和 rc 文件
我們已經看到怎樣容易地配置程序。但是如果有的人不喜歡在 /etc/ 中配置程序的方式該怎麼辦呢?“普通”用戶不能簡單地進入 /etc 然後更改配置文件;從文件系統的角度來看,配置文件的所有者是 root 用戶!這就是大多數用戶程序都定義兩個配置文件的原因:第一個是“系統”級別的,位於 /etc/;另一個屬於用戶“專用”,可以在他或她的主目錄中找到。

例如,我在我的系統中安裝了非常有用的 wget 實用程序。/etc/ 中有一個 /etc/wgetrc 文件。在我的主目錄中,有一個名為 .wgetrc 的文件,它描述了我定制的配置(只有在我,也就是用戶運行 wget 命令時,才會加載這個配置文件)。其它用戶在他們自己的主目錄(/home/other)中也可以有 .wgetrc 文件;當然,只有這些用戶運行 wget 命令時,才會讀取這個文件。換句話說,/etc/wgetrc 文件為 wget 提供了“缺省”值,而 /home/xxx/.wgetrc 文件列舉了某個用戶的“定制項”。重要的是這只是“一般規則”,並非所有情況都如此。例如,一個象 pine 一樣的程序,在 /etc/ 中並沒有任何文件,它只在用戶主目錄中有一個定制配置文件,名為 .pinerc。其它程序可能只有 /etc/ 中的缺省配置文件,而且可能不允許用戶“定制”這些配置文件(/etc 目錄中只有少數 config. 文件是這種情況)。

[目錄]

--------------------------------------------------------------------------------

rc和點文件

通常使用的 rc 和 .(點)文件
~/.bash_login
請參考“man bash”。如果 ~/.bash_profile 不存在,bash 則將 ~/.bash_login 作為 ~/.bash_profile 處理。

~/.bash_logout
請參考“man bash”。在退出時由 bash 登錄 shell 引用。

~/.bash_profile
由 bash 登錄 shell 引用 /etc/profile 之後引用。

~/.bash_history
先前執行的命令的列表。

~/.bashrc
請參考“man bash”。由 bash 非登錄交互式 shell 引用(沒有其它文件)。除非設置了 BASH_ENV 或 ENV,非交互式 shell 不引用任何文件。

~/.emacs
啟動時由 emac 讀取。

~/.forward
如果這裡包含一個電子郵件地址,那麼所有發往 ~ 的所有者的郵件都會被轉發到這個電子郵件地址。

~/.fvwmrc ~/.fvwm2rc
fvwm 和 fvwm2(基本的 X Window 管理器)的配置文件。

~/.hushlogin
請參考“man login”。引起“無提示”登錄(沒有郵件通知、上次登錄信息或者 MOD 信息)。

~/.mail.rc
郵件程序的用戶初始化文件。

~/.ncftp/ ncftp
程序的目錄;包含書簽、日志、宏、首選項和跟蹤信息。請參閱 man ncftp。ncftp 的目的是為因特網標准文件傳輸協議(Internet standard File Transfer Protocol)提供一個強大而靈活的接口。它旨在替換系統所使用的標准的 ftp 程序。

~/.profile
請參考“man bash”。如果 ~/.bash_profile 和 ~/.bash_login 文件不存在,bash 則將 ~/.profile 作為 ~/.bash_profile 處理,並被其它繼承 Bourn 的 shell 使用。

~/.pinerc Pine 配置

~/.muttrc Mutt 配置

~/.exrc
這個文件可以控制 vi 的配置。
示例:set ai sm ruler
在此文件中寫入上面一行會讓 vi 設置自動縮進、匹配括號、顯示行號和行-列這幾個選項。

~/.vimrc
缺省的“Vim”配置文件。和 .exrc 一樣。

~/.gtkrc GNOME 工具包(GNOME Toolkit)。

~/.kderc KDE 配置。

~/.netrc
ftp 缺省登錄名和密碼。

~/.rhosts
由 r- 工具(如 rsh、rlogin 等等)使用。因為冒充主機很容易,所以安全性非常低。
必須由用戶(~/ 的所有者)或超級用戶擁有。
列出一些主機,用戶可以從這些主機訪問該帳號。
如果是符號鏈接則被忽略。

~/.rpmrc
請參閱“man rpm”。如果 /etc/rpmrc 不存在則由 rpm 讀取。

~/.signature
消息文本,將自動附加在從此帳號發出的郵件末尾。

~/.twmrc
twm(The Window Manager)的配置文件。

~/.xinitrc
啟動時由 X 讀取(而不是由 xinit 腳本讀取)。通常會啟動一些程序。
示例:exec /usr/sbin/startkde
如果該文件中存在上面這行內容,那麼在從這個帳號發出 startx 命令時,這一行就會啟動“KDE 視窗管理器”(KDE Window Manager)。

~/.xmodmaprc
此文件被傳送到 xmodmap 程序,而且可以被命名為任何文件(例如 ~/.Xmodmap 和 ~/.keymap.km)。

~/.xserverrc
如果 xinit 可以找到要執行的 X,xinit 就會將該文件作為 X 服務器運行。

~/News/Sent-Message-IDs
gnus 的缺省郵件歷史文件。

~/.Xauthority
由 xdm 程序讀和寫,以處理權限。請參閱 X、xdm 和 xauth 聯機幫助頁。

~/.Xdefaults,~/.Xdefaults-hostname
在主機 hostname 的啟動過程中由 X 應用程序讀取。如果找不到 -hostname 文件,則查找 .Xdefaults 文件。

~/.Xmodmap
指向 .xmodmaprc;Red Hat 有使用這個名稱的 .xinitrc 文件。

~/.Xresources
通常是傳送到 xrdb 以加載 X 資源數據庫的文件的名稱,旨在避免應用程序需要讀取一個很長的 .Xdefaults 文件這樣的情況。(有些情況曾經使用了 ~/.Xres。)

~/mbox 用戶的舊郵件。

[目錄]

--------------------------------------------------------------------------------

文件系統

linux文件系統是Linux系統的心髒部分,提供了層次結構的目錄和文件。文件系統將磁盤空間劃分為每1024個字節一組,稱為塊(也有用512字節為一塊的,如:SCOXENIX)。編號從0到整個磁盤的最大塊數。
全部塊可劃分為四個部分,塊0稱為引導塊,文件系統不用該塊;塊1稱為專用塊,專用塊含有許多信息,其中有磁盤大小和全部塊的其他兩部分的大小。從塊2開始是i節點表,i節點表中含有i節點,表的塊數是可變的,後面將做討論。i節點表之後是空閒存儲塊(數據存儲塊),可用於存放文件內容。文件的邏輯結構和物理結構是十分不同的,邏輯結構是用戶敲入cat命令後所看到的文件,用戶可得到表示文件內容的字符流。物理結構是文件實際上如何存放在磁盤上的存儲格式。用戶認為自己的文件是邊疆的字符流,但實際上文件可能並不是以邊疆的方式存放在磁盤上的,長於一塊的文件通常將分散地存放在盤上。然而當用戶存取文件時,linux文件系統將以正確的順序取出各塊,給用戶提供文件的邏輯結構。

當然,在linux系統的某處一定會有一個表,告訴文件系統如何將物理結構轉換為邏輯結構。這就涉及到i節點了。i節點是一個64字節長的表,含有有關一個文件的信息,其中有文件大小、文件所有者、文件存取許可方式,以及文件為普通文件、目錄文件還是特別文件等。在i節點中最重要的一項是磁盤地址表。

該表中有13個塊號。前10個塊號是文件前10塊的存放地址。這10個塊號能給出一個至多10塊長的文件的邏輯結構,文件將以塊號在磁盤地址表中出現的順序依次取得相應的塊。當文件長於10塊時又怎樣呢?磁盤地址表中的第11項給出一個塊號,這個塊號指出的塊中含有256個塊號,至此,這種方法滿足了至多長於266塊的文件(272384字節)。如果文件大於266塊,磁盤地址表的第12項給出一個塊號,這個塊號指出的塊中含有256個塊號,這256個塊號的每一個塊號又指出一塊,塊中含256個塊號,這些塊號才用於取文件的內容。磁盤地址中和第13項索引尋址方式與第12項類似,只是多一級間接索引。

這樣,在linux系統中,文件的最大長度是16842762塊,即17246988288字節,有幸是Linux系統對文件的最大長度(一般為1到2M字節)加了更實際的限制,使用戶不會無意中建立一個用完整個磁盤區所有塊的文件。

文件系統將文件名轉換為i節點的方法實際上相當簡單。一個目錄實際上是一個含有目錄表的文件:對於目錄中的每個文件,在目錄表中有一個入口項,入口項中含有文件名和與文件相應的i節點號。當用戶敲入catxxx時,文件系統就在當前目錄表中查找名為xxx的入口項,得到與文件xxx相應的i節點號,然後開始取含有文件xxx的內容的塊。

[目錄]

--------------------------------------------------------------------------------

inode

一個inode有128 byte。在新建文件系統時, 通常會有一個參數, 用來描述要分配多少比例的空間給inode table。舉例來說newfs -i 2048是指文件系統中, 每分配2048 byte給data area, 就分配一個inode。但一個inode並不一定用掉2048 byte, 也不是說 files allocation的最小單位是2048 byte, 它僅僅只是代表文件系統中inode table/data area分配空間的比例是 128/2048 也就是 1/16。如果 inode table 太小, 那麼在每個文件都很小的時候, 就會發生inode用光而存儲空間多余的情況。file allocation的最小單位和inode多少沒有關系

[目錄]

--------------------------------------------------------------------------------

安裝和拆卸文件系統

linux文件系統是可安裝的,這意味著每個文件系統可以連接到整個目錄樹的任意節點上(根目錄總是被安裝上的)。安裝文件系統的目錄稱為安裝點。
/etc/mount命令用於安裝文件系統,用這條命令可將文件系統安裝在現有目錄結構的任意處。

安裝文件系統時,安裝點的文件和目錄都是不可存取的,因此未安裝文件系統時,不要將文件存入安裝點目錄。文件系統安裝後,安裝點的存取許可方式和所有者將改變為所安裝的文件根目錄的許可方式和所有者。

安裝文件系統時要小心:安裝點的屬性會改變!還要注意新建的文件,除非新文件系統是由標准文件建立的,系統標准文件會設置適當的存取許可方式,否則新文件系統的存取許可將是777!

可用-r選項將文件系統安裝成只讀文件系統。需要寫保護的帶驅動器和磁盤,應當以這種方式來安裝。

不帶任何參數的/etc/mount可獲得系統中所安裝的文件系統的有關信息。包括:文件系統被安裝的安裝點目錄,對應/dev中的設備,只讀或可讀寫,安裝時間和日期等。從安全的觀點來講,可安裝系統的危險來自用戶可能請求系統管理員為其安裝用戶自己的文件系統。如果安裝了用戶的文件系統,則應在允許用戶存取文件系統前,先掃描用戶的文件系統,搜索SUID/SGID程序和設備文件。在除了系統管理員外任何人不能執行的目錄中安裝文件系統,用find命令或secure列出可疑文件,刪除不屬用戶所有的文件的SUID/SGID許可。

用戶的文件系統用完後,可用umount命令卸下文件系統。並將安裝點目錄的所有者改回系統管理員,存取許可改為755。

[目錄]

--------------------------------------------------------------------------------

恢復被刪除文件

前些天被我誤刪掉的 home directory 下的幾千個文件,經過本人數天的連續奮戰,現絕大部分已恢復,算是奇跡也不是奇跡。
刪掉文件其實只是將指向數據塊的索引點 (information nodes) 釋放,只要不被覆蓋,數據其實還在硬盤上,關鍵在於找出索引點,然後將其所指數據塊內的數據抓出,再保存到另外的分區。

我先在網上查有關 linux undelete 的信息,找到一個 ext2fs-undeletion 的mini-Howto,後發覺在RH6.2的 /usr/doc/HOWTO 內也有,按它的方法,先將被刪掉數據的盤區 umount 掉(防止寫盤覆蓋被刪除的數據,顯然這一步在誤刪數據後做得越快越好,尤其是對多人使用的計算機),然後查文件系統中哪些索引點最近被釋放:

#debugfs /dev/hda6 (my 'home' partition)
debugfs: lsdel

即給出相應信息,包括索引點,文件屬主,大小,刪除日期等。也可將結果輸出到一個文件中

debugfs: quit
# echo lsdel | debugfs /dev/hda6 > lsdel.out

還可用 debugfs 中 stat 查看某一索引點的詳細信息:

debugfs: stat <148003>

尤其注意其數據塊是否連續!

然後將該索引點所指數據塊內的數據抓出並存到另一盤區:

debugfs: dump <148003> /dosd/tmp/recovered.0
Copyright © Linux教程網 All Rights Reserved