zoukankan      html  css  js  c++  java
  • 鸟哥的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 时,就得要一个一个的依序还原才行!
  • 相关阅读:
    How to install VXDIAG Honda, Toyota and JLR SDD software
    16% off MPPS V16 ECU tuning tool for EDC15 EDC16 EDC17
    Cummins INSITE locked and ask for verification code
    How to use BMW Multi Tool 7.3 to replace lost key for BMW X1
    Bleed Brake Master Cylinder with Intelligent Tester IT2
    Porsche Piwis Tester II “No VCI has been detected”,how to do?
    Creader VIII VS. Creader VII+
    How to solve GM MDI cannot complete the installation
    汽车OBD2诊断程序开发 (原文转载,思路很清晰!)
    汽车节温器单片机开发思路
  • 原文地址:https://www.cnblogs.com/jonathanyue/p/9301317.html
Copyright © 2011-2022 走看看