`~ / ডকুমেন্টস` কি কোনও আত্মীয় বা পরম পথ?


37

এটি কেবলমাত্র একটি শব্দভান্ডার প্রশ্ন, তবে যা আমার মাথায় ঘুরপাক খাচ্ছে।

এটি এলপিকের প্রস্তুতির বই থেকে অনুশীলন পরীক্ষা থেকে আসে । বই অনুসারে সঠিক উত্তরটি ~/Documentsএটি একটি আপেক্ষিক ডিরেক্টরি কারণ এটি হোম ডিরেক্টরি সম্পর্কিত।

যাইহোক, এই বইটিতে টাইপস এবং ভুলগুলির একটি সম্মানজনক অনুপাত রয়েছে যাতে আমি সেখানে যা লেখা আছে তা মেনে নিতে পারি না। এখানে আমি সম্মত নই কারণ আমার ~পক্ষে শেল দ্বারা চলকটির সামগ্রী $HOMEবা বর্তমান ব্যবহারকারীর হোম ডিরেক্টরি পাথ (সিএফ। man bash) এর মধ্যে বিস্তৃত ভেরিয়েবল হিসাবে কাজ করে , তাই আসল পথটি /home/myuser/Documentsযা সত্যই একটি পরম ডিরেক্টরি directory

এমনকি উইকিপিডিয়া , একবারের জন্যও এই বিষয়টিতে আমার কোনও লাভ হয়নি বলে মনে হয় (এমনকি যদি বইটি এটির পক্ষে ভুল বলে নিশ্চিত হয়):

বর্তমান সিস্টেম ডিরেক্টরি নির্বিশেষে কোনও ফাইল সিস্টেমে একটি নিখুঁত বা পূর্ণ পথ নির্দেশ করে। এটি করতে, এটিতে অবশ্যই মূল ডিরেক্টরি থাকতে হবে।

বিপরীতে, একটি আপেক্ষিক পথটি কিছু পরিকল্পিত ডিরেক্টরি থেকে শুরু হয়, সম্পূর্ণ পরম পাথটি সরবরাহ করার প্রয়োজনীয়তা এড়িয়ে।

এখানে আবারও আমি একমত নই: এই সংজ্ঞা অনুসারে /opt/kde3/bin/../lib, যে চলমান চলমান ডিরেক্টরিটি নির্ভর করে না সেই পথটি অবশ্যই এক নিখুঁত হওয়া উচিত, তবে আমার বর্তমান বোধটি বইটির লেখকের সাথে মেলে যে এই পথটিকে আপেক্ষিক করে তোলে।

ওয়েবস্টার ডিকশনারি অনুসারে একটি দ্রুত ওয়েব অনুসন্ধান কেবল আমার হতাশাকে যুক্ত করছে :

পরম পাথ - মূল ডিরেক্টরি সম্পর্কিত একটি পাথ। এটির প্রথম চরিত্রটি অবশ্যই পথ নাম বিভাজক হতে হবে।

সুতরাং $HOME/Documents, বা এমনকি কেবল $HOMEনিরঙ্কুশ ডিরেক্টরি হিসাবে বিবেচনা করা হবে না? অথবা এই সংজ্ঞাটি পরিবর্তনশীল প্রসারকে বোঝায়? খোলের ~চরিত্রটির কী হবে? আপেক্ষিক বনাম পরম ডিরেক্টরিটির কোনও নির্ভরযোগ্য সংজ্ঞা আমি কোথাও খুঁজে পেতে পারি এবং আমি কি সমস্তভাবে ভুল করছি?


