Найдите шаблон, если он существует, затем замените всю строку, иначе вставьте новую строку после другого шаблона с помощью команды SED

Возможности установки 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.

0
05.06.2021, 18:54
2 ответа
sed -e '/MYLINE/d' -e '/^ANOTHER_PATTERN/a\
VAR=MYLINE' file

При этом удаляется строка, если она содержит шаблон MYLINE, и добавляется строка VAR=MYLINEк строке, начинающейся с шаблона ANOTHER_PATTERN. Добавьте опцию -iдля редактирования файла в место -, если ваша реализация sedподдерживает это.

3
28.07.2021, 11:26

Использованиеawk:

awk '/MYLINE/{next}; 
/^ANOTHER_PATTERN/{$0 = $0 ORS "VAR=MYLINE";}1' input

С выражением /MYLINE/{next}никаких дальнейших действий не предпринимается. Это, по сути, предотвращает печать записи, когда используется идиома awk1 для печати. Если найден другой шаблон, текущая входная запись($0)изменяется на $0, за которой следует новая строка, а затем VAR=MYLINE.

1
28.07.2021, 11:26

Теги

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