路漫漫其修远兮
吾将上下而求索

linux 目录结构说明

1、目录结构        

        当在使用Linux的时候,如果通过ls –l / 就会发现,在/下包含很多的目录,比如etc、usr、var、bin … … 等目录,而在这些目录的下级目录中,,发现也有很多的目录或文件。文件系统在Linux下看上去就象树形结构,所以我们可以把文件系统的结构形象的称为 树形结构。

        文件系统的是用来组织和排列文件存取的,在Linux中,我们可以通过ls等工具来查看其结构,在Linux系统中,我们见到的都是树形结构;比如操作系统安装在一个文件系统中,他表现为由/ 起始的树形结构。linux文件系统的最顶端是/,我们称/为Linux的根,也就是 Linux操作系统的文件系统。Linux的文件系统的入口就是/,所有的目录、文件、设备都在/之下,/就是Linux文件系统的组织者,也是最上级的领导者。

        由于linux是开放源代码,各大公司和团体根据linux的核心代码做各自的操作,编程。这样就造成在根下的目录的不同。这样就造成个人不能使用他人的linux系统的PC。因为你根本不知道一些基本的配置,文件在哪里。。。这就造成了混乱。这就是FHS(Filesystem Hierarchy Standard )机构诞生的原因。该机构是linux爱好者自发的组成的一个团体,主要是是对linux做一些基本的要求,不至于是操作者换一台主机就成了linux的‘文盲’。

        根据FHS(http://www.pathname.com/fhs/)的官方文件指出, 他们的主要目的是希望让使用者可以了解到已安装软件通常放置于那个目录下, 所以他们希望独立的软件开发商、操作系统制作者、以及想要维护系统的用户,都能够遵循FHS的标准。 也就是说,FHS的重点在于规范每个特定的目录下应该要放置什么样子的数据而已。 这样做好处非常多,因为Linux操作系统就能够在既有的面貌下(目录架构不变)发展出开发者想要的独特风格。

        事实上,FHS是根据过去的经验一直再持续的改版的,FHS依据文件系统使用的频繁与否与是否允许使用者随意更动, 

        根目录是整个系统最重要的一个目录,因为不但所有的目录都是由根目录衍生出来的, 同时根目录也与开机/还原/系统修复等动作有关。 由于系统开机时需要特定的开机软件、核心文件、开机所需程序、 函式库等等文件数据,若系统出现错误时,根目录也必须要包含有能够修复文件系统的程序才行。 因为根目录是这么的重要,所以在FHS的要求方面,他希望根目录不要放在非常大的分区, 因为越大的分区内你会放入越多的数据,如此一来根目录所在分区就可能会有较多发生错误的机会。

        因此FHS标准建议:根目录(/)所在分区应该越小越好, 且应用程序所安装的软件最好不要与根目录放在同一个分区内,保持根目录越小越好。 如此不但效能较佳,根目录所在的文件系统也较不容易发生问题。说白了,就是根目录和Windows的C盘一个样。

        根据以上原因,FHS认为根目录(/)下应该包含如下子目录:

[root@localhost /]#ll
total 106
dr-xr-xr-x.   2 root root  4096 Sep  3  2016 bin
dr-xr-xr-x.   5 root root  1024 Jul 21  2016 boot
drwxr-xr-x   18 root root  3640 Mar 13 22:48 dev
drwxr-xr-x. 126 root root 12288 Mar 19 10:53 etc
drwxr-xr-x.   3 root root  4096 Jul 21  2016 home
dr-xr-xr-x.  11 root root  4096 Jul 21  2016 lib
dr-xr-xr-x.   9 root root 12288 Sep  3  2016 lib64
drwx------.   2 root root 16384 Jul 21  2016 lost+found
drwxr-xr-x.   3 root root  4096 Nov  6 19:05 media
drwxr-xr-x    2 root root     0 Mar 13 22:48 misc
drwxr-xr-x.   3 root root  4096 Sep  3  2016 mnt
drwxr-xr-x    2 root root     0 Mar 13 22:48 net
drwxr-xr-x.   3 root root  4096 Jul 21  2016 opt
dr-xr-xr-x  140 root root     0 Mar 14 06:48 proc
dr-xr-x---.  24 root root  4096 Mar 19 00:44 root
dr-xr-xr-x.   2 root root 12288 Sep  3  2016 sbin
drwxr-xr-x.   2 root root  4096 Jul 21  2016 selinux
drwxr-xr-x.   2 root root  4096 Sep 23  2011 srv
drwxr-xr-x   13 root root     0 Mar 14 06:48 sys
drwxr-xr-x.   3 root root  4096 Jul 21  2016 test
drwxrwxrwt.  27 root root  4096 Mar 19 00:48 tmp
drwxr-xr-x.  13 root root  4096 Jul 21  2016 usr
drwxr-xr-x.  23 root root  4096 Sep 23 22:17 var

目录 放置文件的内容类型
/bin

系统有很多放置执行程序的目录,但/bin比较特殊。因为/bin放置的是在单人维护模式下还能够被操作的指令。在/bin底下的指令可以被root与一般帐号所使用,主要有:cat,chmod(修改权限), chown, date, mv, mkdir, cp, bash等等常用的指令。

/boot 主要放置开机会使用到的档案,包括Linux核心档案以及开机选单与开机所需设定档等等。Linux kernel常用的档名为:vmlinuz ,如果使用的是grub这个开机管理程式,则还会存在/boot/grub/这个目录。
/dev 在Linux系统上,任何装置与周边设备都是以档案的型态存在于这个目录当中。 只要通过存取这个目录下的某个档案,就等于存取某个装置。比要重要的档案有/dev/null, /dev/zero, /dev/tty , /dev/lp*, / dev/hd*, /dev/sd*等等
/etc

系统主要的设定文档几乎都放置在这个目录内,例如人员的帐号密码档、各种服务的启始档等等。 一般来说,这个目录下的各档案属性是可以让一般使用者查阅的,但是只有root有权力修改。 FHS建议不要放置可执行档(binary)在这个目录中。 比较重要的档案有:/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)。 在你新增一个一般使用者帐号时,预设的使用者家目录都会规范到这里来。比较重要的是,家目录有两种代号: 