7
সমস্ত পাথ আপেক্ষিক, এর মধ্যে কয়েকটি কেবলমাত্র মূল ডিরেক্টরিতে কেবল আপেক্ষিক /এবং আমরা একে পরম বলি। সুতরাং সবকিছু কি শুরু থেকে /আমি পরম কল করবে (এমনকি যদি এই হল /usr/../etc) এবং অন্য সব কিছুর আমি কল করবে আপেক্ষিক ( ~/Doc, Doc, ../john/Doc, $HOME/..., ...)। মুল বক্তব্যটি হ'ল বর্তমানের কার্যনির্বাহী ডিরেক্টরি বা বর্তমান ব্যবহারকারীর নির্বিশেষে পরম কাজ করা উচিত। আপেক্ষিক শুধুমাত্র কিছু নির্দিষ্ট সংকীর্ণ ক্ষেত্রে কাজ করতে পারে।
জিম্মিজ

6
ব্যবহারকারীটি কে নির্ভর করে পথটি অন্য কোনও স্থানে প্রসারিত হতে পারে। আমার মতে এটি এখনও একটি পরম পথ, আপেক্ষিক পথ নয়। যদিও আমি মনে করি না যে নিখুঁত এবং আপেক্ষিক পাথের সংজ্ঞাগুলি এত সংক্ষিপ্তভাবে সংজ্ঞায়িত করা হয়েছে। এটি গণিত নয়। এই প্রশ্নটি সত্যই বোঝার পরীক্ষা করে না, ইমো এবং অর্থহীন।
ফাহিম মিঠা

1
@ ফাহিমমিঠা: এলপিক হ'ল একটি বিতরণ নিরপেক্ষ লিনাক্স শংসাপত্র। শংসাপত্রটি নিজেই ঠিক আছে বলে মনে হয় তবে স্ব-অধ্যয়ন হিসাবে এই পরীক্ষার জন্য প্রস্তুত করার জন্য (কমপক্ষে কয়েকটি) বই বিক্রি হওয়ার
বিষয়টি এতটা দূরে

2
@ জিম্মিজ: "আপেক্ষিক" পথের প্রসঙ্গে একটি নির্দিষ্ট প্রযুক্তিগত অর্থ রয়েছে এবং শব্দের ভিন্ন ইংরেজি-ভাষা অনুভূতি ব্যবহার করা খারাপ অভ্যাস। ~/fooআপেক্ষিক পথ কল করার সাথে আমি সম্পূর্ণ একমত নই । আপনি যা পাচ্ছেন তা হ'ল হার্ড-কোডিং এবং প্যারামিটারাইজেশনের মধ্যে পার্থক্য। আরও তথ্যের জন্য আমার উত্তর দেখুন।
পিটার কর্ডেস

1
ওয়েবস্টার অভিধানের সংজ্ঞাগুলি সঠিক তবে খুব বিভ্রান্তিকর। যাইহোক, এটা যে বোঝা যেমন স্ট্রিং ~/Documentsএবং $HOME/Documentsপাথ নয়। তারা প্রসারণের পরে (পরম) পথগুলি সনাক্ত করে তবে তারা নিজেরাই পথ নয়। আমি মনে করি যে কতগুলি ইউনিক্স / লিনাক্স ব্যবহারকারী এই শব্দটি ব্যবহার করে তার সাথে একমত, তবে কোনও সন্দেহ নেই যে এই স্ট্রিংগুলিকে নিজেরাই পথ বলা হয়।
পুনরায় পোস্টার

উত্তর:


41

যদি লেখক আপনাকে সেই আক্ষরিক স্ট্রিং (শেল সম্প্রসারণ ছাড়াই) পথ হিসাবে কথা বলার চেষ্টা করে, তবে এটি একটি আপেক্ষিক পথ ( mkdir -p './~/Documents')। অন্যথায়:


এটি একটি পরম পথ , কারণ এটি সমাধান করা প্রক্রিয়াটির বর্তমান কার্যকরী ডিরেক্টরিতে নির্ভর করে না। আপেক্ষিক পাথের অর্থ সর্বদা প্রক্রিয়াটির কার্যকরী ডিরেক্টরি সম্পর্কিত। অথবা সিমলিংকের লক্ষ্যগুলির ক্ষেত্রে, সিলিমিংকের অবস্থানের সাথে সম্পর্কিত। ( gcc -> gcc-5.2বনাম gcc -> /usr/bin/gcc-5.2) এটি এনএফএস-মাউন্টগুলি এবং অন্যান্য ক্ষেত্রে যেখানে আপনি বিভিন্ন পরম পাথের মাধ্যমে একই সিমিলেঙ্কটি পেতে পারেন তার জন্য গুরুত্বপূর্ণ। যেমন

