再起動する前に、生成/変更/アクセスされたファイルをどのように検索しますか?

再起動する前に、生成/変更/アクセスされたファイルをどのように検索しますか?

リモートシステム(私は管理者ではありません)でTMPDIR「.profile」に代替を設定しました(システムのデフォルトスペースが非常に制限されているため)。

TMPDIRもちろん、この選択肢は再起動時に消去されません。そのため、定期的に(またはログイン時に)ディレクトリを消去したいと思います。ただし、ログインしていない状態では長時間実行されるスクリプトを使用して何度もログインすることがあり、rm実際にはすべて選択することはできません。

bash最新のリブート前の特定のディレクトリでファイルを見つけて整理する方法(好ましくは一般的なツールを使用できます)はありますかTMPDIR

答え1

Thomasの答えと同じですが、/proc/statのbtimeフィールドを使用して開始時間を見つけるより簡単な方法

$ DT=$(awk '$1 ~ /btime/ { print "print scalar localtime("$2")" }' /proc/stat|perl)
$ echo $DT
Fri Nov 13 15:04:28 2015
$ last reboot|head -1
reboot   system boot  3.16.0-4-amd64   Fri Nov 13 15:04 - 22:53 (5+07:49)  
$ touch -d "$DT" /tmp/foo

-newerオプションでfindを使用してください。

答え2

この単純な行は、TMPDIR最後の再起動前に変更されたすべてのファイルとディレクトリを削除するのに役立ちます。

$ find $TMPDIR -mindepth 1 -depth -not -newermt "$(uptime -s)" -delete

お使いのコンピュータはこの機能をサポートする必要があり、この機能を機能させるにはオプションがuptime -s必要です。find-newerXY

これは、(t)タイムスタンプ(この場合は出力)を参照してから(m)変更されたファイルとディレクトリを見つけるための-newermt特別な形式です。-newerXYuptime -s

よりfind手動詳細-newerXY

変更されたファイルを見つけるには、-not逆検索を使用してください。-newermt今後または、最後の再起動後ではなく、まさに最後の再起動の時点で。

-depthディレクトリ自体よりもディレクトリの内容を処理することに興味があります(再帰削除に重要)。

-mindepth 1TMPDIRディレクトリ自体が保存されていることを確認してください。

欲しいならリストそのファイルを削除する代わりに-delete

リストしたい場合そして削除するには追加するだけです-printf "%p\n" -delete

答え3

このコメントはuptime -s最近登場しました(Linux固有のコードに表示されます)。2012年末)。

lastシステムブートタイムスタンプを一覧表示する出力を使用する方が移植性が高い場合があります。

tom      pts/0        michener.jexium- Wed Nov 18 17:00   still logged in
reboot   system boot  3.2.0-4-amd64    Wed Nov 18 16:47 - 20:36  (03:49)
tom      pts/0        michener.jexium- Wed Nov 18 04:12 - down   (01:21)
reboot   system boot  3.2.0-4-amd64    Wed Nov 18 04:04 - 05:33  (01:29)
tom      pts/0        michener.jexium- Tue Nov 17 17:03 - down   (04:24)

そして、(grepまたはawkを使用して)最新の「restart」行のタイムスタンプを取得し、次を使用します。それtouchたとえば、パラメータとして

LAST=$(last | grep -E '^reboot ' | sed -e 's/^.\{39\}//' -e 's/\(.\{16\}\).*/\1/' | head -n 1)

-newerこれにより、次のオプションが提供されます。find、そして一日の数分で再起動時間を完了します。

FILE=/tmp/foo
touch -d "$LAST" $FILE
find $MY_TMPDIR ! -newer $FILE -exec echo rm -rf {} \;

もちろん、弱点は次の形式を理解することです。last出力(ただし標準はありませんそれ)。

答え4

uptime以下は、出力を解析し、開始から合計時間(分)を計算し、数分前に変更されたファイルを見つけるスクリプトです。私はこれをFreeBSD 10.2、Debian Jessie 8、Ubuntu Trusty 14.04でテストしました。uptime他のシステムの出力形式についてはわかりません。

その中核には、他のコマンドで使用するために、および稼働時間(分)を知る必要がある状況でコマンドファイルに別々に配置できる関数awk内のスクリプトがあります(最大1分以内)。uptime_minutesfind

ファイルに保存して実行します。sh filename directory ...ここでは、filenameスクリプト用に選択した名前、およびdirectory検索したいディレクトリです。

    #!/bin/sh

    uptime_minutes() {
        uptime |
        awk '
            {
                for (i=1; i<=NF; i++) {
                    if ($i == "up") {
                        split($(i+3), hhmm, "[:,]")
                        print ($(i+1) * 24 * 60) + (hhmm[1] * 60) + hhmm[2]
                        exit
                    }
                }
            }
        '
    }
    find "${@:?}" -mmin +$(uptime_minutes) # -exec rm {} \;

"${@:?}"ディレクトリパラメータを指定しないと、エラーで印刷されます。

ファイル削除コードは最後にコメントアウトされています。#ファイル名を印刷するのではなく、実際にファイルを削除したい場合は削除してください。

関連情報