Most of you may know to how extract a tarballs and/or a zip files. Someone recently PM me with a question:
How do I extract an RPM package without installing it on my Fedora Core Linux v5?
Extract rpm File
To be frank there is no direct RPM option available via rpm command to extract an RPM file. But there is a small nifty utility available called rpm2cpio. It Extract cpio archive from RPM Package Manager (RPM) package. With the following hack you will be able to extract an RPM file.
So rpm2cpio converts the .rpm file specified as a single argument to a cpio archive on standard out. If a - argument is given, an rpm stream is read from standard in.
Syntax is as follows:
rpm2cpio myrpmfile.rpm rpm2cpio - < myrpmfile.rpm rpm2cpio myrpmfile.rpm | cpio -idmv
Examples - Extract files from rpm
Download an RPM file:
$ mkdir testExtract RPM file using rpm2cpio and cpio command:
$ cd test
$ wget http://www.cyberciti.biz/files/lighttpd/rhel4-php5-fastcgi/php-5.1.4-1.esp1.x86_64.rpm
$ rpm2cpio php-5.1.4-1.esp1.x86_64.rpm | cpio -idmvOutput:
/etc/httpd/conf.d/php.conf ./etc/php.d ./etc/php.ini ./usr/bin/php ./usr/bin/php-cgi ./usr/lib64/httpd/modules/libphp5.so ./usr/lib64/php ./usr/lib64/php/modules .... ..... .. ./var/lib/php/session ./var/www/icons/php.gif 19188 blocks
Output of rpm2cpio piped to cpio command (see how to use cpio) with following options:
- i: Restore archive
- d: Create leading directories where needed
- m: Retain previous file modification times when creating files
- v: Verbose i.e. display progress
Verify that you have extracted an RPM file in current directory:
$ ls Output:
etc php-5.1.4-1.esp1.x86_64.rpm usr var
This is useful if you want to extract configuration file or other file w/o installing an RPM file.
Featured Articles:
- 20 Linux System Monitoring Tools Every SysAdmin Should Know
- 20 Linux Server Hardening Security Tips
- Linux: 20 Iptables Examples For New SysAdmins

- My 10 UNIX Command Line Mistakes
- 25 PHP Security Best Practices For Sys Admins
- The Novice Guide To Buying A Linux Laptop
- Top 5 Email Client For Linux, Mac OS X, and Windows Users
- Top 20 OpenSSH Server Best Security Practices
- Top 10 Open Source Web-Based Project Management Software
Facebook it - Tweet it - Print it -
We're here to help you make the most of sysadmin work. So, subscribe!


{ 34 comments… read them below or add one }
You can also use alien package to convert rpm to tgz…
Thanks for pointing out alien package to convert rpm to tgz.
thanks…worked first time
I love it when I search Google and find a good answer right away.
Thank you so much.
*THUMBS UP* :-)
thanks a lot :)
I just found this page and it is great. One thing to note is that opensuse compresses the cpio part with lzma to decrease size so you have to do something like the following instead.
rpm2cpio file.rpm | lzma -d | cpio -idmv
This will extract the files for you.
Saved me a hole lot of time.
Thank you.
thanks a lot..
This is very good, however, I don’t think I see the installation script from inside the RPM. how do I get that? If I’m missing something, please let me know. Thank you!
@Matthew,
To display scripts you need to use rpm command as follows, this faq is about extracting file from rpm. In short type:
rpm -pq --scripts file.rpmrpm -pq --scripts rsnapshot-1.3.0-1.noarch.rpm
Here is sample output from my rpm:
postinstall scriptlet (using /bin/sh): # # upgrade rsnapshot config file # RSNAPSHOT_CONFIG_VERSION=`/usr/bin/rsnapshot check-config-version` if test $? != 0; then echo "Error upgrading /etc/rsnapshot.conf" fi if test "$RSNAPSHOT_CONFIG_VERSION" = "1.2"; then # already latest version exit 0 fi if test "$RSNAPSHOT_CONFIG_VERSION" = "unknown"; then /usr/bin/rsnapshot upgrade-config-file RETVAL=$? exit $RETVAL fiHTH
Excellent article that helped us save a lot of time from having to actually install a 64 bit linux system just to be able to retrieve the rpms for that platform.
I would suggest that the author remove the first two lines of the incomplete example which throws the user off until they realize that the cpio part has to be run together for actually extract the files.
No need to display :
rpm2cpio myrpmfile.rpm
rpm2cpio – < myrpmfile.rpm
(the above command dumps a continuous stream of unreadable characters to the screen)
Just need to know :
rpm2cpio myrpmfile.rpm | cpio -idmv
Thanks for sharing this with the linux community.
- Samuel Benjamin, NC.
Thanks, just what I needed.
Just what I needed in the nick of time…
Thank You!!!
Its really very fantastic search i ever made.
So, now I have the rpm opened and with all dirs.
Can I just mv to / and have program installed and running?
Yes, I know, if this works the rpm database is not updated.
But this works?
Not with all packages; rpm executes [pre/post][install/uninstall] scripts contained in the rpm…
Thanks Vivek,
It is very Useful
Thanks,
its very helpful :)
cool nice post
Hey, this worked great. I kept getting segmentation fault with plain old rpm and all I really needed from the rpm was some source files in a direction. :-)
Fantastic! The command line as you gave it worked perfectly: 100% correct, unlike the usual almost-correct posting that I have to debug. You saved me hours of work. Thank you!
Thank you too. This post helped me a lot.
I tried to extract a newer RPM (from Fedora 13 repository) on my Fedora 10 box and it wouldn’t work. The rpm2cpio program would not create a valid cpio file. I tried alien and it wouldn’t work either. I then did a “yum update rpm” and it downloaded the latest rpm package and that solved the problem.
Thank,That is what I am looking for
This is awesome, thank you so much!
Excellent Post. Thank You very much.
I extracted my rpm using rpm2cpio myrpmfile.rpm | cpio -idmv .
Is ther a way to invoke some scripts from thei extracted folder.
Ex; I have a execute.py under scripts folder of above rpm. This need to be run automatically once we extarcted the rpm.
Sorry to dig up an old thread, but…
The free 7-zip does this too… It opens .rpm, you can see the .cpio, which it also opens, & you see the dir structure to browse.
Or just extract from the get go… Cant see the scripts though, which is what i came here looking for, so my thanks to you Vivek!
Blurry
Australia
Now if i could edit said script…
install Pzip from “www.peazip.org/” and get it done easily.
The above command will not work as it showing “premature end of archive ” on Centos 5.6 32 bit architechure.
use an alternate of the above with the following
rpm2cpio | xz -d | cpio -idmv
good tutorial and very clear description and how to solve my problem. Thank for your tutorial. My problem about how to extract rpm file is solve :)
The rpmpeek tool from rpmdevtools looks great:
SYNOPSIS rpmpeek [-h] RPM command [args...] DESCRIPTION rpmpeek unpacks RPM contents into a temporary directory and executes a command under that directory. The directory is purged upon exit.Yap it works !!! i tried to convert prefix of the rpm so i unpack diffmerger rpm and repack using mavn-shell plugin and this rpm2cpio help me moving packages as i wanted !
Great Article :
cheers