На этот вопрос уже есть ответ здесь:
Я хочу посмотреть исходный код команды cd
, но cd
не имеет собственного пакета, так в каком пакете он находится?
Узнайте то, что вводит команду, использует type
команда.
$ type cd
cd is a shell builtin
$ type ls
ls is aliased to `ls --color=auto'
$ type cat
cat is /bin/cat
Вы видите, cd
встроенная оболочка.
Это означает, это - часть Вашей оболочки, которая является Bash по умолчанию. Это - конечно, также пакет программного обеспечения, в котором это содержится.
Для установленных команд, которые не являются оболочкой builtins, но исполняемыми файлами, использовать dpkg -S
узнать пакет:
$ dpkg -S $(which cat)
coreutils: /bin/cat
Для получения справки для созданного в командах используйте help
команда (который также встроен):
$ help cd
cd: cd [-L|[-P [-e]] [-@]] [dir]
Change the shell working directory.
[... output shortened ...]
cd
обязательно встроенная оболочка. Если бы оболочка породила дочерний процесс, который изменил рабочий каталог и затем вышел, то родительский процесс (сама оболочка) не был бы затронут.
относительно исходного кода cd
, все, что это должно сделать, звонить chdir(2)
, который изменяет рабочий каталог процесса. См. chdir по opengroup.org, который указывает:
chdir () функция должна заставить каталог, названный путем, на который указывает параметр пути становиться текущим рабочим каталогом; то есть, начальная точка для пути ищет пути, не начинающиеся '/'.
Право, поэтому как все записали, cd
, встроено в любую оболочку, которую Вы используете, потому что процесс не может влиять на рабочий каталог своего родителя. cd
имеет несколько дополнительных свойств, прикрепляемых на (я имею в виду pushd
и друзья, cd
без аргумента, и т.д.), но если Вы позаботитесь рыть через источник, то Вы будете не приведены в восторг: главное состоит в том что cd
вызовы chdir(2)
системный вызов.
нет очень для наблюдения, потому что в отличие от, скажем, переменной среды как HOME
, "рабочий каталог" является примитивной системой: это - один из атрибутов, которые каждый процесс имеет, как (реальный) идентификатор пользователя или приоритет планирования. Это - начальная точка когда вводные файлы с относительными путями.
Вот является страница справочника для CD, но этого не официальной с тех пор cd
часть "Shell Встроенные Команды". Точно так же, как некоторые другие команды...
alias, bg, bind, break, builtin, command, compgen, complete,
continue, declare, dirs, disown, echo, enable, eval, exec, exit,
export, fc, fg, getopts, hash, help, history, jobs, kill, let, local,
logout, popd, printf, pushd, pwd, read, readonly, return, set, shift,
shopt, source, suspend, test, times, trap, type, typeset, ulimit,
umask, unalias, unset, wait
См. страницу справочника для удара. Из ссылки cd
состояния:
CD [-L |-P] [dir]
Измените текущий каталог на dir. Переменная ДОМОЙ является dir по умолчанию. Переменный CDPATH определяет путь поиска для каталога, содержащего dir. Альтернативные имена каталогов в CDPATH разделяются двоеточием (:). Пустое имя каталога в CDPATH совпадает с текущим каталогом, т.е. ''. ''. Если dir начинается с наклонной черты (/), то CDPATH не используется.-P опция говорит для использования физической структуры каталогов вместо того, чтобы перейти по символьным ссылкам (см. также-P опцию к набору встроенная команда);-L опция вынуждает символьные ссылки сопровождаться. Аргумент - эквивалентен $OLDPWD. Если непустое имя каталога от CDPATH используется, или если - первый аргумент, и изменение каталога успешно, абсолютный путь нового рабочего каталога записан в стандартный вывод. Возвращаемое значение верно, если каталог был успешно изменен; ложь иначе.
В котором пакет является командой 'CD'?
Это было бы ударом
Фактический исходный код cd
для
builtins/cd.def
в конце файлаsh.dir.c
как функция dochngd
c_ksh.c
прямо наверху файлаsrc/cmd/ksh93/bltins/cd_pwd.c
Sys-вызов chdir
для
fs/open.c
Это могло бы быть знаменито, что sys-вызовы все еще не являются концом цепочки, которая снизилась бы на отдельном уровне файловой системы.