【ln】Linuxコマンド_ファイルに別名でリンクを貼る

LinuxOSのファイルに別名をつけてリンクを貼ることができます。
「ln」コマンドを使用することによって、対象のファイルを別名のファイルで参照したり、別のディレクトリから、パス指定せずに直接参照するような時に利用します。

Windowsで言うと「ショートカット」に近い動作となりますし、複数のユーザーで同一ファイルを共有する際にも便利なコマンドとなります。

「ln」コマンドの使い方(Linux)

以下では「test01.txt」ファイルに別名「ln-test」をつけてリンクを貼ります。

$ ls -l
合計 4
-rw-r--r-- 1 root root 18 11月 13 09:28 test01.txt

「test01.txt」のファイルの中身は以下となります。

$ cat test01.txt 
test
1
2
3
4
5
6

「ln」コマンドで「test01.txt」に「ln-test」と言う別名でリンクを貼ります。

$ ln -s test01.txt ln-test
$ ls -l
合計 4
lrwxrwxrwx 1 root root 10 11月 13 09:29 ln-test -> test01.txt
-rw-r--r-- 1 root root 18 11月 13 09:28 test01.txt

別名でリンクを貼った「ln-test」を「cat」コマンドで確認すると「test01.txt」の中身のデータが参照できます。

$ cat ln-test 
test
1
2
3
4
5
6

「ln」コマンドの動作

「ln」コマンドは以下のように「第1引数」で指定した元ファイル(オリジナルファイル)に、「第2引数」で指定した別のファイル名(リンクファイル)をつけます。

$ ln -s <オリジナルファイル> <リンクファイル>

また、上記で指定した「-s」オプションは「ln」コマンドを実行した場合、リンク形式が「シンボリックリンク」となります。
通常「ln」コマンドでリンクを貼るときは、この「シンボリックリンク」のことを言います。

リンクされたファイルの区別

オリジナルのファイルと、シンボリックリンクで貼った別名のファイルを区別して表示するには以下で確認できます。

オリジナルファイルとリンクファイルをの相対関係を確認する

$ ls -l
合計 4
lrwxrwxrwx 1 root root 10 11月 13 09:29 ln-test -> test01.txt
-rw-r--r-- 1 root root 18 11月 13 09:28 test01.txt

他のファイルと区別して表示するには「ls」コマンドに「-F」オプションをつけて実行します。

$ ls -F
ln-test@  test01.txt

上記のように「-F」をつけることでシンボリックリンクのファイルは後尾に「@」がつきます。

シンボリックリンクからファイルを編集する

シンボリックリンクでリンクしたファイルから、元データのファイルのデータを編集します。

元ファイルの「test.txt」のデータの中身は以下となります。

$ cat test01.txt 
test
1
2
3
4
5
6

シンボリックリンクからファイルの中身を編集します。
以下、変更箇所です。

  • 「test」 > 「TEST」
  • 「6」 > 「666」
$ vi ln-test 
TEST
1
2
3
4
5
666

シンボリックリンクでファイルが編集されたことが確認できます。

$ cat ln-test 
TEST
1
2
3
4
5
666

元ファイルのデータが編集されたことが確認できます。

$ cat test01.txt 
TEST
1
2
3
4
5
666

「ln」コマンドでハードリンクを設定

「ln」コマンドのリンク形式にはシンボリックリンクの他に「ハードリンク」があります。
「ln」コマンドでオプションを指定せずに実行すると、ハードリンク形式でリンクが張られます。

$ ln test01.txt ln-test-hd
$ ls -l
合計 8
lrwxrwxrwx 1 root root 10 11月 13 09:29 ln-test -> test01.txt
-rw-r--r-- 2 root root 20 11月 13 11:22 ln-test-hd
-rw-r--r-- 2 root root 20 11月 13 11:22 test01.txt
$ 

「ln」コマンドでの「ハードリンク」と「シンボリックリンク」の違い

ハードリンクとシンボリックリンクの違いは、オリジナルファイルを削除したときにもリンク先のファイルのデータが参照できます。

以下では、「オリジナルファイル」を削除した時のハードリンクとシンボリックリンクの表示となります。

