0%

linux磁盘与文件管理相关的一些命令使用

概念介绍

  1. tmpfs 是一种虚拟内存文件系统,是基于内存的文件系统。
  2. devtmpfs 的功用是在 Linux 核心 启动早期建立一个初步的 /dev,令一般启动程序不用等待 udev,缩短 GNU/Linux 的开机时间。
  3. 至于磁盘的档名部分,基本上,所有实体磁盘的档名都已经被模拟成 /dev/sd[a-p] 的格式,第一颗磁盘档名为 /dev/sda。 而分割槽的档名若以第一颗磁盘为例,则为 /dev/sda[1-128] 。除了实体磁盘之外, 虚拟机的磁盘通常为 /dev/vd[a-p] 的格式。 若有使用到軟体磁盘阵列的话,那还有 /dev/md[0-128] 的磁盘档名。
    1. /dev/sd[a-p][1-128]:为实体磁盘的磁盘档名;
    2. /dev/vd[a-d][1-128]:为虚拟磁盘的磁盘档名
  4. 至于 Linux 的正统档案系统则为 Ext2 (Linux second extended file system, ext2fs)这一个 每个 filesystem 都有独立的 inode / block / superblock 等资讯,这个档案系统要能够连结到目录树才能被我们使用。 将档案系统与目录树结合的动作我们称为 ‘挂载’

df 列出档案系统的整体磁盘使用量

1
2
3
4
5
6
7
8
9
df [-ahikHTm] [目录或档名]
选项与参数:
-a :列出所有的档案系统,包括系统特有的 /proc 等档案系统;
-k :以 KBytes 的容量显示各档案系统;
-m :以 MBytes 的容量显示各档案系统;
-h :以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示;
-H :以 M=1000K 取代 M=1024K 的进位方式;
-T :连同该 partition 的 filesystem 名称 (例如 xfs) 也列出;
-i :不用磁盘容量,而以 inode 的数量来显示

范例一:将系统内所有的 filesystem 列出来!
df
image

Filesystem:代表该档案系统是在哪个 partition ,所以列出装置名称;
1k-blocks:说明底下的数字单位是 1KB 呦!可利用 -h 或 -m 来改变容量;
Used:顾名思义,就是使用掉的磁盘空间!
Available:也就是剩下的磁盘空间大小;
Use%:就是磁盘的使用率啦!如果使用率高达 90% 以上时, 最好需要注意一下了,免得容量不足造成系统问题喔!(例如最容易被灌爆的 /var/spool/mail 这个放置邮件的磁盘)
Mounted on:就是磁盘挂载的目录所在啦!(挂载点啦!)

在显示的结果中你需要特别留意的是那个根目录的剩余容量! 因为我们所有的资料都是由根目录衍生出来的,因此当根目录的剩余容量剩下 0 时,那你的 Linux 可能就问题很大了。

du 评估档案系统的磁盘使用量(常用在推估目录所占容量)

范例一:列出目前目录下的所有档案容量
du

范例二:同范例一,但是将档案的容量也列出来
du -a

