আমরা একটি ফাইল কার্যকর করতে "./" ব্যবহার করব না কেন?


84

আমরা ./filenameলিনাক্সে একটি ফাইল চালাতে ব্যবহার করব কেন ?

কেন শুধু শুধু এটি অন্যান্য কমান্ড মত লিখুন gcc, lsইত্যাদি ...


"লিনাক্সে ./command_nameকোনও কমান্ড চালানোর জন্য আমরা কেন ব্যবহার করব ?" হিসাবে প্রথম পংক্তিটি আরও ভালভাবে লেখা যায় না ?

উত্তর:


78

লিনাক্স, ইউনিক্স এবং সম্পর্কিত অপারেটিং সিস্টেমে .বর্তমান ডিরেক্টরিটি চিহ্নিত করে। যেহেতু আপনি আপনার বর্তমান ডিরেক্টরিতে একটি ফাইল চালাতে চান এবং সেই ডিরেক্টরিটি আপনার নেই $PATH, ./তাই এক্সিকিউটেবলটি কোথায় রয়েছে তা শেলটি বলার জন্য আপনাকে কিছুটা প্রয়োজন । সুতরাং, এর ./fooঅর্থ এক্সিকিউটেবল নামে চালিত যা fooএই ডিরেক্টরিতে রয়েছে।

আপনার যে কোনও কমান্ড পাওয়া যায় তার পুরো পাথ আপনি ব্যবহার করতে typeবা whichপেতে পারেন $PATH


5
বর্তমান ডিরেক্টরিতে প্রোগ্রামগুলি কার্যকর করা খুব সাধারণ বিষয়। কেন সেখানে শেলটি অনুসন্ধান করে না? এটি প্রথমে অনুসন্ধান করে, তারপরে $ PATH এ।
মাইকেল

এমন কিছু রয়েছে যা কেবল aliasপেতে পারে না $PATH
ব্যবহারকারী 2485710

18
@ মিশেল সুরক্ষা এবং বিচক্ষণতা: এটি যদি .প্রথমে অনুসন্ধান করা হয় তবে এটি একটি সুরক্ষা সমস্যা হবে, আপনি বা অন্য কেউ lsউদাহরণস্বরূপ প্রতিস্থাপন করতে পারেন (একটি সাধারণ ভাইরাস / ট্রোজেন: এতে একটি এক্সিকিউটেবল নামের একটি জিপ ফাইল তৈরি করুন ls, যেহেতু কেউ অনুসন্ধান করছে , তারা এই নির্বাহযোগ্য চালায়, যে…)। যদি এটি .সর্বশেষে অনুসন্ধান করে থাকে তবে আপনি কেন আপনার প্রোগ্রামটি কাজ করছে না তা না জানার জন্য আপনি দীর্ঘ সময় ব্যয় করতে পারেন (যেমন আপনি পরীক্ষা নামে একটি প্রোগ্রাম তৈরি করেন, আপনার প্রোগ্রাম চালানোর পরিবর্তে এটি সিস্টেম পরীক্ষা প্রোগ্রাম চালায় Which যা কোনও আউটপুট দেয় না)।
ctrl-alt-delor

এটিও নিশ্চিত করে যে যদি অ্যাপ্লিকেশন বা স্ক্রিপ্টটি আপনার পথে একাধিকবার উপস্থিত হয়, আপনি যে সংস্করণটি চালানোর ইচ্ছা করছেন তা চালিয়ে যাচ্ছেন (ঠিক এখানে আপনার "।" ডিরেক্টরিতে একটিটি)।
জিম

export PATH="$PATH:."PATH- তে অন্য কোথাও পাওয়া না গেলে আপনি বর্তমান ডিরেক্টরিতে কমান্ড কার্যকর করতে এক্সিকিউট করতে পারেন, এটি আপনার .bashrc ফাইলটিতে যুক্ত করতে পারেন
jcubic

99

আক্ষরিক উত্তরটি অন্যরা যেমন দিয়েছে তেমন: কারণ বর্তমান ডিরেক্টরিটি আপনার মধ্যে নেই $PATH

তবে কেন? সংক্ষেপে, এটি সুরক্ষার জন্য। যদি আপনি অন্য কারও হোম ডিরেক্টরি (বা / টিএমপি) সন্ধান করছেন, এবং কেবল টাইপ করুন gccবা ls, আপনি জানতে চান আপনি প্রকৃতটি চালাচ্ছেন, আপনার প্রানস্টার বন্ধু লিখেছেন এমন কোনও দূষিত সংস্করণ নয় যা আপনার সমস্ত ফাইল মুছে ফেলে। অন্য উদাহরণটি হ'ল testবা [, যা শেল স্ক্রিপ্টগুলিতে এই কমান্ডগুলিকে ওভাররাইড করতে পারে , যদি আপনার শেলটিতে বিল্ট-ইনগুলি না থাকে।

রয়ে .যেমন গত আপনার পাথ এন্ট্রি একটু নিরাপদ, তবে অন্যান্য আক্রমণের যা ব্যবহার করতে হয়। একটি সহজ হ'ল সাধারণ টাইপগুলি যেমন, slবা তেমন ব্যবহার করা ls-l। অথবা, একটি সাধারণ কমান্ড সন্ধান করুন যা এই সিস্টেমে ইনস্টল করা না হতে পারে - vimউদাহরণস্বরূপ, যেহেতু সিসাদমিনগুলি টাইপ করার সম্ভাব্যতা উচ্চ-গড়ের।


