'সিডি' কমান্ডের সাহায্যে কোনও ডিরেক্টরি কীভাবে প্রবেশ করতে হবে যদি এর 700 এর অনুমতি থাকে এবং তা আমার মালিকানাধীন না হয়?


86

আমি ব্যবহার করার চেষ্টা করেছি sudo cd name_of_dirতবে ত্রুটি বার্তাটি পাচ্ছি:

sudo: cd: command not found

অন্য ব্যবহারকারীর মালিকানাধীন একটি ডিরেক্টরিতে প্রবেশের জন্য অন্য কোনও উপায় আছে যার 700 এর অনুমতি রয়েছে?


2
ls -lডিরেক্টরি নিজেই একটি যোগ করুন ।
রিনজুইন্ড

7
এবং দয়া করে ব্যাখ্যা করুন কেন আপনি এখানে বৈধ উত্তরের বিরুদ্ধে নেতিবাচক মন্তব্য রেখে চলেছেন। আপনি যদি ভাবেন যে আরও ভাল উপায় আছে (বা হওয়া উচিত) তবে দয়া করে আমাদের এটি জানান।
অলি

1
sudo chmod 0755 name_of_dir; do you business; cd ../; sudo chmod 0700 name_of_dirআপনি খুশি হবেন এমন একমাত্র উত্তর বলে মনে হচ্ছে।
মার্কো সেপ্পি

3
এখানে দেওয়া উত্তরগুলি সঠিক, তবে আপনি তাদের ভোট দিচ্ছেন এবং বলছেন যে তারা ভুল। আপনি যা দেখেছেন তার কোনও কারণেই যা বলা হচ্ছে তা খারিজ করবেন না।
রিচার্ড হলোয়ে

3
এটি মজার বিষয় ... তিনি sudo cdকাজ করতে চান তবে তিনি সুডো বা সু ব্যবহার করে সমাধানগুলিতে ভোট দেন। তিনি বলেন যে তিনি মূল হিসাবে কাজ করতে চান না, তবে তিনি এখনও নিজের নিজের মতো করে সরাসরি অ্যাক্সেস করতে চান। আমার কাছে
ট্রলের

উত্তর:


110

sudo cdcdকমান্ডটি শেলের মধ্যে নির্মিত বলে কাজ করবে না । সুতরাং আপনি বলছেন যে রুট হয়ে যান এবং তারপরে এই কমান্ডটি চালান। আপনি রুট হয়ে যান এবং তারপরে sudo এর পরে কমান্ডটি সন্ধান করা হলেও এটির জন্য কোনও cdআদেশ নেই ।

ব্যবহারের পদ্ধতিটি হ'ল ডিরেক্টরিটির মালিকানাধীন ব্যবহারকারীকে স্যুইচ করা। অনুমতি 700বলতে বোঝানো হয় "মালিক পড়তে, লিখতে এবং চালাতে পারেন"।

সুতরাং যদি রুট ডিরেক্টরি sudo -i, পাসওয়ার্ডের মালিক হয় এবং তারপরে cd {dir}একমাত্র সঠিক পদ্ধতি। অন্য কেউ যদি ডিরেক্টরিটির মালিক হন তবে আপনি এখনও 1 ম পদ্ধতিটি ব্যবহার করতে পারেন তবে সেই ব্যবহারকারীর সাথে পরিবর্তন করতে su {username}পারেন এবং তারপরে cdসেই ব্যবহারকারী হিসাবে ব্যবহার করতে পারেন ।


পার্শ্ব প্রশ্ন: মূলটি মালিক না হলেও কী 700 টি দির প্রবেশ করতে সক্ষম হবে?
MestreLion

3
হ্যাঁ MestreLion, 700 প্রবেশ করা থেকে রুটকে থামাবে না। অনুমতিগুলির '000' ব্যবহারকারীকে নিজের প্রবেশ করা থেকে বিরত করবে (হ্যাঁ, একজন ব্যবহারকারী একটি দির তৈরি করতে পারেন তিনি নিজে প্রবেশ করতে পারেন না ...) তবে তবুও রুটটি প্রবেশ করতে পারে।
রিনজউইন্ড

1
প্রতিধ্বনি শেল বিল্ড-ইন কমান্ড, কেন আমি "সুডো ইকো" চালাতে পারি তবে "সুডো সিডি" নয়?
shoujs

