成為Linux的主人(轉)

ba發表於2007-08-11
成為Linux的主人(轉)[@more@]在Linux 系統管理中, /etc下面的檔案無疑的伴演了極端重要的角色, 在這篇文章中, 將為各位介紹 /etc 下每個檔案的用途, 及相關
指令的運用, 希望能為大家在成為 System Administrator 的路上有所助益.

  特別要說明的是, 在這篇文章中, 有些檔案仍然沒有提到, 這是因為, 這些檔案都不是一二十行的描述就可以講完的! 如 /rc.d 下的檔
案, inittab 這兩個最好就要合起來講, 因為這些牽扯到 bootstrapping, 絕對不是三言兩語就可以講完的. 凡是有這種特性的檔案, 有機
會的話將再為各位介紹......

本文 :

  /etc/DIR_COLORS : 設定在用 ls 時 , 各種不同檔案型態所用的顏色 , 但是不能用pipe 再導向輸出, 否則就沒有各種顏色了. 由檔案
的內容可以很輕易的瞭解, 如 default 的 directory 是藍色, 具有可執行檔許可權的是綠色, 而壓縮檔是紅色...... 這些都可依個人喜好來
加以更改. 這個檔案內容寫得很清楚, 想必各位一眼也就可以看得出來, 在顏色的組成方面, 我們常用 RGB 三原色的成份值來組合出各種不
同的顏色. 由 R,G,B 這個 bit 是 0 或是 1 三個值組合出顏色這個道理雖淺顯, 但假如我們更瞭解 R,G, B 的加權值分別是1,2,4 的話,
那就再也不用翻書查顏色了...... 選擇自己的調色盤來取代預設的調色盤, 是經常會做的事.

/etc/HOSTNAME : 記錄完整的 hostname 與 domain name , 這個檔案在須要 hostname的場合會用得到 , 如 /etc/rc.d/rc.M 等 ......

/etc/NETWORKING : YES , 沒什麼用 , 改成 NO 會怎樣呢 ? 會對網路的使用會造成影響嗎 ? 答案是否定的 .

/etc/X11 : link 到 /var/X11/lib/X11

/etc/at.deny : 在這個檔案中可記載那些人不能使用at這個命令來做一些 later job, 假如 at.deny 是空的, 而且 at.allow 也不存在的話. 那就是每個人都可以用 at 這個命令.

/etc/at.allow : 相對於 at.deny , 這個檔案記載那些人可以使用 at 這個指令關於at 這個指令, 我想它的重要性是無庸置疑的, 各位應該要會這個指令的用法, 會了這個指令, 可以在工作的執行上會更有彈性而關於
at.deny 與 at.allow, at 會先去找 at.allow, 假如存在而且有記錄一些人的話, 那就只有這些人能使用 at 這個指令, 但假如at.allow 並不存在的話, 那 at 就會去找 at.deny, 沒有在at.deny 中的人都可以使用 at 這個指令了! 特別要說明的是, at的執行時間也許會不如你所預期的, 比如說明明一個檔你叫它在7:02 執行, 但它卻會等到 7:05 才執行, 這是因為 crond 是每五分鐘才去看看 at 的 queue 中是否有要執行的 job. 當然, 你也可以改成每分鐘都去 check, 但這樣似乎沒有很大的意義, 除非你對時間的準確度要求的很嚴格, 否則應該沒有必要去動才是. 各位可去看看/var/spool/cron/crontabs/root 中就有詳細記載, 每五分鐘 run
一次 atrun, 所以 at 命令的執行可看成以每五分鐘為一單位.

/var/spool/atjobs: 當你使用 at 來安排一件工作時, 系統會把
你目前的環境變數及所要用 at 執行的工作抄一份到這個目錄下的檔案中 .

/var/spool/atspool : 使用 at 命令之後所得到的一些訊息 , 會被
記錄在這裡 . 可能是 at 所要執行的命令傳回的錯誤訊息 , 或傳回執行成功的訊息 .

/etc/csh.cshrc :
/etc/csh.login :這兩個檔案應該很熟悉羅! 它就是各位常見到的.cshrc 及.login,
不過大家通常只注意到自己的 home directory 有這兩個檔, 但
/etc 下也有這兩個檔, 不過 /etc 下的這兩個檔絕大部份的情況下
都是由 system administrator 在 maintain, 一般 user 不應該有
權力去改. 順便一提的是, 系統會先去找 /etc 下這兩個檔, 接著才
加上自己 home directory 中那兩個檔的設定. 當然, 有了.login
也有.logout,.logout 中可以寫一些 message, 或執行一些命令, 當
你下達 logout 之後,.logout 就會被執行.

