Linuxのlnコマンドでファイルやディレクトリにリンクを作成する方法を解説!
今回はLinuxのlnコマンドでファイルやディレクトリにリンクを作成する方法をご紹介していきます。また、Linuxのlnコマンドのオプションの効果や使い方についてもそれぞれご説明していますので、是非、この記事を参考にリンクを作成してみて下さい。
目次
- 1Linuxのlnコマンドとは?
- ・lnコマンドの基本的な書式
- 2Linuxのlnコマンドのオプション一覧
- ・sオプション
- ・fオプション
- ・iオプション
- ・vオプション
- ・bオプション
- ・backupオプション
- ・Sオプション
- ・dオプション
- 3Linuxのlnコマンドのハードリンクについて
- ・ディレクトリのハードリンクとは?
- ・ハードリンクの特徴
- 4Linuxのlnコマンドのシンボリックリンクについて
- ・シンボリックリンクとは?
- ・シンボリックリンクの特徴
- ・シンボリックリンクの作成方法
- ・ディレクトリへのシンボリックリンクの作成方法
- 5Linuxのlnコマンドのシンボリックリンクにオプションを付ける
- ・バックアップファイルを作成する
- ・パスがついたリンクを作成する
- 6Linuxのlnコマンドのシンボリックリンクを上書きする
- ・同じ名称を登録するとエラーになる
- ・上書き確認して強制変更する
- 7Linuxのlnコマンドのシンボリックリンクとハードリンクを使い分ける
- ・シンボリックリンクを使う場合
- ・ハードリンクを使う場合
- 8Linuxのlnコマンドでリンクを作成してみよう!
Linuxのlnコマンドとは?
Linuxのlnコマンドでファイルやディレクトリにリンクを作成する方法をご紹介していきます。Linuxのlnコマンドとはファイルのリンクを作成するために用意されたコマンドです。Linuxのlnコマンドにファイル名とリンク名を付与して実行すると簡単にハードリンクが作成できます。
その他にもオプションを活用する事で、シンボリックリンクを作成したり、ディレクトリのハードリンクを作成したりできます。「-s」オプションを使ってシンボリックリンクを作成するのが一般的です。
lnコマンドの基本的な書式
Linuxのlnコマンドの基本的な書式をご説明していきます。
lnコマンドの基本的な書式 | |
ln 【オプション】 ファイル名 リンク名 | ファイルのハードリンク又は シンボリックリンクを作成します |
ln -s ファイル名 リンク名 | ファイルのシンボリックリンクを作成します |
ln -s ディレクトリ名 リンク名 | ディレクトリのシンボリックリンクを作成します |
ln -s ファイル名1 ファイル名2 ... ディレクトリ | 指定したディレクトリの下に シンボリックリンクを作成します |
これらの基本的なLinuxのlnコマンドを使ってハードリンクやシンボリックリンクを作成していきます。
Linuxのlnコマンドのオプション一覧
ここからはLinuxのlnコマンドのオプションについて細かくご説明していきます。Linuxのlnコマンドの主なオプションは以下の一覧になります。
オプション | 長いオプション | オプションによる効果 |
-s | --symbolic | ハードリンクに代わってシンボリックリンクを作成します |
-d,-F | --directory | スーパーユーザーのみが利用できるコマンドです ディレクトリのハードリンクを作成します |
-f | -force | リンクファイルと同じ名前のファイル名が 既に作成されていても強制的に上書きします |
-i | --interactive | ファイルを上書きをする前に確認します |
-n | --no-dereference | リンクの作成場所として指定した先のディレクトリが シンボリックリンクであった場合に、 参照先へリンクを作成せずに、シンボリックリンク自体を置き換えます |
-L | --logical | 対象がシンボリックリンクであった場合にリンクを巡ります |
-P | --physical | シンボリックリンクに対してハードリンクを作成します |
-r | --relative | 相対パスのシンボリックリンクを作成します |
-T | --no- target-directory |
リンク先を常時、通常ファイルとして扱います |
-t DIR | --target- directory=DIR |
指定したディレクトリに対してリンクを作成します DIRの部分にディレクトリ名を指定します |
-b | --backup=方法 | 上書きされるファイルに対してバックアップを作成します |
-S 接尾辞 | --suffix=接尾辞 | バックアップファイルを作成する際のファイル名の 末尾に付ける文字を作成します 接尾辞の指定がない場合には『~』が付与されるか、 環境変数に「SIMPLE_BACKUP_SUFFIX」が指定されていれば、それに従って接尾辞を付与します |
-v | --verbose | 経過状況を表示します |
それぞれのlnコマンドについて以下で詳しく説明していきます。
sオプション
Linuxのlnコマンドにsオプションを付与すると「シンボリックリンク」になります。このlnコマンドのオプションを指定しなければ「ハードリンク」として作成されます。
$ ln -s リンク元 登録名 |
このlnコマンドでシンボリックリンクを作成できます。例えばlocalディレクトリの中のtest.datのシンボリックリンクをtestSymbolとして作成する場合は以下のようになります。
$ ln -s local/test.dat testSymbol |
このlnコマンドでlocalディレクトリの中にtestSymbolという名前でtest.datへのリンクが作成されます。きちんと作成されているか確認するためには以下のlnコマンドを実行してください。
$ ls -l testSymbol |
このlnコマンドでtestSymbolで作成されたシンボリックリンクを表示しますので、これで確認できます。
fオプション
次のLinuxのlnコマンドのオプションはfオプションです。このfオプションはすでに登録されている名前である場合に、登録内容を上書きして登録をします。通常このfオプションを付与せずにすでに登録されている名前でlnコマンドを実行しようとすると『ハードリンク 'ファイル名' の作成に失敗しました:ファイルが存在します』といったエラーメッセージが表示されます。
これを強制的に上書きするためのlnコマンドがfオプションになります。fオプションを使うことで登録内容の上書き登録が出来ます。fオプションの使い方は以下のようになります。
$ ln -f リンク元 登録名 |
例えばlocalディレクトリ内のtest.datをtestSymbolへのリンクとして登録しています。これをlocalディレクトリ内にあるtest2.datへのリンクとして同じ名前で登録するためにはlnコマンドを以下のように指定します。
$ ln -f local/test2.dat testSymbol |
lnコマンドを実行したときにエラーメッセージが表示されなければ、上書き登録が完了しています。きちんと反映されているか確認するためには以下のlsコマンドで確認が出来ます。
$ ls -l testSymbol |
fオプションは登録されていないファイルへリンクを試みた場合にはエラーメッセージを表示します。既に登録されていて存在する時にのみエラーメッセージが表示されず、登録が出来ますので、fオプションを使用する際には注意してください。
iオプション
次のLinuxのlnコマンドのiオプションはfオプションと同様に上書き登録を実行しますが、iオプションの場合には上書き登録をする前に『'ファイル名' を置き換えますか(yes/no)?』といったメッセージを表示して、一度確認をしてくれます。「y(Yes)」又は「n(No)」のコマンドを入力する必要があります。
上書き登録前に確認をする、lnコマンドのiオプションの使い方は以下のようになります。
$ ln -i リンク元 登録名 |
例えばlocalディレクトリ内のtest.datをtestSymbolへのリンクとして登録しています。これをlocalディレクトリ内にあるtest2.datへのリンクとして同じ名前で登録するためには以下のようになります。
$ ln -i local/test2.dat testSymbol |
このlnコマンドのiオプションと強制的に上書き登録をするfオプションとの併用が出来ます。但し、lnコマンド実行時のオプションの入力順で動作が変わってしまうのと、どちらか一方のオプションのみしか動作しないので注意してください。
$ ln -i -f リンク元 登録名 |
この場合であるとfオプションのみが動作して、iオプションは動作しません。
$ ln -if リンク元 登録名 |
この場合でもfオプションのみが動作して、iオプションは動作しません。
$ ln -f -i リンク元 登録名 |
このlnコマンドであるとiオプションのみが動作して、fオプションは動作しません。
$ ln -fi リンク元 登録名 |
このlnコマンドの場合もiオプションのみが動作して、fオプションは動作しません。
上記の4種類のパターンからiオプションとfオプションを同時に付与してlnコマンドを実行した際には後ろ側のオプションが実行されていることが分かります。2つのオプションを同時に利用できないのとどちらがのオプションが適用されるのか複雑で分かりにくくなってしまうので、fオプションとiオプションは同時に使用しないでください。
vオプション
次のLinuxのlnコマンドのvオプションはリンクを登録した際に、登録名とリンク元が正しく登録されているかを表示するオプションになります。正しく表示されているか表示するlnコマンドのvオプションの使い方は以下のようになります。
$ ln -v リンク元 登録名 |
localディレクトリの中のtest3.datのリンクをtestSymbol3という名前で確認しながら作成する場合は、次のlnコマンドになります。
$ ln -v local/test3.dat testSymbol3 |
lnコマンド実行時にリンク名を確認ができるので、「ls」コマンドを実行して確認するという手間が不要になります。
bオプション
次のLinuxのlnコマンドのbオプションは既に登録されているリンク名と同じリンク名を登録する場合に、変更前の登録内容のバックアップを取っておくオプションになります。バックアップを取るlnコマンドのbオプションの使い方は以下のようになります。
$ ln -b リンク元 登録名 |
localディレクトリの中にあるtest3.datのリンクを既に登録しているtestSymbolという名前でバックアップを取りながら作成する場合は、以下のようになります。
$ ln -b local/test3.dat testSymbol |
これでtestSymbolの登録内容が更新されると共に、これまでのtestSymbolのバックアップが作成されます。バックアップされたものに関しては、特に設定を変更していなければ『元のファイル名~』というファイルで保存されています。
新しいリンクとバックアップがきちんとあるか確認するためには以下のコマンドで確認できます。
$ ls -l testSymbol* |
testSymbolの後ろにある「*」は文字列全てを意味します。例えば、「testSymbol」、「testSymbola」、「testSymbolb」といったtestSymbolの後ろに何か文字があるものでも表示します。
backupオプション
Linuxのlnコマンドのbackupオプションもbオプションと同様にバックアップを作成するオプションです。但し、bオプションとの違いはbackupオプションはバックアップ時に細かな設定を行える点です。lnコマンドのbackupオプションの使い方は以下のようになります。
$ ln --backup='CONTROL' リンク元 登録名 |
'CONTROL'の部分にパラメーターを入力します。
パラメーター一覧 | |
none | バックアップを作成しません |
off | |
numbered | バックアップを取った登録名の後ろに番号を付けます |
t | |
existing | バックアップを取った登録名が既に番号付きであった場合には 元々も登録名の後ろに番号を付けます |
nil | |
simple | バックアップを取った登録名の後ろに「~」を付けます |
never |
Sオプション
LinuxのlnコマンドのSオプションはバックアップの名前を「元の名前~」ではなく、指定した任意の文字列を付与した名前に設定するオプションです。lnコマンドのSオプションの使い方は以下のようになります。
$ ln -S 後ろに付与する文字列 リンク元 登録名 |
このSオプションは「*」「/」といった実行コマンドに意味を持つ記号に関しては付与することができませんが、アルファベットの単語や長めの文字列などは指定できます。
既に登録されているtestSymbol対して、バックアップ文字を「bk」として、localディレクトリの中のtest2.datのリンクを上書き登録する場合は次のようになります。
$ ln -S bk local/test2.dat testSymbol |
指定した文字列を付与してバックアップを作成したか確認するコマンドは以下のコマンドで確認できます。
$ ls -l testSymbol* |
dオプション
Linuxのlnコマンドのdオプションのディレクトリへのハードリンクはシステムを不安定にしてしまう要因となりますので、一般ユーザーはこのオプションを使えません。場合によっては、全ての権限をもつスーパーユーザーでもリンクの設定が出来ません。lnコマンドのdオプションはその時に使うオプションです。
スーパーユーザーで使うlnコマンドのdオプションの使い方は以下のようになります。
$ ln -d リンク元 登録名 |
Linuxのディストリビューションによっては、スーパーユーザーのアカウントでdオプションを指定してもディレクトリへハードリンクを設定できない場合があります。ディレクトリへのリンクはハードリンクではなく、シンボリックリンクであればどのアカウントでもディレクトリに対してリンクを作成できます。
Linuxのlnコマンドのハードリンクについて
Linuxのlnコマンドでオプションを指定しないでコマンド実行するとハードリンクが作成されます。
ディレクトリのハードリンクとは?
ディレクトリへのハードリンクは「usr」や「home」等の名前の他に自身を示す「.」というハードリンクが自動で作成されます。そのため、ディレクトリにはハードリンクが最低でも二つあることになります。
サブディレクトリがある場合では、サブディレクトリ側から見た親ディレクトリがあるので、ハードリンクの数は3つになります。つまり、通常であればディレクトリのハードリンクはサブディレクトリ数に2つ足した数になります。
ハードリンクの特徴
ハードリンクの特徴は主に以下のようなものがあります。
- ディレクトリのリンクを作成できない
- 作成したハードリンクのファイル編集ができる
- リンク先のファイルを削除されていてもアクセスできる
Linuxのlnコマンドのシンボリックリンクについて
Linuxのlnコマンドでsオプションを付与してlnコマンド実行すると、シンボリックリンクを作成できます。
シンボリックリンクとは?
シンボリックリンクとは、いわゆるファイルの別名で、長いファイル名に対して別の短い名前を付与したり、パスがディレクトリが深くて分かりにくい場所に配置されているファイルを扱いやすくなるようにします。
Windowsであればショートカットを良く作成しますが、シンボリックリンクはこれと似たような機能となり、リンク先のファイルを簡単に開けます。
シンボリックリンクの特徴
シンボリックリンクの特徴は主に以下のようなものがあります。
- ディレクトリに対してリンクを作成できる
- リンク元のファイルのアクセス権限が適用される
- リンク先のファイルが削除されているとアクセスできない
シンボリックリンクの作成方法
シンボリックリンクを作成するためには、Linuxのlnコマンドのsオプションを使います。
ln -s ファイル名 リンク名 |
例えば、
ln -s testmemo.txt tes |
上記は『testmemo.txt』に対して、『tes』というシンボリックリンクを作成したことになります。この場合であれば、テキストエディターで『tes』ファイルを閲覧及び編集、削除することは『testmemo.txt』を閲覧、編集、削除したことと同じ結果を得ます。
ディレクトリへのシンボリックリンクの作成方法
ディレクトリに対してシンボリックリンクを作成する場合には、作成したいディレクトリにアクセスして、ディレクトリ名から指定すると作成できます。
$ ln -s test/testmemo.txt tmemo |
例えば、tmpディレクトリからシンボリックリンクで指定したtmemoを作成するためには上記のようにlnコマンドを実行します。lnコマンド実行後、正しくシンボリックリンクが作成されたか確認するためには「ls」コマンドを実行すると、シンボリックリンク名とリンク先が表示されます。これできちんと作成されたかの確認が出来ます。
Linuxのlnコマンドのシンボリックリンクにオプションを付ける
Linuxのlnコマンドでシンボリックリンクを作成する際に、オプションを付けるとシンボリックリンク作成時に、バックアップファイルを作成したり、パス付のリンクを作成できます。
バックアップファイルを作成する
Linuxのlnコマンドは既に作成しているファイル名と同じ名前のシンボリックリンクを作成すると、ファイルが上書きされるようになっています。この動きに対して、bオプションを付与すると、元のファイル名の末尾に「~」がついたバックアップファイルが作成されます。
ln -b ファイル名 リンク名 |
ln -S ファイル名 リンク名 |
bでなくSオプションを使用してもほぼ同様の動きをします。但し、Sオプションは環境変数「SIMPLE_BACKUP_SUFFIX」に指定されている文字列をファイル名の後ろに付与します。
パスがついたリンクを作成する
Linuxのlnコマンドのシンボリックリンクの参照先は相対パスであっても絶対パスであっても指定ができます。相対パスで指定する場合は、シンボリックリンクファイルがある場所を起点としての相対パスになります。既存のファイルへリンクを作成する場合には、ファイル名の補完機能を使うと便利です。
Linuxのlnコマンドで「ln -s」を実行すると「存在しないファイル」へのリンク作成も可能です。例としては、「外付けのハードディスクをマウントしたときのみ利用できるシンボリックリンク」といったリンクの作成も可能です。
Linuxのlnコマンドのシンボリックリンクを上書きする
同じ名称を登録するとエラーになる
Linuxのlnコマンドでシンボリックリンクを作成する際に既に作成されているシンボリックリンク名と同じ名前でコマンド実行するとエラーが発生します。同じ名前のシンボリックリンクを二つ存在させることが出来ないので、そのため同じ名前を登録するとエラーが発生してしまいます。
上書き確認して強制変更する
Linuxのlnコマンドでシンボリックリンクを作成する際に既に作成されているシンボリックリンク名と同じ名前でlnコマンド実行するとエラーが発生しますが、iオプションを利用する事で上書き確認を行った上で強制的に上書きを行ってくれます。
Linuxのlnコマンドで同じ名前を登録する際に、fオプションを利用すると上書き確認無しで強制的に上書きを行ってくれます。但し、この場合は意図せずに勝手にシンボリックリンク名が上書きされる可能性があります。そういった可能性を防ぐためにも上書きする場合には、lnコマンドのiオプションを利用するようにしましょう。
Linuxのlnコマンドのシンボリックリンクとハードリンクを使い分ける
Linuxのlnコマンドでリンクを作成する際に、sオプション無しでリンクを作成すると「ハードリンク」になり、sオプションを付けてリンクを作成すると「シンボリックリンク」になります。つまり、シンボリックリンクがファイルの別名となり、ハードリンクがファイルの元々の名前となります。
シンボリックリンクを使う場合
シンボリックリンクで作成した場合であると、ファイルの操作として同じように扱えますが、
- シンボリックリンクであることをすぐに確認できる
- リンク先がどのファイルなのかが分かる
このような利点があります。ファイルを管理する上で別名で参照していることを分かりやすく区別したい場合にはシンボリックリンクを利用する事をおすすめします。
シンボリックリンクを作成した場合に、リンク元のファイルを削除すると『リンク先なし』となります。
ハードリンクを使う場合
シンボリックリンクはファイルを管理する上で別名で参照していることを分かりやすく区別したい場合に使いますが、ハードリンクは区別をしたくない時、区別の必要がない場合に使います。
但し、ハードリンクは同じパーティション内に作成する必要があることや、ディレクトリのハードリンクはスーパーユーザーにしか作成できない等の制限があります。
また、ハードリンクを作成した場合に、リンク元のファイルを削除してもハードリンクはそのまま残ります。
Linuxのlnコマンドでリンクを作成してみよう!
今回はLinuxのlnコマンドを使ってリンクを作成する方法をご紹介してきました。リンクについてもハードリンクとシンボリックリンクと2種類のリンクの紹介とリンクの使い分け、lnコマンドのそれぞれのオプションについてご説明してきました。
ハードリンクを作成する場合にはlnコマンドにsオプションを指定せずにコマンドを実行してください。また、シンボリックリンクを作成する場合にはlnコマンドのsオプションを指定してコマンドを実行してください。
また、ハードリンクはスーパーユーザーのみが作成できるリンクといった制限があったり、ハードリンクであれば、リンク先のファイルが削除されていてもアクセスできるが、シンボリックリンクであると削除されているとアクセスできない等、リンクによってもそれぞれ特徴があります。
シンボリックリンクとハードリンクの使い分けの場合について、ファイルを管理する上で別名で参照していることを分かりやすく区別したい場合にはシンボリックリンクを作成、区別したくない場合、区別する必要がない場合にはハードリンクを作成して利用してください。
Linuxのlnコマンドでリンクを作成する場合はシンボリックリンクとハードリンクの違いと特徴をしっかり理解しつつ、ファイルを管理する際に区別するか否か、利用目的に応じてシンボリックリンクとハードリンクを使い分けて、Linuxのlnコマンドでリンクを作成してみて下さい。