./ (ডট স্ল্যাশ) একটি আদেশ?


16

প্রশ্নের মূল:

আমি যখন সফ্টওয়্যারটি ইনস্টল করতে পারি নি তখন প্রশ্ন উত্থাপিত হয়েছিল, সুতরাং আমি সত্যই সম্পর্কে।

প্রসঙ্গ:

আমি ফাইলটি ইনস্টল করতে চাই truecrypt-7.2-setup-x86

নির্দেশগুলি আদেশটি ব্যবহার করতে বলে:

sudo ./truecrypt-7.2-setup-x86

তবে আউটপুটটি হ'ল:

sudo: ./truecrypt-7.2-setup-x86: command not found

আপডেট: সম্পূর্ণতার জন্য, পরীক্ষায় আমি ফাইল ফোল্ডারে ছিলাম তবে এখনও ফাইলটি কার্যকর করতে সক্ষম হয়নি (chmod + x)।


1
./কমান্ডের অংশ "বর্তমান ডিরেক্টরির মধ্যে তাকান, এবং এখান থেকে কমান্ড 'truecrypt-7.2 সেটআপ-এক্স 86' চালানো" বলার নেই। যে ডিরেক্টরিটি আপনি ফাইলটি প্যাক করেছেন সেখানে আপনাকে এই কমান্ডটি চালাতে হবে।
চার্লস সবুজ

2
@ ভিডিয়োনাথ - সত্যই নয়, ব্যক্তিগতভাবে আমি মনে করি না যে এটি কোনও উত্তরের স্তরে পৌঁছেছে।
চার্লস সবুজ

1
@ জান্না আমি এক্সিকিউট অনুমতি ছাড়াই একটি স্ক্রিপ্ট পরীক্ষা করেছি এবং নিক্ষেপ করা ত্রুটিটি ছিল একটি অনুপস্থিত অনুমতি ত্রুটি, কোনও আদেশ পাওয়া যায় নি।
চার্লস সবুজ

2
@ বুবুবুবু ঠিক আছে, আপনি ডিরেক্টরিতে চলে এসেছেন - ভাল। যদিও সম্পাদনা সম্পর্কে ছোট মন্তব্য। কমান্ডটি হওয়া উচিত chmod +x, এর chmod -xবিপরীত - এটি এক্সিকিউটেবল অনুমতিগুলি সরিয়ে দেয়
সের্গেই কলডিয়াজহনি

4
প্রশ্নের শিরোনাম শরীর থেকে একেবারে পৃথক; এটা ঠিক করা উচিত?
ডেভিড জেড

উত্তর:


24

./কোন আদেশ নয়। কমান্ডটি হ'ল ./truecrypt-7.2-setup-x86

আপনার শেল এবং প্রোগ্রামগুলির মতো sudoকম্যান্ডে অন্তত একটি অক্ষর থাকা অবস্থায় একটি কমান্ডকে একটি পথের নাম হিসাবে বিবেচনা করবে /। যেহেতু .আপনি বর্তমানে যে ডিরেক্টরিতে আছেন তা প্রতিনিধিত্ব করে, বর্তমান ডিরেক্টরিতে ./truecrypt-7.2-setup-x86ফাইলটির নাম দিন truecrypt-7.2-setup-x86। যদি এই জাতীয় কোনও ফাইল না থাকে বা ফাইলটি চালানো যায় না তবে আপনি একটি ত্রুটি বার্তা পাবেন।

সের্গেই কলডিয়াজহনি বলেছেন যে কমান্ডটিতে কোনও স্ল্যাশ নেই, তালিকাভুক্ত ডিরেক্টরিগুলি $PATHঅনুসন্ধান করা হবে । বর্তমান ডিরেক্টরী স্বয়ংক্রিয়ভাবে নয় অনুসন্ধান - এবং এটা করা হয় না করা বাঞ্ছনীয় মধ্যে । এইভাবে, আপনি দুর্ঘটনাক্রমে এমন জিনিসগুলি চালাবেন না যা আপনি চালানোর প্রত্যাশা করেননি কারণ আপনার এমন কোনও ডিরেক্টরিতে রয়েছে যা আপনার কাছে রয়েছে to.$PATHcd

