System Administration
Administrator/Superuser
su#成为超级用户su username#成为指定用户
sudo#以超级用户的身份执行一行命令
The Model Hard Disk Drive
- Superblock: Containing file system size, free space, etc.
- 是文件系统最重要的部分,存储了文件系统(file system)信息
- 包括 inode/block 的总量、使用量、剩余量等
- Inodes: records important file information - file size, permissions, data addresses, etc
- 每一个文件和目录都有对应的 Inode(每一个目录不仅有自己的 Inode,也一定有对应的 Data Block)
- 里面存储了文件大小、允许级别、数据地址等,即
ls -l的内容 - Inode 指向一个数据块,即 block
- block
- 实际记录文件内容,若文件太大,则会占用多个 block,哪怕文件很小,也会至少占用一个block
ls -l vs cat
| 操作 | 命令 | 底层动作 | 读取了什么? |
|---|---|---|---|
| 查看属性 | ls -l filename | 1. 读取当前目录的block数据块,找到 filename 对应的 Inode 号码。 2. 读取该 Inode,获取文件大小、权限、时间等信息。 | 只读取了 Inode (没有触碰 file.txt的Data Blocks) |
| 查看内容 | cat filename | 1. 读取目录找到 Inode 号码。 2. 读取 Inode,找到数据块的地址指针。 3. 根据指针,去磁盘读取 Data Blocks 的内容并显示。 | 读取了 Inode + Data Blocks |
为什么 C 盘和文件属性查看大小速度不同
- 本质和硬盘结构有关:C 盘(整个分区)有多大、剩多少空间,这些信息记录在 superblock 里;而一个目录下面的很多信息(例如子目录有多少、每个文件多大等)不会放在 superblock 里,文件信息都放在 Inodes 里面。
- 所以查看“整个盘”的大小时,直接读 superblock 就能得到结果,速度快;而查看“文件/目录占用大小”需要逐个访问 inode、遍历目录项并统计,会更费时间。
Displaying File System Information
df(report file system disk space usage)
df:显示空间磁盘块和文件的数量,是文件系统的整体占用- 用法:
df [options] [directory]- 若无
dir,默认当前目录
- 若无
-k:以 kilobyte 为统计单位(k 字节报告)-i:显示 inodes 信息
- 用法:
du(estimate file space usage)
du:指定目录或文件占用的磁盘空间du [option] [directory]- 若不加
dir,则默认当前文件夹 -a, --all:除目录外,还统计文件的大小(因为默认只统计目录的大小)-s:仅显示统计(summarize),即只显示总的那个文件(display only a total for each argument)-d #:目录最大深度0时等于-s1只统计当前文件夹内的2还统计到子文件夹内的3会统计到子文件夹内的文件夹
-k:以 kilobyte 为统计单位
目录也会占用一个数据块
二者的区别
df更快:读取的是 superblock 内容du慢:通过 inode 逐级进入指定目录的每一个子目录,从而统计并显示占用大小
Managing File Systems
- 将文件系统与目录树产生关联的操作为挂载mount
- 挂载 = 把一个文件系统接入到 Linux 的目录树里,让你能通过某个目录去访问它
- Linux 只有一棵目录树:从
/开始一直往下。但硬盘/分区/U盘是独立的存储空间,它们必须挂到某个目录上,才能读写。
- 分区(文件系统)是物理上的区分
- 真实存在的存储设备或分区:
- /dev/sda1、/dev/sdb2、U盘 /dev/sdc1 等
- 里面有自己的 superblock/inode/block,也就是一个完整文件系统。
- 真实存在的存储设备或分区:
- 目录是逻辑上的区分
- 比如:
/home、/mnt/usb、/data只是“路径名字” - 它本身不等于某块物理硬盘空间,除非你把东西挂上去。
- 比如:
- Linux 分区必须挂载到目录树中的某个具体的目录上才能进行读写操作
- Adds file system to the directory tree
mount filesystem mountpoint- 比如:
mount /dev/sdc1 /mnt/usb是把/dev/sdc1这个文件系统接到/mnt/usb这个目录上 - 挂载点 mountpoint 必须是一个目录。挂载后,这个目录原本的内容会“被遮住”(卸载后又回来)
- reports mounted systems on current workstation
mount- 它会列出当前系统所有挂载点,例如:
/dev/sda1 on / type ext4 .../dev/sdc1 on /mnt/usb type vfat ...
- Remove a file system from the directory tree
umount {directory | device}
- 两种都行:
umount /mnt/usb(按目录卸载)umount /dev/sdc1(按设备卸载)
-v:verbose,verbose mode,输出更多过程信息-f:force,force an umount,强制卸载
File System Backup(系统备份)
tar [options] {directory | file}...:an archiving utility(打包工具)- tar = 打包 gzip/ compress = 压缩,打包不一定会变小
常用选项:
-c:创建新的备份文件(create a new archive),也就是打一个新的包-t:列出备份文件的内容(list the contents of an archive),打开包看看里面有什么,但是不拿出来-x:从备份文件中还原(extract),从包里面取出来-v:显示过程(verbose),输出更多过程信息-z:通过 gzip 处理文件(gzip compression),打完包之后通过gzip再压缩一遍-Z:通过 compress 处理文件(compress),打完包之后通过compress再压缩一遍,compress比较老也很少用-f file:指定备份文件名(specify archive filename),指定包叫什么名字- 没它 tar 不知道输出到哪个文件
示例:
- 打包指定目录到 bug.tar:
tar -cvf bug.tar /usr/share/bug- 将目录下的所有文件打包成
bug.tar,放在当前目录
注意:
tar只是打包,并不是压缩;压缩可以使用gzip等压缩工具,使用-z选项。- 将当前目录打包并压缩为 data.tgz:
tar -zcvf data.tgz .
- 解压缩 data.tgz 到指定目录(后面目录下):
tar -zxvf data.tgz-C$HOME/new_home
- 查看压缩包中的文件列表(使用
-t选项):tar -tvf bug.tar11
Network File System
- 网络文件系统,英文 Network File System (NFS),是由 SUN 公司研制的 UNIX 表示层协议(presentation layer protocol),能使用户访问网络上别处的文件就像在使用自己的计算机一样。
- Mount remote NFS file systems
mount -t nfs cello:/remotedir /projectmount命令以nfs的形式来进行挂载,cello(冒号前)最终会被解释为 IP 地址

评论区