El directorio de trabajo es aquel que utiliza un proceso como referencia para las rutas relativas. Es decir, es el directorio donde se encuentra "situado" un proceso. Cada proceso en un sistema operativo puede estar trabajando en un directorio de trabajo diferente (valga la redundancia). De esta forma, se trata de un atributo independiente por proceso. Veamos cómo se utilizan con los comandos pwd y cd para modificar el directorio de trabajo actual, junto con algunos usos especiales.

La herramienta pwd (print working directory) permite imprimir el directorio de trabajo del proceso (shell) actual. Esta información se obtiene directamente desde el proceso mismo, y se puede verificar a través del directorio cwd (current working directory) en el pseudo-sistema de archivos proc:

root@debian:/boot# pwd
/boot
root@debian:/boot# ls -ld /proc/$(echo $$)/cwd
lrwxrwxrwx 1 root root 0 feb 14 08:43 /proc/16431/cwd -> /boot

Aquí se observa que la shell que estamos utilizando posee el PID (process ID) 16431, y el directorio de trabajo actual (cwd) del proceso es /boot. Lo cual coincide con la salida de pwd, tal como era de esperarse.

El comando cd es un comando incluido (builtin, comando implementado por la propia shell en lugar de por un programa aparte) en las shells de los sistemas operativos de la familia Unix, el cual permite cambiar el directorio de trabajo actual (directorio en el cual estamos situados). El uso típico consiste en ejecutar cd pasando como parámetro una ruta relativa o absoluta hacia el directorio donde se desee situar:

emi@hal9000:~ % cd /etc && pwd
/etc
emi@hal9000:/etc % cd ssh && pwd
/etc/ssh

En este ejemplo se hace un cambio de directorio pasando como parámetro una ruta absoluta (cd /etc), seguido de otro pasando una ruta relativa al directorio actual (cd ssh). Cabe recordar que las rutas absolutas son aquellas que comienzan con barra (/), lo cual indica que se realiza la búsqueda desde la raíz.

A continuación, veamos algunos usos especiales del comando cd.

cd, cd ~ y cd $HOME

La forma más rápida para dirigirse al directorio home consiste en ejecutar cd sin parámetros:

emi@hal9000:/tmp % pwd && cd && pwd
/tmp
/usr/home/emi

Notar que el directorio home del usuario no es /usr/home/emi sino /home/emi:

emi@hal9000:~ % cat /etc/passwd | grep emi
emi:*:1001:0:Emiliano:/home/emi:/bin/tcsh
emi@hal9000:~ % echo $HOME
/home/emi

Ocurre que en los sistemas FreeBSD, /home es un enlace simbólico:

emi@hal9000:~ % ls -ld /home
lrwxr-xr-x  1 root  wheel  8 Nov 21  2014 /home -> usr/home

cd ~ y cd $HOME son equivalentes, ya que tanto tilde (~) como la variable de entorno $HOME representan al directorio de inicio del usuario.

cd . y cd ..

En los sistemas operativos de la familia Unix, los identificadores . y .. representan el directorio actual y el directorio padre respectivamente.

Por ende, el comando cd . no sirve para mucho:

emi@hal9000:~ % pwd
/usr/home/emi
emi@hal9000:~ % cd .
emi@hal9000:~ % pwd
/usr/home/emi

Sin embargo cd .. nos lleva al directorio superior o padre. En el siguiente ejemplo se cambia desde el directorio /usr/home/emi a /usr/home:

emi@hal9000:~ % pwd
/usr/home/emi
emi@hal9000:~ % cd ..
emi@hal9000:/home % pwd
/usr/home

Es posible subir varios directorios en un solo comando anidando dos puntos (padre del padre del padre...):

emi@hal9000:/usr/local/libexec/gimp % pwd && cd ../../.. && pwd
/usr/local/libexec/gimp
/usr

cd -

El comando cd - se utiliza para volver al directorio anterior (no al directorio padre). Este comando es muy útil y funciona como la acción "volver" en un navegador de Internet. Sin embargo, lamentablemente se mantiene una única entrada en el historial de directorios por los que se ha navegado, debido a que esta información se almacena en una única variable de entorno. En Bash se obtiene desde la variable de entorno OLDPWD, mientras que en tcsh corresponde con la variable de entorno owd.

Ejemplo de uso:

emi@hal9000:~ % cd /tmp
emi@hal9000:/tmp % pwd
/tmp
emi@hal9000:/tmp % cd /usr/local/etc/
emi@hal9000:/usr/local/etc % pwd
/usr/local/etc
emi@hal9000:/usr/local/etc % cd -
emi@hal9000:/tmp % pwd
/tmp
emi@hal9000:/tmp % cd -
emi@hal9000:/usr/local/etc % pwd
/usr/local/etc

cd -p (sólo en la shell tcsh)

Permite visualizar el directorio físico resultante luego de cambiar de directorio:

emi@hal9000:~ % cd -p /etc
/etc 
emi@hal9000:/etc % cd -p ssl
/etc/ssl

Códigos de retorno de cd

Como es de esperarse, cd retorna 0 en caso de éxito o 1 en caso de error (el directorio pasado como parámetro no existe, o no se tienen permisos de acceso al mismo):

emi@hal9000:~ % cd /etc
emi@hal9000:/etc % echo $?
0
emi@hal9000:/etc % cd /xyz
/xyz: No such file or directory.
emi@hal9000:/etc % echo $?
1
emi@hal9000:/etc % cd /root/.ssh
/root/.ssh: Permission denied.
emi@hal9000:/etc % echo $?
1

Para más información, revisar las páginas de manual en las referencias.

Referencias


Tal vez pueda interesarte


Compartí este artículo