কমান্ড লাইনের মাধ্যমে প্রতীকী লিঙ্ক লক্ষ্য সন্ধান করুন


129

বলুন যে আমি একটি প্রতীকী লিঙ্ক সেটআপ করেছি:

ln -s /root/Public/mytextfile.txt /root/Public/myothertextfile.txt

myothertextfile.txtকমান্ড লাইনটি ব্যবহার করে লক্ষ্যগুলি কী লক্ষ্য করার একটি উপায় আছে ?

উত্তর:


170

-fক্যানোনিকালাইজড সংস্করণ মুদ্রণ করতে পতাকা ব্যবহার করুন । উদাহরণ স্বরূপ:

readlink -f /root/Public/myothertextfile.txt

থেকে man readlink:

-f, --canonicalize
      canonicalize by following every symlink in every component of the given name recursively; all but the last component must exist

8
অন্য প্রশ্নে পরামর্শ হিসাবে আপনি ব্যবহার করতে পারেন readlink -f
ডেনিলসন সা মায়া

5
ম্যাক ওএস এক্স এ কাজ করার জন্য brew install coreutils,। এটি অক্ষরের সাথে পূর্ববর্তী কমান্ডের বেসিক gnu সংস্করণগুলি ইনস্টল করে g, যেমনgreadlink -f somefile
মাইক ডি

-ফ

-F ব্যবহার করে আমাকে যে তথ্যটি চাওয়ার তথ্য দেওয়া হয়েছিল, অর্থাত্ একাধিক সিমলিংকগুলি সমাধান করা এবং শেষ লক্ষ্য দেখানো।
ইস্পির

উপর Ubuntu 18.04.1 LTS (Bionic Beaver)readlink এর manpages একটি নোট বলছে আছে "নোট realpath (1) ক্যাননিকাল করার কার্যকারিতার জন্য ব্যবহার করতে পছন্দের কমান্ড।"
স্যাম কামেনস্কি

23

রিডলিঙ্ক হ'ল আদেশটি যা আপনি চান। কমান্ডের জন্য আপনার ম্যান পৃষ্ঠাটি দেখতে হবে। কারণ আপনি যদি আসল ফাইলটিতে প্রতীকী লিঙ্কগুলির একটি শৃঙ্খলা অনুসরণ করতে চান তবে আপনার প্রয়োজন -e বা -f সুইচ:

$ ln -s foooooo zipzip   # fooooo doesn't actually exist
$ ln -s zipzip zapzap

$ # Follows it, but doesn't let you know the file doesn't actually exist
$ readlink -f zapzap
/home/kbrandt/scrap/foooooo

$ # Follows it, but file not there
$ readlink -e zapzap

$ # Follows it, but just to the next symlink
$ readlink zapzap
zipzip

প্রথম উত্তরের সাথে কিছু ভুল হয়নি, তবে এটি একটি আরও সম্পূর্ণ এবং সহায়ক।
মাইক এস

6

এটিও কাজ করবে:

ls -l /root/Public/myothertextfile.txt

তবে readlinkপার্সিংয়ের চেয়ে স্ক্রিপ্টে ব্যবহারের জন্য পছন্দ করা হবে ls


4

আপনি যদি লিঙ্কটির উত্স এবং গন্তব্যটি দেখাতে চান তবে চেষ্টা করুন stat -c%N files*। যেমন

