Есть два подхода. Другие уже упоминали tee. Второй подход - это команда "script" и ее варианты, которые записывают все, что отправляется в stdout процессов. Если вам нужно перенаправление в скрипте, то используйте
#!/bin/bash
{
echo start
echo "My first name is $1"
echo "My surname is $2"
echo "Total number of arguments is $#"
echo end
} | tee logfile
Вместо изменения umask
вы можете использовать параметр usergroups
для pam_umask
, с этот пользователь и группа имеют те же разрешения, что и классический способ unix для совместного использования папок.
# /etc/pam.d/login or
# /etc/pam.d/common-session or system-auth
session optional pam_umask.so usergroups
Для сеанса входа в систему: добавьте umask 0002
в свой $ HOME / .profile
(или / etc / profile
).
Для сеанса Gnome: добавьте umask 0002
в свой $ HOME / .gnomerc
Некоторые приложения Gnome запускаются systemd --user
,в этом случае umask устанавливается systemd на 0022
независимо от настроенного значения для pam _umask . Я не знаю никаких обходных путей, но я открылпроблемув системе отслеживания проблем systemd github. Об этой проблеме также сообщается вGnome bugzilla.
Маска Umask, установленная с помощью pam_umask
, работает должным образом для приложений, которые не запускаются с помощью systemd --user
.
В отношении Ubuntu bugzilla предлагается один обходной путь, заключающийся в переопределении службы systemd для всех уязвимых приложений.
Обновление:pam _umask должно работать должным образом для systemd версии 246 и новее. Новые выпуски дистрибутива должны поставляться с версией, в которой ошибка исправлена.
Расследовать это самому
Вы можете перечислить процессы, запущенные в вашей системе, в формате дерева (родительские/дочерние процессы ), используя:
pstree -Tapu
НайдитеPIDдля:(1)экземпляра вашего сеанса systemd --пользователя ;(2)запускаемое им приложение , такое как gedit, которое будет отображаться как дочерний процесс для systemd --пользователя ; и(3)процесс в вашем сеансе не запущен пользователем systemd --.
Сравните umasks , указанные в procfs:
grep Umask /proc/<pid>/status
systemd --пользователь сам(1)и процессы не запущенные им(3)должны иметь правильный umask который был установлен pam _umask . Процессы, запущенные пользователем systemd --(2 ), будут иметь umask 0022
.
При установке Fedora 29 с помощью Gnome я обнаружил, что программы, запускаемые с помощью средства запуска Gnome, оставляют файлы, другие для чтения, 0022. Очевидно, Pam использует /etc/login.defs, как отмечалось выше. Однако редактирование там маски 0077 не изменило поведения Гнома. Мне также пришлось отредактировать /etc/profile и /etc/bashrc -, оба из которых возвращали значение 0022.
Было бы неплохо, если бы в Fedora было одно место для этого, но записи в /etc/profile и /etc/bashrc устанавливают маску по-разному для пользователей с ID выше или ниже 200, так что кажется, что одна маска не подходит все.
Хотя на данный момент это исправление,проблема не решена полностью, поскольку пользователь gnome по-прежнему не может установить свою собственную маску umask, поскольку она применяется к приложениям, запускаемым из панели запуска gnome. Кажется, у Gnome должна быть опция конфигурации для этого umask. (Может и есть, но я не нашел.)
У меня есть обходной путь по крайней мере на Fedora 31:
sudo vi /etc/profile.d/umask.sh
umask <your_umask>
sudo vi /etc/login.defs
UMASK <your_umask>
sudo vi /usr/local/bin/systemd-user
/usr/lib/systemd/systemd --user
sudo chmod a+x /usr/local/bin/systemd-user
sudo vi /usr/lib/systemd/system/user@.service
ExecStart=-/usr/local/bin/systemd-user