web-dev-qa-db-ja.com

ディレクトリへのシンボリックリンクを削除する

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

私はrmを試して、rm: cannot remove 'foo'を取り戻します。
私はrmdirを試し、rmdir: failed to remove 'foo': Directory not emptyを取り戻しました
私はそれからrm -frm -rfそしてSudo rm -rfを通して進みました

それから私は私のバックアップを見つけに行きました。

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

1024
Matthew Scouten
# this works
rm foo
# versus
rm foo/

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

いずれにせよ、最初のものは動作するはずですが、2番目のものはfooがディレクトリであることについて不平を言うべきです。

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

1247

"unlink"コマンドを使用して、最後に/があるようにnotにしてください。

$ unlink mySymLink

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

私はそれを正しく読んでいるなら、これは問題になるかもしれないと思います。

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

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

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

816
Joe Phillips

rmはシンボリックリンクを削除します。

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:~$ 
17
Steve K

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

15
DeeEss09

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

$ rm -d symlink

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

12
Joshua

Rmがシンボリックリンクを削除できない場合は、おそらくシンボリックリンクを含むディレクトリのパーミッションを調べる必要があります。ディレクトリエントリを削除するには、それを含むディレクトリに対する書き込み権限が必要です。

7
Greg Hewgill

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

4
tj111

私はMinGW(実際にはGit Bash)がWindows Server上で動作しているときにこの問題を抱えていました。上記の提案はどれもうまくいかないようでした。結局、場合に応じてディレクトリのコピーを作成してから、Windowsエクスプローラでソフトリンクを削除してから、ごみ箱内の項目を削除しました。それはファイルを削除していたがそうではなかったようにそれは音を立てました。でもバックアップを取ってください。

2

CentOSでは、rm linknameを実行するだけで、 "シンボリックリンクを削除しますか?"というメッセージが表示されます。タイプ Y そして Enterリンクは消え、ディレクトリは安全になります。

2
Yuri