1153

重要なディレクトリへのシンボリック リンクがあります。ディレクトリをその背後に置いたまま、そのシンボリックリンクを取り除きたい。

私は試しrmてみましたrm: cannot remove 'foo'
私は試してrmdir戻ってきましrmdir: failed to remove 'foo': Directory not empty
rm -frm -rfsudo rm -rf

それから私は自分のバックアップを探しに行きました。

お風呂の水で赤ちゃんを捨てずにシンボリックリンクを取り除く方法はありますか?

4

11 に答える 11

1393
# this works:
rm foo
# versus this, which doesn't:
rm foo/

基本的に、ディレクトリを削除するのではなく、ファイルを削除するように指示する必要があります。と の違いは、C ライブラリがそれぞれを扱う方法の違いによるものだと思います。rmrmdir

いずれにせよ、最初のものは機能するはずですが、2番目のものは foo がディレクトリであることに文句を言うはずです.

上記のように機能しない場合は、権限を確認してください。ファイルを削除するには、格納されているディレクトリへの書き込み権限が必要です。

于 2008-10-16T20:22:41.180 に答える
851

「リンク解除」コマンドを使用し、最後に/がないことを確認してください

$ unlink mySymLink

unlink() は、ファイル システムから名前を削除します。その名前がファイルへの最後のリンクであり、ファイルを開いているプロセスがない場合、ファイルは削除され、使用していたスペースが再利用できるようになります。 名前がファイルへの最後のリンクであったが、プロセスがまだファイルを開いている場合、そのファイルは、それを参照している最後のファイル記述子が閉じられるまで存在し続けます。

正しく読んでいると、これは問題になる可能性があると思います。

名前がシンボリック リンクを参照している場合、そのリンクは削除されます。

名前がソケット、fifo、またはデバイスを参照している場合、その名前は削除されますが、オブジェクトを開いているプロセスは引き続きそれを使用できます。

https://linux.die.net/man/2/unlink

于 2008-10-16T20:22:33.490 に答える
20

rm should remove the symbolic link.

skrall@skrall-desktop:~$ mkdir bar
skrall@skrall-desktop:~$ ln -s bar foo
skrall@skrall-desktop:~$ ls -l foo
lrwxrwxrwx 1 skrall skrall 3 2008-10-16 16:22 foo -> bar
skrall@skrall-desktop:~$ rm foo
skrall@skrall-desktop:~$ ls -l foo
ls: cannot access foo: No such file or directory
skrall@skrall-desktop:~$ ls -l bar
total 0
skrall@skrall-desktop:~$ 
于 2008-10-16T20:24:24.203 に答える
18

rm symlinkname最後にスラッシュを使用しますが、含めないでください (使用しないでください: rm symlinkname/)。次に、シンボリックリンクを削除するかどうかを尋ねられますので、yはいと答えてください。

于 2012-08-21T21:13:21.250 に答える
14

それが実際にシンボリックリンクであると仮定すると、

$ rm -d symlink

それを理解する必要がありますが、もはや存在しないがここで正しいことを行う別のケースを対象とした潜在的なコードを有効にすることはできないためです。

于 2008-10-16T22:29:20.440 に答える
8

rm でシンボリック リンクを削除できない場合は、おそらく、シンボリック リンクを含むディレクトリのアクセス許可を確認する必要があります。ディレクトリ エントリを削除するには、含まれているディレクトリに対する書き込み権限が必要です。

于 2008-10-16T20:21:00.543 に答える
5

セットアップが次のようなものであると仮定すると、問題なくln -s /mnt/bar ~/fooa を実行できるはずですrm foo。できない場合は、自分が の所有者でありfoo、ファイルの書き込み/実行権限を持っていることを確認してください。再帰的に行わない限り、削除してfooも には触れません。bar

于 2008-10-16T20:23:45.687 に答える
3

CentOS では、実行するだけでrm linkname「シンボリック リンクを削除しますか?」と尋ねられます。と入力するYEnter、リンクがなくなり、ディレクトリが安全になります。

于 2014-09-17T19:23:28.723 に答える