it-swarm-es.tech

¿En qué paquete está el comando 'cd'?

Quiero ver el código fuente detrás del comando cd, pero cd no parece tener su propio paquete, ¿en qué paquete está?

21
user364819

Descubra qué tipo de comando está usando el comando type.

$ type cd
cd is a Shell builtin
$ type ls
ls is aliased to `ls --color=auto'
$ type cat
cat is /bin/cat

Puede ver, cd es un Shell incorporado.

Esto significa que es una parte de su Shell que por defecto es Bash. Por supuesto, ese también es el paquete de software que contiene.

Para comandos instalados que no son archivos integrados de Shell sino archivos ejecutables, use dpkg -S para averiguar el paquete:

$ dpkg -S $(which cat)
coreutils: /bin/cat

Para obtener ayuda sobre los comandos integrados, use el comando help (que también está integrado):

$ help cd
cd: cd [-L|[-P [-e]] [[email protected]]] [dir]
    Change the Shell working directory.

[... output shortened ...]
55
Byte Commander

cd es necesariamente un Shell incorporado. Si el Shell generó un proceso hijo que cambió el directorio de trabajo y luego salió, el proceso padre (el Shell en sí) no se vería afectado.

En cuanto al código fuente de cd, todo lo que necesita hacer es llamar a chdir(2), que cambia el directorio de trabajo del proceso. Ver chdir en opengroup.org que dice:

La función chdir () hará que el directorio nombrado por el nombre de ruta señalado por el argumento de ruta se convierta en el directorio de trabajo actual; es decir, el punto de partida para la ruta busca nombres de ruta que no comiencen con '/'.

24
Tim B

Aquí hay un página de manual para cd pero no es oficial ya que cd es parte de los "Comandos de Shell Builtin". Al igual que algunos otros comandos ...

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 

Consulte la página del manual para bash . Desde el enlace cd dice:

cd [-L | -P] [dir]

Cambiar el directorio actual a dir. La variable HOME es el directorio predeterminado. La variable CDPATH define la ruta de búsqueda para el directorio que contiene el directorio. Los nombres de directorio alternativos en CDPATH están separados por dos puntos (:). Un nombre de directorio nulo en CDPATH es el mismo que el directorio actual, es decir, ''. ''. Si dir comienza con una barra inclinada (/), entonces CDPATH no se usa. La opción -P dice que use la estructura de directorio físico en lugar de seguir enlaces simbólicos (vea también la opción -P para el comando incorporado set); la opción -L obliga a seguir enlaces simbólicos. Un argumento de - es equivalente a $ OLDPWD. Si se usa un nombre de directorio no vacío de CDPATH, o si - es el primer argumento, y el cambio de directorio es exitoso, el nombre de ruta absoluto del nuevo directorio de trabajo se escribe en la salida estándar. El valor de retorno es verdadero si el directorio se cambió con éxito; falso de lo contrario.

¿En qué paquete está el comando 'cd'?

Eso sería bash

18
Rinzwind

El código fuente real de cd es para

  • Bash en builtins/cd.def al final del archivo
  • TCSH en sh.dir.c como la función dochngd
  • PDKSH (Korn Shell de dominio público que se encuentra en algunos BSD) en c_ksh.c justo en la parte superior del archivo
  • Korn 9 (Korn Shell original, versión anterior) en src/cmd/ksh93/bltins/cd_pwd.c

El sys-call chdir para

  • kernel de Linux está en fs/open.c
  • FreeBSD es donde el enlace al comienzo de este elemento apunta a
  • otros sistemas operativos tipo BSD y OpenSolaris funcionan bastante similar

Cabe señalar que las llamadas al sistema todavía no son el final de la cadena, eso sería inactivo en el nivel del sistema de archivos individual.

5
deamentiaemundi

Correcto, como todos han escrito, cd está integrado en cualquier Shell que uses, porque un proceso no puede afectar el directorio de trabajo de su padre. cd tiene algunas campanas y silbatos añadidos (quiero decir pushd y amigos, cd sin un argumento, etc.), pero si te tomas la molestia de Cavar a través de la fuente estarás decepcionado: lo principal es que cd llama al chdir(2) llamada al sistema.

No hay mucho que ver porque, a diferencia de, por ejemplo, una variable de entorno como HOME, el "directorio de trabajo" es un sistema primitivo: es uno de los atributos que tiene cada proceso, como la identificación de usuario (real) o la prioridad de programación. Es el punto de partida al abrir archivos con rutas relativas.

3
alexis