Je me demande comment créer sous Linux quelque chose comme un lien symbolique, qui pointera vers différents répertoires pour différents utilisateurs le voyant. Je cherchais depuis longtemps et ai trouvé quelque chose appelé hlfsd - Bien sûr, les liens symboliques ordinaires ne peuvent pas le faire, car ils reposent sur des "trucs" du noyau, mais j'ai trouvé quelque chose qui pourrait résoudre ce problème.
Mais, existe-t-il une "meilleure" solution - quelque soit la méthode qui me donne un fichier de type lien, qui pointe vers différents répertoires en fonction de l'identifiant de l'utilisateur?
En gros ce que je veux faire:
Considérons que nous avons un serveur avec une structure de fichiers à l' A/{a1 a2}/{b1 b2}/{c1 c2}
intérieur de ces dossiers. Il existe de gros fichiers et ne devrait pas être copié sur le réseau. Disons que l'utilisateur U1 veut accéder à ces fichiers, il peut donc créer un lien symbolique (jusqu'ici tout va bien).
Le problème, c’est quand il veut accéder à cette structure et n’avoir qu’une copie locale, par exemple A/a1/b1/c1
. Bien sûr, nous pouvons faire beaucoup de liens symboliques localement, qui pointeront vers ces dossiers sur le serveur, mais nous n’avons aucune fonctionnalité très importante pour moi - quand quelqu'un ajoute un dossier A/a1/b1/c3
, puis cet utilisateur, qui était lié à cette structure de fichier et ont A/a1/b1/c1
localement, ne verra pas les modifications, car tous ses liens ont été créés manuellement.
la source
Réponses:
FreeBSD avait quelques manipulations spéciales de liens symboliques, je pense, appelées liens symboliques variadiques (bien qu'une recherche Google de ce terme ne trouve pas ce que je voulais). L'idée que vous ne faites pas un lien symbolique vers un chemin spécifique, mais une chaîne pouvant avoir des remplacements.
Non seulement vous êtes pris au dépourvu par le fait que Linux ne le supporte pas, mais il est plus difficile d’implémenter ce que vous voulez par utilisateur. Dans * BSD, il était fait pour créer des liens symboliques pour des chaînes simples que le noyau connaîtrait, comme l'architecture (c.-à-d. I686 vs x86_64). Alors, un symlnik de / opt / someapp / bin => / opt / someapp / $ {arch} / bin prend tout son sens. Mais vous voulez faire par utilisateur. Rappelez-vous que les liens symboliques sont résolus dans le noyau et que celui-ci ne connaît pas votre nom ni le répertoire principal. Il connaît votre userid, et c'est à peu près tout. Il faudrait passer en mode utilisateur pour obtenir des informations à votre sujet. Pas impossible, mais très délicat. Ensuite, comment fonctionneraient les programmes setuid?
En bref, je sais ce que vous voulez dire, ce que vous voulez, mais il est peu probable que vous y arriviez. Peut-être vérifier les fusibles et voir s’ils ont quelque chose que vous pouvez utiliser.
Pas tout à fait ce que vous avez dit, mais peut-être que vous pouvez le faire avec le contrôle de source. ClearCase (payware) avait un module de noyau qui ferait la plupart de ce que vous voulez, sans savoir s'il le ferait toujours. Même sans module de système de fichiers du noyau, vous pouvez probablement placer le contrôle de source distribuée dans 60 à 70% de ce que vous voulez.
la source
La solution simple est que je vois dans chaque dossier il y a dossier caché
.realfiles
dans les dossiers réels sont et dossiers sur le serveur commeA/a1
ouA/a1/b2
sont des liens symboliques dans le dossier ci - dessus A, doncA/a1
symlink à../MOUNT/.realfiles/a1
etA/a1/b2
est à ../MOUNT/.realfiles/a1 symlink /.realfiles/b1.Maintenant, fondamentalement, le MOUNT sur le serveur est un lien symbolique vers A. mais s'il sera possible de modifier les liens par utilisateur, le dossier MOUNT pointera vers un autre répertoire pour chaque utilisateur. Nous pourrons alors modifier certains liens à notre guise.
(Je connais cette situation particulière, mais j'ai mieux fait de l'expliquer bien)
la source