首页 > 代码库 > 9. 文件系统——文件的压缩、解压缩、归档及底层复制命令(gzip bzip2 xz tar dd)

9. 文件系统——文件的压缩、解压缩、归档及底层复制命令(gzip bzip2 xz tar dd)

一、压缩和解压缩文件

先来看一个例子,现在要将如下几个字符串存储到硬盘上:

abcdefabcdefmnabcmndef

现在可以为这几个字符串设置编号,abc编号为1def编号为2mn的编号为3,于是上述字符串可以存为如下形式:

abcdef12mn132

这个过程就是文件压缩的过程,而解压缩的过程,就是将按照编号存储的字符串还原成完整的字符串。故压缩就是将重复的内容使用符号加以替代。不同的压缩方法会采用不同的压缩算法,例如上述字符串可以将abc作为编号1,也可以将abcdef作为编号1,因此针对不同的压缩方法,就会有不同的压缩工具,下面来逐一介绍Linux上常用的压缩工具。

 

1.compress uncompress

这是Linux上早期采用的压缩(compress)和解压缩工具(uncompress),使用compress压缩的文件,其形式为 FileName.Z。这种压缩工具现在已经很少使用了。

 

2. zip

该压缩方式在LinuxWindow是通用的,它采用了跨操作系统的机制,但压缩比例并不大,压缩能力一般。除了         压缩的功能外,该工具还可以实现归档。本文将在最后详解此命令。

 

3.gizp/bzip2/xz

这是Linux操作系统中常用的三个压缩工具,这三者的压缩比例呈递增趋势。比如一个文件原本的大小为600MB,使用gzip压缩,可能会有80MB,使用bzip2压缩可能会有72MB,而使用xz压缩,最后可能只有60MB

A.gzip

使用gzip压缩的文件,其形式为:FileName.gz

 

[root@localhost tutor]# cp /var/log/messages ./

# 复制文件/var/log/messages 到当前目录下

[root@localhost tutor]# ls -lh

total 4.0M
-rw-r--r--. 1 root root   93 Jul 12 03:41 memory1.sh
-rw-r--r--. 1 root root   82 Jul 12 02:45 memory.sh
-rw-------. 1 root root 3.9M Jul13 10:01 messages
# 未压缩前的messages大小为3.9M


[root@localhost tutor]# gzip messages

# 使用gzip压缩messages


[root@localhost tutor]# ls -lh

total 392K
-rw-r--r--. 1 root root   93 Jul 12 03:41 memory1.sh
-rw-r--r--. 1 root root   82 Jul 12 02:45 memory.sh
-rw-------. 1 root root 237K Jul13 10:01 messages.gz
# 压缩后的messages只有237K了注意使用gzip压缩文件会删除原文件

 

解压缩使用的是gunzip命令

 

[root@localhost tutor]# gunzip messages

# 使用gunzip FileName可以解压缩用gzip压缩的文件


[root@localhost tutor]# ls -lh

total 4.0M
-rw-r--r--. 1 root root   93 Jul 12 03:41 memory1.sh
-rw-r--r--. 1 root root   82 Jul 12 02:45 memory.sh
-rw-------. 1 root root 3.9M Jul13 10:01 messages
# 文件messages又变成3.9MB了

注意:使用gunzip命令会删除压缩文件

 

事实上,直接使用压缩命令gzip配合特定的选项,也可以完成解压缩的任务,gunzip命令等同于gzip -d

 

针对gzip压缩的文件,如果不解压,直接查看其中的具体内容,可以使用zcat命令:



[root@localhost tutor]# zcat messages.gz

Jul 1309:55:20 localhost NetworkManager[1153]: <info>   address 192.168.56.102
Jul 1309:55:20 localhost NetworkManager[1153]: <info>   prefix 24 (255.255.255.0)
Jul 1309:55:20 localhost dhclient[2131]: bound to 192.168.56.102 -- renewal in 574seconds.

B.bzip2

使用bzip2压缩的文件其形式为FileName.bz2

