linux 系统目录详解,



目录

  • 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 系统启动流程

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 中。

/dev 文件系统

​ /dev 目录包括所有设备的设备文件。设备文件用特定的约定命名,这在设备列表中说明。设备文件在安装时由系统产生,以后可以用 /dev/makedev 描述。/dev/makedev.local 是系统管理员为本地设备文件(或连接)写的描述文稿(即如一些非标准设备驱动不是标准 makedev 的一部分)。下面简要介绍 /dev 下一些常用文件。

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 可容纳许多大型的软件包和它们的配置文件。下面列出一些重要的目录(一些不太重要的目录被省略了)。

/var 文件系统

/var 包含系统一般运行时要改变的数据。通常这些数据所在的目录的大小是要经常变化或扩充的。原来 /var 目录中有些内容是在 /usr 中的,但为了保持 /usr 目录的相对稳定,就把那些需要经常改变的目录放到 /var 中了。每个系统是特定的,即不通过网络与其他计算机共享。下面列出一些重要的目录(一些不太重要的目录省略了)。

/proc 文件系统

/proc 文件系统是一个伪文件系统,它并不存在磁盘上,只存在内存当中。它以文件系统的方式为访问系统内核数据的操作提供接口。用户和应用程序可以通过 proc得到系统的信息,并可以改变内核的某些参数。下面说明一些最重要的文件和目录( /proc 文件系统在 proc man 页中有更详细的说明)。

相关内容

    暂无相关文章