$ stat -c%N /dev/fd/*
‘/dev/fd/0’ -> ‘/dev/pts/4’
‘/dev/fd/1’ -> ‘/dev/pts/4’

এটি পার্সিংয়ের জন্য ভাল নয় ( readlinkএটির জন্য ব্যবহার করুন ) তবে এটি বিশৃঙ্খলা ছাড়াই লিঙ্কটির নাম এবং গন্তব্য দেখায়ls -l

-cলিখিত হতে পারে --formatএবং এর %Nঅর্থ "যদি প্রতীকী লিঙ্ক হয় তবে উদ্ধৃতিযুক্ত ফাইলের নাম উদ্ধৃত করা হবে"।


2

readlinkএকটি ভাল জিনিস, কিন্তু গনুহ-নির্দিষ্ট এবং অ ক্রস প্ল্যাটফর্ম। আমি ক্রস প্ল্যাটফর্মের স্ক্রিপ্টগুলি লিখতাম /bin/sh, তাই আমি এরকম কিছু ব্যবহার করতাম:

 ls -l /root/Public/myothertextfile.txt | awk '{print $NF}'

বা:

 ls -l /root/Public/myothertextfile.txt | awk -F"-> " '{print $2}'

তবে এগুলি বিভিন্ন প্ল্যাটফর্মে পরীক্ষা করা দরকার। আমি মনে করি তারা কাজ করবে, তবে lsআউটপুট ফর্ম্যাটের জন্য 100% নিশ্চিত নয় ।

ফলে lsএটি করতে পারেন মধ্যে বিশ্লেষণ হতে bashএকটি বহিস্থিত কমান্ড মত উপর নির্ভর করে ছাড়া awk, sedঅথবা perl

এই bash_realpathফাংশনটি, একটি লিঙ্কের চূড়ান্ত গন্তব্য সমাধান করে (লিঙ্ক → লিঙ্ক → লিঙ্ক → ফাইনাল):

bash_realpath() {
  # print the resolved path
  # @params
  # 1: the path to resolve
  # @return
  # >&1: the resolved link path

  local path="${1}"
  while [[ -L ${path} && "$(ls -l "${path}")" =~ -\>\ (.*) ]]
  do
    path="${BASH_REMATCH[1]}"
  done
  echo "${path}"
}

1

আপনি যদি ব্যবহার করতে না পারেন readlink, তবে এর ফলাফলটি বিশ্লেষণ করে ls -lএভাবে করা যেতে পারে।

সাধারণ ফলাফল হবে:

ls -l /root/Public/myothertextfile.txt
lrwxrwxrwx 1 root root 30 Jan  1 12:00 /root/Public/myothertextfile.txt -> /root/Public/mytextfile.txt

সুতরাং আমরা "->" এর আগে এবং তীর অন্তর্ভুক্ত সমস্ত কিছু প্রতিস্থাপন করতে চাই। আমরা এটির sedজন্য ব্যবহার করতে পারি :

ls -l /root/Public/myothertextfile.txt | sed 's/^.* -> //'
/root/Public/mytextfile.txt

1

ব্রায়ান-ব্রাজিলের একজন হিসাবে একটি সহজ উত্তর দেওয়ার জন্য প্রশ্নটি যথেষ্ট সঠিক নয়:

readlink -f some_path

পাথের সাথে জড়িত প্রতিটি সিমলিংকটি অবশ্যই চূড়ান্ত লক্ষ্যে পিছনের দিকে অন্তর্ভুক্ত করবে some_path

তবে এক স্তরের ক্যাসকেডিং সিমলিংক হ'ল একটি সিস্টেমে অন্যদের মধ্যে একটি বিশেষ ঘটনা, সাধারণ ক্ষেত্রে ক্যাসকেডিং সিমলিংকের N স্তর রয়েছে। আমার সিস্টেমে নিম্নলিখিতটি দেখুন:

$ rwhich emacs
/usr/bin/emacs
 /etc/alternatives/emacs
  /usr/bin/emacs24-x

rwhichএটি আমার নিজের পুনরাবৃত্তিমূলক বাস্তবায়ন হ'ল whichঅন্তর্বর্তী ক্যাসকেডিং সিমলিংকগুলি (স্টাডার থেকে) চূড়ান্ত লক্ষ্য (স্টাডাউট) পর্যন্ত নিচে ints

তারপরে যদি আমি জানতে চাই তবে কী:

  • সিমলিংক / ইউএসআর / বিন / ইমাসস ** এর লক্ষ্যমাত্রা, আমার কাছে সুস্পষ্ট উত্তরটি /etc/alternatives/emacsফিরে এসেছে:

    readlink $(which emacs)
    readlink /usr/bin/emacs
    
  • চূড়ান্ত ক্যাসকেডিং symlinks পিছনে লক্ষ্য / usr / bin / Emacs, উত্তর হইবে /usr/bin/emacs24-xহিসাবে দ্বারা ফিরে:

    readlink -f $(which emacs)
    readlink -f /usr/bin/emacs
    rwhich emacs 2>/dev/null
    

0

llঅথবা ls -lআপনার প্রতীকী লিঙ্ক এবং এটির লক্ষ্যবস্তু সহ ডিরেক্টরি আইটেমগুলির তালিকা করা উচিত

cd -P /root/Public/myothertextfile.txt (আপনার ক্ষেত্রে) আসল পথে নির্দেশ করা উচিত


0

যদি আপনি কোনও ফোল্ডারের মধ্যে সমস্ত লিঙ্কের লক্ষ্য খুঁজে পেয়ে থাকেন এবং এর সাবফোল্ডারটি find . -type l -lsলিঙ্ক প্রকারের সাথে নিম্নলিখিতভাবে কমান্ডটি ব্যবহার করুন :

me@local.localdomain:~/test$ find . -type l -ls
8601855888        0 lrwxr-xr-x    1 me           staff                   6 Jan 24 19:53 ./link -> target

আপনি যদি একটি একক এর লক্ষ্য চান, তবে ls -lকাজ করা উচিত:

me@local.localdomain:~/test$ ls -l 
total 0
lrwxr-xr-x  1 me  staff  6 Jan 24 19:53 link -> target
-rw-r--r--  1 me  staff  0 Jan 24 19:53 target
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.