You may know to how to extract a tarball and zip files on Linux and Unix-like system. Someone, recently PM me with a question:
Dear nixCraft,
How do I extract an RPM package file without installing it on my Fedora Linux or CentOS or RHEL (Red Hat Enterprise Linux) Suse Linux?
Sincerely,
CentOS user.
Extracting rpm file using combination of rpm2cpio and cpio command
To be frank, there is no direct option available for the rpm command to extract an RPM file. However, there is a small nifty utility available called rpm2cpio. It extracts cpio archive from RPM Package Manager (RPM) package. With the following hack, you will be able to extract an RPM file. First you use the rpm2cpio to convert the .rpm file into a cpio archive on standard out. If a - argument is given, an rpm stream is read from standard in. The basic syntax is as follows:
Syntax
rpm2cpio myrpmfile.rpm rpm2cpio - < myrpmfile.rpm rpm2cpio myrpmfile.rpm | cpio -idmv |
Examples – Extract files from rpm
Download an RPM file:
$ mkdir test
$ cd test
$ wget https://www.cyberciti.biz/files/lighttpd/rhel4-php5-fastcgi/php-5.1.4-1.esp1.x86_64.rpm
To extract RPM file using rpm2cpio and cpio command, type:
$ rpm2cpio php-5.1.4-1.esp1.x86_64.rpm | cpio -idmv
Sample outputs:
/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
In this example, output of the rpm2cpio command piped to the cpio command with the 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 the current directory:
$ ls
Sample outputs:
etc php-5.1.4-1.esp1.x86_64.rpm usr var
Say hello to tar command
Another option is just use the tar command:
$ tar xvf file.rpm
Related: How to extract a .deb file without opening it on Debian or Ubuntu Linux
Say hello to Midnight Commander
GNU Midnight Commander (mc) is a directory browser/file manager for Unix-like operating systems. Install mc using the following yum command:
# yum install mc
Opening an RPM file using Midnight Commander (mc)
You can use mc command as follows to browse or extract rpm files:
$ mc
Sample outputs:
Next select an RPM file (such as php-5.3*.rpm) by highlighting the package name and press Enter key. You need to select CONTENTS.cpio file:
To view/edit/extract files click or press on the special function keys. In this example, I pressed F3 function key to view php.conf file:
Say hello to tar command
Another option is just use the BSD tar command:
$ tar xvf file.rpm
Please note that this option only works with the BSD version of tar command. So if you are on MacOS or FreeBSD try the tar command to extract an rpm file.
Conclusion
I hope you found these tips useful to extract configuration file or another file without installing an RPM file.
See also
- Man pages rpm(8),cpio(1),rpm2cpio(1),mc(1)
- GNU Midnight Commander home page.



43 comment
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:
HTH
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
I extracted an rpm file using this method and I tried other methods too. They all resulted in two directories (etc and usr). Now I was expecting to see a .spec file or something where the dependencies are listed but I can’t find it anywhere in the extraction path. I’m trying to learn where rpm -qpR gets it’s information from.
Any ideas?
Thank U Sir
This put me on the right track. If you’re getting gibberish, the following might sort out your issue:
Thanks. This is what i was looking for… ๐ very helpful
Midnight comander (mc) will open it for it and extract easialy.Just point to your rpm then cpio directory and here you go your files.
In Ubuntu (works on 12.04) you can open the RPM using the compressed archive manager. I.e. right click and choose from the menu).
big thumbs up for
rpm2cpio myrpmfile.rpm | cpio -idmv
๐
That’s all I needed. Thanks!
There’s a typo in the firsl rpm2cpio. It is written as pm2cpio
Saved my life there!