Dlaczego „ls-all” pokazuje czas dla niektórych plików, a tylko rok dla innych?

32

Jeśli wydasz ls -allpolecenie, niektóre pliki lub katalogi mają rok, a niektóre mają czas? Dlaczego jedni pokazują rok, a inni czas? Czy czas jest reprezentatywny dla czasu utworzenia pliku?

wprowadź opis zdjęcia tutaj

Jonathan Kittell
źródło
15
Używasz -all. Zauważ, że ostatnie L jest zbędne, ponieważ allnie oznacza słowa „wszystkie”, ale oznacza -a(pokaż wszystkie pliki) i -l(format długiej listy). Wszystko razem ls -aljest takie samo jak to, czego używasz.
fedorqui

Odpowiedzi:

35

Domyślnie znaczniki czasu plików są wymienione w formie skróconej, przy użyciu daty takiej jak „30 marca 2002 r.” W przypadku nieaktualnych znaczników czasu oraz daty bez roku i godziny jak „30 marca 23:45” w przypadku ostatnich znaczników czasu. Ten format może się zmienić w zależności od bieżących ustawień regionalnych, jak opisano poniżej.

Znacznik czasu uważa się za najnowszy, jeśli ma mniej niż sześć miesięcy i nie jest datowany w przyszłości. Jeśli znacznik czasu z dnia dzisiejszego nie jest wymieniony w najnowszej formie, znacznik czasu jest w przyszłości, co oznacza, że ​​prawdopodobnie masz problemy z przesunięciem zegara, które mogą zepsuć programy, takie jak uzależnienie plików od znaczników czasu.

Źródło: http://www.gnu.org/software/coreutils/manual/coreutils.html#Formatting-file-timestamps

Ilustrować:

$ for i in {1..7}; do touch -d "$i months ago" file$i; done
$ ls -l
total 0
-rw-r--r-- 1 terdon terdon 0 Sep 21 02:38 file1
-rw-r--r-- 1 terdon terdon 0 Aug 21 02:38 file2
-rw-r--r-- 1 terdon terdon 0 Jul 21 02:38 file3
-rw-r--r-- 1 terdon terdon 0 Jun 21 02:38 file4
-rw-r--r-- 1 terdon terdon 0 May 21 02:38 file5
-rw-r--r-- 1 terdon terdon 0 Apr 21  2015 file6
-rw-r--r-- 1 terdon terdon 0 Mar 21  2015 file7
Thomas Weinbrenner
źródło
4
Warto zauważyć, że czasy w przyszłości pokażą także rok, a nie czas. Może się to zdarzyć, jeśli wymienisz pliki między hostami, na których zegar nie jest zsynchronizowany.
kasperd
24

Przedstawiony czas to czas modyfikacji. Pamiętaj, że ls -allto to samo ls -l -a, co różni się od ls --all. W ltwoim przykładzie nie ma powodu, aby używać podwójnego . Jeśli chcesz zobaczyć czas modyfikacji każdego pliku, możesz użyć ls -al --full-time.

Kira
źródło
4
W GNU lsdo normalnego użytku --time-style=long-isomoże być bardziej przydatne. --full-timepokazuje sekundy, w tym dziewięć cyfr (!) po kropce dziesiętnej, co zwykle nie jest potrzebne.
pabouk
1
--full-timeoznacza -l, że możesz po prostu użyć ls -a --full-time.
kasperd
6

Jeśli data / godzina, którą próbuje wyświetlić, przypadają w ciągu ostatnich sześciu miesięcy, lswyświetla datę i godzinę. Jeśli minęło więcej niż sześć miesięcy - lub jeśli będzie w przyszłości - lswyświetla datę i rok.

Jak stwierdzono w innych odpowiedziach,

  • ls -lljest równoważne z ls -li
  • ls -alljest równa ls -al, co jest równoważne ls -a -l, ls -l -ai ls -la.

Z tą -lopcją lswyświetla datę / godzinę modyfikacji plików (w tym katalogów, ponieważ „wszystko jest plikiem”), chyba że

  • -c jest również określony, w którym to przypadku wyświetla czas zmiany, lub
  • -u jest również określony, w którym to przypadku wyświetla czas dostępu.

Aby uzyskać więcej informacji, zobacz ls (1) .

G-Man mówi „Przywróć Monikę”
źródło
3

To wyjście jest dostrojone pod kątem maksymalnej zawartości informacji: kiedy czas jest „wystarczająco blisko” do aktualnego czasu (nie do końca pewny, ale zgaduję w ciągu sześciu miesięcy), rok upływa, a zamiast tego pokazywana jest pora dnia. W przeciwnym razie wyświetlany jest rok. Jest to ustawienie domyślne, ponieważ prawdopodobnie nie przejmujesz się zbytnio dokładną porą dnia, kiedy coś zostało zmodyfikowane, jeśli to lata temu. Coreutils GNU lsma --time-styleopcję, aby to jawnie kontrolować.

Tom Hunt
źródło
0

Czy zdałeś sobie sprawę z czegoś? Pojawia się godzina 20 października, czyli dzisiaj, oznacza to, że pokaże ostatnią modyfikację pliku, ale w inne dni, które nie są dzisiaj, pokaże tylko datę bez godziny.

Okazuje się, że tak nie jest, jak odpowiedział Thomas. Po prostu próbowałem zastosować metodę dedukcyjną, nie mając jednak pewności, że wyciągam prawidłowe wnioski.

Rafael Campos Nunes
źródło
1
Aug 6 19:50 .config, Aug 6 19:48 VNCHOWTO.
G-Man mówi „Reinstate Monica”
Idealnie, właśnie dokonałem dedukcji, szukając dat i łącząc punkty, co nie zawsze może być idealnym zakończeniem.
Rafael Campos Nunes,