系统

系统目录

目录内容
/bin系统有很多放置可执行文件的目录,但/bin 比较特殊。因为/bin 放置的是在 单人维护模式下还能够被操作的指令。 在/bin 下面的指令可以被 root 与一般 帐号所使用,主要有:cat, chmod, chown, date, mv, mkdir, cp, bash 等等常用的指令。
/boot这个目录主要在放置开机会使用到的文件,包括 Linux 核心文件以及开机菜 单与开机所需配置文件等等。 Linux kernel 常用的文件名为:vmlinuz,如果 使用的是 grub2 这个开机管理程序, 则还会存在/boot/grub2/这个目录喔!
/dev在 Linux 系统上,任何设备与周边设备都是以文件的型态存在于这个目录当 中的。 你只要通过存取这个目录下面的某个文件,就等于存取某个设备啰 ~ 比要重要的文件有/dev/null, /dev/zero, /dev/tty, /dev/loop, /dev/sd 等等
/etc系统主要的配置文件几乎都放置在这个目录内,例如人员的帐号密码档、 各种服务的启始档等等。一般来说,这个目录下的各文件属性是可以让一般 使用者查阅的, 但是只有 root 有权力修改。FHS 建议不要放置可可执行文件 (binary)在这个目录中喔。比较重要的文件有: /etc/modprobe.d/, /etc/passwd, /etc/fstab, /etc/issue 等等。另外 FHS 还规范几个重要的目录 最好要存在 /etc/ 目录下喔:/etc/opt(必要):这个目录在放置第三方协力 软件 /opt 的相关配置文件 /etc/X11/(建议):与 X Window 有关的各种配 置文件都在这里,尤其是 xorg.conf 这个 X Server 的配置文件。 /etc/sgml/ (建议):与 SGML 格式有关的各项配置文件 /etc/xml/(建议):与 XML 格式有关的各项配置文件
/lib系统的函数库非常的多,而/lib 放置的则是在开机时会用到的函数库, 以及 在/bin 或/sbin 下面的指令会调用的函数库而已。 什么是函数库呢?你可以将 他想成是“外挂”,某些指令必须要有这些“外挂”才能够顺利完成程序的执行 之意。 另外 FSH 还要求下面的目录必须要存在:/lib/modules/:这个目录 主要放置可抽换式的核心相关模块(驱动程序)喔!
/mediamedia 是“媒体”的英文,顾名思义,这个/media下面放置的就是可移除的设备, 包括软盘、光盘、DVD 等等设备都暂时挂载于此。常见的文件名 有:/media/floppy, /media/cdrom 等等。
/mnt如果你想要暂时挂载某些额外的设备,一般建议你可以放置到这个目录中。 在古早时候,这个目录的用途与/media 相同,只是有了/media之后,这个 目录就用来暂时挂载用了。
/opt这个是给第三方协力软件放置的目录。什么是第三方协力软件啊? 举例来 说,KDE 这个桌面管理系统是一个独立的计划,不过他可以安装到 Linux 系 统中,因此 KDE 的软件就建议放置到此目录下了。 另外,如果你想要自行 安装额外的软件(非原本的 distribution 提供的),那么也能够将你的软件安 装到这里来。 不过,以前的 Linux 系统中,我们还是习惯放置在/usr/local 目录下呢
/run早期的 FHS 规定系统开机后所产生的各项信息应该要放置到 /var/run 目录 下,新版的 FHS 则规范到 /run 下面。 由于 /run 可以使用内存来仿真,因此性能上会好很多!
/sbinLinux 有非常多指令是用来设置系统环境的,这些指令只有 root 才能够利用 来“设置”系统,其他使用者最多只能用来“查询”而已。 放在/sbin 下面的为开 机过程中所需要的,里面包括了开机、修复、还原系统所需要的指令。 至于某些服务器软件程序,一般则放置到/usr/sbin/当中。至于本机自行安装的 软件所产生的系统可执行文件(system binary), 则放置到/usr/local/sbin/ 当中了。常见的指令包括:fdisk, fsck, ifconfig, mkfs 等等。
/srvsrv 可以视为“service”的缩写,是一些网络服务启动之后,这些服务所需要 取用的数据目录。 常见的服务例如 WWW, FTP 等等。举例来说,WWW 服 务器需要的网页数据就可以放置在/srv/www/里面。 不过,系统的服务数据 如果尚未要提供给网际网络任何人浏览的话,默认还是建议放置到 /var/lib 下面即可。
/tmp这是让一般使用者或者是正在执行的程序暂时放置文件的地方。 这个目录 是任何人都能够存取的,所以你需要定期的清理一下。当然,重要数据不可 放置在此目录啊! 因为 FHS 甚至建议在开机时,应该要将/tmp 下的数据都删除唷!
/usrUnix Software Resource 的缩写, 也就 是“Unix 操作系统软件资源”所放置的目录,而不是使用者的数据啦!这点要注意。 FHS 建议 所有软件开发者,应该将他们的数据合理的分别放置到这个目录下的次目录,而不要自行创 建该软件自己独立的目录。 FHS
/var二曾 FHS 设置,主要为放置变动性的数据
/home这是系统默认的使用者主文件夹(home directory)。在你新增一个一般使 用者帐号时, 默认的使用者主文件夹都会规范到这里来。比较重要的是, 主文件夹有两种代号喔:~:代表目前这个使用者的主文件夹 ~dmtsai :则 代表 dmtsai 的主文件夹!
/lib<qual>用来存放与 /lib 不同的格式的二进制函数库,例如支持 64 位的 /lib64 函数 库等
/root系统管理员(root)的主文件夹。之所以放在这里,是因为如果进入单人维 护模式而仅挂载根目录时, 该目录就能够拥有 root 的主文件夹,所以我们会 希望 root 的主文件夹与根目录放置在同一个分区中。

