Olivier Cochard-Labbé
2011-Sep-22 15:21 UTC
cpio and directory owner preservation behaviour
Hi all, I meet a problem with cpio and I would to know if it's a normal behaviour or a bug. I would to save some files and create directories if needed with owner and permission kept. here is an example with net/quagga: I would to save /usr/local/etc/quagga/ripd.conf and creating needed directory in /tmp [root@R3]/#ls -alh /usr/local/etc | grep quagga drwxr-xr-x 2 quagga quagga 512B Sep 22 15:28 quagga [root@R3]/#ls -alh /usr/local/etc/quagga/ripd.conf -rw------- 1 quagga quagga 134B Sep 22 15:28 quagga/ripd.conf [root@R3]/#(cd /usr/local/etc; find . -name ripd.conf -type f | cpio -dumpv /tmp/) The file owner and permission for ripd.conf is keept: [root@R3]/#ls -alh /tmp/quagga/ripd.conf -rw------- 1 quagga quagga 134B Sep 22 15:28 /tmp/quagga/ripd.conf But not the directory owner that is changed to root:wheel [root@R3]/#ls -alh /tmp | grep quagga drwxr-xr-x 2 root wheel 512B Sep 22 16:41 quagga Is a cpio bug ? Thanks, Olivier
On Thu, September 22, 2011 10:54, Olivier Cochard-Labb? wrote: [...]> [root@R3]/#(cd /usr/local/etc; find . -name ripd.conf -type f | cpio > -dumpv /tmp/) > > The file owner and permission for ripd.conf is keept: > [root@R3]/#ls -alh /tmp/quagga/ripd.conf > -rw------- 1 quagga quagga 134B Sep 22 15:28 /tmp/quagga/ripd.conf > > But not the directory owner that is changed to root:wheel > [root@R3]/#ls -alh /tmp | grep quagga > drwxr-xr-x 2 root wheel 512B Sep 22 16:41 quagga > > Is a cpio bug ?No it is not a bug, because the find(1) command will only print "quagga/ripd.conf" to its output, and not "quagga/" as well. Since cpio(1) only receives "quagga/ripd.conf", it will only put the information for that item in the archive stream. Try the following command: # (cd /usr/local/etc; find quagga | cpio -dumpv /tmp/) instead. This should grab quagga/ itself, in addition to its contents in the archive stream. If you want to know which items (files, directories, other) that cpio(1) grab information on just run the find(1) without piping its output anywhere. If you don't see the item of interest on a line of its own, cpio(1) will not grab its metadata.