私はSolaris 10サーバー上のすべてのユーザーの最近のログインを報告する方法を見つけようとしています。コマンドの出力から始まりますlast
。このコマンドを使用すると、次のような出力が得られます。
bd9439 pts/1 vpn-xxx-xx-xxx-x Fri Oct 25 10:46 still logged in
vf7854 pts/1 vpn-xxx-xx-xxx-x Fri Oct 25 10:23 - 10:38 (00:15)
マニュアルページによると、日付と時刻の形式はロケール設定によって制御されます。私はロケール設定をほとんど使用しません。日付の「年」部分を含むようにディスプレイを変更するために使用できるものはありますか?次のような出力ラインを取得したいと思います。
bd9439 pts/1 vpn-xxx-xx-xxx-x Fri Oct 25 2013 10:46 still logged in
vf7854 pts/1 vpn-xxx-xx-xxx-x Fri Oct 25 2013 10:23 - 10:38 (00:15)
last
マニュアルページがコマンド自体の出力を参照しているのか、それともデータが実際に/ var / adm / wtmpxに保存されているのかはわかりません。
この「最後のログイン」属性を取得する別の方法がある場合は、これについて学びたいです。
答え1
クラスは文脈を提供し、クラスは叫んでいます。
あなたが遭遇した例は、私がSolarisシステム管理が好きではない主な理由を示しています。簡単なことはありません。
ロケールが実際にタイムスタンプの一部の順序を変更する以外の操作を実行しているかどうかはわかりません。 Solarisがこれを1年間提供するように説得する方法を知っている人がいる場合は、興味がありますが、last
息を止めません。ソフトウェア開発のためのSunの注文は「技術的に可能」なようです。
Sunは、彼らが絶対に必要とする機能を開発した後、ほぼそこで止まったようです。したがって、一般的に受け入れられているこのような解決策が得られ、一般的な問題の解決策のリストを維持するだけです。
私が見つけた唯一の方法は、/usr/lib/acct/fwtmp
パイプの内容全体をテキスト出力を操作するために使用する他のプログラム(、など)にダンプすることです。/var/adm/wtmpx
grep
tac
sed
ボーナス:ファイルの終わりを見つけて固定wtmpx
レコード長だけ後ろに移動するのは難しいので、ファイルに表示される内容だけをfwtmp
印刷してください。wtmpx
したがって、tac
実際には最も古い情報(例:少なくとも可能なユースケースですが、他のコメントです)。
システムが稼働している期間によってはwtmpx
若干大きくなる可能性があるため、コーヒーを飲みたい場合や、タイヤの空気圧が不足していることを確認し、休憩しながら本1〜2冊を読むこともできます。それから。
あなたの質問に対する実際の答え:
last
以下は、ログイン履歴の表示に興味があるほとんどの人に機能する模擬コマンドです。
# cat /var/adm/wtmpx | /usr/lib/acct/fwtmp | tac | head
wtmpx
に供給するファイルを提供していないため、パイプで接続する必要があることがわかりますfwtmp
。これは、ほとんどのユースケースでTechnically Works™を介して入力した場合は、stdin
いくつか作成する必要がないためです。追加のコード行。だから彼らは管理者がそうするようにしておくほうがいいです。
以下は、私が管理しているシステムの上記の出力例です。
[root@atum root]# cat /var/adm/wtmpx | /usr/lib/acct/fwtmp | tac | head
jadavis6 ts/1 pts/1 19410 7 0000 0000 1382723864 157168 0 19 ditirlns01.xxx.edu Fri Oct 25 13:57:44 2013
jadavis6 sshd 19404 7 0000 0000 1382723864 133973 0 19 ditirlns01.xxx.edu Fri Oct 25 13:57:44 2013
oracle sshd 6640 8 0000 0000 1382713401 157107 0 0 Fri Oct 25 11:03:21 2013
oracle ts/1 pts/1 6647 8 0000 0000 1382713401 150489 0 0 Fri Oct 25 11:03:21 2013
oracle ts/1 pts/1 6647 7 0000 0000 1382712445 24488 0 23 a0003040148735.xxx.edu Fri Oct 25 10:47:25 2013
oracle sshd 6640 7 0000 0000 1382712442 304729 0 23 a0003040148735.xxx.edu Fri Oct 25 10:47:22 2013
jadavis6 sshd 23537 8 0000 0000 1382560970 410725 0 0 Wed Oct 23 16:42:50 2013
jadavis6 ts/1 pts/1 23544 8 0000 0000 1382560970 404795 0 0 Wed Oct 23 16:42:50 2013
jadavis6 ts/1 pts/1 23544 7 0000 0000 1382552999 619524 0 19 ditirlns01.xxx.edu Wed Oct 23 14:29:59 2013
jadavis6 sshd 23537 7 0000 0000 1382552999 602215 0 19 ditirlns01.xxx.edu Wed Oct 23 14:29:59 2013
[root@atum root]#
編集する:
些細なことについて文句を言っているのは分かりますが、しばらくすると、すべての些細なこと(単に「今は何年ですか?」と尋ねるなど)が1時間進行するGoogle Festに変わったり、物事の不足の知識に変わったりすることにうんざりします。 (例えばの存在fwtmp
)。
答え2
GNU/Linux はlast
この-F
スイッチを提供します。しかし、Solarisがそうするならば、私は驚くでしょう。
内部的には、wtmp
ファイルにはエポックタイムスタンプが必要であるため、CまたはPerlで何かを作成したい場合は、独自のlast
コマンドを作成できます。この構造に対応するCヘッダーファイルを見てください。このファイルwtmp
は「バイナリ」ファイルなので、標準の解析ツールを使用した評価には適していません。
wtmp
ファイルがどの年に適用されるかを知るために、定期的にファイルを送信して切り捨てることを検討してください。
答え3
同様の場合がありますが、カスタム形式のログイン日が必要です。これは私にとって効果的です。
date -d "`last -F | head -n1 | sed -r 's/.*\.[0-9]+\s+//' | sed -r 's/\s(still|-).*//'`" +"%F_%R"