/etc/profileと/etc/bashrcでumaskをプログラムで維持する方法

/etc/profileと/etc/bashrcでumaskをプログラムで維持する方法

プログラムでファイルを追加する方法を探しています/etc/profile/etc/bashrc次の項目があります。

if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
  umask 002
else
  umask 022
fi

ifだから、上記の最初の文をプログラムで確認したいと思います。見つかった場合は、次の行がumask(コメントではない)であることを確認し、そうである場合は標準のumaskから外れた場合はリセットしてください。ファイル全体をコピーできますが、他の変更を妨げたくないことを知っています。誰かがsed / awk / grepを使用し、それを達成する方法についてのアイデアを共有または持つことができると確信しています。ログインシェルと非ログインシェルのumaskを維持する必要があります。これはこれを参照するhttps://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/configuring_basic_system_settings/ Assembly_managing-the-umask_configuring-basic-system-settings。ありがとうございます。

ベストアンサー1

これがなぜ意味があるのか​​はわかりませんが(コメントを参照)、操作は次のように実行できます。

sed -i".bak" '\_if \[ $UID -gt 199 ] && \[ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then_,/^[^#]*else/s/^\([^#]*umask\).*/\1 002/' /etc/profile /etc/bashrc

アドレス範囲には、対応する句ifと次のコメントなしの間のすべての行が含まれますelse。この行でumaskコメント解除をに変更します002

エスケープする必要があり、[すべてのスラッシュがエスケープされるのを防ぐために、最初のアドレスの区切り文字でアンダースコアを選択しました。

誰か/何かが実際にこれらのファイルを変更している場合は、その行に対してより柔軟なモードを使用することを検討できますif。そうしないと、if行が変更されたときにumaskスクリプトが中断されます。おそらく

sed -i".bak" '/if.*$UID *-gt *199/,/^[^#]*else/s/^\([^#]*umask\).*/\1 002/' /etc/profile /etc/bashrc

おすすめ記事