文章目录
前言
总结linux中与文件系统相关的命令,包括软硬链接、磁盘信息查询、分区、格式化、挂载等
一、软链接与硬链接
NAME
ln - make links between files
SYNOPSIS
ln [OPTION]... [-T] TARGET LINK_NAME (1st form)
ln [OPTION]... TARGET (2nd form)
ln [OPTION]... TARGET... DIRECTORY (3rd form)
ln [OPTION]... -t DIRECTORY TARGET... (4th form)
DESCRIPTION
In the 1st form, create a link to TARGET with the name LINK_NAME. In the 2nd form, create a link to TARGET in the current directory. In the 3rd and 4th forms, create
links to each TARGET in DIRECTORY. Create hard links by default, symbolic links with --symbolic. By default, each destination (name of new link) should not already
exist. When creating hard links, each TARGET must exist. Symbolic links can hold arbitrary text; if later resolved, a relative link is interpreted in relation to its
parent directory.
掌握第一栏即可,其他三栏较第一栏,是默认了LINK_NAME与原文件同名而已。
默认是硬链接,软链接需加 -s 选项。LINK_NAME在生成目录下不能已经存在。创建硬链接时,TARGET文件必须存在。
更多软硬链接相关介绍可参考软链接与硬链接的区别与联系
二、磁盘与目录容量
2.1 df
2.1.1 功能
列出文件系统的整体使用情况。主要读取的数据几乎都是针对一整个文件系统,读取范围主要是在superblock内的信息,所以这个指令显示结果的速度比较迅速。
2.1.2 范例
范例一:
root@study:~$ df
Filesystem 1K-blocks Used Available Use% Mounted on
tmpfs 399476 3264 396212 1% /run
/dev/sda1 61742128 53378424 5621368 91% /
tmpfs 1997364 8 1997356 1% /dev/shm
1K-blocks说明由多少个1KB的blocks组成,也就是说该文件系统的单位是KB。例如第一行,该文件系统由399476个1KB的block组成,则其大小为399476KB。为便于阅读,可以采用范例二的方式显示。
范例二:
root@study:~$ df -h
Filesystem Size Used Avail Use% Mounted on
tmpfs 391M 3.2M 387M 1% /run
/dev/sda1 59G 51G 5.4G 91% /
tmpfs 2.0G 8.0K 2.0G 1% /dev/shm
观察上面打印信息,同样以第一行为例,399476KB=391MB。以M为单位阅读起来就轻松多了!
范例三:
root@study:~$ df -h /etc
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 59G 51G 5.4G 91% /
上面命令将/etc所在的文件系统的可用容量打印出来了,这样,我们就可以知道该目录最多还有多少容量了!
范例四:
root@study:~$ df -ih
Filesystem Inodes IUsed IFree IUse% Mounted on
tmpfs 488K 1.1K 487K 1% /run
/dev/sda1 3.8M 1.2M 2.6M 32% /
tmpfs 488K 3 488K 1% /dev/shm
上面命令用于打印文件系统的inode数量列出。与范例一对比,可以清晰的发现,两个占比,91% > 32%,通常inode的数量剩余都比block还要多!
2.2 du
2.2.1 功能
评估文件系统的磁盘使用量(常用在推估目录所占容量)。与df不一样的是,这个指令其实会直接到文件系统内去搜寻所有的文件数据,所以执行会花一小段时间。
2.2.2 范例
范例一:
root@study:~$ du
4 ./nihao
40 .
不加任何选项时,仅会显示目录容量(不含文件),输出的数值数据为1K大小的容量单位。若要打印出文件容量,则可以使用范例二。
范例二:
root@study:~$ du -a
12 ./a.out
12 ./test
4 ./main.cpp
4 ./nihao
4 ./test.c
40 .
范例三:
root@study:~$ du -sm /*
该命令用于检查根目录下每个目录所占用的容量。-m表示以MBytes列出容量显示;-s表示列出一级目录容量,不列出一级下的各级目录容量。
三、磁盘分区、格式化与挂载
更多相关概念介绍可参考磁盘分区、格式化与挂载
在虚拟机linux系统上找到有空闲扇区的磁盘或创建新的磁盘,以下是基于新创建的一块新的磁盘sdb进行操作。
3.1 分区
root@study:~# fdisk /dev/sdb
Command (m for help): p # 输出磁盘目前的状态
Disk /dev/sdb: 1 GiB, 1073741824 bytes, 2097152 sectors # 磁盘名,总容量与扇区数
Units: sectors of 1 * 512 = 512 bytes # 单一扇区大小512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xaf7a7832
Command (m for help): n # 添加新分区
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1):
First sector (2048-2097151, default 2048):
Last sector, +sectors or +size{K,M,G,T,P} (2048-2097151, default 2097151): +216M
Created a new partition 1 of type 'Linux' and of size 216 MiB.
Command (m for help): p # 输出磁盘目前的状态
Disk /dev/sdb: 1 GiB, 1073741824 bytes, 2097152 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xaf7a7832
Device Boot Start End Sectors Size Id Type
/dev/sdb1 2048 444415 442368 216M 83 Linux # 刚刚设置的新分区信息
Command (m for help): w # 将信息写入磁盘分区表,并退出fdisk
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
# 至此分区建立分区sdb1完成,大小为216M
3.2 格式化
在上一节创建的sdb1分区上建立文件系统,也就是格式化了!
root@study:~# mkfs.ext4 /dev/sdb1
mke2fs 1.42.13 (17-May-2015)
Creating filesystem with 221184 1k blocks and 55296 inodes
Filesystem UUID: f9b04af9-0e7b-4ddf-b66f-d14216e9d6c6
Superblock backups stored on blocks:
8193, 24577, 40961, 57345, 73729, 204801
Allocating group tables: done
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done
3.3 挂载
下面将将上节格式化的分区挂载到 /root/ext4 目录
root@study:~# blkid /dev/sdb1 # 查询/dev/sdb1的UUID
root@study:~# mkdir -p /root/ext4/ # 创建挂载点,最好是空白的,否则挂载之后原来的数据被隐藏了(不是覆盖)!
root@study:~# mount UUID="xxx-xxx-xxx-xxx-xxx" /root/ext4/ # 挂载
root@study:~# df -h /dev/sdb1 # 查看分区容量
Filesystem Size Used Avail Use% Mounted on
/dev/sdb1 206M 1.8M 189M 1% /root/ext4
root@study:~# umount /dev/sdb1 # 卸载
# 或
root@study:~# umount /root/ext4 # 卸载
四、文件及目录的相关操作
4.1 basename 与 dirname
root@study:~$ basename /etc/systemd/network
network
root@study:~$ dirname /etc/systemd/network
/etc/systemd
4.2 tail 与 head
4.2.1 head
Usage: head [OPTION]... [FILE]...
Print the first 10 lines of each FILE to standard output.
# 默认打印前10行到标准输出
# 控制输出行数,常见用法如下
root@study:~$ head [-n number] 文件
root@study:~$ head -n 20 /etc/man_db.conf
# 显示/etc/man_db.conf文件的前20行
root@study:~$ head -n -100 /etc/man_db.conf
# 不打印/etc/man_db.conf后面100行,只打印前面几行
4.2.2 tail
Usage: tail [OPTION]... [FILE]...
Print the last 10 lines of each FILE to standard output.
# 默认打印后面10行
# ------------------------------------------
# 若控制输出行数,常见用法如下
root@study:~$ tail [-n number] 文件
root@study:~$ tail -n 20 /etc/man_db.conf
# 显示/etc/man_db.conf文件的后20行
root@study:~$ tail -n -100 /etc/man_db.conf
# 不打印/etc/man_db.conf前面100行,只打印100行后数据
# ------------------------------------------
# 另外,tail常用于持续检测日志文件的内容,用法如下
root@study:~$ tail -f 文件
# 新加入的文件数据都会显示到屏幕上
4.3 more 与 less
执行命令过程中等待用户输入操作,如翻页、查找字符等…
4.3.1 more
一页一页的显示文件内容。
常见输入操作方法如下:
输入 | 含义 |
---|---|
空格键 | 向下翻页 |
/字符串 | 查找字符串 |
:f | 显示文件名及当前显示最后一行的行号 |
q | 退出more程序 |
4.3.2 less
与more类似,但是比more更好的是,它可以往前翻页。man指令就是调用less来显示文件内容的!
常见输入操作方法如下:
输入 | 含义 |
---|---|
空格键 | 向下翻页 |
pagedown | 向下翻页 |
pageup | 向上翻页 |
g | 前进到文件的第一行 |
G | 前进到文件的最后一行 |
/字符串 | 向下查找字符串 |
?字符串 | 向上查找字符串 |
n | 沿用开始的方向(与/跟?有关)继续搜索 |
N | 按开始的相反方向继续搜索 |
q | 退出less程序 |