Eu tenho um diretório em uma montagem nfs, que no servidor está em /home/myname/.rubies
A raiz não pode acessar este diretório:
[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
Estou tentando copiar algo desse diretório para o /opt
qual apenas o root tem acesso:
[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, posso fazer o seguinte (e é o que fiz por enquanto):
[mitchell.usher@server ~]$ cp -r .rubies/ruby-2.1.3/ /tmp/
[mitchell.usher@server ~]$ sudo cp -r /tmp/ruby-2.1.3/ /opt/
Existe alguma maneira de fazer isso que não envolva copiá-lo como uma etapa intermediária ou alterar permissões?
permissions
root
file-copy
Mitch
fonte
fonte
cp -Rp /home/mitchell.usher/.rubies /tmp/templocation; sudo mv /tmp/templocation/ruby-2.1.3 /opt
isso não vai funcionar? Se não, por quê?cp <file> /tmp/tmpfile
Respostas:
Você pode usar
tar
como um processo de bufferO primeiro
tar
é executado conforme você e, portanto, pode ler seu diretório pessoal; o segundotar
é executado sobsudo
e, portanto, pode escrever para/opt
.fonte
cpio
pode ser usado da mesma maneira.-C
argumento para alterar o diretório (ou sejatar cf - ruby-2.1.3 | sudo tar -C /opt xpf -
). Vale a pena mencionar que você deseja garantir quesudo
não solicite sua senha (por exemplo, através de umasudoers
entrada ou credenciais em cache).Você pode usar
rsync
ouscp
copiaruser@localhost
para o diretório local.Exemplo para
rsync
:Você pode alternativamente
se você permitir que o root acesse diretamente o host local (não recomendado; normalmente preferimos que o acesso seja via
sudo
).fonte
Você pode fazer uma segunda entrada no FAT (ou o que for).
Eu faço isso para o meu
HOSTS
arquivo. Eu tenho um link em um diretório gravável que se refere ao arquivo e ele tem permissões diferentes; portanto,/Hosts/HOSTS
eu posso modificá-lo facilmente e as alterações são colocadas nos dois arquivos (ou seja, "o único"). São 2 entradas para 1 arquivo. Não me lembro do comando, desculpe.Para você, você cria um link
/opt
para todos os arquivos inseridos.rubies
e, quando altera alguma coisa/opt
, é o mesmo arquivo inserido em.rubies
.fonte