web-dev-qa-db-fra.com

Comment éditer quand même .conf sur un lien symbolique en utilisant vim?

J'ai un fichier dans ../new-path/ dir.

lrwxrwxrwx 1 root root   32 Sep  6 19:43 test1.conf -> ../new-path1/test1.conf

Quand je l'édite avec Vim en utilisant Sudo vim test1.conf sur dans la boîte de dialogue Vim dit.

"test1.conf" [Permissions Denied]

comment je l’édite quand même sur un lien symbolique en utilisant Vim. Je vraiment débutant à propos de symlink.

NOTE

J'ai essayé this post , il supprimera les fichiers/dossiers et le lien symbolique bien sûr, mais je n'ai besoin que de supprimer le lien symbolique en tant que fichier indépendant sans le supprimer ou sans le dissocier car je n'ai pas de sauvegarde n'importe quoi.

EDIT1

La sortie de lsattr $ (readlink -f test1.conf)

--------------e---- ./test2.conf
--------------e---- ./default-ssl.conf
lsattr: Operation not supported While reading flags on ./test1.conf

EDIT2

La sortie de ls -l ../new-path1/test1.conf

lrwxrwxrwx 1 root root 32 Sep 10 14:13 ../new-path1/test1.conf -> ../new-path1/test1.conf

Merci pour tout conseil, J'espère que tout le monde pourra m'aider.

3

Qu'est-ce qu'un lien symbolique (logiciel) (lien symbolique du nom abrégé)?

Un lien symbolique est un pointeur sur un fichier situé ailleurs sur votre disque dur. Les liens symboliques facilitent votre travail avec les fichiers. Dans Windows, il existe similaires des pointeurs appelés raccourcis, qui sont utilisés pour le bureau. Vous n'avez donc pas besoin de cliquer dans un dossier pour lancer un programme. Au lieu de cela, vous mettez un raccourci sur votre bureau qui pointe vers le programme dans un dossier situé ailleurs sur le système.

Symlink fait la même chose sur linux, MAIS c'est pour la console/le système et n'a rien à voir avec Graphics par lui-même. Ainsi, les programmes et les utilisateurs d’un système de fichiers Linux peuvent créer ces pointeurs pour rechercher les fichiers de manière plus efficace.

Comment créer un lien symbolique? Comment ça marche?

Je suis dans mon dossier personnel et vais créer un dossier de test et un fichier de test.

pwd
/home/simmel

Créer un dossier et un fichier

mkdir testfolder
touch testfolder/testfile

La liste montrera

ls -la testfolder 
total 40
drwxr-xr-x  2 simmel simmel  4096 Sep 11 16:19 .
drwxr-xr-x 88 simmel simmel 24576 Sep 11 16:22 ..
-rw-r--r--  1 simmel simmel     0 Sep 11 16:19 testfile

Maintenant, je vais créer un lien symbolique dans mon dossier personnel dans le dossier de test.

pwd
/home/simmel

ln -s testfolder/testfile

ls -la testfile       
lrwxrwxrwx 1 simmel simmel 19 Sep 11 16:24 testfile -> testfolder/testfile

Si vous rencontrez des problèmes pour accéder à un fichier lié symboliquement, jetez toujours un coup d'œil au fichier ou au dossier lui-même et PAS au lien symbolique.

ls -la sur le lien symbolique indique rwx pour tout le monde, mais ce n'est pas vrai du tout! Vous devez consulter le fichier à l’intérieur du dossier (voir ci-dessus) qui indique clairement

ls -la testfolder 
total 40
drwxr-xr-x  2 simmel simmel  4096 Sep 11 16:19 .
drwxr-xr-x 88 simmel simmel 24576 Sep 11 16:22 ..
-rw-r--r--  1 simmel simmel     0 Sep 11 16:19 testfile

Cela signifie que l'utilisateur simmel peut accéder au dossier (lire, écrire, exécuter), le groupe simmel ne peut que lire et exécuter, ainsi que quiconque sur le système. Si je change les droits ou la propriété sur le fichier ou le dossier, les choses seront différentes. Alors disons que nous faisons quelque chose comme donner le fichier à root.

Sudo chown root:root testfolder/testfile

ls -la
total 40
drwxr-xr-x  2 simmel simmel  4096 Sep 11 16:19 .
drwxr-xr-x 88 simmel simmel 24576 Sep 11 16:29 ..
-rw-r--r--  1 root   root       0 Sep 11 16:19 testfile

Comme vous pouvez le constater, le fichier appartient maintenant à root et les modifications ne peuvent être effectuées que par root, mais l'utilisateur simmel peut toujours le lire. Voyons ce que dit le lien symbolique, cela a-t-il changé de quelque façon que ce soit?

ls -la testfile 
lrwxrwxrwx 1 simmel simmel 19 Sep 11 16:24 testfile -> testfolder/testfile

Non, c'est toujours pareil. Alors ne vous fiez pas à regarder le lien symbolique lui-même, regardez de près la cible.

Dans Ubuntu, les droits d’un lien symbolique n’ont aucune importance (différent dans BSD, par exemple).

Un lien symbolique pointe vers un dossier et/ou un fichier. Pour obtenir des autorisations sur un dossier/fichier lié symboliquement, vous devez modifier les droits du dossier/fichier lui-même.

En d'autres termes, si vous décidez de changer la propriété ou le mode d'un lien symbolique, vous allez changer la propriété ou le mode du dossier/fichier lui-même.

Qu'est-ce qui se passe avec votre fichier?

Pour être honnête, je ne peux que deviner ce qui se passe. La suggestion de PerlDuck était que vous ou quelqu'un d'autre fît accidentellement cela

ln -s testfile testfile

Ce serait un lien symbolique pointant vers lui-même. Un lien mort, car il ne pointe pas vers un fichier ailleurs sur le système de fichiers, mais vers lui-même. Si vous utilisez un terminal de couleur, vous verrez même une couleur rouge dans le terminal, ce qui vous indique que ce lien est complètement rompu.

MAIS, pour créer un tel lien mort, il ne pouvait pas y avoir de fichier portant le même nom dans le même répertoire. Cela ne fonctionne pas.

J'espère donc toujours que votre fichier n'est pas parti. Essayez de le trouver.

faire

Sudo find / -name test1.conf

peut-être avez-vous de la chance et il est toujours là.

Si vous ne le trouvez pas, votre fichier risque d'être perdu pour toujours et vous devrez en créer un nouveau.

2
s1mmel

Votre lien symbolique

test1.conf -> ../new-path1/test1.conf

est un lien mort. Il pointe vers un répertoire non existant. Vous avez dit qu'il y a un fichier sous ../new-path/ mais le lien pointe vers ../new-path1. Fixez le lien:

ln -fs ../new-path/test1.conf test1.conf

Après votre modification, il est clair que vous avez créé n lien symbolique à référence automatique de ../new-path1/test1.conf à ../new-path1/test1.conf, c'est-à-dire que dans le répertoire new-path1, il existe un lien symbolique nommé test1.conf qui pointe sur lui-même. Donc, test1.conf est un lien symbolique vers test1.conf qui est un lien symbolique vers test1.conf qui est un…:

pduck@Host> ls -L ../new-path/test1.conf 
ls: cannot access '../new-path/test1.conf': Too many levels of symbolic links

Supprimez ce lien symbolique (rm test1.conf), créez-le à nouveau et faites-le pointer vers un fichier existant.

2
PerlDuck