sudo ব্যবহার করার সময় কমান্ড পাওয়া যায় নি


52

সাইটে এমন কয়েকটি প্রশ্ন রয়েছে যা আমার সমস্যার সাথে সম্পর্কিত বলে মনে হচ্ছে তবে আমি সেগুলির একটিরও সমাধান পাইনি।

আমার অপারেটিং সিস্টেমটি উবুন্টু 12.04। আমি mvnইনস্টল করেছি /tools/noarch/apache-maven-3.1.1এবং আমার শেষে নিম্নলিখিত লাইনগুলি যুক্ত করেছি /etc/profile:

export M2_HOME=/tools/noarch/apache-maven-3.1.1
export PATH=$M2_HOME/bin:$PATH

তারপরে আমি মৃত্যুদণ্ড কার্যকর করি source /etc/profile

এখন আমার সমস্যা হল: যখন আমি রান mvn --versionকমান্ড সফল এবং mvnযখন আমি যদি চালানো, এক্সিকিউটেবল পাওয়া যায়: sudo mvn --versionআমি আউটপুট পাবেন: sudo: mvn: command not found। আমি জানি যে PATHআমি যখন একটি কমান্ড প্রয়োগ করি তখন এটির চেয়ে আলাদা হতে পারে sudoএবং সে কারণেই আমি এটি চেষ্টা করেছিলাম:

$>sudo echo $PATH
/tools/noarch/apache-maven-3.1.1/bin:... some other stuff ...

আরেকটি জিনিস যা আমি চেষ্টা করেছিলাম তা হ'ল এক্সিকিউট করে sudo su -তারপরে টাইপ করা mvn --version। এই ক্ষেত্রে mvnসফলভাবে সন্ধান করা হয়েছে এবং কমান্ড সফল হয়। এখানে কি হচ্ছে?


উত্তর:


37

$PATH আপনার শেল দ্বারা মূল্যায়ন করা হয়, সুতরাং আপনার চেক যেমনটি আশা করেন তেমন কাজ করে না।

/etc/sudoersআপনার ডিফল্টর সাথে প্রতিস্থাপন করতে কনফিগার করা হয়েছে PATH

sudoতাই ডিফল্ট, কমান্ড চালানোর আগে লগ-ইন শেল পরিবেশ লোড না PATHথেকে /etc/sudoersব্যবহার করা হয়। su -একটি লগইন শেল খোলার সাথে বোঝা জড়িত /etc/profile। দেখুন man bash, বিভাগ ইনভোকেশন

শুধু অপসারণ PATHপুনঃসেট /etc/sudoers। এটি সম্ভবত একটি নিয়ম বলা হয় secure_path


সেন্টওএস

সেন্টওএস আপনি যোগ করতে পারেন PATHথেকে Defaults env_keepঅধ্যায়:

Defaults    env_keep = "COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR \
                        LS_COLORS MAIL PS1 PS2 QTDIR USERNAME \
                        LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION \
                        LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC \
                        LC_PAPER LC_TELEPHONE LC_TIME LC_ALL LANGUAGE LINGUAS \
                        _XKB_CHARSET XAUTHORITY PATH"

উত্তরের জন্য ধন্যবাদ. এটি সমস্যার সমাধান করে, তবে আমি অন্য দুটি উত্তরের সমাধানের পরামর্শটি পছন্দ করি কারণ এটি আমার প্যাথের সমস্ত কমান্ডের জন্য নয়, কেবল মেভেনের জন্য পরিবর্তন সম্পাদন করে।
izomorphius

এফওয়াইআই: দয়া করে আমার উত্তর আপডেটটি নোট করুন।
ক্রেইগেক্স

কিভাবে বর্তমান ডিরেক্টরির মধ্যে বাইনেরিতে চালানো sudo করতে sudo: ./<some_binary>: command not found। আমি আর্চ লিনাক্স ব্যবহার করছি।
নেকেতভি 4'18

47

দিন sudoআপনার বর্তমান PATHসঙ্গে

sudo env "PATH=$PATH" your_command

একটি দুর্দান্ত উত্তর, যার জন্য কোনও সেটিংস সংশোধন করার প্রয়োজন নেই, কলারকে প্রয়োজনীয় যা করা দরকার তা করতে দেয়। -Eবাকী পরিবেশ সংরক্ষণের জন্য আমি বিকল্পটি ব্যবহার করব । প্রকৃতপক্ষে, এটি এত সহজ যে এটি সহজে ব্যবহারের জন্য কোনও স্ক্রিপ্ট / ওরফে / ফাংশনে রাখা যেতে পারে। আমি এটিকে পৃথক উত্তর হিসাবে যুক্ত করব - তবে @ পেয়েটে কুডোস!
টম

