シェルスクリプトで@0の意味

シェルスクリプトで@0の意味

/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 touchGNUシステムをチェックすると、次のようなものが見つかります。

   -d, --date=STRING
          parse STRING and use it instead of current time

したがって、これは-dターゲットファイルに設定したい日付を選択する1つの方法です。 GNU実装は、これが次のように定義された日付であることをtouch伝えます。@touchエポック以降。実際には0秒なので、UNIX時間の開始を意味します。これを確認する簡単な方法は、dateGNUコマンドに同じ日付を提供することです。

$ 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操作を実行したときにすべてのパスワードを再入力する必要があることを保証します。 – クロウ

おすすめ記事