读鸟哥私房菜之Linux的目录属性

目录属性的意义
    那么r、w、x对于目录是什么意义呢,简单的来说:

    r(read contents in directory):表示具有读取目录结构清单的权限,所以当你具有目录的r权限时,你可以利用ls来显示目录的列表内容;

    w(modify contents in diretory):这个可写入的权限对目录来说,是很了不起的!拥有以下权限:建立新的档案与目录;删除已存在的档案或目录(无论该档案属于谁!);将已存在的档案或目录进行更名;搬移该目录内的档案、目录位置;

    x(access directory):这个x与能否进入该目录有关!

Linux档案的种类

正规档案 (regular file ): 就是一般我们在进行存取的类型的档案,在由 ls –al 所显示出来的属性方面,第一个属性为 [ - ],例如 [-rwxrwxrwx ]。另外,依照档案的内容,又大略可以分为:
  纯文字文件(ASCII):这是 Unix 系统中最多的一种档案类型啰,称为纯文字文件是因为内容为我们人类可以直接读到的数据, 例如数字、字母等等。几乎只要我们可以用来做为设定的档案都属于这一种档案类型。 举例来说,您可以下达『 cat ~/.bashrc 』      就可以看到该档案的内容。 (cat 是将一个档案内容读出来的指令)
  二进制文件(binary):还记得我们在『 Linux 是什么 』那一章里面的 GNU 发展史中提过, 我们的系统其实仅认识且可以执行二进制档案 (binary file) 吧?没错~ 您的 Linux 当中的可执行档 (scripts, 文字型批次文件不算) 就是这种格式的啦~ 举例来说,刚刚下达的指令 cat 就是一个 binary file 。
  数据格式文件(data): 有些程序在运作的过程当中会读取某些特定格式的档案,那些特定格式的档案可以被称为数据文件 (data file)。举例来说,我们的 Linux 在使用者登入时,都会将登录的数据记录在 /var/log/wtmp 那个档案内,该档案是一个 data file ,他能够透过 last 这个指令读出来! 但是使用 cat 时,会读出乱码~因为他是属于一种特殊格式的档案。瞭乎?

目录 (directory):就是目录啰~第一个属性为 [ d ],例如 [drwxrwxrwx]。

连结档 (link):就是类似 Windows 底下的快捷方式啦!第一个属性为 [ l ], 例如 [lrwxrwxrwx] ;

设备与装置文件 (device):与系统周边及储存等相关的一些档案, 通常都集中在 /dev 这个目录之下!通常又分为两种:
  区块 (block) 设备档 :就是一些储存数据, 以提供系统存取的接口设备,简单的说就是硬盘啦!例如你的一号硬盘的代码是 /dev/hda1 等等的档案啦!第一个属性为 [ b ];
  字符 (character) 设备档 :亦即是一些串行端口的接口设备, 例如键盘、鼠标等等!第一个属性为 [ c ]。

资料接口文件 (sockets):既然被称为数据接口文件, 想当然尔,这种类型的档案通常被用在网络上的数据承接了。我们可以启动一个程序来监听客户端的要求, 而客户端就可以透过这个 socket 来进行数据的沟通了。第一个属性为 [ s ], 最常在 /var/run 这个目录中看到这种档案类型了。

数据输送文件 (FIFO, pipe): FIFO 也是一种特殊的档案类型,他主要的目的在解决多个程序同时存取一个档案所造成的错误问题。 FIFO 是 first-in-first-out 的缩写。第一个属性为 [p] 。

