/dev文件系统
/dev 是 Linux 系统中用于存放设备文件的目录,通常由 udev 或 devtmpfs 动态管理。
1. 使用静态 /dev 配置
某些嵌入式系统或特殊场景可能需要静态 /dev,而非动态生成。可以通过手动创建设备文件或复制现有系统的 /dev 文件来实现。
-
手动创建设备文件
使用
mknod命令创建设备文件,例如创建一个空设备:bashmknod /dev/null c 1 3 chmod 666 /dev/null主要设备包括:
/dev/console(主设备号 5,次设备号 1)/dev/tty(主设备号 5,次设备号 0)/dev/zero(主设备号 1,次设备号 5)
-
复制现有系统的
/dev从运行中的 Linux 系统复制
/dev目录到目标系统,注意保留权限和属性:bashcp -a /dev/* /target/dev/
2. 使用 udev 规则动态生成
现代 Linux 系统通常使用 udev 动态管理 /dev。可以通过自定义 udev 规则完善设备文件。
-
检查
udev规则目录udev规则位于/etc/udev/rules.d/,例如:bashls /etc/udev/rules.d/添加自定义规则
-
创建规则文件(如
99-custom.rules)定义设备节点:KERNEL=="video*", MODE="0666", GROUP="video"重新加载
udev规则
3. 使用 devtmpfs 挂载
devtmpfs 是内核提供的动态 /dev 文件系统,通常在启动时自动挂载。如果缺失,可以手动挂载:
bash
mount -t devtmpfs devtmpfs /dev
tmpfs 的优势:
1,动态文件系统的大小。
2,tmpfs 的另一个主要的好处是它闪电般的速度。因为典型的 tmpfs 文件系统会完全驻留在 RAM 中,读写几乎可以是瞬间的。
3,tmpfs 数据在重新启动之后不会保留,因为虚拟内存本质上就是易失的。所以有必要做一些脚本做诸如加载,绑定的操作。
4. 验证设备文件
检查关键设备文件是否存在并具有正确权限:
bash
ls -l /dev/null /dev/zero /dev/console
典型输出应类似:
crw-rw-rw- 1 root root 1, 3 May 10 10:00 /dev/null
crw-rw-rw- 1 root root 5, 1 May 10 10:00 /dev/console
/usr 文件系统
/usr 是个很重要的目录,通常这一文件系统很大,因为所有程序安装在这里。/usr 里的所有文件一般来自 linux 发行版( distribution);本地安装的程序和其他东西在 /usr/local 下,因为这样可以在升级新版系统或新发行版时无须重新安装全部程序。/usr 目录下的许多内容是可选的,但这些功能会使用户使用系统更加有效。/usr 可容纳许多大型的软件包和它们的配置文件。下面列出一些重要的目录(一些不太重要的目录被省略了)。
-
/usr/x11r6
包含 x window 系统的所有可执行程序、配置文件和支持文件,之所以取名为 X11R6 是因为最后的X版本为第11版,且该版的第6次释出之意。为简化 x 的开发和安装,x 的文件没有集成到系统中。x window 系统是一个功能强大的图形环境,提供了大量的图形工具程序。用户如果对 microsoft windows 或 machintosh 比较熟悉的话,就不会对 xwindow 系统感到束手无策了。
-
/usr/x386
类似 /usr/x11r6,但是是专门给 x 11 release 5 的。
-
/usr/bin
集中了几乎所有用户命令,是系统的软件库。另有些命令在 /bin 或 /usr/local/bin 中。
-
/usr/sbin
包括了根文件系统不必要的系统管理命令,例如多数服务程序。
-
/usr/man、/usr/info、/usr/doc
这些目录包含所有手册页、gnu 信息文档和各种其他文档文件。每个联机手册的"节"都有两个子目录。例如:/usr/man/man1 中包含联机手册第一节的源码(没有格式化的原始文件),/usr/man/cat1 包含第一节已格式化的内容。联机手册分为以下九节:内部命令、系统调用、库函数、设备、文件格式、游戏、宏软件包、系统管理和核心程序。
-
/usr/include
包含了 c 语言的头文件,这些文件多以 . h 结尾,用来描述 c 语言程序中用到的数据结构、子过程和常量。为了保持一致性,这实际上应该放在 /usr/lib 下,但习惯上一直沿用了这个名字。
-
/usr/lib
lib 是 library 的简写。存放的是各应用软件的动态链接库以及一些不被一般使用者惯用的执行档或脚本(script)。编程的原始库也存在 /usr/lib 里。当编译程序时,程序便会和其中的库进行连接。也有许多程序把配置文件存入其中。
-
/usr/local
系统管理员在本机安装下载的软件(非 distribution 默认提供者),建议安装到此目录, 这样会比较便于管理。举例来说,你的 distribution 提供的软件较旧,你想安装较新的软件但又不想移除旧版, 此时你可以将新版软件安装于 /usr/local/ 目录下,可与原先的旧版软件有分别啦。 你可以自行到 /usr/local 去看看,该目录下也是具有 bin, etc, include, lib...的次目录。
-
/usr/share
放置共享文件的地方,在这个目录下放置的数据几乎是不分硬件架构均可读取的数据, 因为几乎都是文本文件。在此目录下常见的还有这些次目录:/usr/share/man:联机帮助文件;/usr/share/doc:软件杂项的文件说明;/usr/share/zoneinfo:与时区有关的时区文件。
-
/usr/src
src 是 source 的缩写,一般原始码建议放置到这里。至于核心原始码则建议放置到 /usr/src/linux/ 目录下。
/var 文件系统
/var 包含系统一般运行时要改变的数据。通常这些数据所在的目录的大小是要经常变化或扩充的。原来 /var 目录中有些内容是在 /usr 中的,但为了保持 /usr 目录的相对稳定,就把那些需要经常改变的目录放到 /var 中了。每个系统是特定的,即不通过网络与其他计算机共享。下面列出一些重要的目录(一些不太重要的目录省略了)。
-
/var/catman
包括了格式化过的帮助( man )页。帮助页的源文件一般存在 /usr/man/man 中;有些 man 页可能有预格式化的版本,存在 /usr/man/cat 中。而其他的 man 页在第一次看时都需要格式化,格式化完的版本存在 /var/man 中,这样其他人再看相同的页时就无须等待格式化了。( /var/catman 经常被清除,就像清除临时目录一样。)
-
/var/lib
程序执行的过程中,需要使用到的数据文件放置的目录。在此目录下各自的软件应该要有各自的目录。 举例来说,MySQL 的数据库放置到 /var/lib/mysql/ 而 rpm 的数据库则放到 /var/lib/rpm 中。
-
/var/local
存放 /usr/local 中安装的程序的可变数据(即系统管理员安装的程序)。注意,如果必要,即使本地安装的程序也会使用其他 /var 目录,例如 /var/lock 。
-
/var/lock
锁文件。许多程序遵循在 /var/lock 中产生一个锁定文件的约定,以用来支持他们正在使用某个特定的设备或文件。其他程序注意到这个锁定文件时,就不会再使用这个设备或文件。
-
/var/log
各种程序的日志( log )文件,尤其是 login( /var/log/wtmp log纪录所有到系统的登录和注销) 和 syslog ( /var/log/messages 纪录存储所有核心和系统程序信息)。/var/log 里的文件经常不确定地增长,应该定期清除。
-
/var/run
保存在下一次系统引导前有效的关于系统的信息文件。例如, /var/run/utmp 包含当前登录的用户的信息。某些程序或者是服务启动后,会将他们的PID放置在这个目录下。
-
/var/spool
放置"假脱机( spool )"程序的目录,如mail、news、打印队列和其他队列工作的目录。每个不同的 spool 在 /var/spool 下有自己的子目录,例如,用户的邮箱就存放在 /var/spool/mail 中。
-
/var/tmp
比 /tmp 允许更大的或需要存在较长时间的临时文件。注意系统管理员可能不允许 /var/tmp 有很旧的文件。
-
/var/cache
应用程序运行过程中会产生的一些暂存档。
/proc 文件系统
/proc 文件系统是一个伪文件系统,它并不存在磁盘上,只存在内存当中。它以文件系统的方式为访问系统内核数据的操作提供接口。用户和应用程序可以通过 proc得到系统的信息,并可以改变内核的某些参数。下面说明一些最重要的文件和目录( /proc 文件系统在 proc man 页中有更详细的说明)。
-
/proc/cmdline
这个文件给出了内核启动的命令行。它和用于进程的cmdline项非常相似。
-
/proc/x
关于进程x的信息目录,这一x是这一进程的标识号。每个进程在/proc 下有一个名为自己进程号的目录。
-
/proc/cpuinfo
存放处理器(CPU)的信息,如 cpu 的类型、制造商、型号和性能等。
-
/proc/meminfo
这个文件给出了内存状态的信息。它显示出系统中空闲内存,已用物理内存和交换内存的总量。它还显示出内核使用的共享内存和缓冲区总量。这些信息的格式和free命令显示的结果类似。
-
/proc/devices
当前运行的核心配置的设备驱动的列表。
-
/proc/dma
这个文件列出由驱动程序保留的DMA通道和保留它们的驱动程序名称。
-
/proc/filesystems
这个文件列出可供使用的文件系统类型,一种类型一行。虽然它们通常是编入内核的文件系统类型,但该文件还可以包含可加载的内核模块加入的其它文件系统类型。
-
/proc/interrupts
显示被占用的中断信息和占用者的信息,以及被占用的数量。这个文件的每一行都有一个保留的中断。每行中的域有:中断号,本行中断的发生次数,可能带有一个加号的域(SA_INTERRUPT标志设置),以及登记 这个中断的驱动程序的名字。可以在安装新硬件前,像查看 /proc/dma和/proc/ioports 一样用 cat 命令手工查看手头的这个文件。这个文件列出了当前投入使用的资源(但是不包括那些没有加载驱动程序的硬件所使用的资源)。
-
/proc/ioports
当前使用的 i/o 端口。这个文件列出了诸如磁盘驱动器,以太网卡和声卡设备等多种设备驱动程序登记的许多I/O端口范围。
-
/proc/kcore
系统物理内存映像。与物理内存大小完全一样,然而实际上没有占用这么多内存;它仅仅是在程序访问它时才被创建。(注意:除非你把它拷贝到什么地方,否则 /proc 下没有任何东西占用任何磁盘空间。)
-
/proc/kmsg
这个文件用于检索用 printk 生成的内核消息。任何时刻只能有一个具有超级用户权限的进程可以读取这个文件。也可以用系统调用syslog检索这些消息。通常使用工具dmesg或守护进程klogd检索这些消息。
-
/proc/ksyms
核心符号表。这个文件列出了已经登记的内核符号;这些符号给出了变量或函数的地址。每行给出一个符号的地址,符号名称以及登记这个符号的模块。程序ksyms,insmod和kmod使用这个文件。它还列出了正在运行的任务数,总任务数和最后分配的PID。
-
/proc/loadavg
这个文件给出以几个不同的时间间隔计算的系统平均负载,这就如同uptime命令显示的结果那样。前三个数字是平均负载。这是通过计算过去1分钟,5分钟,15分钟里运行队列中的平均任务数得到的。随后是正在运行的任务数和总任务数。最后是上次使用的进程号。
-
/proc/modules
存放当前加载了哪些核心模块信息。
-
/proc/mounts
这个文件以 /etc/mtab 文件的格式给出当前系统所安装的文件系统信息。这个文件也能反映出任何手工安装从而在 /etc/mtab 文件中没有包含的文件系统。
-
/proc/misc
这个文件报告用内核函数misc_register登记的设备驱动程序。
-
/proc/net
此目录下的文件描述或修改了联网代码的行为。可以通过使用arp,netstat,route和ipfwadm命令设置或查询这些特殊文件中的许多文件。
-
/proc/self
存放到查看 /proc 的程序的进程目录的符号连接。当2个进程查看 /proc 时,这将会是不同的连接。这主要便于程序得到它自己的进程目录。
-
/proc/stat
这个文件包含的信息有 CPU 利用率,磁盘,内存页,内存对换,全部中断,接触开关以及启动时间(自1970年1月1日起的秒数)。
-
/proc/uptime
系统启动的时间长度。
-
/proc/version
核心版本
-
/proc/locks
这个文件包含在打开的文件上的加锁信息。文件中的每一行描述了特定文件和文档上的加锁信息以及对文件施加的锁的类型。内核也可以需要时对文件施加强制性锁。
-
/proc/pci
这个文件给出PCI设备的信息。用它可以方便地诊断PCI问题。你可以从这个文件中检索到的信息包括诸如IDE接口或USB控制器这样的设备,总线,设备和功能编号,设备延迟以及IRQ编号。
-
/proc/scsi
此目录下包含一个列出了所有检测到的SCSI设备的文件,并且为每种控制器驱动程序提供一个目录,在这个目录下又为已安装的此种控制器的每个实例提供一个子目录。
-
/proc/sys
在此目录下有许多子目录。此目录中的许多项都可以用来调整系统的性能。
/bin 和 /sbin
- /bin :包含系统启动和运行必需的基本用户命令二进制文件(如
ls、cp等),所有用户均可使用。 - /sbin :存放系统管理员使用的重要系统管理命令(如
ifconfig、reboot等),通常需要 root 权限。
/boot
存放启动加载器(如 GRUB)和内核文件(vmlinuz)、初始化内存盘(initramfs)。独立分区可避免内核文件被其他数据覆盖。
/etc
包含系统和应用程序的配置文件(如/etc/passwd、/etc/fstab)。修改前建议备份,避免系统配置错误。
/home
用户主目录的默认位置,每个用户拥有独立子目录(如/home/user1)。通常单独分区以便于数据备份或系统重装。
/lib 和 /lib64
- /lib :存放
/bin和/sbin中程序所需的共享库文件(如.so文件)。 - /lib64(64位系统):存储64位专用的库文件。
/opt
用于安装第三方或大型附加软件(如商业软件)。软件通常以独立子目录形式存在(如/opt/google/chrome)。
/root
系统管理员(root)的主目录。独立于/home,确保紧急情况下 root 能访问其数据。
/run
临时文件系统,存储自系统启动以来的运行时数据(如 PID 文件、套接字文件)。替代旧版/var/run,通常为tmpfs类型。
/srv
存放服务(如 HTTP、FTP)相关的数据。例如,Web 服务器文件可能位于/srv/www。
/tmp
临时文件目录,所有用户可读写。系统可能定期清理或使用tmpfs挂载以提高速度。
/sys
虚拟文件系统,提供内核设备、驱动和系统参数的接口(如/sys/class/net)。与/proc类似,但结构更规整。
/mnt
临时挂载点,用于手动挂载外部设备(如 USB 或临时网络共享)。无固定内容,需用户自行管理。
/media
自动挂载可移动设备(如 U 盘、光盘)的默认位置。现代桌面环境会自动在此创建子目录(如/media/usb)。
/lost+found
fsck工具在文件系统修复后存放恢复的碎片文件。仅存在于磁盘分区(如ext4)中,默认为空。
其他特殊文件系统
- cgroup :用于资源管理和隔离(如 CPU、内存限制),通常挂载在
/sys/fs/cgroup。 - devpts :伪终端设备(如
/dev/pts/0),用于 SSH 会话或终端模拟器。 - tmpfs :内存中的临时文件系统(如
/dev/shm),重启后数据丢失。