একটি সফট সিম্বলিক লিঙ্কের আসল ফাইলের পুরো পাথ কীভাবে পাবেন?


99

আমি scpএকটি সার্ভারে একটি ফাইল চাই । ফাইলটি একটি প্রতীকী লিঙ্ক এবং আসলে আমি যা করতে চাই তা উত্স ফাইলটি অনুলিপি করা। যাইহোক আমি উত্স ফাইলের পথটি ম্যানুয়ালি ট্র্যাক করতে চাই না, কারণ এটি প্রতিস্থাপন করা যেতে পারে। যদি আমি উত্স ফাইলের পরম পাথ পেতে পারি তবে আমি এটি দিয়েই sepপারি। আমি কীভাবে পথ পাব?


2
বেশিরভাগ scpসংস্করণ সিফলিঙ্কগুলি ডিফল্ট অনুসারে অনুসরণ করে, তাই না? আপনার নিজের পরীক্ষা করা উচিত এবং নিজেকে কিছু কাজ বাঁচাতে হবে।
jw013

@ jw103 আমাকে তা জানানোর জন্য ধন্যবাদ আমি জানতাম না। :)
ইওনিল

2
দ্রষ্টব্য: scp -rপ্রতিলিঙ্কগুলি অনুসরণ করে
ইওনিল

উত্তর:


129

এই লাইনটি ব্যবহার করে দেখুন:

readlink -f `which command`

যদি commandআপনার $PATHপরিবর্তনশীল হয়, অন্যথায় আপনার জানা পথটি নির্দিষ্ট করতে হবে।


12
-fঅন্তর্বর্তী লিঙ্ক লক্ষ্যগুলি উপস্থিত থাকা অবধি ... অস্তিত্বহীন চূড়ান্ত টার্গেটের পথে ফিরে আসবে ... -eএটি এড়াতে ব্যবহার করুন , যেমন। -eচূড়ান্ত লক্ষ্য উপস্থিত না থাকলে শূন্য ফিরে আসবে।
পিটার.ও

10
-fসঙ্গে errored readlink: illegal option -- fওএসএক্স হবে। এটি সরানো ভাল কাজ করেছে।
সীমানা

2
@ হিথবর্ডার্স ওএসএক্সের জন্য যদি হোমব্রিউ কোর্টিল ইনস্টল করা থাকে তবে আপনি তার greadlinkপরিবর্তে ব্যবহার করতে পারেন ।
অ্যাডাম জেন্ট

23

লিনাক্সের অধীনে, readlinkএকটি সিমিলিংকের বিষয়বস্তু পড়ুন এবং readlink -fপ্রতিলিঙ্কগুলি থেকে সিমলিংক ইত্যাদির প্রতিলিপিগুলি অনুসরণ করে, যতক্ষণ না এটি এমন কোনও সন্ধান করে যা সিমলিংক নয়।

যদিও স্ক্রিপের জন্য এটি প্রয়োজনীয় নয়: স্কিপ সর্বদা সিমলিংকগুলি অনুসরণ করে (এটি সর্বদা ফাইলের বিষয়বস্তু অনুলিপি করে, মেটাডাটা উপেক্ষা করে -pফাইলের সময় এবং সম্ভব হলে মোডগুলি সংরক্ষণ করে)।

আপনি যদি মেটাডেটা স্ক্রিপগুলি সংরক্ষণ করতে না পারেন এবং কী সংরক্ষণ করতে না পারে সে সম্পর্কে নিজেকে হতাশ মনে করেন তবে আমি rsync ব্যবহারের পরামর্শ দিই। কোনও বিকল্প ছাড়াই, আরএসআইএনসি মেটাডেটা উপেক্ষা করে ফাইলের সামগ্রীগুলি অনুলিপি করে। সাধারণভাবে ব্যবহৃত বিকল্পটি -aসমস্ত বাগানের বিভিন্ন ধরণের মেটাডেটা (সময়, প্রতীকী লিঙ্ক, অনুমতি এবং মালিকানা) সংরক্ষণ করে এবং এসিএল এবং হার্ড লিঙ্কগুলির মতো বিদেশী মেটাডেটা সংরক্ষণ করার বিকল্প রয়েছে।


