এই উদাহরণ দেওয়া:
mkdir a
ln -s a b
ln -s b c
ln -s c d
যদি আমি কার্যকর করি:
ls -l d
এটি প্রদর্শিত হবে:
d -> c
এর পরিবর্তে ls
কোনও উপায় বা অন্য কোনও লিনাক্স কমান্ডের দেখানোর আছে d -> c -> b -> a
?
এই উদাহরণ দেওয়া:
mkdir a
ln -s a b
ln -s b c
ln -s c d
যদি আমি কার্যকর করি:
ls -l d
এটি প্রদর্শিত হবে:
d -> c
এর পরিবর্তে ls
কোনও উপায় বা অন্য কোনও লিনাক্স কমান্ডের দেখানোর আছে d -> c -> b -> a
?
উত্তর:
শুধু ব্যবহার করুন namei
:
$ namei d
f: d
l d -> c
l c -> b
l b -> a
d a
ls
। ধন্যবাদ!
readlink -e <link>
পঠন লিঙ্ক [বিকল্প] ... ফাইল
- -e, --canonicalize- বিদ্যমান
canonicalize প্রদত্ত নামের প্রতিটি উপাদান প্রতিটি syMLink অনুসরণ করে পুনরাবৃত্তিভাবে, সমস্ত উপাদান উপস্থিত থাকতে হবে
$ mkdir testlink
$ cd testlink
pjb@pjb-desktop:~/testlink$ ln -s c b
pjb@pjb-desktop:~/testlink$ ln -s b a
pjb@pjb-desktop:~/testlink$ ls -l
total 0
lrwxrwxrwx 1 pjb pjb 1 2010-02-23 08:48 a -> b
lrwxrwxrwx 1 pjb pjb 1 2010-02-23 08:48 b -> c
pjb@pjb-desktop:~/testlink$ echo foo > c
pjb@pjb-desktop:~/testlink$ cat a
foo
pjb@pjb-desktop:~/testlink$ readlink -e a
/home/pjb/testlink/c
দ্রষ্টব্য: পঠন লিঙ্ক নিজেই ফেরত খ
নোট # 2: ফাইন্ড-এল এর সাথে একসাথে চেইনগুলি তালিকাভুক্ত করার জন্য একটি ইউটিলিটি সহজে পার্লে লেখা যেতে পারে তবে লুপগুলি সনাক্ত করতে যথেষ্ট স্মার্ট থাকতে হবে
আপনার কাছে লুপ থাকলে রিডলিঙ্ক কিছুই আউটপুট দেয় না। আটকে যাওয়ার চেয়ে এটিই ভাল, আমি মনে করি।
pjb@pjb-desktop:~/testlink$ ln -sf a c
pjb@pjb-desktop:~/testlink$ ls -l
total 0
lrwxrwxrwx 1 pjb pjb 1 2010-02-23 08:48 a -> b
lrwxrwxrwx 1 pjb pjb 1 2010-02-23 08:48 b -> c
lrwxrwxrwx 1 pjb pjb 1 2010-02-23 09:03 c -> a
pjb@pjb-desktop:~/testlink$ readlink -e a
pjb@pjb-desktop:~/testlink$ # (note: no output)
brew install coreutils
এবংgreadlink -e <link>
এখানে বাশে একটি পুনরাবৃত্তি ফাংশন:
chain() { export chain; local link target; if [[ -z $chain ]]; then chain="$1"; fi; link=$(stat --printf=%N $1); while [[ $link =~ \-\> ]]; do target="${link##*\`}"; target="${target%\'}"; chain+=" -> $target"; chain "$target"; return; done; echo "$chain"; unset chain; }
একাধিক লাইনে:
chain() {
export chain
local link target
if [[ -z $chain ]]
then
chain="$1"
fi
link=$(stat --printf=%N "$1")
while [[ $link =~ \-\> ]]
do
target="${link##*\`}"
target="${target%\'}"
chain+=" -> $target"
if [[ ! $target =~ / && $1 =~ / ]]
then
target="${1%/*}/$target"
fi
chain "$target"
return
done
echo "$chain"
unset chain
}
উদাহরণ:
$ chain d
d -> c -> b -> a
$ chain c
c -> b -> a
$ chain a
a
এটির প্রয়োজন stat(1)
যা কিছু সিস্টেমে উপস্থিত নাও হতে পারে।
নামের ব্যাকটিক্স, একক উদ্ধৃতি বা "->" থাকলে এটি ব্যর্থ হবে। এটি সিমিলিংক লুপগুলির সাথে একটি লুপে আটকে যায় (এটি ব্যাশ 4 এ কোনও এসোসিয়েটিভ অ্যারে ব্যবহার করে সমাধান করা যেতে পারে)। এটি ইতিমধ্যে ব্যবহৃত হয়েছে কিনা তা বিবেচনা না করে "চেইন" নামক একটি পরিবর্তনশীল রফতানি করে।
এটির সাথে অন্যান্য সমস্যাও থাকতে পারে।
সম্পাদনা:
কিছু আপেক্ষিক symlinks সঙ্গে একটি সমস্যা স্থির। কিছু এখনও কাজ করে না, তবে নীচের সংস্করণটির জন্য লিঙ্কটির উপস্থিতির লক্ষ্যের প্রয়োজন নেই।
রিডলিঙ্ক ব্যবহার করে এমন একটি সংস্করণ যুক্ত করা হয়েছে:
chain ()
{
export chain;
local target;
if [[ -z $chain ]]; then
chain="$1";
fi;
target=$(readlink "$1");
while [[ $target ]]; do
chain+=" -> $target";
if [[ ! $target =~ / && $1 =~ / ]]
then
target="${1%/*}/$target"
fi
chain "$target";
return;
done;
echo "$chain";
unset chain
}
readlink
এটি প্রদর্শিত হবে বলে মনে হয় না। উবুন্টুতে জাভা হ'ল:/usr/bin/java -> /etc/alternatives/java -> /usr/lib/jvm/java-6-openjdk/jre/bin/java