буде `ls -lt` дотримуватися точних хвилин або лише приблизних хвилин до секунди?


10

ls -lпоказує лише часові позначки модифікації файлів до секунди. Якщо два файли мають однакову часову позначку до секунди, але були змінені не зовсім одночасно, вони ls -ltвпорядковують файли в порядку точних хвилин або просто приблизних хвилин до секунди (і тому порядок між файлами може бути довільне)?

Відповіді:


17

Це дуже залежить від lsреалізації. З них 4, знайдені тут у системі GNU / Linux:

$ touch a; touch c; touch b; stat -c %y a c b
2018-01-10 12:52:21.367640342 +0000
2018-01-10 12:52:21.371640148 +0000
2018-01-10 12:52:21.375639952 +0000
  • GNUls , проект із GNU (з колекції GNU coreutils ). Це типово зустрічається в таких системах GNU, як Debian (Linux або kFreeBSD), Cygwin або Fedora.

    $ gnu-ls -rt
    a  c  b
    
  • lsВід сімейної реліквії Toolchest , порт інструментів OpenSolaris:

    $ heirloom-ls -rt
    a  b  c
    
  • The lsЗ колекції AT & T Open Source , можливо , побудований в ksh93. Ще один із досить невеликими розширеннями:

    $ ast-ls -rt
    a  c  b
    $ PATH=/opt/ast/bin:$PATH ksh93 -c 'type ls; ls -rt'
    ls is a shell builtin version of /opt/ast/bin/ls
    a  c  b
    
  • busbox (як знайдено (або похідне) у більшості (як правило, вбудованих) Linux-систем):

    $ busybox ls -rt
    c  b  a
    

Отже, з них GNU і ast lsвважає частку другою частиною. Інші переходять до лексичного порівняння для файлів, востаннє змінених протягом тієї ж секунди. Тільки BusyBox lsвідміну -rтам.

У моїх тестах FreeBSD lsтакож підтримує точність під секунди (за умови, що вони включені на рівні VFS, див. vfs.timestamp_precisionSysctl).

zshкулі (з om класифікатором глобу на замовлення на час модифікації, Omдля зворотного порядку) також приймають повний робочий час:

$ echo *(Om)
a c b

[ file1 -nt file2 ], де підтримується також, як правило, підтримують деталізацію другої частини .


1
Чи інструменти, що не належать до GNU, порушують POSIX або він визначає округлення для сортування?
Кевін

2
Що таке ast-ls?
Випадково832

@ Random832, див. Редагувати.
Стефан Шазелас

2
@Kevin, з мого читання специфікації, вони не відповідають цим питанням . AFAICT, у специфікації немає нічого, що дозволяє ігнорувати підрядну частину, а POSIX надає чіткий API для отримання точних часових позначок.
Стефан Шазелас

1
@ikkachu, ти маєш рацію. Я цього не помічав. див. редагувати Це змінює результат для аст.
Стефан Шазелас

4

Що стосується lsреалізації GNU , запуск ls -lфайлів буде впорядковувати файли в алфавітному порядку і ls -ltбуде впорядковувати файли в порядку модифікації, найновіше спочатку, з найбільшою точністю, підтримуваною базовою файловою системою. Ви можете перевірити це за допомогою --full-timeопції.

Отже, відповісти на ваше запитання, так, в найбільшій мірі можна, але лише тоді, коли ви користуєтесь -t(інакше це буде за замовчуванням алфавітним) та використовуєте реалізацію, яка його підтримує (див . Відповідь Stéphane для отримання більш детальної інформації). Наприклад, ext4може підтримувати наносекундну точність, надаючи достатньо великі вставки для зберігання необхідних даних часових позначок.


2
Вам слід додати до своєї відповіді, що мова йде лише про GNU ls. Є багато інших реалізацій, які можуть вести себе по-різному.
Роланд Ілліг

@RolandIllig додав
Джо

1

Ви можете перевірити, якщо порівнюєте вихід

ls -lat

і

ls -lat --full-time

у сортуванні немає нічого довільного.


1

Так, буде.

Для тестування створіть два файли з невеликою різницею у часі:

$ touch aa; sleep 0.2; touch bb

Перевір час модифікації:

$ stat -c %y bb aa
2018-01-07 20:51:19.364248042 0000
2018-01-07 20:51:19.072248226 0000

У списку буде використана така різниця:

$ ls -lt aa bb
-rw-r--r-- 1 user user 0 Jan  7 20:51 bb
-rw-r--r-- 1 user user 0 Jan  7 20:51 aa

З --full-timeрізницею буде зрозуміло.

$ ls -lt --full-time aa bb
-rw-r--r-- 1 user user 0 2018-01-07 20:51:19.364248042 0000 bb
-rw-r--r-- 1 user user 0 2018-01-07 20:51:19.072248226 0000 aa

В останньому блоці, я вважаю, у вас є bbі aaназад.
Олексій
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.