Почему sudo cd иногда возвращает команду, не найденную [duplicate]

Я использовал boot-repair-disk, и это помогло много. Если у вас есть проблема с загрузкой, вы можете проверить его.

20
задан 2 January 2011 в 19:36

14 ответов

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

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 в каталог, затем выйдите из корневой оболочки и вернитесь туда, где вы начали.

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

21
ответ дан 25 July 2018 в 14:47
  • 1
    Технически cd представляет собой команду «встроенная оболочка», (согласно man bash). – Sparhawk 10 April 2014 в 09:51
  • 2
    Если это было в случае @petersohn, то почему приглашение оболочки cd: command not found, оно не показывает проблему с разрешением. И я не думаю, что shell builtin является особой причиной, потому что sudo echo работает нормально, а эхо также shell builtin – Balman Rawat 28 July 2016 в 07:30

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

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 в каталог, затем выйдите из корневой оболочки и вернитесь туда, где вы начали.

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

21
ответ дан 1 August 2018 в 21:29

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

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

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

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

  sudo cd limited-dir  

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

  sudo cd -i limited-dir  

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

  sudo cd -s limited-dir  

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

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

21
ответ дан 4 August 2018 в 13:06

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

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

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

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

  sudo cd limited-dir  

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

  sudo cd -i limited-dir  

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

  sudo cd -s limited-dir  

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

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

21
ответ дан 5 August 2018 в 21:23

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

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

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

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

  sudo cd limited-dir  

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

  sudo cd -i limited-dir  

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

  sudo cd -s limited-dir  

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

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

21
ответ дан 7 August 2018 в 14:40

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

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

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

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

  sudo cd limited-dir  

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

  sudo cd -i limited-dir  

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

  sudo cd -s limited-dir  

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

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

21
ответ дан 10 August 2018 в 04:12

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

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

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

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

  sudo cd limited-dir  

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

  sudo cd -i limited-dir  

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

  sudo cd -s limited-dir  

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

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

21
ответ дан 15 August 2018 в 14:50
  • 1
    Технически cd является «командой, встроенной в оболочку». (согласно man bash ). – Sparhawk 10 April 2014 в 09:51
  • 2
    Если это было в случае @petersohn, то почему shell promt cd: command не найден , он не показывает проблему с разрешением. И я не думаю, что shell builtin является особой причиной, потому что sudo echo отлично работает, а echo также shell builtin – Balman Rawat 28 July 2016 в 07:30
sudo sh -c "cd restricted-dir; some-other-command"

i.e.

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

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

5
ответ дан 25 July 2018 в 14:47
  • 1
    Использование && вместо ; будет препятствовать выполнению команды, если операция каталога изменений завершится с ошибкой. Другими словами: sudo sh -c "cd restricted-dir && some-other-command" – Erik Sjölund 21 August 2017 в 11:51
sudo sh -c "cd restricted-dir; some-other-command"

i.e.

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

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

5
ответ дан 1 August 2018 в 21:29
  • 1
    Использование && вместо ; будет препятствовать выполнению команды, если операция каталога изменений завершится с ошибкой. Другими словами: sudo sh -c "cd restricted-dir && some-other-command" – Erik Sjölund 21 August 2017 в 11:51
  sudo sh -c "cd limited-dir; some-other-command"  

ie

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

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

5
ответ дан 4 August 2018 в 13:06
  sudo sh -c "cd limited-dir; some-other-command"  

ie

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

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

5
ответ дан 5 August 2018 в 21:23
  sudo sh -c "cd limited-dir; some-other-command"  

ie

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

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

5
ответ дан 7 August 2018 в 14:40
  sudo sh -c "cd limited-dir; some-other-command"  

ie

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

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

5
ответ дан 10 August 2018 в 04:12
  sudo sh -c "cd limited-dir; some-other-command"  

ie

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

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

5
ответ дан 18 August 2018 в 15:41
  • 1
    Используя & amp; & amp; вместо ; предотвратит выполнение команды, если операция каталога изменений завершилась с ошибкой. Другими словами: sudo sh -c & quot; cd limited-dir & amp; & amp; & amp; некоторые-другой-команда & Quot; – Erik Sjölund 21 August 2017 в 11:51

Другие вопросы по тегам:

Похожие вопросы: