linux基础学习(2)-文件组织结构

基本组织原则

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

  1. 不一定必须由本地系统提供的文件都可以看作公有的
  2. 必须由本地系统提供的文件则可以看作是私有的
  3. 能够被保存在只读存储设备上的文件都可以被认为是只读的
  4. 反之那些必须要保存在可读写设备上的文件就是可写的

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

根文件系统

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

名称 功能
bin 重要的可执行文件,shell命令
boot 引导器配置文件、内核等
dev 设备文件
etc 系统专用配置文件
lib 重要的共享库和内核模块
media 可移动设备挂接点
opt 附加应用软件包
run 与当前运行进程有关的数据
sbin 重要的系统可执行文件
srv 本系统提供的用于服务器的数据
tmp 临时文件
usr 文件系统的第二层,公有文件的放置地
var 可变数据

可选的目录:

名称 功能
home 用户家目录
lib64 64位系统特有的
root root用户家目录

/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 分页显示文本
mount 挂载一个文件系统
mv 移动或改名
ps 查看系统进程状态
pwd 打印当前工作目录名
rm 删除文件或目录
rmdir 删除空目录
sed 一个流式文本编辑器
sh Bourne shell
stty 改变或打印终端行设置
su 改变用户标识
sync 刷新文件系统缓存
true 不做任何事情,表示成功
umount 卸载文件系统
uname 打印系统信息

可选命令:

命令 功能
csh 著名的C shell,可能是一个/bin/tcsh的符号链接
ed ed文本编辑器
tar 打包工具
cpio 打包工具
gzip 压缩工具
gunzip 压缩工具,如果有一定是指向 gzip 的链接
zcat 压缩工具,同上
netstat 网络统计工具
ping 网络测试工具

/boot目录

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

/dev目录

这是设备文件或专有文件的放置位置。

/etc目录

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

需要放置到/etc目录下的目录:

名称 功能
opt /opt目录下各软件的配置文件
rc.d init进程的配置文件
X11 X window系统的配置文件,可选
sgml SGML的配置文件,可选
xml XML的配置文件,可选

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

名称 功能
csh.login C shell登陆的全局初始化文件
exports NFS文件系统的访问控制列表
fstab 文件系统的静态信息,系统初始化时需要挂载多个文件系统时需要
ftpusers FTP守护进程的用户访问控制列表
gateways routed的网关列表
gettydefs getty程序的配置文件
group 用户组列表文件
host.conf 决定如何解析域名
hosts 主机名静态信息
hosts.allow 允许访问本机的IP地址列表
hosts.deny 禁止访问本机的IP地址列表
hosts.equiv 信任主机列表,作用于rlogin rsh rep
hosts.lpd 信任主机列表,作用于lpd
inetd.conf inetd守护进程的配置文件
inittab init程序的配置文件
issue 登陆提示符上面的消息和标识文件
ld.so.conf 搜索共享库的目录列表文件
motd 本机的标识信息
mtab 文件系统的动态信息
mtools.conf mtools程序配置文件
networks 网络名称的静态信息
passwd 用户密码文件
printcap ldp打印机的性能数据库
profile sh shell登陆的全局初始化文件
protocols 网络协议定义文件
resolv.conf DNS域名解析的配置文件
rpc RPC协议定义文件
securetty root登陆的TTY访问控制文件
services 记录网络服务名和他们对应使用的端口号及协议
shells 可使用的登陆shell路径名
syslog.conf syslogd守护进程的配置文件

/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目录的命令:

名称 功能
shutdown 关机命令
fastboot 快速重新启动系统
fasthalt 快速停止系统运行
fdisk 磁盘分区维护工具
halt 停止系统运行
ifconfig 网口配置工具
init 系统初始化进程,内核调用的第一个用户进程
mkfs 创建文件系统
mkswap 格式化交换分区
reboot 重新启动
route IP路由表维护工具
swapon 开启页交换

/srv目录

服务进程所需数据。某些服务进程启动后,他们需要读取的数据会放在/srv目录中,提供/srv目录一方面为了方便用户找到特地服务的数据文件,另一方面也是位某些服务放置他们的执行脚本、只读或可写数据提供一个合适的地方。
目前并没有规范/srv子目录的命名方法。有一种方式是按照协议构造如ftp rsync www cvs等。

/tmp目录

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

/usr目录

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

名称 功能
bin 大部分用户命令
include C程序头文件目录
lib 程序库
local 用户自行安装的程序存放目录
sbin 非重要的系统程序
share 体系结构独立数据
tmp 一个到/var/tmp的符号链接,为了保持与老系统的兼容

可选目录:

名称 功能
games 游戏目录
src 源代码

/usr/bin目录

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

/usr/include目录

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

/usr/lib目录

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

/usr/local目录

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

其中包括的目录:

名称 作用
bin 局域性可执行文件
etc 局域性软件的配置文件目录
include 局域性C头文件
lib 局域性程序库
man 局域性在线指南
sbin 局域性系统管理命令
share 局域性体系结构无关数据
src 局域性源代码文件

默认情况下不会在有其他的子目录了,/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目录下必须具备的内容:

名称 功能
cache 应用程序的缓存数据
lib 可变状态信息
local /usr/local的可变数据
lock 锁文件
log 日志文件于目录
opt /opt的可变数据
run 与当前运行进程有关的数据
spool spool应用程序
tmp 系统重新启动期间起到保护作用的临时文件

/var目录下可选内容:

名称 功能
account 记录进程的运行情况
games 游戏的可变数据
mail 用户的邮件
yp 网路信息服务NIS数据库文件
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,752评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,100评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,244评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,099评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,210评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,307评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,346评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,133评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,546评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,849评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,019评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,702评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,331评论 3 319
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,030评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,260评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,871评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,898评论 2 351

推荐阅读更多精彩内容