/net/tesla/home/peter/foo -> bar  # always works from other machines

/net/tesla/home/peter/foo -> /home/peter/bar  # references my home dir on the local machine, not tesla.

ডেবিয়ান কখনও কখনও ../../doc/whatever/whateverনিখুঁত সিমিলিঙ্ক টার্গেটের পরিবর্তে সিমলিংকগুলি ইনস্টল করবে , সুতরাং এটি এনএফএস অন্য কোথাও মাউন্ট করার সময় বা এতে chroot(8)প্রবেশ না করে কোনও ক্রোটের দিকে তাকানোর সময় কাজ করে।

প্রতিটি ইউনিক্স প্রক্রিয়াটির নিজস্ব সিডব্লিউড থাকে। pwdকমান্ডটি কেবল এটি মুদ্রণের জন্য বিদ্যমান।

POSIX সিস্টেম কল সহ ডিরেক্টরি পরিবর্তন করার বিষয়ে আরও জানতে http://pubs.opengroup.org/onlinepubs/9699919799/funitions/getcwd.html দেখুন:


যেমনটি সবাই বলেছে, ~কোনও কিছুর জন্য পাথ ব্যবহারের আগে শেল দ্বারা প্রসারিত করা হয়। ~/bin/myprogশেল স্ক্রিপ্টে ব্যবহার করা এটি বিভিন্ন ব্যবহারকারীর জন্য আলাদাভাবে কাজ করবে। ~/bin/fooএবং এর মধ্যে পার্থক্য /home/peter/bin/fooহ'ল তাদের মধ্যে একটির অবস্থান কঠোরভাবে কোডড করেছে, অন্যটি এটি প্যারামিটারাইজ করেছে। ~সংস্করণটিকে আপেক্ষিক পথ বলতে এটি একটি ত্রুটি (আইএমও) ।

বিষয়গুলি "পরিবেশের পরিবর্তনশীলের সাথে আপেক্ষিক" হওয়ার বিষয়ে কথা বলা কেবল বিভ্রান্তিকর। আপনি যে শব্দটি ব্যবহার করছেন সে প্রসঙ্গে নির্দিষ্ট প্রযুক্তিগত অর্থ রয়েছে এমন শব্দের বিভিন্ন ইংরেজি-ভাষার অর্থ ব্যবহার করা খারাপ অভ্যাস।

একটি ভাঙ্গা সিস্টেমের সাথে HOME=a/relative/path, ~/fooআপেক্ষিক পথে প্রসারিত হবে। এটি মোটেও ব্যবহারযোগ্য সেটআপ হবে না।


3
এই উত্তরের জন্য আপনাকে ধন্যবাদ, এটি আমার কাছে সর্বাধিক বিস্তৃত বলে মনে হচ্ছে। আমার এই ধারণাটিও রয়েছে যে লেখক ভুলভাবে ক্যানোনিকাল পাথের ধারণাটি এতে মিশ্রিত করেছেন (যা লেখক কোথাও উল্লেখ করেননি)। /opt/kde3/bin/../libউদাহরণস্বরূপ ভুলভাবে একটি আপেক্ষিক পাথ হিসাবে শ্রেণীবদ্ধ করা হয়: এটা হল একটি সুনির্দিষ্ট পাথ কিন্তু না ক্যানোনিকাল করুন। যেমনটি আপনি বলেছেন, এটি সবকিছুকে বিভ্রান্ত করে তোলে, তাই আপনার স্পষ্টতা এবং এনএফএস সম্পর্কিত তথ্যের জন্য ধন্যবাদ :)!
হোয়াইটউইনটারওয়াল্ফ

