"ফাইল" এবং "./file" পাথের মধ্যে কি কোনও পার্থক্য রয়েছে?


12

শিরোনাম অনুসারে, * এনআইএক্স ফাইল সিস্টেমের জন্য কোনও পার্থক্য রয়েছে কি? যেমন ls fileএবংls ./file


1
আপনি চাইতে পারি unix.stackexchange.com - উত্তর এতদূর সব তাদের মধ্যে ভাল তথ্য আছে, কিন্তু তন্ন তন্ন সত্যিই মত আর উত্তর।
রব স্টার্লিং

উত্তর:


14

আমি স্মললনআফ 1 এম এর ব্যাখ্যা সম্পর্কে পাগল নই। এটি প্রযুক্তিগতভাবে সঠিক তবে প্রশ্নের উত্তরগুলির সাথে মেলে না এমনভাবে উত্তর দেয়।

সুতরাং উদাহরণস্বরূপ, এখানে প্রশ্ন থেকে দুটির মধ্যে একটি গুরুত্বপূর্ণ পার্থক্য রয়েছে: "ফাইল" এবং "./file"

শেল দ্বারা পার্স করা এমন একটি অক্ষরের সাথে যদি ফাইলটির নাম দেওয়া হয় তবে কী হবে? বিশেষত কমান্ড দ্বারা ব্যাখ্যা করা অক্ষর সম্পর্কিত একটি চলছে।

বিশেষত, "ড্যাশ" অক্ষর: "-"। তবে অন্যান্য অক্ষরগুলি শেলের জন্য অর্থবহ।

উদাহরণ। আমার ফাইলটির নাম দেওয়া হয়েছিল "-ড্যাডেল"

ফাইলটি তালিকাভুক্ত করার চেষ্টা করুন:

ls -dingle
# ls -dingle
ls: invalid option -- 'e'

আরও খারাপ কথা, ফাইলটির নাম " -rf rmbomb *" রাখা থাকলে কী হবে? এখন এটি অপসারণ করার চেষ্টা করুন

rm "-rf rmbomb *"

আমি এমনকি উদাহরণটি চালানোর চেষ্টা করব না, তবে আশা করি আপনি ধারণাটি পাবেন।

সুতরাং আপনি কীভাবে ড্যাশ দিয়ে থাকা কোনও ফাইলের তালিকা করবেন? ./সামনে ব্যবহার করুন ।

# ls ./-dingle
./-dingle

Ditto for rm


বিজোড় নাম সহ কয়েকটি ফাইল প্রক্রিয়া করার এটি একটি বৈধ উপায় এবং আমার উত্তরটি সে জাতীয় ফাইলগুলি বিবেচনা করে না। উপরে বর্ণিত স্থানগুলি সহ ব্যাকস্ল্যাশ পূর্ববর্তী বিজোড় অক্ষরের আকারে উপরের সমস্ত উদাহরণের পরিবর্তে কেউ আক্ষরিক ব্যবহার করতে পারে। এর একটি উদাহরণ তাই হবে: ls \-dingleবা ls \-rf\ rmbomb\ \*। এটি নিশ্চিত করার একটি ভাল উপায় হতে পারে যে কোনও প্রদত্ত কমান্ডের সেট কমপক্ষে সামঞ্জস্যপূর্ণ, যেমন ./নাম উল্লেখ করার পরে উল্লেখ করা হয় যে নামটির পরে অক্ষরগুলি এড়ানো যাবে না ./
স্পুলার

2
এটি ঘটে, যেহেতু পালকগুলি শেল দ্বারা পালিয়ে যায়, আদেশ নয়, এবং প্যারামগুলি কমান্ড দ্বারা পার্স করা হয়, পালানো বা উদ্ধৃতি দেওয়া - কোনও কার্যকর হয় না।
দেউই মরগান

2
আপনি এটিকে rm "-rf rmbomb *"এমন শোনান যা প্রকৃতপক্ষে কোনও খারাপ কাজ করে, প্রিন্টকে rmত্রুটি করার পরিবর্তে bad এটি কেবলমাত্র বিপজ্জনক যদি আপনি ফাইলের নামটি উদ্ধৃত করতে ভুলে যান, তাই শব্দ বিভাজন ঘটে। (উদাহরণস্বরূপ শেল স্ক্রিপ্টে যেখানে আপনি rm $fileপরিবর্তে চলেছেন। rm "$file"তবে সেই ক্ষেত্রে, *প্রসারটি প্রসারিত হবে না, কারণ গ্লোব সম্প্রসারণ চলক বিস্তারের বিষয়বস্তুতে ঘটে না you আপনি যদি এটি চান তবে আপনার প্রয়োজন হবে eval)) যাইহোক, আপনার স্ক্রিপ্টটি যদি আরএম এ যাওয়ার আগে ফাইলের নামগুলি ফাইল-নামগুলি বিভক্ত করে তোলে, আমি একটি ফাইল কল space -rf .বা কিছু তৈরি করব, যাতে rm ./$iসাহায্য হয় না।
পিটার কর্ডস

