LoginSignup
4
1

link/unlinkはハードリンクの作成・削除コマンド。シンボリックリンク用ではないしファイルも削除する管理者用コマンド。

Last updated at Posted at 2023-10-10

はじめに

unlink コマンドはハードリンクを削除するコマンドです。コマンド名に link と入っているから勘違いしている人がいるようですがシンボリックリンクを削除するために作られたコマンドではありません。unlink コマンドの反対は link コマンドです。

link コマンドはハードリンクを作成します。その反対なので unlink コマンドはハードリンクを削除するコマンドと言って良いでしょう。リンクを削除してどこからもリンクされなくなったファイルは消えるのでunlink コマンドはファイルも削除します。シンボリックリンクファイルもファイルなので削除されます。

link/unlink はシステム管理者用のコマンド

link/unlink はシステム管理コマンドです。本来は一般ユーザー用ではありません。Solaris 11 では /usr/sbin 以下にあります。

Solarisではsbin以下にある
$ which link unlink
/usr/sbin/link
/usr/sbin/unlink
$ which rm
/usr/bin/rm
/usr/bin/ln

Linux などでは一般ユーザー用コマンドとして扱われているような気がしますが。

GNU unlink のドキュメントによると、一部のシステムでは unlink コマンドはディレクトリを削除することが出来ます。別のシステムでは特権ユーザーでなければ unlink コマンドを実行することは出来ません。GNU 版はディレクトリを削除することありません。

On some systems unlink can be used to delete the name of a directory. On others, it can be used that way only by a privileged user. In the GNU system unlink can never delete the name of a directory.

rm を使ったほうが安全

Solaris は rm を使ったほうが安全と言っています。

While linked files and directories can be removed using unlink, it is safer to use rm(1) and rmdir(1) instead. See rm(1) and rmdir(1).

リンクされたファイルやディレクトリは unlink を使って削除できるが、代わりに rm(1) や rmdir(1) を使った方が安全である。rm(1) と rmdir(1) を参照のこと。

シンボリックリンクの削除には rm コマンドを使います。オプションを何も指定しなければ、rm コマンドでシンボリックリンクを消そうとしてシンボリックリンク先のファイルが消えたりすることはありません。rm コマンドには「削除してもよろしいですか?」と確認する機能がついています。その時に削除対象が通常のファイルかシンボリックリンクかも教えてくれます。ファイルごとに確認されるのがウザいなら -i の代わりに -I を使いましょう。正しく使えば rm コマンドは unlink コマンドよりも安全です。

rm コマンドを使う時に、何も考えずに -r-f オプションを付ける癖はなくしましょう。シンボリックリンクファイルを消す時に -r がいらないのはすぐに分かりますよね?なんでも -f を付けているとせっかくの削除時の確認機能が無意味なものになってしまいます。確認メッセージを読まずに「はい」「はい」「はい」とクリックしているのと同じことです。オプションの意味を知って、必要なときだけ指定するようにしましょう。

シンボリックリンクの削除は unlink のほうが安全という謎理論

この理論を唱えている人は、unlink コマンドをシンボリックリンクを削除するコマンドだと勘違いしています。

なぜなら、もし勘違いしていないなら「ファイルの削除には rm コマンドよりも unlink コマンドを使ったほうが安全」と言っているはずだからです。

ファイルの削除に rm コマンドを使っていながら、シンボリックリンクの場合だけ(ファイルを削除する) unlink コマンドを使うというのではおかしな話ですね。

結局のところ、必要ないのに -r オプションを付けるなという話です。

さいごに

使いたいのなら unlink でシンボリックリンクを削除しても構いませんが、unlink はハードリンクを削除するシステム管理コマンドで通常のファイルまでも消してしまうコマンドです。

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1