cronジョブの実行問題を解決するためのコマンドをstackoverflowで見ました。 https://stackoverflow.com/questions/21926465/issues-running-cron-in-docker-on- Different-hosts 私はUnixコマンドに初めて触れたので、このコマンドが正確に何をしているのかわかりません。各部の機能を教えてくれる専門家はいますか?
sed --regexp-extended --in-place 's/^session\s+required\s+pam_loginuid.so$/session optional pam_loginuid.so/' /etc/pam.d/crond
答え1
sed
次のように使用できるコマンドラインテキストエディタですsed -flags command file
。正規表現を使用した検索と置換に最も一般的に使用されます。いろんなことができることがわかったhttps://www.grymoire.com/Unix/Sed.html良い初心者ガイドを作成します。 (man
ページよりもユーザーフレンドリーです。)
正規表現は、特定の項目ではなくテキストパターンを見つけることができる複雑なワイルドカードシステムのようなものです。
--regexp-extended
より機能的な拡張正規表現を使用するように指示します。
--in-place
出力をシェルまたは標準出力に印刷するのではなく、ファイルを変更するように指示します。
's/foo/bar'
sedの代替コマンドです(sはAlternativeを表します)。各行で最初の「foo」を見つけて「bar」に置き換えます。
^session
:^
正規表現の行の先頭を示します。
\s+
:\s
「すべての空白」を意味します。つまり、正規表現のスペースやタブ、または類似の文字は+
1つ以上を意味するため、1つ以上のスペース/タブ/などと一致します。+
正規表現を拡張する必要がある
...nuid.so$
:$
正規表現の行末を示します。
したがって、これは似ていますが、より多くのスペース/タブを持つファイルのすべての行を見つけて、1つのスペースに置き換え、ファイルから、にsession optional pam_loginuid.so
置き換えることです。session optional pam_loginuid.so
required
optional
/etc/pam.d/crond
これは&&
、「このコマンドが0を返す場合は次のコマンドを実行します」を意味し、bashのほとんどは競合しない場合は0を返します。 sedは置き換える項目が見つからない場合でも0を返すため、ほとんど常にこれが発生します。
最後のコマンドは\
改行を無視するので、何かが機能しない限り、次の行のコマンドも実行されます。
したがって、基本的に追加のスペースを変更してrequired
削除しますが、これが一般的に行われている操作をoptional
特定するのに役立つことを願っています。sed 's/thing/otherThing/'