Linux入门真经-034文件系统知识与常用命令补充

Linux入门真经-034文件系统知识与常用命令补充

1、df与du

df:显示已挂载磁盘设备的使用情况

常用选项:

-h:大小数值用更易于人理解的方式显示

-i:显示inode用量而非默认磁盘空间使用信息

 

du:显示目录空间的占用情况

常用选项:

-s查看目录内文件总共占了多大空间

-h使用合适的单位使得数据大小更易读

 

2、dd命令

 

dd可以从标准输入或文件中读取数据,在输出到指定的文件。乍一看有点像复制的作用,不过dd的功能不止于此,更多的时候dd可以做到块设备级别的备份。

 

提到dd命令,此处再介绍两个linux中比较奇特的设备文件:

/dev/null: 数据黑洞;任何数据传递到该设备下都会悄无声息地被吞噬。以后我们介绍脚本编程的时候会用到,我们可以将一些不需要的输出重定向到null设备中。

         /dev/zero:吐零机;存放了无数个0,常用于破坏分区。

dd用法:

dd if=/PATH/FROM/SRC of=/PATH/TO/DEST [bs=# count=#]

     bs=#:block size, 复制单元大小;

     count=#:复制多少个bs;

下面举一些例子来示范dd的妙用。

 

1、  在磁盘无法继续分区的情况下,扩展交换分区

我们可以用dd命令构建出一个大文件,用于交换分区的制作。

 

[[email protected] udev]# dd if=/dev/zero of=/tmp/swapblock bs=1M count=512

512+0 records in

512+0 records out

536870912 bytes (537 MB) copied, 21.3359 s,25.2 MB/s

[[email protected] udev]# cd /tmp/

[[email protected] tmp]# ll -h swapblock

-rw-r--r--. 1 root root 512M Aug 30 23:27swapblock

 

我们可以看到,一个512M的大文件就产生了,我们可以直接使用mkswap将其制作成交换分区

 

[[email protected] tmp]# mkswap swapblock

Setting up swapspace version 1, size =524284 KiB

no label,UUID=7dae028a-97cf-46f3-97ed-3d2e008bd189

[[email protected] tmp]# free -m | grep -i swap

Swap:          2047           0        2047

[[email protected] tmp]# swapon swapblock

swapon: /tmp/swapblock: insecurepermissions 0644, 0600 suggested.

[[email protected] tmp]# free -m | grep -i swap

Swap:          2559           0        2559

[[email protected] tmp]#

 

可以看到,swap从2G涨到了2.5G。(swapon时的警告是关于权限的,出于安全考虑,建议将其权限改为600)

 

2、  备份mbr

可以将磁盘的mbr进行备份

如:

 

[[email protected] tmp]# dd if=/dev/sdc of=/tmp/mbr.bak bs=512 count=1

1+0 records in

1+0 records out

512 bytes (512 B) copied, 0.000504673 s,1.0 MB/s

 

接下来我把sdc的mbr破坏掉,再进行还原。(此步骤危险,稍有不慎可能导致数据丢失。不要在有生产数据的机器上实验。数据无价,请勿玩火)

 

[[email protected] tmp]# dd if=/dev/zero of=/dev/sdc bs=1 count=512

512+0 records in

512+0 records out

512 bytes (512 B) copied, 0.00315667 s, 162kB/s

 

重启计算机之前我们先看看目前的分区情况:

 

[[email protected] tmp]# lsblk

...省略输出...

sdc                       8:32   0  20G  0 disk

├─sdc1                    8:33   0    5G  0part

│└─vgpool1-lvol0-real  253:3    0   25G  0lvm 

│   ├─vgpool1-lvol0      253:2   0   25G  0 lvm /mnt/lvmpool0_mount

│   └─vgpool1-snap_lv0   253:5   0   25G  0 lvm /mnt/snap_point

└─sdc2                    8:34   0    5G  0part

  └─vgpool1-snap_lv0-cow253:4    0    1G  0lvm 

    └─vgpool1-snap_lv0   253:5   0   25G  0 lvm /mnt/snap_point

 

重启虚拟机你会发现,sdc空空如也,什么也没有了

 

[[email protected] ~]# lsblk

NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT

sda               8:0    0  20G  0 disk

├─sda1            8:1    0   1G  0 part /boot

└─sda2            8:2    0  19G  0 part

  ├─centos-root253:0    0   17G  0lvm  /

  └─centos-swap253:1    0    2G  0lvm  [SWAP]

sdb               8:16  0   20G  0 disk

sdc               8:32   0  20G  0 disk

sr0              11:0    1 906M  0 rom 

[[email protected] ~]#

 

利用备份还原mbr

 

[[email protected] ~]# dd if=/tmp/mbr.bak of=/dev/sdc bs=512 count=1

1+0 records in

1+0 records out

512 bytes (512 B) copied, 0.032297 s, 15.9kB/s

 

重启虚拟机,再lsblk看看,你会发现恢复成功。

 

3、  整体磁盘拷贝

如:

dd if=/dev/sda of=/dev/sdb

你会得到两块内容一模一样的硬盘。


 

3、软硬链接

 

硬链接

一般来说,一个文件名有一个inode号,inode与文件一一对应。不过,在linux中是允许多个文件名同时指向同一个inode的。所以我们可以通过不同的文件名操纵同一个实际上的文件。而且,这种情况下,删除其中一个文件名,仍然可以通过另一个文件进行访问。

 

比如说张无忌又叫张公子又叫张教主,突然有一天他不叫张教主了,但是你还是能通过张无忌这个名字找到他,虽然称呼没有了,反正还有别的称呼指向这个人。

 

可以通过ln命令来创建硬链接

ln 源文件 目标文件

 

举个例子:

我们将/etc/fstab拷贝一份,然后用ls -i去查看他们的inode号码,发现不通同,所以虽然他们的内容一模一样,但是他们是两个文件,存于系统中的不同地方

 

[[email protected] opt]# cp /etc/fstab/tmp/fstab

[[email protected] opt]# ls -i /etc/fstab/tmp/fstab

16777289 /etc/fstab  16777282 /tmp/fstab

[[email protected] opt]#

 

为/tmp/fstab创建硬链接。

 

[[email protected] tmp]# ln fstab fstab.ln

[[email protected] tmp]# ls -i fstab fstab.ln

16777282 fstab  16777282 fstab.ln

[[email protected] tmp]#

 

可以看到,这两个文件虽然看上去是两个,但是inode号码相同,实际上是一个文件。

如何确定本文件是否有硬链接呢?

 

[[email protected] tmp]# ll fstab

-rw-r--r--. 2 root root 497 Aug 25 02:43fstab

 

如上,权限后面的数字就是链接数,2个代表有两个文件名指向这个inode。

每删除一个文件,链接数就减去1,为0的时候,inode被回收,文件也就真的被删除了。

 

到这里顺便提一句:目录创建时,会创建两个目录项:.和..

.表示本目录,是本目录的硬链接

..表示上一级目录,是上一级目录的硬链接

所以所有目录的链接数都是2+子目录数。

 

软链接

软链接可以理解为快捷方式。快捷方式删除时,原文件访问不受影响。但是原文件删除,快捷方式(软链接)则失效。

创建软链接:

ln -s 源文件 目标文件

如:

 

[[email protected] ~]# ln -s /etc/fstab/tmp/fstab_soft

[[email protected] ~]# ll /tmp/fstab_soft

lrwxrwxrwx. 1 root root 10 Sep  9 09:43 /tmp/fstab_soft -> /etc/fstab

[[email protected] ~]#

 

软链接的权限都是777,但是真正的权限还得看它指向文件的权限。

 

 系统中的文件多如牛毛,我们如何去查找我们需要的文件呢。比如,我看到某个文件有几个硬链接,我想把它彻底删掉,相关的文件又怎么找出来呢?下一节为大家介绍。

 

关注本公众号获取每日更新

Linux入门真经-034文件系统知识与常用命令补充