./বর্তমান ডিরেক্টরিতে কোনও এক্সিকিউটেবলের নাম লেখার আগে এটি চালানোর সাধারণ উপায় , তবে এটি আসলে কোনও বিশেষ বাক্য গঠন নয়। উদাহরণস্বরূপ, আপনি যদি গোলযোগ করেন এবং আপনার $PATHমতো কমান্ড চালানোর দরকার পড়ে আপনি lsলিখতে পারেন /bin/ls.সে ক্ষেত্রে বা সাধারণভাবে কোনও প্রয়োজন হয় না; যা প্রয়োজন তা হ'ল /পথের নামটির কোথাও এটি বোঝানোর জন্য যে আপনি এটি একটি পথের নাম।

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


21

কমান্ডের ./ অংশ বলছে "বর্তমান ডিরেক্টরিটি দেখুন এবং এখান থেকে 'truecrypt-7.2-setup-x86' কমান্ডটি কার্যকর করুন"। যে ডিরেক্টরিটি আপনি ফাইলটি প্যাক করেছেন সেখানে আপনাকে এই কমান্ডটি চালাতে হবে।

এটি পরীক্ষা করা যেতে পারে: একই টার্মিনাল উইন্ডোতে যেখানে আপনি কমান্ডটি চেষ্টা করছেন, কমান্ডটি সন্নিবেশ করুন ls -l true*- যদি ফাইলটি বর্তমান ওয়ার্কিং ডিরেক্টরিতে উপস্থিত থাকে, তবে ফাইল (এবং অতিরিক্ত তথ্যের একটি গুচ্ছ) প্রদর্শিত একটি তালিকা প্রদর্শিত হবে।

Zanna মন্তব্যগুলিতে যেমন মন্তব্য করেছে, আপনার ফাইলে এক্সিকিউটিভ অনুমতি থাকতে পারে না - এটি সহজেই ঠিক করা যেতে পারে। পরীক্ষার কেস হিসাবে, আমার ডিরেক্টরিটি দেখায়

chick@dad:~/test$ ls -l
total 4
-rw-r--r-- 1 chick chick 788 Oct 27 06:15 rFullBack
chick@dad:~/test$

এবং ফাইলটি "rFullBack" ফাইলটি পড়ার এবং লেখার জন্য আমার অনুমতি হিসাবে 'rw-' তালিকাভুক্ত করে। আমি কমান্ড chmod +x rFullBackএবং ডিরেক্টরি তালিকা পরিবর্তন করতে কার্যকর করতে পারি

chick@dad:~/test$ ls -l
total 4
-rwxr-xr-x 1 chick chick 788 Oct 27 06:15 rFullBack
chick@dad:~/test$

সেখানে এখন আমার অনুমতিগুলি '-rwx' রয়েছে, ইঙ্গিত করে যে আমি ফাইলটি সম্পাদন করতে পারি।


সংক্ষেপে, যদি ফাইলটি আপনার ডিরেক্টরিতে উপস্থিত থাকে

কমান্ড চালান

chmod +x ./truecrypt-7.2-setup-x86

এবং তারপর আদেশ

sudo ./truecrypt-7.2-setup-x86

1
বেশ না। এটি rw-আপনার অনুমতি হিসাবে তালিকাবদ্ধ করে - -সেট [gu] আইডি এবং স্টিকি বিটের জন্য তার আগে।
ডানকান এক্স সিম্পসন 21

@ ডানকানএক্সসিম্পসন ধন্যবাদ - আমি অনুমতিগুলির বিবরণটি কিছুটা আপডেট করেছি তবে আমি এই উত্তরটির জন্য সেটগুইড এবং স্টিকি বিট উপেক্ষা করব!
চার্লস গ্রিন ২

8

শেল ওয়ার্কে কলিং কমান্ডগুলি কীভাবে কাজ করে