/etc/disktab : ( disk parameter table ) 假如你在剛開機有 pass 磁碟機的一些引數
給 kernel 的話 ( 通常是你的硬碟比較奇怪 , 需要 pass cylinders ,
heads , sectors 給 kernel 才抓的到 , 或者是 SCSI 的硬碟有時
有時也要用到一些引數 ) 那這些引數就會被記錄在這裡 .

/etc/exports : 這個檔案記錄著你要給別人 mount 的檔案系統 , 這就是典型 NFS
系統所存在的檔案 , TCP/IP for OS/2 若要使用 network file system
而要把自己的 filesystem 讓別人 mount 的話 , 這個檔案也是不可或缺的 .
比如說 , 我所在的 domain name 為 dorm10.nctu.edu.tw , 我要把
我 /usr 下的 filesystem 開放給十舍的人 mount , 那我在 exports 中
要這樣寫 :

/usr *.dorm10.nctu.edu.tw(ro)

接著 , 在 /etc/rc.d/rc.inet2 中 , 找到下面的段落 , 這些段落本來
每一列的前面都有 # , 現在 , 依照下面的內容 , 把這些 # 拿掉 .

......
......
......
# Start the SUN RPC Portmapper.
if [ -f ${NET}/rpc.portmap ]
then
echo -n " portmap"
${NET}/rpc.portmap
fi
......
......
......
# # Start the various SUN RPC servers.
if [ -f ${NET}/rpc.portmap ]
then
# if [ -f ${NET}/rpc.ugidd ]
# then
# echo -n " ugidd"
# ${NET}/rpc.ugidd -d
# fi
if [ -f ${NET}/rpc.mountd ]
then
echo -n " mountd"
${NET}/rpc.mountd
fi
if [ -f ${NET}/rpc.nfsd ]
then
echo -n " nfsd"
${NET}/rpc.nfsd
fi
# # Fire up the PC-NFS daemon(s).
if [ -f ${NET}/rpc.pcnfsd ]
then
echo -n " pcnfsd"
${NET}/rpc.pcnfsd ${LPSPOOL}
fi
# if [ -f ${NET}/rpc.bwnfsd ]
# then
# echo -n " bwnfsd"
# ${NET}/rpc.bwnfsd ${LPSPOOL}
# fi
fi

echo

# Done!

在 client 端可用如 :

mount -vt nfs rebel.dorm10.nctu.edu.tw:/usr /tmp

將 server 端的 /usr 掛到 client 端的 /tmp

/etc/fastboot : 這個檔案是使用 shutdown -f 所產生的 , -f means "fastboot"
在重新 reboot 之後 , 系統會去檢查這個檔是否存在 , 以決定
是否要 run fsck .

/etc/fdprm : floopy disk parameter table . 一般情況下是不須要更動的 , 除非
你有很奇怪格式的軟碟 , 或者你想做出不符合一般格式的磁碟片 .

/etc/nologin : 你也許會感到奇怪 , 我的 /etc 這個 directory 下並沒有這個檔啊?
沒錯 , 它平常是不存在的 , 通常會看到這個檔的話 , 那表示系統大
概要 shutdown 了 , 因為系統要 shutdown 了 , 自然不希望有人又
login 進來 , 所以在我們執行 shutdown 時 , nologin 這個檔會自動
的被 create , 裡面放著 shutdown message . 實際上 , 當我們在
login 時 , 系統會去檢查有沒有這個檔 , 假如有的話 , 那就會印出
這個檔案中的 message , 然後不讓你 login .
nologin 也有可能是為了某種理由被製造的 , 比如說系統在 maintain
暫時不希望有人 login . 無論如何 nologin 若存在 , 就不能 login

/etc/fstab : 記錄開機要 mount 上來的 filesystem, 這個檔案相當重要! 各位可以
在 /etc/rc.d/rc.S 中找到 /sbin/mount -avt nonfs 這一列, 當執行
到這一列時, mount 就依據 /etc/fstab 中的記載, 自動的將檔案系統
mount 上來. 下面就是一個頗為典型的範例. 假如你一開機就想自動
mount 一些 filesystems, 而不要等到開機後再以手動 mount 的話那把
這些 filesystems 及相關資訊寫在這個檔, 是不錯的選擇. 在檔案格式
方面, 每一列有六個欄位, 不過後面兩個欄位常被省略所以我們只看到
有四個欄位. 其它的兩欄分別為 dump-freq 及 pass-number.
dump-freq 預設值為 0; 而 pass-number 是 fsck 所會參考到的地方,
數字可為 0,1,2...... 1 表示這個 filesystem 將首先被 fsck check,
2 表其次, 餘類推......