Linux目录配置的依据

    有所谓的 Filesystem Hierarchy Standard (FHS) 标准的出炉了! 这个 FHS ( http://www.pathname.com/fhs/ ) 事实上仅是规范出在根目录 ( / ) 底下各个主要的目录应该是要放置什么样的档案而已。 FHS 定义出两层规范出来,第一层是 / 底下的各个目录应该要放置什么样内容的档案数据,例如 /etc 应该要放置设定档, /bin 与 /sbin 则应该要放置可执行档等等。第二层则是针对 /usr 及 /var 这两个目录的次目录来定义的。 例如 /var/log 放置系统登录文件、 /usr/share 放置共享数据等等。 由于 FHS 仅是定义出最上层 (/) 及次层 (/usr, /var) 的目录内容应该要放置的档案数据, 因此,在其它个次目录层级内,就可以随开发者自行来配置了。

在 Linux 底下,所有的档案与目录都是由根目录 / 开始的!那是所有目录与档案的源头~ 然后再一个一个的分支下来,有点像是树枝状啊~因此,我们也称这种目录配置方式为:『目录树 (directory tree)』,如下图:


/
根目录 root (/),一般建议在根目录底下只接目录,不要直接有档案在 / 底下。 根目录是开机的时候系统第一个挂载的 partition ,所以,所有开机过程会用到的档案, 应该都要放置在这个 partition 当中。举例来说,/etc, /bin, /dev, /lib, /sbin 这五个次目录都应该要与根目录连在一起,不可独立成为某个 partition 呢!
/bin, /usr/bin, /usr/local/bin
除了 /bin 之外, /usr/local/bin, /usr/bin 也是放置『使用者可执行的 binary file 的目录』喔!举例来说,ls, mv, rm, mkdir, rmdir, gzip, tar, cat, cp, mount 等等重要指令都放在这个目录当中。
/boot
这个目录主要的目的是放置 Linux 系统开机会用到的档案。 开机会用到什么呢?没错~就是 Linux 的核心档案。这个目录底下文件名为 vmlinuz 的就是 Linux 的 Kernel 啦!粉重要的东西! 而如果你的开机管理程序 (loader) 选择 grub 的话,那么这个目录内还有 /boot/grub 这个次目录呦!
/dev
在 Linux 系统上,任何装置与接口设备都是以档案的型态存在于这个目录当中的。 您只要透过存取这个目录底下的某个档案,就等于存取某个装置啰~ 主要又分为接口设备 (character device),例如键盘、鼠标等;以及储存设备 (block device), 例如硬盘、光盘等等。在此目录下的档案会多出两个属性,分别是 major device number , 与 minor device number 。我们的系统核心就是透过这两个 number 来判断装置的呢! 比要重要的档案有 /dev/null, /dev/tty[1-6],  /dev/ttyS*,  /dev/lp*,  /dev/hd*,  /dev/sd*  等等
/etc
系统主要的设定文件几乎都放置在这个目录内,例如人员的账号密码文件、 各种服务的启始档等等。一般来说,这个目录下的各档案属性是可以让一般使用者查阅的, 但是只有 root 有权力修改。并且在此目录下的档案几乎都是 ASCII 的纯文本文件哩。 不过, FHS 建议不要放置可执行文件在这个目录中喔。比较重要的档案有: /etc/inittab, /etc/init.d/, /etc/modprobe.conf, /etc/X11, /etc/fstab, /etc/sysconfig/ 等等。另外,其下重要的目录有:
  • /etc/init.d/:所有服务的预设启动 script 都是放在这里的,例如要启动或者关闭 iptables 的话: /etc/init.d/iptables start /etc/init.d/iptables stop
  • /etc/xinetd.d/:这就是所谓的 super daemon 管理的各项服务的设定文件目录。
  • /etc/X11:与 X Window 有关的各种设定档都在这里,尤其是 xorg.conf 或 XF86Config 这两个 X Server 的设定档。
/home
这是系统预设的使用者家目录 (home directory)。在你新增一个一般使用者账号时, 预设的使用者家目录都会规范到这里来。比较重要的是,家目录有两种代号喔: ~:代表目前这个使用者的家目录,而 ~dmtsai :则代表 dmtsai 的家目录!
/lib, /usr/lib, /usr/local/lib
系统会使用到的函式库放置的目录。 程序在运作的过程中,可能会呼叫一些额外的功能参数,那需要函式库的协助! 这些函式库就放在此处。比较重要的是 /lib/modules 这个目录内会摆放 kernel 的相关模块喔!
/lost+found
系统不正常产生错误时,会将一些遗失的片段放置于此目录下, 通常这个目录会自动出现在某个 partition 最顶层的目录下。例如你加装一棵硬盘于 /disk 中, 那在这个目录下就会自动产生一个这样的目录 /disk/lost+found
/mnt /media
这是软盘与光盘预设挂载点的地方;通常软盘挂在 /mnt/floppy 下,而光盘挂在 /mnt/cdrom 下,不过也不一定啦!只要你高兴,随便找一个地方来挂载也可以呀!另外,目前也规划出另一个 /media 的目录呢!与 /mnt 有点类似啦~
/opt
这是给主机额外安装软件所摆放的目录。举例来说, FC4 使用的是 Fedora 社群开发的软件, 如果您今天想要自行安装新的 KDE 桌面软件的话,可以将该软件安装在这个目录下的意思。 不过,以前的 Linux 系统中,我们还是习惯放置在 /usr/local 目录下呢!
/proc
这个目录本身是一个『虚拟档案系统』喔!他放置的数据都是在内存当中, 例如系统核心、形成信息、接口设备的状态及网络状态等等。因为这个目录下的数据都是在内存当中, 所以本身不占任何硬盘空间啊!比较重要的档案例如:/proc/cpuinfo, /proc/dma, /proc/interrupts, /proc/ioports, /proc/net/* 等等。
/root
系统管理员 (root) 的家目录。之所以放在这里, 是因为我们提过,系统第一个开机就被挂载的 partition 为 / , 而我们希望 /root 能够与 / 放在同一块 partition 上面之故。
/sbin, /usr/sbin, /usr/local/sbin
放置一些系统管理员才会动用到的执行指令,例如: fdisk, mke2fs, fsck, mkswap, mount 等等。与 /bin 不太一样的地方,这几个目录是给 root 等系统管理用的。但是本目录下的执行文件还是可以让一般使用者用来『察看』而不能设定喔!
/srv
一些服务启动之后,这些服务所需要取用的数据目录。举例来说,WWW 服务器需要的网页资料就可以放置在 /srv/www 里面。
/tmp
这是让一般使用者或者是正在执行的程序暂时放置档案的地方。 这个目录是任何人都能够存取的,所以您需要定期的清理一下。当然,重要数据不可放置在此目录啊!
/usr
由 FHS 规范的第二层内容,在 /usr 此目录下,包含系统的主要程序、 图形接口所需要的档案、额外的函式库、本机端所自行安装的软件,以及共享的目录与文件等等, 都可以在这个目录当中发现。事实上,他有点像是 Windows 操作系统当中的『Program files』与 『WinNT』这两个目录的结合!在此目录下的重要次目录有:
  • /usr/bin, /usr/sbin:一般身份使用者与系统管理员可执行的档案放置目录;
  • /usr/include:c/c++等程序语言的档头 (header) 与包含档(include)放置处, 当我们以 tarball 方式 (*.tar.gz 的方式安装软件) 安装某些数据时,会使用到里头的许多包含档喔!;
  • /usr/lib:各应用软件的函式库档案放置目录;
  • /usr/local:本机端自行安装的软件预设放置的目录。目前也适用于 /opt 目录。 在你安装完了 Linux 之后,基本上所有的配备你都有了,但是软件总是可以升级的, 例如你要升级你的 proxy 服务,则通常软件预设的安装地方就是在 /usr/local (local 是『当地』的意思),同时,安装完毕之后所得到的执行文件,为了与系统原先的执行文件有分别, 因此升级后的执行档通常摆在 /usr/local/bin 这个地方。给个建议啦, 通常鸟哥都会将后来才安装上去的软件放置在这里,因为便于管理呦;
  • /usr/share:共享文件放置的目录,例如底下两个目录:
  • /usr/share/doc:放置一些系统说明文件的地方,例如你安装了 grub 了,那么在该目录底下找一找,就可以查到 lilo 的说明文件了!很是便利!
  • /usr/share/man:manpage 的文件档案目录;那是什么?呵呵! 就是你使用 man 的时候,会去查询的路径呀!例如你使用 man ls 这个指令时,就会查出 /usr/share/man/man1/ls.1.gz 这个说明档的内容啰!
  • /usr/src:Linux 系统相关的程序代码放置目录,例如/usr/src/linux 为核心原始码!
  • /usr/X11R6:系统内的 X Window System 所需的执行档几乎都放在这!
/var
这个目录也很重要,也是 FHS 规范的第二层目录内容。他主要放置的是针对系统执行过程中, 常态性变动的档案放置的目录。举例来说,例如快取档案 (cache) 或者是随时变更的登录档 (log file) 都是放在这个目录中的。此外,某些软件执行过程中会写入的数据库档案, 例如 MySQL 数据库,也都写入在这个目录中!很重要吧!他底下的重要目录有:
  • /var/cache:程序档案在运作过程当中的一些暂存盘;
  • /var/lib:程序本身执行的过程中,需要使用到的数据文件放置的目录, 举例来说, locate 这个数据库与 MySQL 及 rpm 等数据库系统,都写在这个目录内。
  • /var/log:登录文件放置的目录。很重要啊!例如 /var/log/messages 就是总管所有登录档的一个档案!
  • /var/lock:某些装置具有一次性写入的特性,例如 tab (磁带机), 此时,为了担心被其它人干扰而破坏正在运作的动作,因此,会将该装置 lock (锁住)起来, 以确定该装置只能被单一个程序所使用啊!
  • /var/run:某些程序或者是服务启动后,会将他们的 PID 放置在这个目录下喔!
  • /var/spool:是一些队列数据存放的地方。举例来说,主机收到电子邮件后, 就会放置到 /var/spool/mail 当中,若信件暂时发不出去,就会放置到 /var/spool/mqueue 目录下, 使用者工作排程 (cron) 则是放置在 /var/spool/cron 当中!

其中有几个重要的目录需要特别说明一下:

• /etc:这个目录是系统设定文件放置的地方, 包括您系统上的账号与密码 (/etc/passwd, /etc/shadow),还有开机时所要用到的各项设定值 (/etc/sysconfig/*) ,还有各主要的网络服务的设定文件,都在这个目录中。 意思就是说,如果这个目录底下的档案被删除或者是死掉了,嘿嘿~ 您的系统大概也就需要『很花功夫』的重建了~ ^_^。因此, 一般鸟哥都会定期将这个目录的所有档案给他备份下来, 反正这个目录的大小应该不会超过 50MB 才对,多多备份,有备无患啊!
• /usr/local:虽然说目前已经将这个目录的重要性移动到 /opt 了, 但是鸟哥还是比较习惯将我自己开发或自行额外安装的软件放置在这个 /usr/local 目录下。 如果您的 Linux 系统是多人共管的话,那么,养成一个良好的操作习惯是有必要的。 那么安装软件的习惯也要好好建立起来啊~不要随意安装呢! 统一放置在 /usr/local 或者是 /opt 底下吧! ^_^
• /var:在上面提过一次,这里再次强调。 这个目录是在管理系统运作过程中的重要中间暂存数据的,例如 /var/lib 与 /var/run 。 此外,最终的数据例如邮件 /var/spool/mail 也是放置在这个目录中~ 另外,几乎所有服务的登录文件 (可以记录谁、什么时候、由哪里登入主机、做了什么事等等信息!) 都放在 /var/log 这个目录下,因此,这个目录也很重要。记得常常去检查 /var/log/messages 这个档案是否有异常啊~

你或许可以将你的系统做成这样的 partition(分区) 分布:
  /
  /boot
  /usr
  /home
  /var
这是比较常见的磁盘分布情况,其中:
  • / 根目录可以分配约 1 GB 以内;
  • /boot 大概在 50 MB 就可以了,因为开机档案并不大;
  • /var 就至少需要 1GB 以上,因为你的 mail 、 proxy 预设的储存区都在这个目录中,除非你要将一些设定改变!
  • /home 与 /usr 通常是最大的,因为你所安装的数据都是在 /usr/ 当中,而用户数据则放置在 /home 当中,因此通常大家都会建议你将所剩下的磁盘空间平均分配给这两个目录说! 不过也不一定啦! /usr 大概给个 10G 就很多了~其它的可以都给 /home ,也可以保留一些剩余空间来作为以后的安装与设定用啊!

PS. 而新的 Unix 与 Linux 系统中,文件名最多可以容许几个字符?单一文件名可达 255 字符,完整文件名 (包含路径) 可达 4096 个字符
PS. 每种操作系统都有其独特的读取档案的方法,也就是说, 每种操作系统对硬盘读取的方法不同,所以就造就了不同的档案系统(File System)了。Windows 98 预设的档案系统是 FAT (或 FAT16) 档案系统, Windows 2000 有所谓的 NTFS 档案系统,至于 Linux 的正统档案系统为 ext3 (Third Extended File System), 他是 Ext2 的升级版,主要是增加了日志 (journaling) 的功能

posted on 2013-03-29 10:44  夜月升  阅读(185)  评论(0)    收藏  举报

导航