পঠন লিঙ্ক পড়ার জন্য শুধুমাত্র একক পদক্ষেপ করুন। উদাহরণস্বরূপ উবুন্টুতে আমাদের কাছে / bin / zsh আছে, যা / etc / বিকল্প / zsh এর সাথে সিমিলিংযুক্ত তবে এটি দ্বিতীয় সিমলিংক। শেষ পর্যন্ত আমরা আসল ফাইল বা ডিরেক্টরি পথ পাব না। একই স্ট্যাট কমান্ড সঙ্গে। কেবল -f বিকল্পের সাথে রিডলিংক সমস্ত সমাধান করে।
Znik

9

আমি কমান্ড ব্যবহার ls, stat, readlink

/etc/localtimeউদাহরণ হিসাবে ফাইল নিন

[flying@lempstacker ~]$ ls /etc/localtime 
/etc/localtime
[flying@lempstacker ~]$ ls -l /etc/localtime
lrwxrwxrwx. 1 root root 35 Aug  2 22:41 /etc/localtime -> ../usr/share/zoneinfo/Asia/Shanghai

অপারেশন

স্ট্যাট ব্যবহার

[flying@lempstacker ~]$ stat /etc/localtime
  File: ‘/etc/localtime’ -> ‘../usr/share/zoneinfo/Asia/Shanghai’
  Size: 35          Blocks: 0          IO Block: 4096   symbolic link
Device: fd01h/64769d    Inode: 272202388   Links: 1
Access: (0777/lrwxrwxrwx)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2016-11-23 09:00:59.999887800 +0800
Modify: 2016-08-02 22:41:26.090389904 +0800
Change: 2016-08-02 22:41:26.090389904 +0800
 Birth: -
[flying@lempstacker ~]$ stat -c "%N" /etc/localtime
‘/etc/localtime’ -> ‘../usr/share/zoneinfo/Asia/Shanghai’

রিডলিঙ্ক ব্যবহার করা হচ্ছে

[flying@lempstacker ~]$ readlink /etc/localtime
../usr/share/zoneinfo/Asia/Shanghai
[flying@lempstacker ~]$ readlink -f /etc/localtime
/usr/share/zoneinfo/Asia/Shanghai

দেখে মনে হচ্ছে যে কমান্ড readlink -fভাল।

ব্যাখ্যা

-ফ, - ক্যানোনালাইজালাইজ: প্রদত্ত নামের প্রতিটি উপাদানটিতে প্রতিটি সিমলিংককে পুনরাবৃত্তভাবে অনুসরণ করে ক্যানোনিকালাইজ করা; সর্বশেষ উপাদানটি থাকা উচিত —— থেকেman readlink


6

স্ট্যাটাস আপনাকে এই তথ্য দেবে:

$ stat current
  File: `current' -> `/home/user/releases/build/'
  ...

পঠন লিঙ্ক পড়ার জন্য শুধুমাত্র একক পদক্ষেপ করুন। উদাহরণস্বরূপ উবুন্টুতে আমাদের কাছে / bin / zsh আছে, যা / etc / বিকল্প / zsh এর সাথে সিমিলিংযুক্ত তবে এটি দ্বিতীয় সিমলিংক। শেষ পর্যন্ত আমরা আসল ফাইল বা ডিরেক্টরি পথ পাব না। একই স্ট্যাট কমান্ড সঙ্গে। কেবল -f বিকল্পের সাথে রিডলিংক সমস্ত সমাধান করে।
Znik

5

আপনি হয় করতে পারেন

readlink -f `which command`

অথবা আপনি লিনাক্সে অনুরূপ কিছু পেতে পারেন

stat `which command` | grep File