1
আমার উপসংহারে পৌঁছে যেতে হবে যে একটি পরীক্ষা-প্রস্তুতিমূলক বই লেখা খুব মজাদার নয় এবং যে সমস্ত লোকেরা কেবল প্রতিদিনের কম্পিউটিংয়ের জন্য ইউনিক্স বা জিএনইউ / লিনাক্স ব্যবহার করেন তারা সেই বইগুলি লেখেন না। অ-প্রৌon় পথের আপেক্ষিককে কল করার সেই উদাহরণটি আমার কাছে খুব খারাপ এবং সুস্পষ্ট বলে মনে হয়। man7.org/linux/man-pages/man3/relpath.3.html (এবং realpath(1)) দুটি জিনিসই করুন: আধ্যাত্মিককরণ করুন এবং নিখুঁত করুন ( পাশাপাশি প্রতীকগুলি অনুসরণ করুন), সম্ভবত সেখানে কিছু বিভ্রান্তি ছড়িয়ে পড়ে।
পিটার কর্ডেস

2
তবুও, এগুলি আমার কাছে কেবল সাধারণ ধারণাগুলি। আমি মনে করি এটি কাগজের টুকরোটি পাওয়া খুব অদ্ভুত লাগবে যে আমি তাদের জানতাম ... তবে ভাগ্যবান আপনার কাগজের টুকরোগুলি, হোয়াইট উইন্টার ওল্ফ, সমস্ত লোককে দেখানোর জন্য যা কাগজের টুকরো দেখতে পছন্দ করে getting :)
পিটার কর্ডেস

48

এটি মূলত শর্তাদির সংজ্ঞা সম্পর্কে একটি প্রশ্ন। সুতরাং আপনার উদ্দেশ্যগুলির জন্য, এলপিকটি যা চায় তার উত্তর। তবে আমরা প্রযুক্তিগত তথ্যের ভিত্তিতে কিছু সিদ্ধান্তে আসতে পারি:

আপনি যদি '~/Documents'কোনও সিস্টেমে কল পাঠিয়েছেন তবে ~এটি বর্তমান ডিরেক্টরিতে ঠিক নামের একটি ডিরেক্টরি অনুসন্ধান করবে (এবং সম্ভবত ব্যর্থ)। সুতরাং, কার্নেল দ্বারা ব্যবহৃত পথের ধারণার দ্বারা , এটি একটি আপেক্ষিক পথ - তবে এটি আমরা বোঝাতে চাইনি।

~শেল (এবং অন্যান্য প্রোগ্রাম যা এটি সুবিধার জন্য এটি অনুকরণ করে) দ্বারা প্রয়োগ করা সিনট্যাক্স যা এটিকে সত্যিকারের নাম হিসাবে প্রসারিত করে। উদাহরণস্বরূপ, ~/Documentsপ্রায় একই জিনিস $HOME/Documents(আবার শেল সিনট্যাক্স)। যেহেতু $HOMEএকটি পরম পথ হওয়া উচিত তাই এর মানও $HOME/Documents একটি পরম পথ। তবে পাঠ্য $HOME/Documentsবা ~/Documentsশেল দ্বারা প্রসারিত করতে হবে যাতে আমরা বোঝাতে চাইছি।

সুতরাং যদি আমি সুনির্দিষ্ট এবং সামঞ্জস্যপূর্ণ হতে চেয়েছিলেন, আমি যা বলতে চাই ~/Documentsহয় শেল-স্ক্রিপ্ট একটি টুকরা যা একটি সুনির্দিষ্ট পাথ বিস্তৃতি।