该命令的使用方式和gzip一样

 

[root@localhost tutor]# bzip2 messages

[root@localhost tutor]# ls -lh

total 308K
-rw-r--r--. 1 root root   93 Jul 12 03:41 memory1.sh
-rw-r--r--. 1 root root   82 Jul 12 02:45 memory.sh
-rw-------. 1 root root 154K Jul13 10:01 messages.bz2
# 此时messages的大小只有154KB了相较于gzip压缩后的237KB要小得多证明
# bzip的压缩比要大于gzip同样的bzip2压缩后也会删除原文件。

 

使用bunzip2命令可以解压缩采用bzip2压缩的文件

 

[root@localhost tutor]# bunzip2 messages.bz2

[root@localhost tutor]# ls -lh

total 4.0M
-rw-r--r--. 1 root root   93 Jul 12 03:41 memory1.sh
-rw-r--r--. 1 root root   82 Jul 12 02:45 memory.sh
-rw-------. 1 root root 3.9M Jul13 10:01 messages
# 使用bunzip2解压缩后会删除压缩文件。


 

gunzip命令一样bzip2 -d命令就等同于bunzip2

针对bzip2压缩的文件如果不解压直接查看其中的具体内容可以使用bzcat命令

 

[root@localhost tutor]# bzcat messages.bz2

Jul 13 09:55:20 localhostNetworkManager[1153]: <info>  address 192.168.56.102
Jul 13 09:55:20 localhostNetworkManager[1153]: <info>  prefix 24 (255.255.255.0)
Jul 13 09:55:20 localhostdhclient[2131]: bound to 192.168.56.102 -- renewal in 574 seconds.

C.xz

使用xz压缩的文件,其形式为:FileName.zx需要注意的是,在RedHat5上可能没有自带xz工具,RedHat6上才内置了该工具。


 

[root@localhost tutor]# xz messages

[root@localhost tutor]# ls -lh

total 296K
-rw-r--r--. 1root root   93 Jul 12 03:41 memory1.sh
-rw-r--r--. 1root root   82 Jul 12 02:45 memory.sh
-rw-------. 1root root 142K Jul 13 10:01 messages.xz
# 可以看到使用xz压缩后的文件体积较前两种工具更小了它的压缩比例是三者中最大的。

 

使用unxz命令可以解压缩采用xz压缩的文件

 

[root@localhost tutor]# unxz messages.xz

[root@localhost tutor]# ls -lh

total 4.0M
-rw-r--r--. 1root root   93 Jul 12 03:41 memory1.sh
-rw-r--r--. 1root root   82 Jul 12 02:45 memory.sh
-rw-------. 1root root 3.9M Jul 13 10:01 messages
# unxz命令解压缩后也会删除压缩文件

 

unxz命令也等同于xz -d 命令

[root@localhost tutor]# xz messages


[root@localhost tutor]# ls -hl messages.xz

-rw-------. 1root root 142K Jul 13 10:01 messages.xz

[root@localhost tutor]# xz -d messages.xz

# xz -d 命令和unxz用法一样


[root@localhost tutor]# ls -hl messages

-rw-------. 1root root 3.9M Jul 13 10:01 messages

 

针对xz压缩的文件,如果不解压,直接查看其中的具体内容,可以使用xzcat命令:


[root@localhost tutor]# xzcat messages.xz

Jul 1309:55:20 localhost NetworkManager[1153]: <info>   address 192.168.56.102
Jul 1309:55:20 localhost NetworkManager[1153]: <info>   prefix 24 (255.255.255.0)
Jul 1309:55:20 localhost dhclient[2131]: bound to 192.168.56.102 -- renewal in 574seconds.

xz命令还能不解压直接grep文件。

[root@localhost tutor]# xz

xz       xzcat   xzcmp    xzdec    xzdiff  xzegrep  xzfgrep  xzgrep  xzless   xzmore

[root@localhost tutor]# cp /etc/passwd ./


[root@localhost tutor]# xz passwd

# passwd文件使用xz进行压缩


[root@localhost tutor]# ll

