Разрешения группы
для моего каталога
мешают вам удалить или создать файл в этом каталоге.
от имени user1
сначала выполните следующую команду:
chmod g+w mydirectory
Было бы лучше, если бы пользователь, которому нужно писать, то есть пользователь, которого вы копируете в, запустил скрипт. Таким образом, вам не нужно будет предоставлять специальные права на запись в целевом каталоге.
Кроме того, тест
if [ -f /myDirectory/*.tar.gz ]
неисправен. Тест -f
принимает один аргумент, но если шаблон соответствует нескольким файлам, вы передаете несколько аргументов. Поскольку вы хотите очистить каталог myDirectory
от сжатых архивов tar
, достаточно
rm -f /myDirectory/*.tar.gz
установить флаг -f
в rm
приведет к тому, что он не выдаст ошибку, если нет файлов для удаления.
Ну, я вижу много ошибок:
мойКаталог
. Только user2
разрешено писать туда. /myDirectory
— это другой каталог, чем myDirectory
. Это также может вызвать ошибку отказа в доступе, потому что ваш скрипт пытается скопировать его в корневую папку файловой системы myDirectory
. Если myDirectory
относится к пути из текущего пути командной строки (в контексте которого вызывается скрипт), то ./myDirectory
будет правильным. В противном случае предоставьте нам более подробную информацию о том, где на самом деле находится myDirectory
.Это важно, потому что область относительного пути к myDirectory
может различаться по нескольким параметрам. Не зная вашего явного случая, ответ, связанный с этим, будет только общим ответом, который может быть неприменим к вашему конкретному случаю. [
и
доступно только в 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 и т. д.
Это можно сделать с разрешениями группы. Вам нужно создать группу пользователей, добавить двух пользователей и изменить права собственности группы на целевой каталог. Сначала создайте группу:
groupadd newusergroup
Затем добавьте в нее пользователей:
usermod -G newusergroup user1
usermod -G newusergroup user2
Затем измените права доступа к целевому каталогу:
chgrp newusergroup /myDirectory
Это все при условии, что вы хотите, чтобы оба пользователя имели доступ к каталогу. Если вы хотите, чтобы доступ имел только пользователь 1, просто измените разрешения следующим образом:
chown user1.user1 /myDirectory