¿Cómo copiar un directorio al que la raíz no puede acceder a un directorio al que solo la raíz puede acceder?


11

Tengo un directorio en un montaje nfs, que en el servidor está en /home/myname/.rubies

Root no puede acceder a este directorio:

[mitchell.usher@server ~]$ stat /home/mitchell.usher/.rubies
  File: `/home/mitchell.usher/.rubies'
  Size: 4096            Blocks: 8          IO Block: 32768  directory
Device: 15h/21d Inode: 245910      Links: 3
Access: (0755/drwxr-xr-x)  Uid: (  970/mitchell.usher)   Gid: (  100/   users)
Access: 2016-08-22 15:06:15.000000000 +0000
Modify: 2016-08-22 14:55:00.000000000 +0000
Change: 2016-08-22 14:55:00.000000000 +0000

[mitchell.usher@server ~]$ sudo !!
sudo stat /home/mitchell.usher/.rubies
stat: cannot stat `/home/mitchell.usher/.rubies': Permission denied

Estoy intentando copiar algo desde ese directorio al /optque solo la raíz tiene acceso:

[mitchell.usher@server ~]$ cp .rubies/ruby-2.1.3/ -r /opt
cp: cannot create directory `/opt/ruby-2.1.3': Permission denied

[mitchell.usher@server ~]$ sudo !!
sudo cp .rubies/ruby-2.1.3/ -r /opt
cp: cannot stat `.rubies/ruby-2.1.3/': Permission denied

Obviamente puedo hacer lo siguiente (y es lo que he hecho por el momento):

[mitchell.usher@server ~]$ cp -r .rubies/ruby-2.1.3/ /tmp/
[mitchell.usher@server ~]$ sudo cp -r /tmp/ruby-2.1.3/ /opt/

¿Hay alguna manera de hacer esto que no implique copiarlo como un paso intermedio o cambiar los permisos?


cp -Rp /home/mitchell.usher/.rubies /tmp/templocation; sudo mv /tmp/templocation/ruby-2.1.3 /opt¿esto no funcionará? Si no, ¿por qué?
MelBurslan

@MelBurslan, eso es lo que hice, como se indica en la pregunta. Pero digamos que es un archivo de 50 GB que no cabe en ningún otro lugar del sistema de archivos, entonces no podría hacerlocp <file> /tmp/tmpfile
Mitch

Respuestas:


29

Puedes usarlo tarcomo un proceso de buffer

cd .rubies
tar cf - ruby-2.1.3 | ( cd /opt && sudo tar xvfp - )

El primero se tarejecuta como usted y así puede leer su directorio de inicio; el segundo se tarejecuta debajo sudoy así puede escribir /opt.


1
¿Cómo es esto en la memoria? Si tengo un archivo de 10 GB, ¿eso va a llenar 10 GB de memoria antes de que se canalice y elimine el contenido de alquitrán, o lo hará?
Mitch

55
Corren en paralelo; una tubería típica tiene un búfer de 64 KB. No hay nada de qué preocuparse :-) unix.stackexchange.com/questions/11946/… para obtener detalles sobre el tamaño de la tubería.
Stephen Harris


cpiose puede usar de la misma manera.
Toby Speight el

Si tiene GNU tar, puede guardar la subshell utilizando su -Cargumento para cambiar el directorio (es decir tar cf - ruby-2.1.3 | sudo tar -C /opt xpf -). Vale la pena mencionar que desea asegurarse de que sudono le pedirá su contraseña (por ejemplo, a través de una sudoersentrada o credenciales en caché).
Toby Speight

6

Puede usar rsynco scpcopiar desde user@localhostel directorio local.

Ejemplo para rsync:

# rsync "$real_user@localhost:$PWD/.rubies/ruby-2.1.3" /opt

Alternativamente podrías

$ rsync .rubies/ruby-2.1.3 "root@localhost:/opt"

si deja que el acceso raíz localhost directamente (no se recomienda; normalmente preferimos que el acceso raíz sea a través de sudo).


-4

Puede hacer una segunda entrada en el FAT (o lo que sea).
Hago esto para mi HOSTSarchivo. Tengo un enlace en un directorio de escritura que hace referencia al archivo y tiene diferentes permisos, por lo que tengo /Hosts/HOSTSque puedo modificar fácilmente, y los cambios se colocan en ambos archivos (es decir, "uno"). Son 2 entradas para 1 archivo. No recuerdo el comando, lo siento.

Para usted, crea un enlace /optpara todos los archivos .rubiesy, cuando cambia algo /opt, es el mismo archivo que en .rubies.


44
Esto es falso y engañoso, además de no responder la pregunta.
Comodín el

Solo es falso porque estamos tratando con un sistema de archivos diferente. El contestador obviamente se refería a los enlaces duros que funcionan como se mencionó, aunque no es aplicable para esta pregunta.
Julie Pelletier

Gracias comodín, tenía una línea en mi respuesta sobre conseguir un montón de flack pero fue editado cuando Michael lo mejoró. : p
Ingeniero
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.