-rw-r--r--. 1root root    199 Jul 11 20:31 odd_even.sh
-rw-r--r--. 1root root    868 Jul 13 14:05 passwd.xz

[root@localhost tutor]# xzgrep ‘root‘ passwd.xz

root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
# 可以看到不需要解压直接就能grep到

 

在默认情况下xz的压缩比例最大,但事实上,每种工具可以指定其压缩比。压缩比可选择的范围为1-9,各工具默认的压缩比是6,另外压缩比越小,对cpu的资源消耗就越少,反之亦然。使用-# 可以为各工具指定具体的压缩比。


 

[root@localhost tutor]# gzip messages


[root@localhost tutor]# ls -hl messages.gz

-rw-------. 1root root 237K Jul 13 10:01 messages.gz
# 默认压缩比为其压缩结果为237KB。


[root@localhost tutor]# gunzip messages.gz


[root@localhost tutor]# gzip -9 messages

# 强制指定压缩比为9


[root@localhost tutor]# ls -hl messages.gz

-rw-------. 1root root 232K Jul 13 10:01 messages.gz
# 可以看到压缩结果较默认压缩比缩小了

 

如果希望压缩结束后保留原文件,bzip2命令可以使用-k选项,而gzip不支持想应该功能。如果一定要使用gzip命令,并保留原文件,可以采用-c命令,然后进行输出重定向的方式:


[root@localhost tutor]# bzip2 -k messages

# bzip2 使用-k选项以保留原文件


[root@localhost tutor]# ls -hl

-rw-r--r--. 1root root   93 Jul 12 03:41 memory1.sh
-rw-r--r--. 1root root   82 Jul 12 02:45 memory.sh
-rw-------. 1root root 3.9M Jul 13 10:01 messages
-rw-------. 1root root 154K Jul 13 10:01 messages.bz2

 

[root@localhost tutor]# rm messages

