本章為那些初涉 Debian 世界的新手指出了基本方向。如果你接觸 Unix-like 系統已有一段時間,就能了解我底下說明的部份。請將此文件當成實戰測試吧。
從安裝 Debian 到電腦之後,您需要學會一些技巧才能活用它。讓我們給您一些簡單的練習。
在開機的過程中,您會看到圖形或文字介面的登入畫面(基於安裝的套件)。為了簡化說明,如果您看到的是圖形登入介面,請按下 Ctrl-Alt-F1 [3] 切換到文字介面的登入模式。
假設您的主機名稱為 foo,那麼登入提示符號則類似:
foo login:
輸入 root,按下 Enter 後並輸入安裝過程設定的密碼。Debian 系統跟 Unix 一樣,密碼是分辨大小寫的。接下來系統會出現一個問候訊息並留下 root 提示符號等您輸入指令。 [4]
foo login: root Password: Last login: Sun Oct 26 19:04:09 2003 on tty3 Linux foo 2.4.22-1-686 #6 Sat Oct 4 14:09:08 EST 2003 i686 GNU/Linux Most of the programs included with the Debian GNU/Linux system are freely redistributable; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. root@foo:root#
透過 root 命令提示符號,您就準備進行系統管理了。root 帳號稱為超級使用者(superuser)或特權使用者(privileged user)。使用 root 帳號,您可以達成:
分享 root 密碼來取得 root 帳號是非常不好的方法。請使用如 sudo(8)
的軟體就是一個較好的方式來分享管理者權限。
先登入非特權帳號再進行管理動作是值得學習的 Unix 習慣。等需要 root 權限時再使用
sudo,super或su
-c來取得特定的功能。請參閱 更安全的工作環境 – sudo
, 第
9.2.4 節。 [5]
我認為學習電腦系統就像是學習一套外國語言。雖然學習指南很有幫助,但您需要去練習並使用這些工具。這個情況下,我建議額外安裝一些套件來輔助,例如
mc
, vim
, lynx
,
doc-linux-text
和 debian-policy
。 [6]
# apt-get update ... # apt-get install mc vim lynx doc-linux-text debian-policy ...
如果您已經安裝這些套件,則執行上述指令就不會重新安裝。
系統安裝完畢,通常會添加一個普通用戶帳號,而該帳號會收到寄給 root 的信件。 [7] 如果您不想使用這個特殊帳號來練習以下的指令則必須建立一個新的使用者帳號。
如果新的帳號為 penguin,請輸入:
root@foo:root# adduser penguin ... 回答完所有的問題
就會建立該帳號了。 [8] 在進行下面的步驟前,我們先學習一些基礎。
在未調整過的 Debian 系統中,總共有六個獨立的虛擬終端機。也就是說您可以在文字介面的主控台中使用六個可切換的 VT-100 終端機。按下左邊的 Alt 加上 F1–F6 可以切換到另外一個終端機。每一個虛擬終端機允許不同的帳號登入且不受其他終端機影響。多人環境是 Unix 偉大的設計且容易讓人上癮。
如果您不小心在執行 X 視窗系統的機器按下 Alt-F7,則主控台螢幕會切換到視窗介面,按下 Ctrl-Alt-F1 就能回到文字主控台。試著練習切換不同的主控台並跳回到原來這一個來習慣這些特性。
和其他現代的作業系統一樣,系統檔案會快取到記憶體中,在切斷電源之前 Debian 系統需要完成特定的關機程序才能維持檔案的完整性。使用 root 提示命令列來執行以下的關機指令:
# shutdown -h now
這是多用戶模式下的關機命令。如果是單一使用者模式,請執行以下的命令:
# poweroff -i -f
您也能按下 Ctrl-Alt-Delete 來關機。 [9]
等待螢幕上顯示 "System halted" 之後切斷電源。如果在BIOS和Linux中開啟了 APM 或 ACPI ,系統會自動切斷電源。詳情參閱大記憶體和關機自動斷電, 第 3.7.4 節。
現在您可以大膽地使用 Debian 系統而不用擔心任何危險,因為您使用的是非特權帳號:penguin。 [10]
我們來試著登入 penguin,如果您在 root 命令提示列,請按下 Ctrl-D [11] 結束 root 的動作回到登入提示符號。現在請輸入新建立的帳號 penguin 及密碼。 [12] 您就會顯示以下的提示命令列。
penguin@foo:penguin$
從現在開始,底下的範皆使用簡化的命令提示列來說明。我將會使用
我們將以最簡單的方式 Midnight Commander (MC), 第 4.2 節 和適當的方法 Unix-like 工作環境, 第 4.3 節 來學習 Debian 系統。
Midnight Commander (MC)是 Linux 主控台和其它終端環境中的 GNU "瑞士軍刀"。對於新手來說,選單式的控制會比傳統 Unix 指令好上手多了。
使用這個指令來流覽 Debian 系統。這是最好的方式來學習。請使用方向鍵和 Enter 鍵來流覽主要的檔案系統。
/etc
以及子目錄。
/var/log
以及子目錄。
/usr/share/doc
以及子目錄。
/sbin
和 /bin
為了使 MC 在離開時改變工作目錄,您需要修改 ~/.bashrc
(或
/etc/bash.bashrc
, 由 .bashrc
呼叫),使用
-P 選項,就像在說明頁面 mc(1)
中的敘述。 [13]
$ mc
在 MC 中可使用選單來完成所有的檔案操作,只需要使用者小小的嚐試一下就行了。按下 F1 顯示說明視窗。您可以搭配方向鍵和功能鍵來使用 MC。 [14]
預設狀態是兩個目錄面板列出檔案列表。另一種好用的模式是將右邊視窗設定為
"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 世界裡你總找得到它們。 [15]
非常聰明的檢視器。它是在文件中搜索詞句的利器。我總是用它在
/usr/share/doc
目錄下找檔案,用它來瀏覽大量的 Linux
資料是最快的方法。檢視器可以像這樣直接啟動:
$ mc -v filename_to_view
在檔案上按 Enter,會啟動相關的程式來處理該檔案。這是 MC 的一個極方便的特性。
executable: 執行命令 man, html file: 將檔案內容導向 (Pipe) 至檢視軟體 tar, gz, rpm file: 像子目錄般的瀏覽其內容
為了使這些文件特性生效,不要將可閱讀的檔案設成可執行檔。可使用 MC
的檔案選單或使用 chmod
來改變檔案屬性。
MC 可通過 FTP 來存取網路上的檔案。按 F9 轉到選單列,輸入 `p' 啟動 FTP 虛擬檔案系統。以 username:passwd@hostname.domainname 格式輸入 URL ,遠端的目錄就會像本地端目錄一樣顯示出來。
試著流覽 http.us.debian.org/debian 中的 Debian 檔案。請參閱 Debian archives, 第 2.1 節 了解這些是如何組織起來的。
雖然 MC 能幫助你完成許多事情,但是學會如何從 shell 命令列執行指令並熟習 Unix-like 環境是非常重要的。 [16]
在 Unix-like 環境中,有許多組合鍵有特別的意義。 [17]
預設的 shell 是 bash
,它能記住使用過的命令 (history-editing)
和命令列擴展 (tab-completion) 的功能來輔助互動式的使用。
其他重要的組合鍵:
為了在 Linux 文字主控台中使用滑鼠,您必須使用 gpm
服務。 [19] 參閱 滑鼠設定, 第 3.3 節。
我們來學一些基本的 Unix 指令吧。 [20] 試著由非特權帳號penguin來執行下列的指令:
..
"
和 ".
")
foo
或是CDPATH變數所定義的目錄下的目錄。參閱文件builtins(7)
中的 cd
。
/foo
的目錄。
/etc/motd
的內容。參閱 command < foo, 第 4.3.10.9
節。 [23]
junkfile
。
foo
並命名成:bar
。
junkfile
檔案。
foo
檔案成 bar
檔名。
foo
檔案到新的位置且更名成
bar/baz
。bar
目錄必須存在。
foo
的權限為其他帳號皆不可讀和寫。(任何人皆不可執行)
foo
的權限為其他帳號皆可讀但不可寫入。(任何人皆不可執行)
foo
的權限為其他帳號皆可讀但不可寫入。(任何人皆可執行)
exim
或 exim4
程序。執行 man
grep 來閱讀 grep(1)
學習正規式表示法。 [24]
foo
成
foo.gz
。
foo.gz
產生 foo
。
gzip
壓縮率更高) 來壓縮 foo
成
foo.bz2
foo.bz2
產生 foo
。
foo.tar
保存檔。
foo.tar.gz
。
foo.tar.bz2
。 [25]
bar/
成 foo.tar
保存檔。
bar/
到
foo.tar.gz
保存檔。
bar/
到
foo.tar.bz2
保存檔。 [26]
README.gz
的內容。
foo
檔案而內容為已解壓縮的 README.gz
。
README.gz
的內容到 foo
檔案。(如果該檔案不存在,請先建立。)
請先使用上述的指令當作測試來探勘系統目錄。如果您有任何指令上的問題,請閱讀說明文件。比如說,這些指令是好的出發點:
$ man man $ man bash $ man ls
現在使用 vim
的好機會,請按下 F1。您應該會看到至少前 35
行。然後實作線上測驗,將游標移至 |tutor| 並按下 Ctrl-]。參閱 編輯器, 第 11 章 了解更多編輯器。
請注意,許多從 GNU 和 BSD 來的 Unix-like 指令皆有簡潔的說明,您可以使用以下其一的方法叫出來(有些情況是不用加任何參數):
$ commandname --help $ commandname -h
也順便練習一下Debian技巧, 第 8 章的範例來練功吧。
相信您現在比較清楚如何使用 Debian 系統了。我們來探勘 Debian 中更進階的指令技巧。 [27]
一個簡單的指令是以下的排列
對於置換和引用,參閱 命令列操作, 第 13.2.6 節。
典型的指令執行是使用下述的 shell 指令列: [28]
$ date Sun Oct 26 08:17:20 CET 2003 $ LC_ALL=fr_FR date dim oct 26 08:17:39 CET 2003
在這裡,date
是前景工作。至於環境變數 LC_ALL 是指:
大部份的指令在執行時不會比環境變數更早執行。對於上面的範例來說,你也可以這樣做:
$ LC_ALL=fr_FR $ date dim oct 26 08:17:39 CET 2003
當你看到這裡時,輸出的結果是受到環境變數的影響而產生 French 的文字。如果您想要環境變數也影響到子程序(舉例來說,當使用 shell script),您必須 "export" 它:
$ export LC_ALL
當您在 shell 輸入指令時,shell 會 PATH 這個環境變數中列舉的目錄來找指令。PATH 同時也是 shell 的收尋路徑。
在預設安裝的 Debian 下,使用者的PATH
不會包含/sbin/
。所以當您需要從 /sbin/
執行一些像
ifconfig
的指令時,您必須修改 PATH
的值並包含該路徑。PATH通常是設定在 ~/.bash_profile
之中,參閱 Bash 設定, 第 3.2
節。
部份的指令需要額外的參數才能執行,這些參數通常是以 - 或 -- 開頭並透過指令來呼叫。
$ date Mon Oct 27 23:02:09 CET 2003 $ date -R Mon, 27 Oct 2003 23:02:40 +0100
這裡的參數 -R 會改變 date
的輸出結果而變成 RFC-2822
相容的字串。
有時候您希望能同時處理相同類別的檔案但不想一個一個輸入時,shell wildcards的 "檔名原型擴展" 就能解決這樣的問題。
舉例來說,思考一下底下的範例:
$ mkdir junk; cd junk; touch 1.txt 2.txt 3.c 4.h .5.txt $ echo *.txt 1.txt 2.txt $ echo * 1.txt 2.txt 3.c 4.h $ echo *.[hc] 3.c 4.h $ echo .* . .. .5.txt $ echo .[^.]* .5.txt $ echo [^1-3]* 4.h $ cd ..; rm -rf junk
每個指令會回傳 exit 狀態當成回傳值。
執行後的回傳值可經由 $? 環境變數來存取。
$ [ 1 = 1 ] ; echo $? 0 $ [ 1 = 2 ] ; echo $? 1
請注意,shell 使用邏輯計算回傳值時,success的話就當成邏輯 TRUE。這並不是那麼直覺,因為success有代表 zero 的意思。
我們試著記憶底下的 shell 指令用法。閱讀過這些用法後也請參考 Shell 參數, 第 13.2.3 節, Shell 重導 (redirection), 第 13.2.4 節, Shell 條件式, 第 13.2.5 節 和 命令列操作, 第 13.2.6 節。
該 command
指令是在 背景中的子 shell
執行。背景的工作允許使用者在一個 shell 中執行多個程式。
背景程序的管理包含了 shell 本身的 jobs
, fg
,
bg
和 kill
。請閱讀 bash(1)
中的
"SIGNALS", "JOB CONTROL" 和 "SHELL BUILTIN
COMMANDS"。 [29]
command1
的 standard output 是餵給 command2
的stand
input。兩個指令可以同時執行。這就叫作
pipeline。
command1
和 command2
是按照順序地執行。
command1
先被執行。如果成功的話,則command2
也會依序的執行。command1
和command2
皆成功執行,則傳回 success。
command1
先被執行。如果不成功的話,則command2
還是會依序的執行。command1
或command2
其一成功執行的話,則傳回 success。
將command
的結果重導到foo檔案。(會覆寫)
將command
的結果重導到foo檔案。(會附加)
將command
的 standard output 和 standard error
重導到foo檔案。
將command
的 standard input
導到foo檔案。試試看以下的例子:
$ </etc/motd pager ... (the greetings) $ pager </etc/motd ... (the greetings) $ pager /etc/motd ... (the greetings) $ cat /etc/motd | pager ... (the greetings)
雖然四個用法皆顯示同樣的結果,但最後的例子會再跑一次 cat
指令,這會多浪費一些資源。
您可以為常用的指令設定別名。例如:
$ alias la='ls -la'
現在,la
會以長清單格式來列出所有的檔案,也就是 ls
-la 的縮寫。
您可以使用 type
指令來辨識真正的路徑。例如:
$ type ls ls is hashed (/bin/ls) $ type la la is aliased to `ls -la' $ type echo echo is a shell builtin $ type file file is /usr/bin/file
這裡的 ls
是最近被查詢到的,然而 file
並沒有,因此
ls
是 "hashed",也就是說 shell 有一個紀錄可以快速找到
ls
的位置。
在 Unix-like 系統上有一些常用的標準文字處理工具。
head
輸出檔案的第一行。
tail
輸出檔案的最後一行。
sort
排序文字檔行列。
uniq
刪除已排序的檔案中重複的資料。
tr
轉譯或刪除文字。
diff
行與行的檔案比較。
grep
依照收尋原型來收尋文字。
ed
是個最原始基本的編輯器。
sed
是串流資料編輯器。
vi
是全螢幕編輯器。
emacs
是全螢幕編輯器。
egrep
依照收尋原型來收尋文字。
awk
支援簡單的文字處理。參閱 Awk, 第 13.3 節。
perl
幾乎所有的文字處理皆能達成。參閱 Perl, 第 13.4 節。
參閱 Regular-expression substitution, 第 8.6.13 節, 精巧的管道指令輔助script, 第 8.6.18 節 和 輕巧的 Perl Script, 第 8.6.20 節 取得更多 script 範例。
正規表示法是用在許多文字處理的工具上。有點類似 shell wildcards (參閱 Shell wildcards, 第 4.3.8 節),但卻更複雜與強大。
正規表示法可用文字或metacharacters來描述比對原型。metacharacter 是具有特殊意義的字元。有兩種主要的類別:BRE 和 ERE,端看您使用的文字工具(Unix-like 文字處理, 第 4.4 節)決定。
對 EREs 來說,metacharacters 包含 "\ . [ ] ^ $ * + ? ( ) { } |"。這個表示法意思是:
在 BREs 裡,metacharacters:"+ ? ( ) { }
|" 是無作用的,取而代之的是倒斜線的 "\+ \? \( \) \{ \}
\|"。所以說,使用 BREs 時,(r1|r2) 必須像
\(r1|r2\) 用倒斜線隔開。雖然 emacs
也支援 BRE,但改用
"+ ?"
來當作metacharacters。所以不需要使用雙引號來隔開。參閱 置換表示法, 第 4.4.2 節
了解這些metacharacters組合怎麼使用。
舉例來說,grep
可以使用正規表示法來收尋文字:
$ egrep 'GNU.*LICENSE|Yoyodyne' /usr/share/common-licenses/GPL GNU GENERAL PUBLIC LICENSE GNU GENERAL PUBLIC LICENSE Yoyodyne, Inc., hereby disclaims all copyright interest in the program
在置換表示法中,底下的字元有特別的意義:
emacs
下請用 \&)
如要使用 Perl 置換字串,請改用 $n 代替\n和&。因為後兩各在 Perl 中是無意義的。
舉例說明:
$ echo zzz1abc2efg3hij4 | \ sed -e 's/\(1[a-z]*\)[0-9]*\(.*\)$/=&=/' zzz=1abc2efg3hij4= $ echo zzz1abc2efg3hij4 | \ sed -e 's/\(1[a-z]*\)[0-9]*\(.*\)$/\2===\1/' zzzefg3hij4===1abc $ echo zzz1abc2efg3hij4 | \ perl -pe 's/(1[a-z]*)[0-9]*(.*)$/$2===$1/' zzzefg3hij4===1abc $ echo zzz1abc2efg3hij4 | \ perl -pe 's/(1[a-z]*)[0-9]*(.*)$/=&=/' zzz=&=
請特別注意各處理工具在置換時所使用的分隔符號,以及軟體如何用正規表示法比對這些文字的方式。
在編輯器中使用這些表示法也可以用來移動游標和置換文字。
請閱讀以上這些指令相關的說明文件。
在 GNU/Linux 和其他 Unix-like
的系統上,檔案是有組織地放置在目錄下。 [30]
全部的檔案和目錄被整理放在一個階乘和樹狀的根目錄
(/)。
這些檔案和目錄可以放在不同的硬體裝置上。mount(8)
指令能掛載硬體裝置並加入到這巨大的檔案樹系統上。反過來說,umount(8)
則可以卸載這些裝置。
以下是一些基礎觀念:
MYFILE
和
MyFile
是不同的檔案
/
表示。可別把 "root" 跟 root
帳號搞混了喔。參閱 用 root 登入 shell 提示符號, 第
4.1.1 節。
/
。 [31]
根目錄是一個例外,它的檔名:/
(叫做 "斜線" 或
"根目錄")且不能更名。
/
開頭且每個檔案或目錄的路徑都包含 /
符號。第一個
/
是目錄的名稱,其餘的皆為分隔符號以便區分檔名的每個部份。
以上的說明容易造成混淆。請看一下底下的範例:
/usr/share/keytables/us.map.gz
這是一個完整的檔案名稱,有些人也稱作 path。但大部分都只用
us.map.gz
來當作檔名。 [32]
/etc/
and
/usr/
。這些子目錄底下有更多的子目錄,例如
/etc/init.d/
和 /usr/local/
。總括來說,這就叫做
目錄樹(directory tree)。
您可以想像一個絕對路徑是從該樹的根(/
)延伸到最後的分支(檔案)。您也曾聽過別人稱為家族樹,所以每個子目錄都有其父母或祖先,而路徑就是檔案完整的起源。
至於相對路徑並不是以 root(/) 目錄開頭。您必須牢記 ../
代表上一層的目錄。
有興趣的話可以參閱Filesystem Hierarchy
Standard
,該文件詳細說明了階層式檔案系統的細節。您要記住的是底下這些目錄的用途:
/
/
代表 root 目錄。
/etc/
/var/log/
/home/
同於 Unix,Debian 系統提供了一個檔案系統,能夠統一化所有硬碟,儲存媒體,主控台或透過串列埠遠端存取硬體的動作。
Debian 系統中每個檔案,目錄,named pipe
或硬體裝置都有一個inode
的資料結構,記載該檔案的相關屬性,例如:使用者所擁有
(擁有者),屬於那一個群組,最後存取的時間等。參閱 /usr/include/linux/fs.h
了解 Debian
GNU/Linux 系統中的 inode結構的意義。
將硬體統一化成檔案的表示法是非常有用的,這允許我們可以使用相同的方法來存取完全不同的硬體。
全部的檔案可以存放在一個硬碟,或者 20 個硬碟,有些硬碟甚至是分散在網路上不同的電腦。您無法想像在查詢檔案或目錄時,所有的指令都能正常運作且不用理會真正的檔案是放在哪一個實體裝置上。
檔案和目錄的存取權限對下面三種使用者分別定義:
對檔案來說,每個權限分別對應到一些可做的動作:
對目錄來說,每個權限分別對應到一些可做的動作:
在這裡, 目錄的執行權限不只代表允許讀取目錄內的檔案,也代表允許看到它們的屬性,像是檔案大小和更動時間等。
使用 ls
來顯示檔案和目錄的權限資訊 (和更多其他的資訊). 請參閱
ls(1)
。當使用 ls
的 -l
選項,則會依下列順序來顯示相關資訊:
在 root 帳號下可使用 chown
改變檔案的擁有者。要改變檔案的所屬群組,可以用檔案擁有者或 root 的身份來執行
chgrp
。要改變目錄的存取權限,可以用檔案擁有者或 root 的身份來執行
chmod
。控制foo
檔案的語法是:
# chown newowner foo # chgrp newgroup foo # chmod [ugoa][+-=][rwx][,...] foo
請參閱 chown(1)
, chgrp(1)
和 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
另外的辦法是使用數字並搭配 chmod(1)
來設定檔案權限。數字模式使用 3
到 4 數字寬的八進制數字。每個數字皆有其代表意義:
這聽起來很複雜,但其實是相當簡單的。如果您觀察ls -l的結果就能發現前面幾行(2-10)是代表檔案權限(請用二進制,"-"表示 "0","rwx"表示"1")。這些數字如果用八進制來代表檔案權限的話,相信您一定能夠了解。 [33] 舉個例子,比如:
$ touch foo bar $ chmod u=rw,go=r foo $ chmod 644 bar $ ls -l foo bar -rw-r--r-- 1 penguin penguin 0 Nov 3 23:30 foo -rw-r--r-- 1 penguin penguin 0 Nov 3 23:30 bar
預設的檔案權限遮罩可使用 shell 內建的 umask
來設定。參閱builtins(7)
。
在 GNU/Linux 檔案中,有三個時間戳記:
注意, ctime 並不是檔案建立時間。
要注意的是,在 GNU/Linux 系統中,即使只是簡單的讀取檔案,通常也會為了要更新
inode 中的 atime 而導致寫入的動作。如果以
noatime
選項來掛上檔案系統的話,就可以略過這個動作而使讀取的動作加快。請參閱
mount(8)
。
使用 touch(1)
中的指令來改變檔案的時間戳記。
有兩種方法可以把一個叫 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
起跳的。而 ..
目錄是連結到其所上層目錄,所以目錄的連結數會隨著子目錄數目而增加。
named pipe 是類似管線的檔案。您可以輸入資料到這個檔案,然後他會輸出到別的地方。因此他也就作 FIFO(First-In-First-Out):第一個送入管線的資料也是第一個送出管線的資料。
如果寫入 named pipe 時,寫入的程序並不會中斷直到該管線讀入為止。如果讀取 named pipe,讀取的程序會一直等待直到資料讀取完畢才停止。管線的大小永遠是零,因為它並不儲存資料,它主要是連結兩個程序,就像 shell 的 |。但是,自從管線被命名之後,兩個程序不需要在同一行執行或同一個使用者執行。
試著執行以下的例子:
$ cd; mkfifo mypipe $ echo "hello" >mypipe & # put into background [1] 5952 $ ls -l mypipe prw-r--r-- 1 penguin penguin 0 2003-11-06 23:18 mypipe $ cat mypipe hello [1]+ Done echo hello >mypipe $ ls mypipe prw-r--r-- 1 penguin penguin 0 2003-11-06 23:20 mypipe $ rm mypipe
socket 有點類似 named pipe (FIFO) 且允許程序與程序之間可以交換資料。針對 socket 來說,這些程序不需要在同一個時間執行或者同一個父程序產生的子程序。這是 inter process communication 的 ENDPOINT。網路上不同的主機透過 socket 也能夠互換資料。
任何的硬體或虛擬裝置,例如硬碟,顯示卡,螢幕或鍵盤等,皆視為裝置檔案。/dev/console,主控台是最常見的虛擬裝置。
裝置有兩種型別:
您可以讀寫裝置檔案,即使是這些檔案可能採用二進制而讓人難以理解。直接寫入資料到這些檔案有時候是測試硬體是否已經連線的好方法。例如,您可以列印文字檔到印表機裝置:/dev/lp0
或送指令到連接數據機的串列埠上:/dev/ttyS0
。但請小心操作,也許會造成重大的損壞。所以要特別小心。
/dev/null
類別
/dev/null
是一個特別的裝置檔案,它會捨棄所有寫入的資料。如果您不需要某些資料,直接丟到
/dev/null
。它基本上就是個黑洞。如果您讀取/dev/null
,您會馬上得到
end-of-file (EOF) 字元。
/dev/zero
也是一樣,差別在於讀取時會得到\0字元(不是數字 0 喔)。參閱 空檔案, 第 8.6.34 節。
執行 ls
您就可以得到裝置節點的號碼:
$ ls -l /dev/hda /dev/ttyS0 /dev/zero brw-rw---- 1 root disk 3, 0 Mar 14 2002 /dev/hda crw-rw---- 1 root dialout 4, 64 Nov 15 09:51 /dev/ttyS0 crw-rw-rw- 1 root root 1, 5 Aug 31 03:03 /dev/zero
請看底下說明:
/dev/hda
的主要裝置號碼:3,次要號碼是:0。只有disk群組中的使用者可以讀寫它。
/dev/ttyS0
的主要裝置號碼:4,次要號碼是:64。只有dialout群組中的使用者可以讀寫它。
/dev/zero
的主要裝置號碼:1,次要號碼是:5。任何帳號皆可讀寫它。
在舊式的系統上,安裝過程會使用 /sbin/MAKEDEV
建立裝置節點。參閱
MAKEDEV(8)
。
較新的系統上,/dev
下的檔案系統是經由類似 /proc
的檔案系統自動產生。
/proc
檔案系統
/proc
檔案系統是虛擬的檔案系統,紀錄著系統資訊和執行中的程式。
許多人常常因為 /proc/kcore
太大而傷腦筋。該檔案的大小跟您電腦安裝的記憶體一樣大。它主要用來進行核心偵錯,但本身並不存在任何地方,所以請別擔心它的容量大小。
參閱 透過 proc 檔案系統調整核心, 第
7.3 節 和 proc(5)
。
請參閱 X, 第 9.4 節。
X Window 系統會跟著 xdm
-like
等圖形登入軟體執行時啟動,或者在主控台輸入:
$ exec startx
自從 X 環境提供了許多的視窗管理器之後,他們的使用者介面都有些許的差異。請牢記按下右鍵會帶出系統選單。該功能一直都有。
如果您找不到 menu,請安裝相關的套件。參閱 體驗 Debian 套件管理, 第 6.2 節。
底下是執行 X Window 系統時重要的組合控制鍵。
現在,我推薦您閱讀 The Linux
Documentation Project: Guides
網站上主要的引導書籍:
sysadmin-guide
/usr/share/doc/sysadmin-guide/html/index.html
http://www.tldp.org/LDP/sag/index.html
(not available)
(not applicable)
http://www.tldp.org/LDP/nag2/index.html
rutebook
(從 non-free)
/usr/share/doc/rutebook/
http://www.icon.co.za/~psheer/book/index.html.gz
參閱 Debian 的技術支援, 第 15 章 取得更多的學習資源。
Debian 參考手冊
CVS, 週一 四月 3 22:58:37 UTC 2005osamu@debian.org
asho@debian.org.tw