শিরোনাম অনুসারে, * এনআইএক্স ফাইল সিস্টেমের জন্য কোনও পার্থক্য রয়েছে কি? যেমন ls file
এবংls ./file
শিরোনাম অনুসারে, * এনআইএক্স ফাইল সিস্টেমের জন্য কোনও পার্থক্য রয়েছে কি? যেমন ls file
এবংls ./file
উত্তর:
আমি স্মললনআফ 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\ \*
। এটি নিশ্চিত করার একটি ভাল উপায় হতে পারে যে কোনও প্রদত্ত কমান্ডের সেট কমপক্ষে সামঞ্জস্যপূর্ণ, যেমন ./
নাম উল্লেখ করার পরে উল্লেখ করা হয় যে নামটির পরে অক্ষরগুলি এড়ানো যাবে না ./
।
rm "-rf rmbomb *"
এমন শোনান যা প্রকৃতপক্ষে কোনও খারাপ কাজ করে, প্রিন্টকে rm
ত্রুটি করার পরিবর্তে bad এটি কেবলমাত্র বিপজ্জনক যদি আপনি ফাইলের নামটি উদ্ধৃত করতে ভুলে যান, তাই শব্দ বিভাজন ঘটে। (উদাহরণস্বরূপ শেল স্ক্রিপ্টে যেখানে আপনি rm $file
পরিবর্তে চলেছেন। rm "$file"
তবে সেই ক্ষেত্রে, *
প্রসারটি প্রসারিত হবে না, কারণ গ্লোব সম্প্রসারণ চলক বিস্তারের বিষয়বস্তুতে ঘটে না you আপনি যদি এটি চান তবে আপনার প্রয়োজন হবে eval
)) যাইহোক, আপনার স্ক্রিপ্টটি যদি আরএম এ যাওয়ার আগে ফাইলের নামগুলি ফাইল-নামগুলি বিভক্ত করে তোলে, আমি একটি ফাইল কল space -rf .
বা কিছু তৈরি করব, যাতে rm ./$i
সাহায্য হয় না।
rm: invalid option -- ' '
, যখন থেকে এটি স্থানটিকে -rf
একটি একক-চরিত্রের সুইচ হিসাবে ব্যাখ্যা করার চেষ্টা করে , কারণ এটি একই যুক্তির অংশ। (এবং হ্যাঁ, আমি যদি কোনও কিছু উপেক্ষা করেছি এবং এটি আসলে বিপজ্জনক ছিল
IFS=''
এবং চাপা থাকে -f
। একটি বিরল উদাহরণ হ'ল awk
একটি অপারেন্ডকে (প্রথম স্ক্রিপ্ট foo=bar
হিসাবে চিহ্নিত প্রথম অপারেন্ড ব্যতীত) সম্পাদন করার জন্য একটি অ্যাসাইনমেন্ট ./foo=bar
হিসাবে কিন্তু পড়ার জন্য একটি ফাইল হিসাবে ফর্ম রয়েছে ।
হ্যাঁ.
file
কমান্ড লাইনে জারি করে, BASH name নামের একটি ফাইলের জন্য আপনার AT PATH পরিবেশের পরিবর্তনশীলটি অনুসন্ধান করবে। ফাইলটি আপনার $ PATH ভেরিয়েবলের মধ্যে একটি ডিরেক্টরিতে না থাকলে এটি খুঁজে পাওয়া যাবে না।
.
বর্তমান ডিরেক্টরি মানে। আপেক্ষিক পদে, বর্তমান ডিরেক্টরি মধ্যে./
মানে । এটা তোলে ভালো কিছু বলার অপেক্ষা রাখে না সমতূল্য যখন invoking যখন কর্মরত নির্দেশিকা।/home/sheogorath/shivering/isles.img
./isles.img
/home/sheogorath/shivering/
এর মতো, এটি সাধারণত আপনার কার্যনির্বাহী ডিরেক্টরিতে "জায়গায়" ডিরেক্টরি চালিত করতে ব্যবহৃত হয়।
সম্পাদনা:
আপনার উদাহরণে, ls
শেল দ্বারা আহ্বান করা হচ্ছে এবং পাথ ভেরিয়েবল ব্যবহার করে এটি সন্ধান করা হয়েছে। এর যুক্তিটি আপনার কার্যনির্বাহী ডিরেক্টরিতে প্রক্রিয়া করা হবে, যা কিছু হোক না কেন। যেহেতু এটি পূর্বনির্ধারিত তাই ls
আপনি উভয়ই আপনার বর্তমান ডিরেক্টরিকে নির্দেশ file
করে উল্লেখ করে এবং স্পষ্টভাবে উল্লেখ করার মধ্যে কোনও পার্থক্য দেখতে পাবেন না ./file
।
সমস্ত কমান্ড কার্যকারী ডিরেক্টরিতে ফাইল পাথ গ্রহণ করবে না এবং কেউ কেউ আপনার ডিরেক্টরিগুলি কনফিগারেশনের মাধ্যমে প্রাক-সংজ্ঞায়িত করে এমন একটি ডিরেক্টরিতে ফাইল ফাইল রাখার প্রত্যাশা করে। যুক্তিগুলির মধ্যে যা ফাইলগুলি আর্গুমেন্ট হিসাবে গ্রহণ করে, এই কমান্ডগুলি কম সাধারণ
ls
যা মূল প্রশ্নে উল্লিখিত যেমন একটি আদেশ অনুসরণ করে । এটি একটি আপেক্ষিক পাথ (বর্তমান ওয়ার্কিং ডিরেক্টরিের তুলনায়) পুনরায় নির্ধারণের মধ্যে পার্থক্য difference ../../dir/filename
এবং পরম পথ /path/to/dir/filename
ls
তারা সর্বদা একই পথ হবে, একজন অন্যটির চেয়ে আরও স্পষ্টভাবে নির্দিষ্ট করে। যুক্তিগুলি প্রক্রিয়া করার সময় সমস্ত কমান্ড এইভাবে আচরণ করে না, তবে বেশিরভাগই তা করে।