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エンジニアが自宅で学習ができるオンラインスクール比較 | |