আপনি যদি এটি কোনও স্ক্রিপ্টে যুক্ত করে থাকেন তবে ত্রুটিটি পরীক্ষা করুন। সিম লিঙ্ক না থাকা অবস্থায় আপনি যদি ত্রুটি বার্তাটি দেখতে না চান তবে এর মতো কিছু নিয়ে যান

readlink -f "`which command`" 

স্ট্যাটাস এবং -ফ ছাড়া রিলিংক শুধুমাত্র একক পদক্ষেপ। তারপরে আরও ভাল কল করুন রিডলিঙ্ক -f।
Znik

3

আমি ব্যবহার করব realpath <symlink>

সম্ভবত আপনি যাকে 'উত্স' বলছেন তার ব্যবহার অনুসারে 'টার্গেট' ফাইল ln:Usage: ln [OPTION]... [-T] TARGET LINK_NAME


ধন্যবাদ এটি একটি কবজ মত কাজ! ম্যাক ওএসএক্সের সাথে! যেখানে readlinkএটি কাটা হয়নি ... বোকা ম্যাক। lol
জয়রিজ্জো

0

readlink -f 'which java' আমার জন্য কাজ করেনি।

তবে এটি করেছে:

readlink -f $(which java)

3
কাজ করে নি কারণ এটি `না '.. কিন্তু $()ভাল অনুশীলন কোন পথে নয়।
স্টিফেন রাউচ

ডাউনভোট কেন? আমার উত্তরটি একটি গ্রহণযোগ্য বিকল্প, এবং যেমন মন্তব্য বলেছে, এটি একটি আরও ভাল অনুশীলন।
ননক্রিচার0714

1
বেশিরভাগ লোক যারা ভোট প্রদান করেন তারাও মন্তব্য করেন না, সুতরাং ডাউন ভোটের ব্যাখ্যা জিজ্ঞাসা করা খুব কমই আপনার ব্যাখ্যা পাবেন কারণ নিচে ভোটার ইতিমধ্যে রেখে গেছে এবং ফিরে আসার সম্ভাবনা নেই। আমি আপনাকে পরামর্শ দিচ্ছি যে আপনি টাইপযুক্ত কোডটি সরিয়ে ফেলবেন যা আপনার উত্তর থেকে কার্যকর হয় না। আপনি যদি এটি পরিষ্কার করার জন্য সময় নেন এবং কেন $()আরও ভাল অনুশীলন হয় তা ব্যাখ্যা করার জন্য আমি ভোট দিতে প্রস্তুত হতে চাই ।
স্টিফেন রাউচ

স্টিফেন আপনাকে যেমন ব্যাখ্যা করেছিল, 'তা `নয়` আপনি দ্বারা encapsulate করা উচিত command, কিন্তু এটি অবচয় করা হয়। $ () ব্যবহার করা ভাল, কারণ এনক্যাপসুলেশন $ ($ (কমান্ড)) খুব সহজ এবং বিশেষভাবে পালানোর দরকার নেই। তারপরে এটি পছন্দ করা হয়। আপনার প্রথম উদাহরণে আপনি সাধারন অ্যাডাস্ট্রোফ ব্যবহার করেছিলেন, তারপরে রিডলিংক 'নামে জাভা' নামক ফাইলটি অনুসন্ধান করার চেষ্টা করছে যা এর নামে স্থান রয়েছে। তবে আপনার উদ্দেশ্য হ'ল কল কমান্ড যা জাভা বাইনারি এক্সিকিউটেবল পাথের জন্য আর্গুমেন্ট জাভা সহ।
Znik

0

ম্যাক ওএক্স-এ, "-f" প্যারামিটার কাজ করে না, 'রিডলিঙ্ক' কোনও প্যারামিটার ছাড়াই কাজ করে।

KZs-MacBook-Pro:bin kz$ readlink -f pip3
readlink: illegal option -- f
usage: readlink [-n] [file ...]

KZs-MacBook-Pro:bin kz$ readlink pip3
../../../Library/Frameworks/Python.framework/Versions/3.7/bin/pip3
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.