linux基础学习——文件组织结构

【推荐阅读】

浅谈linux 内核网络 sk_buff 之克隆与复制

深入linux内核架构--进程&线程

了解Docker 依赖的linux内核技术

基本组织原则

在UNIX系统设计的时候,有一个文件布局的基本原则,按照各文件在系统中的所在的作用,可以划分为公有/私有和只读/可写这两类四个属性。Linux也是基于UNIX的所以也遵循这个原则。

一般来说:

不一定必须由本地系统提供的文件都可以看作公有的

必须由本地系统提供的文件则可以看作是私有的

能够被保存在只读存储设备上的文件都可以被认为是只读的

反之那些必须要保存在可读写设备上的文件就是可写的

现在看来有些不必要,但是在以前大量的本地存储是非常昂贵的,而让远端的一个设备来存储大家公用的一些程序是那时候的一个解决方案。(在linux系统中任何设备都能够以文件的形式挂在到根目录下,这使得非本地存储设备通过某种网络协议挂在到本地根目录下)。但是只是公有的肯定无法解决所有问题,毕竟本机的设备与其他设备还是有些不同的,他们还由许多专属的文件也不能提供给他人,则就需要私人文件了。

所以在FHS(linux基金会定义的linux文件系统层级标准)中规定了 /usr目录为公有的, /var目录为私有的。

根文件系统

根目录在linux下表示为/,所有其他目录都挂载在根目录下。尽管他们可能不再同一个硬盘上,甚至/sys和/proc这些在内存中的数据。

根目录下必须的目录有以下几个:

可选的目录:

/bin目录

其下包含了用户命令文件,提供给所有用户和脚本程序使用。在很多发行版本中这个是一个指向/usr/bin的符号链接。某种意义上也是对FHS的支持,也是对linux文件系统组织原则的遵守(命令文件肯定是公有的) 。使用pacman安装软件默认的可执行程序也在该目录下(实际上是/usr/bin目录,不过/bin是一个指向/usr/bin的符号链接)

其中必须的内容如下:

命令

说明

cat

连接多个文件并将内容输出至标准输出

chgrp

改变文件所属组

chmod

改变文件的访问权限

chown

改变文件所属用户和组

cp

复制文件

date

打印或设置系统日期和时间

dd

转换并复制文件

df

查看文件系统磁盘空间使用情况

dmesg

打印或控制内核的消息缓冲

echo

显示一行文本

false

不做任何事情,表示不成功

hostname

显示或设置系统的主机名

kill

向进程发送信号

ln

创建文件链接

login

开始系统上的一个会话

ls

列出目录内容

mkdir

创建目录

mknod

创建块或字符设备的专用文件

more

分页显示文本

ount

挂载一个文件系统

mv

移动或改名

ps

查看系统进程状态

pwd

打印当前工作目录名

rm

删除文件或目录

rmdir

删除空目录

sed

一个流式文本编辑器

sh Bourne shell stty

改变或打印终端行设置

su

改变用户标识

sync

刷新文件系统缓存

true

不做任何事情,表示成功

umount

卸载文件系统

uname

打印系统信息

可选命令:

/boot目录 该目录包含了Linux启动过程所需要的所有内容。更专业的说法是,该目录下保存的数据用于内核开始执行用户级程序之前使用的东西。例如引导加载器、内核镜像等。操作系统的内核可以直接放到根目录下也可以放到/boot目录下。一个通常的做法是让/root目录占用一个单独的磁盘分区而与根分区分离。这样能更进一步减少根分区,保护启动分区(完全只读),来提高系统的安全性。 /dev目录 这是设备文件或专有文件的放置位置。

/etc目录 /etc包含了系统特有的配置文件,所谓配置文件就是用于控制程序运行的本地文件。它绝大多数情况下是只读私有的文件,而且可编辑。这里的只读与可编辑并不是矛盾的,可编辑是指人们可以直接看懂的文本文件,只读也是相对的对于普通用户是只读的,对于root并不是,而且在系统的运行中确实很少动这些文件。 需要放置到/etc目录下的目录:

需要放置在/etc目录下的文件:

/home目录

该目录是用户专有目录,每个用户都会在/home目录下有其对应的子目录,而且这个子目录一般与他的用户名相同。没有任何程序会依赖于这个目录。

同一个程序,不同的用户有不同的配置方式,这些用户独有的配置文件就保存在它的home目录中,一般以.开头的隐藏文件。如果某个程序需要创建多个配置文件,它会在用户的home目录下创建一个隐藏文件夹来保存。

一个用户对其拥有的home目录有绝对的控制权,可以作任何事情,不仅仅是保存自己的文件,还能够安装软件,甚至在home目录下模拟整套linux文件的系统布局。

/lib目录

/lib目录里存放着必备的共享库和内核模块。在系统启动阶段和运行根文件系统上的各种命令时,都需要用到这些共享库,所以必须与根文件系统放在一起。如果时64位系统,这个目录的部分功能会转移到/lib64目录下。而内核模块只会使用/lib目录。

/media目录

该目录用于挂载软盘、U盘、光盘等可移动设备,不同的子目录用于挂载不同类型的设备,而具体的目录名就是具体的设备类型。曾经出现过很多其他其他名称的挂载点,例如/cdrom /mnt /mnt/cdrom等,但是现在统一规定到了/media中。虽然你还可以继续挂载到/mnt中,但是这与规范不符,/mnt现在只是临时挂载点。

/mnt目录

该目录是让系统管理员临时挂载某个文件系统的,此目录的内容属于局部问题,不应该影响任何程序的运行。千万不要安装什么程序,毕竟一个临时目录在系统不需要它的时候会被其他东西占用。

/opt目录

这个是系统附加软件包的安装目录。每个软件包会在/opt下拥有一个自己的目录,那里面存放着它所有的可执行程序和静态数据。这个专有目录名应该与去程序名一样。这样用户就可以很好的管理他们了。

例如我们安装了google-chrome,就是安装在这里/opt/google/chrome目录下,而/usr/bin中的google-chrome是链接到该目录下的符号链接。

我们来说明下linux的软件安装目录:

/usr:系统级的安装目录,可以理解为C;//Windows/ 我们通过pacman通常默认就是安装在这个目录

/usr/local:用户级别的程序目录,可以理解为Program File/ 用户自己编译的软件默认安装在这个目录下

/opt 用户级的程序目录,可以理解为D:/Software 通常放置一些第三方大型软件或游戏

root目录

root帐号的家目录。

/sbin目录

必备的系统软件存放处。用于系统维护的软件和某些只限root用户使用的命令存储该目录下。主要是存储系统启动、恢复、还原以及修复过程中必备的系统工具,也是对/bin的补充。

必须出现在/sbin目录的命令:

/srv目录

服务进程所需数据。某些服务进程启动后,他们需要读取的数据会放在/srv目录中,提供/srv目录一方面为了方便用户找到特地服务的数据文件,另一方面也是位某些服务放置他们的执行脚本、只读或可写数据提供一个合适的地方。

目前并没有规范/srv子目录的命名方法。有一种方式是按照协议构造如ftp rsync www cvs等。

/tmp目录

/tmp目录必须能够被任何程序、任何用户访问,它存放临时文件。任何程序都不用对/tmp目录下任何文件或目录负责,尽管如此,还是建议在系统重新启动后清除/tmp目录下的内容。

/usr目录

/usr目录是整个文件系统的第二个主要区段。它即是共有的也是只读的。这意味着/usr可以共享在多种主机之间,但不能写入。任何主机专有的或随时间变化的信息只能存放在其他地方,即使大型软件包,也不得占用/usr下的一个独立子目录。

/usr下的必备子目录:

可选目录:

/usr/bin目录

系统中绝大多数的命令放在此处。在manjaro中,包括根目录的/bin也是它的符号链接。系统默认的可执行文件安装目录就在此处,任何第三方程序包括安装在/opt和/usr/local/bin中的可执行文件都可以在此处放置一个符号链接指向其可执行文件。

/usr/include目录

系统内所有通用的C语言头文件都放在此处。

/usr/lib目录

其中保存了库和目标文件,他们都是二进制文件。不被用户和shell直接执行,应用程序可以在这里创建独立的子目录。在centos中/lib是指向这里的符号链接

/usr/local目录

/usr/local是整个文件系统的第三个主要区段。是供系统管理员安装局域性软件使用的。它保证了当系统更新时不会把他们覆盖掉。

其中包括的目录:

默认情况下不会在有其他的子目录了,/usr/local/etc也可能符号链接到/etc/local,这更适合用于将所有配置文件放置在/etc下的这一个原则。

可以看出,该目录下有完整的结构,所以可以看出在linux系统中,/是第一个主要区段是整个文件系统的根其下也定义了bin etc lib sbin等,/usr是第二个主要区段是全局性的也定义了bin etc lib sbin等。而/usr/local是第三个主要区段定义了局域性数据其下也有bin etc lib sbin等。

/usr/sbin目录

系统管理软件的可执行程序。虽然根据层级 /sbin是必须的系统管理命令,/usr/sbin是非必要但重要的系统管理命令,/usr/local/sbin是局域性的系统管理命令。但是实际上 /sbin是一个符号链接到/usr/sbin。同理还有/bin和/lib等。

/usr/share目录

这里存放着所有体系结构无关的数据文件,它的内容可以共享给运行在任何体系结构下的操作系统。例如某个站点可能由i386 arm等体系结构平台构成,但是他们可能共同维护唯一一个挂载到某处的/usr/share目录。需要注意的是,虽然/usr/share可以共享于不同体系结构之间,但是其必须运行相同的操作系统。其下最重要的目录是man目录。

/usr/share/man目录介绍:

这个目录是专门联机帮助而准备的。它包含了/和/usr下大部分程序的帮助信息。

其路径位: 语言(en fr it zh_CN等)/man1~8/.gz压缩文件

man1 公共可用的命令或软件的指南

man2 所有系统调用的说明

man3 库函数的说明信息

man4 特种文件的说明 如/dev目录下的设备文件和提供网络协议支持的内核接口等

man5 大部分数据文件的格式说明

man6 游戏演示程序等一些不太重要的程序说明文档

man7 其他类型的在线帮助信息

man8 系统维护程序文档保存在这里

/var目录

该目录包含着系统中绝大多数的随时变化着的数据,比如系统日志等。/var下的某些内容是无法共享的,比如/var/logs /var/lock /var/run等。某些是可以共享的比如/var/mail /var/cache/man /var/spool/news等

/var的创建就是为了从/usr中剥离可写数据,以便可以以只读方式挂载/usr目录。

/var目录下必须具备的内容:

/var目录下可选内容:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值