オリジナルファイルを削除します。

$ rm test01.txt 
rm: 通常ファイル 'test01.txt' を削除しますか? y
$
$ ls -l
合計 4
lrwxrwxrwx 1 root root 10 11月 13 09:29 ln-test -> test01.txt
-rw-r--r-- 1 root root 20 11月 13 11:22 ln-test-hd

シンボリックリンクで削除されたオリジナルファイルのデータは参照できません。

$ cat ln-test
cat: ln-test: そのようなファイルやディレクトリはありません

ハードリンクでは、オリジナルファイルが削除されても、参照するオリジナルファイルが削除されても、そのファイルののデータは残ります。

$ cat ln-test-hd 
TEST
1
2
3
4
5
666

そのほかの違いは、ハードリンクは同一のファイルシステム内でしか利用できませんが、シンボリックリンクは複数のファイルシステムをまたがるリンクとしても利用することができます。

「ln」コマンドオプション

「ln」コマンドのオプションは以下の通りとなります。

$ ln --help
Usage: ln [OPTION]... [-T] TARGET LINK_NAME
  or:  ln [OPTION]... TARGET
  or:  ln [OPTION]... TARGET... DIRECTORY
  or:  ln [OPTION]... -t DIRECTORY TARGET...
In the 1st form, create a link to TARGET with the name LINK_NAME.
In the 2nd form, create a link to TARGET in the current directory.
In the 3rd and 4th forms, create links to each TARGET in DIRECTORY.
Create hard links by default, symbolic links with --symbolic.
By default, each destination (name of new link) should not already exist.
When creating hard links, each TARGET must exist.  Symbolic links
can hold arbitrary text; if later resolved, a relative link is
interpreted in relation to its parent directory.

Mandatory arguments to long options are mandatory for short options too.
      --backup[=CONTROL]      対象ファイルが存在する時にバックアップを作成する
  -b                          --backup と同様だが引数を取らない
  -d, -F, --directory         スーパーユーザがディレクトリに対するハードリンク
                                を作成することを許可する。(備考: スーパーユーザ
                                であってもシステムの制限で失敗することがある)
  -f, --force                 対象ファイルが存在する時に削除する
  -i, --interactive           prompt whether to remove destinations
  -L, --logical               dereference TARGETs that are symbolic links
  -n, --no-dereference        treat LINK_NAME as a normal file if
                                it is a symbolic link to a directory
  -P, --physical              make hard links directly to symbolic links
  -r, --relative              create symbolic links relative to link location
  -s, --symbolic              make symbolic links instead of hard links
  -S, --suffix=SUFFIX         override the usual backup suffix
  -t, --target-directory=DIRECTORY  specify the DIRECTORY in which to create
                                the links
  -T, --no-target-directory   treat LINK_NAME as a normal file always
  -v, --verbose               print name of each linked file
      --help     この使い方を表示して終了する
      --version  バージョン情報を表示して終了する

The backup suffix is '~', unless set with --suffix or SIMPLE_BACKUP_SUFFIX.
The version control method may be selected via the --backup option or through
the VERSION_CONTROL environment variable.  Here are the values:

  none, off       バックアップを作成しない (--backup を付けた時でも)
  numbered, t     番号付きバックアップを作成する
  existing, nil   番号付きバックアップがあれば番号付き、
                      そうでなければ、simple で作成する
  simple, never   常に簡易バックアップを作成

Using -s ignores -L and -P.  Otherwise, the last option specified controls
behavior when a TARGET is a symbolic link, defaulting to -P.

GNU coreutils online help: <https://www.gnu.org/software/coreutils/>
Report ln translation bugs to <https://translationproject.org/team/>
Full documentation at: <https://www.gnu.org/software/coreutils/ln>
or available locally via: info '(coreutils) ln invocation'

「ln」コマンドの使い方は以上となります。

エンジニアのオンライン学習

エンジニアにおすすめのオンライン教材比較
ITエンジニアが自宅で学習ができるオンラインスクール比較

エンジニアのおすすめ学習「Progate」と「Udemy」比較

VPS_比較
最新情報をチェックしよう!