ある重要なディレクトリにシンボリックリンクがあります。そのシンボリックリンクを削除したいのですが、その後ろのディレクトリは残しておきたいのです。
rmを試してみると、
rm: cannot remove 'foo'. rmdir
を試したところ、rmdir: failed to remove 'foo'と表示されました。ディレクトリが空ではありません
。
その後、rm -f
, rm -rf
, sudo rm -rf
と進みました。
そして、バックアップを探しに行きました。
赤ちゃんをお風呂の水と一緒に捨てないでシンボリックリンクを取り除く方法はありますか?
# this works
rm foo
# versus
rm foo/
基本的には、ディレクトリの削除ではなく、ファイルの削除を指示する必要があります。rmと
rmdir`の違いは、Cライブラリがそれぞれを扱う方法の違いから生じていると思います。
いずれにしても、最初のものは動作するはずですが、2番目のものはfooがディレクトリであることについて文句を言うはずです。
もし、上記のように動作しない場合は、パーミッションを確認してください。ファイルを削除するには、そのディレクトリへの書き込み権限が必要です。
unlink "コマンドを使用して、最後に"/"をつけないようにしてください。
$ unlink mySymLink
unlink() は、ファイルシステムから名前を削除します。**その名前がファイルへの最後のリンクであり、どのプロセスもそのファイルを開いていない場合、ファイルは削除され、そのファイルが使用していたスペースは再利用可能になります。 その名前がファイルへの最後のリンクであり、そのファイルを開いているプロセスがない場合、そのファイルを参照している最後のファイル記述子が閉じられるまで、そのファイルは存在し続けます。
私の読みが正しければ、これは問題があると思います。
名前がシンボリックリンクを参照していた場合、リンクは削除されます。
名前がソケット、fifo、またはデバイスを参照していた場合、その名前は削除されますが、オブジェクトをオープンしているプロセスはそれを使用し続けることができます。