jueves, 10 de octubre de 2013

Viajando por los directorios con la terminal

El uso de la terminal es muchas veces muy útil para ejecutar comandos, o para abrir/editar archivos, cambiar permisos de archivos, etc y para ello es necesario saber como ir viajando a través de ella por el árbol de directorios de todo el sistema. Para ello debemos saber: a) si estamos en una terminal de usuario o en una con permisos de root b) como pasar de una con permisos de usuario a una con permisos de root c) saber la diferencia entre la dirección relativa y la dirección absoluta de un directorio d) comandos importantes que ayudan a viajar con la terminal por el árbol de directorios e) viajar desde la terminal por el árbol de directorios ( Puede ser interesante leer el tema Árbol de directorios) f) solucionar algunos errores a la hora de escribir la dirección de un directorio.

A) Saber si estamos en una terminal de usuario, o en una terminal de root:

Terminal con permisos de usuario: Cuando abrimos la terminal de usuario (El comando para abrir la terminal desde alt+f2 es: gnome-terminal) , la línea que siempre se abre en nuestra terminal se denomina prompt ; tiene el siguiente aspecto: nicasio@mint15:~$
Está compuesta por:
- nombre de usuario, en este ejemplo: nicasio
- símbolo @
- nombre del equipo, en este ejemplo: mint15
- dos puntos :
- símbolo ~ , que equivale a la propia carpeta personal del usuario en cuestión: en este ejemplo, /home/nicasio
( Si necesitamos escribir el símbolo ~ se obtiene con la combinación de teclas AltGr+4 )
- símbolo del dolar $

-- Desde el administrador de archivos ( tanto si usamos Nautilus o Nemo ) , estando en un directorio cualquiera, podemos con el botón derecho del ratón elegir la opción "abrir en la terminal", con lo que se abrirá la terminal, no en el directorio del usuario, sino en el directorio desde el que se seleccionó esa opción. Por ejemplo, si hacemos lo indicado desde el directorio ~/Musica en la terminal aparece el prompt: nicasio@mint15 ~/Musica $

Terminal con permisos de root: Si cambiamos a una terminal de root (como se indica mas abajo), en el prompt solo apareceran tres componentes:  mint15 ~#
Es decir solo aparecen:
- nombre del equipo: mint15,
- símbolo ~  que ahora equivale al directorio /root
- el símbolo $ cambiará a #


B) Como pasar de una terminal de usuario a una de root, y viceversa:

Pasar de una terminal con permisos de usuario a tener permisos de root: el comando que se tiene que escribir es: sudo -i
Al darle a la tecla intro la terminal pide la contraseña, la escribes, pero no se verá lo que escribes, ni asteriscos ni nada de nada, sin embargo está realmente escribiendo cuando termines de escribir la contraseña le das de nuevo a la tecla "intro" y si la contraseña es correcta verás que en el prompt el signo $ cambia a  # . Eso quiere decir que tienes privilegios de root.

Lo normal, es acceder a la terminal como root solo para hacer algo en concreto que requiera los permisos de root, y luego volver a la terminal con permisos de usuario, para cerrarla a continuación.

Pasar de una terminal con permisos de root a tener permisos de usuario: Es muy importante no cerrar la terminal como root, porque con este comando te quedas como root sin limite de tiempo, así que antes de cerrar la terminal debes escribir el comando  exit y darle a la tecla intro, verás entonces que en el prompt el signo # vuelve a convertirse en $, es decir hemos pasado de la terminal con permisos de root de nuevo a la terminal con permisos de usuario.

Aquí vemos lo que irá apareciendo en la terminal según vamos haciendo lo arriba indicado:  en verde se ve como se pasa de una terminal con permisos de usuario ( nicasio@mint15 ~ $ ) a una con permisos de root (mint15 ~# ) ; en azul se ve como se pasa de una terminal de root ( mint15 ~# ) a una de usuario ( nicasio@mint15 ~ $ ) .
nicasio@mint15 ~ $ sudo -i
[sudo] password for nicasio:
mint15 ~# exit
logout
nicasio@mint15 ~ $

C) Dirección relativa y absoluta de un directorio:

Para viajar por el árbol de directorios con la terminal debemos indicar la dirección en la que esta el directorio al que queremos llegar. Hay dos tipos de direcciones: la completa o absoluta, y la relativa.

