/etc/init.d/sudo
私はUbuntu 14.04 Linuxシステムでこのスクリプトを見ています。台本を読んでこのようなフレーズを見つけました。
find /var/lib/sudo -exec touch -d @0 '{}' \;
ここでのポイントは何ですか@0
?上記のステートメントは何をしますか?
ベストアンサー1
bash
これはまたはとは何の関係もありませんsudo
。このfind
コマンドは-exec
ジョブを使用して、見つかった各ファイルに対して指定されたコマンドを実行します。この場合、実行されるコマンドは次のようになります。
touch -d @0
man touch
GNUシステムをチェックすると、次のようなものが見つかります。
-d, --date=STRING
parse STRING and use it instead of current time
したがって、これは-d
ターゲットファイルに設定したい日付を選択する1つの方法です。 GNU実装は、これが次のように定義された日付であることをtouch
伝えます。@
touch
エポック以降。実際には0秒なので、UNIX時間の開始を意味します。これを確認する簡単な方法は、date
GNUコマンドに同じ日付を提供することです。
$ TZ=UTC date -d @0
Thu Jan 1 00:00:00 UTC 1970
したがって、表示されるコマンドはその中のすべてのファイルとディレクトリを検索し、最後の/var/lib/sudo
変更日を1970年1月1日木曜日00:00 UTCに設定します。
この行が存在する理由は、次によく説明されています。コメント次のように:
@crisronこの行の目的は、以前のsudoインスタンスのすべてのsudoパスワードが期限切れになっていることを確認することです。ユーザーが初めてsudoを実行すると、セッションごとにこのディレクトリにファイルが作成されます。その後、Sudoは次回実行されるときにファイルのタイムスタンプをチェックして、パスワードを尋ねるかどうかを判断します。この行は、sudoデーモンが再起動したときにユーザーが次にsudo操作を実行したときにすべてのパスワードを再入力する必要があることを保証します。 – クロウ