[转]cpio和tar的用法整理

 cpio - 存取归档包中的文件

  语法 Syntax

  cpio -o [ -aBLuvV ] [ -C bufsize ] [ -c | -H format ][ -K volumesize] [ [ -O file [, file ... ] ] [ -M message ] ] [ -Pifd,ofd ]

  cpio -i [ -6AbBcdfkmnqrsStTuvV ] [-C bufsize ] [ [ -I file [, file... ] ]

  [ -M message ] ] [ -Pifd,ofd ] [ pattern ... ]

  cpio -p [ -adlLmruvV ] [ -Pifd,ofd ] directory

  描述 (DEscriptION)

  cpio 可以从 cpio 或 tar 格式的归档包中存入和读取文件, 归档包是一种包含其他文件和有关信息的文件。 有关信息包括:文件名, 属主, 时标(timestamp), 和访问权限。 归档包可以是磁盘上的 其他文件, 也可以是磁带或管道。

  cpio 有三种操作模式:

  在copy-out模式中, cpio 把文件复制到归档包中。它从标准输入获得文件名列表 (一行一个), 把归档包写到标准输出。生成文件名列表的典型方法是使用find 命令; 你可能要在 find 后面用上 -depth选项, 减少因为进入没有访问权限的目录而引起的麻烦。

  在copy-in模式中, cpio 从归档包里读取文件, 或者列出归档包里的内容。它从标准输入读入归档包。任何不是选项的命令行参数被视为shell的通配符模式串 (globbing pattern); 在归档包中, 只有文件名匹配这些模式串的文件才能复制出来。 和 shell 中不一样, 文件名起始处的 '.' 可以匹配模式串起始处的通配符, 文件名中的 '/' 也可以匹配通配符。 如果没有给出模式串, 那么将读出所有文件。

  在copy-pass模式中, cpio把文件从一棵目录树复制到另一棵, 它结合了 copy-in 和 copy-out 的操作, 但不使用归档包。 cpio从标准输入读取欲复制的文件名列表; 目标目录作为非选项的命令行参数给出。

  cpio支持下列的归档格式: binary, old ASCII, new ASCII, crc, HPUX binary, HPUX old ASCII,old tar, 和 POSIX.1 tar。

  "binary"格式是过时格式, 因为它保存文件信息的方法无法应用在不同体系的机器间移植。"old ASCII" 格式可以跨平台使用, 但是不能用于超过 65536 个 i 节点的文件系统中。 "new ASCII" 格式可以跨平台使用, 也适用于任意大小的文件系统, 但不是所有版本的 cpio 都支持; 目前只有 GNU 和 System VR4 的 cpio 支持。"crc" 格式 类似于 "new ASCII" 格式, 同时对每个文件计算校验和。cpio 在创建归档包时算出校验和, 解开文件时进行校验。 "HPUX" 格式用于兼容 HP UNIX 的 cpio, 它用了独特的方法来保存设备文件。

  "tar" 格式用以兼容 tar 程序。它不能归档文件名超过 100 个字符的文件, 也不能归档特殊文件 (块设备或字符设备)。 "POSIX.1 tar" 格式不能归档文件名超过 255 个字符的文件(小于, 除非文件名的最右边有一个 "/")。

  缺省情况下, cpio 为了兼容老式的 cpio 程序, 创建 "binary" 格式的归档包。当展开归档包时, cpio 能够自动识别归档包的格式, 而且可以读取在其他字节顺序的机器上创建的归档包。

  cpio 的某些选项只能用在对应的操作模式上; 参见总览小节, 里面列出了什么选项可以用在什么模式上。

  选项 (OPTIONS)

  -0, --null 在copy-out 和 copy-pass 模式中, 认为输入的文件名以 null字符结尾,而不是换行符, 这样即使文件名中包含换行符, 也不影响归档。 GNU find 是生成 null 结尾文件名列表的方法之一。

  -a, --reset-access-time 读取完文件后重置文件的访问时间, 这样看上去就象没被访问过一样。

  -A, --append 追加到已经存在的归档包中。仅用于 copy-out模式。该归档包必须是用 -O 或 -F (--file) 选项指定的磁盘文件。

  -b, --swap 在 copy-in 模式中, 颠倒数据中字中的半字和半字中的字节顺序。 相当于 -sS 使用这个选项,可以在大端数和小端数机器之间转换 32 位整数。

  -B 把 I/O 块大小设置成 5120 字节,最初的块大小是 512 字节。

  --block-size=BLOCK-SIZE

  设置 I/O 块 大小 为 BLOCK-SIZE * 512 字节。

  -c 使用老式的跨平台 (ASCII) 归档格式。

  -C IO-SIZE, --io-size=IO-SIZE 设置 I/O 块大小为 IO-SIZE 字节。

  -d, --make-directories 在需要的地方创建开始目录。

  -E FILE, --pattern-file=FILE 在 copy-in 模式中, 从 FILE 中读取用于匹配文件名的模式串, FILE 中的内容就象 cpio 的非选项参数一样看待。

  -f, --nonmatching 只复制那些不匹配任何给定的模式串的文件。

  -F, --file=archive 使用归档文件名, 而不是标准输入或输出。 如果把其他机器上的磁带机作成归档文件使用, 文件名要用 "HOSTNAME:" 开始。 主机名前面可以加上用户名和一个 '@', 作为访问远程磁带机的用户 (如果你有这样的权限, 一般在用户的 ~/.rhosts 文件中会有这么一项)。

  --force-local 和 -F, -I, 或 -O, 一起用, 即使文件名中含有一个冒号,也把归档文件看作本地文件, 一般说来冒号指出一个远程主机名字。

  -H FORMAT, --format=FORMAT 使用归档格式 FORMAT。 有效的格式在下面列出, 大小写均可. "copy-in" 模式的缺省动作是自动检测归档格式, "copy-out" 的缺省格式是 "bin"。

  bin 老式的 binary 格式。

  odc 老式的 (POSIX.1) 跨平台格式。

  newc 新型 (SVR4) 跨平台格式, 支持大于 65536 i节点的文件系统。

  crc 新型 (SVR4) 跨平台格式, 并且计算校验和。

  tar 老式的 tar 格式。

  ustar POSIX.1 tar 格式, 也能识别 GNU tar 归档文件, 它们相似但不全相同。

  hpbin HP UNIX 上的 cpio 使用的老式的 binary 格式。(用独特的方法储存设备文件)

  hpodc HP UNIX 上的 cpio 使用的跨平台格式。 (用独特的方法储存设备文件)

  -i, --extract 进入 copy-in 模式。

  -I archive 使用归档文件名, 而不是标准输入。 如果把其他机器上的磁带机作成归档文件, 文件名要用 "HOSTNAME:" 开始。 主机名前面可以加上用户名和一个 '@', 作为 访问远程 磁带机的用户 (如果你有这样的权限, 一般在用户的 ~/.rhosts 文件中会有这么一项)。

  -k 无效操作; 只是用来兼容其他版本的 cpio。

  -l, --link 如果有可能, 连接文件, 而不是复制。

  -L, --dereference 解除符号连接的关联 (复制符号连接指向的 文件, 而不是连接本身)。

  -m, --preserve-modification-time 当创建文件时, 保留以前的文件修改时间。

  -M MESSAGE, --message=MESSAGE当备份介质(例如 磁带或软盘) 到达卷尾时, 显示一条消息, 提醒用户插入下一卷。如果 MESSAGE 包含字符串"%d", 它被替换成当前卷号 (从 1 开始)。

  -n, --numeric-uid-gid 以详细方式 (verbose) 显示内容时, 用数字显示 UID 和 GID, 而不是翻译成名称。

  --no-absolute-filenames 在copy-in模式中, 即使它们在归档包中有绝对路径名。也在当前目录中创建所有相关文件,

  --no-preserve-owner 在 copy-in 和 copy-pass 模式中, 不改变文件的属主关系 (译注: 疑为不保留); 使它们属于展开它们的用户。这是普通用户的缺省行为, 因此 System V 的用户不致于无意中把文件泄露(give away)。

  -o, --create 进入 copy-out 模式。

  -O archive 使用归档文件名, 而不是标准输出。 如果把其他机器上的磁带机作成归档文件, 文件名要用 "HOSTNAME:" 开始。 主机名前面可以加上用户名和一个 '@', 作为访问远程磁带机的用户 (如果你有这样的权限, 一般在用户的 ~/.rhosts 文件中会有这么一项)。

  --only-verify-crc 当在 copy-in 模式读入 CRC 格式的归档包时, 不展开里面的文件, 而只是测试文件的 CRC 码。

  -p, --pass-through 进入 copy-pass 模式。

  --quiet 不显示复制的块数。

  -r, --rename 交互式文件改名。

  -R [user][:.][group], --owner [user][:.][group] 在 copy-out 和 copy-pass 模式中, 把所有文件的属主设置为指定的用户和/或用户组。 无论用户还是用户组都必须存在。 如果省略用户组, 但是给出了分隔符 ":" 或 "。', 则使用给定用户登录时的用户组。 只有超级用户能够改变文件的属主。

  --sparse 在 copy-out 和 copy-pass 模式中, 把大块数据 0 的文件写成稀疏文件 (sparse file)。

  -s, --swap-bytes 在 copy-in 模式中, 交换文件中每一个半字(字节对) 中的字节。

  -S, --swap-halfwords 在 copy-in 模式中, 交换文件中每一个字(4字节) 中的半字。

  -t, --list 显示输入归档包的内容。

  -u, --unconditional 替换所有文件, 不再提问是否用旧文件替换已经存在的新文件。

  -v, --verbose 列出处理的文件, 加上 -t 选项可以列出一个 'ls -l' 风格的列表。在一个归档包内容的详细列表 (verbose) 中, 如果本地系统不存在归档文件的用户和用户组名称, 它们将被替换成其数字 UID和GID 对应于本地系统的用户和用户组名称。

  -V --dot 每处理一个文件, 显示一个 "."。