# 要掛上的檔案系統 掛在那裡 檔案系統格式 讀寫狀況
/dev/hdb2 swap swap defaults
/dev/hdb1 / ext2 defaults
/dev/sbpcd /mnt/cdrom iso9660 ro
/dev/hda1 /mnt/dosc msdos rw
/dev/hda5 /mnt/dosd msdos rw
/dev/hda6 /mnt/dose msdos rw
none /proc proc defaults

/etc/ftpusers : 這個檔案記錄那些人不可以 ftp 簽入系統 , 預設值有 root , uucp
news . 這些都是為了 security 方面的考量 , 你可以在這裡加入
不可 ftp 進來的 user id .

/etc/gateways : 顧名思義 , 這個檔案記錄一些 gateways 的 information
這個檔案的格式如下 :

name1 gateway name2 metric value

當 routed 啟動時, 它會去讀 /etc/gateways 這個檔. 若一個 gateway
並不做 routing information 交換的話, 那它就會被標示成 passive,
假如有做 routing information 的交換 ( 這臺機器上有 run routed )
, 那就會標示成 active net 或 host 這個關鍵字是指出 route 是到網
路或是到一臺特定的機器上. name1 就是目地網路或目地機器的名字.
這個名字可用 /etc/hosts 或是 /etc/networks 中的 symbolic host
name. name2 就是訊息將被送往之 gateway 的 name 或 IP address.

/etc/group : 如同 /etc/passwd 列出了系統中所有的使用者名字 , /etc/group
定義系統中所有的 group name 與相關訊息 .
格式為: group_name:passwd:GID:user_list

如 : author::200:jhhsu,emotion,passion

上面的例子表示 jhhsu,emotion,passion 都是屬於 author 這個 group
通常 passwd 那欄是空白的 , 表示不用密碼 . 或放一個 * 號
以下也是一個典型的例子 :

root::0:root,jhhsu
bin::1:root,bin,daemon
daemon::2:root,bin,daemon
sys::3:root,bin,adm
adm::4:root,adm,daemon
tty::5:
disk::6:root,adm
lp::7:lp
mem::8:
kmem::9:
wheel::10:root,jhhsu
shadow::11:root
mail::12:mail
news::13:news
uucp::14:uucp
man::15:man
users::100:games
bbs:*:99:bbs,bbsuser,bbsroot

當然啦 ! 這個檔案只能為 superuser 所讀寫 , 一個 superuser 可使
用 groupadd , groupdel , groupmod 來管理 /etc/group 這個檔 ,
要手動管理也是可以 . 下面是這三個指令的用法 :

groupadd [ -g gid [ -o ] ] group_name
groupdel group_name
groupmod [ -g gid [ -o ] ] [ -n new_group_name ] group_name

/etc/hosts : 這個檔案記錄著 IP address 至 hostname 的 mapping . 如我們想把
ccsun21.csie.nctu.edu.tw 取個別名叫 : oldstock
那我們就可以在這個檔案裡寫如下的敘述 :

140.113.17.151 oldstock

如此一來 , 以後我們 telnet oldstock 就等於 telnet
140.113.17.151

在這個檔案中 , 至少會有兩列 , 一列為 loopback , 這是為了偵錯目的
而設的 , 另一列為 local host , 就是你自己的機器 .

/etc/hosts.equiv : 在裡面可以設定一些 remote machine , 而從這些 remote
machine 利用 rsh 或 rlogin 連回 local machine 的話
便不用輸入密碼
同樣的東西也可以在 .rhosts 見到 . 比如說在 ccsun22.csie
.nctu.edu.tw 上你的 Home Directory 建一個 .rhosts 檔 ,
裡面的內容如下:

rebel.dorm10.nctu.edu.tw jhhsu

以後只要在 rebel.dorm10.nctu.edu.tw 上利用 rsh 或 rlogin 至
ccsun22.csie.nctu.edu.tw 的話 , 也不須要輸入密碼
rsh -l jhhsu ccsun22.csie.nctu.edu.tw 不過這東西最好不要亂設 , 以信得過的 hosts 為主 ,
才不會造成 security 上的困擾 .

/etc/hosts.deny : 設定那些 remote hosts 不可以使用 inetd
/etc/hosts.allow : 設定那些 remote hosts 可以使用 inetd
至於 inetd 有那些 service , 各位可以去看看 /etc/inetd.conf
從裡面就可以很清楚的可以看得出來 .
假如你採取比較 close 作法的話 , 可以在 hosts.deny 中寫

ALL:ALL

