где находится `cd`?

В подчиненной оболочке bash я получаю следующую ошибку при запуске cd

sudo: cd: command not found 

Это ожидается, потому что у меня нет пути. Обычно, чтобы обойти это, я просто предоставляю полный путь следующим образом: (/ usr / local / bin / foo)

К моему большому удивлению, cd , похоже, не в каком-либо обычном месте.

 which cd whereis cd ls /bin | grep cd 

Для сравнения, ls прав, где я ожидал бы.

 which ls /bin/ls 

Где находится команда cd ? И почему это отличается от всех остальных команд?

Обновить

Еще один интересный лакомый кусочек, компакт-диск не отображается в hash

 hash 0 /bin/ls 2 /usr/bin/find 2 /sbin/ip 1 /usr/bin/updatedb 1 /usr/bin/apt-get 

6 Solutions collect form web for “где находится `cd`?”

Какой CD я использую?

Если вы находитесь в Bash cd , это встроенный. Команда типа даже подтверждает это:

 $ type -a cd cd is a shell builtin cd is /usr/bin/cd cd is /bin/cd 

Система будет использовать первую вещь в этом списке, поэтому встроенный будет предпочтительным вариантом и единственным, который работает (см. Раздел ниже « Что такое / bin / cd» ).

Что такое встроенный?

Мне нравится думать о встроенных функциях, которые Баш знает, как делать сам. В основном все, что вы используете много, было перенесено в ядро ​​Bash, так что ему не нужно каждый раз выполнять процесс.

Вы всегда можете явно указать Bash, что хотите встроить, используя builtin команду:

 $ builtin cd 

См. builtin о builtin :

 $ help builtin 

Почему нет хеша в хеше?

Хэш предназначен только для «хэш» (иначе «сохранить» в паре ключей / значений) расположения файлов, а не для встроенных или ключевых слов. Основная задача hash заключается в том, чтобы сэкономить на том, чтобы каждый раз проходить через $PATH поиске часто используемых исполняемых файлов.

Ключевые слова?

Обычно это команды, которые являются частью функций языка программирования Bash.

 $ type while while is a shell keyword $ type for for is a shell keyword $ type ! ! is a shell keyword 

Некоторые вещи реализуются несколькими способами, такими как [ :

 $ type -a [ [ is a shell builtin [ is /usr/bin/[ [ is /bin/[ 

… и cd как вы обнаружили.

Что такое / bin / cd?

В моей системе Fedora 19 /bin/cd на самом деле есть сценарий оболочки:

 $ more /bin/cd #!/bin/sh builtin cd "$@" 

Но он не делает то, что вы думаете. Для получения дополнительной информации см. Эти другие вопросы и ответы U & L:

  • В чем смысл внешней команды `cd`?
  • « Почему я не могу перенаправить имя пути из одной команды в« cd »?

Нижняя линия:

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

Это встроенный. См. man bash для деталей cd и Bash Manual для описания встроенных функций:

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

type и whereis может показать вам, что, например

Для grep:

 $ type grep grep is /bin/grep 

Для chown:

 $ whereis chown chown: /bin/chown /usr/share/man/man2/chown.2.gz /usr/share/man/man1/chown.1.gz 

locate также может быть полезен для отображения связанных файлов на основе поиска подстановочных знаков, например, для команды chown:

 $ locate chown /bin/chown /home/durrantm/.rvm/gems/ruby-1.9.3-p194/doc/rubyzip-0.9.8/ri/Zip/ZipFileSystem/ZipFsFile/chown-i.ri /usr/lib/pt_chown /usr/share/man/man2/fchown32.2.gz /usr/share/man/man2/fchownat.2.gz /usr/share/man/man2/lchown.2.gz /usr/share/man/man2/lchown32.2.gz /usr/share/zsh/functions/Completion/Unix/_chown 

Наконец, когда результат состоит в том, что команда «встроена», как вы видели для cd это означает, что код для нее фактически находится в основной программе bash, а не в другой программе, расположенной в другом месте на диске.

cd – встроенная функция для оболочек, например. bash, csh, ksh.

Существует множество встроенных функций поддержки оболочек, вы можете проверить их с помощью команды man bash .

cd – встроенная функция оболочки, как уже упоминалось в других документах:

 $ type cd cd is a shell builtin 

Это связано с тем, что процесс не может изменить рабочий каталог другого процесса, не используя ptrace() (который, например, использует gdb ). Это было бы лишними накладными расходами. Кроме того, его использование ограничено некоторыми дистрибутивами, такими как Ubuntu.

Точно так же, как внутренние и внешние команды DOS. Простые команды реализованы в оболочке (чаще всего command.com ). Более сложные и менее используемые команды реализованы в отдельных исполняемых файлах, чтобы уменьшить сложность интерпретатора команд и потребление памяти, которые затем являются внешними командами.

  • Разница между каталогами / opt / bin и / opt / X / bin
  • Почему мой пакет был установлен в / opt?
  • Как началась функция ~ / .local / bin? Насколько распространено это?
  • Есть ли у Symbian ссылки по умолчанию?
  • Стандартные и / или общие каталоги в операционных системах Unix / Linux
  • На пользовательские каталоги tmpfs
  • Разница между / bin и / usr / bin
  • В какой момент появился / домашний каталог?
  • Как добавить новые элементы в PATH для демонов (или других лучших практик)?
  • В чем разница между / tmp и / var / tmp?
  • Где должны быть созданы сгенерированные скрипты в файловой системе?
  • Linux и Unix - лучшая ОС в мире.