INDEX
§1 综述
- Linux 的文件系统采用层级式树状目录结构
- Linux 的文件系统的最上层是根目录 “/”
- Linux 是一个文件至上的系统,“一切皆文件”
§1.1 一切皆文件
一切皆文件是 Linux 系统的设计理念,即将系统中的一切都挂在文件系统上。
系统中的一切 包括 Linux 中任意资源、信息、概念。比如正常的文件和目录,以及比较抽象的进程(/proc)、设备(/dev)、Socket等
挂在文件系统上 的意思是上述内容都可以通过文件的形式存在或呈现(即使其中有些不是文件)。
挂在文件系统上意味:
- 可以通过访问文件的方式访问上述内容,甚至修改属主和属性。
- 对系统的操作最终都会在文件系统上有相关呈现,比如为 Linux 增加了一个硬件。
- 不能反向理解上一条,不能通过操作系统中的相关文件,实现所有功能,比如新建文件试图同时创建一个新磁盘
此处内容的文字参考自 知乎(Linux中“一切皆文件”是什么意思?)
§2 Linux 常见默认目录与简介
§2.1 概述图
§2.2 详情
- /bin
bin 是 Binaries (二进制文件) 的缩写, 这个目录存放着最经常使用的命令。 - /boot
这里存放的是启动 Linux 时使用的一些核心文件,包括一些连接文件以及镜像文件。 - /dev
dev 是 Device(设备) 的缩写, 该目录下存放的是 Linux 的外部设备,在 Linux 中访问设备的方式和访问文件的方式是相同的。 - /etc
etc 是 Etcetera(等等) 的缩写,这个目录用来存放所有的系统管理所需要的配置文件和子目录。 - /etc/rc.d
启动的配置文件和脚本 - /home
用户的主目录,在 Linux 中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的,如上图中的 alice、bob 和 eve。 - /lib
lib 是 Library(库) 的缩写这个目录里存放着系统最基本的动态连接共享库,其作用类似于 Windows 里的 DLL 文件。几乎所有的应用程序都需要用到这些共享库。 - /lost+found
这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。 - /media
linux 系统会自动识别一些设备,例如U盘、光驱等等,当识别后,Linux 会把识别的设备挂载到这个目录下。 - /mnt
系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在 /mnt/ 上,然后进入该目录就可以查看光驱里的内容了。 - /opt
opt 是 optional(可选) 的缩写,这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。 - /proc
proc 是 Processes(进程) 的缩写,/proc 是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。
这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件,比如可以通过下面的命令来屏蔽主机的ping命令,使别人无法ping你的机器:
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all - /root
该目录为系统管理员,也称作超级权限者的用户主目录。 - /sbin
s 就是 Super User 的意思,是 Superuser Binaries (超级用户的二进制文件) 的缩写,这里存放的是系统管理员使用的系统管理程序。 - /selinux
这个目录是 Redhat/CentOS 所特有的目录,Selinux 是一个安全机制,类似于 windows 的防火墙,但是这套机制比较复杂,这个目录就是存放selinux相关的文件的。 - /srv
该目存放一些服务启动之后需要提取的数据。 - /sys
这是 Linux2.6 内核的一个很大的变化。该目录下安装了 2.6 内核中新出现的一个文件系统 sysfs 。
sysfs 文件系统集成了下面3种文件系统的信息:针对进程信息的 proc 文件系统、针对设备的 devfs 文件系统以及针对伪终端的 devpts 文件系统。
该文件系统是内核设备树的一个直观反映。
当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中被创建。 - /tmp
tmp 是 temporary(临时) 的缩写这个目录是用来存放一些临时文件的。 - /usr
usr 是 unix shared resources(共享资源) 的缩写,这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于 windows 下的 program files 目录。- /usr/X11R6 存放X window的目录
- /usr/bin 系统用户使用的应用程序
- /usr/sbin 超级用户使用的比较高级的管理程序和系统守护程序
- /usr/doc linux文档
- /usr/include linux下开发和编译应用程序所需要的头文件
- /usr/lib 常用的动态链接库和软件包的配置文件
- /usr/man 帮助文档
- /usr/src 内核源代码默认的放置目录,linux内核的源代码就放在/usr/src/linux里
- /usr/local/bin 本地增加的命令
- /usr/local/lib 本地增加的库
- /var
var 是 variable(变量) 的缩写,这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。 - /run
是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。如果你的系统上有 /var/run 目录,应该让它指向 run。
§2.3 需要区分的目录
/opt /usr /usr/local 都用于安装软件,/usr 和 /usr/local 具有相同的结构
/opt 中安装的软件会将所有的数据、库文件等都放在一个目录中,方便卸载。常用于尝试软件
/usr 常用于存放通过安装管理器获取的软件
/usr/local 常用于存放手动安装的软件
§3 文件的所有者、所在组、其他组
linux中每一个文件/目录,按照系统操作人对其的亲疏远近,划分了三个层次,分别为:
- 所有者
- 所在组(的用户)
- 其他组(的用户)
所有者通常是创建文件/目录的用户,
所有组通常是所有者所在的组,
其他组是所在组以外的组,
文件/目录的所有者和所有组可以通过 chown(change owner) 指令修改
相关指令查看 Linux 常用指令(§10.3)
文件/目录的所有组可以通过 chgrp(change group) 指令修改
相关指令查看 Linux 用户管理(§2.7)
§4 权限
§4.1 权限说明
Linux 的权限,通常是指对文件和目录的权限
权限的表示如下图:
Linux 每个文件/目录通常有三组权限,依次为:
- 所有者 对其的权限
- 所在组的用户 对其的权限,文件/目录的所在组 ≠ 所有者所在的组,groupmod 可修改
- 其他组的用户 对其的权限
每组权限有三个权限位,每位上具体标记和含义:
- r位 :read 读
- 文件:可读取,查看
- 目录:可读取,可以用 ls 查看目录内容
- w位 :write 写
- 文件:可以修改,但不一定能删除、移动,这要求对文件所在目录具有写权限
- 目录:可以目录内创建、删除,可以对目录重命名
- x位 :execute 执行
- 文件:可以被执行
- 目录:可以进入目录
- - :没有上述三种权限时,在对应位记做 -
权限的数字表示法:
- 将三个权限位视为一个三位的2进制数,则 r位权重4,w位权重2,x位权重1
- 每个权限位上的权限,具有时计算为此位权重,不具有时计算为 0
- 三个权限位的值求和即为这一组权限的数字表示
- 三组权限按3位数表示,如751
- 通常项目下权限为 755 ,即 rwx r-x r-x
- 可按下表速查
数字 | 权限 |
---|---|
0 | - - - |
1 | - - x |
2 | - w - |
3 | - w x |
4 | r - - |
5 | r - x |
6 | r w - |
7 | r w x |
§4.2 chmod [修改权限]
全称:change mode 改变模式
指令:chmod 赋权表达式1,赋权表达式2… 文件/目录名
说明:
- 赋权表达式由 目标、操作、权限组成
- 目标:
- u :所有者
- g :所在组
- o :其他组
- a :全部,同时所有者、所在组、其他组
- 操作:
- + :原权限基础上增加权限
- - :原权限基础上减少权限
- = :重新赋予权限,忽略原有权限
- 权限,即 r w x -
- 三种操作方式可以混用
指令:chmod 权限数字 文件/目录名,如 chmod 755 aa
说明:参考上文内容 权限的数字表示法
§5 软件安装位置
linux 通常将软件放在以下三个地方
- /opt
- /usr
- /usr/local
首先将同一个软件放到这三个地方后,使用上没什么区别
其他方面的差别如下
/opt 下的软件,其数据、配置、程序都是放在一起的,因此非常容易对他们进行移动和删除
因此非常适合放置如下软件
- 你只是在单纯的尝试或学习某种软件
- 只是临时使用,后面就不需要了的软件
- 在关键时刻,可以用来牺牲以腾出一定的磁盘空间的软件
/usr 下通常用于存放自动获取的软件,比如通过 rpm 获取的
/usr/local 此目录下结构和 /usr 一致,适合放置自己手动安装的的软件,比如自己通过源码编译的或通过压缩包解压的