linux 提取cpio_15. Linux提取RPM包文件(cpio命令)详解

在讲解如何从 RPM 包中提取文件之前,先来系统学习一下 cpio 命令。

cpio 命令用于从归档包中存入和读取文件,换句话说,cpio 命令可以从归档包中提取文件(或目录),也可以将文件(或目录)复制到归档包中。

归档包,也可称为文件库,其实就是 cpio 或 tar 格式的文件,该文件中包含其他文件以及一些相关信息(文件名、访问权限等)。归档包既可以是磁盘中的文件,也可以是磁带或管道。

cpio 命令可以看做是备份或还原命令,因为它可以将数据(文件)备份到 cpio 归档库,也可以利用 cpio 文档库对数据进行恢复。

使用 cpio 命令备份或恢复数据,需注意以下几点:

使用 cpio 备份数据时如果使用的是绝对路径,那么还原数据时会自动恢复到绝对路径下;同理,如果备份数据使用的是相对路径,那么数据会还原到相对路径下。

cpio 命令无法自行指定备份(或还原)的文件,需要目标文件(或目录)的完整路径才能成功读取,因此此命令常与 find 命令配合使用。

cpio 命令恢复数据时不会自动覆盖同名文件,也不会创建目录(直接解压到当前文件夹)。

cpio 命令主要有以下 3 种基本模式:

"-o" 模式:指的是 copy-out 模式,就是把数据备份到文件库中,命令格式如下:

[root@localhost ~]# cpio -o[vcB] > [文件丨设备]

各选项含义如下:

-o:copy-out模式,备份;

-v:显示备份过程;

-c:使用较新的portable format存储方式;

-B:设定输入/输出块为 5120Bytes,而不是模式的 512Bytes;

比如,使用 cpio 备份数据的命令如下:

[root@localhost ~]#find /etc -print | cpio -ocvB > /root/etc.cpio

#利用find命令指定要备份/etc/目录,使用>导出到etc.cpio文件

[root@localhost ~]# II -h etc.cpio

-rw--r--r--.1 root root 21M 6月5 12:29 etc.cpio

#etc.cpio文件生成

"-i" 模式:指的是 copy-in 模式,就是把数据从文件库中恢复,命令格式如下:

[root@localhost ~]# cpio -i[vcdu] < [文件|设备]

各选项的含义为:

-i:copy-in 模式,还原;

-v:显示还原过程;

-c:较新的 portable format 存储方式;

-d:还原时自动新建目录;

-u:自动使用较新的文件覆盖较旧的文件;

比如,使用 cpio 恢复之前备份的数据,命令如下:

[root@localhost ~]# cpio -idvcu < /root/etc.cpio

#还原etc的备份

#如果大家査看一下当前目录/root/,就会发现没有生成/etc/目录。这是因为备份时/etc/目录使用的是绝对路径,所以数据直接恢复到/etc/系统目录中,而没有生成在/root/etc/目录中

"-p" 模式:指的是复制模式,使用 -p 模式可以从某个目录读取所有文件,但并不将其备份到 cpio 库中,而是直接复制为其他文件。

例如,使用 -p 将 /boot/ 复制到 /test/boot 目录中可以执行如下命令:

[root@localhost ~]# cd /tmp/

#进入/tmp/目录

[root@localhost tmp]#rm -rf*

#删除/tmp/目录中的所有数据

[root@localhost tmp]# mkdir test

#建立备份目录

[root@localhost tmp]# find /boot/ -print | cpio -p /tmp/test

#备份/boot/目录到/tmp/test/目录中

[root@localhost tmp]# ls test/boot

#在/tmp/test/目录中备份出了/boot/目录

使用 cpio 命令提取 RPM 包中指定文件

在服务器使用过程,如果系统文件被误修改或误删除,可以考虑使用 cpio 命令提取出原 RPM 包中所需的系统文件,从而修复被误操作的源文件。

RPM 包允许逐个提取包中文件,使用的命令格式如下:

[root@localhost ~]# rpm2cpio 包全名|cpio -idv .文件绝对路径

该命令中,rpm2cpio 就是将 RPM 包转换为 cpio 格式的命令,通过 cpio 命令即可从 cpio 文件库中提取出指定文件。