না, এটি কোনও আদেশ নয়। শেলগুলি যেভাবে কাজ করে তা হ'ল আপনি যখন পাঠ্যের একটি লাইনে টাইপ করেন, প্রথম শব্দটি কমান্ড হিসাবে বিবেচিত হবে, এবং কমান্ডটি শেলটি অন্তর্নির্মিত শেলগুলির মধ্যে একটি না হলে শেলটি PATH পরিবেশের ভেরিয়েবলের তালিকাভুক্ত সমস্ত অবস্থানের দিকে তাকাবে ।

আপনি যে কমান্ডটি চালাতে চান সেই নির্দেশিকাটি বর্তমানে অবস্থিত একই ডিরেক্টরিতে থাকলেও সেই ডিরেক্টরিটি ডিরেক্টরিগুলির তালিকাতে না থাকলে কী হবে PATH? আপনার যখন ব্যবহার করা দরকার তখনই ./। এটি একরকম করার মতোই /bin/bash- আপনি শেলটি বলছেন যেখানে আপনার কাঙ্ক্ষিত কমান্ডটি রয়েছে, এটির পুরো পথ। এবং। / এর ক্ষেত্রে আপনি "এই ডিরেক্টরিটি দেখুন" শেল করতে বলছেন। তাই গুরুত্বপূর্ণ অংশটি হ'ল ফাইলটি যেখানে অবস্থিত সেখানে আপনাকে একই ডিরেক্টরিতে থাকতে হবে।

অবশ্যই, কার্যকরভাবে এক্সিকিউটেবল চালানোর জন্য এটির এক্সিকিউটেবল বিট সেট থাকা আবশ্যক, সুতরাং আপনার প্রয়োজন chmod +x ./my_file

সুতরাং গুরুত্বপূর্ণ পদক্ষেপগুলি:

  1. cd যেখানে আপনি ফাইলটি সংরক্ষণ করেছেন; যদি এটি ভিতরে হয় ~/Downloads, তাহলেcd ~/Downloads
  2. চালান chmod +x ./truecrypt-7.2-setup-x86, এটি বলছে " এই ডিরেক্টরিতে কার্যকর ফাইল ট্রুক্রিপট -7.2-সেটআপ-x86 করুন "
  3. এবং এখন কি sudo ./truecrypt-7.2-setup-x86

নোট করুন যে ব্যবহারটি ./এলোমেলো আচরণ নয়, তবে পোর্টেবল অপারেটিং সিস্টেম ইন্টারফেস স্ট্যান্ডার্ড (ওরফে পসিক্স) দ্বারা নির্দিষ্ট করা একটি স্ট্যান্ডার্ড , বিশেষত "কমান্ড অনুসন্ধান এবং সম্পাদন" বিভাগটি দেখুন।

ত্রুটি পুনরুত্পাদন

$ # my script is in ~/Downloads folder
$ stat -c "%n" /home/xieerqi/Downloads/my_script.sh                         
/home/xieerqi/Downloads/my_script.sh
$ # if I run sudo ./my_script.sh, we get an error
$ sudo ./my_script.sh
[sudo] password for xieerqi: 
sudo: ./my_script.sh: command not found
$ # of course the command not found because file is not in ./, not in this dir
$ # this is not  sudo's problem
$ # but sudo does indeed show the same error even if you're in same directory
$ cd ./Downloads/                                                                                                                                                      
$ sudo ./my_script.sh                                                                                                                                                  
[sudo] password for xieerqi: 
sudo: ./my_script.sh: command not found

দ্রষ্টব্য : প্রদত্ত ত্রুটি বার্তা sudoস্পষ্টতই বিভ্রান্তিমূলক তাই এই বিষয়টি মনে রাখা উচিত; তবে দয়া করে নোট করুন যে ওপি যে প্রশ্নটি জিজ্ঞাসা করছে তার মূল এটি ছিল না

ডকুমেন্টেশন এবং রেফারেন্স

bash৪.৩ ম্যানুয়াল থেকে , "কম্যান্ড এক্সিকিউশন" বিভাগ:

যদি নামটি শেল ফাংশন বা বিল্টিন না হয় এবং এতে কোনও স্ল্যাশ না থাকে তবে ব্যাশ সেই নাম অনুসারে এক্সিকিউটেবল ফাইল ধারণকারী ডিরেক্টরিটির জন্য PATH এর প্রতিটি উপাদান অনুসন্ধান করে।

থেকে ব্যাশ মধ্যে এটি চালানোর জন্য কেন আপনি প্রয়োজন স্ক্রিপ্ট নাম আগে (ডট স্ল্যাশ) না ./? :

এটি। / এর সাথে কাজ করে কারণ পসিক্স উল্লেখ করে যে / / ধারণকৃত একটি কমান্ড নাম সরাসরি ফাইলের নাম হিসাবে ব্যবহার করা হবে, $ PATH- তে অনুসন্ধানকে দমন করে। আপনি ঠিক একই প্রভাবের জন্য পুরো পথটি ব্যবহার করতে পারতেন, তবে ./ সংক্ষিপ্ত এবং লিখতে সহজ।


আসলে sudoআউটপুট বিভ্রান্তিকর। আপনি একই ছাড়া চেষ্টা করুন sudo, আপনি থেকে অন্য ত্রুটি পাবেন bash: Permission denied। এবং যথাযথভাবে তাই, যেহেতু আপনি স্ক্রিপ্টটিকে (মাধ্যমে chmod +x) চালানোর অনুমতি দেননি ।
রুসলান

@ রুসলান যে sudoআউটপুটকে বিভ্রান্ত করছে তা সত্য তবে এটি ত্রুটিটি দেখায়। এটি বিকাশকারীদের কাছে রিপোর্ট করার এবং তাদের এটি ঠিক করার জন্য কিছু হতে পারে। এটি তবে আলোচনার মূল বিষয় নয় - আমাদের এ ধরনের ত্রুটি তৈরি করতে ওপি কী করেছে তা প্রতিষ্ঠিত করতে এবং তাদের সঠিক পথে পরিচালিত করতে হবে। এটি বিভ্রান্তিকর কিনা - তা এখানে সমস্যা নয় issue
সের্গেই কোলোডিয়াজনি

অন্য ভাবে, এটা না ঠিক ব্যবহার হিসাবে একই /bin/bash: এটা আপনি একটি স্ক্রিপ্ট যার উপর আপনি অনুমতি চালানো হবে না চালানো অনুমতি দেয় না। আপনি যখন স্ক্রিপ্টের নামটির সাথে প্রিফেস করেন /bin/bash, /bin/bashএক্সিকিউটেবল হবার বিষয়টি হ'ল এটি কার্যকর হয় , যেমন এটি কার্যকর করা কমান্ড। আপনি যখন এটি না করেন, স্ক্রিপ্টটি নিজেই সম্পাদন করা হচ্ছে, যার ফলস্বরূপ আপনার বর্তমান শেলটি বা শীর্ষ #!লাইনে থাকা যা যা
মন্টি হার্ডার

@ মন্টিহার্ডার /bin/bashএখানে নিছক একটি উদাহরণ। আমরা কল করছি /bin/bashএবং নির্বাহ করা হচ্ছে এমন জিনিসটির পথ./script.sh নির্দিষ্ট করে - এটি একই। সহ স্ক্রিপ্টের প্রিফেসিং bash script.shবা /bin/bash script.shহয় সম্পূর্ণরূপে যা প্রণালী দ্বারা যদি সিনট্যাক্স শেল তুমি কলিং বলতে ছাড়া অন্য কিছুর জন্য লেখা আছে ভাঙ্গতে পারে - বিভিন্ন বিষয়, যেখানে আপনি একটি এক্সিকিউটেবল চালান এবং আর্গুমেন্ট হিসাবে এটি স্ক্রিপ্ট পাস csh/bin/bashএক্সিকিউটেবল ঠিক আছে, তবে আসল বিষয়টি হ'ল আপনি এখনও এটির পুরো পথ নির্দিষ্ট করছেন।
সের্গেই কোলোডিয়াজনি

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