1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

lnコマンドのnオプションについて

Last updated at Posted at 2023-11-20

はじめに

lnコマンドのnオプションについての備忘録。

lnコマンドとは

lnコマンドはLinuxにおいてリンクを張るためのコマンドです。リンクを用いることでファイルやディレクトリに対して別名を付けることができるようになります。

イメージとしてはWindowsにおけるショートカットやMac OSにおけるエイリアスに近いものになります。

リンクにはハードリンクとシンボリックリンクがあります。sオプションを付与するとシンボリックリンクになります。

ハードリンクの使用は限定的です。本記事でもシンボリックリンクを前提に進めていきます。違いについては言及しないので別記事をご参考ください。

nオプションについて

lnにはさまざまなオプションがあるのですが、その中でnオプションについて実例を交えて説明します。
まず、ヘルプを見ると

   -n, --no-dereference
         treat LINK_NAME as a normal file if it is a symbolic link to a directory

「指定したシンボリックリンク(LINK_NAME)が既にディレクトリを参照している場合、LINK_NAMEを通常のファイルとして扱う」と言っています。よくわかりません。

実際にコマンドを打って動作を確かめてみます。

$ mkdir dir1
$ ln -s dir1/ link1

カレントディレクトリにディレクトリ dir1、シンボリックリンク link1 があり、link1dir1 を参照しているような状況です。
lnコマンドの記法はさまざまあるのですが、

ln -s <TARGET> <DIRECTORY>

とすると通常 TARGET に対するシンボリックリンクが DIRECTORY の配下に生成されます。
例えば

$ ln -s /etc/os-release link1
$ ls link1

とすると、link1 ( dir1 )の中に os-release という名前のシンボリックリンクが生成されているのが確認できると思います。

一方、nオプションを付けるとどうなるか。

$ ln -snf /etc/os-release link1
$ cat link1 

とすると、os-release の中身が確認できたと思います。つまり、link1 はもはやディレクトリ dir1 を参照しておらず、ファイル /etc/os-release を参照しています。

これが、LINK_NAMEがもともとディレクトリを参照していても通常のファイルとして扱う、という動作の結果になります。

ちなみに、fオプションは既に存在するリンクを一旦強制的に削除するというオプションで、これがないと失敗します。nオプションはfオプションとセットで利用することになりそうです。

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?