দুঃখিত, একই বিধিগুলি প্রযোজ্য sudo echo: আপনারা echo 'deb {text}' | sudo tee --append {file}sudo সহ প্রতিধ্বনি ব্যবহার করতে এবং একটি ফাইল পরিবর্তন করতে চাই ।
রিঞ্জউইন্ড

1
যদিও cdউপলব্ধ কমান্ডগুলিতে অন্তর্নির্মিত নয় sudo?
অ্যারন ফ্র্যাঙ্ক

44

sudo -i

"রুট কনসোল" খুলতে এবং তারপরে

cd /path/to/directory

( cdএটি শেল বিল্টিন কমান্ড, সুতরাং এটি sudo লক্ষ্য হতে পারে না)


18

একটি রুট ডিরেক্টরি খোলার জন্য আমরা একটি রুট শেল চালাতে পারি, যেমন:

sudo su
# cd /root

3
আমি মূল হিসাবে কাজ করতে চাই না। কখনও !!! এবং বিশেষজ্ঞরা কখনও মুল হিসাবে লগইন করার পরামর্শ দেয় না। -1
বখতিয়র

8
আচ্ছা ঠিক এই কারণেই আপনি রুটের ডিরেক্টরিগুলি খোলার অনুমতি চান না, তাই না?
তাক্কাত

10
রুট মোডে যেতে কোনও ভুল নেই। বিশেষজ্ঞরা সর্বদা এটি নিয়মিত- করা অবস্থায় রুটে যাওয়ার পরামর্শ দেবেন।
রিনজুইন্ড

2
আপনি যদি মূলের মালিকানাধীন জিনিসগুলির সাথে কাজ করছেন তবে কখনও কখনও sudo suআইং (বা অন্য কোনও পদ্ধতি) একমাত্র ব্যবহারিক বা এমনকি সম্ভাব্য পদ্ধতি। "বিশেষজ্ঞ" কেবল আপনাকে অভ্যাস হিসাবে রুট ব্যবহার না করার জন্য বলে থাকেন - আপনার যখন প্রয়োজন হয় ঠিক তখন এটি ঠিক আছে। আর @Vojtech, কিছুই অসম্ভব ...
অলি

2
@ বাখতিয়র: পুরো সময়টাই মূল হিসাবে কাজ করা বাঞ্ছনীয় নয়। তবে এটি একটি একক (বা কয়েকটি) কমান্ডের জন্য জারিযোগ্য। বিশেষত যদি আপনি এমন কোনও ডিরেক্টরি প্রবেশের চেষ্টা করছেন যা আপনার ব্যবহারকারীর অনুমতি নেই । সুতরাং আপনি প্রয়োজন হয় এটির মালিক বা রুট যাবে।
MestreLion

10

অন্যরা যেমন উল্লেখ করেছে - এটি শেলটি অন্তর্নির্মিত:

~ % which cd
cd: shell built-in command

সুতরাং, আপনি শেল নিজেই sudo না কেন?

~ % sudo $SHELL -c "cd name_of_dir"

5
+1 টি উবুন্টু ব্যাশ -c ধারণা ... এবং পরামর্শের জন্য: ব্যবহার এড়িয়ে which। এটি নিছক একটি স্ক্রিপ্ট এবং এটি সমস্ত সম্ভাবনাগুলি (বাইনারি, বিল্টিন, এলিয়াস ইত্যাদি) পরিচালনা করবে না। typeপরিবর্তে ব্যবহার করুন। অনেক বেশি নিরাপদ, শক্তিশালী এবং বহনযোগ্য। এবং type -pএকটি নির্বাহী পথের জন্য।
MestreLion

1
ওয়েল, নির্ভর করে ;-) type [ -wfpams ] name ... Equivalent to whence -v., which [ -wpams ] name ... Equivalent to whence -c.(ম্যান zshbuiltins)
ড্যানিয়েল

1
এটা নির্ভর করে নাwhenceকেবলমাত্র zsh... এটি ব্যাশে কাজ করে না , এটি উবুন্টুতে ডিফল্টরূপে ইনস্টল করা হয় না। যদিও typeহয় POSIX অর্থাত কাজ করবে কোন আধুনিক শেল ... ব্যাশ, csh শেল, ksh .. এবং এমনকি zsh।
MestreLion

