一:Windows用户看Linux目录
与Windows将硬盘看做“C盘”、“D盘”几个独立的分区不同,Linux将整个文件系统看做一棵树,这棵树的树根叫做根文件系统,用/表示。各个分区通过“挂载”(mount)以文件夹的形式访问。
在/中的文件夹很多,本文介绍常见文件夹的意义。Linux的目录结构确实比较复杂,但设置合理、层次鲜明。本文以FHS 2.3为例进行介绍。
根文件系统
/bin
这一目录中存放了供所有用户使用的完成基本维护任务的命令。其中bin是binary的缩写,表示二进制文件,通常为可执行文件。一些常用的系统命令,如cp、ls等保存在该目录中。
/boot
这里存放的是启动Linux时使用的一些核心文件。如操作系统内核、引导程序grub等。
/dev
在此目录中包含所有的系统设备文件。从此目录可以访问各种系统设备。如CD-ROM,磁盘驱动器,调制解调器和内存等。在该目录中还包含有各种实用功能,如用于创建设备文件的MAKEDEV。有关/dev中文件的具体含义,请参考/dev
/etc
该目录中包含系统和应用软件的配置文件。
/home
目录/home存储普通用户的个人文件。每个用户的主目录均在/home下以自己的用户名命名。
/lib
这个目录里存放着系统最基本的共享链接库和内核模块。共享链接库在功能上类似于Windows里的.dll文件。
/lib64
64位系统有这个文件夹,64位程序的库。
/lost+found
这并不是Linux目录结构的组成部分,而是ext3文件系统用于保存丢失文件的地方。不恰当的关机操作和磁盘错误均会导致文件丢失,这意味着这些被标注为“在使用”,但却并未列于磁盘上的数据结构上。正常情况下,引导进程会运行fsck程序,该程序能发现这些文件。除了“/”分区上的这个目录外,在每个分区上均有一个lost+found目录。
/media
可移动设备的挂载点,当前的操作系统通常会把U盘等设备自动挂载到该文件夹下。
/mnt
临时用于挂载文件系统的地方。一般情况下这个目录是空的,而在我们将要挂载分区时在这个目录下建立目录,再将我们将要访问的设备挂载在这个目录上,这样我们就可访问文件了。
/opt
多数第三方软件默认安装到此位置,如Adobe Reader、google-earth等。并不是每个系统都会创建这个目录。
/proc
它是存在于内存中的虚拟文件系统。里面保存了内核和进程的状态信息。多为文本文件,可以直接查看。如/proc/cpuinfo保存了有关CPU的信息。
/root
这是根用户的主目录。与保留给个人用户的/home下的目录很相似,该目录中还包含仅与根用户有关的条目。
/sbin
供超级用户使用的可执行文件,里面多是系统管理命令,如fsck, reboot, shutdown, ifconfig等。
/tmp
该目录用以保存临时文件。该目录具有Sticky特殊权限,所有用户都可以在这个目录中创建、编辑文件。但只有文件拥有者才能删除文件。为了加快临时文件的访问速度,有的实现把/tmp放在内存中。
/usr
该目录是到目前为止综合性最高的目录之一。在这个目录中将保存大多数的默认二进制文件。具体情况与LINUX的发行版本有关,除了必须的系统应用程序以外,该目录还可保存多种其他程序。
/usr目录结构
/usr通常是一个庞大的文件夹,而且里面有一些和根目录下相似的子文件夹。/usr的作用到底是什么呢?
/usr中存放的文件是与具体的系统无关的,而且应是只读的。所谓与具体的系统无关,就是说同一个软件,装在不同的系统上后,存放在/usr中的内容是相同的,而程序的个性化配置文件不应在/usr中。所谓只读,就是说除了安装、卸载软件外,不应修改/usr中的内容,也就是说在系统正常运行时,/usr甚至可以被只读挂载。
由于/usr所占的空间通常很大,有人把它放在单独的分区中。
/usr/bin
多数日常应用程序存放的位置。如果/usr被放在单独的分区中,Linux的单用户模式不能访问/usr/bin,所以对系统至关重要的程序不应放在此文件夹中。
/usr/include
存放C/C++头文件的目录
/usr/lib
系统的库文件
/usr/local
新装的系统中这个文件夹是空的,可以用于存放个人安装的软件。安装了本地软件的/usr/local里的目录结构与/usr相似
/usr/sbin
在单用户模式中不用的系统管理程序,如apache2等。
/usr/share
与架构无关的数据。多数软件安装在此。
/usr/X11R6
该目录用于保存运行X-Window所需的所有文件。该目录中还包含用于运行GUI要的配置文件和二进制文件。
/usr/src
源代码
/var目录结构
/var中包括了一些数据文件,如系统日志等。/var的存放使得/usr被只读挂载成为可能。
/var中的主要目录 /var/cache 应用程序的缓存文件
/var/lib 应用程序的信息、数据
/var/local /usr/local中程序的信息、数据
/var/lock 锁文件
/var/log 日志文件
/var/opt /opt中程序的信息、数据
/var/run 正在执行着的程序的信息,如PID文件应存放于此
/var/spool 存放程序的假脱机数据(即spool data)
/var/tmp 临时文件
二:内核源码目录结构
要进行内核裁剪不可缺少的是要对内核源码的目录结构有一定的了解这里进行简单介绍。
(1)arch/: arch子目录包括了所有和体系结构相关的核心代码。它的每一个子目录都代表一种支持的体系结构,例如i386就是关于intel cpu及与之相兼容体系结构的子目录。PC机一般都基于此目录。
(2)block/: 部分块设备驱动程序。
(3)crypto: 常用加密和散列算法(如AES、SHA等),还有一些压缩和CRC校验算法。
(4) documentation/: 文档目录,没有内核代码,只是一套有用的文档。
(5) drivers/: 放置系统所有的设备驱动程序;每种驱动程序又各占用一个子目录:如,/block 下为块设备驱动程序,比如ide(ide.c)。
(6)fs/: 所有的文件系统代码和各种类型的文件操作代码,它的每一个子目录支持一个文件系统, 例如fat和ext2。
(7)include/: include子目录包括编译核心所需要的大部分头文件。与平台无关的头文件在 include/linux子目录下,与 intel cpu相关的头文件在include/asm-i386子目录下,而include/scsi目录则是有关scsi设备的头文件目录。
(8)init/: 这个目录包含核心的初始化代码(注:不是系统的引导代码),主要包含两个文件main.c和Version.c,这是研究核心如何工作的好的起点之一。
(9)ipc/: 这个目录包含核心的进程间通讯的代码。
(10)kernel/: 主要的核心代码,此目录下的文件实现了大多数linux系统的内核函数,其中最重要的文件当属sched.c。
(11)lib/: 放置核心的库代码。
(12) mm/:这个目录包括所有独立于 cpu 体系结构的内存管理代码,如页式存储管理内存的分配和释放等
(13)net/: 核心与网络相关的代码。
(14)scripts/: 描述文件,脚本,用于对核心的配置。
(15)security: 主要是一个SELinux的模块。
(16)sound: 常用音频设备的驱动程序等;
(17)usr: 实现了一个cpio。
(18)COPYING: GPL版权申明;
(19)CREDITS: 光荣榜;
(20)Kbuild: 一个包含了某些通用规则的编译文件;;
(21)MAINTAINERS: 维护人员列表,对当前版本的内核各部分都有谁负责;
(22) Makefile: 第一个Makefile文件。用来组织内核的各模块,记录了个模块间的相互这间的联系和依托关系,编译时使用;仔细阅读各子目录下的Makefile文件对弄清各个文件这间的联系和依托关系很有帮助;
(23)ReadMe: 核心及其编译配置方法简单介绍;
(24)REPORTING-BUGS:有关报告Bug 的一些内容;一 般在每个目录下都有一个.depend文件和一个Makefile文件。这两个文件都是编译时使用的辅助文件。仔细阅读这两个文件对弄清各个文件之间的联 系和依托关系很有帮助。另外有的目录下还有Readme文件,它是对该目录下文件的一些说明,同样有利于对内核源码的理解。
源于网络,感谢作者。