Возможности установки umask сильно различаются между дистрибутивами Linux и Unix.
Способ, которым вы пытаетесь это сделать (в поле "gecos" в /etc/passwd
), зависит от того, pam_umask
установлен и настроен. Насколько я знаю, это по крайней мере так по умолчанию в Debian и, возможно, в дистрибутивах, основанных на Debian, таких как Ubuntu, Mint и т. д.
Без pam_umask
вы можете поместить строку umask 002
в профиль оболочки или файл rc -в домашнем каталоге пользователя (, например.:.bashrc
или .profile
). Или что-то подобное в файле конфигурации системы -, например./etc/profile
(для sh
иbash
)или/etc/bashrc
(только для bash):
if [ "$USER" = "souser" ] ; then
umask 0002
else
umask 0022
fi
Вы можете проверить, было ли это успешно в любом случае, с помощью простой команды umask
, которая выведет текущий эффективный umask.
Обратите внимание, что фактическая установка разрешений по-прежнему остается за приложением. Если вы используете какую-либо другую программу или команду, которая в своем коде жестко запрограммирована, чтобы никогда не устанавливать групповые разрешения на запись в создаваемую ею папку, вам придется либо изменить код этой программы, либо впоследствии установить разрешения вручную. Именно так и должен работать UNIX/Linux.
sed -e '/MYLINE/d' -e '/^ANOTHER_PATTERN/a\
VAR=MYLINE' file
При этом удаляется строка, если она содержит шаблон MYLINE
, и добавляется строка VAR=MYLINE
к строке, начинающейся с шаблона ANOTHER_PATTERN
. Добавьте опцию -i
для редактирования файла в место -, если ваша реализация sed
поддерживает это.
Использованиеawk
:
awk '/MYLINE/{next};
/^ANOTHER_PATTERN/{$0 = $0 ORS "VAR=MYLINE";}1' input
С выражением /MYLINE/{next}
никаких дальнейших действий не предпринимается. Это, по сути, предотвращает печать записи, когда используется идиома awk
1 для печати. Если найден другой шаблон, текущая входная запись($0
)изменяется на $0
, за которой следует новая строка, а затем VAR=MYLINE
.