Puncte:4

Cum număr toate fișierele de pe sistemul meu?

drapel ng

Trebuie să văd câte fișiere am pe întregul meu sistem. Mai exact, trebuie să număr toate fișierele de la / (deci pe întregul sistem), și trebuie să obțin un număr la sfârșit. Deci, ar fi 10000 de fișiere pe întregul sistem.

Cum pot realiza asta? Sper că poți ajuta!

drapel cn
„În mod specific, trebuie să număr toate fișierele din / (deci pe întregul sistem)”, văd o problemă aici... acest lucru va număra și tmpf-uri și acestea sunt fișiere -virtuale- și nu reale.
drapel st
Cum definiți „toate fișierele”? Toate inodele? Toate linkurile? Doar fișiere obișnuite sau și fișiere speciale? Ce tipuri de fișiere speciale? Fișiere speciale din director? Fișiere speciale cu caractere? Blocați fișierele speciale? Socket fișiere speciale? Fișiere speciale de linkuri simbolice? Pipe fișiere speciale? Și în ce moment? De exemplu, atunci când conectați un mouse, un fișier special cu caractere va fi creat automat, așa că în funcție de dacă aveți mouse-ul conectat sau nu, numărul va fi diferit.
Eric Duminil avatar
drapel us
Sunt doar curios, de ce ai nevoie de aceste informații?
terdon avatar
drapel cn
Vă rugăm să vă [editați] întrebarea și să clarificați ce înțelegeți prin „fișiere”, deoarece răspunsul va depinde foarte mult de ceea ce doriți de fapt să numărați. Ar trebui să fie numărate legăturile simbolice? Ar trebui să fie considerate hardlink-urile ca un fișier sau două? Ar trebui numărate directoarele? Ce zici de fișierele dispozitivului? Sau conducte numite? Dar fișierele care trăiesc doar în RAM?
drapel in
Lucrurile @Rinzwind de pe tmpfs pot face sau nu parte din ceea ce OP vrea să conteze aici. Problemele mai mari sunt `/sys`, `/proc` și `/dev`, pe care OP aproape sigur nu vrea să le conteze.
Puncte:16
drapel in

Utilizare df -i pentru a vedea numărul de Inode folosit -> Obisnuiam camp.

Sau limitați rezultatul ca:

df --output=sursă,țintă,used

Rețineți că numerele de la găsi și df -i nu se va potrivi neapărat:

  • df -i numără și directoare
  • fișierele care se leagă la același inod (linkuri hard) vor conta o singură dată
  • Unele inoduri speciale care nu sunt legate la niciun director pentru uz intern nu sunt luate în considerare.
  • df nu va trece în directoare montate, de ex. /boot sau dacă ai un separat /Acasă compartimentare. Cu găsi, puteți obține acel comportament folosind -xdev steag.

Verifica acest răspuns pe U&L SE.

M-aș aștepta ca rezultatul să fie puțin mai mic decât df -i contează deoarece câteva sisteme de fișiere (inclusiv ext4) au câteva inode speciale care nu sunt legate la niciun director pentru uz intern.

bac0n avatar
drapel cn
Viteza lui `df -i` bănuiesc că o trage de undeva, știi unde?
pLumo avatar
drapel in
@bac0n [`df` folosește apelul de sistem `statvfs()` și solicită sistemului de fișiere statisticile actuale despre spațiu](https://unix.stackexchange.com/questions/445764/how-does-df-know-how- mult-spaţiu-este-folosit-fără-trebuie-să-trece-prin-toate-fi).
drapel vn
`find` și `df -i` nu se vor potrivi eventual din alt motiv, deoarece `find` va traversa folderele montate. Pentru a evita acest lucru, utilizați `-xdev`, ca `sudo find / -xdev â¦`
KeyWeeUsr avatar
drapel pl
@PaddyLandau Punct bun la partea „montată”. `/` este o partiție pe un dispozitiv, dar pot exista mai multe parții sau chiar alte foldere care pot fi montate una prin alta! Poate că OP ar trebui să se reformuleze în funcție de modul în care este montat sistemul de fișiere Unix, altfel ar putea fi strict `/` numărul de fișiere de partiție (deci cu/fără montat `/home`, `/boot` și așa mai departe. Poate un tabel de montare în întrebare ar ajuta de asemenea.
pLumo avatar
drapel in
Adevărat! Multumesc, am adaugat aceasta informatie.
Puncte:14
drapel tm

Poți să folosești găsi / pentru a lista toate fișierele. Când ieșirea lui find este redirecționată, iese nume de fișiere care conțin linii noi ca acoperă mai multe linii, așa că nu puteți doar număra liniile. Totuși, puteți scoate altceva pentru fiecare fișier și numărați caracterele:

sudo find / -type f -printf 1 | wc -c

Fără sudo, probabil că nu puteți accesa toate căile, așa că nu puteți număra toate fișierele.

drapel cn
`locate` este mult mai rapid :D dacă nu tăiați directoarele
drapel cn
Numărarea inodurilor este probabil și mai rapidă.
drapel tm
Are `locate` acces la toate fișierele?
drapel cn
da, dar puteți folosi un .conf pentru a exclude direcții și elimină anumite direcții în mod implicit (cum ar fi tmpfs și /media)
bac0n avatar
drapel cn
cred că `localize -c '*'` este un echilibru acceptabil, așa cum sugerează @Rinzwind.
drapel cn
O altă problemă: asta va conta și link-urile, aș presupune? Așa că localizați :D Numărarea inodurilor este o metodă mai bună
qwr avatar
drapel kr
qwr
`găsește` numără dispozitivele blocate și fișierele de sistem speciale?
Ruslan avatar
drapel bv
_"`find` nu ar trebui să scoată fișiere cu linii noi în numele lor pe mai multe linii"_ â vreo referire la asta? Cum ar trebui să se imprime în acest caz?
drapel tm
@Ruslan: Încearcă să vezi. `atinge $'a\nb' ; găsi`
Ruslan avatar
drapel bv
`atinge $'a\nb'; găsi | od -tx1` scoate `2e 0a 2e 2f 61 0a 62 0a`, care conține `0a` între `61` și `62`. Deoarece codul dvs. din răspuns transmite rezultatul unei conducte, `wc` va primi două linii pentru acest fișier. De asemenea, puteți vedea ieșirea canalizată prin direcționarea către `cat`: `find | cat`.
drapel st
Acest lucru va exclude directoarele, care sunt și fișiere.
drapel tm
@Ruslan: De aceea am inclus și a doua comandă.
drapel tm
OK, reformulat.
drapel vn
Cred că răspunsul tău ar trebui să menționeze folderele montate din alte partiții. Pentru a le include, folosiți răspunsul așa cum este dat (dar cu „sudo”). Pentru a exclude partițiile montate, utilizați `-xdev`, ca `sudo find / -xdev â¦`. Poate deveni mai complicat, de ex. dacă doriți să includeți `/home`, dar nu și alte partiții montate.
Peter Cordes avatar
drapel fr
Dacă omiteți `-type f`, aceasta va număra toate fișierele, inclusiv directoarele, nu doar fișierele *obișnuite*. (Folosiți `-not -name .` pentru a exclude directorul curent dacă nu specificați un `/` arg explicit)

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.