kopiowanie plików od jednego użytkownika do drugiego na jednym komputerze

20

Jak skopiować pliki lub katalogi od jednego użytkownika do innego użytkownika na tym samym komputerze za pośrednictwem terminala ?

Załóżmy, że w katalogu domowym użytkownika USER1 znajduje się jeden plik test.txt . Muszę skopiować ten plik do katalogu domowego USER2 na moim komputerze. Jak mogę to zrobić przez terminal?

nischalinn
źródło

Odpowiedzi:

26

Zakładając, że masz sudouprawnienia, wystarczy wykonać następujące polecenie.

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

Skopiuje plik z USER1 do USER2, a następnie zmieni właściciela kopii w / home / USER2 na USER2

Jeśli nie masz sudouprawnień, dwaj użytkownicy będą musieli upewnić się, że masz uprawnienia do odczytu w katalogu USER1 i dostępu do zapisu w katalogu USER2. Jeśli masz dostęp, możesz wpisać polecenie:

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

Spowoduje to skopiowanie danego pliku, ale USER2 może nie być w stanie manipulować plikiem, dopóki nie uzyska odpowiednich uprawnień.

Charles Green
źródło
Działa to tylko wtedy, gdy USER1 ma dostęp sudo, co może nie mieć miejsca w systemie z wieloma użytkownikami.
BostonHiker
Inną opcją byłoby ustawienie uprawnień we własnym folderze, aby umożliwić innym użytkownikom ich pobranie, ale ta opcja jest znacznie łatwiejsza, jeśli to możliwe.
Geary Shull
@BostonHiker Przyjąłem założenie, że osoba wykonująca kopię nie jest ani USER1 ani USER2 i ma uprawnienia sudo. Jest to prawdopodobnie złe założenie z mojej strony.
Charles Green
@Charles Green - edytuj swoją odpowiedź, aby podać swoje założenia, w przeciwnym razie będzie ona niekompletna / myląca.
BostonHiker
@BostonHiker Gotowe. Dzięki za bycie szczerym.
Charles Green,
6

jeśli nie masz uprawnień sudo, ale możesz zalogować się z dwoma użytkownikami, możesz użyć scp z localhost:

scp file1 user2@localhost:/home/user2/
głośno
źródło
Co sprawia, że ​​myślisz, że chodzi o zdalny host lub że na danym komputerze działa serwer SSH / SFTP?
David Foerster,
1
Zakładając, że masz zainstalowany SSH
głośno
5

Jako USER1:

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

Jako USER2:

cp /tmp/[filename] .

Jako USER1:

rm /tmp/[filename]
Ryan J McCall
źródło
Deverver więcej entuzjastów :)
Neeraj Jain
1

Załóżmy, że albo nie masz zainstalowanego ssh, albo nie chcesz nie udostępniać kluczy / sekretów.

Załóżmy, że użytkownik 1 należy do grupy 1, a użytkownik 2 - do grupy 2, a zarówno użytkownik 1! = Użytkownik 2, jak i grupa 1! = Grupa 2.

Utwórz wspólną grupę, group3s.

addgrp group3

Dodaj zarówno user1, jak i user2 do group3s.

Utwórz katalog we wzajemnie dostępnym miejscu, w którym jeden użytkownik jest właścicielem, ale ma grupową własność 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

Ale załóżmy, że nie możesz utworzyć nowej, udostępnionej grupy i umieścić obu użytkowników w tej grupie?

Utwórz katalog i nadaj mu 770 uprawnień,

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

Następnie jako root / admin zmień własność grupy na grupę innego użytkownika,

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

Polecenie chmod g + s ustawia bit setgid tak, aby pliki umieszczone w katalogu miały własność grupy ustawioną na group2.

ChuckCottrill
źródło
0

Każda inna odpowiedź tutaj wymaga dostępu do konta root, pozwala na dowolną do konta użytkownikowi na tym samym komputerze na skopiowanie pliku lub wymaga udostępniania hasła. Oto metoda, która nie:

Poproś USER2(nazwijmy go Bob) uruchomienie następujących poleceń (możesz zastąpić /tmpdowolnym katalogiem, do którego obaj użytkownicy mają uprawnienia do zapisu, ale /tmpjest idealny, ponieważ domyślnie jest lepki, co uniemożliwia złośliwemu użytkownikowi zniszczenie tego procesu. autorstwa Boba, który jest czytelny na całym świecie, działa również):

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

Spowoduje to utworzenie pliku, który można zapisywać na całym świecie, ale nie można go odczytać.

Następnie USER1uruchom (nazwijmy ją Alice) (jeśli jesteś paranoikiem, Alice może najpierw sprawdzić uprawnienia, aby upewnić się, że plik jest własnością Boba):

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

To nadpisuje zawartość /tmp/test.txt. Jeśli chcesz sprawdzić integralność pliku, Alice powinna również wygenerować skrót pliku. Na przykład:

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

Możesz zamiast tego podpisać cyfrowo plik lub dowolną inną metodą gwarantującą jego integralność.

I w końcu Bob przenosi plik i przejmuje na niego własność:

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

A Bob może sprawdzić uczciwość, jeśli chce. Jeśli tak, powinien sprawdzić, czy tylko Alice może pisać /tmp/test.txt.

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

Jeśli plik został skopiowany poprawnie, nie powinien on wyświetlać danych wyjściowych.

Chris
źródło
-1

Przed skopiowaniem jednego użytkownika do drugiego musisz zalogować się jako użytkownik su, a następnie użyć polecenia cp

sudo cp /home/shyam/Desktop/sparkhadoop_2.11-1.0.jar /home/hadoop/Desktop
Shyam Gupta
źródło
To nie przeniesie własności, USER2ale pozostawi to tak, rootjakby. -1
David Foerster,
@DavidFoerster nie przenosimy prawa własności, kopiujemy plik od jednego użytkownika do innego użytkownika. za pomocą użytkownika root możemy przenieść plik. OK
Shyam Gupta,