- Dirección completa o absoluta: Las rutas absolutas se caracterizan por empezar siempre desde la raíz, es decir desde  /, y contener todos los directorios que hay desde la raíz hasta el directorio que queremos indicar, sólo es posible escribir de una forma una ruta absoluta. Se puede usar se este donde se este, tanto si abre la terminal desde el directorio del usuario, o si se abre desde cualquier otro, y con ella se puede llegar a cualquier directorio, tanto si es un subdirectorio de /home/usuario , como si es cualquier otro directorio, tanto si es un directorio o subdirectorio del disco duro interno en el que esta instalado el sistema, como si es de un pendrive, tarjeta de memoria, disco duro externo, etc que se montan en /media .
Otra cosa es que una vez que se esta en el directorio que deseamos, para ejecutar en él ciertos comandos, tendremos que o bien anteponer sudo delante del comando para que se ejecute con permisos de root, o bien ejecutar sudo -i para pasar a una terminal con permisos de root, como se explicó anteriormente..
Usar la dirección absoluta nunca falla, salvo que no se halla escrito correctamente, y para ello hay que tener en cuenta que cualquier sistema GNU / Linux distingue entre mayúsculas y minúsculas, y palabras con o sin acento. No es lo mismo musica, música, Música, o  Musica. Éste último es el nombre de un directorio de mi carpeta de usuario.

Ejemplos de direcciones absolutas son por ejemplo:
/home/nicasio/Musica/Beatles
/var/cache/apt/archives
/media/nicasio/mi_disco/fotos

- Dirección relativa: En cambio las rutas relativas nunca empiezan por la raiz  / y puede haber varias rutas relativas para el mismo directorio que queremos indicar. Esto es así por que la ruta relativa depende del directorio en el que se esté trabajando, ya que señalan la ubicación de un archivo o  directorio a partir de la posición actual en el árbol de directorios. Es una ruta que parte del directorio actual como origen. Esta ruta sólo es válida desde el directorio que en se esté en un momento concreto , es decir es relativa a ese directorio. Mas abajo se ven ejemplos de direcciones relativas.

Si abrimos la terminal en un directorio-a , desde el administrador de archivos, como se explico anteriormente, y el directorio-b al que queremos llegar es un subdirectorio del directorio-a, podemos usar la dirección relativa. Si el directorio-b no es un subdirectorio del directorio-a , deberemos usar la dirección absoluta.

D) Comandos que nos ayudan a viajar por el árbol de directorios: comandos: ls, pwd, whoami, cd

- Comando ls ( hacer un LiStado ) : desde la terminal el comando ls que te saca un listado con el nombre de los subdirectorios del directorio desde el que se ejecuta. Muy útil para saber que subdirectorios hay en el directorio en el que se está en ese momento en la terminal. Con el comando ls se nos muestra un listado de los subdirectorios y archivos que contiene el directorio; si solo queremos ver los subdirectorios usamos:  ls -d */
- Comando pwd (de las siglas en inglés print working directory = imprimir directorio de trabajo): nos indica el directorio en el que nos encontramos en la terminal; útil si nos hemos perdido y no sabemos donde estamos en el viaje a lo largo del árbol de directorios.
- Comando whoami ( who am I ? = ¿ quién soy yo ? ): nos indica el nombre de usuario
- Comando cd ( change directory = cambiar directorio ): sirve para cambiar de directorio; es el comando con el que propiamente hacemos el viaje por el árbol de directorios.


E) Viajar a través de la terminal por el árbol de directorios:

Estando en un directorio cualquiera podemos ir a otro mediante el comando cd, usando con la sintaxis: cd dirección_del_directorio , pudiéndose usar la dirección absoluta o la relativa.
Por ejemplo, si estamos en ~ y queremos ir al subdirectorio Musica, podemos escribir: cd Musica (dirección relativa ) o cd /home/nicasio/Musica (dirección absoluta )
Otro ejemplo, si estamos en el directorio /opt y queremos ir al mismo directorio, esta vez solo podremos hacerlo usando la dirección absoluta, ya que Musica no es un subdirectorio de /opt; escribimos por tanto: cd /home/nicasio/Musica
Si estamos en el directorio /opt y queremos ir al subdirectorio /opt/spotify/spotify-client/Icons, podemos usar la dirección absoluta: cd /opt/spotify/spotify-client/Icons , o la dirección relativa: cd spotify/spotify-client/Icons

Para volver desde un directorio cualquiera al directorio ~ ( carpeta personal del usuario ), basta con escribir el comando cd  , sin necesidad de añadir ninguna dirección.

F) Solucionar algunos errores a la hora de escribir la dirección de un directorio:

= Errores de ortografía: Hay que tener en cuenta que cualquier sistema GNU / Linux distingue entre mayúsculas y minúsculas, y palabras con o sin acento. No es lo mismo musica, música, Música, o  Musica. Éste último es el nombre de un directorio de mi carpeta de usuario.

