และรายงานไดเรกทอรีที่ว่างเปล่าอย่างผิด ๆ


13

ฉันกำลังใช้คำสั่งเหล่านี้:

du -sh --apparent-size ./*
du -sh ./*

ทั้งการรายงาน:

4.0K    ./Lightroom_catalog_from_win_backup
432M    ./Lightroom catalog - wine_backup

ในขณะที่ไดเรกทอรีเหล่านั้นประกอบด้วย:

$ll ./"Lightroom catalog - wine_backup"
total 432M
-rwxrwx--- 1 gigi gigi 432M Mar 18  2018 Lightroom 5 Catalog Linux.lrcat
-rwxrwx--- 1 gigi gigi  227 Nov 21  2015 zbackup.bat
$ll ./Lightroom_catalog_from_win_backup
total 396M
-rwxrwx--- 3 gigi gigi 396M Dec 17 09:35 Lightroom 5 Catalog Linux.lrcat
-rwxrwx--- 3 gigi gigi  227 Dec 17 09:35 zbackup.bat

เหตุใดจึงduมีการรายงาน. / 4.0KLightroom_catalog_from_win_backup และฉันจะรายงานได้อย่างถูกต้องได้อย่างไร

PS: ข้อมูลระบบอื่น ๆ :

$stat --file-system $HOME
  File: "/home/gigi"
    ID: 5b052c62a5a527bb Namelen: 255     Type: ext2/ext3
Block size: 4096       Fundamental block size: 4096
Blocks: Total: 720651086  Free: 155672577  Available: 119098665
Inodes: Total: 183050240  Free: 178896289

$lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 16.04.5 LTS
Release:        16.04
Codename:       xenial

เพื่อสร้างคำตอบที่ได้รับไปแล้วสิ่งใดที่/bin/ls -li './*/Lightroom 5 Catalog Linux.lrcat'ส่งคืน?
เสร็จสิ้น 24

ls -li ./*/"Lightroom 5 Catalog Linux.lrcat" 36831321 -rwxrwx--- 1 gigi gigi 432M Mar 18 2018 ./Lightroom catalog - wine_backup/Lightroom 5 Catalog Linux.lrcat 36833201 -rwxrwx--- 3 gigi gigi 396M Dec 17 09:35 ./Lightroom_catalog_from_win_backup/Lightroom 5 Catalog Linux.lrcat
adrhc

1
สิ่งนี้นำเสนอปัญหากับคำตอบเนื่องจากไฟล์ที่มีจำนวนลิงค์สามไม่ถูกนับที่อื่นในduคำสั่ง ดังนั้นคุณมีไดเรกทอรีย่อยเพียงสองไดเรกทอรีในไดเรกทอรีการทำงานของคุณ?
เสร็จสิ้น 24

ไม่ฉันมีคนอื่นประมาณ 15 คน
adrhc

คำตอบ:


23

ฉันสามารถทำซ้ำได้หากไฟล์นั้นเป็นฮาร์ดลิงก์:

~ mkdir foo bar
~ dd if=/dev/urandom of=bar/file1 count=1k bs=1k
1024+0 records in
1024+0 records out
1048576 bytes (1.0 MB, 1.0 MiB) copied, 0.00985276 s, 106 MB/s
~ ln bar/file1 foo/file1
~ du -sh --apparent-size foo bar
1.1M    foo
4.0K    bar

นี่เป็นพฤติกรรมที่คาดหวัง จากเอกสารGNUdu :

หากฮาร์ดลิงก์สองลิงก์ขึ้นไปชี้ไปที่ไฟล์เดียวกันจะมีการนับฮาร์ดลิงก์เพียงลิงค์เดียว ลำดับอาร์กิวเมนต์ของไฟล์มีผลกับลิงก์ใดที่จะถูกนับและการเปลี่ยนลำดับอาร์กิวเมนต์อาจเปลี่ยนตัวเลขและรายการที่แสดงผลลัพธ์

หากคุณต้องการฮาร์ดลิงก์ขนาดซ้ำ ๆ ให้ลองใช้-lตัวเลือก:

' -l'
' --count-links'
นับขนาดของไฟล์ทั้งหมดแม้ว่าไฟล์จะปรากฏขึ้นมาแล้ว (เป็นฮาร์ดลิงก์)

~ du -sh --apparent-size foo bar -l
1.1M    foo
1.1M    bar

15

แจ้งให้ทราบว่านับการเชื่อมโยง3สำหรับสองไฟล์Lightroom 5 Catalog Linux.lrcatและในzbackup.batLightroom_catalog_from_win_backup

ซึ่งหมายความว่าไฟล์ทั้งสองนี้เชื่อมโยงกับไฟล์อื่นยาก (ชื่อเพิ่มเติม) เมื่อคุณเรียกใช้duในไดเรกทอรีหรือชุดของไฟล์ลิงก์แต่ละอันจะถูกนับเพียงครั้งเดียว

ตัวอย่าง:

$ ls -l
total 41024
-rw-r--r--  2 kk  wheel  10485760 Dec 17 09:07 file1
-rw-r--r--  2 kk  wheel  10485760 Dec 17 09:07 file2

$ du -h file1
10.0M   file1

$ du -h file2
10.0M   file2

$ du -h .
10.0M   .

พฤติกรรมนี้ได้รับคำสั่งอย่างชัดเจนจากมาตรฐาน POSIX สำหรับduยูทิลิตี้ :

ไฟล์ที่เกิดขึ้นหลายครั้งภายใต้หนึ่งตัวถูกดำเนินการไฟล์และที่มีลิงค์นับมากกว่า 1 จะถูกนับและเขียนเพียงหนึ่งรายการ

duการใช้งานบางอย่างมีตัวเลือกที่ไม่ได้มาตรฐานเพื่อปิดการทำงานนี้ สำหรับ GNU duสามารถทำได้ด้วย-lตัวเลือก


3

มันเกือบจะทำงานได้อย่างถูกต้องแน่นอน duนับแต่ละไฟล์เพียงครั้งเดียวโดยไม่คำนึงว่ามีการอ้างอิงกี่ครั้ง มีความเป็นไปได้สูงที่ไดเรกทอรีทั้งสองของคุณจะมีไฟล์ฮาร์ดลิงก์

หน้าคนสำหรับ GNU duข้อเสนอ-l, --count-linksปิดนี้การเพิ่มประสิทธิภาพมาตรฐาน (ดูman duเพื่อตรวจสอบว่าการดำเนินการของคุณรวมถึงนี้) หรือคุณเรียกใช้duสองครั้งหนึ่งครั้งสำหรับแต่ละไดเรกทอรี

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.