rm: removeregular file `messages‘? y

[root@localhost tutor]# bunzip2 -k messages.bz2


[root@localhosttutor]# ls -hl

-rw-r--r--. 1root root   93 Jul 12 03:41 memory1.sh
-rw-r--r--. 1root root   82 Jul 12 02:45 memory.sh
-rw-------. 1root root 3.9M Jul 13 10:01 messages
-rw-------. 1root root 154K Jul 13 10:01 messages.bz2
# bunzip2命令加上-k选项解压文件同样也可以保留压缩文件


[root@localhost tutor]# gzip -c messages   

 t=&ìrK;d\|j‘üvü’§gán   Ln)é’%–&pü-Aá·ün‰K–Rò¨Dq·”
         §3ó,°:-oên)üTó
# 如果不采用输出重定向的方式,gzip-c会将压缩结果输出到屏幕上,显示为乱码


[root@localhost tutor]# gzip -c messages > messages.gz


[root@localhost tutor]# ls -lh

-rw-r--r--. 1root root   93 Jul 12 03:41 memory1.sh
-rw-r--r--. 1root root   82 Jul 12 02:45 memory.sh
-rw-------. 1root root 3.9M Jul 13 10:01 messages
-rw-r--r--. 1root root 237K Jul 13 12:28 messages.gz
# 可以看到采用输出重定向的方式gzip也可以保留原文件

 

注意上述三个工具都不能对目录进行压缩

 

[root@localhost tutor]# ll

-rw-r--r--. 1root root     114 Jul 11 18:52 3sum.sh
drwxr-xr-x. 2root root    4096 Jul 13 08:32 abc
-rwxr-xr-x. 1root root     108 Jul 11 16:56blank_line.sh

 

[root@localhost tutor]# gzip abc

gzip: abc is adirectory -- ignored
# 报错了说明无法压缩目录


[root@localhost tutor]# gzip abc/*

# 采用此方法压缩的是目录中的单个文件


[root@localhost tutor]# ll

-rw-r--r--. 1root root     114 Jul 11 18:52 3sum.sh
drwxr-xr-x. 2root root    4096 Jul 13 12:33 abc
-rwxr-xr-x. 1root root     108 Jul 11 16:56blank_line.sh

[root@localhost tutor]# ll abc

-rw-r--r--. 1root root     26 Jul 13 08:32 a.txt.gz
-rw-r--r--. 1root root     26 Jul 13 08:32 b.txt.gz
-rw-------. 1root root 242616 Jul 13 12:32 messages.gz

[root@localhost tutor]# bzip2 abc

bzip2: Inputfile abc is a directory.

[root@localhost tutor]# xz abc

xz: abc: Is adirectory, skipping
# 另外两个工具同样无法压缩目录

  

二、文件的归档

将多个文件当做一个单独的文件来进行管理,即为归档。归档本身并不压缩文件。对文件归档后,文件的体积可能更大了,因为归档本身会产生一些元数据信息(也有可能会减小,因为文本文件中的空格会被压缩)。Linux上常用的归档命令有


A. tar

[root@localhost tutor]# man tar

SYNOPSIS

       tar[OPTION...] [FILE]...

DESCRIPTION

 GNU saves many files together into a singletape or disk archive, and can restore individual files from the archive.

EXAMPLES

       -c, --create create a new archive

# 创建归档

-x, --extract, --get extract files from an archive

# 展开归档-x-c是相反的操作不可能同时进行

-f, --file=ARCHIVE use archive file or device ARCHIVE

# 指定归档后的文件名称一般以.tar作为文件名的后缀

-t, --list list the contents of an archive

# 不用展开归档直接查看文件列表

-C, --directory=DIR change to directory DIR

# 指定展开路径

-j, --bzip2     filterthe archive through bzip2

# 调用bzip2命令归档并压缩/解压缩

-z, --gzip     filterthe archive through gzip

# 调用gzip命令归档并压缩/解压缩

-J, --xz      filterthe archive through xz

# 调用xz命令归档并压缩/解压缩

--xattrs   Save theuser/root xattrs to the archive

# 归档时保留文件系统的扩展属性默认情况下tar归档时不保留扩展属性

下面来演示一下tar命令的使用方法


[root@localhost tutor]# tar -cf abc.tar abc/*

# abc目录下的所有文件进行归档命名为abc.tar


[root@localhost tutor]# ll

-rw-r--r--. 1root root    114 Jul 11 18:52 3sum.sh
drwxr-xr-x. 2root root   4096 Jul 13 12:33 abc
-rw-r--r--. 1root root    256000 Jul 13 14:11 abc.tar
-rwxr-xr-x. 1root root    108 Jul 11 16:56blank_line.sh

 

[root@localhost tutor]# tar -tf abc.tar

# 不展开直接查看归档文件中的文件列表且显示了文件的路径
abc/a.txt.gz
abc/b.txt.gz
abc/messages.gz

 

[root@localhost tutor]# rm -rf abc

# 删除目录abc以便展开


[root@localhost tutor]# tar -xf abc.tar


[root@localhost tutor]# ll

-rw-r--r--. 1root root    114 Jul 11 18:52 3sum.sh
drwxr-xr-x. 2root root   4096 Jul 13 14:20 abc
-rw-r--r--. 1root root 256000 Jul 13 14:11 abc.tar
-rwxr-xr-x. 1root root    108 Jul 11 16:56blank_line.sh
# 展开后仍然保留了归档文件

 

[root@localhost tutor]# mkdir bcd


[root@localhost tutor]# tar -xf abc.tar -C bcd

# 使用-C指定展开的目录


[root@localhost tutor]# ll bcd

total 4
drwxr-xr-x. 2root root 4096 Jul 13 14:22 abc

 

上文中提到过,归档命令并不压缩文件,那么想要同时压缩并归档,就需要将tar命令和gzipbzip2xz等命令结合起来使用:


 

[root@localhost tutor]# tar -cf abc.tar abc


[root@localhost tutor]# gzip abc.tar


[root@localhost tutor]# ll

total 752
-rw-r--r--. 1root root    114 Jul 11 18:52 3sum.sh
drwxr-xr-x. 2root root   4096 Jul 13 14:20 abc
-rw-r--r--. 1root root 213016 Jul 13 14:27 abc.tar.gz

如果每次归档并压缩都要执行两次命令,未免过于麻烦了。使用-z选项,表示调用gzip,使用-j,表示调用bzip2;置于调用是为了解压缩还是压缩,要根据是使用了-c(归档并压缩),还是使用了-x(展开并解压缩)选项:

 

[root@localhost tutor]# rm abc.tar.gz

rm: removeregular file `abc.tar.gz‘? y