其他目录

目录文件内容
/lost+found这个目录是使用标准的 ext2/ext3/ext4 文件系统格式才会产生的一个目录, 目的在于当文件系统发生错误时, 将一些遗失的片段放置到这个目录下。 不过如果使用的是 xfs 文件系统的话,就不会存在这个目录了!
/proc这个目录本身是一个“虚拟文件系统(virtual filesystem)”喔!他放置的数 据都是在内存当中, 例如系统核心、行程信息(process)、周边设备的 状态及网络状态等等。因为这个目录下的数据都是在内存当中, 所以本身 不占任何硬盘空间啊!比较重要的文件例如:/proc/cpuinfo, /proc/dma, /proc/interrupts, /proc/ioports, /proc/net/\* 等等。
/sys这个目录其实跟/proc非常类似,也是一个虚拟的文件系统,主要也是记录 核心与系统硬件信息较相关的信息。 包括目前已载入的核心模块与核心侦 测到的硬件设备信息等等。这个目录同样不占硬盘容量喔

/usr的次目录

依据 FHS 的基本定义,/usr 里面放置的数据属于可分享的与不可变动的(shareable, static), 如果你知道如何通过网络进行分区的挂载(例如在服务器篇会谈到的 NFS 服务 器),那么/usr确实可以分享给区域网络内的其他主机来使用

目录文件内容
/usr/bin/所有一般用户能够使用的指令都放在这里!目前新的 CentOS 7 已经将 全部的使用者指令放置于此,而使用链接文件的方式将 /bin 链接至此! 也就是说, /usr/bin/bin 是一模一样了!另外,FHS 要求在此目录 下不应该有子目录!
/usr/lib/基本上,与 /lib 功能相同,所以 /lib 就是链接到此目录中的!
/usr/local/系统管理员在本机自行安装自己下载的软件(非 distribution 默认提供 者),建议安装到此目录, 这样会比较便于管理。举例来说,你的 distribution 提供的软件较旧,你想安装较新的软件但又不想移除旧版, 此时你可以将新版软件安装于/usr/local/目录下,可与原先的旧版软件 有分别啦! 你可以自行到/usr/local去看看,该目录下也是具有 bin, etc, include, lib...的次目录喔
/usr/sbin/非系统正常运行所需要的系统指令。最常见的就是某些网络服务器软件 的服务指令(daemon)啰!不过基本功能与 /sbin 也差不多, 因此目 前 /sbin 就是链接到此目录中的。
/usr/share/主要放置只读架构的数据文件,当然也包括共享文件。在这个目录下放 置的数据几乎是不分硬件架构均可读取的数据, 因为几乎都是文字文 件嘛!在此目录下常见的还有这些次目录:/usr/share/man:线上说明 文档 /usr/share/doc:软件杂项的文件说明 /usr/share/zoneinfo:与时 区有关的时区文件