5
কারো দ্বারা এটি বিট হওয়ার একটি ব্যবহারিক উদাহরণ: unix.stackexchange.com/questions/7767
mattdm

PATHপরিবেশের পরিবর্তনশীল মধ্যে কেবল নিখুঁত পাথ রয়েছে ।
এড হিল

45

যদি আপনি বোঝাতে চান তবে আপনার কেন / at শুরুতে দরকার - কারণ এটি (উইন্ডোজের বিপরীতে), বর্তমান ডিরেক্টরিটি ডিফল্টরূপে আপনার পথের অংশ নয়। আপনি যদি চালান:

$ ls

আপনার শেল lsআপনার PATH এনভায়রনমেন্ট ভেরিয়েবলের ডিরেক্টরিতে echo $PATHএটি দেখতে ( এটি দেখতে), এবং এটি প্রথম lsখুঁজে পাওয়া এক্সিকিউটেবল চালায় । আপনি যদি টাইপ করেন:

$ a.out

শেলটি একইভাবে করবে - তবে এটি সম্ভবত a.out নামে একটি এক্সিকিউটেবল খুঁজে পাবেন না। আপনাকে শেলটি বলতে হবে যেখানে আউট আউট রয়েছে - এটি বর্তমান ডিরেক্টরিতে (।) এর পরে পথটি রয়েছে ./a.out

যদি আপনি এটি "a.out" কেন বলা হয় তা যদি জিজ্ঞাসা করেন তবে এটি সিসিএসির জন্য কেবলমাত্র ডিফল্ট আউটপুট ফাইলের নাম। আপনি এটি -o কমান্ড লাইন আরগ দিয়ে পরিবর্তন করতে পারেন। উদাহরণ স্বরূপ:

$ gcc test.c -o test
$ ./test

ধন্যবাদ। আমার সন্দেহ হ'ল কেন আপনার প্রয়োজন। / শুরুতে .... আমি "এর ব্যবহার পেয়েছি।" (বর্তমান ডিরেক্টরিটি ছুঁড়ে মারতে) তবে তার পরে "/" কেন?
রেনজিথ জি

8
/ লিনাক্সে পাথ বিভাজক, সুতরাং আপনি এটি ফাইল ডিরেক্টরি (a.out) থেকে ডিরেক্টরি (।) পৃথক করতে ব্যবহার করেন। এটি ছাড়া আপনার .a.out রয়েছে যা তার নিজস্ব ডানদিকে একটি বৈধ ফাইলের নাম। ( touch .a.out; ls -lAএটি দেখার চেষ্টা করুন ))
সাইমন হুইটেকার

5
ইউনিক্সে আপনি যেভাবে পথটি নির্দিষ্ট করেছেন, <dir>/<file>তাই আপনি মূলত বর্তমান ডিরেক্টরিতে একটি ফাইল সম্পাদন করতে বলছেন, যা দ্বারা নির্দেশিত হয়েছে./test
রোহান মঙ্গা

রেড হ্যাট লিনাক্স একটি আই ke$ on এ 9 (শ্রিকে) কার্নেল 2.4.20-8 প্রকাশ করেছে [renjithg @ cvsserver renjithg] $ টাচ .a.out; ls -lA মোট 3 -rw-rw-r-- 1 রেনজিথ রেনজিথগ 0 নভেম্বর 30 13 : 46 .a.out -rwxrwxr-x 1 renjithg renjithg 11669 নভেম্বর 30 13:46 a.out -rw-rw-r-- 1 রঞ্জিথগ রঞ্জিথগ 218 আগস্ট 24 2009 aray.c [রেনজিথ @ সিভিসভার রেনজিথ] $
রেনজিথ জি

3
রেড হ্যাট লিনাক্স 9? আপগ্রেড করার সময়!
mattdm

4

আপনি :.আপনার AT PATH ভেরিয়েবল যুক্ত করার চেষ্টা করতে পারেন ।

ALT + F2 ব্যবহার করে টাইপ করুন: gksudo gedit /etc/environmentলিনাক্স / জিটিকে চালিয়ে থাকলে (উবুন্টু ব্যবহার করা থাকলে এটি আপনার কাছে রয়েছে)।

তবুও, আমি দৃ strongly়ভাবে আপনাকে তা না করার পরামর্শ দিচ্ছি। এটা খারাপ খারাপ খারাপ এবং খারাপ।

আপনি জানেন যে, 1970 সালের পর থেকে এই ধরণের জিনিসগুলি এই জাতীয়ভাবে কাজ করে directory বর্তমান ডিরেক্টরিটি $ পাথের অন্তর্ভুক্ত না করার একটি কারণ রয়েছে।

. বর্তমান ডিরেক্টরি

.somethingএটি একটি লুকানো ফাইল (নটিলাসে উপস্থিত হতে "ALT +" টাইপ করুন বা " ls -la" চেষ্টা করুন ।

./someProgram.sh আপনি কি RUN টাইপ করেন বর্তমান ডিরেক্টরীতে এক্সিকিউটেবল سومরগ্রাম.শ।

.somethingElse এর অর্থ হ'ল বর্তমান ডিরেক্টরিতে আপনার একটি লুকানো এক্সিকিউটেবল রয়েছে, যা একটি খারাপ ধারণা।

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