[root@localhost tutor]# ll

total 540
-rw-r--r--. 1root root    114 Jul 11 18:52 3sum.sh
drwxr-xr-x. 2root root   4096 Jul 13 14:20 abc
-rwxr-xr-x. 1root root    108 Jul 11 16:56blank_line.sh

 

[root@localhost tutor]# tar jcf abc.tar.bz2 abc/*

# 使用了bzip2进行归档并压缩


[root@localhost tutor]# ls -lh

total 752K
-rw-r--r--. 1root root  114 Jul 11 18:52 3sum.sh
drwxr-xr-x. 2root root 4.0K Jul 13 14:20 abc
-rw-r--r--. 1root root 210K Jul 13 14:35 abc.tar.bz2
-rwxr-xr-x. 1root root  108 Jul 11 16:56 blank_line.sh

 

[root@localhost tutor]# mkdir bcd


[root@localhost tutor]# tar jxf abc.tar.bz2 -C bcd

# 使用bzip展开并解压缩归档


[root@localhost tutor]# ls bcd/abc

a.txt.gz  b.txt.gz messages.gz

 

[root@localhost tutor]# cd bcd


[root@localhost bcd]# rm -rf abc


[root@localhost bcd]# cd ../


[root@localhost tutor]# tar xf abc.tar.bz2 -C bcd

# 事实上展开压缩的归档时不需要指定j或者z,因为tar可以自动判断该文件是否为压缩文件

# 并且tar能自动判断该文件是使用何种工具压缩的,然后使用相应的解压工具



[root@localhost tutor]# ls bcd/abc

a.txt.gz  b.txt.gz messages.gz

 

B. zip

上文中提到过zip命令既可以归档也可以压缩它的文件名后缀为.zip

 

[root@localhost tutor]# zip abc.zip abc/*

  adding: abc/a.txt.gz (deflated 19%)
  adding: abc/b.txt.gz (deflated 19%)
  adding: abc/messages.gz (deflated 12%)

[root@localhost tutor]# ll

-rw-r--r--. 1root root    114 Jul 11 18:52 3sum.sh
drwxr-xr-x. 2root root   4096 Jul 13 14:58 abc
-rw-r--r--. 1root root 256000 Jul 13 14:51 abc.tar
-rw-r--r--. 1root root 213103 Jul 13 15:06 abc.zip
drwxr-xr-x. 3root root   4096 Jul 13 14:39 bcd

 

解压缩可以使用unzip命令

[root@localhost tutor]# rm -rf abc


[root@localhost tutor]# unzip abc.zip

Archive:  abc.zip
  inflating: abc/a.txt.gz           
  inflating: abc/b.txt.gz           
  inflating: abc/messages.gz

[root@localhost tutor]# ll

total 1008
-rw-r--r--. 1root root    114 Jul 11 18:52 3sum.sh
drwxr-xr-x. 2root root   4096 Jul 13 15:07 abc
-rw-r--r--. 1root root 256000 Jul 13 14:51 abc.tar
-rw-r--r--. 1root root 213103 Jul 13 15:06 abc.zip

 

现在写一个脚本,能接受参数gzipbzip2xz,而后能将/etc/目录归档备份至/backup目录,并以参数指定的形式压缩存放;文件名称包含脚本执行时刻的时间;


[root@localhost tutor]# vim compress.sh

#!/bin/bash
#
 
Com=$1
 
if [ -z $Com];then
        Com=gzip
