了解 Linux 的目录结构

引言

  同学们成功登录到了 Linux 系统,发现,Linux 的目录结构,完全不同于 Windows,因为它没有“盘符”这样的概念,这让很多熟悉了 Windows 目录结构的同学以为,Linux 是没有分区这种概念的,其实不然,现在,我们旅行到了目录结构这个项目,我们要好好看看,Linux 的目录结构到底是怎样的?

我们的目标

  通过本文,同学们将了解到:

  1. 目录的类型
  2. 根目录下的常见子目录的名称及作用
  3. 用来表示目录的符号

目录的类型

  在 Linux 系统中,目录被分为根目录和子目录两种类型,最上层的目录被称为根目录(/),在根目录之下,可以建立无数层级的子目录,例如,可以建立 students 目录,并在其中建立更深层的目录。父目录与子目录之间,用正斜杠符号(/)分隔,例如:/students/mason/textbooks,/students/armstrong/works。

了解根目录的常见子目录

  同学们在根目录中,会看到许许多多的目录,它们的作用是什么呢?通常的 Linux 系统,它们的根目录一定会有这些子目录:bin、dev、etc、home、lib、lib64、lost+found、media、mnt、opt、proc、root、run、sbin、srv、sys、tmp、usr 和 var,它们的功能是什么呢?请同学们仔细看下面的说明。
bin 和 sbin:这些都是系统内置的可执行文件的存放目录,在习惯上,bin 中的可执行文件是不需要超级用户权限就可以执行,而 sbin 中的可执行文件是需要超级用户权限才可以执行的。例如,bin 存放的是用来查看文本文件的 cat 指令,用来操作 .tar.gz 格式压缩文件的 tar 命令等。而 sbin 中的可执行文件就有 shutdown、reboot、init、ifconfig 等系统管理相关的命令。另外,同学们知道吗?有些 Linux 发行版,/bin 和 /sbin 实际上是 /usr/bin 和 /usr/sbin 的链接,通俗地说,链接就是另一个名称。
dev:这是用来存储设备访问点的目录,也就是说,可以向访问文件那样访问设备,比如 /dev/null 是一个“黑洞”设备,进入其中的数据都会被它吞噬掉。而 /dev/zero 是无限 0 设备,它的功能是输出无限的 0,通常用来给某个区域填零。这次旅行,我想在这里给同学们介绍的是 /dev/shm 目录,这确实是个目录,它映射到内存,也就是内存虚拟硬盘,换句话说,存放到里面的文件,实际上是存放到内存的,VIYF 的服务器就用到了 /dev/shm,用来缓存系统生成的网页文件,加快了网站的速度,并且降低后端服务器的负担。
etc:这个目录用来存放各种各样的配置文件,例如 passwd 存放了用户账户的信息,如用户名、用户识别码、用户姓名、主目录和默认 Shell 执行文件。shadow 存放了用户的密码,并且,只有 root 用户是可读的。同学们知道吗?issue 和 motd 这两个文件是很有意思的哦,大家通过 Putty 登陆到学生机后,是不是看到了一条欢迎信息?OK,这就是 motd 文件的内容啦,而 issue 文件是干嘛的呢?它是在登录之前显示的内容,当然了,默认情况下,通过 SSH 连接到 Linux 主机,它是不会被显示出来的。rc*.d 存放了各个运行级别的初始化脚本文件,或者用于切换到该运行级别用到的脚本文件。
home:这是默认的用户目录,用户的主目录存放在这个目录下,例如,默认情况下,mason 的主目录是 /home/mason,armstrong 的主目录是 /home/armstrong。
lib 和 lib64,这里存放的是共享的动态链接库文件,例如,常用到的 libjpeg 库,通过库文件,会写程序的同学,在程序当中想要使用某些功能,为了开发效率,可以直接调用某个库文件的函数来实现。有的发行版上,存在了 lib、lib32 和 lib64 这些库目录。
lost+found:fsck 检查文件系统时,部分找回的损坏文件会被放置到这个目录。
media:系统自动挂载 CD-ROM 时,会挂载到这个目录。
mnt:人们习惯把磁盘分区挂载到 /mnt 的子目录里面,用来挂载的子目录被称为挂载点。
opt:安装一些可选的程序到这里,被安装到这里的每个程序都是一个单独的目录,卸载的时候,只需要简单地将程序目录删除即可。例如,同学们可以在这里安装想玩一下的软件,比如某些软件的测试版。
proc:这是存储在内存上的虚拟文件系统,通过这个目录,可以读取到内核的运行信息,也可以更改内核的运行参数。例如,可以通过 /proc/cpuinfo 读取 CPU 的信息,通过 /proc/meminfo 读取内存信息,还可以通过 /proc/loadavg 读取系统的负载信息(5 分钟、10 分钟和 15 分钟)的负载情况,如果最近 15 分钟的负载数值超过了本机逻辑处理器的数量,那么系统就是在超负荷运行。有的同学要问了,那些以数字命名的目录是怎么来的呢?细心的同学会发现,它其实是以进程的进程标识符(PID)命名的,可以通过它,读取进程的信息。对于修改系统内核参数,例子是修改系统的 TTL,通过修改 /proc/sys/net/ipv4/ip_default_ttl 中的数值,可以临时修改 TTL,系统关闭之前一直有效。
root:这个目录存放的是什么文件呢?这里就不说了,留给同学们思考或观察。
run:这是用来存放运行状态的目录,最常被用来存放守护进程的进程标识符文件。
srv:存放服务器软件需要的资源文件,例如,网站的网页文件,但是,现在很少这样存放,大多是存放到别的文件夹。
sys:这是存储在内存上的虚拟文件系统,系统通过这个目录,将系统中设备的详细信息,以层次结构提供给用户模式的程序,现在,同学们不需要太多了解这个分区当中的文件。
tmp:这是默认的临时文件目录,程序产生的临时文件,都会放到这里。
usr:这个目录与根目录类似,系统在正常运行的时候,都是调用 /usr 下的文件,当系统进入救援模式后,只能使用根目录的文件。但是,一些发行版已经淡化了根目录文件的作用,例如 /bin 是链接到 /usr/bin 文件夹的。值得一提的是,usr 文件夹里的 local 文件夹,是本地系统管理员安装的程序的文件夹。
var:存放数据文件,例如系统日志,MariaDB Server 的数据库等,其中 /var/cache 是缓存目录,/var/log 是日志目录等等。

用来表示目录的特殊符号

  同学们知道吗?为什么会有 ..(两个点)目录?哈哈,这是用来表示目录的符号,常用的有哪些呢?
.(点):表示当前目录,这样的表示法,通常是在运行当前目录的可执行文件的时候用到。
..(两个点):代表父目录,例如,当前位于 /students/mason/homework,访问 ..,就会返回到 /students/mason 目录。
~(波浪号):代表用户的主目录。我作为 Armstrong 账户登录,但是我当前位于 /students/mason/homework,当我访问 ~ 后,就会返回到 /home/armstrong。

发表评论

电子邮件地址不会被公开。 必填项已用*标注