временные метки вывода 'ls' отличаются для файлов в / tmp и в домашнем каталоге

279
Winston Tsai

Я ssh'd на моих университетских Linux-серверах (RHEL 7). Вот сделка. Это связано с «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 

Я знаю причину, по которой первый вывод показывает, что wwi-armistice в 2054 году как-то связан с 32-битным 32-битным беззнаковым преобразованием времени Unix со знаком. Если бы кто-то мог это подтвердить и, возможно, объяснить, почему (что-то, что-то, НФС?), Это было бы здорово.

Мой второй, более важный вопрос: почему, когда я делаю этот пример в каталоге tmp, wwi-перемирие указано правильно?

Имейте в виду, что я ничего не знаю о сетевом взаимодействии, поэтому было бы полезно дать базовое объяснение.

1
По умолчанию `mktemp` создаст каталог в` / tmp`, который может отличаться от файловой системы, чем в первом случае. Patrick Mevzek 5 лет назад 0
тот факт, что я подключен по сети, не имеет к этому никакого отношения? Winston Tsai 5 лет назад 0
Когда кто-то использует `ssh` для доступа к оболочке входа в систему, как вы делаете, это по сути эквивалентно входу в локальную систему с физической клавиатуры, но без графического интерфейса. Таким образом, в игре, как правило, нет никакой дополнительной «сети», кроме сеанса TCP, который передает входные и выходные данные терминала между вашей локальной системой и удаленным сервером. Иногда в зависимости от политик администрирования ваш домашний каталог может быть подключен с сетевого файлового сервера при входе в систему. Однако `/ tmp` обычно является локальной файловой системой, напрямую подключенной. Nevin Williams 5 лет назад 1

1 ответ на вопрос

1
Nevin Williams

Это может быть полезно, если вы можете определить файловые системы и их подключенные опции в игре здесь.

mount отобразит иерархию файловой системы и параметры времени монтирования.

stat -f --format="%T" $fileнапечатает тип файловой системы названного файла. Я подозреваю, что результаты для версий / tmp будут отличаться от тех, что находятся (вероятно) в вашем домашнем каталоге.

Когда вы знаете конкретную файловую систему и ее смонтированные параметры, вы можете исследовать ее ограничения на временные метки, но я думаю, что вы в этом суть: первая файловая система не имеет достаточного числового диапазона в своем распределении байтов временных меток, чтобы представить дату 1918 года, в то время как второй делает.

Похожие вопросы