Команда Cd не найдена в Linux

Обновлено: 21.11.2024

Сообщение Команда не найдена указывает на одно из следующего:

Эта команда недоступна в системе.

Каталог команды не указан в пути поиска.

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

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

Вы можете отобразить текущий путь поиска с помощью команды echo $PATH. Например:

Используйте команду which, чтобы определить, используете ли вы неправильную версию команды. Например:

Команда which ищет в файле .cshrc информацию о пути. Команда which может дать вводящие в заблуждение результаты, если вы выполняете ее из оболочки Bourne или Korn и у вас есть файл .cshrc, содержащий псевдонимы для команды which. Чтобы обеспечить точные результаты, используйте команду which в оболочке C или в оболочке Korn используйте команду where.

Как диагностировать и устранять проблемы с путями поиска

Отобразите текущий путь поиска, чтобы убедиться, что каталог для команды не указан в вашем пути или в нем нет ошибок.

Проверьте следующее:

Верный ли путь поиска?

Путь поиска указан перед другими путями поиска, где найдена другая версия команды?

Находится ли команда в одном из путей поиска?

Если путь нуждается в исправлении, перейдите к шагу 3. В противном случае перейдите к шагу 4.

Добавьте путь к соответствующему файлу, как показано в этой таблице.

Борн и Корн

$ PATH= $HOME/bin:/sbin:/usr/local /bin .

Имена путей разделяются двоеточием.

hostname% set path=( ~bin /sbin /usr/local/bin . )

Пути разделяются пробелом.

Активируйте новый путь следующим образом:

Файл, в котором находится путь

Используйте эту команду для активации пути

Борн и Корн

имя хоста% источник .cshrc

имя хоста % источник .логин

Проверьте новый путь.

Пример 19–1. Диагностика и исправление проблем с путями поиска

В этом примере показано, что исполняемый файл mytool не находится ни в одном из каталогов пути поиска с помощью команды which.

Если вы не можете найти команду, посмотрите путь к ее каталогу на справочной странице. Например, если вы не можете найти команду lpsched (демон принтера lp), справочная страница lpsched(1M) указывает путь /usr/lib/lp/lpsched .

Вы можете запускать только внешние команды с помощью sudo , поэтому вам нужно вызвать bash для выполнения команды cd, используя sudo bash -c cd . .

FWIW POSIX говорит, что команда cd должна быть доступна как внешняя команда. Сомнительная ценность? Конечно, но это спецификация.

4 ответа 4

Другой ответ не является неправильным.

Возможно, лучший ответ:

Инструмент sudo предназначен для выполнения действий от имени суперпользователя, а вы описываете что-то, что больше похоже на изменение состояния, которое будет предшествовать таким действиям, как "ls" или "vi" или другим, чтобы сделать их проще.

Я предлагаю, например. если вы хотите отредактировать файл в /root/private/:

Это определенно требует большего набора текста и немного сложнее, чем просто смена каталогов. Тем не менее, он намного лучше поддается аудиту и гораздо больше соответствует принципам, лежащим в основе sudo, чем запуск какого-либо варианта 'sudo bash'.

Если вы работаете в безопасной среде, ваша команда IA будет вам благодарна. Если вы обнаружите, что задаетесь вопросом: "Что я изменил на днях?", вы будете вам благодарны, потому что вам не придется задаваться вопросом, какой файл или файлы вы редактировали.

Все это говорит о том, что включить и выполнить некоторую форму «sudo bash» определенно проще. Если вы искали проще, почему вы используете sudo вместо того, чтобы просто войти в систему как пользователь root?

Похоже, вы говорите о том, чтобы полагаться на .bash_history каждого администратора вместо того, чтобы использовать что-то более надежное, например, etckeeper?

Ужасно раздражает то, что завершение имени файла с помощью табуляции в последней команде не работает, если пользователь без полномочий root не имеет доступа для чтения к каталогу. Таким образом, вы должны копировать пасту или печатать вручную. Интересно, кто-нибудь создал бы сценарий завершения sudo -using для Bash.

@ilkkachu: В этот момент я обычно просто sudo -s запускаю корневую оболочку в системах личного пользования (поэтому аудит не имеет большого значения). Я не хочу, чтобы автоматически сгенерированные команды выполнялись под sudo. (В лучшем случае загромождают журналы, в худшем — подвергают какой-то хакерски написанный код завершения вредоносным именам файлов с пробелами и еще хуже.)

@grawity: я имел в виду журналы безопасности системы, где sudo обычно регистрирует выполненные команды, включая время, имя пользователя, текущий рабочий каталог и т. д.