= Para ir a un directorio con nombre de dos o mas palabras separadas por un espacio vacio, por ejemplo /home/usuario/mis fotos ( este tipo de directorio suele ser uno creado por nosotros mismos como un subdirectorio de la carpeta de usuario ), si intentamos entrar en él con: cd mis fotos , no deja ya que sale este error: bash: cd: mis: No existe el archivo o el directorio ( osea en realidad el comando cd ha buscado y no encontrado el directorio correspondiente a la primera palabra del directorio, en este caso: mis ).

Hay tres formas de solucionar este asunto.
-- Usar comillas: Poniendo cd nombre del directorio entre comillas: con  cd "mis fotos" si que se entra en el directorio.
nicasio@mint15 ~ $ cd "mis fotos"
nicasio@mint15 ~/mis fotos $
-- Autocompletar el nombre: Otro método es poner el comando cd, luego la primera palabra del nombre del directorio, y a continuación y antes de pulsar la tecla enter, pulsar la tecla tab, para que se autocomplete la sentencia;  de forma que en el ejemplo quedaría:
nicasio@mint15 ~ $ cd mis\ fotos/   Ahora pulsamos enter y entramos ya en el directorio
nicasio@mint15 ~/mis fotos $
-- Cambiar el nombre: otra forma de solucionar el asunto es obviamente cambiar el nombre del directorio de forma que no contenga espacios vacíos, por ejemplo en vez de mis fotos, llamarlo mis_fotos, mis-fotos, o misfotos

= Para comprobar que los nombres de las carpetas predeterminadas de tu usuario son las habituales, hazlo con la siguiente línea de comandos en la terminal:
gedit /home/tu_usuario/.config/user-dirs.dirs
Editando ese archivo puedes modificarlas a tu gusto. Podría darse el caso de que un directorio, por ejemplo el directorio Escritorio no se llame así, sino Desktop, porque por algún motivo esté en inglés, en cuyo caso no lo encontrarías con el comando habitual: cd Escritorio, sino con: cd Desktop .
Este es mi archivo /home/nicasio/.config/user-dirs.dirs ( en color turquesa la parte del archivo que podemos editar )

# This file is written by xdg-user-dirs-update
# If you want to change or add directories, just edit the line you're
# interested in. All local changes will be retained on the next run
# Format is XDG_xxx_DIR="$HOME/yyy", where yyy is a shell-escaped
# homedir-relative path, or XDG_xxx_DIR="/yyy", where /yyy is an
# absolute path. No other format is supported.
#
XDG_DESKTOP_DIR="$HOME/Escritorio"
XDG_DOWNLOAD_DIR="$HOME/Descargas"
XDG_TEMPLATES_DIR="$HOME/Plantillas"
XDG_PUBLICSHARE_DIR="$HOME/Publico"
XDG_DOCUMENTS_DIR="$HOME/Documentos"
XDG_MUSIC_DIR="$HOME/Musica"
XDG_PICTURES_DIR="$HOME/Imagenes"
XDG_VIDEOS_DIR="$HOME/Videos"

El nombre de los directorios de la carpeta de usuario aparecen en color turquesa  tras "$HOME/  , y al escribirlos en la terminal no hay que ponerlos con comillas: Escritorio, Descargas, Plantillas, Publico, Documentos, Musica, Imagenes, Videos

Si se ha modificado el archivo ~.config/user-dirs.dirs , para que los cambios tengan lugar, además de guardar los cambios en el archivo y cerrar éste, se debe salir de la sesión gráfica y volver a entrar en ella.

---------------------------------
Editado/Añadido:

Por defecto al ejecutar la terminal se inicia en el directorio /home/usuario:
usuario@mint17 ~ $

Si por algún motivo queremos que siempre se inicie desde otro subdirectorio de /home/usuario, por ejemplo en /home/usuario/Musica , añadimos la siguiente linea:
cd Musica ( ruta relativa ) al archivo /home/usuario/.bashrc , guardamos los cambios realizados en el archivo, y la próxima vez que iniciemos la terminal nos aparecerá:
usuario@mint17 ~/Musica $

Si lo que queremos es que la terminal siempre se inicie desde un directorio que no sea subdirectorio de /home/usuario, hay que poner la ruta completa hacia ese directorio, por ejemplo cd /var/cache/apt/archives, y lo que nos saldrá al ejecutar la terminal será:
nicasio@mint17 /var/cache/apt/archives $

2 comentarios:

A la vez que haces un comentario, por favor da una puntuación al tema: malo, normal, bueno o muy bueno.
Gracias.