~ :代表当前使用者的家目录,而 ~guest:则代表用户名为guest的家目录。每个普通用户家目录为/home/uername

/lib 系统的函式库和动态链接库非常的多,而/lib放置的则是在开机时会用到的函式库,以及在/bin或/sbin底下的指令会呼叫的函式库而已 。 什么是函式库呢?妳可以将他想成是外挂,某些指令必须要有这些外挂才能够顺利完成程式的执行之意。 尤其重要的是/lib/modules/这个目录,因为该目录会放置核心相关的模组(驱动程式)。
/lib64 64位系统特有的存放64位共享库的路径
/lost+found 这个目录是使用标准的ext2/ext3档案系统格式才会产生的一个目录,目的在于当档案系统发生错误时,将一些遗失的片段放置到这个目录下。 这个目录通常会在分割槽的最顶层存在,例如你加装一个硬盘于/disk中,那在这个系统下就会自动产生一个这样的目录/disk/lost+found
/media media是媒体的英文,顾名思义,这个/media底下放置的就是可移除的装置。 包括软碟、光碟、DVD等等装置都暂时挂载于此。 常见的档名有:/media/floppy, /media/cdrom等等。
/mnt 如果妳想要暂时挂载某些额外的装置,一般建议你可以放置到这个目录中。在古早时候,这个目录的用途与/media相同啦。 只是有了/media之后,这个目录就用来暂时挂载用了。
/opt 这个是给第三方协力软件放置的目录 。 什么是第三方协力软件啊?举例来说,KDE这个桌面管理系统是一个独立的计画,不过他可以安装到Linux系统中,因此KDE的软体就建议放置到此目录下了。 另外,如果你想要自行安装额外的软体(非原本的distribution提供的),那么也能够将你的软体安装到这里来。 不过,以前的Linux系统中,我们还是习惯放置在/usr/local目录下。
/proc 这个目录本身是一个虚拟文件系统(virtual filesystem)。 他放置的资料都是在内存当中,例如系统核心、进程(process)、周边装置的状态及网络状态等等。因为这个目录下的资料都是在记忆体(内存)当中,所以本身不占任何硬盘空间。比较重要的档案(目录)例如: /proc/cpuinfo, /proc/dma, /proc/interrupts, /proc/ioports, /proc/net/*等等。可以通过这个目录查看系统运行时的信息
/root 系统管理员(root)的家目录。 之所以放在这里,是因为如果进入单人维护模式而仅挂载根目录时,该目录就能够拥有root的家目录,所以我们会希望root的家目录与根目录放置在同一个分区中。
/sbin Linux有非常多指令是用来设定系统环境的,这些指令只有root才能够利用来设定系统,其他使用者最多只能用来查询而已。放在/sbin底下的为开机过程中所需要的,里面包括了开机、修复、还原系统所需要的指令,一般则放置到/usr/sbin/当中。至于本机自行安装的软体所产生的系统执行档(system binary),则放置到/usr/local/sbin/当中了。常见的指令包括:fdisk, fsck, ifconfig, init, mkfs等等。
/srv srv可以视为service的缩写,是一些网路服务启动之后,这些服务所需要取用的资料目录。 常见的服务例如WWW, FTP等等。 举例来说,WWW伺服器需要的网页资料就可以放置在/srv/www/里面。呵呵,看来平时我们编写的代码应该放到这里了。
/tmp 这是让一般使用者或者是正在执行的程序暂时放置档案的地方。这个目录是任何人都能够存取的,所以你需要定期的清理一下。当然,重要资料不可放置在此目录啊。 因为FHS甚至建议在开机时,应该要将/tmp下的资料都删除。
/usr: user shareable 全局共享只读数据

1. bin,sbin

2. lib,lib64

3. include: c程序头文件

4. share: 命令手册和自带文档等架构特有的文件的存储位置

5. local: 另一个层级目录,让系统管理员安装本地应用程序,也通常用于安装第三方程序

6. X11R6: x-windows程序的安装位置

7. src: 程序源文件的存储位置

/var: 存储常发生变化的数据目录,会慢慢变大

1. cache: application cache date

2. lib: variable state information

3. local: variable data for /usr/local

4. log: log files and directories,日志统一存放目录

5. opt: variable date for /opt

6. run: date relevant to running process,pid文件会存放在这里

7. spool: application spool data

8. tmp: temporary files preserved between system reboots

注释

     编译分为:

          i. 动态链接:编译过程中所需要的库文件在公共库中,执行过程中要去库中调用对应的函数,否则不能运行。运行过程中要依赖外部的库好处是多个程序共用一个库,程序体积小,占用内存小。缺点是要依赖外部库,要移植要连库一块移植。

          ii. 静态编译:将所需要的库文件复制一份到该程序中,编译完成后不需要依赖外部库就可以运行,但是体积大,占用内存多

     参考:https://www.ibm.com/developerworks/

2、绝对路径与相对路径

        绝对路径:

                由根目录(/)开始写起的文件名或目录名称, 例如 /home/dmtsai/.bashrc;

        相对路径:

                相对于目前路径的文件名写法。 例如 ./home/dmtsai,开头不是 / 就属于相对路径的写法

        相对路径是以当前所在路径的相对位置来表示的。例如目前在 /home 这个目录下, 如果想要进入 /var/log 这个目录时,

                cd /var/log   绝对路径

                cd ../var/log 相对路径

        因为你在 /home 底下,所以要回到上一层 (../) 之后,才能继续往 /var 来移动的,

        

        特别注意这两个特殊的目录:

                .  :代表当前的目录,也可以使用 ./ 来表示;

                .. :代表上一层目录,也可以 ../ 来代表。

                ./代表本目录的意思,所以./run.sh代表执行本目录下, 名为run.sh的文件。

未经允许不得转载:江哥架构师笔记 » linux 目录结构说明

分享到:更多 ()

评论 抢沙发

评论前必须登录!