本章為初涉 Linux 世界的新手指出了一個基本的方向。如果你接觸 Linux 已有一段時間,可以當成是一次實戰測驗。
到 Debian Documentation Project
(DDP)
看看,那兒有最權威的 Debian
參考資料。其中的許多文件通常都安裝在 /usr/share/doc/
。也可以到
/usr/share/doc-base/
看看,那裡提供了系統之中文件的指引。在
~/.bash_profile
中加入 export
CDPATH=.:/usr/share/doc:/usr/src/local,這樣可以更容易地讀取這些文件目錄。
在 Linux Documentation Project
(LDP)
中有最權威的 Linux 通用參考資料。 LDP 的資料通常安裝在
/usr/share/doc/HOWTO/
目錄下。
如果要瀏覽本地或遠端 FTP 站台的文件的話,在 Midnight Commander 中按下 F9 試試 (參閱 Midnight Commander (MC), 第 4.3 節)。
在一般 Linux 系統中,會有六個獨立的偽終端 (pseudo-terminals)。同時按下 Left-Alt 鍵和 F1–F6 鍵可在這些偽終端間切換。每個偽終端均需分別登入。多使用者環境是 Unix 重要的特性,你一定會用上癮的。
使用一般使用者帳號工作是使用 Unix 的好習慣。不得不承認,我過去常僅僅為圖個方便而濫用超級使用者帳號 (root)。
現在,我通常使用一般的帳號,再利用 sudo 、 super 或 su -c 來獲得有限的 root 權限。
系統安裝完畢後,我通常會新增一個一般使用者帳號。如果使用者名稱為 "penguin",則
# adduser penguin
就可以建立帳號。
我使用 vigr 命令來編輯 /etc/group
:
adm:x:4:admin src:x:40:admin, debian, ... ...
在系統預設安裝狀態下, adm 群組成員可以讀取在
/var/log/
下的許多記錄檔,並且可以使用 xconsole
。
/home
是由 staff
群組所擁有,所以其成員適合於進行使用者帳號維護的工作,而 src
群組擁有 /usr/src/
,所以其成員可以編譯核心等等。有關使用者及群組的規範描述可參閱最新的 users-and-groups
文件。
我個人使用 adm 群組來管理那些具有管理員職責和排它性的
su
特權的使用者 (參閱 "Why GNU su
does not
support the wheel group", 第 9.2.2 節),而將 CVS 用戶歸屬
src 群組 (參閱 Concurrent
Versions System (CVS), 第 12.1 節)。
用 adduser
, addgroup
, vipw
,
vipw -s , vigr
,以及 vigr -s
檢查一下使用者及群組是否配置得當。
Linux 和任何現代的 OS 一樣,檔案會暫存於記憶體中,所以在安全切斷電源之前需要完成適當的關機程序。這裡是多使用者模式下使用的指令:
# shutdown -h now
這是單一使用者模式下使用的命令:
# poweroff -i -f
等待螢幕上顯示 "System halted" 文字之後切斷電源。如果 BIOS 和 Linux 開啟了 APM ,系統會自動切斷電源。詳情參閱 大記憶體和關機自動斷電, 第 3.7.4 節。
預設的 shell 是 bash
,它能記住使用過的命令
(history-editing)。只需按上下鍵就會出現之前的命令,然後就可以用游標 (cursor)
來輸入。其它需要牢記的重要按鍵有:
Ctrl-U: 清除一行中游標之前的文字 Ctrl-D: 結束輸入 Left-click-and-drag mouse: 選取並拷貝至剪貼簿 (gpm) Click middle mouse button: 將剪貼簿內容貼至游標處 (gpm) Ctrl-V TAB: 輸入 TAB,而不是命令列擴展
在一般的 Linux console 中,只有左邊的 Ctrl 和 Alt 鍵有作用。
典型的命令執行方法是使用如下的 shell 命令列:
$ LC_ALL=fr ls -la
在此,程式 ls
是在前景執行,並以 -la
為參數以詳細列出目錄中所有的內容,並將其執行時的環境變數 LC_ALL
設為 fr 以設定為法國區域 (locale)。如果命令列是以
& 為結尾的話,則此命令會在背景執行。使用者在單一 shell
中允許以背景執行的工作來執行多個程式。
可用下列的按鍵來管理命令的執行。
Ctrl-C: 中止程式 Ctrl-Z: 暫停程式 Ctrl-S: 停止畫面輸出 Ctrl-Q: 恢復畫面輸出 Ctrl-Alt-Del: 重開/關閉系統 (參閱 /etc/inittab)
有關如何管理程式運行,可參閱 bash(1)
中的 jobs 、
fg 、 bg 和 stop 。
下列是最基本的 Unix 指令:
ls, ls -al, ls -d, pwd, cd, cd ~user, cd -, cat /etc/passwd, less, bg, fg, kill, killall, uname -a, type commandname, sync, netstat, ping, traceroute, top, vi, ps aux, tar, zcat, grep, ifconfig, ...
在命令提示符號後輸入 man 或 info 再加相關指令名稱,就可查看該指令的意思。許多 Linux 指令都可使用下列的方式來獲得簡要的說明資訊:
$ commandname --help $ commandname -h
如果系統中的指令有說明文件的話,則 whatis commandname 則會顯示一行摘要資訊。
從 console 啟動 X Window 系統:
# exec startx
在根視窗上按右鍵可以帶出選單。
在 Linux 控制台中要記住的一些重要按鍵 ("plus" 、 "minus" 指數字盤上的按鍵):
Alt-F1 至 F6: 切換至其他的偽終端 (pseudo-terminals) Ctrl-Alt-F1 thru F6: 切換至其他的偽終端 (由 X window, DOSEMU 等環境中) Alt-F7: 切換回 X window Ctrl-Alt-minus: 在 X window 中改變螢幕解析度 Ctrl-Alt-plus: 在 X window 中以相反的方向來改變螢幕解析度 Ctrl-Alt-Backspace: 結束 X11 server 程式 Alt-X, Alt-C, Alt-V: 使用 Windows/Mac 剪下,複製,貼上鍵 在如 Netscape Composer 等程式中,這些結合 Alt- 的按鍵取代了結合 Ctrl- 的按鍵。
Midnight Commander (MC) 是 GNU 在 Linux 控制台和其他終端環境的一把 "瑞士刀"。
# apt-get install mc
然後修改 ~/.bashrc
(或是由 .bashrc
呼叫的
/etc/bash.bashrc
),使用 -P 選項,就像在說明頁面
mc(1)
中的敘述,這會使得 MC 在退出時就更改其工作目錄。
如果是在像 kon
和 Kterm
for Japanese
等使用某些圖形特性的終端的話,則在命令列中加上 -a 可以預防 MC
出現一些問題。
$ mc
在 MC 中可使用選單來完成所有的檔案操作,只需要使用者小小的嚐試一下就行了。
預設狀態是兩個目錄面板列出檔案列表。另一種好用的模式是將右邊視窗設定為
"information" ,以查看檔案存取權限等資訊。下面是一些基本的按鍵。如果
gpm
daemon 在運作的話,你還可以使用滑鼠。 (在 MC
中進行剪下和貼上操作時別忘了按下 shift 鍵。)
cd
命令會改變所選畫面的目錄。
cp
或
mv
命令使用來做命令列的編輯。
內建編輯器的剪下-貼上方式很有意思。按 F3 標記起始點,再次按 F3 標記終止點,而中間的選取部分會高亮度顯示。然後你可以移動游標到某處按下 F6 ,被選取部分就會移到該處。如果你按下的是 F5 ,選中部分就會複製到該處。 F2 會儲存檔案, F10 是退出,所有方向鍵的作用則和它們的名字一樣直觀。
可用編輯器直接打開某個檔案:
$ mc -e filename_to_edit $ mcedit filename_to_edit
雖然它不是多視窗編輯器,但你可利用多個 Linux 控制台來達成相同的效果。要在視窗間進行複製動作,可使用 Alt-Fn 來切換虛擬控制台,然後使用 "File->Insert file" 或 "File->Copy to file" 將一個檔案中的內容複製到另一個檔案。
可指定任何外部編輯器來取代內建的編輯器。
許多程式使用環境變數 EDITOR 或 VISUAL
來決定使用哪個編輯器。如果你用不慣 vim,可在 ~/.bashrc
中加上幾行來指定使用 mcedit :
... export EDITOR=mcedit export VISUAL=mcedit ...
我推薦設定為 vim 。習慣 vi(m) 是件好事,因為在 Linux/Unix 世界裡你總找得到它們。
非常聰明的檢視器。它是在文件中搜索單詞的利器。我總是用它在
/usr/share/doc
目錄下找檔案,用它來瀏覽大量的 Linux
資料是最快的方法。檢視器可以像這樣直接啟動:
$ mc -v filename_to_view
(注意,有些違反規範的套件仍將它們的文件放在 /usr/doc
目錄下。)
在檔案上按 Enter,會啟動相關的程式來處理該檔案。這是 MC 的一個極方便的特性。
executable: 執行命令 man, html file: 將檔案內容導向 (Pipe) 至檢視軟體 tar, gz, rpm file: 像子目錄般的瀏覽其內容
為了使這些文件特性生效,不要將可閱讀的檔案設成可執行檔。可使用 MC
的檔案選單或使用 chmod
來改變檔案屬性。
MC 可通過 FTP 來存取網路上的檔案。按 F9 轉到選單列,輸入 `p' 啟動 FTP 虛擬檔案系統。以 username:passwd@hostname.domainname 格式輸入 URL ,遠端的目錄就會像本地端目錄一樣顯示出來。
在 GNU/Linux 系統中每個檔案和目錄都與由一個使用者所擁有 (擁有者) 並屬於一個群組。所有的檔案資訊都保存在一個稱為 inode 的資料結構中。
檔案和目錄的存取權限對下面三種使用者分別定義:
對檔案來說,每個權限分別對應到一些可做的動作:
對目錄來說,每個權限分別對應到一些可做的動作:
在這裡, 目錄的執行權限不只代表允許讀取目錄內的檔案,也代表允許看到它們的屬性,像是檔案大小和更動時間等。
使用 ls
來顯示檔案和目錄的權限資訊 (和更多其他的資訊). 請參閱
ls(1)
。當使用 ls
的 -l
選項,則會依下列順序來顯示相關資訊:
在 root 帳號下可使用 chown
改變檔案的擁有者,參閱
chown(1)
。要改變檔案的所屬群組,可以用檔案擁有者或 root
的身份來執行 chgrp
,參閱 chgrp(1)
。要改變目錄的存取權限,可以用檔案擁有者或 root 的身份來執行 chmod
,參閱 chmod(1)
。
例如,要建立一個目錄樹,其擁有者為 foo ,所屬群組為 bar 的話,用 root 帳號執行下列的指令:
# cd /some/location/ # chown -R foo:bar . # chmod -R ug+rwX,o=rX .
有 3 個更特殊的權限位元:
在這裡,如果設定這些特殊權限設定後蓋住了原本顯示的執行權限的話,則 ls
-l
的輸出就會用大寫來表示。
在可執行檔上設定 set user ID 的話,會以這個檔案擁有者的身份 (如 root) 來執行這個可執行檔。同樣地,在可執行檔上設定 set group ID 的話,會以這個檔案的群組身份 (如 root) 來執行這個可執行檔。因為這些設定會導致安全性上的問題,要打開它們的話要格外小心。
在目錄上設定 set group ID 的話,會使用類似 BSD 的檔案建立規則,也就是在此目錄中建立的檔案都會屬於此目錄的群組。
在目錄上設定e sticky bit
可以防止非檔案擁有者來刪除此目錄中的檔案。在一些大家可以寫入的目錄,如
/tmp
或是在允許群組寫入的目錄下,為了要保持檔案內容的安全,不只要關上檔案的寫入權限,還要在目錄上設定
sticky bit
。不然的話,任何擁有目錄寫入權限的人都可以刪除檔案,並且建立一個新的同名檔案。
這裡有些關於檔案權限的有趣例子。
$ ls -l /etc/passwd /etc/shadow /dev/ppp /usr/sbin/pppd crw-rw---- 1 root dip 108, 0 Jan 18 13:32 /dev/ppp -rw-r--r-- 1 root root 1051 Jan 26 08:29 /etc/passwd -rw-r----- 1 root shadow 746 Jan 26 08:29 /etc/shadow -rwsr-xr-- 1 root dip 234504 Nov 24 03:58 /usr/sbin/pppd $ ls -ld /tmp /var/tmp /usr/local /var/mail /usr/src drwxrwxrwt 4 root root 4096 Feb 9 16:35 /tmp drwxrwsr-x 10 root staff 4096 Jan 18 13:31 /usr/local drwxrwsr-x 3 root src 4096 Jan 19 08:36 /usr/src drwxrwsr-x 2 root mail 4096 Feb 2 22:19 /var/mail drwxrwxrwt 3 root root 4096 Jan 25 02:48 /var/tmp
在 GNU/Linux 檔案中,有三個時間戳記:
注意, ctime 並不是檔案建立時間。
要注意的是,在 GNU/Linux 系統中,即使只是簡單的讀取檔案,通常也會為了要更新
inode 中的 atime 而導致寫入的動作。如果以
noatime
選項來掛上檔案系統的話,就可以略過這個動作而使讀取的動作加快。請參閱
mount(8)
。
有兩種方法可以把一個叫 foo 的檔案關連到另一個檔名 bar 。
下面的例子顯示了在使用 rm
指令後,連結數的改變和一些微妙的差異。
$ echo "Original Content" > foo $ ls -l foo -rw-r--r-- 1 osamu osamu 4 Feb 9 22:26 foo $ ln foo bar # 硬式連結 $ ln -s foo baz # 符號連結 $ ls -l foo bar baz -rw-r--r-- 2 osamu osamu 4 Feb 9 22:26 bar lrwxrwxrwx 1 osamu osamu 3 Feb 9 22:28 baz -> foo -rw-r--r-- 2 osamu osamu 4 Feb 9 22:26 foo $ rm foo $ echo "New Content" > foo $ cat bar Original Content $ cat baz New Content
就像上面的例子所顯示的,符號連結的一般檔案存取權限為 "rwxrwxrwx" ,而實際的存取權限均由它們所指向的檔案來決定。
.
目錄是連結到其所出現的目錄,所以任何新目錄的連結數都是由 2
起跳的。而 ..
目錄是連結到其所上層目錄,所以目錄的連結數會隨著子目錄數目而增加。
還有許多 Unix 好的入門級參考書,在計算機的各個領域,想買到優秀的指導書,
O'Reilly 不會讓你失望。 LDP 的文件 Tips-HOWTO
是另一個資源。更多資源請參閱 Debian 的技術支援,
第 15 章 。
Debian 參考手冊
1.07-1, 週日 三月 7 15:48:58 UTC 2004osamu@debian.org
wctang@csie.nctu.edu.tw