练习 22:文件系统:移动数据,tar,dd

原文:Exercise 22. Filesystems: moving data around: tar, dd

译者:飞龙

协议:CC BY-NC-SA 4.0

自豪地采用谷歌翻译

现在是时候自己看看了,Linux 中的所有东西只是一个文件。

这个练习是一个很大的练习,但是看看你学到了什么。完成之后,在man中查看所有故意不解释的程序参数,,并试图自己解释每个命令的作用。

现在你将学习如何玩转数据。

这样做

 1: tar -czvf root.tgz /opt/root/
 2: tar -tzvf root.tgz
 3: cd /tmp
 4: tar -zxvf ~/root.tgz
 5: ls -al
 6: dd_if=$(mount | grep /tmp | cut -d ' ' -f 1) && echo $dd_if
 7: sudo dd if=$dd_if of=~/tmp.img bs=10M
 8: cd && ls -alh
 9: sudo losetup /dev/loop1 ~/tmp.img && sudo mount /dev/loop1 /mnt/
10: ls -al /mnt
11: sudo umount /mnt && sudo losetup -d /dev/loop1
12: sudo umount $dd_if && sudo mkfs.ext3 $dd_if
13: new_uuid=$(sudo tune2fs -l $dd_if | awk '/UUID/{print $3}') && echo $new_uuid
14: grep '/tmp' /etc/fstab
15: sed "s/^UUID=.*\/tmp\s\+ext3\s\+defaults\s\+[0-9]\s\+[0-9]\s\?/UUID=$new_uuid \/tmp ext3 defaults 0 2/" /etc/fstab

现在使用sudo tune2fs -lsudo blkid检查输出。如果/etc/fstab中的 UUID 替换看起来正常,执行实际的替换。

输入y并按下<ENTER>

你会看到什么

解释

  1. 在你的主目录中创建归档或/opt/root/。归档文件的扩展名是.tgz,因为这个归档实际上由两部分组成,就像是俄罗斯套娃。第一部分由字母t指定,是一个大文件,其中所有归档文件由程序tar合并。第二部分由字母gz指定 ,意味着tar调用gzip程序来压缩它。

  2. 测试这个归档。

  3. 将目录更改为/tmp

  4. 解压你的归档。

  5. 打印目录内容。

  6. 提取挂载在/tmp上的分区的名称,将其存储在dd_if变量中,如果提取成功,打印出dd_if值。if代表输入文件。

  7. 将整个分区复制到你的主目录中的tmp.img。dd 使用超级用户调用,因为你正在访问代表你的分区的文件/dev/sda8,该分区对普通用户不可访问。

  8. 将目录更改为你的主目录并打印出其内容。

  9. 告诉 Linux 将tmp.img文件用作(一种)物理分区并挂载它。

  10. 打印出tmp.img的内容。你可以看到它真的是/tmp的精确副本 。

  11. 解除挂载tmp.img,并告诉 Linux 停止将其看做分区。

  12. 解除挂载/tmp并在那里创建新的文件系统,删除该过程中的所有东西。

  13. 提取你的新/tmp文件系统的UUID ,将其存储在new_uuid中,并打印出来。

  14. /etc/fstab中打印描述旧的/tmp分区的一行。

  15. 向你展示,修改后的/etc/fstab如何工作。通过使用正则表达式来完成,这个表达式用作掩码,定义了这一行:

    完成这本书后,我会给你一个链接,让你学习如何创建这样的正则表达式。

  16. 使用新的 UUID 实际替换/tmp旧的 UUID。

  17. 挂载/etc/fstab中描述的所有文件系统,并列出新/tmp的内容

  18. 解除挂载新的/tmp并从tmp.img恢复旧/tmp

  19. 获取旧/tmp的 UUID,它实际上与创建新文件系统之前相同,因为tmp.img是旧的/ tmp的完美副本。

  20. /etc/fstab中用旧的 UUID 替换新的 UUID 。

  21. /etc/fstab挂载所有文件系统。如果此命令不会导致错误,你可能一切正常。恭喜。

  22. 从你的主目录中删除tmp.img

附加题

  • 尝试详细解释每个命令的作用。拿出一张纸,把它全部写出来。在man中查找在所有不能很好理解的命令和参数。

  • 这个有些过早了,但为什么你能作为user1来发出删除命令,从你的主目录中删除tmp.img,考虑到tmp.img由 root 创建?

Last updated