• 鸟哥的linux私房菜学习笔记2


    P198

    spuer block(P202合并):记录此文件系统的整体信息(inode/block的大小,总量、使用量、剩余量),以及文件系统的格式与相关信息(文件系统挂载时间、最近一次写入数据时间、最近一次检验磁盘fsck时间、一个validbit数值:0系统已挂载,1未挂载)

    inode:记录文件的权限与属性,一个文件占用一个inode,同时记录此文件的数据所在的block号码

    block:记录文件的内容,一个文件可占用多个block

    P200

    block group的概念

    data block:  ext2文件系统支持的block大小有三种 1/2/4KB

    inodetable记录的内容:权限(rwx)、属性(owner/group)、文件大小 、ctime/atime/mtime、定义文件特性的flag(如SetUid)、该文件真正内容的指向(pointer)

    每个inode大小固定为128bytes

    每个文件占用一个inode  所以文件数量与inode数量有关

    读取文件时先找到inode,并分析inode所记录的权限是否与用户符合,符合才能开始实际读取block的内容

    间接,双间接,三间接:以block扩展作为号码记录

    P203

    一个文件系统仅有一个superblock,但每个block group内可以有superblock的内容作为第一个block group的备份

    flie system description:描述每个block group 的起始block号码,以及说明每个区段(superblock /bitmap/ inodemap /data block)分别介于哪一个block号码之间

    block bitmap:哪些block是空的

    inode bitmap:哪些inode是空的

    dump2fs: superblock与file system description的信息(每个block group的信息)

    P204

    目录在ext2文件系统如何记录数据:新建目录时,ext2分配一个inode与至少一个block给它,inode记录该目录的权限与属性,并记录分配到的那块block号码;block则记录这个目录下的文件名与该文件名占用的inode号码数据(inode本身不记录文件名,文件名记录是在目录的block中,因此文件的增/删/重命名与目录的w权限有关;那么因为文件名是记录在目录的block中,因此当我们要读取某个文件时,就务必经过它上面各级目录的inode与block,然后才能找到真正待读文件的inode号码以读取数据)

    文件在ext2中如何记录数据:新建一般文件是,ext2分配一个inode与相对于该文件大小的block数量给该文件

    P207

    数据存放区域:inode table/data block 

    中间数据(meta data):superblock/block bitmap/inode bitmap(每次增删改都可能影响这三部分数据)

    P208

    文件系统最顶层的目录的inode一般为2

    P210

    df -h human-readable -i inode(不用硬盘容量来显示)  读取的主要范围是superblock  特别留意根目录的剩余容量,因为所有数据都是由根目录衍生出来的。

    df -a  看到/proc的结果为0的原因: 是Linux系统所需要加载的系统数据,而且是挂载在虚拟内存中的,所以没有占用硬盘空间

    P212

    du:与df不同,会直接到文件系统去查找所有的文件数据 du -S 不包括子目录下的总计  -s列出总量,不列出每个各别的目录占用容量

    P213

    hardlink 在某个目录下新建一条文件名链接到某inode号码的关联记录(ls -l filename 第二列比原来多1  p170)  好处:将任何一个文件名删除,inode与block还是存在

    hardlink只是在某个目录下的block内多写入一个关联数据,不会增加inode也不会耗用block数量

    hard link的限制: 不能跨文件系统 不能连接到目录(因为复杂度高)

    symbolic link: 创建一个独立的文件,这个文件会让数据的读取指向它连接的那个文件的文件名。会占用掉inode与block

    ln不加参数是hard link ,加-s是symbolic link

    新建一个目录时,新的目录连接数为2,而上层目录的连接数会增加1(/tmp/testing   /tmp/testing/.   /tmp/testing/..)

    fdisk:调整分区表 -l输出后面接的设备所有的分区内容,若仅有fdisk -l 时,系统会把整个系统内能够找到的设备分区均列出来。(识别U盘可以用到)

    partprobe 强制让内核重新找一次分区表(当fdisk 输入w后系统提示重启才能生效,此时用partprobe避免重启)

    mkfs [-t 文件系统格式] 设备文件名 磁盘格式化

    mke2fs :Ext2/Ext3的公用程序 -b block大小(每个block大小)  -i block大小(多少容量给一个inode) -L 卷标 -c(检查磁盘错误)-j(不带-j是ext2,带-j是ext3)

    fsck:正常情况下使用此命令,可能损坏系统;被检查的分区要在卸载状态;当fsck检查文件系统后,有问题的数据会被放置到lost+found目录中。

    P226

    作为挂载点的目录理论上应当为空目录。如果非空,挂载后原先的内容会被隐藏,新分区被卸载后才会再次显示出来。

    mount通常不需要参数-t(指定欲挂载的文件系统类型):文件系统几乎都有superblock,linux可以通过分析superblock搭配linux自己的驱动程序去测试挂载,如果成功挂载了,就立刻使用该类型的文件系统挂载起来。参考的文件:/etc/filesystems系统指定的测试挂载文件系统类型  /proc/filesystems linux系统已经加载的文件系统类型

    如何知道linux有没有相关文件系统类型的驱动程序:/lib/modules/$(uname -r)/kernel/fs/   文件系统的驱动程序所在目录

    /dev/cdrom是连接文件,光驱一旦挂载后就无法退出光盘,除非将它卸载

    重新挂载根目录:mount -o remount, rw, auto / (在单用户模式下,根目录通常被系统挂载为只读,可用此命令)

    在不支持symboliclink的程序中,利用mount  --bind来将某个目录挂载到另一个目录去(并不是挂载文件系统,而是额外挂载某个目录)

    范例七:将 /home 这个目录暂时挂载到 /mnt/home 底下:
    [root@www ~]# mkdir /mnt/home
    [root@www ~]# mount --bind /home /mnt/home
    [root@www ~]# ls -lid /home/ /mnt/home
    2 drwxr-xr-x 6 root root 4096 Sep 29 02:21 /home/
    2 drwxr-xr-x 6 root root 4096 Sep 29 02:21 /mnt/home
    
    [root@www ~]# mount -l
    /home on /mnt/home type none (rw,bind)
    

    umount:卸除的方式,可以跟设备文件名或挂载点

    [root@www ~]# cd /media/cdrom

    [root@www cdrom]# umount /media/cdrom

    umount: /media/cdrom: device is busy

    umount: /media/cdrom: device is busy

    由于你目前正在 /media/cdrom/ 的目录内,也就是说其实『你正在使用该文件系统』的意思! 所以自然无法卸除这个装置!那该如何是好?就『离开该文件系统的挂载点』即可。

    使用 Label name 进行挂载的方法:

    除了磁盘的装置文件名之外,其实我们可以使用文件系统的标头(label)名称来挂载喔! 举例来说,我们刚刚卸除的 /dev/hdc6 标头名称是『vbird_logical』,你也可以使用dumpe2fs 这个命令来查询文件系统的lable!然后就这样做即可:

    范例九:找出 /dev/hdc6 的 label name,并用 label 挂载到 /mnt/hdc6 
    [root@www ~]# dumpe2fs -h /dev/hdc6
    Filesystem volume name:   vbird_logical
    .....底下省略.....
    # 找到啦!标头名称为 vbird_logical 啰!
    
    [root@www ~]# mount -L "vbird_logical" /mnt/hdc6
    

    这种挂载的方法有一个很大的好处:『系统不必知道该文件系统所在的接口与磁盘文件名!

    P231

    在 Linux 底下所有的装置都以文件来代表吧!但是那个文件如何代表该装置呢?很简单!就是透过文件的 major 与 minor 数值来替代的~所以,那个 major 与 minor 数值是有特殊意义的,不是随意配置的喔!举例来说,在鸟哥的这个测试机当中,那个用到的磁盘 /dev/hdc 的相关装置代码如下:

    [root@www ~]# ll /dev/hdc*
    brw-r----- 1 root disk 22, 0 Oct 24 15:55 /dev/hdc
    brw-r----- 1 root disk 22, 1 Oct 20 08:47 /dev/hdc1
    brw-r----- 1 root disk 22, 2 Oct 20 08:47 /dev/hdc2
    brw-r----- 1 root disk 22, 3 Oct 20 08:47 /dev/hdc3
    brw-r----- 1 root disk 22, 4 Oct 24 16:02 /dev/hdc4
    brw-r----- 1 root disk 22, 5 Oct 20 16:46 /dev/hdc5
    brw-r----- 1 root disk 22, 6 Oct 25 01:33 /dev/hdc6
    

    上表当中 22 为主要装置代码 (Major) 而 0~6 则为次要装置代码 (Minor)。我们的 Linux 核心认识的装置数据就是透过这两个数值来决定的!举例来说,常见的硬盘文件名 /dev/hda 与 /dev/sda 装置代码如下所示:

    磁盘文件名 Major Minor
    /dev/hda 3 0~63
    /dev/hdb 3 64~127
    /dev/sda 8 0-15
    /dev/sdb 8 16-31
    在某些服务被关到特定目录下时(chroot),就需要这样做了。此时这个 mknod 就得要知道如何操作才行!
    [root@www ~]# mknod 装置文件名 [bcp] [Major] [Minor]
    选项与参数:
    装置种类:
       b  :配置装置名称成为一个周边储存设备文件,例如硬盘等;
       c  :配置装置名称成为一个周边输入设备文件,例如鼠标/键盘等;
       p  :配置装置名称成为一个 FIFO 文件;
    Major :主要装置代码;
    Minor :次要装置代码;
    
    范例一:由上述的介绍我们知道 /dev/hdc10 装置代码 22, 10,请创建并查阅此装置
    [root@www ~]# mknod /dev/hdc10 b 22 10
    [root@www ~]# ll /dev/hdc10
    brw-r--r-- 1 root root 22, 10 Oct 26 23:57 /dev/hdc10
    # 上面那个 22 与 10 是有意义的,不要随意配置啊!
    
    范例二:创建一个 FIFO 文件,档名为 /tmp/testpipe
    [root@www ~]# mknod /tmp/testpipe p
    [root@www ~]# ll /tmp/testpipe
    prw-r--r-- 1 root root 0 Oct 27 00:00 /tmp/testpipe
    # 注意啊!这个文件可不是一般文件,不可以随便就放在这里!
    # 测试完毕之后请删除这个文件吧!看一下这个文件的类型!是 p 喔!^_^
    

    e2lable:修改Label

    关于用lable与设备文件名的比较:

    • 优点:不论磁盘文件名怎么变,不论你将硬盘插在哪个 IDE / SATA 接口,由于系统是透过 Label ,所以,磁盘插在哪个接口将不会有影响;

    • 缺点:如果插了两颗硬盘,刚好两颗硬盘的 Label 有重复的,那就惨了~因为系统可能会无法判断哪个磁盘分区槽才是正确的!
    [root@www ~]# e2label 装置名称  新的Label名称
    
    范例一:将 /dev/hdc6 的标头改成 my_test 并观察是否修改成功?
    [root@www ~]# dumpe2fs -h /dev/hdc6
    Filesystem volume name:   vbird_logical  <==原本的标头名称
    .....底下省略.....
    
    [root@www ~]# e2label /dev/hdc6 "my_test"
    [root@www ~]# dumpe2fs -h /dev/hdc6
    Filesystem volume name:   my_test        <==改过来啦!
    .....底下省略.....
    P234

    开机就挂载:/etc/fstab 用mount时,所有的参数写入这个文件

    /etc/fstab 是启动时的配置文件,不过,实际 filesystem 的挂载是记录到 /etc/mtab 与 /proc/mounts 这两个文件当中的。每次我们在更动 filesystem 的挂载时,也会同时更动这两个文件喔!但是,万一发生您在 /etc/fstab 输入的数据错误,导致无法顺利启动成功,而进入单人维护模式当中,那时候的 / 可是 read only 的状态,当然您就无法修改 /etc/fstab ,也无法升级 /etc/mtab 啰~那怎么办?没关系,可以利用底下这一招:

    [root@www ~]# mount -n -o remount,rw /
    


    P237

    挂载光盘/DVD映象文件

    下载了 Linux 或者是其他所需光盘/DVD的映象文件后,难道一定需要刻录成为光盘才能够使用该文件里面的数据吗?当然不是啦!我们可以透过 loop 装置来挂载的!

    那要如何挂载呢?鸟哥将整个 CentOS 5.2 的 DVD 映象档捉到测试机上面,然后利用这个文件来挂载给大家参考看看啰!

    [root@www ~]# ll -h /root/centos5.2_x86_64.iso
    -rw-r--r-- 1 root root 4.3G Oct 27 17:34 /root/centos5.2_x86_64.iso
    # 看到上面的结果吧!这个文件就是映象档,文件非常的大吧!
    
    [root@www ~]# mkdir /mnt/centos_dvd
    [root@www ~]# mount -o loop /root/centos5.2_x86_64.iso /mnt/centos_dvd
    [root@www ~]# df
    Filesystem           1K-blocks      Used Available Use% Mounted on
    /root/centos5.2_x86_64.iso
                           4493152   4493152         0 100% /mnt/centos_dvd
    # 就是这个项目! .iso 映象文件内的所有数据可以在 /mnt/centos_dvd 看到!
    
    [root@www ~]# ll /mnt/centos_dvd
    total 584
    drwxr-xr-x 2 root root 522240 Jun 24 00:57 CentOS <==瞧!就是DVD的内容啊!
    -rw-r--r-- 8 root root    212 Nov 21  2007 EULA
    -rw-r--r-- 8 root root  18009 Nov 21  2007 GPL
    drwxr-xr-x 4 root root   2048 Jun 24 00:57 images
    .....底下省略.....
    
    [root@www ~]# umount /mnt/centos_dvd/
    # 测试完成!记得将数据给他卸除!
    
    -o options 主要用来描述设备或档案的挂接方式。常用的参数有:
    loop:用来把一个文件当成硬盘分区挂接上系统
    ro:采用只读方式挂接设备
    rw:采用读写方式挂接设备
    iocharset:指定访问文件系统所用字符集


    非常方便吧!如此一来我们不需要将这个文件刻录成为光盘或者是 DVD 就能够读取内部的数据了!换句话说,你也可以在这个文件内『动手脚』去修改文件的!这也是为什么很多映象档提供后,还得要提供验证码 (MD5)给使用者确认该映象档没有问题!

    使用物理分区构建swap

    创建 swap 分割槽的方式也是非常的简单的!透过底下几个步骤就搞定啰:

    1. 分割:先使用 fdisk 在你的磁盘中分割出一个分割槽给系统作为 swap 。由于 Linux 的 fdisk 默认会将分割槽的 ID 配置为 Linux 的文件系统,所以你可能还得要配置一下 system ID 就是了。
    2. 格式化:利用创建 swap 格式的『mkswap 装置文件名』就能够格式化该分割槽成为 swap 格式啰
    3. 使用:最后将该 swap 装置启动,方法为:『swapon 装置文件名』。
    4. 观察:最终透过 free 这个命令来观察一下内存的用量吧!

      1. <p>1.先进行分割的行为啰!</p>[root@www ~]# <span style="color:#FF0000;">fdisk</span> /dev/hdc  
      2. Command (m for help): n  
      3. First cylinder (2303-5005, default 2303):  <==这里按[enter]  
      4. Using default value 2303  
      5. Last cylinder or +size or +sizeM or +sizeK (2303-5005, default 5005): +256M  
      6.   
      7. Command (m for help): p  
      8.   
      9.    Device Boot      Start         End      Blocks   Id  System  
      10. .....中间省略.....  
      11. /dev/hdc6            2053        2302     2008093+  83  Linux  
      12. /dev/hdc7            2303        2334      257008+  83  Linux <==新增的项目  
      13.   
      14. Command (m for help):<span style="color:#FF0000;"> t             <==修改系统 ID</span>  
      15. Partition number (1-7): 7           <==从上结果看到的,七号partition  
      16. Hex code (type L to list codes): <span style="color:#FF0000;">82 <==改成 swap 的 ID</span>  
      17. Changed system type of partition 7 to 82 (Linux swap / Solaris)  
      18.   
      19. Command (m for help): p  
      20.   
      21.    Device Boot      Start         End      Blocks   Id  System  
      22. .....中间省略.....  
      23. /dev/hdc6            2053        2302     2008093+  83  Linux  
      24. /dev/hdc7            2303        2334      257008+  82  Linux swap / Solaris  
      25.   
      26. Command (m for help): w  
      27. # 此时就将 partition table 升级了!  
      28.   
      29. [root@www ~]# <span style="color:#FF0000;">partprobe</span>  
      30. # 这个玩意儿很重要的啦!不要忘记让核心升级 partition table 喔!  
      31.   
      32.   
      33.     2. 开始建置 swap 格式  
      34.   
      35. [root@www ~]#<span style="color:#FF0000;"> mkswap /dev/hdc7</span>  
      36. Setting up swapspace version 1, size = 263172 kB  <==非常快速!  
      37.   
      38.   
      39.     3. 开始观察与加载看看吧!  
      40.   
      41. [root@www ~]# free  
      42.              total       used       free     shared    buffers     cached  
      43. Mem:        742664     684592      58072          0      43820     497144  
      44. -/+ buffers/cache:     143628     599036  
      45. Swap:      1020088         96    1019992  
      46. # 我有 742664K 的物理内存,使用 684592K 剩余 58072K ,使用掉的内存有  
      47. # 43820K / 497144K 用在缓冲/缓存的用途中。  
      48. # 至于 swap 已经存在了 1020088K 啰!这样会看了吧?!  
      49.   
      50. [root@www ~]# <span style="color:#FF0000;">swapon /dev/hdc7</span>  
      51. [root@www ~]# free  
      52.              total       used       free     shared    buffers     cached  
      53. Mem:        742664     684712      57952          0      43872     497180  
      54. -/+ buffers/cache:     143660     599004  
      55. Swap:      1277088         96    1276992  <==有添加啰!看到否?  
      56.   
      57. [root@www ~]# <span style="color:#FF0000;">swapon -s</span>  
      58. Filename                 Type            Size    Used    Priority  
      59. /dev/hdc5                partition       1020088 96      -1  
      60. /dev/hdc7                partition       257000  0       -2  
      61. <span style="color:#FF0000;">上面列出目前使用的 swap 装置有哪些的意思!</span>  

    P240

    使用文件构建swap

    如果是在实体分割槽无法支持的环境下,此时前一小节提到的 loop 装置建置方法就派的上用场啦!与实体分割槽不一样的只是利用 dd 去建置一个大文件而已。多说无益,我们就再透过文件建置的方法创建一个128 MB 的内存置换空间吧!


    • 1. 使用 dd 这个命令来新增一个 128MB 的文件在 /tmp 底下:
    [root@www ~]# dd if=/dev/zero of=/tmp/swap bs=1M count=128
    128+0 records in
    128+0 records out
    134217728 bytes (134 MB) copied, 1.7066 seconds, 78.6 MB/s
    
    [root@www ~]# ll -h /tmp/swap
    -rw-r--r-- 1 root root 128M Oct 28 15:33 /tmp/swap
    
    这样一个 128MB 的文件就建置妥当。若忘记上述的各项参数的意义,请回前一小节查阅一下啰!


    • 2. 使用 mkswap 将 /tmp/swap 这个文件格式化为 swap 的文件格式:
    [root@www ~]# mkswap /tmp/swap
    Setting up swapspace version 1, size = 134213 kB
    # 这个命令下达时请『特别小心』,因为下错字节控制,将可能使您的文件系统挂掉!
    


    • 3. 使用 swapon 来将 /tmp/swap 启动啰!
    [root@www ~]# free
                 total       used       free     shared    buffers     cached
    Mem:        742664     450860     291804          0      45584     261284
    -/+ buffers/cache:     143992     598672
    Swap:      1277088         96    1276992
    
    [root@www ~]# swapon /tmp/swap
    [root@www ~]# free
                 total       used       free     shared    buffers     cached
    Mem:        742664     450860     291804          0      45604     261284
    -/+ buffers/cache:     143972     598692
    Swap:      1408152         96    1408056
    
    [root@www ~]# swapon -s
    Filename                 Type            Size    Used    Priority
    /dev/hdc5                partition       1020088 96      -1
    /dev/hdc7                partition       257000  0       -2
    /tmp/swap                file            131064  0       -3
    


    • 4. 使用 swapoff 关掉 swap file
    [root@www ~]# swapoff /tmp/swap
    [root@www ~]# swapoff /dev/hdc7
    [root@www ~]# free
                 total       used       free     shared    buffers     cached
    Mem:        742664     450860     291804          0      45660     261284
    -/+ buffers/cache:     143916     598748
    Swap:      1020088         96    1019992  <==回复成最原始的样子了!
    

    P243

    当你使用 ls -l 去查询某个目录下的数据时,第一行都会出现一个『total』的字样!那是啥东西?其实那就是该目录下的所有数据所耗用的实际 block 数量 * block 大小的值。我们可以透过 ll -s 来观察看看上述的意义:

    [root@www ~]# ll -s
    total 104
     8 -rw------- 1 root root  1474 Sep  4 18:27 anaconda-ks.cfg
     8 -rw-r--r-- 2 root root   255 Jan  6  2007 crontab
     4 lrwxrwxrwx 1 root root    12 Oct 22 13:58 crontab2 -> /etc/crontab
    48 -rw-r--r-- 1 root root 42304 Sep  4 18:26 install.log
    12 -rw-r--r-- 1 root root  5661 Sep  4 18:25 install.log.syslog
     4 -rw-r--r-- 1 root root     0 Sep 27 00:25 test1
     8 drwxr-xr-x 2 root root  4096 Sep 27 00:25 test2
     4 -rw-rw-r-- 1 root root     0 Sep 27 00:36 test3
     8 drwxrwxr-x 2 root root  4096 Sep 27 00:36 test4
    
    从上面的特殊字体部分,那就是每个文件所使用掉 block 的容量!举例来说,那个 crontab 虽然仅有 255bytes ,不过他却占用了两个 block (每个 block 为 4K)


    P244

    parted: 虽然你可以使用 fdisk 很快速的将你的分割槽切割妥当,不过 fdisk 却无法支持到高于 2TB 以上的分割槽!此时就得需要 parted 来处理了。

    P245

    • 磁盘的使用必需要经过:分割、格式化与挂载,分别惯用的命令为:fdisk, mkfs, mount三个命令
    • 启动自动挂载可参考/etc/fstab之配置,配置完毕务必使用 mount -a 测试语法正确否;

    P252

    [root@www ~]# gzip [-cdtv#] 档名
    [root@www ~]# zcat 档名.gz
    选项与参数:
    -c  :将压缩的数据输出到萤幕上,可透过数据流重导向来处理;
    -d  :解压缩的参数;
    -t  :可以用来检验一个压缩档的一致性~看看文件有无错误;
    -v  :可以显示出原文件/压缩文件的压缩比等资讯;
    -#  :压缩等级,-1 最快,但是压缩比最差、-9 最慢,但是压缩比最好!默认是 -6
    
    范例一:将 /etc/man.config 复制到 /tmp ,并且以 gzip 压缩
    [root@www ~]# cd /tmp 
    [root@www tmp]# cp /etc/man.config .
    [root@www tmp]# gzip -v man.config
    man.config:      56.1% -- replaced with man.config.gz
    [root@www tmp]# ll /etc/man.config /tmp/man*
    -rw-r--r-- 1 root root 4617 Jan  6  2007 /etc/man.config
    -rw-r--r-- 1 root root 2684 Nov 10 17:24 /tmp/man.config.back.Z
    -rw-r--r-- 1 root root 2057 Nov 10 17:14 /tmp/man.config.gz  <==gzip压缩比较佳
    
    
    范例三:将范例一的文件解压缩
    [root@www tmp]# gzip -d man.config.gz
    # 不要使用 gunzip 这个命令,不好背!使用 gzip -d 来进行解压缩!
    # 与 gzip 相反, gzip -d 会将原本的 .gz 删除,产生原本的 man.config 文件。
    
    

    P254

    tar:  将多个文件或目录包成一个大文件的命令功能。前一小节谈到的命令大多仅能针对单一文件来进行压缩。

    • cvf    create  verbose  filename 压 缩:tar -jcv -f filename.tar.bz2 要被压缩的文件或目录名称 
    • tvf     list   查 询:tar -jtv -f filename.tar.bz2                                            
    • xvf    extract  f解压缩:tar -jxv -f filename.tar.bz2 -C 欲解压缩的目录          

    tar 的选项与参数非常的多!我们只讲几个常用的选项,更多选项您可以自行 man tar 查询罗!

    [root@www ~]# tar [-j|-z] [cv] [-f 创建的档名] filename... <==打包与压缩
    [root@www ~]# tar [-j|-z] [tv] [-f 创建的档名]             <==察看档名
    [root@www ~]# tar [-j|-z] [xv] [-f 创建的档名] [-C 目录]   <==解压缩
    选项与参数:
    -c  :创建打包文件,可搭配 -v 来察看过程中被打包的档名(filename)
    -t  :察看打包文件的内容含有哪些档名,重点在察看『档名』就是了;
    -x  :解打包或解压缩的功能,可以搭配 -C (大写) 在特定目录解开
          特别留意的是, -c, -t, -x 不可同时出现在一串命令列中。
    -j  :透过 bzip2 的支持进行压缩/解压缩:此时档名最好为 *.tar.bz2
    -z  :透过 gzip  的支持进行压缩/解压缩:此时档名最好为 *.tar.gz
    -v  :在压缩/解压缩的过程中,将正在处理的档名显示出来!
    -f filename:-f 后面要立刻接要被处理的档名!建议 -f 单独写一个选项罗!
    -C 目录    :这个选项用在解压缩,若要在特定目录解压缩,可以使用这个选项。
    
    其他后续练习会使用到的选项介绍:
    -p  :保留备份数据的原本权限与属性,常用於备份(-c)重要的配置档
    -P  :保留绝对路径,亦即允许备份数据中含有根目录存在之意;
    --exclude=FILE:在压缩的过程中,不要将 FILE 打包! 
    

    P259

    dump: 备份

    restore:恢复

    P267

    mkisofs:新建镜像文件

    cdrecord: 光盘刻录工具

    dd:

    [root@www ~]# dd if="input_file" of="output_file" bs="block_size" 
    > count="number"
    选项与参数:
    if   :就是 input file 罗~也可以是装置喔!
    of   :就是 output file 喔~也可以是装置;
    bs   :规划的一个 block 的大小,若未指定则默认是 512 bytes(一个 sector 的大小)
    count:多少个 bs 的意思。
    你可以说, tar 可以用来备份关键数据,而 dd 则可以用来备份整颗 partition 或整颗 disk (包括了cp和tar不能复制的boot sector 的区块),很不错啊~
    P270

    cpio  :cpio 可以备份任何东西,包括装置设备文件。不过 cpio 有个大问题,那就是 cpio 不会主动的去找文件来备份!啊!那怎办?所以罗,一般来说, cpio 得要配合类似find等可以找到档名的命令来告知 cpio 该被备份的数据在哪里啊!

    • 备份:find / | cpio -ocvB > /dev/st0
    • 还原:cpio -idvc < /dev/st0

    P273

    • 情境模拟题二:你想要逐时备份 /srv/myproject 这个目录内的数据,又担心每次备份的资讯太多,因此想要使用 dump 的方式来逐一备份数据到 /backups 这个目录下。该如何处理?

      • 目标:了解到 dump 以及各个不同 level 的作用;
      • 前提:被备份的数据为单一 partition ,亦即本例中的 /srv/myproject
      • 需求:/srv/myproject 为单一 filesystem ,且在 /etc/fstab 内此挂载点的 dump 栏位为 1

      实际处理的方法其实还挺简单的!我们可以这样做看看:

      1. 先替该目录制作一些数据,亦即复制一些东西过去吧!
        cp -a /etc /boot /srv/myproject

      2. 开始进行 dump ,记得,一开始是使用 level 0 的完整备份喔!
        mkdir /backups
        dump -0u -j -f /backups/myproject.dump /srv/myproject

        上面多了个 -j 的选项,目的是为了要进行压缩,减少备份的数据量。

      3. 尝试将 /srv/myproject 这个文件系统加大,将 /var/log/ 的数据复制进去吧!
        cp -a /var/log/ /srv/myproject
        此时原本的 /srv/myproject 已经被改变了!继续进行备份看看!

      4. 将 /srv/myproject 以 level 1 来进行备份:
        dump -1u -j -f /backups/myproject.dump.1 /srv/myproject    (-u将这次dump的时间记录到/etc/dumpdateS文件中,-j加入bzip2的支持,-f 后面接file)
        ls -l /backups

        你应该就会看到两个文件,其中第二个文件 (myproject.dump.1) 会小的多!这样就搞定罗备份数据!

    • 情境模拟三:假设过了一段时间后,你的 /srv/myproject 变的怪怪的,你想要将该 filesystem 以刚刚的备份数据还原,此时该如何处理呢?你可以这样做的:

      1. 先将 /srv/myproject 卸载,并且将该 partition 重新格式化!
        umount /dev/hdc6
        mkfs -t ext3 /dev/hdc6


      2. 重新挂载原本的 partition ,此时该目录内容应该是空的!
        mount -a
        你可以自行使用 df 以及 ls -l /srv/myproject 查阅一下该目录的内容,是空的啦!

      3. 将完整备份的 level 0 的文件 /backups/myproject.dump 还原回来:
        cd /srv/myproject
        restore -r -f /backups/myproject.dump

        此时该目录的内容为第一次备份的状态!还需要进行后续的处理才行!

      4. 将后续的 level 1 的备份也还原回来:
        cd /srv/myproject
        restore -r -f /backups/myproject.dump.1

        此时才是恢复到最后一次备份的阶段!如果还有 level 2, level 3 时,就得要一个一个的依序还原才行!
  • 相关阅读:
    T3java核心API基础类
    java字符编码
    Servlet 1
    T2java面向对象
    T1java语言基础
    Mac OS mysql数据库安装与初始化
    java多线程中注入Spring对象问题
    T4java核心API集合类
    The first day Teddy
    Spring第二节 注入依赖
  • 原文地址:https://www.cnblogs.com/jonathanyue/p/9301317.html
Copyright © 2020-2023  润新知