copiar arquivos de um usuário para outro em uma única máquina

20

Como copiar arquivos ou diretórios de um usuário para outro usuário na mesma máquina via terminal ?

Suponha que haja um arquivo test.txt no diretório inicial de USER1. Preciso copiar esse arquivo para o diretório inicial do USER2 na minha máquina. Como posso fazer isso via terminal?

nischalinn
fonte

Respostas:

26

Supondo que você tenha sudoprivilégios, o seguinte comando fará.

sudo cp /home/USER1/FNAME /home/USER2/FNAME && sudo chown USER2:USER2 /home/USER2/FNAME

Copiará o arquivo de USER1 para USER2 e, em seguida, alterará o proprietário da cópia em / home / USER2 para USER2

Se você não tiver sudoprivilégios, os dois usuários precisarão garantir que você tenha permissões de leitura no diretório USER1 e acesso de gravação no diretório USER2. Se você tiver esses acessos, poderá inserir o comando:

cp /home/USER1/FNAME /home/USER2/FNAME

Isso copiará o arquivo em questão, mas USER2 pode não ser capaz de manipular o arquivo até que ele tenha as permissões apropriadas.

Charles Green
fonte
Isso funcionará apenas se USER1 tiver acesso ao sudo, o que pode não ser o caso em um sistema multiusuário.
BostonHiker
A outra opção seria definir as permissões em sua própria pasta para permitir que o outro usuário as agarre, mas essa opção é muito mais fácil, se possível.
precisa
@BostonHiker Eu assumi que a pessoa que está fazendo a cópia não é USER1 ou USER2 e tem privilégios de sudo. Esta é provavelmente uma suposição ruim da minha parte.
Charles Green
@ Charles Green - edite sua resposta para declarar suas suposições, caso contrário, ela é incompleta / enganosa.
BostonHiker
@BostonHiker Done. Obrigado por me manter honesto.
Charles Green
6

Se você não possui privilégios de sudo, mas pode fazer login com os dois usuários, pode usar o scp com o localhost:

scp file1 user2@localhost:/home/user2/
loudstil
fonte
O que faz você pensar que se trata de um host remoto ou que existe um servidor SSH / SFTP em execução na máquina em questão?
precisa
11
Supondo que você tenha SSH instalado
loudstil
5

Como USER1:

cp [filename] /tmp
chmod 777 /tmp/[filename]

Como USER2:

cp /tmp/[filename] .

Como USER1:

rm /tmp/[filename]
Ryan J McCall
fonte
Você merece mais votos positivos :)
Neeraj Jain
1

Suponha que você não tenha o ssh instalado ou não possa compartilhar chaves / segredos.

Suponha que o usuário1 esteja no grupo1 e o usuário2 esteja no grupo2, e o usuário1! = Usuário2 e o grupo1! = Grupo2.

Crie um grupo compartilhado, group3s.

addgrp group3

Adicione user1 e user2 aos group3s.

Crie um diretório em um local mutuamente acessível, onde um usuário possua, mas possua a propriedade group3s.

#as user1,
mkdir $place/shared && chown user1.group3s $place/shared && chmod 770 $place/shared;
#as user1 or user2,
cp $file $place/shared && chgrp $place/shared/$file && chmod 660 $place/shared/$file

Mas, suponha que você não possa criar o novo grupo compartilhado e colocar os dois usuários nesse grupo?

Crie o diretório e dê 770 permissões,

mkdir $place/shared && chown user1.group1 $place/shared && chmod 770 $place/shared;

Em seguida, como root / admin, altere a propriedade do grupo para o grupo do outro usuário,

sudo bash
chgrp group2 $place/shared && chmod g+s $place/shared

O comando chmod g + s define o bit setgid para que os arquivos colocados no diretório tenham a propriedade do grupo definida como group2.

ChuckCottrill
fonte
0

Todas as outras respostas aqui requerem acesso root, permitem que qualquer usuário na mesma máquina copie o arquivo ou exigem compartilhamento de senha. Aqui está um método que não:

Faça USER2(vamos chamá-lo de Bob) executar os seguintes comandos (você pode substituir /tmppor qualquer diretório em que ambos os usuários tenham permissão para gravar, mas /tmpé ideal porque, por padrão, é persistente, o que impede um usuário mal-intencionado de subverter este processo. por Bob que é legível pelo mundo também funciona):

[bob@computer ~]$ touch /tmp/test.txt
[bob@computer ~]$ chmod 622 /tmp/test.txt

Isso cria um arquivo que pode ser gravado mundialmente, mas não legível.

Em seguida, USER1execute (vamos chamá-la de Alice) (se você for paranóico, Alice pode verificar as permissões primeiro para garantir que o arquivo seja de propriedade de Bob):

[alice@computer ~]$ dd if="$HOME/test.txt" of=/tmp/test.txt

Isso substitui o conteúdo de /tmp/test.txt. Se você deseja verificar a integridade do arquivo, Alice também deve gerar um hash do arquivo. Por exemplo:

[alice@computer ~]$ openssl sha1 < "$HOME/test.txt" > /tmp/test.txt.sha1

Em vez disso, você pode assinar digitalmente o arquivo ou qualquer outro método para garantir sua integridade.

E, finalmente, Bob move o arquivo e se apropria dele:

[bob@computer ~]$ mv /tmp/test.txt "$HOME" 
[bob@computer ~]$ chmod 600 "$HOME/test.txt"

E Bob pode verificar a integridade, se quiser. Nesse caso, ele deve verificar se apenas Alice pode escrever /tmp/test.txt.

[bob@computer ~]$ diff /tmp/test/txt.sha1 <(openssl sha1 < "$HOME/test.txt")

Se o arquivo foi copiado corretamente, isso não deve exibir saída.

Chris
fonte
-1

Antes de copiar um usuário para outro, você precisa fazer login como su user e, em seguida, usar o comando cp

sudo cp /home/shyam/Desktop/sparkhadoop_2.11-1.0.jar /home/hadoop/Desktop
Shyam Gupta
fonte
Isso não transferirá a propriedade, USER2mas a deixará como se rootfosse. -1
David Foerster
@DavidFoerster não estamos transferindo a propriedade, copiamos o arquivo de um usuário para outro usuário. usando usuário root, podemos transferir o arquivo. OK
Shyam Gupta