--version 显示 cpio 程序的版本号, 然后退出。

 

 

Tar
-c :建立一个压缩文件的参数指令(create 的意思);
-x :解开一个压缩文件的参数指令!
-t :查看tarfile 里面的文件[特别注意,在参数的下达中,c/x/t仅能存在一个,不可同时存在]
-z :是否同时具有gzip 的属性?亦即是否需要用gzip 压缩?
-j :是否同时具有bzip2 的属性?亦即是否需要用bzip2 压缩?
-v :压缩的过程中显示文件!这个常用,但不建议用在背景执行过程!
-f :使用档名,请留意,在f 之后要立即接档名,不要再加参数
-p :使用原文件的原来属性(属性不会依据使用者而变)
-P :可以使用绝对路径来压缩!
-N :比后面接的日期(yyyy/mm/dd)还要新的才会被打包进新建的文件中
范例一:将整个/etc 目录下的文件全部打包成为/tmp/etc.tar
[root@linux ~]# tar -cvf /tmp/etc.tar /etc <==仅打包,不压缩!
[root@linux ~]# tar -zcvf /tmp/etc.tar.gz /etc <==打包后,以 gzip 压缩
[root@linux ~]# tar -jcvf /tmp/etc.tar.bz2 /etc <==打包后,以 bzip2 压缩
范例二:查阅上述/tmp/etc.tar.gz 文件内有哪些文件?
[root@linux ~]# tar -ztvf /tmp/etc.tar.gz
范例三:将/tmp/etc.tar.gz 文件解压缩在/usr/local/src 底下
[root@linux ~]# cd /usr/local/src
[root@linux src]# tar -zxvf /tmp/etc.tar.gz
范例四:在/tmp 底下,我只想要将/tmp/etc.tar.gz 内的etc/passwd 解开而已
[root@linux ~]# cd /tmp
[root@linux tmp]# tar -zxvf /tmp/etc.tar.gz etc/passwd
范例五:将/etc/ 内的所有文件备份下来,并且保存其权限!
[root@linux ~]# tar -zxvpf /tmp/etc.tar.gz /etc
范例六:在/home 当中,比 2005/06/01新的文件才备份
[root@linux ~]# tar -N '2005/06/01' -zcvfhome.tar.gz /home
范例七:我要备份/home, /etc ,但不要/home/dmtsai
[root@linux ~]# tar --exclude /home/dmtsai -zcvf myfile.tar.gz /home/* /etc
范例八:将/etc/ 打包后直接解开在/tmp 底下,而不产生文件!
[root@linux ~]# cd /tmp
[root@linux tmp]# tar -cvf - /etc | tar -xvf –

 

 


