他の物理ドライブでシンボリックリンクを実行する

他の物理ドライブでシンボリックリンクを実行する

/media/kalenpw/HDD/Documents/ShellScripts私のハードドライブには、すべてのディレクトリからアクセスできるさまざまなスクリプトでいっぱいのフォルダがあります。以前の戦略は、すべてのファイルをこの/usr/local/binタスクにコピーすることでしたが、2つの場所で変更する必要があるスクリプトを更新したときにこれは面倒な作業でした。

幸いなことに、私は最近シンボリックリンクについて学び、これは完璧な選択です。

私のホームフォルダにテストスクリプトを作成しました。

test.sh

print "Hello"

それから私はそれをし、期待通りにln ~/test.sh /usr/local/binどこでも走ることができました。test.sh

私が持っている問題は、すべての文書を自分のハードドライブ(前述のディレクトリ)に保存することを好むということです。ただし、ドライブ間を接続できなかったため、期待どおりにエラーが発生しました。

デバイス間リンクが機能しない

だから私は次のようなシンボリックリンクを作成しました。sudo ln -s ./test.sh /usr/local/bin/期待どおりにリンクが作成されます。ただし、test.sh必要に応じてどのディレクトリ(またはまったく)でも実行できません。ファイルがリンク権限を失わないようにするためにそうしましたが、/usr/local/binエラーsudo chmod +x ./test.shが発生しました。

chmod: './test.sh'にアクセスできません:シンボリックリンクレベルが多すぎます。

一般的な使い方だと思うので、これを行う方法がないと想像できませんが、どうすればいいかわかりません。

要約:別の物理ドライブ上のあるファイルから別のファイルへのリンクを作成し、リンクされたファイルを実行する機能を維持する方法。

ベストアンサー1

1)多数のスクリプトにアクセスする正しい方法は、スクリプトがあるディレクトリをに追加することです$PATH。たとえば、にプライベートスクリプトがあるので、~/bin.profileの行があります。

export PATH=$HOME/bin:$PATH

これが私を作る~/bin 前に同じ名前のスクリプトで別のプログラムを「上書き」できるように、既存のパスを削除します。これを望まない場合は、新しいディレクトリを入れてください後ろに $PATH

したがって、スクリプトをパスに保存するディレクトリを追加すると、問題が解決します。シンボリックリンクはまったくありません。

2)背景:特定のファイルシステムでは、ファイルは識別子で識別されます。アイノード番号。ディレクトリは単にファイル名を inode 番号にマップします。lnなし(ハードリンク)を使用すると、-s既存のファイルのinodeを使用して新しいディレクトリエントリが作成されます。したがって、これは同じファイルシステム上のファイルでのみ機能できます。

OTOHを使用すると、ln -sシンボリックリンクが生成されます。内容が指定したパスである特殊ファイルであり、そのファイルにアクセスしようとすると、ファイルの代わりにこのパスが使用されます。シンボリックリンクを生成するためにルートになる必要はありません。

3)これを実行すると、ln ~/test.sh /usr/local/binコマンドlnはこれが/usr/local/binディレクトリであることを検出するため、実際に実行したいと仮定しますln ~/test.sh /usr/local/bin/test.sh。でも同じことが起こります-s。ディレクトリへのシンボリックリンクを作成することもできますので、覚えておくことが重要です。ただし、この方法で循環ディレクトリ構造を作成できるため、ルートだけがディレクトリへのハードリンクを作成できます(そしてルートはこれを避けるために十分に知っておく必要があります)。

4) ハードリンクにはファイルモードビットがありますが、シンボリックリンクにはありません。シンボリックchmodリンクを試みると、指すファイルのファイルモードビットのみが変更されます。

5)実行できないときに何が起こったのかわかりませんtest.shToo many levels of symbolic linksエラーメッセージは、どこかに別のシンボリックリンクがあって何かが混乱していることを示唆しています。何が起こっているのかを調べるには、ディレクトリ構造を調べる必要があります。

/usr/local/bin/6)単に設定することPATH(推奨されていない)ではなく、スクリプトディレクトリ内のすべてのスクリプトをシンボリックリンクにリンクするには、次のことをお勧めしますstow。このプログラムは一度に多くのシンボリックリンクを確立します。man stowもっと学ぶ。

おすすめ記事