অবশ্যই, কার্নেলটির $HOMEঅর্থ কী হবে তা ধারণা নেই, ঠিক যেমন এটির ~অর্থ কী তা কোনও ধারণা নেই । তবে আমি দাবিটি খুঁজে পাই যে ~ সম্প্রসারণটি সন্দেহজনক হওয়ার জন্য শেল দ্বারা করা হয়েছে; বেশিরভাগ অ্যাপ্লিকেশন এটিকে সমর্থন করে, যা শেলের চেয়ে সি লাইব্রেরির দিকে নির্দেশ করে। এনভায়রনমেন্ট ভেরিয়েবল সম্প্রসারণ তবে হয় শেল এর একটি বৈশিষ্ট্য; আপনি ~/somefile.odtLibreOffice এ খুলতে পারেন , তবে তা নয় $HOME/somefile.odt, এমনকি যদি LibreOffice একটি শেল থেকে শুরু করা হয়েছিল যার মধ্যে $ হোম সঠিকভাবে সেট করা আছে।
একটি সিভিএন

5
আপনি যা চান তা এটি সন্দেহজনক দেখতে পাবেন তবে এটি নথিভুক্ত এবং সি তে নিশ্চিত হওয়া বা প্রত্যাখ্যান করা সহজ হওয়া উচিত
অকেজো

6
অন্যান্য প্রোগ্রামগুলি ~শেলের অনুকরণে সিনট্যাক্স প্রয়োগ করে, কারণ এটি একটি দরকারী শর্টকাট। আমি কোনও লাইব্রেরির ফাংশন রয়েছে যা প্রসারণটি ঘটেছে তা আমি আসলে জানি না, তবে এটি অবশ্যই এমন কিছু যা সঠিকভাবে ব্যবহার করে পথের নাম ব্যবহার করা থেকে আলাদা।
কেভিন রেইড

2
globএবং wordexpঅন্যান্য জিনিসগুলির মধ্যে টিলডে সম্প্রসারণ করুন।
o11c

2
@ মাইকেলKjörling: কয়েকটি প্রোগ্রাম ~সম্প্রসারণ বাস্তবায়ন করে ; বেশিরভাগ না। উদাহরণস্বরূপ, আপনি যদি টাইপ করেন ls -l ~তবে lsপ্রোগ্রামটি কখনও ~অক্ষরটি দেখতে পায় না ; ডাকার আগে শেল দিয়ে এটি প্রসারিত করা lsহয়। আপনি এমন একটি পাস যদি ~করতে ls, এটা বিশেষভাবে বিবেচনা না; ls -l '~' try চেষ্টা করুন (যা আক্ষরিক নামে একটি ফাইল তালিকাবদ্ধ করার চেষ্টা করবে ~)।
কিথ থমসন

16

যদি আপনার $HOMEহয় /home/white/, ~/Documents(অনুরূপ $HOME/Documents) শেল দ্বারা প্রসারিত হয় ( ব্যাখ্যা করার জন্য এখানে দেখুন ) /home/white/Documents, যা একটি পরম পথ।

একটি আপেক্ষিক পথ হ'ল যা /(শেল প্রসারণের পরে) দিয়ে শুরু হয় না , যেমন ../Documentsবাfoo/bar

কিছু পুরানো শাঁস প্রসারিত না ~(পথ bash, tcsh, zsh, ইত্যাদি ... না); তারা দেখতে পাবে ~/Documentsযে কোনও আপেক্ষিক পথ দিয়ে শুরু হবে ~; তবে আপনার কাছে সাধারণত ডিরেক্টরি নাম থাকে না ~(তবে আপনি এটি দিয়ে একটি তৈরি করতে পারেন mkdir '~', যা আমি প্রস্তাব করি না)।


আপনার কোন শেলগুলি প্রসারিত হবে তা উল্লেখ করা উচিত~
এডওয়ার্ড টরভাল্ডস

3

একটি নিখুঁত পাথ শুরু হয় /(এটি যা বোঝায় এটি স্থির হয়), একটি আপেক্ষিক পাথ বর্তমান ডিরেক্টরিতে শুরু হয় (এবং এটি বর্তমান ডিরেক্টরি পরিবর্তনের সাথে সাথে পরিবর্তনের ক্ষেত্রে কী বোঝায়)। সর্বাধিক শাঁস ব্যবহার ~বর্তমান ব্যবহারকারীর অর্থাৎ বাড়িতে ডিরেক্টরির সঠিক পথটি জন্য একটি সংক্ষেপে লেখা শুরুতে ~/Documentsডিরেক্টরি হয় Documentsবর্তমান ব্যবহারকারীর বাড়িতে, কি বর্তমান ডিরেক্টরির হতে পারে নির্বিশেষে। সুতরাং এটি একটি পরম পথ।


