Die Anzahl der Links der Inode-Nummer ermitteln?

7

Wie kann ich die Anzahl der Links einer Inode-Nummer ermitteln? Wenn ich weiß, dass die Inode-Nummer beispielsweise 592255 lautet, was kann ich tun, um die Anzahl der Links zu ermitteln?

Ich weiß, dass Verzeichnisse eine Linkanzahl von mindestens 2 haben, weiß aber nicht, wie ich das herausfinden soll.

BubbleMonster
quelle

Antworten:

8

Ermitteln der Anzahl der Links anhand des Namens

Mit dem statBefehl können Sie die Anzahl der Links für eine bestimmte Datei / ein bestimmtes Verzeichnis ermitteln:

$ stat lib/
  File: ‘lib/’
  Size: 4096        Blocks: 8          IO Block: 4096   directory
Device: fd02h/64770d    Inode: 11666186    Links: 3
Access: (0755/drwxr-xr-x)  Uid: ( 1000/    saml)   Gid: ( 1000/    saml)
Context: unconfined_u:object_r:user_home_t:s0
Access: 2014-03-21 18:16:10.521963381 -0400
Modify: 2014-01-13 17:16:49.438408973 -0500
Change: 2014-01-14 17:57:46.636255446 -0500
 Birth: -

Werfen Sie einen Blick auf die Manpage für stat:

%h     number of hard links
%i     inode number

Sie können also genau diesen Wert direkt mit statden Funktionen --printfoder --formatAusgabefunktionen abrufen:

$ stat --printf="%h\n" lib/
3

$ stat --format="%h" lib/
3

$ stat -c "%h" lib/
3

Ermitteln der Verbindungsanzahl mithilfe des Inodes

Wenn Sie andererseits nur die Inode-Nummer kennen, können Sie wie folgt rückwärts arbeiten:

$ ls -id lib
11666186 lib

$ find -inum 11666186 -exec stat -c "%h" {} +
3

Verweise

slm
quelle
Sie haben den gleichen Fehler wie ich gemacht, die Frage ist, die Anzahl der Links anhand der Inode-Nummer zu ermitteln ...
Graeme
@ Graeme - behoben.
slm
6

Geben Sie dem findBefehl die Inode-Nummer und weisen Sie ihn an, den statBefehl für die Datei auszuführen :

find . -inum #### -exec stat -c "%h" {} \;
Michael Martinez
quelle
Eine gute und präzise Erklärung der Inodes und Verzeichnisse finden Sie unter: learning.idallen.com/dat2330/04f/notes/links_and_inodes.html
Michael Martinez
Ebenfalls zu beachten: OSX verwendet eine andere Version von stat und -cerfordert stattdessen das folgende -fFlag: find . -inum #### -exec stat -f "%l" {} \;( %l"Anzahl der Hardlinks zur Datei")
joshfindit
2

Zum Beispiel

ls -l passwd
-rw-r--r-- 1 root root 1402 2008-03-30 17:49 passwd

Diese Nummer (1) ist tatsächlich die Anzahl der Links der Datei, wenn auf eine Datei verwiesen wird, oder die Anzahl der enthaltenen Verzeichniseinträge, wenn auf ein Verzeichnis verwiesen wird (einschließlich der Einträge. Und ..).

Auch zum Beispiel

ls -i /etc/passwd
8654127 /etc/passwd

Dies ist die Inode-Nummer für / etc / passwd. Jetzt können Sie herausfinden, wie viele Links tatsächlich mit dieser Anzahl von Inode 8654127 verknüpft sind mit:

find /etc/ -inum 8654127
/etc/passwd

In meinem Beispiel ist es nur / etc / passwd, also können Sie für Ihren Fall Folgendes tun:

find / -inum 592255
klerk
quelle
1

Um den Link Zählung von dem Inode zu erhalten , ohne das gesamte Dateisystem zu suchen, auf einem ext2/ ext3/ ext4Dateisystem Sie verwenden können debugfs. Der Nachteil hierbei ist, dass Sie das Gerät kennen und über Root-Rechte verfügen müssen. Der Vorteil ist natürlich, dass es viel, viel schneller sein kann. Für eine Datei mit inode 5638454auf dev/sda2:

sudo debugfs -R 'stat <5638454>' /dev/sda2

Ein btrfs, gegebener Einhängepunkt /mntanstelle des Geräts:

stat -c %h $(sudo btrfs inspect-internal inode-resolve 5638454 /mnt)
Graeme
quelle