質問
重要なディレクトリへのシンボリックリンクがあります。そのシンボリックリンクを削除したいのですが、その後ろにディレクトリを保持します。
rm
を試して rmを取得しました:「foo」を削除できません
。
rmdir
を試したが、 rmdir: 'foo'を削除できませんでした:ディレクトリが空ではありません
その後、 rm -f
、 rm -rf
、および sudo rm -rf
その後、バックアップを探しに行きました。
お風呂で赤ちゃんを捨てずにシンボリックリンクを取り除く方法はありますか?
解決
# this works
rm foo
# versus
rm foo/
基本的に、ディレクトリを削除するのではなく、ファイルを削除するように指示する必要があります。 rm
と rmdir
の違いは、Cライブラリがそれぞれを処理する方法に違いがあるためだと思います。
とにかく、最初のものは動作するはずですが、2番目のものはfooがディレクトリであることについて文句を言うべきです。
上記のように機能しない場合は、許可を確認してください。ファイルを削除するには、含むディレクトリへの書き込み権限が必要です。
他のヒント
「リンク解除」を使用コマンドを実行し、最後に/が付いていないことをしないことを確認します
$ unlink mySymLink
unlink()は、ファイルシステムから名前を削除します。 その名前がファイルへの最後のリンクであり、ファイルを開いているプロセスがない場合、ファイルは削除され、使用していたスペースが再利用できるようになります。 名前がファイルへの最後のリンクであるが、プロセスがまだファイルを開いている場合、そのファイルを参照する最後のファイル記述子が閉じられるまで、ファイルは存在し続けます。
正しく読んでいる場合、これは問題になると思います。
名前がシンボリックリンクを参照している場合、そのリンクは削除されます。
名前がソケット、FIFO、またはデバイスを指している場合、その名前は削除されますが、オブジェクトを開いているプロセスは引き続き使用できます。
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:~$
rm symlinkname
を使用しますが、最後にスラッシュを含めないでください(使用しないでください: rm symlinkname /
)。シンボリックリンクを削除するかどうかを尋ねられます。 y
でyesと答えます。
それが実際にシンボリックリンクであると仮定すると、
$ rm -d symlink
それを把握する必要がありますが、もう存在しないがここで正しいことを行う別のケースを対象とした潜在コードを有効にすることはできません。
rmがシンボリックリンクを削除できない場合、おそらくシンボリックリンクを含むディレクトリの権限を調べる必要があります。ディレクトリエントリを削除するには、含むディレクトリに対する書き込み権限が必要です。
セットアップが ln -s / mnt / bar〜/ foo
のようなものであると仮定すると、 rm foo
を問題なく実行できるはずです。できない場合は、自分が foo
の所有者であり、ファイルの書き込み/実行の許可があることを確認してください。 foo
を削除しても、再帰的に実行しない限り、 bar
には触れません。
CentOSでは、 rm linkname
を実行するだけで、「シンボリックリンクを削除しますか?」と尋ねられます。 「 Y 」および「 Enter 」と入力すると、リンクがなくなり、ディレクトリが安全になります。
Windows Serverで実行されているMinGW(実際にはGit Bash)でこの問題が発生しました。上記の提案はどれも機能していないようです。最後に、ディレクトリのコピーを作成し、Windowsエクスプローラーでソフトリンクを削除してから、ごみ箱のアイテムを削除しました。ファイルを削除しているように聞こえましたが、しませんでした。ただし、バックアップを作成してください!