fi
 
[ -d /backup ]|| mkdir /backup
 
if [ $Com ==‘gzip‘ ]; then
        tar zcf /backup/etc-`date+%F-%H-%M-%S`.tar.gz /etc/*
        [ $? -eq 0 ] && echo"Backup etc finished.(gzip)."
elif [ $Com ==‘bzip2‘ ]; then
        tar jcf /backup/etc-`date+%F-%H-%M-%S`.tar.bz2 /etc/*
        [ $? -eq 0 ] && echo"Backup etc finished.(bzip2)."
elif [ $Com ==‘xz‘ ]; then
        tar Jcf /backup/etc-`date+%F-%H-%M-%S`.tar.xz /etc/*
        [ $? -eq 0 ] && echo"Backup etc finished.(xz)."
else
        echo "Usage: `basename $0`{[gzip|bzip2|xz]}"
        exit 6
fi

[root@localhost tutor]# mkdir /backup


[root@localhost tutor]# chmod +x compress.sh

tar: Removingleading `/‘ from member names
Backup etcfinished.(gzip).
# 不传递参数使用默认值


[root@localhost tutor]# ls /backup

etc-2014-07-13-16-18-23.tar.gz

[root@localhost tutor]# ./compress.sh xz

# 传递参数xz
tar: Removingleading `/‘ from member names
Backup etcfinished.(xz).

[root@localhost tutor]# ls -hl /backup

-rw-r--r--. 1root root 9.5M Jul 13 16:18 etc-2014-07-13-16-18-23.tar.gz
-rw-r--r--. 1root root 5.6M Jul 13 16:21 etc-2014-07-13-16-21-18.tar.xz

 

三、IDE/SATA的管理工具

使用hdparm命令,可以获取或设定IDE/SATA的参数,结合相应的选项,该命令可以用来检查硬件错误,查看硬件的物理参数等等。


[root@localhost tutor]# man hdparm

HDPARM(8)                         HDPARM(8)
NAME
       hdparm - get/set SATA/IDE deviceparameters

 

[root@localhost tutor]# hdparm /dev/sdb3

 # 使用hdparm命令查看设备/dev/sdb3的参数信息
/dev/sdb3:
 HDIO_DRIVE_CMD(identify) failed: Inappropriateioctl for device
 readonly     =  0 (off)
 readahead    = 256 (on)
 geometry     = 12401/255/63, sectors = 20980827, start = 63

 

四、底层复制命令dd

使用dd命令,可以进行文件复制;和cp命令不同的是,dd命令是用来复制最底层的01,其用法如下:


 

dd if=/path/to/src_file of=/path/to/dst_file bs=block_sizecount=#

 

[root@localhost tutor]# dd if=abc/a.txt of=bcd/hello

# 将abc/a.txt复制到bcd下命名为hello
0+1 records in
0+1 recordsout
16 bytes (16B) copied, 0.000369322 s, 43.3 kB/s

[root@localhost tutor]# cat abc/a.txt

abcabcabcabcabc

[root@localhost tutor]# cat bcd/hello

abcabcabcabcabc

 

该命令的特殊之处在于,它可以不复制完整的文件,使用bs来指定要复制的块大小,使用count来指定要复制的块数:


[root@localhost tutor]# dd if=abc/messages of=bcd/hello2bs=512 count=2

# 这里将abc/messages复制为bcd/hello块大小为512个字节复制两个块
2+0 records in
2+0 recordsout
1024 bytes(1.0 kB) copied, 0.00030198 s, 3.4 MB/s
# 可以看到了1KB的内容

 

[root@localhost tutor]# cat bcd/hello2

Jul  9 21:46:47 localhost kernel: imklog 5.8.10,log source = /proc/kmsg started.
Jul  9 21:46:47 localhost rsyslogd: [originsoftware="rsyslogd" swVersion="5.8.10"x-pid="1060"   x-info="http://www.rsyslog.com"]start
Jul  9 21:46:47 localhost kernel: Initializingcgroup subsys cpuset
Jul  9 21:46:47 localhost kernel: Initializingcgroup subsys cpu
Jul  9 21:46:47 localhost kernel: Linux version2.6.32-431.el6.x86_64 (mockbuild@c6b8.bsys.dev.centos.org) (gcc      version 4.4.7 20120313 (Red Hat 4.4.7-4)(GCC) ) #1 SMP Fri Nov 22 03:15:09 UTC 2013
Jul  9 21:46:47 localhost kernel: Command line: roroot=/dev/mapper/VolGroup-lv_root rd_NO_LUKS     .UTF-8rd_NO_MD rd_LVM_LV=VolGroup/lv_swap SYSFONT=latarcyrheb-sun16      crashkernel=autord_LVM_LV=VolGroup/lv_root KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
Jul  9 21:46:47 localhost kernel: KERNEL supportedcpus:
Jul  9 21:46:47 localhost kernel:  Intel GenuineIntel
Jul  9 21:46:47 localhost kernel:  AMD AuthenticAMD

 

事实上bscount还可以自行指定单位和大小,默认是字节:


[root@localhost tutor]# dd if=abc/messages of=bcd/hello2bs=2k count=2

2+0 records in
2+0 recordsout
4096 bytes(4.1 kB) copied, 0.0136845 s, 299 kB/s
# 这一次自行指定块大小为2KB,复制两块,所以最终复制了4KB的内容。

 

命令dd常用来进行数据的备份

[root@localhost tutor]# dd if=/dev/sda of=sda_mbr.backupbs=512 count=1

# 将/dev/sda备份到当前目录下
1+0 records in
1+0 recordsout
512 bytes (512B) copied, 0.000671857 s, 762 kB/s

[root@localhost tutor]# dd if=sda_mbr.backup of=/dev/sdabs=512 count=1

# 恢复/dev/sda

注意,使用dd命令进行恢复时,务必谨慎,否则容易造成磁盘上的数据丢失!

 

本地回环设备/dev/zero:是个泡泡机,也叫0生成器,它和dd命令结合使用,可以用0来填充磁盘:

[root@localhost tutor]# dd if=/dev/zero of=abcdef bs=2Mcount=100


[root@localhost tutor]# dd if=/dev/zero of=abcdef bs=2Mcount=100

100+0 recordsin
100+0 recordsout
209715200bytes (210 MB) copied, 1.30948 s, 160 MB/s

 

[root@localhost tutor]# ls -lh

-rw-r--r--. 1root root  114 Jul 11 18:52 3sum.sh
drwxr-xr-x. 2root root 4.0K Jul 13 15:29 abc
-rw-r--r--. 1root root 200M Jul 13 15:46 abcdef
# 可以看到这个用0生成器复制而成的文件精确大小为200MB
-rw-r--r--. 1root root 250K Jul 13 14:51 abc.tar

 

通过这种方式可以用来创建虚拟硬盘或者是创建交换分区

[root@localhost tutor]# mkswap abcdef

mkswap:abcdef: warning: don‘t erase bootbits sectors
        on whole disk. Use -f to force.
Setting upswapspace version 1, size = 204796 KiB
no label,UUID=b8c0ae96-483f-4bac-9b65-61940a87caaa
# 将abcdef设为swap


[root@localhost tutor]# free -m

             total       used       free    shared    buffers     cached
Mem:           996        777        218          0         97        372
-/+buffers/cache:        308        687
Swap:         2015          0       2015
# 当前的swap为2015MB


 

[root@localhost tutor]# swapon abcdef

# 启用swap abcdef

 

[root@localhost tutor]# free -m

             total       used      free     shared   buffers     cached
Mem:           996        777        218          0         97        372
-/+buffers/cache:        308        687
Swap:         2215          0       2215
# 可以看到swap多了200MB


 

在后文中会介绍更多有关dd命令的用法比如用该命令来清空一些文件等。



本文出自 “重剑无锋 大巧不工” 博客,请务必保留此出处http://wuyelan.blog.51cto.com/6118147/1536148