最近在学习linux的树目录结构,也查一些资料。感觉参差不齐,大多都不具体,或者没有整体性,不能让人对Linux神奇的目录结构有个整体性的认知。这样对于理解文件结构会有点难度。所以在下想出一个好方法,来引导自己学习。这个主要要前期理解一些基本概念,后期的话重点是从FHS收集能来证明你的观点的论据.
FHS(Filesystem Hierarchy Standard)相信大家都有看过或者听过,文件系统层次标准。为什么叫层次标准(我自己这样觉得),Linux本身的开源的自由的,但是它文件结构确实分层次,或者换句话说:文件结构里是一个严格的等级制度所呈现出来的结构。从顶端的根一直到端的目录或着文件。有种普天之下,莫非王土;率土之滨,莫非王臣的感觉。
然后我们还有接受一个分类的概念。文件是共享还是不共享?文件是静态不变还是天天在变?如何来根据这些特性分出具体的目录出来?
首先,文件共享与不共享:在linux系统本身就存在共享库的概念,lib下面的东东就是拿来共享的你不共享那系统就无法正常运行了,命令也无法正常用了。不共享的话,这个很好理解,就像你的秘密你的密码会跟人分享么,一般情况下是不会的。所以像/etc这样的秘密目录一般不可能共享的。
其次,文件静态与动态之分。这个也很好理解,静态:即不变,在linux中最不能改变的东西是什么?内核跟还有配置,二进制可执行命令等等。逻辑上就能想得到,哪天一醒来发现,DHCP,DNS配置陪修改了,那不是悲剧了。动态的,什么东西需要天天变,日志嘛,每天收发邮件等等,这些都在变。
总结,linux的目录整个都是靠这两组参数来设定的。所以你只要先判断这个文件共享么,这个文件可变么,就可以大致知道他是那一类的文件或者目录,便于理解整个文件目录分布的特点。
讲了这么多下面来实践一下:
[root@studnet20 ~]# cd /
[root@studnet20 /]# ls
bin cgroup home lost+found mnt net root srv tools
binutils-build dev lib media mnt2 opt sbin sys usr
boot etc lib64 misc mntiso proc selinux tmp var
完完整整单根的倒置树形结构。在最上层的是/即根。那就是这个国家的领土了,领土是万万不能侵犯的.下面的目录一般来说都是一定需要的。现在来说下他们有什么大体的作用,这个在HFS里面只重点的部分。(这这里就要有上面的层次概念,还有是否共享与是否可变的参数)
/root /home
//用户的家目录,包含用户绝大部分的个人配置,比较私有。
/boot
//系统启动用的目录,包涵内核跟初始化内存文件系统,grub等,不可变。不可共享。
/media /mnt
//简单的区分:/media移动的介质挂载点,如usb,光盘等。/mnt的就是零时挂一些文件系统,如NFS这样。具体区别可以看FHS。
/bin /usr/bin /usr/local/bin
//这三个目录经常会有人搞混了,因为装的都是二进制可执行文件命令,一般的用户都可用的命令,干嘛要分三个地方呀?原因大体有二:为了节省/的压力。为了区分/bin。第一个好理解,第二个说的意思是强调/bin下的命令是linux系统的基本命令,强调地位,/bin没有的装在/usr/bin下,第三方的软件装置后只能放在这里/usr/local/bin local指出是本地,就是你的机子咯。
/sbin /usr/sbin /usr/local/sbin
//sbin分三个地方放,大体是跟/sbin一个样。/sbin放的跟系统恢复,还原有些关系。带s的都是superuser用的。第三方的也只能放在/usr/local/sbin下。
/dev //device 设备的缩写,设备文件都在这。
/etc
//配置文件,都放在这里哦,如果是第三方的软件,可能在./etc/opt下面。
/usr
//这个是经典的静态目录,其实是可以单独分区然后以只读的方式挂载,如果这样做可能有些文件要做些一些特定的软链接出来。
/opt //add-on
//软件推荐的安装目录,默认情况,共享库还有命令,都会装到/usr这个目录下相对应的子目录里。
/var /srv
//经典的动态目录。mail池,服务器数据。等。/var里有一些经典的共享夹子,如mail等。
/tmp
//经典的动态目录,存放缓存文件的。
介绍完这个,再来理解一个理念。你上面所看到的/
下面的目录分布,在某些子目录下一般也按这样的目录分布。例如:
[root@studnet20 ~]# cd /usr/
[root@studnet20 usr]# ls
bin games java lib64 local share tmp
etc include lib libexec sbin src X11R6
这个夹子里有:/bin /lib /etc /sbin /tmp
再看这个:
[root@studnet20 /]# cd /usr/
[root@studnet20 usr]# cd local/
[root@studnet20 local]# ls
bin etc games include lib lib64 libexec sbin share src
这个夹子里有 /bin /etc /lib /sbin
总结:这些目录的具体作用大体是这样定义的:大类上的功能加上小类上的区别与强化。这样就可知道为什么了.比如说:/usr/local/bin 单从大类上说:就是用户可执行的命令。从小类上看:不是系统的基本命令一般是第三方的命令。这样是不是就明了了!
结合以上的这些,可能一部分未经FHS论证,无论对错,暂且先放在这。然后你在开始读FHS你会发现我这里错了,希望你也能分享一下你的经验。
说明:一定要去看看FHS哦,很有爱的。
本文出自 “kikupotter” 博客,谢绝转载!