howto list all non-rpm installed files on system

Dave Burns tburns at hawaii.edu
Sat Apr 12 21:25:33 UTC 2008


Here's a bash one-liner that outputs the filename of every file on /
not part of an rpm. There may be more directories that should be
excluded or filetypes that should be included, depending on what is in
your setup and what you really want to find.

find / -type f -print|grep -v  '^/proc/' |while read file; do rpm -qf
"$file" >/dev/null || echo "$file"; done

Dave

On Sat, Apr 12, 2008 at 10:57 AM, Steve Siegfried <sos at zjod.net> wrote:
>
>  You probably need a script for this... at least I do.
>    > #!/bin/ksh
>    >
>    > DOIT()
>    > {
>    > START=`date "+%d%b%y @ %T"`
>    > echo "### RPM status started on $START, output file = $FN"
>    > echo "+ rpm -qa > /root/RPM-qa"
>    > rpm -qa > /root/RPM-qa
>    > echo "+ sort < /root/RPM-qa > /root/RPM-qa.sorted"
>    > sort < /root/RPM-qa > /root/RPM-qa.sorted
>    > echo "+ cat /root/RPM-qa.sorted | xargs -l1 rpm -qi | grep \"^Name        :\" | awk '{ print \$3 }' > /root/RPM-qa.sorted.basenames"
>    > cat /root/RPM-qa.sorted | xargs -l1 rpm -qi | grep "^Name        :" | awk '{ print $3 }' > /root/RPM-qa.sorted.basenames
>    > echo "+ uniq < /root/RPM-qa.sorted.basenames > RPM-qa.sorted.basenames.uniq"
>    > uniq < /root/RPM-qa.sorted.basenames > RPM-qa.sorted.basenames.uniq
>    > echo "+ diff /root/RPM-qa.sorted.basenames RPM-qa.sorted.basenames.uniq"
>    > diff /root/RPM-qa.sorted.basenames RPM-qa.sorted.basenames.uniq
>    > echo
>    > echo
>    > echo "### Verifying individual packages:"
>    >
>    > for i in `cat /root/RPM-qa.sorted`
>    > do
>    >   j=`echo $i | xargs -l1 rpm -qi | grep "^Name        :" | awk '{ print $3 }'`
>    >   echo "+ rpm -V $j                # ($i)"
>    >   rpm -V $j
>    > done
>    > echo
>    > echo
>    > echo "### Non-RPM files:"
>    > OF=`mktemp /tmp/list.XXXXXX`
>    >
>    > echo "+ rpm -qal | sort | uniq > $OF.rpm"
>    > rpm -qal | sort | uniq > $OF.rpm
>   >> echo "+ find / -print | sort   > $OF.find"
>   >> find / -print | sort   > $OF.find
>    > echo "+ diff $OF.rpm $OF.find | grep '^>' "
>    > diff $OF.rpm $OF.find | grep '^>'
>    > rm $OF.rpm $OF.find $OF
>    >
>    > END=`date "+%d%b%y @ %T"`
>    > echo "### DONE: RPM status started on $START, finished on $END, output file = $FN"
>    > }
>    >
>    > # MAIN Main main
>    >
>    > FN=/root/CHECK_rpm-V/CHECK_rpm-V.`date '+%d%b%y'`
>    > if [ -f $FN ]
>    > then FN=$FN.`date '+%H:%M'`
>    > fi
>    > export FN
>    >
>    >
>    > DOIT | tee $FN
>    > exit 0
>
>  Note that you may want to rewrite the 2 lines prefixed with ">>" to be something more like:
>   >> echo "+ find / -print | egrep -v '^/dev|^/home|^/proc|^/sys|^/tmp' | sort > $OF.find"
>   >> find / -print | egrep -v '^/dev|^/home|^/proc|^/sys|^/tmp' | sort > $OF.find
>  depending on your needs.
>
>  And yeah... it'll take a while to run, too.
>
>  Hope this helps,
>
>  -S
>
>  David Timms wrote:
>  >
>  > Anybody got some good ideas for listing every file on disk that is:
>  > 1. modified from default rpm install {eg config files}
>  > 2. not installed by any rpm
>  > 3. is a config file for a service - eg. web server /etc/httpd/conf.d/
>  > and so on
>  > 4. is user data, config, files.
>  > ?
>  >
>  > The purpose is to determine, say before an upgrade, what files need to
>  > be backed up.
>  >
>  > locate / will give me all files on disk.
>  > rpm -qfa will list all files installed by rpm
>  > rpm -Va will tell files changed from what rpm installed.
>  >
>  > Is there a tool that combines the above already ?
>  >
>  > DaveT.
>  >
>
>  --
>  fedora-list mailing list
>  fedora-list at redhat.com
>  To unsubscribe: https://www.redhat.com/mailman/listinfo/fedora-list
>




More information about the users mailing list