Linuxでファイルやフォルダのリンク

Linuxでファイルやフォルダのリンク

Linuxでファイルやフォルダのショートカット。
シンボルリックリンクとハードリンクについて。

関連ページ 参考URL
例えばあるユーザーとしてサーバーにログインした直後は、Ubuntuの場合は/home/
[ユーザー名]
のホームディレクトリにログインします。
ここから毎回、操作したい機能の階層に降りるのは面倒です。

こうした問題はLinuxのシンボリックリンクやハードリンクを作成することで解決ができます。

シンボリックリンク

Windowsのショートカット機能に近いのはこっちの方です。

例えばログイン直後に、apacheの VirtualHost 設定のディレクトリに移動したいとします。
ここではユーザー名をsuneoとして、それぞれパスは下の通り。
 ログイン直後のパス 
: /home/suneo
 ApacheのVirtualHostのディレクトリパス 
: /etc/apache2/sites-available

ログイン直後の状態で、下のようなコードを打ってみます。
ln -s /etc/apache2/sites-available ./apache
するとホームディレクトリ内にapacheというファイルが出来ます。
このapacheに対してcdを実行すれば、/etc/apache2/sites-availableにジャンプが出来ます。

Windowsのショートカットと同様に、大元の/etc/apache2/sites-availableを削除した場合機能しなくなります。
その際は
「No such file or directory」
というエラーが出ます。

ハードリンク

シンボリックリンクと違う所は色々ありますが、まずディレクトリに対しては使えずファイルにしかリンクできません。
ディレクトリのハードリンクを作ろうとすると
「hard link not allowed for directory」
というエラーが出ます。

なので今回はVirtualHostを実際に弄ってるファイルに対しリンクを作ってみます。
 ログイン直後のパス 
: /home/suneo
 ApacheのVirtualHostのファイルパス 
: /etc/apache2/sites-available/virtual.host.conf

コードは次の通り。ハードリンクの方は管理者権限が必要だったので、最初にsudoを付けています。
sudo ln /etc/apache2/sites-available/virtual.host.conf ./conf
シンボリックリンクとの違いは-sのオプションを消しただけです。

ハードリンクは不思議な挙動をしています。
まず大元のvirtual.host.confを削除しても、/home/suneo/confには変わらずアクセスできます。
またvirtual.host.confを削除せず、代わりに/home/suneo/confの方を削除した場合でも、virtual.host.confには何の影響もないです。
どちらかを削除しない限りちゃんとリンクは保たれていて、片方のファイルを修正すればちゃんともう片方にも反映されているます

ハードリンクという語感から、自分はショートカットを削除することで大元のファイルも削除してしまうのではという危惧がありました。
上述の通り、テストした所その心配はないみたいでした。
0
0