Shell скрипт одного пользователя для копирования файла в каталог, принадлежащий другому пользователю [duplicate]

0
27.04.2017, 06:20
4 ответа

Разрешения группы для моего каталога мешают вам удалить или создать файл в этом каталоге.

от имени user1 сначала выполните следующую команду:

chmod g+w mydirectory
0
28.01.2020, 04:46

Было бы лучше, если бы пользователь, которому нужно писать, то есть пользователь, которого вы копируете в, запустил скрипт. Таким образом, вам не нужно будет предоставлять специальные права на запись в целевом каталоге.

Кроме того, тест

if [ -f /myDirectory/*.tar.gz ]

неисправен. Тест -f принимает один аргумент, но если шаблон соответствует нескольким файлам, вы передаете несколько аргументов. Поскольку вы хотите очистить каталог myDirectory от сжатых архивов tar, достаточно

rm -f /myDirectory/*.tar.gz

установить флаг -f в rm приведет к тому, что он не выдаст ошибку, если нет файлов для удаления.

0
28.01.2020, 04:46

Ну, я вижу много ошибок:

  1. Вам не разрешено писать в мойКаталог. Только user2 разрешено писать туда.
  2. Вы путаете абсолютные пути с относительными. /myDirectory — это другой каталог, чем myDirectory. Это также может вызвать ошибку отказа в доступе, потому что ваш скрипт пытается скопировать его в корневую папку файловой системы myDirectory. Если myDirectory относится к пути из текущего пути командной строки (в контексте которого вызывается скрипт), то ./myDirectory будет правильным. В противном случае предоставьте нам более подробную информацию о том, где на самом деле находится myDirectory.Это важно, потому что область относительного пути к myDirectory может различаться по нескольким параметрам. Не зная вашего явного случая, ответ, связанный с этим, будет только общим ответом, который может быть неприменим к вашему конкретному случаю.
  3. Выражение условия [ и доступно только в Bash, но не в Shell. Определение Shell также зависит от вашей текущей рабочей системы UNIX. Как правило, в Linux он указывает на Bash, поскольку в Linux нет прямой реализации Shell, ни в BSD ее нет. Только Mac имеет собственную прямую реализацию Shell. Следовательно, Shell — это всего лишь теоретический стандарт UNIX, который в настоящее время встречается во многих различных диалектах и ​​интерпретациях этого теоретического документа, что действительно зависит от вашей текущей работающей системы UNIX. Так что лучше используйте лучше напрямую Bash. Это работает на 100 % на большинстве платформ UNIX. Я не знаю ни одной системы UNIX, в которой не был бы доступен Bash.

Еще несколько интересных моментов для размышления: Вы можете добавить несколько групп: пользователь1 и пользователь2. Затем вы можете изменить основную группу папок myDirectory на эту группу. Это, насколько я знаю, общий подход к этому.

Вы также можете использовать Bash с помощью команды /usr/bin/env shebang, которая гарантирует, что вы действительно окажетесь в любом Bash:

#!/usr/bin/env bash

Это также хороший подход для других языков сценариев. например perl, php и т. д.

-1
28.01.2020, 04:46

Это можно сделать с разрешениями группы. Вам нужно создать группу пользователей, добавить двух пользователей и изменить права собственности группы на целевой каталог. Сначала создайте группу:

groupadd newusergroup

Затем добавьте в нее пользователей:

usermod -G newusergroup user1
usermod -G newusergroup user2

Затем измените права доступа к целевому каталогу:

chgrp newusergroup /myDirectory

Это все при условии, что вы хотите, чтобы оба пользователя имели доступ к каталогу. Если вы хотите, чтобы доступ имел только пользователь 1, просто измените разрешения следующим образом:

chown user1.user1 /myDirectory
1
28.01.2020, 04:46

Теги

Похожие вопросы