ディレクトリへのソフトリンクを作成する方法
1. 概要
ご存知のように、Linuxコマンドラインでは、通常のファイルへのリンクを作成できます。 ディレクトリへのリンクを作成したい場合があります。
このクイックチュートリアルでは、lnコマンドを使用してこれを行う方法を見ていきます。
ハードリンクではなく、シンボリック(ソフト)リンクの作成に焦点を当てます。
2. 1つの単一ディレクトリへのリンクの作成
1つのディレクトリへのリンクを作成することは、lnコマンドの一般的な使用例です。 構文は、ファイルへのソフトリンクを作成するのと同じです。
ln -s TARGET_DIR LINK_NAME
それでは、実際の動作を見てみましょう。 / tmp / test/linked_etcディレクトリから/etcディレクトリへのソフトリンクを作成しましょう。
$ ln -s /etc /tmp/test/linked_etc
$ stat /tmp/test/linked_etc
File: /tmp/test/linked_etc -> /etc
Size: 4 Blocks: 0 IO Block: 4096 symbolic link
Device: 30h/48d Inode: 46728 Links: 1
Access: (0777/lrwxrwxrwx) Uid: ( 1000/ kent) Gid: ( 1000/ kent)
...
ln コマンドを使用してリンクを作成した後、statコマンドを使用して/tmp / test/linked_etcの詳細情報を一覧表示しました。
stat コマンドの出力では、シンボリックリンクが正常に作成されたことがわかります。
LINK_NAMEを指定しない場合、lnコマンドは、現在の作業ディレクトリの下にターゲットディレクトリの名前でリンクを作成します。
$ pwd
/tmp/test
$ ln -s /etc
$ stat /tmp/test/etc
File: /tmp/test/etc -> /etc
Size: 4 Blocks: 0 IO Block: 4096 symbolic link
Device: 30h/48d Inode: 46735 Links: 1
Access: (0777/lrwxrwxrwx) Uid: ( 1000/ kent) Gid: ( 1000/ kent)
...
例が示すように、リンクetcは現在の作業ディレクトリ/tmp/test.の下に作成されています。
3. 複数のディレクトリへのリンクの作成
単一のディレクトリへのリンクを作成する方法を見てきました。 ln コマンドを使用すると、複数のターゲットディレクトリへのリンクを一度に作成できます。
それでは、それを行うための構文を見てみましょう。
ln -s -t DIR_TO_CREATE_LINKS TARGET_DIR1 TARGET_DIR2 ...
いつものように、例を通してコマンドがどのように機能するかを理解しましょう。
/ tmp /testの下にJavaJDKディレクトリ/usr / lib / jvm /java-15-jdkとPythonディレクトリを指す2つのソフトリンクを作成するとします。 /usr/lib/python3.9:
$ ln -s -t /tmp/test /usr/lib/jvm/java-15-jdk /usr/lib/python3.9
$ stat /tmp/test/java-15-jdk /tmp/test/python3.9
File: /tmp/test/java-15-jdk -> /usr/lib/jvm/java-15-jdk
Size: 24 Blocks: 0 IO Block: 4096 symbolic link
Device: 30h/48d Inode: 46771 Links: 1
Access: (0777/lrwxrwxrwx) Uid: ( 1000/ kent) Gid: ( 1000/ kent)
...
File: /tmp/test/python3.9 -> /usr/lib/python3.9
Size: 18 Blocks: 0 IO Block: 4096 symbolic link
Device: 30h/48d Inode: 46772 Links: 1
Access: (0777/lrwxrwxrwx) Uid: ( 1000/ kent) Gid: ( 1000/ kent)
...
上記のstatの出力が示すように、2つのリンクはディレクトリ / tmp / test の下に作成され、目的のターゲットディレクトリを指します。
または、別の形式で複数のディレクトリへのリンクを作成することもできます。
ln -s TARGET_DIR1 TARGET_DIR2 ... DIR_TO_CREATE_LINKS
今回は、-tオプションは使用しません。 代わりに、DIR_TO_CREATE_LINKSディレクトリを引数リストの最後に配置します。
例は、コマンドがどのように機能するかを説明するための優れた方法です。
それでは、新しいディレクトリ / tmp /test2の下にPythonおよびJavaディレクトリへのリンクを作成しましょう。
$ ln -s /usr/lib/jvm/java-15-jdk /usr/lib/python3.9 /tmp/test2
$ stat /tmp/test2/java-15-jdk /tmp/test2/python3.9
File: /tmp/test2/java-15-jdk -> /usr/lib/jvm/java-15-jdk
Size: 24 Blocks: 0 IO Block: 4096 symbolic link
Device: 30h/48d Inode: 46811 Links: 1
Access: (0777/lrwxrwxrwx) Uid: ( 1000/ kent) Gid: ( 1000/ kent)
...
File: /tmp/test2/python3.9 -> /usr/lib/python3.9
Size: 18 Blocks: 0 IO Block: 4096 symbolic link
Device: 30h/48d Inode: 46812 Links: 1
Access: (0777/lrwxrwxrwx) Uid: ( 1000/ kent) Gid: ( 1000/ kent)
...
stat 出力は、 / tmp/test2。の下に2つのリンクが作成されたことを示しています。
4. 権限
これまで、ディレクトリへのソフトリンクを作成するのがいかに簡単かを学びました。
また、 stat コマンドの上記のすべての出力を注意深く読むと、すべてのソフトリンクのアクセス許可が同じであることがわかります: 0777 /lrwxrwxrwx。
Linuxでは、シンボリックリンクのファイルシステム権限は使用されないことに注意してください。 許可は常にです
ターゲットファイル自体のアクセス許可は、ターゲットファイルまたはディレクトリのアクセスモードを制御します。
さらに、ソフトリンクの権限を変更すると、chmodコマンドはその変更をターゲットファイルまたはディレクトリに転送します。 変更が成功したかどうかに関係なく、ソフトリンクの許可は0777です。
例を通してそれを理解しましょう。
まず、リンクしたい2つのディレクトリを見つけましょう。
kent$ ls -ld /etc /home/kent/Desktop/aDirectory
drwxr-xr-x 131 root root 12288 Mar 26 11:07 /etc
drwxr-xr-x 2 kent kent 4096 Mar 26 23:23 /home/kent/Desktop/aDirectory
次に、ディレクトリ / tmp /test3の下に上記のディレクトリへの2つのリンクを作成します。
kent$ ln -s /etc /home/kent/Desktop/aDirectory /tmp/test3
kent$ ls -l /tmp/test3/*
lrwxrwxrwx 1 kent kent 29 Mar 26 23:27 /tmp/test3/aDirectory -> /home/kent/Desktop/aDirectory/
lrwxrwxrwx 1 kent kent 4 Mar 26 23:27 /tmp/test3/etc -> /etc/
よし、2つのリンクを作成しました。 最後に、2つのソフトリンクのアクセス許可を 700:に変更してみましょう。
kent$ chmod 700 /tmp/test3/etc
chmod: changing permissions of '/tmp/test3/etc': Operation not permitted
ソフトリンク/tmp / test3 / etc。のアクセス許可を変更できません。これは、chmodコマンドがアクセス許可の変更をターゲットディレクトリ/etcに適用するためです。 ]。
どうやら、通常のユーザー「 kent」として、/etc。の権限を変更することは許可されていません。
次に、他のリンクの権限を変更するとどうなるか見てみましょう。
kent$ chmod 700 /tmp/test3/aDirectory
kent$ ls -ld /home/kent/Desktop/aDirectory
drwx------ 2 kent kent 4096 Mar 26 23:23 /home/kent/Desktop/aDirectory/
出力が示すように、ターゲットディレクトリ / home / kent / Desktop /aDirectoryの権限が「drwxr-xr-x」から「drwx-」に変更されました。 」。
最後に、2つのchmodコマンドが2つのソフトリンクの許可に影響するかどうかを確認しましょう。
kent$ ls -l /tmp/test3/*
lrwxrwxrwx 1 kent kent 29 Mar 26 23:27 /tmp/test3/aDirectory -> /home/kent/Desktop/aDirectory/
lrwxrwxrwx 1 kent kent 4 Mar 26 23:27 /tmp/test3/etc -> /etc/
したがって、ソフトリンクのアクセス許可を変更することはできません。常に777です。
5. 結論
この記事では、例を通じてディレクトリへのソフトリンクを作成する方法を学びました。
さらに、ソフトリンクのアクセス許可とchmodを使用してそれらを変更しようとすることの意味について説明しました。