/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.sh
。Too many levels of symbolic links
エラーメッセージは、どこかに別のシンボリックリンクがあって何かが混乱していることを示唆しています。何が起こっているのかを調べるには、ディレクトリ構造を調べる必要があります。
/usr/local/bin/
6)単に設定することPATH
(推奨されていない)ではなく、スクリプトディレクトリ内のすべてのスクリプトをシンボリックリンクにリンクするには、次のことをお勧めしますstow
。このプログラムは一度に多くのシンボリックリンクを確立します。man stow
もっと学ぶ。