Y a-t-il un moyen de créer un fichier sous Linux qui lient-il à une inode spécifique?
Prenez ce scénario: il y a un fichier qui est en cours d'écriture (un journal peut-être) et le fichier spécifique est supprimé mais strong> un lien dans le Dir / Proc est toujours en pointant. Dans ce cas, nous avons besoin Si nous avons le numéro d'inode, il existe un moyen d'atteindre cet objectif? P>
3 Réponses :
Vous pouvez utiliser lsof pour récupérer des fichiers supprimés (parfois) ...
> ls -l /proc/4607/fd/4 lr-x------ 1 juliet juliet 64 Apr 7 03:19 /proc/4607/fd/4 -> /home/juliet/testing.txt (deleted) > cp /proc/4607/fd/4 testing.txt.bk
Haleter. Tu as raison. Je pensais que je viens de tester cela, et ça n'a pas fonctionné. NTL: L'OP a demandé un lien dur, spécifiquement pas une copie.
Il est toujours difficile de répondre à une question comme "puis-je faire" en toute confiance dans le négatif. Mais autant que je ne le vois, ni / SYS / NOR / PROC ne fournit une cartographie des descripteurs de fichiers ouverts qui ne sont pas des liens symboliques. Je suppose par "mais un lien dans le Dir / Proc est toujours en pointant dessus" Vous voulez dire que le / proc // fd / entrées ressemblent à des liens symboliques? Je suis presque sûr que vous ne pouvez pas récupérer le fichier d'origine. p>
Je suppose que le dos: comme l'utilisateur utilisateur2676075 a souligné, la copie fonctionne. Juste Hardlinking ne ... p>
the / proc / * / fd / entrées prétend être symboliques, mais en réalité, ils sont différents, sinon la copie ne fonctionnerait pas. Je pense qu'ils prétendent être des liens symboliques pour fournir des informations significatives avec "ln -l". p> li>
Concernant la fonctionnalité (manquante) à la traduite dure de certains inodes (disons avec un appel système): cela ne peut pas faire partie du noyau ou de l'interface VFS, pour les raisons suivantes: P>
Cela violerait l'intégrité du système de fichiers. Le système de fichiers n'est pas censé conserver les blocs de disque des fichiers complètement supprimés de la même manière que des fichiers qui persistent. P> li>
Les inodes pourraient être un concept totalement virtuel pour identifier un "emplacement où une image de données est stockée". Je suppose qu'il peut y avoir des implémentations qui auraient un problème de conversion d'une fente qui n'a pas de référence à une fente qui est renvoyée à une fente qui est renvoyée à une fente référé par un nom dans le système de fichiers. p> li>
ul>
J'admets le cas contre la possibilité d'un tel appel système n'est pas étanche à l'eau. Mais compte tenu de l'état actuel de l'interface VFS (qui afair ne prévoit pas un tel appel), ce serait un lourd fardeau pour toute mise en œuvre du système de fichiers (y compris par exemple les systèmes de fichiers distribués) afin de fournir un appel à lier un fichier dans un fichier Annuaire par inode. p> li>
ul>
ATM Je me demande si vous appelez FSTAT avant et après avoir supprimé la dernière référence, il faut réellement renvoyer les mêmes informations d'inode ...
t p>
La raison pour laquelle il n'existe pas d'inode hardlink-to-inode, c'est que cela permettrait aux gens d'accéder aux fichiers qu'ils ne devraient pas. Un répertoire 700 rend tout sous-traitant privé, à moins que vous ne puissiez pas le contourner avec un numéro d'inode comme argument de lien (2). Ce qui serait bien pour cette situation est un lien (2) de prendre un descripteur de fichier ouvert. Bien que même cela ouvrirait de nouveaux processus, les processus pouvaient faire, si vous avez commencé avec une FD ouverte sur un fichier non accessible, ou un autre que vous ne pouviez pas ouvrir vous-même. De plus, la sémantique de suppression est la suivante: l'espace disque vit jusqu'à ce que le dernier lien et le dernier FD ouvert et le dernier MMAP disparaisse.
Comme il n'y a pas de syscall qui implique de l'inode, car il s'agit d'un concept d'extx FS et n'est pas une bonne pratique de faire un tuyau de poêle, mais il est de faire une chaîne de responsabilité (comme suggère MEL), il n'y a qu'un mais strong> pour atteindre l'objectif de suivre la dernière modification que nous pouvons utiliser une surveillance continue et une duplication avec queue em>: p> tail -c+1 -f --pid=PID /proc/PID/fd/FD > /path/to/the/copy
Les inodes ne sont pas spécifiques à EXT2 / 3/4. Ils font partie de la spécification POSIX pour la manière dont System appelle comme STAT (2) Travailler et comment vous trouvez des hardlinks. Mais malheureusement, vous avez raison qu'il ne semble pas être un moyen de créer un lien de / proc / pid / fd / fd à un fichier réel, ouvrez-le simplement pour lire / écrire. Si seulement il y a eu un appel système tel que lien (2) qui a pris un descripteur de fichier ouvert comme source, plutôt qu'un chemin.