范例三:检查根目录底下每个目录所占用的容量 这个是最常用的功能
du -sm /*

参考: 鸟哥的私房菜

ln

使用 ln 如果不加任何参数的话,那么就是 Hard Link

image

透过档案系统的 inode 连结来产生新档名,而不是产生新档案
多个档名对应到同一个 inode 号码呢?有的!那就是 hard link 的由来
hard link 只是在某个目录下新增一笔档名连结到某 inode 号码的关连记录而已。

  • 创建硬链接
1
2
3
4
5
6
7
8
[root@VM_71_28_centos test]# ll -i lntest 
455414 -rw-r--r-- 1 root root 0 May 23 17:40 lntest
[root@VM_71_28_centos test]# ln lntest lntest1 <= 创建一个硬的链接
[root@VM_71_28_centos test]#
[root@VM_71_28_centos test]#
[root@VM_71_28_centos test]# ll -i lntest lntest1
455414 -rw-r--r-- 2 root root 0 May 23 17:40 lntest
455414 -rw-r--r-- 2 root root 0 May 23 17:40 lntest1
  • 修改与删除文件
1
2
3
4
5
6
7
8
9
10
11
12
[root@VM_71_28_centos test]# clear
[root@VM_71_28_centos test]# echo 'hello'>lntest1 <= 修改其中一个文件
[root@VM_71_28_centos test]#
[root@VM_71_28_centos test]# cat lntest1
hello
[root@VM_71_28_centos test]# cat lntest <= 两个文件都改变了
hello

[root@VM_71_28_centos test]# rm -f lntest1 <= 删除其中一个文件
[root@VM_71_28_centos test]#
[root@VM_71_28_centos test]# cat lntest <= 另外一个文件还是存在的
hello
  • 修改源文件
1
2
3
4
5
6
7
[root@VM_71_28_centos test]# ln lntest lntest1
[root@VM_71_28_centos test]# cat lntest1
hello
[root@VM_71_28_centos test]# rm -f lntest
[root@VM_71_28_centos test]# cat lntest1
hello

  • hard link 是有限制的:
    • 不能跨 Filesystem;
    • 不能 link 目录,可能导致搜索循环问题,比如 .. 上一层目录。所以不建议这样做

Symbolic link 就是在建立一个 独立的档案 ,而这个档案会让资料的读取指向他 link 的那个档案的档名

源文件删除后,会导致打开不了文件了。

  • 新建软链接
1
2
3
4
5
6
7
8
9
[root@VM_71_28_centos test]# touch slinktest
[root@VM_71_28_centos test]#
[root@VM_71_28_centos test]# ln -s slinktest slinktest1
[root@VM_71_28_centos test]#
[root@VM_71_28_centos test]# ll -i slinktest slinktest1
455415 -rw-r--r-- 1 root root 0 May 23 17:54 slinktest <= inode是不同的
455416 lrwxrwxrwx 1 root root 9 May 23 17:54 slinktest1 -> slinktest
<= 这里长度为9 是因为文件名长度为9

lsblk 列出系统上的所有磁盘列表

lsblk 可以看成‘ list block device ’的缩写,就是列出所有储存装置的意思
image

1
2
3
4
5
6
7
8
9
10
[root@testserver1 /]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 3.7T 0 disk
├─sda1 8:1 0 1M 0 part
├─sda2 8:2 0 1G 0 part /boot
├─sda3 8:3 0 1.2T 0 part /data3
├─sda4 8:4 0 1.2T 0 part /data1
├─sda5 8:5 0 1.2T 0 part /data2
├─sda6 8:6 0 50G 0 part /
└─sda7 8:7 0 7.8G 0 part [SWAP]
  • NAME:就是装置的档名啰!会省略 /dev 等前导目录!
  • MAJ:MIN:其实核心认识的装置都是透过这两个代码来熟悉的!分别是主要:次要装置代码!
  • RM:是否为可卸载装置 (removable device),如光碟、USB 磁盘等等
  • SIZE:当然就是容量啰!
  • RO:是否为只读装置的意思
  • TYPE:是磁盘 (disk)、分割槽 (partition) 还是只读内存 (rom) 等输出
  • MOUTPOINT:就是前一章谈到的挂载点!

blkidblkid 列出装置的 UUID 等参数

1
2
3
4
5
6
7
8
9
[root@testserver1 /]# blkid
/dev/sda6: UUID="8eab240e-e26a-4244-b8ff-2cede227ab63" TYPE="ext4" PARTUUID="c1901736-b73f-4a75-981e-e4de2df426f0"
/dev/sda2: UUID="0995c7e3-e9e3-4e9e-b42a-2753564d9a3d" TYPE="ext4" PARTUUID="05f4a19f-b882-406e-90be-eb4c893c3380"
/dev/sda7: UUID="487a2745-138c-45e5-8c89-027b788c57de" TYPE="swap" PARTUUID="105ffff6-594d-4629-b147-79af76695c71"
/dev/sda1: PARTUUID="2b902b92-5daa-4616-ade4-b10285d962ff"
/dev/sda3: UUID="e64c20bc-d94a-4323-8a7a-f4db8fc82c3c" TYPE="ext4" PARTUUID="e4bebdda-35b1-4c08-b469-49cdc24d684a"
/dev/sda4: UUID="2cf235f9-5c19-4c7f-bdc9-a157bea72723" TYPE="ext4" PARTUUID="7b3507a2-8799-4b8f-9ad4-e1e0154cf6fd"
/dev/sda5: UUID="bfc8724d-8f66-4c7a-af12-a9ad8a7b2222" TYPE="ext4" PARTUUID="cefe2474-bebb-4d1e-a77b-1d9beb76463d"

parted 列出磁盘的分割表类型与分割资讯

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@testserver1 /]# parted /dev/sda print
Model: ATA TOSHIBA HDWE140 (scsi)
Disk /dev/sda: 4001GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags: pmbr_boot

Number Start End Size File system Name Flags
1 1049kB 2097kB 1049kB bios_grub
2 2097kB 1076MB 1074MB ext4
3 1076MB 1314GB 1313GB ext4
4 1314GB 2626GB 1313GB ext4
5 2626GB 3939GB 1313GB ext4
6 3939GB 3992GB 53.7GB ext4
7 3992GB 4001GB 8390MB linux-swap(v1)