/var的次目录

如果/usr 是安装时会占用较大硬盘容量的目录,那么/var 就是在系统运行后才会渐渐占用硬盘 容量的目录。 因为/var 目录主要针对常态性变动的文件,包括高速缓存(cache)、登录文件 (log file)以及某些软件运行所产生的文件, 包括程序文件(lock file, run file),或者例如 MySQL 数据库的文件等等。常见的次目录有:

目录文件内容
/var/cache/应用程序本身运行过程中会产生的一些暂存盘
/var/lib/程序本身执行的过程中,需要使用到的数据文件放置的目录。在此目录下 各自的软件应该要有各自的目录。 举例来说,MySQL 的数据库放置 到/var/lib/mysql/而 rpm 的数据库则放到/var/lib/rpm
/var/lock/某些设备或者是文件资源一次只能被一个应用程序所使用,如果同时有两 个程序使用该设备时, 就可能产生一些错误的状况,因此就得要将该设备 上锁(lock),以确保该设备只会给单一软件所使用。 举例来说,烧录机 正在烧录一块光盘,你想一下,会不会有两个人同时在使用一个烧录机烧 片? 如果两个人同时烧录,那片子写入的是谁的数据?所以当第一个人在 烧录时该烧录机就会被上锁, 第二个人就得要该设备被解除锁定(就是前 一个人用完了)才能够继续使用啰。目前此目录也已经挪到 /run/lock
/var/log/重要到不行!这是登录文件放置的目录!里面比较重要的文件 如/var/log/messages, /var/log/wtmp(记录登陆者的信息)等
/var/mail/放置个人电子邮件信箱的目录,不过这个目录也被放置到/var/spool/mail/ 目录中! 通常这两个目录是互为链接文件
/var/run/某些程序或者是服务启动后,会将他们的 PID 放置在这个目录下; 与 /run 相同,这个目录链接到 /run
/var/spool/这个目录通常放置一些伫列数据,所谓的“伫列”就是排队等待其他程序使用的数据; 这些数据被使用后通常都会被删除。举例来说,系统收到新 信会放置到/var/spool/mail/中, 但使用者收下该信件后该封信原则上就会 被删除。信件如果暂时寄不出去会被放到/var/spool/mqueue/中, 等到被 送出后就被删除。如果是工作调度数据(crontab),就会被放置 到/var/spool/cron/目录中

文件系统

磁盘与目录的容量

  • df: 列出文件系统的整体磁盘使用量;
  • du: 评估文件系统的磁盘使用量(常用在推估目录所占容量)。
df -h
 -a :列出所有的文件系统,包括系统特有的 /proc 等文件系统;
 -k :以 KBytes 的容量显示各文件系统;
 -m :以 MBytes 的容量显示各文件系统;
 -h :以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示;
 -H :以 M=1000K 取代 M=1024K 的进位方式;
 -T :连同该 partition 的 filesystem 名称 (例如 xfs) 也列出;
 -i :不用磁盘容量,而以 inode 的数量来显示

Filesystem                         Size  Used Avail Use% Mounted on
udev                               932M     0  932M   0% /dev
tmpfs                              196M  1.4M  194M   1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv   19G  4.7G   13G  27% /
tmpfs                              977M     0  977M   0% /dev/shm
tmpfs                              5.0M     0  5.0M   0% /run/lock
tmpfs                              977M     0  977M   0% /sys/fs/cgroup
/dev/loop0                          50M   50M     0 100% /snap/snapd/18596
/dev/loop2                          64M   64M     0 100% /snap/core20/1852
/dev/loop1                          92M   92M     0 100% /snap/lxd/24061
/dev/loop3                          68M   68M     0 100% /snap/lxd/22753
/dev/loop4                          62M   62M     0 100% /snap/core20/1611
/dev/sda2                          2.0G  108M  1.7G   6% /boot
tmpfs                              196M     0  196M   0% /run/user/1000
du -h
 -a :列出所有的文件与目录容量,因为默认仅统计目录下面的文件量而已。
 -h :以人们较易读的容量格式 (G/M) 显示;
 -s :列出总量而已,而不列出每个各别的目录占用容量;
 -S :不包括子目录下的总计,与 -s 有点差别。
 -k :以 KBytes 列出容量显示;
 -m :以 MBytes 列出容量显示;

