/home/user/system
/bin
、、、、、、/home
...ディレクトリを含む標準のLinux/root
構造を含むパスに完全なサブファイルシステムがあります。/usr
/var
/etc
このサブファイルシステムには、相対リンクまたは絶対記号リンクが含まれています。相対シンボリックリンクは大丈夫です/home/user/system
。ただし、絶対シンボリックリンクはサブファイルシステムの外部の宛先を指すため、問題があります。
たとえば、次のような絶対シンボリックリンクを考えてみましょう(サブファイルシステム内で見ることができます)。
/usr/file1 -> /usr/lib/file1
ファイルシステム全体に、ファイルの代わりにサブファイルシステムの外部のファイルを/home/user/system/usr/file1
指すリンクがあります。/usr/lib/file1
/home/user/system/usr/lib/file1
~へサブファイルシステム
私はすべての絶対シンボリックリンクを相対シンボリックリンクに変換するための単純なスクリプト、好ましくはコマンドライン(rsync、chroot、find、...)が必要です。
与えられた例では、この相対リンクは次のとおりです。
/usr/file1 -> ../usr/lib/file1
ベストアンサー1
とともにsymlinks
便利Mark Lordの作成(多くのディストリビューションで利用可能。ディストリビューションがそうでない場合源泉):
chroot /home/user/system symlinks -cr .
readlink
-lname
または、コマンドと述語を持つシステムでfind
(警告:テストされていないコード):
cd /home/user/system &&
find . -lname '/*' -exec ksh -c '
for link; do
target=$(readlink "$link")
link=${link#./}
root=${link//+([!\/])/..}; root=${root#/}; root=${root%..}
rm "$link"
ln -s "$root${target#/}" "$link"
done
' _ {} +