অবশ্যই, এটি হ'ল এবং এ কারণেই আমি যখন আপনার মন্তব্যটি হাজির হলাম ঠিক তখনই তা অগ্রাহ্য করেছি, তবে আমার কী ছিল যে zsh এ আসলে এটি কোনও স্ক্রিপ্ট নয় এবং typeউভয়ই একই কমান্ডের উপমা হিসাবে একই রকম ফলাফল দেয় ।
ড্যানিয়েল বাউকে

ওহ, আমি এখন বুঝতে পারি। ঠিক আছে, তবে সেখানে zsh। বাশ-এ, যা উবুন্টুতে ডিফল্ট (এবং সাধারণত কেবলমাত্র) টার্মিনাল শেল, whichকোনও বিল্টিন নয় ... সুতরাং type(বা type -p) পছন্দ হয়।
MestreLion

4

আপনি নিজের দ্বারা রুট ব্যবহারকারীতে নিজেকে উন্নীত করতে পারেন:

sudo -s

তারপরে আপনি এমন কোনও ডিরেক্টরিতে সিডি করতে পারেন যা সাধারণ ব্যবহারকারীদের মতো করতে দেয় না:

cd /root

অথবা

cd /var/lib/

তারপরে আপনি সেখানে কাজ করার পরে টাইপ করুন:

exit

রুট ব্যবহারকারীর সুবিধাগুলি লগআউট করতে।

নিজেকে রুট হিসাবে উন্নীত করার জন্য, আপনি &&নীচের মত অপারেটর দ্বারা দুটি কমান্ড একত্রিত করতে পারেন , এই অপারেটর তাদের কার্যকরকরণের ক্রমটিও বজায় রাখে, যদি বর্তমান কমান্ড সফলভাবে কার্যকর হয় এবং কেবলমাত্র পরবর্তী কমান্ডটি কার্যকর করার অনুমতি দেওয়া হয়:

sudo -s && cd /var/lib

অথবা

sudo -s && cd /root

2

আপনি যদি সত্যিই কাজ করতে চান তবে আপনি একটি শেল ফাংশনটি সংজ্ঞায়িত করতে পারেন যা এই ভাবে চালানোর সময় একটি নতুন রুট শেল চালায় এবং অন্যথায় কেবল নিয়মিত কমান্ড চালায় ।sudo cd directorybashsudosudo

অন্যান্য উত্তরে যেমন উপস্থাপন করা হয়েছে, বেশিরভাগ ব্যবহারকারীরা এটি করে বিরক্ত করতে চান না , তবে পরিবর্তে এটি করতে চাইবেন:

  1. চালান sudo -s, বা sudo -iআপনি লগইন শেল চাইলে (মনে রাখবেন যে এর একটি প্রভাব sudo -iআপনাকে মূলের হোম ডিরেক্টরিতে শুরু করা) বা sudo bashআপনি যদি জোর করতে চান bashবা শেলের বিকল্পগুলি পাস করতে সক্ষম হন।
  2. নতুন শেল চালান ।cd directory
  3. নতুন শেলের মূল হিসাবে গ্রহণের (অন্যান্য) ক্রিয়াগুলি যা করা দরকার তা সম্পাদন করুন।
  4. একবার হয়ে গেলে exitনতুন শেলটি ছেড়ে চলে যান। এটি ভুলে যাওয়া গুরুত্বপূর্ণ নয়, কারণ আপনি যতটা ইচ্ছা তত রুট হিসাবে আরও ক্রিয়া সম্পাদন করতে চান না!

সুতরাং, যদি আপনি চান, তবে আপনি শেল ফাংশন (বা একটি স্ক্রিপ্ট) লিখতে পারেন sudoযা অনুসরণ করার পরে সেই দুটি ক্রিয়াকলাপ সম্পাদন করে cdএবং sudoঅন্যথায় সাধারণত চালিত হয়। অন্যথায় কেন সফল হয় না তা শেখার বিকল্প হিসাবে দয়া করে এটি ব্যবহার করবেন না sudo cd , কারণ আপনি যদি বুঝতে না পারছেন যে কী চলছে, তবে আপনি সম্ভবত নতুন শেলের মধ্যে পড়ে খুব বিভ্রান্ত হবেন (এবং আপনি কোনও ত্রুটির বার্তা বুঝতে নাও পারেন) যে ঘটতে পারে)।

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