tar 是一个已移植到 Linux 中的经典 UNIX 命 令。 tar 是 tape archive(磁带归档)的缩写,最初设计用于将文件打包到磁带上。如果您下载过 Linux 源代码,或许已经碰到 过 tar 文件。这是一个基于文件的命令,它本质上是连续地、首尾相连地堆放文件。

使用 tar 可以打包整个目录树,这使得它特别适 合用于备份。归档文件可以全部还原,或从中展开单独的文件和目录。备份可以保存到基于文件的设备或磁带设备上。文件可以在还原时重定向,以便将它们重新放 到一个与最初保存它们的目录(或系统)不同的目录(或系统)。 tar 是与文件系统无关的。它可以使用在 ext2、ext3、 jfs、 Reiser 和其他文件系统上。

使用 tar 非常类似于使用诸如PKZip 这样的文件实用工具。只需将它指向一个目的(可以是文 件或设备),然后指定您想要打包的文件。您可以通过标准的压缩类型来动态压缩归档文件,或指定一个自己选择的外部压缩程序。要通过 bzip2 压缩或解 压缩文件,可使用 tar -z 命令。


  语法:tar (主选项+辅选项) 文件或者目录

使用该命令时,主选项是必须要有的,它告诉tar要做什么事情,辅选项是辅助使用的
可以选用。

主选项:

c 创建新的档案文件。如果用户想备份一个目录或是一些文件,就要选择这个选项。

r 把要存档的文件追加到档案文件的未尾。例如用户已经作好备份文件,又发现还有一个目录或是一些文件忘记备份了,这时可以使用该选项,将忘记的目录或文件追加到备份文件中。

t 列出档案文件的内容,查看已经备份了哪些文件。

u 更新文件。就是说,用新增的文件取代原备份文件,如果在备份文件中找不到要更新的文件,则把它追加到备份文件的最后。

x 从档案文件中释放文件。

辅助选项:

b 该选项是为磁带机设定的。其后跟一数字,用来说明区块的大小,系统预设值为20(20*512 bytes)。

f 使用档案文件或设备,这个选项通常是必选的。
k 保存已经存在的文件。例如我们把某个文件还原,在还原的过程中,遇到相同的文件,不会进行覆盖。

m 在还原文件时,把所有文件的修改时间设定为现在。

M 创建多卷的档案文件,以便在几个磁盘中存放。

v 详细报告tar处理的文件信息。如无此选项,tar不报告文件信息。

w 每一步都要求确认。

z 用gzip来压缩/解压缩文件,加上该选项后可以将档案文件进行压缩,但还原时也一
要使用该选项进行解压缩。


         例1:把/home目录下包括它的子目录全部做备份文件,备份文件名为usr.tar
         $ tar cvf usr.tar /home
例2:把/home目录下包括它的子目录全部做备份文件,并进行压缩,备份文件名为usr.tar.gz 。
$ tar czvfusr.tar.gz /home
例3:把usr.tar.gz这个备份文件还原并解压缩。
         $ tar xzvf usr.tar.gz
例4:查看usr.tar备份文件的内容,并以分屏方式显示在显示器上。
$ tar tvfusr.tar | more
要将文件备份到一个特定的设备,只需把设备名作为备份文件名。
例5:用户在/dev/fd0设备的软盘中创建一个备份文件,并将/home 目录中所有的文件
拷贝到备份文件中。
$ tar cf/dev/fd0 /home
要恢复设备磁盘中的文件,可使用xf选项:
$ tar xf/dev/fd0
如果用户备份的文件大小超过设备可用的存贮空间,如软盘,您可以创建一个多卷的tar备份文件。M选项指示tar命令提示您使用一个新的存贮设备,当 使用M选项向一个软驱进
存档时,tar命令在一张软盘已满的时候会提醒您再放入一张新的软盘。这样您就可以把tar档案存入几张磁盘中。
$ tar cMf/dev/fd0 /home
要恢复几张盘中的档案,只要将第一张放入软驱,然后输入有x和M选项的tar命令。在
要时您会被提醒放入另外一张软盘。
$ tar xMf/dev/fd0
     例 6:用 tar 来把除 /proc 目录之外的整个文件系统备份到 SCSI 磁带设备。
     tar -cpf /dev/st0 / --exclude=/proc

     在 上面的例子中, -c 开关表示归档文件正在被创建。 -p 开关表示我们希望保留文件许可权限,这对良好的备份来说是很关键的。 -f 开关指向该归档 文件的文件名。在本例中,我们使用的是原始磁带设备 /dev/st0。/ 表示我们想要备份的内容。既然我们想要备份整个系统,因此把这个开关指定为根 (root)。当把 tar 指向一个目录(以 / 结尾)时,它会自动递归。最后,我们排除了 /proc 目录,因为它没有包含需要保存的任何内容。 如果单盒磁带容纳不下这个备份,我们需要添加 -M 开关(本例中没有显示)以进行多卷备份。

要还原一个或多个文件,可以使用带提取开关( -x )的 tar 命令:

tar -xpf /dev/st0 -C /
这里的 -f 开关同样指向归档文件, -p开关表明我们想要还原归档的权限。 -x 开关表明从归档中提取文件。 -C / 表明我们想要让还原从 / 开始。 tar 通常还原到运行这个命令的目录。 -C 开关使我们的当前目录不再相关。
您可能会经常使用的另外两个tar 命令是 -t 和 -d 开关。 -t 开关列出某个归档文件的内容。-d 开关将归档文件的内容与系统上的当前文件作比较。
为 便于操作和编辑,您可以将想要归档的文件和目录放进一个文本文件中,然后在命令行通过 -T 开关引用这个文本文件。这些文件和目录可以与命令行上列出的 其他目录结合起来。下面的命令行备份 MyFiles 中列出的所有文件和目录、/ 根目录和 /tmp 目录中的所有 iso 文件。

tar -cpf /dev/st0 -T MyFiles /root /tmp/*.iso
文件列表只是一个文本文件,其中列出文件或目录。下面是一个例子:

/etc
          

/var
          

/home
          

/usr/local
          

/opt

        
请注意 tar -T (或 files-from )命令不能接受通配符。文件必须明确地列出。上面的例子展示了一种单独地引用文件的方法。您还可以执行脚本来搜索系统,然后建立一个列表。下面就是这样一个脚本的例子:

#!/bin/sh
          

cat MyFiles > TempList
          

find /usr/share -iname *.png >> TempList
          

find /tmp -iname *.iso >> TempList
          

tar -cpzMf /dev/st0 -T TempList

        
上 面的脚本首先将MyFiles 中的所有现有文件列表复制到 TempList。然后它执行两个 find 命令来搜索文件系统中匹配某个模式的文件, 并将它们附加到 TempList。第一次是搜索 /usr/share 目录树中以 .png 结尾的所有文件。第二次是搜索 /tmp 目录树中 以 .iso 结尾的所有文件。在建立好列表之后, tar 然后在文件设备 /dev/st0 (第一个 SCSI 磁带设备)上创建 一个新的归档文 件,该文件使用 g zip 格式来压缩,并保留所有文件权限。该归档文件将跨越多个卷。要归档的文件的名称将从 TempList 文件中提取。
还 可以使用脚本来执行更精细的操作,比如增量备份。也可以编写脚本来还原文件,虽然还原通常是手动进行的。正如上面提到过的,用于提取文件的 -x 开关代 替了 -c 开关。可以还原整个归档文件,或者还原指定的个别文件或者目录。使用通配符来引用归档文件中的文件是可以的。还可以使用开关来转储和还原。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值