где находится `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 ). Более сложные и менее используемые команды реализованы в отдельных исполняемых файлах, чтобы уменьшить сложность интерпретатора команд и потребление памяти, которые затем являются внешними командами.

  • Различия FHS между OS X, Linux и FreeBSD
  • Являются ли {/ bin, / lib, / sbin} символическими ссылками в / usr в Ubuntu?
  • Является ли стандартом иерархии файловой системы стандартом UNIX или стандартом GNU / Linux?
  • (размер блока) / dev, / etc, / proc, / home, объяснение?
  • Иерархия файлов Linux - лучшее место для хранения файлов lockfiles?
  • Где безопасно размещать файлы, необходимые PHP в файловой системе Linux (согласно FHS)
  • Перемещение в FHS 3: Как перезаписать переменные каталога GNU Autotools?
  • Почему я должен хранить домашние каталоги в / var / home?
  • Логика по пути двоичной установки Postgres на Debian
  • Неправильно / опасно / неуместно помещать произвольные резервные копии в / var / backups?
  • «Чистая» иерархия файловой системы
  • Interesting Posts

    Сортировка файла с целым числом в круглых скобках без пробела

    Добавление сто тысяч слов в словарь проверки правописания на Fedora 24

    Файловая система внезапно доступна только для чтения?

    Как выбрать опцию из меню выбора из сценария?

    Как проверить, открыт или заблокирован какой-либо порт на других серверах из dev?

    Установка Debian говорит: «CD_ROM, похоже, не содержит действительного« Release »файла» при установке с usb

    установка модулей после компиляции ядра?

    tar без опции -f при извлечении

    RHEL 5 Загрузка из локального жесткого диска и жесткого диска SAN через grub

    Невозможно получить данные DBUS для автоматического изменения состояния pidgin

    Как проверить, установлена ​​ли моя графическая карта на Linux?

    Отключить запуск MySQL в Linux

    Двойной загрузочный Debian на рейде 0 в режиме UEFI

    Применить команду между разными именами каталогов

    Amazon EC2: предоставление постоянных разрешений в Sepecific Directory в Amazon Linux AMI

    Linux и Unix - лучшая ОС в мире.