# Make sudo treat "sudo cd [DIRECTORY]" as a special case and start a shell.
sudo() {
    if [ "$#" -eq 2 ] && [ "$1" = 'cd' ]; then
        sudo bash -c '
                if cd -- "$2"; then # When cd fails, its own message is enough.
                    printf "%s: Running %s shell in %s\n" "$0" "$USER" "$2" >&2
                    printf "%s: Type \"exit\" once you are done!\n" "$0" >&2
                    exec bash # Replace this bash shell with an interactive one.
                fi
            ' bash _ "$2" # Use $2 as the dir in the intermediate shell, too.
    else
        command sudo "$@"
    fi
}

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

sudoবর্তমানে শেল ফাংশন হিসাবে সংজ্ঞায়িত হয়েছে কিনা তা যাচাই করতে এবং এটির বর্তমান সংজ্ঞাটি যদি একটি হয় তবে তা চালনা করুন type sudo। ফাংশনটি একবার সংজ্ঞায়িত হয়ে গেলে (যেমন, অপরিশোধিত) অক্ষম করতে, চালান unset -f sudosudoশেল ফাংশনটি সংজ্ঞায়িত হলেও নিয়মিত কমান্ডটি সরাসরি ম্যানুয়ালি চালাতে , চালান command sudo। মনে রাখবেন, যাইহোক, আপনি না যে আছে , যে কাজ করতে এই কারণে sudoফাংশন আসলে বেশী বা কম দুটি আর্গুমেন্ট অথবা প্রথম আর্গুমেন্ট প্রেরণ পাস নিজেই যখনই আছে এটা কিন্তু কিছু করার নেই cdএজন্য আপনি এখনও লোকেরা যেভাবে ব্যবহার করেন সেগুলি ব্যবহার করতে পারেন sudo

উল্লেখ্য এছাড়াও উপরে দেখানো শেল ফাংশন এখনও তোমাকে অন্য আর্গুমেন্ট পাস যে sudo, কিন্তু যে চিকিত্সা আটকাতে পারে cdবিশেষভাবে । বিশেষত দৌড়াদৌড়ি সমর্থিত নয়, যদিও আপনি সেই ক্ষেত্রে সমর্থন করার জন্য শেল ফাংশনটি প্রসারিত করতে পারেন। না হয় । এটি তৈরি করা শেল আপনার সাথে মিলিত হওয়ার মতো । কোডটি আসলে চালায় না , তবে ব্যবহার করে , সুতরাং বিকল্পটি সঠিকভাবে কাজ করে। এটি পাস করার সময় এটি দুটিবার চলে এবং এটির জন্য ডিরেক্টরি আর্গুমেন্ট (এবং অন্যথায় শূন্য বার)। আপনি যখন চালান , প্রথমে এটি আপনি ফাংশনটি চালাচ্ছেন তার থেকে আলাদা বাশ শেলটি কাঁটাচামচ করে দেয় এবং ডিরেক্টরি পরিবর্তন করে। যদি এটি সফল হয়, এটি প্রতিস্থাপন করেsudo -u user cd directorysudo -i cd directorysudo -ssudo -ssudo bash-cbashcdsudo cd directorysudo আপনি ব্যবহার করতে পারেন এমন একটি নতুন, ইন্টারেক্টিভ সহ সেই ব্যাশ শেল।

কীভাবে শেলটি স্বয়ংক্রিয়ভাবে "সঠিক কাজ করে" তার একটি উদাহরণ এখানে thing লক্ষ্য করুন যে sudo ls -A /rootসাধারণত আচরণ করে। আমি তখনই যখন cdএকটি ডিরেক্টরিতে চেষ্টা করার চেষ্টা করি কেবল তখনই sudoএকটি নতুন শেল তৈরি হয় এবং আমি কী ঘটছে তা স্পষ্টভাবে মনে করিয়ে দিই।

ek@Io:~$ sudo ls -A /root
[sudo] password for ek:
.aptitude      .bashrc  .config  .emacs.d  .nano     .rpmdb
.bash_history  .cache   .dbus    .local    .profile
ek@Io:~$ sudo -k  # invalidates my current timestamp... like I left for a while
ek@Io:~$ sudo cd /root/.local
[sudo] password for ek:
bash: Running root shell in /root/.local
bash: Type "exit" once you are done!
root@Io:/root/.local#
root@Io:/root/.local#
root@Io:/root/.local# exit
exit
ek@Io:~$

