Linux根文件系统
FHS标准(Filesystem Hierarchy Standard,文件系统层次标准)
目录结构
/bin目录
- 该目录下存放所有用户(包括系统管理员和一般用户)都可以使用的、基本的命令,这些命令在挂接其它文件系统之前就可以使用,所以/bin目录必须和根文件系统在同一个分区中
- /bin目录下常用的命令有:cat、chgrp、chmod、cp、ls、sh、mount、umount、mkdir、mknod、[、test等。
/sbin目录
- 该目录下存放系统命令,即只有管理员能够使用的命令,系统命令还可以存放在/usr/sbin、/usr/local/sbin目录下。/sbin目录中存放的是基本的系统命令,它们用于启动系统、修复系统等。与/bin目录相似,在挂接其它文件系统之前就可以使用/sbin,所以/sbin目录必须和根文件系统在同一个分区中。
- /sbin目录下常用的命令有:shutdown、reboot、fdisk、fsck等。
- 不是急迫需要使用的系统命令存放在/usr/sbin目录下。本地安装的系统命令存放在/usr/local/sbin目录下
/dev目录
该目录下存放的是设备文件。设备文件是Linux中特有的文件类型,在Linux系统下,以文件的方式访问各种外设,即通过读写某个设备文件操作某个具体硬件。比如通过”/dev/ttySAC0”文件可以操作串口0,通过”/dev/mtdblock1”可以访问MTD设备(NAND Flash、NOR Flash等)的第2个分区。
设备文件有两种:字符设备和块设备。其中字符’b’、’c’表示这是一个块设备文件或字符设备文件
设备文件可以使用mknod命令创建
mknod /dev/ttySAC0 c 4 64
mknod /dev/hda1 b 3 1
/dev的创建
手动创建
- 在制作根文件系统的时候,就在/dev目录下创建好要使用的设备文件,比如ttySAC0等
- 系统挂接根文件系统后,就可以使用/dev目录下的设备文件了
使用devfs文件系统:这种方法已经过时
在以前的内核中,有一个配置选项CONFIG_DEVFS_FS,它用来将虚拟文件系统devfs挂接在/dev目录上。
各个驱动程序注册时会在/dev目录下自动生成各种设备文件。在制作根文件系统时,/dev目录可以为空。
缺点
- 不确定的设备映射
- 没有足够的主/次设备号
- 命名不够灵活
- devfs消耗大量的内存
udev
udev是个用户程序(u指user space,dev是指device),它能够根据系统中硬件设备的状态动态地更新设备文件,包括设备文件的创建、删除等
使用udev机制也不需要在/dev目录下创建设备节点,它需要一些用户程序的支持,并且内核要支持sysfs文件系统。它的操作相对复杂,但是灵活性很高
busybox中有一个mdev命令,它是udev命令的简化版本
/etc目录
该目录下存放各种配置文件
PC上的Linux系统,/etc目录下目录、文件非常多。这些目录、文件都是可选的,在嵌入系统中,这些内容可以大为精简
文件 描述 export 用来配置NFS文件系统(可选) fstab 用来指明当执行”mount -a”时,需要挂接的文件系统(可选) mtab 用来显示已经加载的文件系统,通常是/proc/mounts的链接文件(可选) ftpusers 启动FTP服务时,用来配置用户的访问权限(可选) group 用户的组文件(可选) inittab init进程的配置文件(可选) ld.so.conf 其它共享库的路径(可选) passwd 密码文件(可选) /lib目录
该目录下存放共享库和可加载模块(即驱动程序),共享库用于启动系统、运行根文件系统中的可执行程序,比如/bin、/sbin目录下的程序
其它不是根文件系统所必须的库文件可以放在其它目录,比如/usr/lib、/usr/X11R6/lib、/var/lib等
目录/文件 描述 libc.so.* 动态连接C库(可选) ld* 连接器、加载器(可选) modules 内核可加载模式存放的目录(可选) /home目录
用户目录,可选的
/root目录
根用户目录
/usr目录
/usr目录的内容可以存在另一个分区中,在系统启动后再挂接到根文件系统中的/usr目录下。里面存放的是共享、只读的程序和数据,/usr中的文件应该是只读的。其它主机相关、可变的文件应该保存在其它目录下,比如/var目录
/usr目录通常包含一些目录,嵌入式系统中,这些内容可以进一步精简
目录 描述 bin 很多用户命令存放在这个目录下 include C程序的头文件,这在PC上进行开发时才用到,在嵌入式系统中不需要 lib 库文件 local 本地目录 sbin 非必须的系统命令(必须的系统命令放在/sbin目录下) share 架构无关的数据 X11R6 XWindows系统 games 游戏 src 源代码 /var目录
/var目录中存放可变的数据,比如spool目录(mail、news、打印机等),log文件、临时文件
/proc目录
这是一个空目录,常作为proc文件系统的挂接点
proc文件系统时个虚拟的文件系统,它没有实际的存储设备,里面的目录、文件都是由内核临时生成的,用来表示系统的运行状态,也可以操作其中的文件控制文件
系统启动后,使用以下命令挂接proc文件系统(常在/etc/fstab进行设置以自动挂接)
# mount -t proc none /proc
/mnt目录
- 用于临时挂接某个文件系统的挂接点,通常是空目录
- 可以在里面创建一些空的子目录,比如/mnt/cdram、/mnt/hda1等,用来临时挂接光盘、硬盘
/tmp目录
用于存放临时文件,通常是空目录。一些需要生成临时文件的程序要用到/tmp目录,所以/tmp目录必须存在并可以访问
为减少对Flash的操作,当在/tmp目录上挂接内存文件系统时,如下所示:
# mount -t tmpfs none /tmp
Linux文件属性
文件类型 | 描述 |
---|---|
普通文件(-) | 这是最常见的文件类型 |
目录文件(d) | 目录也是一种文件 |
字符设备文件(c) | 用来访问字符设备 |
块设备文件(b) | 用来访问块设备 |
FIFO(p) | 用于进程间的通信,也称为命名管道 |
套接口(s) | 用于进程间的网络通信 |
连接文件(l) | 它指向另一个文件,有软连接、硬连接 |