Я пытался использовать, sudo cd name_of_dir
но получаю сообщение об ошибке:
sudo: cd: command not found
Есть ли другой способ войти в каталог, принадлежащий другому пользователю, у которого есть разрешение 700?
command-line
permissions
sudo
cd-command
Бахтиер
источник
источник
ls -l
самого каталога.sudo chmod 0755 name_of_dir; do you business; cd ../; sudo chmod 0700 name_of_dir
Кажется, это единственный ответ, который вас порадует.sudo cd
работать, но он голосует за решения, используя sudo или su. Он говорит, что не хочет работать с правами root, но все равно хочет получить доступ к тому, чем он не владеет. Звучит как тролль для меня ...Ответы:
sudo cd
не будет работать, потому чтоcd
команда встроена в оболочку. Итак, вы говорите, станьте пользователем root и затем выполните эту команду. Вы становитесь пользователем root, а затем ищется команда после sudo, но нетcd
команды для поиска.Метод, который нужно использовать, это переключиться на пользователя, которому принадлежит каталог.
700
Под разрешением подразумевается «владелец может читать, писать и выполнять».Так что, если root владеет каталогом
sudo -i
, пароль иcd {dir}
единственный правильный метод. Если кому-то еще принадлежит каталог, вы все равно можете использовать 1-й метод, но также можете перейти к этому пользователюsu {username}
и затем использовать его вcd
качестве этого пользователя.источник
sudo echo
: вам нужно что-то вродеecho 'deb {text}' | sudo tee --append {file}
использования echo с sudo и для изменения файла.cd
встроен в доступные командыsudo
?sudo -i
открыть «корневую консоль», а затем
cd /path/to/directory
(
cd
это встроенная команда оболочки, поэтому она не может быть целью sudo)источник
Чтобы открыть корневой каталог, мы можем запустить корневую оболочку, например:
источник
sudo su
ing (или другой метод) является единственным практическим или даже возможным методом. «Эксперты» только говорят, что вы не должны использовать root как привычку - это нормально, когда вам это действительно нужно. И @Vojtech, нет ничего невозможного ...Как отмечали другие - это встроенная оболочка:
Так почему бы тебе не испортить саму оболочку?
источник
which
. Это просто скрипт, и он не будет обрабатывать все возможности (двоичные, встроенные, псевдонимы и т. Д.). Используйтеtype
вместо этого. Намного безопаснее, мощнее и портативнее. Иtype -p
для пути исполняемого файла.type [ -wfpams ] name ... Equivalent to whence -v.
,which [ -wpams ] name ... Equivalent to whence -c.
(мужчина zshbuiltins)whence
этоzsh
... только ... он не работает в Bash, он даже не установлен по умолчанию в Ubuntu. Хотяtype
это POSIX , то есть он будет работать в любой современной оболочке ... bash, csh, ksh .. и даже zsh.type
как оба являются псевдонимами для одной и той же команды.zsh
. В bash, которая является стандартной (и обычно единственной) терминальной оболочкой в Ubuntu,which
не является встроенной ... поэтомуtype
(илиtype -p
) предпочтительнее.Вы также можете поднять себя как пользователь root:
Затем вы можете перейти в любой каталог, который не позволяет обычному пользователю, например:
Или же
Затем, после того как вы закончите, введите:
Чтобы выйти из привилегий пользователя root.
Чтобы поднять себя как root, вы также можете объединить две команды
&&
оператором, как показано ниже, этот оператор также поддерживает их последовательность выполнения, если текущая команда выполняется успешно, и только тогда разрешено выполнение следующей команды:Или же
источник
Если вы действительно хотите заставить работать, вы можете определить функцию оболочки с именем, которая будет запускать новую корневую оболочку при этом, и просто выполнять обычную команду в противном случае.
sudo cd directory
bash
sudo
sudo
Как представлено в других ответах, большинство пользователей не захотят это делать, а вместо этого захотят:
sudo -s
, илиsudo -i
если вы хотите войти в оболочку (помните, что одним из эффектовsudo -i
является запуск вас в домашнем каталоге root), илиsudo bash
если вы хотите принудительноbash
или иметь возможность передавать параметры в оболочку.cd directory
exit
чтобы покинуть новую оболочку. Важно не забывать об этом, потому что вы не хотите выполнять от имени root больше действий, чем вы предполагали!Итак, если вы хотите, то вы можете написать функцию оболочки (или сценарий), которая выполняет первые два из этих действий, когда
sudo
за ними следуетcd
, и простоsudo
обычно работает в противном случае. Пожалуйста, не используйте это в качестве альтернативы изучению того, почемуsudo cd
иначе не получается , потому что, если вы не понимаете, что происходит, вы, вероятно, будете очень смущены, находясь в новой оболочке (и вы можете не понимать никаких сообщений об ошибках что происходит).Вот один из способов написания такой функции оболочки, которая также напоминает вам, что вы находитесь в новой оболочке и что вы должны
exit
выйти из нее, когда закончите. (Это напоминание, вероятно, будет полезно для пользователей любого уровня квалификации, потому что один в целом не привык быть в новой оболочке , когда один работаетsudo
без-s
,-i
или имя фактической оболочки в качестве аргумента.)Вы можете поместить это в свой
~/.bashrc
, хотя это достаточно странный способ использования,sudo
который вы можете включать только изредка. В этом случае лучше поместить его в отдельный файл. Если вы создадите файл, который называетсяsudo.bash
в вашем домашнем каталоге с этим содержимым, то вы можете сделатьsudo
функцию доступной, чтобы она выполнялась вместо обычнойsudo
команды, запустив ее. ~/sudo.bash
. Это действует в текущей оболочке и ее дочерних оболочках, но не в других. По той же причине, по которой такие файлы.bashrc
не являются исполняемыми, не помечайтеsudo.bash
исполняемые какchmod
. Это действительно библиотека, а не отдельный скрипт оболочки. Если вы сделалиЗапустите его как сценарий оболочки, он определит функцию ... но только в оболочке, которая запускала сценарий, а не для вас как вызывающей стороны. (Конечно, вы можете написать сценарий для этого, но это не тот подход, который я использовал здесь.)Чтобы проверить и
sudo
определить, определена ли в настоящее время функция оболочки, и увидеть ее текущее определение, если оно есть, запуститеtype sudo
. Чтобы отключить (т.е. отменить определение) функцию, как только она определена, запуститеunset -f sudo
. Чтобы вручную запустить обычнуюsudo
команду, даже если определена функция оболочки, запуститеcommand sudo
. Заметьте, однако, что вам не нужно этого делать, потому что этаsudo
функция на самом деле делает это сама, когда ей передано больше или меньше двух аргументов или первый аргумент, переданный ей, является чем угодноcd
. Вот почему вы все еще можете использовать его обычными способами, которые используют людиsudo
.Также обратите внимание, что показанная выше функция оболочки по-прежнему позволяет вам передавать другие аргументы
sudo
, но это не позволяет обрабатывать ееcd
специально . Запуск , в частности , не поддерживается, хотя вы могли бы расширить функции оболочки , чтобы поддержать этот случай. И нет . Оболочка, которую он создает, похожа на ту, что вы получаете . Код на самом деле не запускается , а использует , поэтому опция работает правильно. На самом деле он запускается дважды, когда вы передаете ему аргумент каталога (и ноль раз в противном случае). Когда вы запускаете , сначала он отделяет отдельную оболочку bash от той, в которой вы запускаете функцию, и меняет каталог. Если это удается, он заменяетsudo -u user cd directory
sudo -i cd directory
sudo -s
sudo -s
sudo bash
-c
bash
cd
sudo cd directory
sudo
эта оболочка bash с новой интерактивной оболочкой, которую вы можете использовать.Вот пример того, как эта функция оболочки автоматически «делает правильные вещи». Обратите внимание, что
sudo ls -A /root
ведет себя нормально. Только тогда, когда я пытаюсь перейтиcd
в каталог,sudo
создается новая оболочка, и мне прямо напоминают о том, что происходит.Если вы попытаетесь перейти
sudo cd
в каталог, который вы не можете изменить даже в качестве пользователя root, то вы просто получите сообщение об ошибке:Я использовал
sudo -k
между вызовами в приведенных выше примерах, чтобы показать, что он аутентифицирует вас как root перед попыткой изменить каталог. Но на самом деле вам не нужно бежатьsudo -k
самостоятельно. Поскольку функция оболочки является лишь тонкой оболочкой для настоящейsudo
команды , кэширование ваших учетных данных и другие распространенныеsudo
действия по-прежнему работают нормально.Хотя это работает хорошо и довольно аккуратно, я признаю, что дублирование реальной
sudo
команды с помощью функции с тем же именем супер странно. Большинство пользователей, вероятно , просто хочу , чтобы выполнить шагиsudo -s
, сами. Но на случай, если кто-то захочет этого - а также продемонстрирует, что это возможно, - так оно и есть.cd directory
источник
Что касается
su
или неsu
обсуждать, я думаю, что это глупо.su
это против религии Убунту, и это не то, что нужно делать небрежно. Удивительно, чтоrm -rf *
можно сделать, если вы root. Но, если вы знакомы с интерфейсом командной строки (CLI) и имеете задачи на системном уровне, нет никаких причин не использоватьsu
. Я использовал несколько дистрибутивов, которые никто даже не упомянулsudo
. Это просто вопрос того, какую работу вы делаете и какой метод вам наиболее удобен. Я использую оба.источник
sudo
у меня с kubuntu lucidsudo cd
теперь работает - без каких-либо обходных путей». Если не считать чего-то подобного, что , я уверен, никогда не было в Ubuntu по умолчанию, я не понимаю, как это сделать. (Кроме того, я использовал 10.04; он этого не делал.) Прошли годы с тех пор, как вы опубликовали это, но помните ли вы детали? У васsudo cd
все еще работает? Какой выводtype -a sudo
в оболочке, где это работает? Я понимаю, что вы можете не знать - и вторая часть вашего ответа остается актуальной - но если вы это сделаете, вы можете отредактировать об этом.