আপনি যদি sudo cdএমন কোনও ডিরেক্টরিতে চেষ্টা করেন যা আপনি রুট হিসাবেও পরিবর্তন করতে পারবেন না, তবে আপনি কেবল একটি ত্রুটি বার্তা পাবেন:

ek@Io:~$ sudo cd /nonexistent
[sudo] password for ek:
bash: line 1: cd: /nonexistent: No such file or directory
ek@Io:~$ sudo -k
ek@Io:~$ sudo cd /etc/crontab
[sudo] password for ek:
bash: line 1: cd: /etc/crontab: Not a directory
ek@Io:~$

ডিরেক্টরিটি পরিবর্তন করার চেষ্টা করার আগেsudo -k এটি আপনাকে রুট হিসাবে অনুমোদন করে তা দেখানোর জন্য আমি উপরোক্ত উদাহরণগুলির অনুরোধগুলির মধ্যে ব্যবহার করেছি । তবে আপনাকে আসলে নিজেকে চালানোর দরকার নেই । কারণ শেল ফাংশন বাস্তব জন্য শুধু একটি পাতলা মোড়কের হয় কমান্ড , আপনার শংসাপত্রগুলি এবং অন্যান্য সাধারণ ক্যাশের ব্যবস্থা আচরণে এখনও স্বাভাবিকভাবে কাজ।sudo -ksudosudo

যদিও এটি ভালভাবে কাজ করে এবং একধরনের ঝরঝরে, আমি স্বীকার করি যে sudoএকই নামের ফাংশন দিয়ে আসল কমান্ডের ছায়া দেওয়া খুব অদ্ভুত। অধিকাংশ ব্যবহারকারীদের সম্ভবত ধাপগুলি অনুসরণ করতে চাইবেন sudo -s, নিজেদের। তবে যদি কেউ এটি চায় - এবং এটিও সম্ভব যে এটি প্রদর্শন করতে পারে - এটি সেখানে রয়েছে।cd directory


0

যতক্ষণ না বিতর্ক করা suবা না করা su, আমি মনে করি এটি নির্বোধ। suউবুন্টুর ধর্মের বিরুদ্ধে এবং এটি অযত্নে করার কিছু নয়। rm -rf *আপনি যদি মূল হন তবে এটি কি করতে পারে তা আশ্চর্যজনক । তবে, আপনি যদি কমান্ড লাইন ইন্টারফেস (সিএলআই) দিয়ে স্বাচ্ছন্দ্য বোধ করেন এবং করার জন্য সিস্টেম স্তরের কাজগুলি করেন, তবে এটি ব্যবহার না করার কোনও কারণ নেই su। আমি বেশ কয়েকটি ডিস্ট্রো ব্যবহার করেছি যেখানে কেউ ব্যবহারের কথা উল্লেখও করেনি sudo। আপনি কোন ধরণের কাজ করছেন এবং কোন পদ্ধতিতে আপনি সবচেয়ে বেশি স্বাচ্ছন্দ্য বোধ করছেন এটি কেবল বিষয়। আমি উভয় ব্যবহার।


1
" sudoবাশের সংস্করণগুলিতে এবং আমি কুবুন্টু লুসিডের সাথে রয়েছি, sudo cdএখন কাজ করে - কোনও কাজের সুযোগ ছাড়াই।" এরকম কিছু সংক্ষিপ্ত , যা আমি দৃ default়ভাবে নিশ্চিত যে ডিফল্টরূপে উবুন্টুতে কখনও হয়নি, আমি কীভাবে তা দেখছি না। (এছাড়াও, আমি 10.04 ব্যবহার করেছি; এটি তা করেনি)) আপনি এই পোস্ট করার পরে বহু বছর হয়েছে, তবে আপনি কি বিশদটি মনে রাখবেন? না sudo cdএখনও তোমার জন্য কাজ করে? type -a sudoযেখানে এটি কাজ করে সেখানে শেলের আউটপুট কী ? আমি বুঝতে পেরেছি আপনি হয়ত জানেন না - এবং আপনার উত্তরের দ্বিতীয় অংশটি প্রাসঙ্গিক থেকে যায় - তবে আপনি যদি এটি করেন তবে আপনি এটি সম্পর্কে সম্পাদনা করতে পারেন ।
এলিয়াহ

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