Impossible de supprimer le lien symbolique

J'ai accidentellement inversé les parameters de mon ln et j'ai appelé:

ln -s my_link my_dir 

où my_dir existait déjà et my_link ne l'avait pas fait. J'ai supprimé my_dir, mais je ne peux pas supprimer my_link.

Si je suis – l l'annuaire parent de my_link, j'ai 1 réponse sur 2, soit:

 l????????? ? ? ? ? ? my_link 

ou:

 lrwxrwxrwx 1 username username 8 Mar 20 16:34 my_link 

Si j'appelle rm my_link je reçois:

 rm: cannot remove `my_link': Not a directory 

Et, je ne sais pas si c'est pertinent, mais my_link réside sur un lecteur monté sur le réseau.

Est-ce que quelqu'un sait ce que j'ai fait ici et comment supprimer le lien brisé?

Edit: J'ai parcouru mon bash_history et j'ai trouvé les commands que j'ai exécutées. Il semble que je n'ai pas effectivement supprimé my_dir, il a simplement cessé d'être. Et j'ai couru plusieurs versions de la mauvaise command ln.

Voici la list non éditée des commands que j'ai exécutées avant de supprimer la suppression des erreurs:

 ln -s test_dir ~/netdrive/test_dir/ ln -s test_dir ~/netdrive/test_dir ln -s test_dir/ ~/netdrive/test_dir/ 

Vous remarquerez que j'ai supprimé my_link et my_dir. Les noms réels sont à la fois test_dir, et cela a probablement consortingbué à une partie de ma confusion (une erreur que j'espère ne jamais refaire).

Donc maintenant il n'y a plus de directory ~ / test_dir, il existe un directory ~ / netdrive / test_dir / et il y a le lien brisé ~ / netdrive / test_dir / test_dir

C'est ce dernier que j'essaie de supprimer. J'espère que cela clarifie plutôt que les boues de l'eau plus.

Modifier 2 :

Mon operating system est CentOS et je suis bien sûr que le lecteur réseau est un Samba.

Voici les dernières lignes de sortie de strace -f -v unlink test_dir :

 unlink("test_dir") = -1 ENOTDIR (Not a directory) open("/usr/share/locale/locale.alias", O_RDONLY) = 3 fstat(3, {st_dev=makedev(8, 3), st_ino=1573552, st_mode=S_IFREG|0644, st_nlink=1, st_uid=0, st_gid=0, st_blksize=4096, st_blocks=8, st_size=2512, st_atime=2012/03/21-02:19:02, st_mtime=2012/03/15-13:42:39, st_ctime=2012/03/16-05:31:49}) = 0 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fc843b2f000 read(3, "# Locale name alias data base.\n#"..., 4096) = 2512 read(3, "", 4096) = 0 close(3) = 0 munmap(0x7fc843b2f000, 4096) = 0 open("/usr/share/locale/en_US.UTF-8/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory) open("/usr/share/locale/en_US.utf8/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory) open("/usr/share/locale/en_US/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory) open("/usr/share/locale/en.UTF-8/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory) open("/usr/share/locale/en.utf8/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory) open("/usr/share/locale/en/LC_MESSAGES/coreutils.mo", O_RDONLY) = 3 fstat(3, {st_dev=makedev(8, 3), st_ino=1575882, st_mode=S_IFREG|0644, st_nlink=2, st_uid=0, st_gid=0, st_blksize=4096, st_blocks=8, st_size=435, st_atime=2012/03/20-11:53:41, st_mtime=2011/12/07-16:51:00, st_ctime=2011/12/21-05:34:01}) = 0 mmap(NULL, 435, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fc843b2f000 close(3) = 0 write(2, "unlink: ", 8unlink: ) = 8 write(2, "cannot unlink `test_dir'", 24cannot unlink `test_dir') = 24 open("/usr/share/locale/en_US.UTF-8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory) open("/usr/share/locale/en_US.utf8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory) open("/usr/share/locale/en_US/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory) open("/usr/share/locale/en.UTF-8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory) open("/usr/share/locale/en.utf8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory) open("/usr/share/locale/en/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory) write(2, ": Not a directory", 17: Not a directory) = 17 write(2, "\n", 1 ) = 1 close(1) = 0 close(2) = 0 exit_group(1) = ? 

