web-dev-qa-db-ja.com

'ls'は、/ tmp内のファイルとホームディレクトリ内のファイルで異なるタイムスタンプを出力します

大学のLinuxサーバー(RHEL 7)にSSH接続しています。これが取引です。それは「ls」と「古い」ファイルと関係があります。

ホームディレクトリ:

$ touch -d '1918-11-11 11:00 GMT' wwi-armistice
$ touch now
$ sleep 1
$ touch now1
$ TZ=UTC0 ls -lt --full-time wwi-armistice now now1
-rw-r--r-- 1 tsai csugrad 0 2054-12-17 17:28:16.000000000 +0000 wwi-armistice
-rw-r--r-- 1 tsai csugrad 0 2018-05-04 22:07:10.743637000 +0000 now1
-rw-r--r-- 1 tsai csugrad 0 2018-05-04 22:06:59.992632000 +0000 now

tmpディレクトリ:

$ tmp=$(mktemp -d)
$ cd $tmp
$ touch -d '1918-11-11 11:00 GMT' wwi-armistice
$ touch now
$ sleep 1
$ touch now1
$ TZ=UTC0 ls -lt --full-time wwi-armistice now now1
-rw-r--r-- 1 tsai csugrad 0 2018-05-04 23:04:27.031485854 +0000 now1
-rw-r--r-- 1 tsai csugrad 0 2018-05-04 23:04:22.907373125 +0000 now
-rw-r--r-- 1 tsai csugrad 0 1918-11-11 11:00:00.000000000 +0000 wwi-armistice

最初の出力が2054年にwwi-armisticeを示している理由は、Unix時間の符号付き32ビットから符号なし32ビットへの変換と関係があることを私は知っています。誰かがそれを確認し、おそらく理由を説明できれば(何かnfs?)、それは素晴らしいことです。

2番目の大きな質問は、この例をtmpディレクトリで実行すると、wwi-armisticeが正しくリストされるのはなぜですか。

私はネットワーキングについて何も知らないので、基本的な説明が役立つことを覚えておいてください。

1
user843422

ここで、ファイルシステムとそのマウントされたオプションを特定できると便利です。

mountは、ファイルシステム階層とマウント時のオプションを表示します。

stat -f --format="%T" $fileは、指定されたファイルのファイルシステムタイプを出力します。/tmpバージョンの結果は、(おそらく)ホームディレクトリの結果とは異なると思います。

特定のファイルシステムとそのマウントされたオプションがわかれば、タイムスタンプの制限を調べることができますが、その要点はわかっていると思います。最初のファイルシステムのタイムスタンプバイト割り当てには、1918年の日付を表すのに十分な数値範囲がありません。 2番目のものはそうです。

1
Nevin Williams