Ls -l'den sonraki ilk satırdaki "toplam" nedir? [kapalı]


132

Nedir totalçıkışında 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

Yanıtlar:


94

Bu satırın tanımını lsplatformunuzun belgelerinde bulabilirsiniz . İçin coreutils ls(Linux sistemlerinde bir çok bulunan biri), bilgi yoluyla bulunabilir info coreutils ls:

Listelenen her dizin için, dosyalara bir `toplam BLOCKS 'satırı ekleyin; burada BLOCKS, o dizindeki tüm dosyalar için toplam disk tahsisidir.


14
Yeterince komik, man lsbenim sistemimde bu satırdan bahsetmiyor, ama info coreutils lsyapıyor. Nasıl geliyor man lsve info coreutils lsaynı komutla ilgili farklı bilgiler var mı? Neden lssadece bir kez belgelenmiyor? Aynı komut için iki farklı dokümantasyona sahip olmak, başarısızlık için ayarlanmış gibi görünüyor.
HelloGoodbye

1
infocoreutils ile ilgili dokümanlar genellikle man sayfalarından daha ayrıntılıdır. Bu nedenle, her kılavuz sayfasının sonunda sizi daha fazla ayrıntı için bilgi bölümüne yönlendiren bir not var.
Mat

7
Ah. Yaptım info lsve aynı çıktıyı vermek için info coreutils ls. Argüman coreutilsne işe yarar ?
HelloGoodbye

46

Formül: Bu sayı nedir?

toplam int = Her dosya için (Physical_blocks_in_use) * Physical_block_size / ls_block_size) toplamı .

Nerede:

  • ls_block_sizeBir olan rasgele değişkeni serbestçe değiştirilebilir olduğunu (normal olarak 512 ya da 1024 byte) --block-size=<int>bayrağa ls, POSIXLY_CORRECT=1GNU ortam değişkeni, ya da (512 bayt birimleri elde etmek için) -k1 KB birimleri zorlamak için bayrak.
  • physical_block_sizetemel donanıma bağlı olabilecek veya olmayabilecek dahili bir blok arayüzünün işletim sistemine bağlı değeridir. Bu değer normalde 512b veya 1k'dır, ancak tamamen işletim sistemine bağlıdır. Veya %Büzerindeki değer aracılığıyla ortaya çıkarılabilir . Bu değerin (hemen hemen her zaman) modern bir depolama cihazındaki fiziksel blok sayısıyla ilgisi olmadığını unutmayın .statfstat

Neden bu kadar kafa karıştırıcı?

Bu sayı, herhangi bir fiziksel veya anlamlı ölçümden oldukça farklıdır. Birçok genç programcının dosya delikleri veya sabit / sym bağlantıları konusunda deneyimi olmamıştır . Ek olarak, bu belirli konu ile ilgili mevcut dokümantasyon hemen hemen mevcut değildir.

"Blok boyutu" teriminin ayrıklığı ve belirsizliği, kolayca karıştırılan çok sayıda farklı önlemin ve disk erişimi etrafında dönen nispeten derin soyutlama seviyelerinin bir sonucudur.

Çelişkili bilgi örnekleri: du(veya ls -s) vsstat

du *Bir proje klasöründe çalıştırmak aşağıdakileri verir: (Not: ls -saynı sonuçları verir.)

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

Toplam : 2 + 2 + 1 + 3 + 3 + 5 + 26 + 4 + 2 + 14 = 62 Blok

Yine de biri koştuğunda statfarklı bir değerler kümesi görürüz. statAynı dizinde çalıştırmak şu sonuçları verir:

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

Toplam: 3 + 3 + 1 + 5 + 6 + 10 + 51 + 8 + 3 + 28 = 118 Blok

Not:stat * --printf="%b\t(%B)\t%n: %s bytes\n" Yukarıda gösterildiği gibi,> komutunu kullanarak blok sayısını (sırayla), bu blokların boyutunu, dosyanın adını ve bayt cinsinden boyutu verebilirsiniz .

İki önemli şey var:

  • statraporları hem physical_blocks_in_useve physical_block_sizeyukarıdaki formülde kullanıldığı haliyle. Bunların işletim sistemi arayüzlerine dayalı değerler olduğunu unutmayın.
  • dugenel olarak kabul edilen fiziksel disk kullanımının oldukça doğru bir tahminini sağlamaktır.

Referans için, ls -lyukarıdaki dizini burada bulabilirsiniz :

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

26

Bu, listelenen dosyalar tarafından kullanılan dolaylı bloklar da dahil olmak üzere dosya sistemi bloklarının toplam sayısıdır. ls -sAynı dosyalar üzerinde çalışır ve rapor edilen sayıları toplarsanız, aynı sayıyı elde edersiniz.


Bu açıkça doğru değil. Örnek: /bin/ls -s-> total 15 2 filename 3 filename2 3 filename3 3 filename4 2 filename5 2 filename6 2 filename8 2 filename9
Don Scott

3
Hangi sistemde olduğunuzu bilmiyorum ama benim için bu doğru. Örnek: gist.github.com/rfjakob/200f6001bf91cf801891
Jakob

@Jakob Tam bir cevap gönderdi, bir göz atın ve sorunun çözülüp çözülmediğini bana bildirin.
Don Scott

Bu, Windows için Git bash'da doğru değildir.
thdoan

18

Sadece bahsetmek gerekirse - bunu insan tarafından okunabilir bir biçime dönüştürmek için -h (ls -lh) kullanabilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.