在 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. 端的 /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 /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/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 telnet ccsun3.cc.nctu.edu.tw ccsun3.cc.nctu.edu.tw: Host name lookup failure 因为没有了 name server , 所以 ccsun3.cc.nctu.edu.tw 没有办法被解译 , 故会有 Host name lookup failure 这段讯息 . /etc/securetty : 假如你要以 root login 的话 , 实际上是有限制的 , 这个档案就 列出了 root 可以 login 的 ttys , 假如你把每一列都 mark 起来 那就没有任何一个 terminal 可供 root login 了 , 所以呢 , 就会出现以下的情况 : Rebel login: root root login refused on this terminal. 再一次的 , 我们看到了 unix security 方面的东西 , 仔细的在这 个档案列出可用的 terminal , 可使从 modem 连的使用者或经由网 路来的其它的使用者比较不容易取得 superuser 的权力 . /etc/services : /etc/shell : 这个档案再简单也不过了 , 里面就记录著可以用的 login shell . 还 有一点 , 那就是这个档的记录会在使用 chsh 时做为参考 , 唯有被列 在这里的 shell , 使用 chsh 时才会出现这些 shell 可选 . /etc/sudoers : 在一个不是很复杂的系统中 , 也许一个 System Administrator 就可 以管理所有的事情 . 但一但系统提供的服务变多 , 系统管理的工作 也随之变得沉重 , 这时候 , sudo 就派上用场了 , sudo 可以让一个 普通的 user 变成 superuser , 这样一来 , 一个系统的某些工作 , 就可以分配给这些 superusers 来做 . 以减轻负担 . 当然 , 并不是每个 user 都可以变成 superuser . 所以 /etc/sudoers 就是记录著那些人可以用 superuser 的身份来执行一 些工作 , 这个档案的格式如下 : host alias section format: Host_Alias HOSTALIAS = host-list Host_Alias ::= a keyword. HOSTALIAS ::= an upper-case alias name. host-list ::= a comma separated list of hosts. command alias section format: Cmnd_Alias CMNDALIAS = cmnd-list Cmnd_Alias ::= a keyword. CMNDALIAS ::= an upper-case alias name. cmnd-list ::= a comma separated list commands. user specification format: user access_group [: access_group] ... access_group ::= host_type = [op]cmnd_type [,[op]cmnd_type] ... host_type ::= a lower-case host name OR a host alias. cmnd_type ::= an command OR a command alias. op ::= the logical ''!'' NOT operator. 如下面是一个极为简单的例子 : # Cmnd alias specification Cmnd_Alias SHUTDOWN=/sbin/halt,/sbin/shutdown # User specification root ALL=ALL jhhsu ALL=ALL emotion ALL=ALL,!SHUTDOWN 在这个例子当中 , jhhsu 可以执行 root 所有的命令 , emotion 除了 halt 及 shutdown 不能执行以外 , 其它 root 能执行的命令他都能执行 . 这个档案有一个专属的 editor 叫 visudo 可来编辑 /etc/sudoer 这个档案 在编辑完这个档案之后 , jhhsu 就可以用 sudo.bin 这个命令转换成 superuser 来做原来只有 superuser 才能做的事 . 而关于使用 sudo.bin 有一个记录档 , 在 /var/adm/sudo.log , 里面记录著谁在什么时候利用 sudo 下了那些指令 . 顺便一提的是 : 利用下面这个命令可抓出那些人转换 成 superuser 但却没有成功 ...... grep "FAILED SU" /var/adm/messages/etc/utmp : 从 utmp 中可以 知道现在有谁正在用系统 . 当使用者 logout 之后 , init ( 很重要的 process , 以后有时间将为各位介绍 ) 就去把 logout 的使用者从 /etc/utmp 中去掉 . 实际上 , utmp 每个 record 是像这样的一个结构 : struct utmp { short ut_type; /* type of login */ pid_t ut_pid; /* pid of process */ char ut_line[12]; /* devicename of tty -"/dev/" */ char ut_id[2]; /* init id or abbrev. ttyname */ time_t ut_time; /* logintime */ char ut_user[8]; /* username, not null-term */ char ut_host[16]; /* hostname for remote login */ long ut_addr; /* IP addr of remote host */ }; 了解这个档案 , 进而去修改 , 可以做出许多有趣的事 ......:P /etc/wtmp : 简而言之 , wtmp 是一个 login data base , 有许多的指令会用到这个 档 , 像 last , sessreg , who 等 ...... 这个档案格式与 utmp 大致相同 , 只是多了 shutdown 及 reboot 这 个记录 , 指出系统的 shutdown 或 reboot , 及一个空的 user name 指出在相关 terminal 的 logout . 还有 , 不像 /etc/utmp , / /etc/wtmp 的记录是慢慢的附加上去的 , 也就是说 , 这个档案会越变 越大 , 虽然变大的速度并不会太快 , 但一但到了某种程度大小的话 System Administrator 应该要考虑砍掉部份 . 下面是用 last 这个 指令所得到的部份内容 : bbs tty1 Tue Nov 29 19:09 - 19:09 (00:00) root tty1 Tue Nov 29 19:08 - 19:09 (00:00) root tty1 Tue Nov 29 19:07 - 19:07 (00:00) runlevel ~ Tue Nov 29 19:07 reboot ~ Tue Nov 29 19:07 /etc/zprofile : link 到 /etc/profile |
|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )
GMT+8, 2024-9-29 21:27 , Processed in 0.336635 second(s), 12 queries , Gzip On, MemCache On.
Powered by Discuz! X3.5
© 2001-2023 Discuz! Team.