web-dev-qa-db-fra.com

Comment contourner l'autorisation de création de liens physiques vers des répertoires sur le même système de fichiers

Je suis bien conscient de la différence entre les liens symboliques et durs . Je suis également conscient des dangers de création de liens durs vers des répertoires .

Néanmoins, je suis insistant sur la création d'un lien dur vers un répertoire et tous ses sous-répertoires (sur le même partition).

Cependant, ce qui suit ne fonctionne pas:

root@fab-ux:/home/fab-user/Public
# ln --directory ../Documents/CV/ CV
ln: failed to create hard link ‘CV’ => ‘../Documents/CV/’: Operation not permitted

Existe-t-il un paramètre noyau/système de fichiers (fonctionnant sur EXT4) qui me permettra d'accomplir cette folie?

Oui, je peux monter bind, peut lier dur des fichiers individuels via un travail cron, ... Mais le fait est que je veux à la fois la commodité d'un seul répertoire physiquement et tous ses fichiers et le commodité de ne télécharger que certains répertoires liés dans mon annuaire public dans le cloud et le logiciel cloud détecte les liens symboliques et ne les prend pas en charge et le plus important de tous: J'utilise Ubuntu! Pas OSX ni Windows: je veux que le système fasse ce que [~ # ~] je [~ # ~] veux!

1
Fabby

Tant que vous restez sur un noyau actuel (c'est une fonctionnalité du noyau plutôt qu'un système de fichiers), il n'y a presque aucun moyen de contourner ces limitations.

Limitations des liens durs

Pour éviter les boucles dans le système de fichiers et pour garder l'interprétation de .. (Répertoire parent) cohérente, de nombreux systèmes d'exploitation modernes n'autorisent pas les liens physiques vers les répertoires. UNIX System V les autorisait, mais seul le superutilisateur était autorisé à établir de tels liens.

The Open Group Base Specifications Issue 7 (extrait)

... La liaison à un répertoire est limitée au superutilisateur dans la plupart des implémentations historiques car cette capacité peut produire des boucles dans la hiérarchie des fichiers ou corrompre le système de fichiers . Ce volume de POSIX.1-2008 poursuit cette philosophie en interdisant à link () et unlink () de le faire . D'autres fonctions pourraient le faire si l'implémenteur a conçu une telle extension ...


Parce qu'il n'y a plus d'appel système comme link() qui ne vérifie pas que l'ancien chemin est un fichier normal, la seule issue peut être de créer une fonction similaire à linkat () le faire votre façon désirée.

4
cmks

Vous ne pouvez pas créer de liens durs vers des répertoires sous Linux. J'ai entendu dire qu'OSX autorise cela pour que Time Machine l'utilise, mais pas Linux. Le plus proche que vous pouvez faire est cp -l, qui créera une nouvelle arborescence de répertoires reflétant l'original, mais reliant en dur tous les fichiers normaux.

1
psusi