架构师的成长之路初片~Linux目录结构
这是本作者看过的最详细的目录结构说明:摘自:https://www.ubuntukylin.com/ukylin/forum.php?mod=viewthread&tid=190123
查看系统的全部目录:
* 在终端中进入 / ,执行命令ls。
* 在文件浏览器中,通过左侧导航中的“文件系统”,进入根目录。如图1所示。
1 系统目录概述
Linux目录类似一棵树,以根目录出发,含有多个子目录或文件,子目录中又可含有更下级的子目录或者文件,分层衍生出多个分叉。如图2所示。
一般来说,根目录下只存放目录,除了vmlinuz和initrd.img两个链接文件。其中,vmliuz是Linux内核的镜像文件,initrd.img是RAM disk的镜像文件,都是用于启动Linux系统。
下面将对每一个目录的用途及内容进行介绍。
文件目录 |
说明
|
/bin
|
放置一些系统必备的可执行文件,比如bash、cat、chmod、cp、ls、mv等,普通用户和root用户都可以使用。
|
/sbin
|
放置一些系统管理必备的可执行文件,比如e2fsck、ethtool、fdisk、mount等,只有root用户才能使用。
|
/usr/bin
|
放置一些必备应用软件的可执行文件,比如vim、ssh、file、c++等。
|
/usr/sbin
|
放置一些系统管理必备软件的可执行文件,比如gparted、cron、tcpdump等,只有root用户使用。
|
可以理解为:如果是用户和管理员必备的命令,则会放在/bin;如果是系统管理员必备的命令,则会放在/sbin。同理,/usr/bin和/usr/sbin对应的是系统额外的应用软件。
2.2 /boot
存放的是系统的内核文件、引导加载程序文件和grub开机管理。根目录下的两个链接(vmlinuz和initrd.img)就是指向/boot目录下对应的文件。在系统安装时,会为boot单独创建一个分区。
2.3 /dev
在Linux系统中,任何设备都是以文件的形态存在于/dev目录中。访问该目录下某个文件,相当于访问某个设备。比较重要及常用的文件说明如表 2所示。
文件目录 |
说明
|
/dev/sd*
|
SCSI磁盘,sd后面的字母表示第几块磁盘,数字表示该磁盘的第几分区。比如:sda1,表示第一块磁盘的第一个分区。一般来说,系统盘为sda,后续外接的磁盘,则从b开始递增。
|
/dev/tty*
|
TTY(终端)设备。比如:tty0,表示当前虚拟终端;ttyS0,表示当前UART串口;当串口为USB外接的时候,则会有ttyUSB0,表示当前USB串口。
|
/dev/loop*
|
回环设备,通常被用于光盘或是磁盘镜像,以循环挂载的方式来挂载包含文件系统的文件,使得在这个文件系统中的内容得以被访问。比如:loop0,表示第一个回环设备。
|
/dev/null
|
空设备。它会丢弃一切写入其中的数据,并且没有任何可以读取的内容。可当作垃圾站,清除文件中的内容。
|
/dev/zero
|
零流源。与/dev/null相似,任何写入都将被直接丢弃,读取会得到无限多的二进制零流。通常用于创建一个指定长度(大小)、用于初始化的空文件。
|
/dev/random/dev/urandom
|
随机数设备,提供永不为空的随机字节数据流。差别在于:/dev/random依赖于系统中断,产生的速度比较慢,有时候还会出现较大的停顿,数据随机性更高;/dev/urandom不依赖系统的中断,产生速度很快,相比而言数据随机性低。
|
2.4 /etc
用于存放配置文件,包含系统配置和应用软件的配置。该目录下的文件由root用户使用,普通用户大都只有读取的权限。比较重要的文件说明如表3所示。
文件目录 |
说明
|
/etc/hosts
|
域名解析文件,即ip地址与域名的对应关系,网络访问时,可快速解析。
|
/etc/passwd
|
用户数据库,存放了系统中所有的用户信息,包括系统或服务正常运行所必需的用户(系统用户)。文件中每一行各字段的含义为——用户名:密码:UID:GID:用户信息:用户主目录:Shell其中,用户名在同一系统中是唯一的,限制在8个字符(字长度之内,并且区分大小写;UID是用户标识,也是用于区分用户,常用于系统内部管理进程;GID是组标识,一个用户可以存在多个组;Shell是指用户登录系统时运行的程序名称,通常是一个Shell程序的全路径名。密码在passwd文件中,一般以一个“x”符号来代替,shadow文件为真正的密码文件,只有root用户才有读取的权限。
|
/etc/shadow
|
真正的密码文件。文件中每一行各字段的含义为——用户名:加密后的密码:最近改动日期:不可更改天数:需要重设天数:过期提醒天数:过期后的宽限时间:账号失效日期其中,密码最近的改动日期,是从1970年1月1日算起的天数;不可更改的天数为0表示没有限制;需要重设天数为99999表示没有限制;失效日期也是从1970年1月1日算起的天数。
|
/etc/group
|
系统用户的分组信息。文件中每一行各字段的含义为——组名:组密码:组ID:包含的用户与passwd相似,组密码以“x”代替,gshadow文件为真正的组密码文件;组ID与passwd中的GID是对应的。
|
/etc/gshadow
|
真正的组密码文件。文件中每一行各字段的含义为——组名:组密码:组管理员:组成员组密码字段为空或是“!”号,表示没有密码;若有多个组管理员、组成员,用“,”分隔。
|
/etc/init.d
|
存放系统各种服务的启动和停止脚本。使用该目录下的脚本,需要有root权限。比如需要重启网络,可以使用命令——/etc/init.d/networking restart
|
/etc/init
|
存放系统各种服务和应用的配置文件。
|
/etc/rc*.d
|
在这些目录中,包含了控制进程进行的脚本。以K开头的脚本(存放在*为0-6的目录下)运行在以S开头的脚本(存放在rcS.d目录下)之前。脚本放置的地方,决定开始运行的层级。
|
/etc/rc.local
|
在系统初始化级别脚本运行之后(即系统启动之后)再执行的脚本。
|
/etc/fstab
|
在开机引导时,自动挂载的文件系统。文件中每一行对应一个分区,含义为——实际位置挂载点格式挂载状态 DUMP功能开机检查其中,挂载状态比如是ro(只读)、rw(读写)等;DUMP功能指在系统DUMP时是否需要BACKUP,默认为0;开机检查除了root除了有必要为1,其余可根据需要调整,默认为0。
|
/etc/issue
|
getty在登录提示符前的输出信息,通常包括系统的一段短说明或欢迎信息。
|
/etc/profile
|
设置系统的全局变量。比如——PATH:预设可执行文件或命令的搜索路径;USER:用户登录时使用的用户名;HOSTNAME:所使用的主机名。
|
/etc/profild.d
|
存放的是一些应用程序所需的启动脚本,包括一些命令的附加设置。
|
/etc/X11
|
X_Window系统的配置文件。
|
/etc/skel
|
新建用户时,把该目录下的内容拷贝到用户的家目录下。
|
2.5 /home
用户主目录的位置,每创建一个用户,该目录下就会生成名字为该用户的文件夹,用于存放用户的各种文件、数据。
2.6 /lib
库文件目录,包含了所有对系统有用的库文件。在/bin或/sbin目录中的命令的动态库文件,就在此目录中,内核模块同样也在这里。
[/table][table=98%]
文件目录
2.7 /media、/mnt
/media ——可移除的外置设备(比如U盘、光盘等)自动挂载的位置。
/mnt ——文件系统挂载点。当进行手动挂载移动介质、其它文件系统的分区、可安装文件系统时,挂载点的优先选择。
2.8 /opt
存放系统额外软件安装的文件和程序,一般是大型第三方软件,比如WPS办公,Firefox等。
2.9 /proc
一个虚拟文件系统,是正在运行的内核信息映射,也是内核和内核模块用来向进程发送消息的机制。它可以让用户和内核内部数据结构进行交互,获取有关进程的信息,并且可以在运行中改变设置。
/proc运行在内存之中(不占用外部存储空间),以文件的形式向用户空间提供了访问接口。主要包含了进程信息、内存资源信息、磁盘分区信息等。
2.10 /root
系统管理员(root)的主目录。
2.11 /run
进入/run目录后,执行命令“df -k .”,可以看到它被识别为“tmpfs”,即临时文件系统。与/var/run相同,该目录下是程序或者服务启动后的PID,重启后会重/srv新生成对应的目录数据。
2.12 /srv
主要用来存储本机或本服务器提供的服务或数据(用户主动产生的数据、对外提供的服务)。
2.13 /sys
/sys是sysfs的挂载点。sysfs是一个虚拟的、基于内存的文件系统,它与/proc相似,可以查看和设定内核参数,并且,还能以更好的方式导出内核数据。
文件目录 |
说明
|
/sys/devices
|
所有在总线上被发现的物理设备,比如网卡、显卡、ACPI、虚拟设备(tty、bonding等),是内核对系统中所有设备的分层次表达模型。
|
/sys/dev
|
字符设备(block)和块设备(char),里面均是以主次设备号(major:minor)命名的链接文件,指向/sys/devices。
|
/sys/class
|
包含所有注册在kernel里面的设备类型,每个设备类型表达具有一种功能的设备。每个设备类型子目录下是链接文件,指向/sys/devices/目录下的具体设备。
|
/sys/bus
|
按总线类型分类设备。其中,每个子目录下都包含devices和drivers两个子目录:devices ——该总线类型下的所有设备,均为链接文件,指向(/sys/devices/;drivers ——该总线类型下的驱动,参数可查看和修改。
|
/sys/modules
|
所有被载入内核的模块,包括编译到内核中的模块,和编译为.ko文件的外模块。
|
/sys/fs
|
描述系统中所有文件系统,包括文件系统本身和按文件系统分类存放的已挂载点(一些传统虚拟文件系统控制参数仍然在/proc/sys/fs中)。
|
/sys/kernel
|
内核中所有可调整的参数(一些传统内核可调整参数仍然位于/proc/sys/kernel中)。
|
/sys/firmware
|
对固件对象和属性进行操作和观察的接口,即系统加载固件机制时对用户空间的接口。
|
/sys/power
|
存在一些属性文件,用于控制整个机器的电源状态。
|
2.14 /tmp
用户和程序的临时目录。该目录中的内容会被系统定时自动清空。
2.15 /usr
/usr目录下放置的是系统中软件的资源,而不是用户数据(usr≠user);所有系统默认的软件都会放置到/usr。
文件目录 |
说明
|
/usr/bin/usr/sbin
|
参考2.1的内容。
|
/usr/include
|
开发和编译应用程序所需要的头文件。编译时,可以通过头文件来使用某些库函数。
|
/usr/lib
|
目标库文件(包括动态连接库),以及通常不是直接调用的可执行文件。
|
/usr/local
|
安装本地程序的默认路径。当下载一个程序源代码进行编译安装时,如果不特别指定安装路径,那么程序相关的文件将会默认放置到这个目录对应的子目录下。
|
/usr/share
|
存放了同一个操作系统在不同构架下工作时,特定应用程序的共享数据,比如背景图、程序文档信息、语言设置等。
|
/usr/src
|
Linux内核源码。
|
2.16 /var
常态性变动的文件,包括缓存、日志信息以及某些运作所产生的文件。
文件目录 |
说明
|
|
/var/cache
|
应用程序运行过程中产生的缓存。
|
|
/var/lib
|
应用程序运行过程中,需要使用到的文件。
|
|
/var/local
|
存放/usr/local中安装的程序的可变数据。
|
|
/var/lock
|
锁定文件。比如,某些资源一次只能被一个应用程序使用时,如果同时被两个及以上程序使用,就会产生错误,于是,就需要对该资源进行锁定操作。
|
|
/var/log
|
有关于系统的各种日志信息:
|
|
alternatives.log
|
系统的更新替代信息。
|
|
auth.log
|
系统授权信息,包括用户登录和使用的权限机制等。
|
|
boot.log
|
系统在启动引导过程中的日志信息。
|
|
bootstrap.log
|
构建最小系统的日志信息。
|
|
btmpwtmp
|
btmp记录所有失败登录信息;wtmp记录了谁正在登录进入系统,使用命令显示这个文件信息等。
|
|
dmesg
|
包含启动时的内核缓冲,以及与硬件有关的信息。
|
|
dpkg.log
|
使用dpkg安装或卸载软件的日志。
|
|
faillog
|
记载用户登录失败的信息,以及错误登录命令。
|
|
syslog
|
格式说明:日期主机名进程名[PID]: 具体信息其中,日期格式为MM dd hh:mm:ss;进程的PID通常是一个数字,也可以为空。syslog是Linux系统默认的日志守护进程,任何希望生成日志信息的程序都可以通过syslog提供的接口,在该文件中生成信息。它对于系统、软件调试,定位问题有很大作用。
|
|
Xorg.*.log
|
X显示的日志信息。
|
|
/var/run
|
存放某些程序或者服务启动后的PID。
|
|
/var/spool
|
放置一些队列数据,即排队等待其他程序使用的数据。这些数据被使用后,通常都会被删除。比如系统收到新邮件会放置到/var/spool/mail/中,当用户收下后,该邮件就会被删除。除了邮件以外,还有打印队列、周期执行任务队列等。
|
2.17 /lost+found
在系统修复过程中,恢复的文件所在目录。