但是如此一來 , 只要不是從 localhost 來的 , 那大概都不必
玩了 , 所以 , 我們也要適時的在 hosts.allow 中加入可以
access 的 hosts , 如 :

ALL:140.113.17. ALL:140.113.4.
ALL:140.113.6.

/etc/hosts.lpd : 記錄可 access printer 的 hosts . 假如一臺 printer可被網路上
的許多臺主機所共用, 那 printcap 這個檔案必須得描述完整的網
路設定資訊. 在比較嚴密控制的情況下, 有兩個條件必須符合首先,
local machine 必須在 remote machine 的 /etc/hosts.eqiuv 中,
或者, 在 remote machine 的 /etc/hosts.lpd 中被記載第二, 使
用者必須有 remote machine 的帳號.

/etc/inetd.pid : inetd process id

/etc/issue : 這個檔案被記錄著 login prompt 前所要 echo 的 message , 特別要注
意的是 /etc/rc.d/rc.S
下面的四行若沒有 mark , 則每次開機 issue 及 motd 都會被改變
假如你要有自己的設定 , 下面一定都要 mark 起來如下 :
#echo > /etc/issue
#echo Welcome to Linux /bin/uname -a | /bin/cut -d -f3. >> /etc/issue
#echo >> /etc/issue
#echo "/bin/uname -a | /bin/cut -d -f1,3. (Posix)." > /etc/motd

/etc/klogd.pid : klogd process id

/etc/ld.so.conf : 記錄一些 library 所在的目錄

/etc/magic : 初看這個檔案時 , 也許只能隱隱約約的看到 : 這個檔案似乎是描述一些
檔案的格式. 沒錯, 這個檔案記載了許多檔案格式的識別字串或方法那
這個檔在那裡會用的到呢? 各位有使用過 file 這個指令嗎? file 這個
指令的命令格式為:

file [ -c ] [ -z ] [ -L ] [ -f namefile ] [ -m magicfile ] file

file 這個指令非常有趣, 它可以告訴你某一個檔案的格式, 如它是一個
text 檔, 或是一個 shell script 或 DOS 可執行檔等...... 而 file
這個指令, 就是去參考 /etc/magic 這個資料庫. 假如你知道某一檔案
的識別字, 而原來 magic 這個資料庫沒有記錄, 那你可以把識別方法加
到資料庫中, 或乾脆建立自己的資料庫算了.


/etc/motd : 這個檔很簡單 , 就是 message of the day 的意思 , 裡面可以寫一些
message , 而這些 message 會在 login shell 之前被顯示出來 .
通常都是 system administrator 要告知 user 的一些訊息. 而關於每次
都會改變的問題, 在前面 /etc/issue時已提出過,記得 mark 起來就好.

/etc/mtab : 目前 mount 上來的 filesystems , 各位可使用 mount 這個指令來看看
這個檔的變化 . 如我在 mount 3.5 inch 軟碟A 前 , 我看到的 mtab
如下 :

/dev/hdb1 / ext2 rw 0 0
/dev/hda1 /mnt/dosc msdos rw 0 0
/dev/hda5 /mnt/dosd msdos rw 0 0
/dev/hda6 /mnt/dose msdos rw 0 0
none /proc proc rw 0 0

然而 , 當我以 mount -t msdos /dev/fd0H1440 /mnt/dosa 這個指令將
3.5 inch 軟碟A 掛上來後 , mtab 變為像下面的情況 :

/dev/hdb1 / ext2 rw 0 0
/dev/hda1 /mnt/dosc msdos rw 0 0
/dev/hda5 /mnt/dosd msdos rw 0 0
/dev/hda6 /mnt/dose msdos rw 0 0
none /proc proc rw 0 0
/dev/fd0H1440 /mnt/dosa msdos rw 0 0
所以 , 各位瞭解啦 ! /etc/mtab 就是記錄目前 mount 的 filesystem


/etc/mtools : 這裡面記錄的 , 是給 /usr/bin/mtools 參考用的 parameter .
那 mtools 是什麼呢? 簡而言之 , 就是一群操作 MSDOS 檔案的命令
集合 , 可用的命令可多了 , 如下 :

mattrib - change MSDOS file attribute flags
mcd - change MSDOS directory
mcopy - copy MSDOS files to/from Unix
mdel - delete an MSDOS file
mdir - display an MSDOS directory
mformat - add an MSDOS filesystem to a low-level formatted diskette
mlabel - make an MSDOS volume label
mmd - make an MSDOS subdirectory
mrd - remove an MSDOS subdirectory
mread - low level read (copy) an MSDOS file to Unix
mren - rename an existing MSDOS file
mtype - display contents of an MSDOS file
mwrite - low level write (copy) a Unix file to MSDOS

