Запуск с конвейера:
foo | bar | baz
Вот общее решение с помощью только оболочку POSIX и никакие временные файлы:
exec 4>&1
error_statuses="`((foo || echo "0:$?" >&3) |
(bar || echo "1:$?" >&3) |
(baz || echo "2:$?" >&3)) 3>&1 >&4`"
exec 4>&-
$error_statuses
содержит коды состояния любых неудавшихся процессов, в произвольном порядке, с индексами для сообщения, какая команда испустила каждое состояние.
# if "bar" failed, output its status:
echo "$error_statuses" | grep '1:' | cut -d: -f2
# test if all commands succeeded:
test -z "$error_statuses"
# test if the last command succeeded:
! echo "$error_statuses" | grep '2:' >/dev/null
Отметьте кавычки вокруг $error_statuses
в моих тестах; без них grep
не может дифференцироваться, потому что новые строки принуждены к пробелам.
Я нашел его: Применение полномочий по умолчанию
От статьи:
chmod g+s <directory> //set gid
setfacl -d -m g::rwx /<directory> //set group to rwx default
setfacl -d -m o::rx /<directory> //set other
Затем мы можем проверить:
getfacl /<directory>
Вывод:
# file: ../<directory>/
# owner: <user>
# group: media
# flags: -s-
user::rwx
group::rwx
other::r-x
default:user::rwx
default:group::rwx
default:other::r-x
Это дополнение к ответу Криса, оно основано на моем опыте на моей системе Arch Linux.
Использование переключателя default (-d
) и переключателя modify (-m
) изменит только разрешения по умолчанию, но оставит существующие разрешения нетронутыми:
setfacl -d -m g::rwx /<directory>
Если вы хотите изменить всю структуру разрешений папки, включая существующие (вам придется сделать дополнительную строку и сделать ее рекурсивной с помощью -R
):
setfacl -R -m g::rwx /<directory>
Примеры:
# Gives group read,write,exec permissions for currently existing files and
# folders, recursively.
setfacl -R -m g::rwx /home/limited.users/directory
# Revokes read and write permission for everyone else in existing folder and
# subfolders.
setfacl -R -m o::x /home/limited.users/directory
# Gives group rwx permissions by default, recursively.
setfacl -R -d -m g::rwx /home/limited.users/directory
# Revokes read, write and execute permissions for everyone else.
setfacl -R -d -m o::--- /home/limited.users/directory
(CREDIT to markdwite in comments for the syntax of the revoke all privileges line)
С помощью следующей команды вы можете установить разрешение по умолчанию для файла:
chacl -R filename
Добавьте себя/зарегистрированного пользователя в группу данных www -, чтобы мы могли работать с файлами, созданными сервером данных www -
sudo usermod -a -G www-data $USER
Необходимо перезапустить/повторно войти в систему, чтобы новая добавленная группа вступила в силу
cd /var/www
Добавьте данные www -в качестве члена группы в папку html, а вашего пользователя в качестве владельца, чтобы они принадлежали нам, а также члену группы
sudo chown -R $USER:www-data html
Введите свое имя пользователя вместо USER
При необходимости установите права на чтение, запись и выполнение, (ugo )u=пользователь, g=группа, o=другие
sudo chmod 750 html
Задайте GID html, теперь вновь созданные файлы в html будут наследовать права владения:
sudo chmod g+s html
Это создает правила по умолчанию для вновь созданных файлов/каталогов в каталоге html и подкаталогах.
sudo setfacl -R -d -m u::rwX -m g::rX -m o::000 html
Сделайте SELinux, если он установлен,игнорировать требование контекста данных www -, чтобы разрешить права на запись
sudo setsebool -P httpd_unified 1
список каталогов для просмотра примененных новых разрешений
ls -ld html
Возвращает это
drwxrwsr-x+ 3 html www-data
Знак + в конце означает, что для каталога установлен ACL (список управления доступом).
Ссылка:Ссылка на форум
Приведенный выше ответ не обновляет права доступа к исполняемому файлу, хотя они и отображаются. Использоватьchacl -r u::rwx,g::r-x,o::r--./
setfacl -d -m g::rwX /<directory>
– Adrian Gunawan 31.08.2017, 03:50