Как скопировать какие-либо файлы или каталоги от одного пользователя другому пользователю в той же машине через терминал?
Предположим, что существует один файл test.txt в корневом каталоге USER1. Я должен скопировать тот файл в корневой каталог USER2 в моей машине. Как я могу сделать это через терминал?
Предположение, что Вы имеете sudo
полномочия следующая команда, сделает.
sudo cp /home/USER1/FNAME /home/USER2/FNAME && sudo chown USER2:USER2 /home/USER2/FNAME
скопирует файл от USER1 до USER2, и затем изменит владельца копии в/home/USER2 к USER2
, Если Вы не будете иметь sudo
полномочия, тогда эти два пользователя должны будут удостовериться, что Вы прочитали полномочия на каталоге USER1 и доступ для записи на каталоге USER2. Если у Вас есть эти доступы, можно ввести команду:
cp /home/USER1/FNAME /home/USER2/FNAME
Это скопирует рассматриваемый файл, но USER2 не может быть в состоянии управлять файлом, пока у них нет соответствующих полномочий.
если у Вас нет sudo полномочий, но можно войти в систему с этими двумя пользователями затем, можно использовать scp с localhost:
scp file1 user2@localhost:/home/user2/
Как USER1:
cp [filename] /tmp
chmod 777 /tmp/[filename]
как USER2:
cp /tmp/[filename] .
как USER1:
rm /tmp/[filename]
Примите Вас или не имейте ssh установленным или не могите сделать, не хотят совместно использовать ключи/секреты.
предположим user1 находится в group1, и user2 находится в group2 и обоих user1! = user2 и group1! = group2.
Создают общую группу, group3s.
addgrp group3
Добавляют и user1 и user2 к group3s.
Создают каталог во взаимно доступном месте, где один пользователь владеет, но имеет владение группы 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
, Но, предположите, что Вы не можете создать новую, общую группу и разместить обоих пользователей в ту группу?
Создают каталог и дают ему 770 полномочий,
mkdir $place/shared && chown user1.group1 $place/shared && chmod 770 $place/shared;
Затем как корень/администратор, изменяют владение группы на группу другого пользователя,
sudo bash
chgrp group2 $place/shared && chmod g+s $place/shared
, команда chmod g+s устанавливает бит setgid так, чтобы файлам, помещенным в каталог, установили владение группы на group2.
Прежде, чем собраться скопировать одного пользователя в другого необходимо войти в систему как su пользователь, и затем Вы используете CP команды
sudo cp /home/shyam/Desktop/sparkhadoop_2.11-1.0.jar /home/hadoop/Desktop
Любой ответ здесь требует корневого доступа, позволяет любому пользователю на той же машине копировать файл или требует совместного использования пароля. Вот метод, который не делает:
Иметь USER2
(давайте назовем его Bob), выполните следующие команды (можно заменить /tmp
с любым каталогом, который у обоих пользователей есть полномочия записать в, но /tmp
идеально, потому что по умолчанию это липко, который препятствует тому, чтобы злонамеренный пользователь ниспровергал этот процесс. Каталог, принадлежавший Bob, который читаем миром также, работает):
[bob@computer ~]$ touch /tmp/test.txt
[bob@computer ~]$ chmod 622 /tmp/test.txt
Это создает файл, который является мировым перезаписываемым, но не читаемым.
Затем имейте USER1
(давайте позвоним ее Alice), выполненный (если Вы параноики, Alice может проверить полномочия сначала для проверки, файл принадлежит Bob):
[alice@computer ~]$ dd if="$HOME/test.txt" of=/tmp/test.txt
Это перезаписывает содержание /tmp/test.txt
. Если Вы хотите проверить целостность файла, Alice должна также генерировать хеш файла. Например:
[alice@computer ~]$ openssl sha1 < "$HOME/test.txt" > /tmp/test.txt.sha1
Можно вместо этого снабдить цифровой подписью файл или любой другой метод гарантии его целостности.
И наконец Bob перемещает файл и берет владение его:
[bob@computer ~]$ mv /tmp/test.txt "$HOME"
[bob@computer ~]$ chmod 600 "$HOME/test.txt"
И Bob может проверить целостность, если ему нравится. Если так, он должен проверить, чтобы удостовериться, что только Alice может записать в /tmp/test.txt
.
[bob@computer ~]$ diff /tmp/test/txt.sha1 <(openssl sha1 < "$HOME/test.txt")
Если бы файл был скопирован правильно, то это не должно отображать вывод.