举个例子,假设我们不小心把 /bin/ls 命令删除了,通常有以下 2 种方式修复:

将 coreutils-8.4-19.el6.i686 包(包含 ls 命令的 RPM 包)通过 -force 选项再安装一遍;

使用 cpio 命令从 coreutils-8.4-19.el6.i686 包中提取出 /bin/ls 文件,然后将其复制到相应位置;

这里我们选择第 2 种方式。有读者可能会问,如何知道 ls 命令隶属于那个 RPM 包呢?很简单,使用 rpm -qf 命令即可,如下所示:

[root@localhost ~]# rpm -qf /bin/ls

coreutils-8.4-19.el6.i686

#查看ls文件属于哪个软件包

在此基础上,我们只需从此 RPM 包使用 cpio 命令提取出 ls 命令文件,然后将其复制到对应位置即可,实现命令如下:

[root@localhost ~]# mv /bin/ls /root/

#把/bin/ls命令移动到/root/目录下,造成误删除的假象

[root@localhost ~]# ls

-bash: ls: command not found

#这时执行ls命令,系统会报"命令没有找到"错误

[root@localhost ~]# rpm2cpio /mnt/cdrom/Packages/coreutils-8.4-19.el6.i686.rpm

|cpio -idv ./bin/ls

#提取ls命令文件到当前目录下

[root@localhost ~]# cp /root/bin/ls /bin/

#把提取出来的ls命令文件复制到/bin/目录下

[root@localhost ~]#ls

anaconda-ks.cfg bin inittab install.log install.log.syslog ls

#可以看到,ls命令又可以正常使用了

example:

先使用命令显示rpm包含的文件列表

rpm2cpio your.rpm | cpio -t

然后再显示的列表中找到你需要的文件,执行如下命令:

rpm2cpio your.rpm | cpio -id your-file

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/328664.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

升讯威微信营销系统开发实践:(2)功能设计与架构设计

在上一篇中&#xff0c;我们详细分析了微信订阅号和服务号的区别&#xff0c;在本篇中&#xff0c;将进入正题&#xff1a;升讯威微信营销系统的功能设计及架构设计。 一、功能设计 1&#xff09;设计目标 ◇ 为微信服务号提供运营及管理所需的各种功能&#xff0c;包括微官网、…

解读分库分表中间件Sharding-JDBC

转载自 解读分库分表中间件Sharding-JDBC编者按】数据库分库分表从互联网时代开启至今&#xff0c;一直是热门话题。在NoSQL横行的今天&#xff0c;关系型数据库凭借其稳定、查询灵活、兼容等特性&#xff0c;仍被大多数公司作为首选数据库。因此&#xff0c;合理采用分库分表…

java面试设计模式

https://blog.csdn.net/yinyuehepijiu/article/details/38663843

新闻发布项目——实体类(User)

package bdqn.newsMange.entity; /*** User的实体类* author Administrator**/ public class User {private int userId;//编号private String userName;//用户名private String userPassword;//密码private String uRole;//角色public int getUserId() {return userId;}public…

js webpack 配置路径_webpack中如何设置html引入js的路径

如题所示,如果webpack这样配置var htmlWebpackPlugin require(html-webpack-plugin);const CleanWebpackPlugin require(clean-webpack-plugin);let pathsToClean [dist,];module.exports {entry: ./src/app.js,output: {path: __dirname /dist,filename: main.[chunkhash…

HTTP 报文结构

https://www.jianshu.com/p/a2c4ede32d11

Java魔法堂:URI、URL(含URL Protocol Handler)和URN

转载自 Java魔法堂&#xff1a;URI、URL&#xff08;含URL Protocol Handler&#xff09;和URN一、前言                              过去一直搞不清什么是URI什么是URL&#xff0c;现在是时候好好弄清楚它们了&#xff01;本文作为学习笔记…

升讯威微信营销系统开发教程:(1)订阅号和服务号深入分析

微信开发系列教程&#xff0c;将以一个实际的微信平台项目为案例&#xff0c;深入浅出的讲解微信开发、应用各环节的实现方案和技术细节。 原创内容&#xff0c;欢迎转载&#xff0c;转载请注明出处。 首先在第1章节中&#xff0c;我们先理清什么是订阅号&#xff0c;什么又是服…

不安装cudnn可不可以_Linux非root用户如何优雅的安装cuda和cudnn

Linux非root用户如何优雅的安装cuda和cudnn发布时间&#xff1a;2018-05-23 16:11,浏览次数&#xff1a;804, 标签&#xff1a;LinuxrootcudacudnnLinux非root用户如何优雅的安装cuda和cudnn跑深度学习模型时&#xff0c;总会遇到各种版本的问题。如深度学习框架与cuda的版本不…

如果你也会C#,那不妨了解下F#(4):了解函数及常用函数

函数式编程其实就是按照数学上的函数运算思想来实现计算机上的运算。虽然我们不需要深入了解数学函数的知识&#xff0c;但应该清楚函数式编程的基础是来自于数学。 例如数学函数f(x) x^2x&#xff0c;并没有指定返回值的类型&#xff0c;在数学函数中并不需要关心数值类型和返…

新闻发布项目——实体类(newsTb)

package bdqn.newsMange.entity;import java.util.Date;/*** 新闻的实体类* author Administrator**/ public class newsTb {private int newsID;// 编号private int categoryID;//类别编号(外键)private String summary;// 摘要private String title;//题目private String con…

Java URL协议扩展实现

转载自 Java URL协议扩展实现在信息交互系统设计中&#xff0c;不乏有自定义通讯协议设计。本章会介绍如何利用 java.net.URL 类来自定义协议。一般而言&#xff0c; URL 的格式是&#xff1a; protocol://[authority]hostname:port/resource?queryString 。 URL 类能够解析…

axure8 事件改变样式_AxureRP8实战手册-案例2(文本框:边框变色)

案例2. 文本框&#xff1a;边框变色案例来源:百度-登录界面案例效果&#xff1a;光标进入文本框时&#xff1a;(图1-6)案例描述&#xff1a;在登录界面中&#xff0c;包含用户名与密码的输入框。当焦点进入输入框时&#xff0c;输入框边框与内部图标变为蓝色&#xff1b;失去…

URL的getFile()和getPath()方法的区别

转载自 URL的getFile()和getPath()方法的区别 import java.net.MalformedURLException; import java.net.URL; public class dd { /** * param args */ public static void main(String[] args) { try { URL url new URL("file://ftp.yoyodyne.com/pub/files/fo…

webpack打包发布

npm run dev npm run dist --线上 git status git add . git commit -am "online adapter" git push git pull git branch --查看当前分支是在哪里master 还是 admin yarn install v1.3.2 yarn run dist -- 打包 fe-deply.sh --shell脚本 自动发布脚本 gi…

介绍开源的.net通信框架NetworkComms

Networkcomms 是一款C# 语言编写的TCP/UDP通信框架 作者是英国人 以前是收费的 目前作者已经开源 开源地址是:https://github.com/MarcFletcher/NetworkComms.Net networkcomms通讯框架使用简单方便,性能稳定. 从github上下载到源码后,需要Visual studio安装nuget 加载相关D…

dplayer js控制 自动全屏_vue-video-player 通过自定义按钮组件实现全屏切换效果【推荐】...

最近公司的产品上线&#xff0c;一些高级功能在基础版本中不对用户开发&#xff0c;通过视频的形式展示。产品开发用的是 vue, 经同事介绍使用了vue-video-player视频播放插件&#xff0c;通过 demo案例很快实现了视频播放效果class"vjs-custom-skin"ref"videoP…

新闻发布项目——实体类(comment)

package bdqn.newsMange.entity;import java.util.Date;/*** 新闻评论表*/ public class comment {private int commentID;//编号private String cmmUser;//用户名private String ip;//ipprivate String cmmContent;//内容private int newsID;//新闻IDprivate Date cmmDate;//…

java字符串格式化:String.format()方法的使用

转载自 java字符串格式化&#xff1a;String.format()方法的使用常规类型的格式化 String类的format()方法用于创建格式化的字符串以及连接多个字符串对象。熟悉C语言的读者应该记得C语言的sprintf()方法&#xff0c;两者有类似之处。format()方法有两种重载形式。 l for…

java web每天定时执行任务(四步轻松搞定)

https://www.cnblogs.com/LiSheng97625/p/4648739.html java web每天定时执行任务&#xff08;四步轻松搞定&#xff09; 第一步&#xff1a; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44…