@PeterCordes, да.У меня возникло бы искушение просто chmod +r или поднять вопрос, следует ли сделать обычай, когда какая-то группа сотрудников имеет права на чтение для корневых каталогов, потому что завершение табуляции полезно. Да, код завершения должен быть тщательно написан (и я думаю, что некоторые из них не работают с забавными именами файлов), но я не думаю, что беспорядок должен быть проблемой, поскольку вы можете просто найти любые команды ls, которые не работают. ничего не делать, и какие люди все равно должны запускать под sudo, если у них нет разрешений на чтение в качестве их обычного UID.

Как вы заметили, cd — это встроенная команда оболочки, и на это есть причина: «текущий каталог» — это параметр для каждого процесса, который может быть изменен только самим процессом. .

Рабочий каталог вашей оболочки не может быть изменен ни одним дочерним процессом, поэтому, даже если вам удастся запустить cd в привилегированной подоболочке, он изменит только рабочий каталог этой временной подоболочки, и не имеет значения, какой метод поднятия привилегии, которыми вы пользуетесь.

Поэтому для работы sudo cd сама sudo должна быть встроенной оболочкой, и ей нужно каким-то образом повысить привилегии уже запущенного процесса. В настоящее время такого механизма нет в Linux (как и в большинстве других операционных систем).

Один из способов добиться желаемого – запустить интерактивную оболочку с привилегиями root (работает любой метод) и просто использовать в ней обычный компакт-диск:

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

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

Преимущество этого метода в том, что он не требует вложенных кавычек; вы можете запустить команду, состоящую из нескольких слов, без проблем с пробелами или специальными символами.

Наконец, некоторые программы имеют встроенную возможность смены рабочего каталога:

В Unix-подобных операционных системах команда cd ("изменить каталог") изменяет текущий рабочий каталог оболочки.

Эта страница посвящена встроенной в bash версии cd.

Описание

cd входит в число команд, которые вы чаще всего используете в командной строке. Он изменяет ваш рабочий каталог. Используйте его для перемещения по иерархии вашей файловой системы.

Синтаксис

Параметры

-L Принудительно переходить по символическим ссылкам. Другими словами, если вы указываете cd перейти в «каталог», который на самом деле является символической ссылкой на каталог, он перемещается в каталог, на который указывает символическая ссылка. Эта опция является поведением cd по умолчанию; обычно он всегда действует так, как если бы была указана опция -L.
-P Использовать физическую структуру каталогов без перехода по символическим ссылкам. Другими словами, переходите в указанный каталог только в том случае, если он действительно существует с указанным именем; символические ссылки не выполняются. Этот параметр противоположен параметру -L, и если они оба указаны, этот параметр игнорируется.
-e Если параметр -P указана опция, и текущий рабочий каталог не может быть определен, эта опция указывает cd выйти с ошибкой. Если с этой опцией не указано -P, эта опция не имеет функции.

Каталоги

Чтобы упростить организацию файлов, ваша файловая система содержит специальные файлы, называемые каталогами. Думайте о них как о папках в картотеке: у них есть имена, как и у файлов, но их функция состоит в том, чтобы «содержать» другие файлы и другие каталоги. Таким образом, вы можете хранить файлы в вашей системе отдельно и сортировать их по функциям или назначению.

Все файлы и каталоги в вашей системе происходят из одного основного каталога: корневого каталога. Нет каталогов «выше» корневого каталога; все остальные каталоги находятся «ниже» корневого каталога.

Любой каталог, находящийся внутри другого каталога, называется подкаталогом. Подкаталоги «ветвятся» от «корня» каталога «дерево». В отличие от настоящего дерева, деревья каталогов перевернуты: корень находится наверху, а ветви опускаются вниз. Когда вы перемещаетесь в подкаталог, вы перемещаетесь «вниз» по дереву; когда вы перемещаетесь в родительский каталог каталога, вы перемещаетесь «вверх» по дереву.

Все каталоги в вашей файловой системе являются подкаталогами корневого каталога.

По умолчанию, когда вы открываете терминал и начинаете использовать командную строку, вы попадаете в свой домашний каталог.

Как представлены каталоги

Каталоги разделяются косой чертой ("/"). Например, имя каталога «documents/work/accounting» означает «каталог с именем бухгалтерия, который находится в каталоге с именем работа, который находится в каталоге с именем документы, который находится в текущем каталоге».

Чтобы перейти в этот каталог и сделать его нашим рабочим каталогом, мы должны использовать команду:

Если первым символом имени каталога является косая черта, это означает, что путь к каталогу начинается с корневого каталога. Таким образом, в отличие от приведенного выше примера, имя каталога «/documents/work/accounting» (обратите внимание на косую черту в начале) означает «каталог с именем бухгалтерия, который находится в каталоге с именем работа, который находится в каталоге с именем документы, который находится в корневом каталоге."

