読者です 読者をやめる 読者になる 読者になる

rm -rf symlink/して不幸になりたくなければ unlinkを使えばいい

unix linux

シンボリックリンクをrm -rf symlink/すると不幸になる - かーねる・う゛いえむにっき


ですが、ディレクトリを消してしまうというリスクをそもそもなくして
しまえばいいですよね。その答えが unlinkコマンドです。

unlinkコマンド

ファイルだけ消せる rmコマンドのように思っていただければよいかと
思います。ディレクトリは消せません。オプションもほとんどありません。
coreutilsだと rmとソースは違いますが、FreeBSDだと rmのハードリンクです。


ついでにソースは以下のような感じでした。(FreeBSDの bin/rm/rm.cより抜粋)

        if (strcmp(p, "unlink") == 0) {
                while (getopt(argc, argv, "") != -1)
                        usage();
                argc -= optind;
                argv += optind;
                if (argc != 1)
                        usage();
                rm_file(&argv[0]);
                exit(eval);
        }

ファイルしか消せないので、うっかり後ろにバックスラッシュをつけても
大丈夫です。

% ln -sf somedir symdir
% unlink symdir/ # NG
unlink: cannot unlink `symdir/': Not a directory
% unlink symdir # OK
%

おわりに

私も含め、ファイル・ディレクトリを削除は rmコマンドに慣れきっていると
思うんですが、シンボリックリンクを消すときは unlinkって覚えておけば、
不幸に機会を一つ減らせるのではないでしょうか.