| Article Index |
|---|
| File and Archiving Commands |
| Page 2 |
| Page 3 |
| Page 4 |
| Page 5 |
| Page 6 |
| Page 7 |
| All Pages |
File and Archiving Commands
File and Archiving Commands for reference of linux users
Archiving
- tar
The standard UNIX archiving utility. Originally a Tape ARchiving program, it has developed into a general purpose package that can handle all manner of archiving with all types of destination devices, ranging from tape drives to regular files to even stdout . GNU tar has been patched to accept various compression filters, for example: tar czvf archive_name.tar.gz *, which recursively archives and gzips all files in a directory tree except dotfiles in the current working directory ($PWD).
Some useful tar options:
-c create (a new archive)
-x extract (files from existing archive)
--delete delete (files from existing archive)

This option will not work on magnetic tape devices.
-r append (files to existing archive)
-A append (tar files to existing archive)
-t list (contents of existing archive)
-u update archive
-d compare archive with specified filesystem
--after-date only process files with a date stamp after specified date
-z gzip the archive
(compress or uncompress, depending on whether combined with the -c or -x) option
-j bzip2 the archive

It may be difficult to recover data from a corrupted gzipped tar archive. When archiving important files, make multiple backups.
- shar
Shell archiving utility. The files in a shell archive are concatenated without compression, and the resultant archive is essentially a shell script, complete with #!/bin/sh header, and containing all the necessary unarchiving commands. Shar archives still show up in Usenet newsgroups, but otherwise shar has been pretty well replaced by tar/gzip. The unshar command unpacks shar archives.
- ar
Creation and manipulation utility for archives, mainly used for binary object file libraries.
- rpm
The Red Hat Package Manager, or rpm utility provides a wrapper for source or binary archives. It includes commands for installing and checking the integrity of packages, among other things.
A simple rpm -i package_name.rpm usually suffices to install a package, though there are many more options available.

rpm -qf identifies which package a file originates from.
bash$ rpm -qf /bin/ls
coreutils-5.2.1-31

rpm -qa gives a complete list of all installed rpm packages on a given system. An rpm -qa package_name lists only the package(s) corresponding to package_name.
bash$ rpm -qa
redhat-logos-1.1.3-1
glibc-2.2.4-13
cracklib-2.7-12
dosfstools-2.7-1
gdbm-1.8.0-10
ksymoops-2.4.1-1
mktemp-1.5-11
perl-5.6.0-17
reiserfs-utils-3.x.0j-2
...
bash$ rpm -qa docbook-utils
docbook-utils-0.6.9-2
bash$ rpm -qa docbook | grep docbook
docbook-dtd31-sgml-1.0-10
docbook-style-dsssl-1.64-3
docbook-dtd30-sgml-1.0-10
docbook-dtd40-sgml-1.0-11
docbook-utils-pdf-0.6.9-2
docbook-dtd41-sgml-1.0-10
docbook-utils-0.6.9-2
- cpio
This specialized archiving copy command (copy input and output) is rarely seen any more, having been supplanted by tar/gzip. It still has its uses, such as moving a directory tree. With an appropriate block size (for copying) specified, it can be appreciably faster than tar.
Example 15-30. Using cpio to move a directory tree
#!/bin/bash
# Copying a directory tree using cpio.
# Advantages of using 'cpio':
# Speed of copying. It's faster than 'tar' with pipes.
# Well suited for copying special files (named pipes, etc.)
#+ that 'cp' may choke on.
ARGS=2
E_BADARGS=65
if [ $# -ne "$ARGS" ]
then
echo "Usage: `basename $0` source destination"
exit $E_BADARGS
fi
source="$1"
destination="$2"
###################################################################
find "$source" -depth | cpio -admvp "$destination"
# ^^^^^ ^^^^^
# Read the 'find' and 'cpio' info pages to decipher these options.
# The above works only relative to $PWD (current directory) . . .
#+ full pathnames are specified.
###################################################################
# Exercise:
# --------
# Add code to check the exit status ($?) of the 'find | cpio' pipe
#+ and output appropriate error messages if anything went wrong.
exit $?- rpm2cpio
This command extracts a cpio archive from an rpm one.
Example 15-31. Unpacking an rpm archive
#!/bin/bash
# de-rpm.sh: Unpack an 'rpm' archive
: ${1?"Usage: `basename $0` target-file"}
# Must specify 'rpm' archive name as an argument.
TEMPFILE=$$.cpio # Tempfile with "unique" name.
# $$ is process ID of script.
rpm2cpio < $1 > $TEMPFILE # Converts rpm archive into
#+ cpio archive.
cpio --make-directories -F $TEMPFILE -i # Unpacks cpio archive.
rm -f $TEMPFILE # Deletes cpio archive.
exit 0
# Exercise:
# Add check for whether 1) "target-file" exists and
#+ 2) it is an rpm archive.
# Hint: Parse output of 'file' command.