Чтобы перейти в этот каталог, сделав его нашим рабочим каталогом, мы должны использовать команду:

Корневой каталог

Корневой каталог — это первый каталог в иерархии вашей файловой системы. Все остальные каталоги являются подкаталогами корневого каталога.

Корневой каталог обозначается косой чертой ("/").

Чтобы перейти в корневой каталог, сделав его рабочим каталогом, используйте команду:

Вы не можете вносить какие-либо изменения в корневой каталог вашей системы, если вы не вошли в систему как пользователь root или не используете команду sudo. Если вы не уверены в том, что делаете, не вносите здесь никаких изменений. Ошибка может разрушить вашу систему!

Рабочий каталог

Текущий каталог, независимо от того, какой это каталог, обозначается одной точкой (".").

Итак, запустив эту команду:

<р>. изменит нас в текущий каталог. Другими словами, это ничего не даст.

На самом деле точка представляет "предполагаемый" каталог; это заполнитель, и вы можете использовать точку в любом месте имени каталога. Итак, команда:

<р>. совпадает с командой:

<р>. а также то же, что и:

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

Родительский каталог

Родительский каталог текущего каталога — другими словами, каталог на один уровень выше текущего каталога, который содержит каталог, в котором мы сейчас находимся, — представлен двумя точками (""..").

Итак, если бы мы были в каталоге /home/username/documents и выполнили команду:

<р>. мы будем помещены в каталог /home/username.

Обозначение каталога с двумя точками ("..") можно использовать в любом месте имени каталога для обозначения перехода на один уровень вверх. Например, если у нас есть два каталога, /home/username/documents и /home/username/downloads, и мы в данный момент находимся в /home/username/documents, мы можем ввести следующее:

<р>. и мы будем помещены в /home/username/downloads.

Еще одна "бесполезная" команда, которая иллюстрирует, как вы можете использовать нотацию с двумя точками, это:

<р>. что поместит нас в каталог на один уровень выше подкаталога документов — другими словами, в текущий каталог. Обратите внимание, что это работает только в том случае, если документы в подкаталоге уже существуют.

Аналогично команда:

<р>. функционально аналогична этой команде:

Ваш домашний каталог

Ваш домашний каталог — это каталог, в который вы попадаете по умолчанию при открытии нового сеанса терминала. Это каталог, в котором хранятся все ваши настройки, ваша почта, ваши документы по умолчанию и папка для загрузок, а также другие личные элементы. У него есть специальное представление: тильда ("~").

Итак, если наше имя пользователя — это имя пользователя, а наш домашний каталог — /home/username, команда:

<р>. функционально то же самое, что и команда:

<р>. и мы всегда можем получить доступ к подкаталогам нашего домашнего каталога, поместив тильду в качестве первого компонента имени каталога. Например, если ваша папка с документами называется /home/username/documents, вы всегда можете перейти в этот каталог с помощью команды:

Предыдущий рабочий каталог

После смены каталога вы можете вернуться к предыдущему рабочему каталогу, обозначив его дефисом ("-"). Когда вы это сделаете, оболочка автоматически сообщит вам имя нового каталога.

Так, например:

Использование косой черты в конце

Использование косой черты в конце имени каталога необязательно. Каталоги рассматриваются как файлы, поэтому вам не нужно помещать их туда; но если вы поместите его туда, система точно знает, что вы ожидаете, что этот файл будет каталогом. Например, если в текущем каталоге есть подкаталог с именем имя_каталога, команда:

<р>. совпадает с командой:

Вторая форма команды явно указывает, что имя_каталога — это каталог, но обе команды эквивалентны.

Примеры

В приведенном выше примере рабочий каталог будет изменен на подкаталог Hope, если он существует.

В приведенном выше примере выполняется переход на один уровень вверх к родительскому каталогу, а затем вниз к каталогу computerhope.

Перейдите на два каталога вверх по дереву каталогов. Другими словами, перейдите в каталог, содержащий каталог, содержащий текущий рабочий каталог.

Связанные команды

pwd — вывести имя рабочего каталога.
ln — создать ссылку или символическую ссылку на файл или каталог.
mkdir — создать каталог.
rmdir — Удалить каталог.

Многие команды Linux, такие как команда ls, влияют на текущий рабочий каталог. Текущий рабочий каталог — это каталог, в котором работает окно терминала или командная строка.

Linux рассматривает каталог Home как рабочий каталог по умолчанию. Использование команды cd в Linux позволяет изменить текущий рабочий каталог.

В этом руководстве мы объясним синтаксис команды cd и покажем примеры ее использования.

  • Система с дистрибутивом Linux.
  • Учетная запись пользователя с правами sudo.
  • Доступ к окну терминала или командной строке.

Синтаксис команды компакт-диска Linux

Команда cd в Linux использует следующий синтаксис:

В приведенной выше команде:

  • cd : вызывает команду cd.
  • [options] : добавление параметров изменяет способ выполнения команды.
  • [каталог]: путь к каталогу, в который вы хотите перейти.

Например, чтобы перейти в каталог Рабочий стол, выполните:

Если команда выполняется успешно, текущая рабочая директория указывается в терминальном интерфейсе:

Если интерфейс терминала не указывает текущий рабочий каталог, с помощью команды pwd он отображается в качестве вывода:

Команда cd использует следующие параметры:

  • -L : Принудительно переходить по символическим ссылкам. Этот параметр включен по умолчанию.
  • -P : Не переходить по символическим ссылкам. Этот параметр разрешает символическую ссылку для определения родительского каталога перед переходом в запрошенный пользователем каталог.
  • -e : выйти с ненулевым статусом, если используется параметр -P и команда не может разрешить символическую ссылку.
  • [email protected]: представить файл с расширенными атрибутами как каталог, содержащий атрибуты файла.

Как использовать команду Linux CD

Команда Linux cd предлагает несколько способов навигации и изменения рабочего каталога с помощью окна терминала. Он позволяет изменять каталоги, используя относительные и абсолютные пути, переходить к родительским или корневым каталогам или находить каталоги с неполными именами.

Примечание. Команда cd является встроенной командой оболочки. Это означает, что его поведение немного различается между оболочками, поскольку он использует переменные среды оболочки. Узнайте больше в нашем руководстве по переменным среды в Linux.

Изменение каталога

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

Например, переход в Example_Directory, расположенный в Домашнем каталоге:

Изменить содержимое каталога и списка

Добавьте команду ls к команде cd, используя флаг &&, чтобы перейти в новый каталог и одновременно просмотреть его содержимое.

В предыдущем примере:

Примечание. Добавьте параметры команды ls, чтобы изменить способ отображения содержимого каталога.

Изменение каталога с использованием абсолютного пути

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

Изменение каталога с использованием относительного пути

Относительный путь — это путь к каталогу относительно текущего рабочего каталога. Относительный путь лучше всего использовать при переходе в подкаталог текущего рабочего каталога.

В приведенном выше примере каталог Загрузки является подкаталогом Главной. В этом случае относительный путь является результатом исключения пути к текущему каталогу из пути к новому рабочему каталогу:

Поскольку путь к текущему каталогу — /home/phoenixnap, исключение этой части абсолютного пути к каталогу загрузок (/home/phoenixnap/Downloads) приведет к по относительному пути (Загрузки).

Переход к предыдущему каталогу

Добавление символа тире (-) к команде cd возвращает оболочку в предыдущий рабочий каталог. Например, после перехода из Загрузки в Example_Directory вернитесь в Загрузки с помощью:

Переход в родительский каталог

Чтобы перейти к родительскому каталогу текущего каталога, добавьте два символа точки ( .. ) в команду cd.

Например, чтобы перейти из Example01 в его родительский каталог Example_Directory:

Переход к корневому каталогу

Добавьте символ косой черты ( / ) к команде cd, чтобы перейти в рабочий каталог системы:

Возвращение к домашнему каталогу

В Linux каталог Home представляет собой рабочий каталог по умолчанию. Использование команды cd без каких-либо параметров или изменения пути обратно в рабочий каталог по умолчанию:

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

Еще один способ сделать это — добавить символ тильды ( ~ ) к команде cd:

Переход к домашнему каталогу другого пользователя

Перейдите в Домашний каталог другого пользователя, добавив символ тильды ( ~ ) к соответствующему имени пользователя.

Например, переход в Домашний каталог пользователя с именем alex:

Переход в каталог с пробелами в имени

Если имя каталога содержит пробелы, измените его, заключив имя в одинарные кавычки ( ' ' ). Либо добавьте символ обратной косой черты ( \ ) к каждому слову в имени, кроме последнего:

Например, переход в каталог с именем Это каталог:

Автозаполнение имени каталога

Если вы не знаете имя каталога, в который пытаетесь перейти, терминал Linux предлагает функцию автозаполнения. После того, как вы начнете вводить название каталога, нажмите кнопку Tab на клавиатуре, чтобы получить предложения автозаполнения.

Например, если вы знаете, что имя каталога начинается с буквы X (например, XYZ), введите:

После прочтения этого руководства вы сможете использовать команду Linux cd для навигации и изменения текущего рабочего каталога в окне терминала.

Читайте также: