📄 cpio
字号:
描述(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 文档中会有这么一项)。-I [[USER@]HOST:]FILE-NAMEArchive filename to use instead of standard input.Optional USER and HOST specify the user and host names in case of a remote archive-k 无效操作; 只是用来兼容其他版本的 cpio。-l, --link 假如有可能, 连接文档, 而不是复制。-L, --dereference 解除符号连接的关联 (复制符号连接指向的 文档, 而不是连接本身)。-L, --dereference Dereference symbolic links (copy the files that they point to instead of copying the links).-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 文档中会有这么一项)。-O [[USERNAME@]HOSTNAME:]FILE-NAMEArchive filename to use instead of standard output.Optional USER and HOST specify the user and host names in case of a remote archive--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 模式中, 把任何文档的属主配置为指定的用户和/或用户组。 无论用户还是用户组都必须存在。 假如省略用户组, 但是给出了分隔符 ":" 或 "。', 则使用给定用户登录时的用户组。 只有终极用户能够改变文档的属主。-R, --owner=[USER][:.][GROUP] Set the ownership of all files created to the specified USER and/or GROUP--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 程式的版本号, 然后退出。Linux学习笔记之备份命令cpio系统备份命令 cpiocpio命令有三种模式:copy-out 将系统的文件生成一个cpio格式的包copy-in 将一个cpio格式的包解开copy-pass 相当于一个cp命令,不进行任何的压包和解包的工作,经常用来复制文件。分别对应的参数是-o,-i,-p这样记忆就比较方便了,linux命令的参数虽然很多,但是还是有规律可以寻找的。1 创建:[root@laptop tmp]# cpio -o -O photo.cpio按回车以后要手工输入你所需要打包的文件名。以Ctrl+D组合键结束。[root@laptop tmp]# lsDcp_0803.jpg Dcp_0810.jpg Dcp_0815.jpg Dcp_0820.jpg Dcp_0827.jpgDcp_0804.jpg Dcp_0811.jpg Dcp_0816.jpg Dcp_0821.jpg Dcp_0828.jpgDcp_0805.jpg Dcp_0812.jpg Dcp_0817.jpg Dcp_0822.jpgDcp_0808.jpg Dcp_0813.jpg Dcp_0818.jpg Dcp_0825.jpgDcp_0809.jpg Dcp_0814.jpg Dcp_0819.jpg Dcp_0826.jpg[root@laptop tmp]# ls | cpio -o > photo.cpio[root@laptop tmp]# ls | cpio -o -O photo.cpio以上两个命令是等效的,只不过前者用重定向符号实现的而已。注:-o 参数也可义用 --create替代,表示正在使用copy-out模式;-O 参数只能和-o一起使用,表示出于out模式时,指定生成的文件;2 查看和解包:解包[root@laptop tmp]# cpio -i -I photo.cpio2792 blocks注:-i 参数是表示使用copy-in模式查看一个cpio包里的文件列表的参数和tar的参数有点相像,都是用-t参数,也可以用--list替代。-I 参数只和-t,-i两个参数连用,表示在copy-in模式时指定一个cpio包。有点像tar包里的-f参数,无论是打tar包还是解tar包或者是查看tar的内容,都要加-f参数一样的道理,在这里,cpio只不过分成了copy-in和copy-out两个部分而已。[root@laptop tmp]# cpio -t -I photo.cpio3 高级的应用参数:-u 解包时如果文件已经存在也强行覆盖[root@laptop tmp]# cpio -i -I test.cpio -u[root@laptop tmp]# cpio -i -u -I test.cpio-f 文件匹配参数,但是是一个反向的,就是符合这个指定的文件不解包[root@laptop tmp]# cpio -i -I test.cpio -f *.rpm这条命令的结果是test.cpio里除了*.rpm文件都会解包出来。-L 这个参数是在打包的时候用的,如果被打包的文件中有符号连接的话,这个参数将会把连接的目标文件打入包中,而不是仅仅把符号连接打包。[root@laptop tmp]# ls | cpio -o -O newtest.cpio -L-R 这个参数只用在解包的时候,是用来给解包出来的文件设置所有者和所属组的。但是用户和组的关系必须已经在passwd,group两个文件中存在!!![root@laptop tmp]# cpio -i -I test.cpio -R yue.pye[root@laptop tmp]# cpio -i -I test.cpio -R yueye-r 这个参数只在解包时有用,而且不能和-u参数同时使用,否则失效,他的作用是当包中的文件和解包所在目录下的某个文件重名的时候自动提示是否需要更名。[root@laptop tmp]# cpio -i -I test.cpio -rrename 12.1 -> arename backgroud -> crename bin -> bindirrename crystal ->-A 这个参数只用在压包的时候,用来向已经存在的cpio包添加文件的[root@laptop tmp]# cpio -o -O test.cpio -A[root@laptop tmp]# cpio -o -A -O test.cpio
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -