Как добавить noatime в fstab с помощью скрипта?

Спасибо за помощь, ilkkachu, я постараюсь больше использовать функцию, чтобы получить более чистый код.

Наконец-то я поместил свою переменную в статус функции.:

status() {
local POSTGRES_STATUS=$(ssh -t root@myhost "ps -f -u process|grep postgres|grep -v UID")
echo -e "\n"
echo -e "$POSTGRES_STATUS"
4
15.10.2021, 08:26
2 ответа

Это позволит достичь желаемого эффекта:

awk -i inplace '$2 == "/" && !($4 ~ /noatime/) { sub(/[[:space:]]*([^[:space:]]+[[:space:]]+){3}[^[:space:]]+/,"&,noatime") }1' /etc/fstab

Это немного более конкретно, чем то, что вы просили — ,noatimeбудет добавлено к четвертому полю, если это поле еще не содержит noatime, оно не смотрит на целая линия.

-i inplaceспецифичен для Gawk -; если не поддерживается, записать результат в новый файл:

awk '$2 == "/" && !($4 ~ /noatime/) { sub(/[[:space:]]*([^[:space:]]+[[:space:]]+){3}[^[:space:]]+/,"&,noatime") }1' /etc/fstab > /etc/fstab.new && mv /etc/fstab{.new,}

В обоих случаях я предполагаю, что сценарии установки вашего сервера выполняются от имени пользователя root.

(Спасибо Эду Мортону за надежную замену текста, позволяющую избежать проблем с потенциальными регулярными выражениями в четвертом поле при использовании sub!)

4
15.10.2021, 10:02

Вы можете сделать это, если GNU sed работает в расширенном режиме регулярных выражений (-E ). Он будет смотреть на строки, второе поле которых представляет собой одинокую косую черту '/' И четвертое поле еще не содержит целого слова 'noatime', тогда оно должно добавляться к четвертому слову.

sed -E -e '
  \:^\s*\S+\s+/\s:!b
  s/\S+/\n&\n/4
  /\n(.*,)?noatime(,.*)?\n/!s/\n/,noatime/2
  s/\n//g
' /etc/fstab
0
15.10.2021, 21:28

Теги

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