4.0K	./.cache
4.0K	./.local/share/nano
8.0K	./.local/share
12K	./.local
8.0K	./test
4.0K	./.ssh
48K	.

实体链接与符号链接: ln

在 Linux 下面的链接文件有两种,一种是类似 Windows 的捷径功能的文件,可以让你快速的 链接到目标文件(或目录); 另一种则是通过文件系统的 inode 链接来产生新文件名,而不 是产生新文件!这种称为实体链接 (hard link)。

  • 每个文件都会占用一个 inode ,文件内容由 inode 的记录来指向;
  • 想要读取该文件,必须要经过目录记录的文件名来指向到正确的 inode 号码才能读取.

文件名只与目录有关,但是文件内容则与 inode 有关。那么想一想, 有没有 可能有多个文件名对应到同一个 inode 号码呢?有的!那就是 hard link 的由来。 所以简单的 说:hard link 只是在某个目录下新增一笔文件名链接到某 inode 号码的关连记录而已。

限制:

  • 不能跨 Filesystem;
  • 不能 link 目录。

基本上, Symbolic link 就是在创建一个 独立的文件,而这个文件会让数据的读取指向他 link 的那个文件的文件名!由于只是利用文 件来做为指向的动作, 所以,当来源文件被删除之后,symbolic link 的文件会“开不了”, 会 一直说“无法打开某文件!”。实际上就是找不到原始“文件名”而已。

ln [-sf] 来源文件 目标文件
-s :如果不加任何参数就进行链接,那就是hard link,至于 -s 就是symbolic link
-f :如果 目标文件 存在时,就主动的将目标文件直接移除后再创建!

磁盘分区状态

  • lsblk 列出系统上的所有磁盘列表
lsblk [-dfimpt] [device]
-d :仅列出磁盘本身,并不会列出该磁盘的分区数据
-f :同时列出该磁盘内的文件系统名称
-i :使用 ASCII 的线段输出,不要使用复杂的编码 (再某些环境下很有用)
-m :同时输出该设备在 /dev 下面的权限数据 (rwx 的数据)
-p :列出该设备的完整文件名!而不是仅列出最后的名字而已。
-t :列出该磁盘设备的详细数据,包括磁盘伫列机制、预读写的数据量大小等
NAME                      MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
fd0                         2:0    1  1.4M  0 disk
sda                         8:0    0   40G  0 disk
├─sda1                      8:1    0    1M  0 part
├─sda2                      8:2    0    2G  0 part /boot
└─sda3                      8:3    0   38G  0 part
  └─ubuntu--vg-ubuntu--lv 253:0    0   19G  0 lvm  /
sr0                        11:0    1 97.6M  0 rom
sr1                        11:1    1  1.3G  0 rom
  • blkid 列出设备的 UUID 等参数
/dev/fd0: SEC_TYPE="msdos" UUID="5676-7205" TYPE="vfat"
/dev/sr0: UUID="2023-03-22-14-15-38-00" LABEL="CDROM" TYPE="iso9660"
/dev/sr1: UUID="2022-08-31-07-37-40-00" LABEL="Ubuntu-Server 20.04.5 LTS amd64" TYPE="iso9660" PTUUID="36c74be4" PTTYPE="dos"
/dev/sda2: UUID="8b24a183-1280-405c-91d5-1097db53f04e" TYPE="ext4" PARTUUID="e313ad0f-e1d9-4e32-ab6f-4acc9f78cca0"
/dev/sda3: UUID="93bs5R-CrJI-yWJ7-XLIu-gC7U-ZK6v-LTTK1f" TYPE="LVM2_member" PARTUUID="e8abb4a9-5160-4bdd-abfb-5faf505b6ee1"
/dev/mapper/ubuntu--vg-ubuntu--lv: UUID="ebab41bc-91f2-41de-aa33-e4bf684ec07c" TYPE="ext4"
  • parted 列出磁盘的分区表类型与分区信息
上次更新:
贡献者: liuzhu