"sudo cd ..." однострочный? [Дубликат]

20

Иногда я хочу, чтобы cd в каталог, где у моего пользователя нет разрешения, поэтому я прибегаю к sudo .

Очевидная команда sudo cd somedir не работает:

$ sudo mkdir test
$ sudo chmod go-rxw test
$ ls -l
drwx------ 2 root     root  [...snip...] test
$ cd test
-bash: cd: test: Permission denied
$ sudo cd test
sudo: cd: command not found

Использование sudo su работает:

$ sudo su
# cd test

Можно ли сделать это в однострочный? (Не большое дело, просто праздное любопытство:)

Измененные варианты не помогли:

$ sudo "cd test"
sudo: cd: command not found
$ sudo -i cd test
-bash: line 0: cd: test: No such file or directory
$ sudo -s cd test

Последний не дает ошибки, но он находится в новой оболочке, которая выходит из конца строки, поэтому она на самом деле не принимает меня никуда.

Может кто-нибудь просветить меня, почему это происходит? Почему sudo cd не найден, когда, например, sudo ls ... работает нормально?

    
задан j-g-faustus 02.01.2011 в 16:36
источник

2 ответа

21

Теоретически проблема заключается в том, что если у вас нет прав на исполнение для каталога, вы не сможете прочитать содержимое каталога. Теперь предположим, что вы могли бы сделать то, что хотели:

user@desktop:/$ sudo cd restricted-dir
user@desktop:/restricted-dir$ ls
file1 file2

Как вы можете видеть, вы ввели каталог, используя привилегии sudo, затем, когда sudo возвращается, вы снова становитесь пользователем, и вы находитесь в каталоге, где обычно не должно быть.

Технически проблема заключается в следующем.

sudo cd restricted-dir

cd - это встроенная оболочка, а не команда.

sudo cd -i restricted-dir

Вероятно, вы находитесь в / root, но у него будет такая же проблема, как и в следующем.

sudo cd -s restricted-dir

Вы открываете новую корневую оболочку, cd в каталог, затем выходите из корневой оболочки и возвращаетесь туда, где вы начали.

В целом единственное решение - открыть корневую оболочку и оставить ее открытой, пока вы находитесь в этом каталоге.

    
ответ дан petersohn 02.01.2011 в 16:52
источник
5
sudo sh -c "cd restricted-dir; some-other-command"

то есть.

sudo sh -c "cd /root/restricted-dir; ls -l"

ключевой элемент - это «sh -c», который я использую довольно часто для запуска цепочки команд в том же контексте / процессе оболочки.

    
ответ дан Tagar 07.11.2015 в 06:56