1

ব্যবহারকারীটি কে নির্ভর করে পথটি অন্য কোনও স্থানে প্রসারিত হতে পারে। আমার মতে এটি এখনও একটি পরম পথ, আপেক্ষিক পথ নয়। যাইহোক, আমি মনে করি না যে নিখুঁত এবং আপেক্ষিক পাথের সংজ্ঞাটি এত সুনির্দিষ্টভাবে সংজ্ঞায়িত হয়েছে। এটি গণিত নয়। এই প্রশ্নটি আমার মতে সত্যই বোঝার পরীক্ষা করে না এবং এটি অর্থহীন।


সংজ্ঞাটি মতামতের চেয়ে অনেক বেশি। : উইকিপিডিয়া একটি ছুরিকাঘাত এ সাধারণ ক্ষেত্রে জন্য লাগে, না শুধু ইউনিক্স en.wikipedia.org/wiki/...
পিটার Cordes

1

শুরুতে ~ / এর ব্যবহার পাথকে নিখুঁত করে তোলে যেহেতু (কোনও সংজ্ঞা অনুসারে) নথিগুলি সন্ধান করতে সক্ষম হওয়া আপনি বর্তমানে কোথায় আছেন তার উপর নির্ভর করে না। তবে প্রসারিতটি শেল দ্বারা সম্পন্ন হয়েছে, কার্নেল দ্বারা নয়, সুতরাং আপনি যদি এমন শেল ব্যবহার করছেন যা এই সিনট্যাক্সটিকে স্বীকৃতি দেয় না (যেমন / বিন / শ, মূল বোর্ন শেল, বাশ ওরফে নয়) সৌভাগ্য কামনা করছি।

মজার বিষয় হল, আপনি যদি ~ / এর পরিবর্তে ~ / ব্যবহার করেন তবে পঠনের অপ্টিমাইজেশন $ হোম সাধারণত প্রয়োগ হয় না এবং / ইত্যাদি / পাসডব্লুড সঠিক হলে এটি সর্বদা নিরঙ্কুশ হয়ে উঠবে।


-1

বইটি এই দৃষ্টিভঙ্গি নিয়েছে বলে মনে হচ্ছে যে একটি নিখুঁত পাথ যে কোনও পথ দিয়ে শুরু হয় /এবং কোনও আপেক্ষিক পথ অন্য কোনও বিষয়।

আপনি দেখতে ..এবং $HOMEএকই রকম টোকেন হিসাবে দেখতে পারেন । কোনও পাথের জন্য পরম পথের সমাধানের আগে পাথ উপাদানগুলির জন্য উভয়কেই প্রতিস্থাপিত করা দরকার।


3
কেমন আছে ..কিছু $HOME? ..সরাসরি সিস্টেম কলে যাওয়ার পথের শুরুতে হতে পারে, কোনও শেল প্রসারণ প্রয়োজন। যেমন একটি পথ না একটি সুনির্দিষ্ট পাথ; এটি এখনও cwd প্রক্রিয়াটির সাথে সম্পর্কিত বা সিমলিংকের অবস্থান। যদি না লেখক আপনাকে সেই আক্ষরিক স্ট্রিং (শেল প্রসার ছাড়াই) পথ হিসাবে কথা বলার চেষ্টা করে না। আমি মনে করি আপনি বইটির জন্য অজুহাত তৈরি করার চেষ্টা করছেন, তবে আমি কেবল এটি ভুল বলেছি এবং জিনিসগুলিকে বিভ্রান্ত হতে দেবেন না বলেই বেশি ঝোঁক।
পিটার কর্ডেস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.