У меня также иногда возникала эта проблема с такими основными командами, как cd. Используя dzdo cdвозврат "команда не найдена". Конечно , позже я понял , что cdING в каталог, у меня нет разрешения на, не поможет очень много, так что я либо нужен корневой оболочки или необходимость dzdo ls, dzdo mvи т.д. содержимое из - за пределов , что реж.
Подстановочный
2
Проблема в sudo cdтом, что cdэто встроенная команда, а не программа. Если вы хотите перейти в каталог, к которому у вас нет доступа, и (например) переименовать файл там, вы можете сделать (например) sudo mv dir/oldfile dir/newfileилиsudo sh -c "cd dir; mv oldfile newfile" .
G-Man говорит: «Восстановите Монику»
Ответы:
13
Когда вы sudo, вы получаете предварительно сконфигурированный $PATH, который (должен быть) что-то вроде пути по умолчанию пользователя root . Ваша программа не находится в этом списке каталогов, определенных $PATH.
sudo пытается быть в безопасности при выполнении внешних команд.
Есть два разных способа работы с переменными среды. По умолчанию
опция env_resetsudoers включена. Это приводит к тому команды должны быть выполнены с минимальной средой , содержащей TERM,
PATH, HOME, SHELL, LOGNAME, USERи USERNAMEв дополнение к переменным из процесса вызывающего это допускается env_checkи env_keepsudoers вариантов. Существует фактически белый список для переменных среды.
Если вы не можете настроить sudoсохранение $PATH, обычно обходной путь - указать полный путь к программе. Это может плохо работать со сценариями, которые вызывают другие исполняемые файлы в (недоступном) каталоге.
Вы должны указать полный путь. Это также более безопасно; если вы не укажете путь, возможно, что злоумышленник может создать другую программу, которая будет запускаться с правами root.
Кроме того, вам нужно вставить строку, /etc/sudoersчтобы позволить это. man sudoersдля синтаксиса, это слишком много, чтобы поставить здесь.
cd
. Используяdzdo cd
возврат "команда не найдена". Конечно , позже я понял , чтоcd
ING в каталог, у меня нет разрешения на, не поможет очень много, так что я либо нужен корневой оболочки или необходимостьdzdo ls
,dzdo mv
и т.д. содержимое из - за пределов , что реж.sudo cd
том, чтоcd
это встроенная команда, а не программа. Если вы хотите перейти в каталог, к которому у вас нет доступа, и (например) переименовать файл там, вы можете сделать (например)sudo mv dir/oldfile dir/newfile
илиsudo sh -c "cd dir; mv oldfile newfile"
.Ответы:
Когда вы
sudo
, вы получаете предварительно сконфигурированный$PATH
, который (должен быть) что-то вроде пути по умолчанию пользователя root . Ваша программа не находится в этом списке каталогов, определенных$PATH
.Смотри например
sudo
сохранить $ PATH?PATH
)Если вы не можете настроить
sudo
сохранение$PATH
, обычно обходной путь - указать полный путь к программе. Это может плохо работать со сценариями, которые вызывают другие исполняемые файлы в (недоступном) каталоге.источник
Вы должны указать полный путь. Это также более безопасно; если вы не укажете путь, возможно, что злоумышленник может создать другую программу, которая будет запускаться с правами root.
Кроме того, вам нужно вставить строку,
/etc/sudoers
чтобы позволить это.man sudoers
для синтаксиса, это слишком много, чтобы поставить здесь.источник