本文主要是介绍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命令构建出一个大文件,用于交换分区的制作。
[root@localhost 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
[root@localhost udev]# cd /tmp/
[root@localhost tmp]# ll -h swapblock
-rw-r--r--. 1 root root 512M Aug 30 23:27swapblock
我们可以看到,一个512M的大文件就产生了,我们可以直接使用mkswap将其制作成交换分区
[root@localhost tmp]# mkswap swapblock
Setting up swapspace version 1, size =524284 KiB
no label,UUID=7dae028a-97cf-46f3-97ed-3d2e008bd189
[root@localhost tmp]# free -m | grep -i swap
Swap: 2047 0 2047
[root@localhost tmp]# swapon swapblock
swapon: /tmp/swapblock: insecurepermissions 0644, 0600 suggested.
[root@localhost tmp]# free -m | grep -i swap
Swap: 2559 0 2559
[root@localhost tmp]#
可以看到,swap从2G涨到了2.5G。(swapon时的警告是关于权限的,出于安全考虑,建议将其权限改为600)
2、 备份mbr
可以将磁盘的mbr进行备份
如:
[root@localhost 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破坏掉,再进行还原。(此步骤危险,稍有不慎可能导致数据丢失。不要在有生产数据的机器上实验。数据无价,请勿玩火)
[root@localhost 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
重启计算机之前我们先看看目前的分区情况:
[root@localhost 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空空如也,什么也没有了
[root@localhost ~]# 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
[root@localhost ~]#
利用备份还原mbr
[root@localhost ~]# 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号码,发现不通同,所以虽然他们的内容一模一样,但是他们是两个文件,存于系统中的不同地方
[root@localhost opt]# cp /etc/fstab/tmp/fstab
[root@localhost opt]# ls -i /etc/fstab/tmp/fstab
16777289 /etc/fstab 16777282 /tmp/fstab
[root@localhost opt]#
为/tmp/fstab创建硬链接。
[root@localhost tmp]# ln fstab fstab.ln
[root@localhost tmp]# ls -i fstab fstab.ln
16777282 fstab 16777282 fstab.ln
[root@localhost tmp]#
可以看到,这两个文件虽然看上去是两个,但是inode号码相同,实际上是一个文件。
如何确定本文件是否有硬链接呢?
[root@localhost tmp]# ll fstab
-rw-r--r--. 2 root root 497 Aug 25 02:43fstab
如上,权限后面的数字就是链接数,2个代表有两个文件名指向这个inode。
每删除一个文件,链接数就减去1,为0的时候,inode被回收,文件也就真的被删除了。
到这里顺便提一句:目录创建时,会创建两个目录项:.和..
.表示本目录,是本目录的硬链接
..表示上一级目录,是上一级目录的硬链接
所以所有目录的链接数都是2+子目录数。
软链接
软链接可以理解为快捷方式。快捷方式删除时,原文件访问不受影响。但是原文件删除,快捷方式(软链接)则失效。
创建软链接:
ln -s 源文件 目标文件
如:
[root@localhost ~]# ln -s /etc/fstab/tmp/fstab_soft
[root@localhost ~]# ll /tmp/fstab_soft
lrwxrwxrwx. 1 root root 10 Sep 9 09:43 /tmp/fstab_soft -> /etc/fstab
[root@localhost ~]#
软链接的权限都是777,但是真正的权限还得看它指向文件的权限。
系统中的文件多如牛毛,我们如何去查找我们需要的文件呢。比如,我看到某个文件有几个硬链接,我想把它彻底删掉,相关的文件又怎么找出来呢?下一节为大家介绍。
关注本公众号获取每日更新
这篇关于Linux入门真经-034文件系统知识与常用命令补充的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!