Et les dernières lignes de strace -f -v rm test_dir :

 newfstatat(AT_FDCWD, "test_dir", 0x7fff71464640, AT_SYMLINK_NOFOLLOW) = -1 ENOTDIR (Not a directory) open("/usr/share/locale/locale.alias", O_RDONLY) = 3 fstat(3, {st_dev=makedev(8, 3), st_ino=1573552, st_mode=S_IFREG|0644, st_nlink=1, st_uid=0, st_gid=0, st_blksize=4096, st_blocks=8, st_size=2512, st_atime=2012/03/21-02:19:02, st_mtime=2012/03/15-13:42:39, st_ctime=2012/03/16-05:31:49}) = 0 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f039e56b000 read(3, "# Locale name alias data base.\n#"..., 4096) = 2512 read(3, "", 4096) = 0 close(3) = 0 munmap(0x7f039e56b000, 4096) = 0 open("/usr/share/locale/en_US.UTF-8/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory) open("/usr/share/locale/en_US.utf8/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory) open("/usr/share/locale/en_US/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory) open("/usr/share/locale/en.UTF-8/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory) open("/usr/share/locale/en.utf8/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory) open("/usr/share/locale/en/LC_MESSAGES/coreutils.mo", O_RDONLY) = 3 fstat(3, {st_dev=makedev(8, 3), st_ino=1575882, st_mode=S_IFREG|0644, st_nlink=2, st_uid=0, st_gid=0, st_blksize=4096, st_blocks=8, st_size=435, st_atime=2012/03/20-11:53:41, st_mtime=2011/12/07-16:51:00, st_ctime=2011/12/21-05:34:01}) = 0 mmap(NULL, 435, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f039e56b000 close(3) = 0 write(2, "rm: ", 4rm: ) = 4 write(2, "cannot remove `test_dir'", 24cannot remove `test_dir') = 24 open("/usr/share/locale/en_US.UTF-8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory) open("/usr/share/locale/en_US.utf8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory) open("/usr/share/locale/en_US/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory) open("/usr/share/locale/en.UTF-8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory) open("/usr/share/locale/en.utf8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory) open("/usr/share/locale/en/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory) write(2, ": Not a directory", 17: Not a directory) = 17 write(2, "\n", 1 ) = 1 close(0) = 0 close(1) = 0 close(2) = 0 exit_group(1) = ? 

Assurez-vous que vous ne incluez pas un système de suivi /

ie rm my_link PAS rm my_link/

La traînée / indique que vous souhaitez supprimer le contenu au-delà du lien symbolique

Essaye de faire:

 rm -rf my_link 

Je l'ai testé sur un système de files local et sur un système de files réseau (NFS) et cela a fonctionné.

Avez-vous essayé rm -rf my_link ?

S'il vous plaît essayez

 unlink test_dir 

Si cela ne vous aide pas, ajoutez la sortie de

 strace -f -v unlink test_dir 

et

 strace -f -v rm test_dir 

(Seules les dernières lignes – à partir de 'unlink' ou 'newfstatat' sont nécessaires.)

J'ai réussi à résoudre cela, même si je ne comprends pas complètement comment ou ce qui a vraiment mal tourné.

En regardant les files mystérieux, "pas un directory" , j'ai trouvé quelqu'un avec un problème similaire. Ils ont pu supprimer le "file mystère" par ssh'ing dans la machine qui faisait le partage et supprime le file à partir de là.

Je n'ai pas de privilèges ssh sur cette machine, mais je peux FTP. Et, incroyablement, j'ai pu supprimer le lien.

Je suppose que le problème était une combinaison de Samba et de mauvais appels. Merci pour toute votre aide d'get ce sortingé.

J'ai le même symptôme d'un client CentOS sur une ressource montée sur CIFS.

Pour moi, le problème est lié à savoir si la cible du lien symbolique existe au moment où vous essayez de supprimer le lien symbolique. Si la cible existe, cela fonctionne. Si la cible n'existe pas, la suppression du lien symbolique échoue.

 $ touch a $ ln -sab $ ls -l total 0 -rw-rw-r--. 1 andi andi 0 Jan 6 14:42 a lrwxrwxrwx. 1 andi andi 1 Jan 6 14:42 b -> a # Remove link target target and then try to remove link: $ rm a $ ls -l total 0 lrwxrwxrwx. 1 andi andi 1 Jan 6 14:42 b -> a # With colors on, the b and a are now marked red $ rm b rm: cannot remove 'b': No such file or directory $ ls -l total 0 lrwxrwxrwx. 1 andi andi 1 Jan 6 14:42 b -> a # With colors on, the b and a are now marked red # Reestablish link target target and then try to remove link: $ touch a $ ls -l total 0 -rw-rw-r--. 1 andi andi 0 Jan 6 14:44 a lrwxrwxrwx. 1 andi andi 1 Jan 6 14:42 b -> a $ rm b $ ls -l total 0 -rw-rw-r--. 1 andi andi 0 Jan 6 14:44 a 

Le même test, lorsqu'il est effectué sur un système de files local, fonctionne bien (c.-à-d. Le lien symbolique brisé peut être supprimé avec succès).

Mon client CIFS est un CentOS 7, en utilisant le package cifs-utils. Que CentOS est un invité sur VirtualBox sur un hôte Windows 7, mais cela ne devrait pas être important car le périphérique réseau est virtualisé dans ce scénario, et non le système de files ou le périphérique de stockage.

Mon server CIFS est une boîte NAS Synology avec DSM 5.2, avec un support de lien symbolique activé dans ses options CIFS / SMB.

-> D'autres personnes peuvent-elles confirmer ce comportement? -> Toute explication?

Andy