1

システムにログインしたユーザーのリストを検索するには、「last」を使用する必要があります。

last -f /var/log/wtmp <username>

そのディレクトリ内の bzip 圧縮されたアーカイブ ファイルの数を考慮し、共有システムを使用していることを考慮して、インライン bzcat を含めようとしていますが、何も機能していないようです。次の組み合わせを試しましたが、成功しませんでした。

last -f <"$(bzcat /var/log/wtmp-*)"
last -f <$(bzcat /var/log/wtmp-*)
bzcat /var/log/wtmp-* | last -f -

私を夢中にさせます。どんな入力でも素晴らしいでしょう!

4

2 に答える 2

1

一度に 1 つのファイルに対してのみ<I/O リダイレクトを使用できます。

何かが機能する場合、例の最後の行はそれですが、標準入力を意味するものとしてlast認識しますか? -(別の回答のコメントは「いいえ、last認識しません」を示してい-ます。これで、すべての慣習に従うことが重要である理由がわかります。そうしないと、人生が難しくなります。)それができない場合は、古典的に行う必要があります。シェルループの方法。

for file in /var/log/wtmp-*
do
    last -f <(bzcat "$file")
done

まあ、そのようなプロセス置換を使用するのは純粋なBashです...古典的な方法はもっと似ています:

tmp=/tmp/xx.$$   # Or use mktemp
trap "rm -f $tmp; exit 1" 0 1 2 3 13 15

for file in /var/log/wtmp-*
do
    bzcat $file > $tmp
    last -f $tmp
done

rm -f $tmp
trap 0
于 2012-02-20T16:33:59.450 に答える
1

last(Linux 版と仮定して) パイプから読み取ることはできません。bunzip2ファイルを一時的に読み取る必要があります。

tempfile=`mktemp` || exit 1

for wtmp in /var/log/wtmp-*; do
    bzcat "$wtmp" > "$tempfile"
    last -f "$tempfile"
done

rm -f "$tempfile"
于 2012-02-20T16:31:24.207 に答える