Co to jest "total" w pierwszej linijce po ls-l? [zamknięte]

Co to jest "Suma" w wyjściu ls-l?

    $ ls -l /etc
    total 3344
    -rw-r--r--   1 root root   15276 Oct  5  2004 a2ps.cfg
    -rw-r--r--   1 root root    2562 Oct  5  2004 a2ps-site.cfg
    drwxr-xr-x   4 root root    4096 Feb  2  2007 acpi
    -rw-r--r--   1 root root      48 Feb  8  2008 adjtime
    drwxr-xr-x   4 root root    4096 Feb  2  2007 alchemist
Author: Sanket Sahu, 2011-09-13

4 answers

Możesz znaleźć definicję tego wiersza w dokumentacji ls dla swojej platformy. Na coreutils ls (ten, który można znaleźć na wielu systemach linuksowych), informacje można znaleźć poprzez info coreutils ls:

Dla każdego katalogu, który jest wymieniony, poprzedzaj pliki linią 'total BLOCKS', gdzie bloki to całkowita alokacja dysków dla wszystkich pliki w tym katalogu.

 77
Author: Mat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-13 12:18:59

Wzór: co to jest że liczba?

Razem int = suma (physical_blocks_in_use) * physical_block_size/ls_block_size) dla każdego pliku.

Gdzie:

  • ls_block_size jest arbitralną zmienną środowiskową (Zwykle 512 lub 1024 bajtów), która jest dowolnie modyfikowana za pomocą --block-size=<int> flaga na ls, POSIXLY_CORRECT=1 GNU zmienna środowiskowa (aby uzyskać 512-bajtowe jednostki), lub znacznik -k, aby wymusić 1kB jednostki.
  • {[8] } jest zależną od systemu operacyjnego wartością wewnętrznego interfejsu blokowego, który może lub nie może być podłączony do podstawowego sprzętu. Wartość ta zwykle wynosi 512b lub 1k, ale jest całkowicie zależna od systemu operacyjnego. Można go ujawnić poprzez %B wartość na stat lub fstat. zauważ, że ta wartość jest (prawie zawsze) niezwiązana z liczbą fizycznych bloków na nowoczesnym urządzeniu pamięci masowej.

Dlaczego tak mylące?

Liczba ta jest dość oderwany od jakiejkolwiek fizycznej lub znaczącej metryki. Wielu młodszych programistów nie miało doświadczenia z otworami plików lub twardymi linkami/sym. Ponadto dokumentacja dostępna na ten konkretny temat praktycznie nie istnieje.

Niespójność i niejednoznaczność terminu"rozmiar bloku" była wynikiem wielu różnych miar, które można łatwo pomylić, a stosunkowo głębokie poziomy abstrakcji obracające się wokół dysku dostęp.

Przykłady sprzecznych informacji: du (lub ls -s) vs stat

Uruchomienie du * w folderze projektu daje następujące rezultaty: (Uwaga: ls -s zwraca te same wyniki.)

dactyl:~/p% du *
2       check.cc
2       check.h
1       DONE
3       Makefile
3       memory.cc
5       memory.h
26      p2
4       p2.cc
2       stack.cc
14      stack.h

Ogółem: 2+2+1+3+3+5+26+4+2+14 = 62 Bloki

Jednak gdy uruchomimy stat widzimy inny zestaw wartości. Uruchomienie stat w tym samym katalogu daje:

dactyl:~/p% stat * --printf="%b\t(%B)\t%n: %s bytes\n"
3       (512)   check.cc: 221 bytes
3       (512)   check.h: 221 bytes
1       (512)   DONE: 0 bytes
5       (512)   Makefile: 980 bytes
6       (512)   memory.cc: 2069 bytes
10      (512)   memory.h: 4219 bytes
51      (512)   p2: 24884 bytes
8       (512)   p2.cc: 2586 bytes
3       (512)   stack.cc: 334 bytes
28      (512)   stack.h: 13028 bytes

Ogółem: 3+3+1+5+6+10+51+8+3+28 = 118 Bloki

Uwaga: możesz użyć polecenia stat * --printf="%b\t(%B)\t%n: %s bytes\n" > aby wypisać (w kolejności) liczbę bloków, (w nawiasach) Rozmiar tych bloków bloki, nazwę pliku i rozmiar w bajtach, jak pokazano powyżej.

Są dwie ważne rzeczy:

  • stat zgłasza zarówno physical_blocks_in_use, jak i physical_block_size zgodnie z powyższym wzorem. Zauważ, że są to wartości oparte na interfejsach systemu operacyjnego.
  • du dostarcza to, co jest powszechnie akceptowane jako dość dokładne oszacowanie fizycznego wykorzystania dysku.

Dla odniesienia, oto ls -l z katalogu Powyżej:

dactyl:~/p% ls -l
**total 59**
-rw-r--r--. 1 dhs217 grad   221 Oct 16  2013 check.cc
-rw-r--r--. 1 dhs217 grad   221 Oct 16  2013 check.h
-rw-r--r--. 1 dhs217 grad     0 Oct 16  2013 DONE
-rw-r--r--. 1 dhs217 grad   980 Oct 16  2013 Makefile
-rw-r--r--. 1 dhs217 grad  2069 Oct 16  2013 memory.cc
-rw-r--r--. 1 dhs217 grad  4219 Oct 16  2013 memory.h
-rwxr-xr-x. 1 dhs217 grad 24884 Oct 18  2013 p2
-rw-r--r--. 1 dhs217 grad  2586 Oct 16  2013 p2.cc
-rw-r--r--. 1 dhs217 grad   334 Oct 16  2013 stack.cc
-rw-r--r--. 1 dhs217 grad 13028 Oct 16  2013 stack.h
 30
Author: Don Scott,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:02:42

To całkowita liczba bloków systemu plików, w tym bloków pośrednich, używanych przez wymienione pliki. Jeśli uruchomisz ls -s Na tych samych plikach i zsumujesz zgłoszone liczby, otrzymasz ten sam numer.

 25
Author: Dave Lasley,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-13 12:19:19

Tylko wspomnieć-możesz użyć-h (ls-lh), aby przekonwertować to w formacie czytelnym dla człowieka.

 16
Author: Tsvetomir Dimitrov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-13 13:21:19