Jeśli wydasz ls -all
polecenie, 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?
Jeśli wydasz ls -all
polecenie, 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?
Odpowiedzi:
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
Przedstawiony czas to czas modyfikacji. Pamiętaj, że ls -all
to to samo ls -l -a
, co różni się od ls --all
. W l
twoim 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
.
ls
do normalnego użytku --time-style=long-iso
może być bardziej przydatne. --full-time
pokazuje sekundy, w tym dziewięć cyfr (!) po kropce dziesiętnej, co zwykle nie jest potrzebne.
--full-time
oznacza -l
, że możesz po prostu użyć ls -a --full-time
.
Jeśli data / godzina, którą próbuje wyświetlić, przypadają w ciągu ostatnich sześciu miesięcy,
ls
wyświetla datę i godzinę. Jeśli minęło więcej niż sześć miesięcy - lub jeśli będzie w przyszłości - ls
wyświetla datę i rok.
Jak stwierdzono w innych odpowiedziach,
ls -ll
jest równoważne z ls -l
ils -all
jest równa ls -al
, co jest równoważne ls -a -l
, ls -l -a
i ls -la
.Z tą -l
opcją ls
wyś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) .
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 ls
ma --time-style
opcję, aby to jawnie kontrolować.
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.
Aug 6 19:50 .config
, Aug 6 19:48 VNCHOWTO
.
-all
. Zauważ, że ostatnie L jest zbędne, ponieważall
nie oznacza słowa „wszystkie”, ale oznacza-a
(pokaż wszystkie pliki) i-l
(format długiej listy). Wszystko razemls -al
jest takie samo jak to, czego używasz.