這些都被 link 到 mtools

/etc/named.boot : 假如你要建立 name server 的話 , 那這個檔就是你要修改的地方
詳細的情況可以去看 named 的 manual 就知道了 .

/etc/named.pid : named process id

/etc/networks : 這個檔與 hosts 有點像 , 都是在 boot 的時候會用到的東西 ,
在這裡可以定義一個子網路與其 IP address 的資訊 .

/etc/nntpserver : 這個檔案記錄著 news server , 當我們使用 tin -r ( read news
remotely ) 時, 這個檔案會被參考到, 或者若這個檔案不存在的
話, 那環境變數 NNTPSERVER 所指定的 server 就會被當成要去取
得 news 的 server. 譬如說, 你要將 140.111.1.11 當成 news
server, 那 /etc/nntpserver 中就可寫:

140.111.1.11

/etc/nologin : 你也許會感到奇怪 , 我的 /etc 這個 directory 下並沒有這個檔啊?
沒錯, 它平常是不存在的, 要是你看到這個檔的話, 那表示系統大概
要 shutdown 了, 因為系統要 shutdown 了, 自然不希望有人又
login 進來, 所以在我們執行 shutdown 時, nologin 這個檔會自動
的被 create, 裡面放著 shutdown message. 實際上, 當我們在
login 時, 系統會去檢查有沒有這個檔, 假如有的話, 那就會印出這
個檔案中的 message, 然後不讓你 login. nologin 也有可能是為了
某種理由被製造的, 比如說系統在 maintain 暫時不希望有人 login.
無論如何 nologin 若存在, 就不能 login.

/etc/passwd : 呵呵 , 這個檔案可重要了 . 一個 system administrator 最初要學的
常常就是這個檔案的內容! 這個檔案記錄著系統可以認得的 user, 當
然啦, 也包括一些非人的 login name, 但這是有特殊用途的. 檔案內
容每列的格式如下:

Login Name:Encrypted Password:UID:GID:GCOS:Home Directory:Login Shell

(1)login name: 在 login name 方面 , 每個 login name 必須是唯一的 ,
而且不能超過 8 個字元, 一般說來, login name 雖然可以
大小寫混合, 但平常的情況下都用小寫. 順便一提的是
/usr/lib/aliases 這個檔案, 修改這個檔案的內容可以使
mail 時用超過 8 個字元的檔案. 如平常 mail
jhhsu@dorm10 .nctu.edu.tw 可變成 mail
. tw.

(2)Encrypted Password: 這欄是編碼過的密碼 , 在新增一個 new user 時
應該在這欄填上 * , 更改 password 可用 passwd
這個指令 . passwd 這是一個 setuid 的指令 ,
關於 setuid , setgid , stickybit , 各位可去
參考 Unix Security 方面的書籍 .

(3)UID: user id , 每個"人"都要不一樣 , 習慣上 , 100 以前被保留做為
特殊的 user id , 而 root 總是 0.

(4)GID: group id , 在比較早期的系統 , 一個 user 同時只能在一個 group
不過現在就沒有這種限制了 .

(5)GCOS: 這欄基本上沒有特殊格式限制 , 在這裡可以寫上你的 full name
家中電話, 住址等...... 愛寫什麼就寫什麼. 雖然你可以亂寫一
通, 但若你用到逗號, 系統會把它當成區間. 如你寫: Jin-Hwa
Sheu, NCTU, 80317, (02)1234123 這些都會被當成 Full Name,
Office, Home Phone. finger 這個指令會去讀這地方的資訊. 用
chfn 可改變這欄.

(6)Home Directory: 這欄沒什麼 , 就是記錄 user 的 home directory 而已
利用 cd 或 cd~ 都可回到 home directory .

(7)Login Shell: 設定使用者所使用的 shell , 預設值是 /bin/bash . 當
然 , 你也可以自己改成 csh 或 tcsh , zsh 也是不錯 ,
假如有 free 版的 korn Shell 也可拿來用用 . 用 chsh
可改變你的 login shell .

為了 security 方面的考量 , 各位可以安裝 shadow , 將 passwd 這個檔
完全的與一般 user 隔絕開來 , 連讀也沒有辦法讀 passwd 這個檔 .

/etc/profile : profile 這個檔是 bash 這個 shell 所用的 , profile 之於 bash
就好像 cshrc 之於 csh. 同樣的, /etc 下的 profile 也是 SA 在維
護的, 主要是放著全域的設定 ( Global Setting)

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617731/viewspace-947284/,如需轉載,請註明出處,否則將追究法律責任。

相關文章