- linux 系统启动流程
- 系统目录概要说明
- 系统详细介绍
- /etc 文件系统
- /dev 文件系统
- /usr 文件系统
- /var 文件系统
- /proc 文件系统
在早期的 UNIX 系统中,各个厂家各自定义了自己的 UNIX 系统文件目录,比较混乱。Linux 面世不久后,对文件目录进行了标准化,于1994年对根文件目录做了统一的规范,推出 FHS ( Filesystem Hierarchy Standard ) 的 Linux 文件系统层次结构标准。FHS 标准规定了 Linux 根目录各文件夹的名称及作用,统一了Linux界命名混乱的局面。
FHS 定义了系统中每个区域的用途、所需要的最小构成的文件和目录同时还给出了例外处理与矛盾处理。 FHS 定义了两层规范。第一层是, / 下面的各个目录应该要放什么文件数据,例如: /etc 应该要放置设置文件,/bin 与 /sbin 则应该要放置可执行文件等等。第二层则是针对 /usr 及 /var 这两个目录的子目录来定义,例如: /var/log 放置系统登录文件、 /usr/share 放置共享数据等等。
FHS 依据文件系统使用的频繁与否以及是否允许用户随意改动,将目录定义为四种交互作用的形态,如下表所示:
可分享(shareable) | 不可分享(unshareable) | |
---|---|---|
静态的(static) | /usr 存放软件 /opt 第三方软件 |
/etc 配置文件 /boot 开机及内核文件 |
可变的(variable) | /var/mail 用户邮件信箱 /var/news 新闻组 |
/var/run 程序相关 /var/lock 锁相关 |
/:根目录,一般根目录下只存放目录,不要存放件,/etc、/bin、/dev、/lib、/sbin应该和根目录放置在一个分区中。
linux 系统启动流程
- 系统加电之后,首先进行的硬件自检,然后是 bootloader 对系统的初始化,加载内核。
- 内核被加载到内存中之后,就开始执行了。一旦内核启动运行,对硬件的检测就会决定需要对哪些设备驱动程序进行初始化。
- 从这里开始,内核就能够挂装根文件系统(这个过程类似于Windows识别并存取C盘的过程)。
- 内核挂装了根文件系统,并已初始化所有的设备驱动程序和数据结构等之后,就通过启动一个叫 init 的用户级程序,完成引导进程。
- Init 进程是系统启动之后的第一个用户进程,所以它的 pid (进程编号)始终为1。
- init 进程上来首先做的事是去读取 /etc/ 目录下 inittab 文件中 initdefault id 值,这个值称为运行级别(run-level)。它决定了系统启动之后运行于什么级别。运行级别决定了系统启动的绝大部分行为和目的。
运行级别如下表所示:
0 | 停机(千万别把initdefault设置为0,否则系统永远无法启动) |
---|---|
1 | 单用户模式,可以对系统进行软件维护。 |
2 | 多用户,没有 NFS,,启动网络工作站服务。 (最后会启动dtlogin允许图形界面工作站) |
3 | 完全多用户模式(标准的运行级) |
4 | 系统保留的 |
5 | X11 (x window) |
6 | 重新启动 (千万不要把initdefault 设置为6,否则将一直在重启 ) |
系统目录概要说明
目 录 | 全 称 | 用 途 | 说 明 |
---|---|---|---|
/bin | Binary | 存放二进制可执行文件,供所有用户使用的基本命令一般都在这里。 | 常用命令 ls,cat,mkdir,cp,rm,netstat,ping,ip,cat,chmod,chown,less,more 等命令存放于此。系统启动就会用到,不能关联至独立分区。 |
/sbin | Super user Binary | 存放二进制可执行文件,只有root才能访问。 | 这里存放的是系统管理员使用的系统级别的管理命令和程序。如 ifconfig,iptables,mkfs,reboot,shutdown,poweroff 等。 |
/boot | 引导文件存放目录 | 内核文件(vmlinux)、引导加载器(grub)存放于此目录。建议单独分区,分区大小 100M 即可。 | |
/etc | 拉丁语全称etcetera 另一种说法为Editable Text Configuration |
存放系统管理所需的配置文件及目录 | 例如:host.conf,adduser.conf 等。重要的配置文件有 /etc/inittab、/etc/fstab、/etc/init.d、/etc/X11、/etc/sysconfig、/etc/xinetd.d等 |
/dev | device | 设备文件及特殊文件存储位置 | 任何设备与接口设备都以文件的形式存放在此目录,相当于设备的入口,通过访问该目录下的文件,就等于访问对应设备。例如:null,zero,tty,sd*,cpu,char,bus 等。 |
/sys | system | 用于输出当前系统上硬件设备相关信息的虚拟文件系统 | 该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中被创建。 |
/lib | library | 存放系统最基本的动态连接共享库 | 类似于Windows里的DLL文件 |
/lib64 | 64位系统上存放辅助共享库文件 | ||
/proc | process | 这是一个虚拟的目录,它是系统内存数据的映射 | 这个目录的内容不在硬盘上而是在内存里,可以通过直接访问这个目录来获取系统信息。例如:内核、进程、外部设备的状态,网络状态等。 比较重要的目录有 /proc/cpuinfo、/proc/interrupts、/proc/dma、/proc/ioports、/proc/net/ 等。 |
/usr | Unix System Resource | 系统应用程序存放目录,例如 ftp,telnet 等等。 | /bin 目录存放系统用户使用的应用程序,所有用户可访问。例如:who,whoami,sudo,users,attr,clear,ssh,gcc,perl,Python等。 /sbin 目录存放超级用户使用的比较高级的管理程序和系统守护程序。例如:arp,arpd,adduser,useradd,addgroup,groupdel,chroot,chpasswd等。 /lib 目录存放应用程序的库或包文件。例如:Apache,gcc,Python 等程序的库文件。 /lib64 目录存放64位系统的程序和软件包的库文件。 /include 目录存放C程序的头文件即 .h 文件。 /share 目录存放共享数据。/usr/share/doc: 系统说明文件存放目录。/usr/share/man: 程序说明文件存放目录 /local 目录是第三方应用程序的安装位置,包括 bin,sbin,lib,lib64,etc,include等子目录。 /src 目录存放源代码,linux内核的源代码就放在/usr/src/linux里。 /doc 目录存放 linux 文档。 |
/opt | 第三方应用程序的安装位置 | 以前的 Linux 系统中,习惯放置在 /usr/local 目录下。一般情况下,我们可以把 tomcat 等都安装到这里。 | |
/var | variable data file | 存放经常变动的文件 | /cache 目录是应用程序缓存目录。 /local 目录是专用于 /usr/local 下应用的可变数据 /opt 目录专用于 /opt 目录下的程序存储可变数据。 /lock 目录用于存放锁文件。 /log 目录 用于存放日志目录及文件。/var/log/wtmp记录系统登录和注销日志,/var/log/message记录核心和系统程序的信息。 /run 目录存放运行中的进程相关数据,通常用于存储进程的 pid 文件。 /tmp 目录保存系统两次重启之间产生的临时数据。 /lib 目录存放系统正常运行时随时会改变的文件。 /spool 目录为应用程序数据池。 /mail 目录存放用户邮件文件。 建议单独分区,设置较大的磁盘空间 |
/root | 管理员的根目录 | 最好将 /root和 /放置在一个分区下。 | |
/home | 普通用户的根目录 | 建议单独分区,并设置较大的磁盘空间,方便用户存放数据。 | |
/mnt | mount | 用于临时挂载其它文件系统 | 例如可以将光驱挂载在/mnt/上,然后进入该目录就可以查看光驱里的内容 |
/tmp | temp | 用来存放一些临时文件 | 任何人都可以访问,重要数据不可放置在此目录下 |
/media | 用于将识别的设备挂载到这个目录下 | linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂载到这个目录下。 | |
/srv | service | 存放一些服务启动之后需要提取的数据 | 如 www 服务需要访问的网页数据存放在 /srv/www 内 |
系统详细介绍
/etc 文件系统
/etc 目录包含各种系统配置文件,下面说明其中的一些。其他的你应该知道它们属于哪个程序,并阅读该程序的man页。许多网络配置文件也在 /etc 中。
-
/etc/rc 或 /etc/rc.d 或 /etc/rc?.d
rc.d 是 runlevel control directory 的缩写。
/etc/rc.d/rc0.d - rc6.d 各启动级别的启动脚本,这些文件夹下的 init 脚本都有一些特别的名字,命名都以S(start)、K(kill)或 D(disable)开头,后面跟一个数字。当init进入一个运行等级的时候,它会按照数字顺序运行所有以 K 开头的脚本并传入 stop 参数,除非对应的 init 脚本在前一个运行等级中没有启动。然后 init 按照数字顺序运行所有以 S 开头的脚本并传入 start 参数。任何以 D 开头的 init 脚本都会被忽略—这让你可以在指定的运行等级禁止一个脚本,或者你也可以仅仅移除全部符号链接。所以如果你有两个脚本,S01foo 和 S05bar, init 首先会运行 S01foo start,当它进入特定的运行等级后再执行 S05bar start。
/etc/rc.d/rcS.d 单用户模式启动脚本。
/etc/rc.d/rc.local 通常它是一个留给用户修改的shell脚本。一般会在init进程结束的时候运行它,所以你可以在这里放一些想要运行的额外脚本,而不用再创建自己的init脚本。
/etc/rc.d/rc.sysinit 文件主要做在各个运行模式中相同的初始化工作,包括设定 PATH、设定网络配置(/etc/sysconfig/network)、启动 swap 分区、设定 /proc 等等。
/etc/rc.d/rc 文件当运行级别改变时,负责启动/停止各种服务。
-
/etc/init 或 /etc/init.d
init 文件夹包含所有服务在各个运行等级中的全部启动脚本。一般来说,它们都是标准的 shell 脚本,遵守最基本的标准。每个脚本最少接受两个参数 start 和 stop,它们分别代表启动和停止服务 (如网页服务)。除此之外,init脚本通常还会接受一些额外的选项,如 restart(重启服务器)、status(返回服务当前状态)、reload(告知服务从配置文件中重新载入配置)以及 force-reload(强制服务重载它的配置)。当用不带参数的方式运行脚本的时候,一般应该返回一个它会接受的参数列表。
init.d 目录存放的是一些脚本,一般是 linux 以 rpm 包安装时设定的一些服务的启动脚本。系统在安装时装了好多rpm 包,这里面就有很多对应的脚本。执行这些脚本可以用来启动,停止,重启这些服务。前面说到,init.d 这个目录下的脚本就类似与 windows 中的注册表,在系统启动的时候执行。
-
/etc/inittab
init 进程的配置文件。 -
/etc/passwd
用户数据库,其中的域给出了用户名、真实姓名、用户起始目录、加密口令和用户的其 他信息。 -
/etc/fdprm
软盘参数表,用以说明不同的软盘格式。可用 setfdprm 进行设置。 -
/etc/fstab
指定启动时需要自动安装的文件系统列表。启动时 mount -a 命令(在 /etc/rc 或等效的启动文件中)自动 mount 的文件系统列表也包括用 swapon -a 启用的 swap 区的信息。 -
/etc/group、/etc/adduser.conf、/etc/deluser.conf、/etc/sudoers
类似 /etc/passwd ,但说明的不是用户信息而是组的信息。包括组的各种数据。添加的用户信息,删除用户信息。
具有sodu执行权限的用户信息。
-
/etc/issue
包括用户在登录提示符前的输出信息。通常包括系统的一段短说明或欢迎信息。具体内容由系统管理员确定。 -
/etc/magic
“file” 的配置文件。包含不同文件格式的说明,“file” 基于它猜测文件类型。 -
/etc/motd
motd 是 message of the day 的缩写,用户成功登录后自动输出。内容由系统管理员确定。常用于通告信息,如计划关机时间的警告等。 -
/etc/mtab
当前安装的文件系统列表。由脚本( scritp )初始化,并由 mount 命令自动更新。当需要一个当前安装的文件系统的列表时使用(例如 df 命令)。 -
/etc/shadow
在安装了影子( shadow )口令软件的系统上的影子口令文件。影子口令文件将 /etc/passwd 文件中的加密口令移动到 /etc/shadow 中,而后者只对超级用户( root )可读。这使破译口令更困难,以此增加系统的安全性。 -
/etc/login.defs
login 命令的配置文件。 -
/etc/printcap
类似 /etc/termcap ,但针对打印机。语法不同。 -
/etc/profile 、/etc/csh.login、/etc/csh.cshrc
/etc/profile 系统全局环境变量设置,里面可以添加对所有用户有效的环境变量,系统配置等。
登录或启动时 bourne 或 c shells执行的文件。这允许系统管理员为所有用户建立全局缺省环境。
-
/etc/securetty
确认安全终端,即哪个终端允许超级用户( root )登录。一般只列出虚拟控制台,这样就不可能(至少很困难)通过调制解调器( modem )或网络闯入系统并得到超级用户特权。 -
/etc/shells
列出可以使用的 shell。chsh 命令允许用户在本文件指定范围内改变登录的 shell。提供一台机器 ftp 服务的服务进程 ftpd 检查用户 shell 是否列在 /etc/shells 文件中,如果不是,将不允许该用户登录。 -
/etc/termcap
终端性能数据库。说明不同的终端用什么“转义序列”控制。写程序时不直接输出转义序列(这样只能工作于特定品牌的终端),而是从 /etc/termcap 中查找要做的工作的正确序列。这样,多数的程序可以在多数终端上运行。 -
/etc/bash.bashrc bash 的环境变量配置,里面添加启动bash时读取的环境。
-
/etc/hosts 主机域名的配置。
-
/etc/ld.so.cof ldconfig命令读取的系统库目录配置文件。/etc/ld.so.cache ldconfig命令读取的系统库路径生成的缓存文件。
-
/etc/sysctl.conf 系统内核的配置文件。
-
/etc/protocols 系统支持的ip协议簇。
-
/etc/timezone 系统的时间时区设置。
/dev 文件系统
/dev 目录包括所有设备的设备文件。设备文件用特定的约定命名,这在设备列表中说明。设备文件在安装时由系统产生,以后可以用 /dev/makedev 描述。/dev/makedev.local 是系统管理员为本地设备文件(或连接)写的描述文稿(即如一些非标准设备驱动不是标准 makedev 的一部分)。下面简要介绍 /dev 下一些常用文件。
-
/dev/console
系统控制台,也就是直接和系统连接的监视器。 -
/dev/hd[a-t]
ide 硬盘驱动程序接口。如:/dev/hda 指的是第一个硬盘,had1 则是指 /dev/hda 的第一个分区。如系统中有其他的硬盘,则依次为 /dev/hdb、/dev/hdc、. . . . .;如有多个分区则依次为 hda1、hda2 . . . . . . -
/dev/sd[a-z]
scsi 磁盘驱动程序接口。如有系统有 scsi 硬盘,就不会访问 /dev/had,而会访问 /dev/sda。 -
/dev/fd[0-7]
软驱设备驱动程序。如:/dev/fd0 指系统的第一个软盘,也就是通常所说的 a:盘,/dev/fd1 指第二个软盘,. . . . . .而 /dev/fd1h1440 则表示访问驱动器1中的4.5高密盘。 -
/dev/st
scsi 磁带驱动器驱动程序。 -
/dev/tty
提供虚拟控制台支持。如:/dev/tty1 指的是系统的第一个虚拟控制台,/dev/tty2 则是系统的第二个虚拟控制台。 -
/dev/pty
提供远程登陆伪终端支持。在进行 telnet 登录时就要用到 /dev/pty 设备。 -
/dev/ttys
计算机串行接口,对于 dos 来说就是“ c o m 1”口。 -
/dev/cua
计算机串行接口,与调制解调器一起使用的设备。 -
/dev/null
“黑洞”,所有写入该设备的信息都将消失。例如:当想要将屏幕上的输出信息隐藏起来时,只要将输出信息输入到 /dev/null 中即可。 -
/dev/zero
该设备无穷尽地提供空字符(ASCII NUL, 0x00),可以使用任何你需要的数目。它通常用于向设备或文件写入字符串0,用于初始化数据存储。(当然,也可作为输出流的接受容器)
-
/dev/lp[0-3]
并口
-
/dev/loop[0-7]
本地回环设备
-
/dev/md[0-31]
软raid设备
-
/dev/random、/dev/urandom
随机数设备。
-
/dev/shm
这个目录不在硬盘上,而是在内存里。默认系统就会加载/dev/shm ,它就是所谓的tmpfs。因此在 linux下,就不需要大费周折去建 ramdisk,直接使用 /dev/shm/ 就可达到很好的优化效果。它默认最大为内存的一半大小,使用df -h命令可以看到。但它并不会真正的占用这块内存,如果/dev/shm/下没有任何文件,它占用的内存实际上就是0字节;如果它最大为 1G,里头放有 100M 文件,那剩余的900M 仍然可为其它应用程序所使用,但它所占用的 100M 内存,是绝不会被系统回收重新划分的。象虚拟磁盘一样,tmpfs 可以使用您的 RAM,但它也可以使用您的交换分区来存储。而且传统的虚拟磁盘是个块设备,并需要一个 mkfs 之类的命令才能真正地使用它,tmpfs 是一个文件系统,而不是块设备;您只是安装它,它就可以使用了。
tty是teletypewriter的缩写 [ 转自:http://blog.chinaunix.net/uid-8194676-id-2513202.html ]
揭秘 TTY 见:http://www.linusakesson.net/programming/tty/
getty 是 get teletypewriter 的缩写
终端是一种字符型设备,它有多种类型,通常使用 tty 来简称各种类型的终端设备。tty 是 teletypewriter 的缩写。Teletype 是最早出现的一种终端设备,很象电传打字机,是由 Teletype 公司生产的。设备名放在特殊文件目录 /dev/ 下,终端特殊设备文件一般有以下几种:
1. 串行端口终端(/dev/ttySn)
串行端口终端(Serial Port Terminal)是使用计算机串行端口连接的终端设备。计算机把每个串行端口都看作是一个字符设备。有段时间这些串行端口设备通常被称为终端设备,因为那时它的最大用途就是用来连接终端。这些串行端口所对应的设备名称是 /dev/tts/0(或/dev/ttyS0)、/dev/tts/1(或 /dev/ttyS1)等,设备号分别是(4,0)、(4,1)等,分别对应于 DOS 系统下的 COM1、COM2 等。若要向一个端口发送数据,可以在命令行上把标准输出重定向到这些特殊文件名上即可。例如,在命令行提示符下键入:echo test > /dev/ttyS1 会把单词 ”test” 发送到连接在 ttyS1(COM2)端口的设备上。
2. 伪终端(/dev/pty/)
伪终端(Pseudo Terminal)是成对的逻辑终端设备,例如 /dev/ptyp3 和 /dev/ttyp3(或着在设备文件系统中分别是 /dev/pty/m3和/dev/pty/s3)。它们与实际物理设备并不直接相关。如果一个程序把 ttyp3 看作是一个串行端口设备,则它对该端口的读/写操作会反映在该逻辑终端设备对的另一个上面( ttyp3 )。而 ttyp3 则是另一个程序用于读写操作的逻辑设备。这样,两个程序就可以通过这种逻辑设备进行互相交流,而其中一个使用 ttyp3 的程序则认为自己正在与一个串行端口进行通信。这很象是逻辑设备对之间的管道操作。
对于 ttyp3(s3),任何设计成使用一个串行端口设备的程序都可以使用该逻辑设备。但对于使用 ptyp3 的程序,则需要专门设计来使用 ptyp3(m3)逻辑设备。
例如,如果某人在网上使用 telnet 程序连接到你的计算机上,则telnet程序就可能会开始连接到设备ptyp2(m2)上(一个伪终端端口上)。此时一个 getty 程序就应该运行在对应的 ttyp2(s2)端口上。当telnet 从远端获取了一个字符时,该字符就会通过 m2、s2 传递给 getty 程序,而 getty 程序就会通过 s2、m2 和 telnet 程序往网络上返回 ”login:” 字符串信息。这样,登录程序与 telnet 程序就通过“伪终端”进行通信。通过使用适当的软件,就可以把两个甚至多个伪终端设备连接到同一个物理串行端口上。
在使用设备文件系统(device filesystem)之前,为了得到大量的伪终端设备特殊文件,HP-UX AIX等使用了比较复杂的文件名命名方式。
3. 控制终端(/dev/tty)
如果当前进程有控制终端(Controlling Terminal)的话,那么 /dev/tty 就是当前进程的控制终端的设备特殊文件。可以使用命令”ps –ax”来查看进程与哪个控制终端相连。对于你登录的 shell,/dev/tty 就是你使用的终端,设备号是(5,0)。使用命令”tty”可以查看它具体对应哪个实际终端设备。/dev/tty 有些类似于到实际所使用终端设备的一个联接。
4. 控制台终端(/dev/ttyn, /dev/console)
在 UNIX 系统中,计算机显示器通常被称为控制台终端(Console)。它仿真了类型为Linux的一种终端(TERM=Linux),并且有一些设备特殊文件与之相关联:tty0、tty1、tty2等。当你在控制台上登录时,使用的是 tty1。使用 Alt+[F1—F6] 组合键时,我们就可以切换到 tty2、tty3 等上面去。tty1 –tty6 等称为虚拟终端,而 tty0 则是当前所使用虚拟终端的一个别名,系统所产生的信息会发送到该终端上。因此不管当前正在使用哪个虚拟终端,系统信息都会发送到控制台终端上。
你可以登录到不同的虚拟终端上去,因而可以让系统同时有几个不同的会话期存在。只有系统或超级用户root 可以向 /dev/tty0 进行写操作,
5. 其它类型
还针对很多不同的字符设备存在有很多其它种类的终端设备特殊文件。例如针对 ISDN 设备的 /dev/ttyIn 终端设备等。这里不再赘述。
tmpfs 的优势:
1,动态文件系统的大小。
2,tmpfs 的另一个主要的好处是它闪电般的速度。因为典型的 tmpfs 文件系统会完全驻留在 RAM 中,读写几乎可以是瞬间的。
3,tmpfs 数据在重新启动之后不会保留,因为虚拟内存本质上就是易失的。所以有必要做一些脚本做诸如加载,绑定的操作。
一、修改 /dev/shm 大小
默认的最大一半内存大小在某些场合可能不够用,并且默认的 inode 数量很低一般都要调高些,这时可以用mount 命令来管理它。
#mount -o size=1500M -o nr_inodes=1000000 -o noatime,nodiratime -o remount /dev/shm
在 2G 的机器上,将最大容量调到 1.5G,并且 inode 数量调到 1000000,这意味着大致可存入最多一百万个小文件。
如果需要永久修改 /dev/shm 的值,需要修改 /etc/fstab
tmpfs /dev/shm tmpfs defaults,size=1.5G 0 0
#mount -o remount /dev/shm
二、/dev/shm 应用
首先在 /dev/shm 建个 tmp 文件夹,然后与实际 /tmp 绑定
#mkdir /dev/shm/tmp
#chmod 1777 /dev/shm/tmp
#mount –bind /dev/shm/tmp /tmp(–bind )
在使用 mount –bind olderdir newerdir命令来挂载一个目录到另一个目录后,newerdir 的权限和所有者等所有信息会发生变化。挂载后的目录继承了被挂载目录的所有属性,除了名称。Oracle 11g 的 amm 内存管理模式就是使用 /dev/shm,所以有时候修改 MEMORY_TARGET 或者 MEMORY_MAX_TARGET 会出现 ORA-00845 的错误。
/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
在此目录下有许多子目录。此目录中的许多项都可以用来调整系统的性能。