現在、基本環境ではやや古めの ports スケルトンを用いていますが、以下の様なエラーで削除が完了しない場合があります。
# rm -r ports/ override r-xr-xr-x root/wheel schg for ports/misc/compat4x/work/var/empty? rm: ports/misc/compat4x/work/var: Directory not empty rm: ports/misc/compat4x/work: Directory not empty rm: ports/misc/compat4x: Directory not empty rm: ports/misc: Directory not empty rm: ports/: Directory not empty
rm -rf に変更しても、プロンプトが返らなくなるだけで変わりません。
# rm -rf ports/ rm: ports/misc/compat4x/work/var/empty: Operation not permitted rm: ports/misc/compat4x/work/var: Directory not empty rm: ports/misc/compat4x/work: Directory not empty rm: ports/misc/compat4x: Directory not empty rm: ports/misc: Directory not empty rm: ports/: Directory not empty
パーミッションが許可されていても削除出来ない場合、chflags により削除出来ないフラグが設定されていることを想い出し、
ls -lo ports/misc/compat4x/work/var/ total 4 dr-xr-xr-x 2 root wheel schg 512 Oct 3 2004 empty
ls -lo で確認するとやはり schg フラグが付加されていました。
# chflags noschg ports/misc/compat4x/work/var/empty # rm -r ports/
該当のディレクトリ・ファイルのフラグを no で打ち消すことで削除は可能ですが、
# chflags 0 ports/misc/compat4x/work/var/empty # rm -r ports/
0 を指定することで、強制的にすべてのフラグをクリアすることも可能です。
compat4x/ 以外にも同様のケースがあった記憶がありますが、その様な場合は
# chflags -R 0 ports/misc/compat* # rm -r ports/
と chown 同様 -R で対象のディレクトリ配下すべてを一括変更出来ます。chflags (FreeBSD 日本語マニュアル) も参考になりました。