লিনাক্সে এক্সিকিউটেবলের চালনার জন্য আমাকে কেন সর্বদা "./" টাইপ করতে হয়?


8

যখন আমি উদাহরণগুলি কম্পাইল করে:

GCC x.c -o x

ফলাফল কার্যকর করতে আমাকে লিখতে হবে:

./x

এবং কেবল টাইপিং:

x

এই বার্তাটি ব্যর্থ:

x: কমান্ড পাওয়া যায় নি

এর অর্থ লিনাক্স এটির জন্য বর্তমান ডিরেক্টরি অনুসন্ধান করে না! এই আচরণের পিছনে কোনও যুক্তিসঙ্গত সমস্যা আছে (আমি অবশ্যই নিশ্চিত)?


কারণ এটি নিয়ম।
ড্যানিয়েল আর হিক্স

@ ড্যানএইচ: তারপরে দয়া করে "বিধিগুলি" ব্যাখ্যা করুন।
টরবেন গুন্ডটোফট-ব্রুন

উত্তর:


13

কারণ ডিফল্টরূপে, বর্তমান ওয়ার্কিং ডিরেক্টরিটি PATHভেরিয়েবলের মধ্যে নেই।

এটি একটি সুরক্ষা / সুবিধার পরিমাপ। আপনার বর্তমান ওয়ার্কিং ডিরেক্টরিতে যদি বাইনারি / স্ক্রিপ্টগুলি বলা হয়, যেমন cd, lsইত্যাদি,


4
উত্তরটি কেবল আংশিকভাবে সঠিক। যদি বর্তমান ডিরেক্টরিটি কেবলমাত্র সর্বশেষ বিকল্প হিসাবে ব্যবহৃত হয় তবে সমস্যাটি ঘিরে থাকতে পারে। তারপরে স্ট্যান্ডার্ড সরঞ্জামগুলি এখনও পাওয়া যাবে।
ব্যবহারকারী অজানা

1
এছাড়াও, শেল বিল্টিনগুলি প্রাধান্য দেয় (যেমন আপনি যখন টাইপ cdকরেন bash, তখন এটি ব্যাশ করার জন্য একটি অভ্যন্তরীণ রুটিন চালায় এবং না /bin/cd) যদি আপনি with। With দিয়ে অগ্রিম না হন Law
লরেন্স

3
মূল * নিক্স সুরক্ষা ব্যবস্থাগুলির মধ্যে একটি, এটি সিস্টেম বা অ্যাডমিনকে সংকলিত বাইনারিগুলি নির্ধারিত করে যা সিস্টেম নির্ধারিত পাথ কমান্ডে কার্যকর হয় to হেল্প ডেস্ক প্রশ্নে রুট হিসাবে লগ ইন করার জন্য, কোনও ব্যবহারকারী ডিরেক্টরিতে গিয়ে, ls টাইপ করুন এবং তারা ব্যবহারকারীর দ্বারা বোমা ফেলে রাখা বোমাটি দেখতে পাবে বলে এত খারাপ কিছু নেই ।
ফায়াসকো ল্যাবগুলি 22

7
@ ইউজারুননড: এবং আপনি টাইপ করার সময় প্রথমবারের মতো slএকই সমস্যা পেয়েছেন। শুধু বিশ্বস্ত ডিরেক্টরি মধ্যে থাকা উচিত $PATHএবং আপেক্ষিক পাথ পছন্দ .হয় না একটি ইন্টারেক্টিভ শেল জন্য একটি বিশ্বস্ত ডিরেক্টরি।

2
@ বেসিক: আমি যদি টাইপ rm -r targetকরি তবে আমি বোঝাতে চাইছি rm -f targetসাধারণত কোনও পার্থক্য নেই। আমি rm -f targetযখন বোঝাতে চাইছি আমি টাইপ করি তবে rm -r targetহয় না কোনও পার্থক্য বা সরানো পুরোপুরি ব্যর্থ। উপরন্তু, আমি মনে করি প্রত্যেক সময় আমি টাইপ করার আগে rm, বিশেষভাবে যদি আমি যোগ করছি -fবা -rবা উল্লিখিত glob - এটা তার প্রকৃতি দ্বারা একটি বিপজ্জনক কমান্ড আছে। lsআইএনজি করার আগে কেউ ভাবেনা।

1

এর অর্থ হ'ল বর্তমান ডিরেক্টরিটি $ PATH ভেরিয়েবলের মধ্যে নেই।


1

আপনি PATHপরিবেশের ভেরিয়েবলের সাথে বর্তমান ডিরেক্টরিটি (একটি ডট দ্বারা উপস্থাপিত) যুক্ত করে এটি ঠিক করতে পারেন ।
এটি করার উপায়টি আপনি যে শেলটি ব্যবহার করছেন তার উপর নির্ভর করে।
যদি আপনি ব্যাশ ব্যবহার করছেন, আপনি লাইন যোগ করতে পারেন export PATH=$PATH:.থেকে .bashrcআপনার হোম ডিরেক্টরীতে ফাইল।
আপনি যদি csh বা tcsh ব্যবহার করছেন তবে set PATH = ($PATH .)আপনার হোম ডিরেক্টরিতে ফাইলটি .cshrc এ লাইন যুক্ত করুন ।
আইএমএইচও, কোনও হোম ডেস্কটপ কম্পিউটারের জন্য এটি করা একটি গ্রহণযোগ্য জিনিস - সুরক্ষার ভিত্তিতে।


আমি যোগ করতে পারি জানি না। পথের কাছে, তবে, এটি করা কি সুরক্ষা হ্রাস করবে, তাই না?
ইয়াসির জামানী
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.