1
বিটিডাব্লু, আসল ত্রুটি বার্তাটি হ'ল rm: invalid option -- ' ', যখন থেকে এটি স্থানটিকে -rfএকটি একক-চরিত্রের সুইচ হিসাবে ব্যাখ্যা করার চেষ্টা করে , কারণ এটি একই যুক্তির অংশ। (এবং হ্যাঁ, আমি যদি কোনও কিছু উপেক্ষা করেছি এবং এটি আসলে বিপজ্জনক ছিল
পিটার কর্ডেস

2
@ পিটারকর্ডস: ওয়ার্ডস্প্লিটিং এবং গ্লোববিং অনুক্রমযুক্ত পরিবর্তনশীল সম্প্রসারণ এবং কমান্ড প্রতিস্থাপনের ফলাফলগুলিতে ঘটে, যদি না যথাক্রমে IFS=''এবং চাপা থাকে -f। একটি বিরল উদাহরণ হ'ল awkএকটি অপারেন্ডকে (প্রথম স্ক্রিপ্ট foo=barহিসাবে চিহ্নিত প্রথম অপারেন্ড ব্যতীত) সম্পাদন করার জন্য একটি অ্যাসাইনমেন্ট ./foo=barহিসাবে কিন্তু পড়ার জন্য একটি ফাইল হিসাবে ফর্ম রয়েছে ।
dave_thompson_085

7

হ্যাঁ.

fileকমান্ড লাইনে জারি করে, BASH name নামের একটি ফাইলের জন্য আপনার AT PATH পরিবেশের পরিবর্তনশীলটি অনুসন্ধান করবে। ফাইলটি আপনার $ PATH ভেরিয়েবলের মধ্যে একটি ডিরেক্টরিতে না থাকলে এটি খুঁজে পাওয়া যাবে না।

.বর্তমান ডিরেক্টরি মানে। আপেক্ষিক পদে, বর্তমান ডিরেক্টরি মধ্যে./ মানে । এটা তোলে ভালো কিছু বলার অপেক্ষা রাখে না সমতূল্য যখন invoking যখন কর্মরত নির্দেশিকা।/home/sheogorath/shivering/isles.img./isles.img/home/sheogorath/shivering/

এর মতো, এটি সাধারণত আপনার কার্যনির্বাহী ডিরেক্টরিতে "জায়গায়" ডিরেক্টরি চালিত করতে ব্যবহৃত হয়।

সম্পাদনা: আপনার উদাহরণে, lsশেল দ্বারা আহ্বান করা হচ্ছে এবং পাথ ভেরিয়েবল ব্যবহার করে এটি সন্ধান করা হয়েছে। এর যুক্তিটি আপনার কার্যনির্বাহী ডিরেক্টরিতে প্রক্রিয়া করা হবে, যা কিছু হোক না কেন। যেহেতু এটি পূর্বনির্ধারিত তাই lsআপনি উভয়ই আপনার বর্তমান ডিরেক্টরিকে নির্দেশ fileকরে উল্লেখ করে এবং স্পষ্টভাবে উল্লেখ করার মধ্যে কোনও পার্থক্য দেখতে পাবেন না ./file

সমস্ত কমান্ড কার্যকারী ডিরেক্টরিতে ফাইল পাথ গ্রহণ করবে না এবং কেউ কেউ আপনার ডিরেক্টরিগুলি কনফিগারেশনের মাধ্যমে প্রাক-সংজ্ঞায়িত করে এমন একটি ডিরেক্টরিতে ফাইল ফাইল রাখার প্রত্যাশা করে। যুক্তিগুলির মধ্যে যা ফাইলগুলি আর্গুমেন্ট হিসাবে গ্রহণ করে, এই কমান্ডগুলি কম সাধারণ


1
এটি বাশ, তবে আমি সাধারণভাবে পথের সমাধান সম্পর্কে ভাবছিলাম
সের্গেই আলায়েভ

1
আমি যে কোনও শেল এর কাজ সম্পর্কে কখনও শুনেছি। BASH কেবল সর্বাধিক ব্যবহৃত হয়।
স্পুলার

4
AT পাঠ কেবলমাত্র কমান্ডের জন্যই প্রাসঙ্গিক এবং ফাইলের নাম যুক্তিগুলির সাথে কিছুই নেই lsযা মূল প্রশ্নে উল্লিখিত যেমন একটি আদেশ অনুসরণ করে । এটি একটি আপেক্ষিক পাথ (বর্তমান ওয়ার্কিং ডিরেক্টরিের তুলনায়) পুনরায় নির্ধারণের মধ্যে পার্থক্য difference ../../dir/filenameএবং পরম পথ /path/to/dir/filename
HBruijn

1
শেওগোরথের জন্য +1 ... এবং একটি সঠিক উত্তর।
কোরি ওগবার্ন

1
যদি তারা কোনও কমান্ডের পক্ষে যুক্তিযুক্ত হয়ে থাকে যা কার্যকরী ডিরেক্টরিতে ডিফল্টরূপে ফাইলগুলি অনুসন্ধান করার চেষ্টা করে তবে সেগুলি একই হবে। সুতরাং, কারণ lsতারা সর্বদা একই পথ হবে, একজন অন্যটির চেয়ে আরও স্পষ্টভাবে নির্দিষ্ট করে। যুক্তিগুলি প্রক্রিয়া করার সময় সমস্ত কমান্ড এইভাবে আচরণ করে না, তবে বেশিরভাগই তা করে।
স্পুলার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.