আমি যখন এই আদেশটিটি চালানোর চেষ্টা করি তখন আমি পাই env: cmd: No such file or directory- কোনও ধারণা কেন এমন হবে?
অ্যান্ডি

2
@ এবং আপনার আসল কমান্ডের সাথে সিএমডি প্রতিস্থাপন করুন।
23

কিভাবে বর্তমান ডিরেক্টরির মধ্যে বাইনেরিতে চালানো sudo করতে sudo: ./<some_binary>: command not found। আমি আর্চ লিনাক্স ব্যবহার করছি।
নেকটভি 4'18

12

@ Opyate- এর উত্তরে বিশদভাবে জানাচ্ছি, আমি নিম্নলিখিত শেল স্ক্রিপ্টটি ব্যবহার করছি (যা নাম হিসাবে চিহ্নিত করা যেতে পারে mysudo):

#!/bin/bash
sudo -E env "PATH=$PATH" "$@"
  • -Esudoপরিবেশ সংরক্ষণ করতে বলে ।
  • env "PATH=$PATH"sudoকলটির বাইরেও প্রসারিত হয়, বাহ্যিকটিকে খুব সহজেই PATHউপলব্ধ করে তোলে sudo( সাধারণত পুরো পরিবেশটি যে চিকিত্সা গ্রহণ করে সেই চিকিত্সার পাশাপাশি সাধারণত বিশেষ চিকিত্সা গ্রহণ -Eকরে PATHএটির পাশাপাশি এটিও প্রয়োজন )।
  • "$@"আমাদের স্ক্রিপ্টটি sudoলাইনে প্রাপ্ত আর্গুমেন্টগুলি পাস করে ।

একটি ডিরেক্টরিতে কোনও ফাইলের মধ্যে স্ক্রিপ্টটি সংরক্ষণ করুন PATH, এর +xঅনুমতি দিন এবং এটি করুন à


এটি কোনও বিদ্যমান ফাইল যেটি সম্পাদনা করতে চায় না তাদের পক্ষে এটি আরও ভাল সমাধান।
কাইস্প্প

4

যেহেতু বর্তমান উত্তরগুলি কিছুটা অস্পষ্ট তাই /etc/sudoersআপনার পথ পরিবর্তনের ক্ষেত্রে নির্দিষ্ট সেটিংসটি হ'ল secure_path:

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin

আপনি এটির সাহায্যে এটি সংশোধন করতে পারেন sudo visudo, বা আরও ভাল, আপনার যে ডিরেক্টরিগুলি প্রয়োজন তা জুড়ুন:

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:/usr/local/sbin

2

আমি প্রথম মাভেন ইনস্টল করার সময় আমার একই সমস্যা ছিল । আমি দুটি লাইন যুক্ত করার পরে সমস্যার সমাধান হয়ে গেল,

export M2_HOME=/tools/noarch/apache-maven-3.1.1
export PATH=$M2_HOME/bin:$PATH

চারটি ফাইল:

/root/.bashrc
/root/.profile

এবং বর্তমান ব্যবহারকারীর জন্য ( mehranআমার উবুন্টু ব্যবহারকারীর নাম):

/home/mehran/.bashrc
/home/mehran/.profile

1

আপনার নিজের মতো করে রুটের PATH ভেরিয়েবলটি অবশ্যই সংশোধন করতে হবে, যেমন সুডোর প্রোফাইলে সেই দুটি লাইন যুক্ত করে, যা /root/.bashrc এ অবস্থিত, তারপরে এটি উত্স করুন।


1
আমি /root/.bashrc সম্পাদনা করেছি তবে এটি উত্স করতে সক্ষম হচ্ছি না: sudo source /root/.bashrcপেয়ে যায়: sudo: source: command not foundএবং sudoআমি অনুমতি ছাড়াই প্রত্যাশিত (প্রত্যাশিত হিসাবে) পেয়েছি। আমি বিশ্বাস করি একটি নতুন টার্মিনাল শুরু করা তাত্ত্বিকভাবে উত্স হিসাবে একই করা উচিত, তবে একটি নতুন টার্মিনাল শুরু করার পরে, sudo mvn --versionএখনও কিছু খুঁজে পায় না।
izomorphius

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