чому `du` не показує результати для всіх файлів?


2

Я (з цікавості) біжу du -aвсередині, /usr/lib/git-coreі він не показує результатів для всіх файлів у цьому каталозі. Чому він не залишає довільний набір файлів?

ось що cd /usr/lib/git-core; du -aповертає:

4   ./git-merge-resolve
972 ./git-config
12  ./git-show-index
404 ./git-remote-ftp
4   ./git-difftool
16  ./git-rebase
20  ./git-submodule
40  ./git-issues
12  ./git-filter-branch
36  ./git-add--interactive
4   ./git-web--browse
12  ./git-bisect
8   ./git-relink
412 ./git-fast-import
4   ./git-merge-one-file
248 ./git-instaweb
20  ./git-am
4   ./git-lost-found
4   ./git-notes
384 ./git-daemon
8   ./t_gitshelve.py
376 ./git-http-backend
8   ./git-repack
20  ./gitshelve.py
4   ./git-parse-remote
24  ./git-rebase--interactive
4   ./git-quiltimport
380 ./git-imap-send
8   ./git-pull
4   ./git-sh-setup
4   ./git-difftool--helper
4   ./git-request-pull
372 ./git-shell
4   ./git-merge-octopus
392 ./git-http-fetch
8   ./git-mergetool
380 ./git-upload-pack
12  ./git-mergetool--lib
12  ./git-stash
404 ./git-http-push
5052    .

але коли я запускаю ls, багато інших файлів відображаються як існуючі в поточному каталозі:

git
git-add
git-add--interactive
git-am
git-annotate
git-apply
git-archive
git-bisect
git-bisect--helper
git-blame
git-branch
git-bundle
git-cat-file
git-check-attr
git-check-ref-format
git-checkout
git-checkout-index
git-cherry
git-cherry-pick
git-clean
git-clone
git-commit
git-commit-tree
git-config
git-count-objects
git-daemon
git-describe
git-diff
git-diff-files
git-diff-index
git-diff-tree
git-difftool
git-difftool--helper
git-fast-export
git-fast-import
git-fetch
git-fetch-pack
git-filter-branch
git-fmt-merge-msg
git-for-each-ref
git-format-patch
git-fsck
git-fsck-objects
git-gc
git-get-tar-commit-id
git-grep
git-hash-object
git-help
git-http-backend
git-http-fetch
git-http-push
git-imap-send
git-index-pack
git-init
git-init-db
git-instaweb
git-issues
git-log
git-lost-found
git-ls-files
git-ls-remote
git-ls-tree
git-mailinfo
git-mailsplit
git-merge
git-merge-base
git-merge-file
git-merge-index
git-merge-octopus
git-merge-one-file
git-merge-ours
git-merge-recursive
git-merge-resolve
git-merge-subtree
git-merge-tree
git-mergetool
git-mergetool--lib
git-mktag
git-mktree
git-mv
git-name-rev
git-notes
git-pack-objects
git-pack-redundant
git-pack-refs
git-parse-remote
git-patch-id
git-peek-remote
git-prune
git-prune-packed
git-pull
git-push
git-quiltimport
git-read-tree
git-rebase
git-rebase--interactive
git-receive-pack
git-reflog
git-relink
git-remote
git-remote-ftp
git-remote-ftps
git-remote-http
git-remote-https
git-repack
git-replace
git-repo-config
git-request-pull
git-rerere
git-reset
git-rev-list
git-rev-parse
git-revert
git-rm
git-send-pack
git-sh-setup
git-shell
git-shortlog
git-show
git-show-branch
git-show-index
git-show-ref
git-stage
git-stash
git-status
git-stripspace
git-submodule
git-symbolic-ref
git-tag
git-tar-tree
git-unpack-file
git-unpack-objects
git-update-index
git-update-ref
git-update-server-info
git-upload-archive
git-upload-pack
git-var
git-verify-pack
git-verify-tag
git-web--browse
git-whatchanged
git-write-tree
gitshelve.py
t_gitshelve.py

Чи може хтось пояснити, чому duповертається інформація лише для деяких файлів? Я не бачу тут жодної моделі.

Біг file $(du -a) | grep "^\."також не показує жодного шаблону.


Чи трапляється це і для інших каталогів? А як щодо виходу ls -la?
Бандит

У будь-якій іншій папці, яку я намагаюся десь у ~, я знаходжу du -aдані, що повертають дані для кожного файлу, який ls -aRповертається. (Я перевірив це, виконавши таку команду в ~: ls -aR1 | grep -E "^[^.]|^\.[^.].*[^:]$|^\.:$" | wc -l; du -a | wc -l Я знаю, що це складно, але, будь ласка, повірте мені, що це хороший тест, або покажіть мені, що з цим погано).
Олександр Птах

Я бачу те ж саме і на ubuntu natty .. under / usr / lib / git-core
freethinker

ls -aR1 | grep -E "^[^.]|^\.[^.].*[^:]$" > ../tmpls ; du -a | gawk 'match($2, /\.\/(.*)/, ary) {print ary[1]}' > ../tmpdu; sort ../tmpdu > ../tmpdus; sort ../tmpls > ../tmplss; diff ../tmplss ../tmpdus | grep '^<' | gawk '{print $2}'показує, які файли не захоплені du -a(для тих, хто може бути одержимим знайти відповідь, як я = D). Цікаво зауважити: всі файли, залишені du, - це файли ELF. Крім того, є багато, багато файлів, в межах /usr/libяких duвирішує залишитись ...
Олександр Птах

Відповіді:


2

Якщо ви робите ls -ilв каталозі.

Ви побачите, що багато файлів мають однакові вставки. Ось чому du -aвідображається інформація лише про унікальні вставки


АХА !! Насправді я вже думав, що важкі посилання є проблемою, але, на жаль, для мене, я думав, що ls -lце покаже синтаксис, схожий на м'які посилання для всіх жорстких посилань. Ось чому я пропустив, що вони поділяють однаковий inode. Ви зараз мій герой :-)
Олександр Птах

Власне кажучи, кращою відповіддю було б ls -AiR1: (1) включити " ." файли, (2) тому, що посилання можуть бути в різних каталогах, і (3) тому, що -iдобре працює без цього -l. Але вітаю з пошуком основного питання.
Скотт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.