Bash

Observa esta escena:

Cuando en el cine alguien tiene grandes conocimientos de informática, aparece frente a una línea de comandos. En concreto en GNU/Linux, se puede utilizar bash. Esta pequeña referencia nos mostrará algunos comandos que se pueden ejecutar en bash.

La terminal

Una terminal es una interfaz de texto que permite introducir comandos para realizar una o más acciones mediante comandos. Básicamente un comando es una orden que le damos a GNU/Linux para que haga algo.

El aspecto basado en fondo negro y letras verdes que presentan las terminales en el cine, proviene de los tiempos en que los monitores de fósforo verde dominaban el mercado, incluidos juegos. Si no, comprueba lo que teníamos que aguantar cuando teníamos vuestra edad los que teníamos el iPad del momento (un Amstrad CPC464):

Abrir una terminal

Abrir una terminal en Gnome es muy fácil. Basta con hacer clic en Aplicaciones\Accesorios\Terminal

Una vez que abrimos la terminal, podemos empezar a jugar. Juguemos.

Jugar con la terminal

Una vez que abrimos la terminal, lo primero que podemos hacer es conocer algunas combinaciones de teclas. Por ejemplo, prueba las siguientes combinaciones de teclas:

Mayus+Ctrl+N

Mayus+Ctrl+T

Mayus+Ctrl+W

Mayus+Ctrl+Q

Ctrl++

Ctrl+-

Ctrl+0

F11

Mayus+Ctrl+F

Otro aspecto interesante de bash es el autocompletado de comandos. Bash autocompleta un comando o el nombre de un archivo al pulsar el tabulador. Para comprobarlo escribe en la terminal la cadena de texto cd Escr y pulsa el tabulador.

$ cd Esc (pulsamos el tabulador) $ cd Escritorio

Vamos a poner en la línea de comandos los colores que tenía Trinity en la escena del principio. Para ello, debemos ir a menú Editar->Preferencias del perfil. Como verás, en el diálogo correspondiente hay varias pestañas: céntrate en la pestaña Colores y Fondo. En ellas puedes cambiar el color de la letra y el fondo. Averigua la forma de conseguir la siguiente terminal con fondo transparente:

Algunos comandos

Vamos a conocer algunos comandos:

LS

Ofrece un listado del contenido del directorio (carpeta) en que nos encontramos.

Para entender el comando ls vamos a explicar como es el sistema de archivos en GNU/Linux.

El sistema de archivos de GNU/Linux, al igual que el de Windows, tiene una estructura parecida a la de un árbol:

Observa la imagen img01.png¿Cuál es la ruta absoluta a dicho archivo?

La respuesta es: /home/sue/Pictures/Hawaii/img01.png

Supon ahora que estás en la carpeta sue. ¿Cuál es la ruta relativa a img01.png

La respuesta es: Pictures/Hawaii/img01.png

Para entender mejor el sistema de archivos de GNU/Linux, vamos a leer la siguiente página: El sistema de archivos de GNU/Linux

Ahora ejecuta los comandos que están detrás del símbolo $

$ ls $ ls . $ ls /home/usuario/ $ ls ~ $ ls /home/usuario/Documentos/ $ ls ./Documentos/ $ ls ~/Documentos/

Con los comandos anteriores quería enseñarte que:

  • El comando ls sin nada más, enseña lo que hay en la carpeta en la que estamos.
  • El símbolo . significa "aquí" (es decir, la carpeta en la que estoy ahora mismo)
  • Poner una "ruta" de una carpeta (como /home/usuario/) detrás de ls, muestra el contenido de dicha carpeta.
  • El símbolo ~ representa el "home" del usuario. Por ejemplo, si entraste como usuario, entonces el símbolo ~ representa la carpeta /home/usuario.

Vamos a hablar sobre los otros comandos. ¿Qué crees que hacen?

PWD

Nos indica el directorio en que nos encontramos.

Cuando abres la terminal siempre estás en tu carpeta persona. Por ejemplo, si entraste como usuario tu carpeta personal es /home/usuario.

Prueba con los siguientes comandos:

$ pwd $ cd /home/ $ pwd $ cd /home/usuario/Documentos/ $ pwd $ cd /tmp $ pwd $ cd $ pwd

Lo que ha ocurrido es lo siguiente:

  • El primer comando pwd, me ha mostrado donde estoy en un principio: /home/usuario.
  • El segundo comando cd /home, nos mueve hasta la carpeta /home.
  • El tercer comando pwd, vuelve a mostrar donde estamos, ahora en /home.

Hablemos sobre los restantes comandos.

cp

El comando cp permite copiar un archivo en otro lugar. Vamos a hacer lo siguiente:

$ cd $ touch probando.txt $ ls $ cp probando.txt Documentos $ ls $ ls Documentos

Con los comandos anteriores hemos hecho lo siguiente:

  • Primero, con el comando cd nos hemos situado en nuestra carpeta home.
  • Con el comando touch probando.txt hemos creado un archivo llamado probando.txt.
  • Después ejecutamos ls para comprobar que el archivo probando.txt ha sido creado y está ahí.
  • Con el comando cp probando.txt Documentos estamos copiando el archivo hasta la carpeta Documentos
  • El comando ls nos muestra que el archivo probando.txt sigue estando ahí.
  • Finalmente, el comando ls Documentos nos muestra que el archivo también está en la carpeta Documentos, gracias a la copia que hemos hecho.

Espero que haya quedado claro el comando cp.

cd

Nos permite movernos de un directorio a otro. De hecho, lo llevamos usando un rato. ¿Alguna duda sobre cd?

rm

Nos permite borrar un archivo o un directorio. Si has hecho el ejemplo del comando cp, ahora tienes un archivo llamado probando.txt en tu carpeta home y en tu carpeta Documentos. Vamos a borrar el archivo que está en tu carpeta home. Para ello, sigue las siguientes instrucciones:

$ cd $ ls $ rm probando.txt $ ls $ ls Documentos

Lo que hemos hecho es lo siguiente:

  • El primer comando cd, nos lleva a nuestra carpeta home
  • El segundo comando ls, nos enseña los archivos que hay donde estamos (es decir, nuestra carpeta home), donde debe estar el archivo probando.txt
  • El tercer comando rm probando.txt borra el archivo probando.txt.
  • El cuarto comando ls nos muestra que el archivo probando.txt ya no está.
  • Finalmente, el comando ls Documentos nos muestra que el archivo probando.txt sigue estando en la carpeta Documentos.

mv

Nos permite mover un archivo de un directorio a otro. Antes hemos conocido el comando cp, que podía copiar un archivo en otro sitio. El comando mv es similar, pero borra el archivo copiado de su origen. Vamos a verlo con un ejemplo:

$ cd $ touch probando2.txt $ ls $ mv probando2.txt Documentos $ ls $ ls Documentos

Lo que hemos hecho ha sido lo siguiente:

  • El primer comando cd nos devuelve a nuestra carpeta home
  • El segundo comando touch probando2.txt crea un archivo llamado probando2.txt.
  • El tercer comando ls nos muestra el contenido de nuestra carpeta home. Allí debería estar probando2.txt
  • El cuarto comando mv probando2.txt Documentos mueve el comando probando2.txt a la carpeta Documentos.
  • El quinto comando ls nos muestra el contenido de la carpeta donde estamos (nuestra carpeta home). Podemos comprobar que el archivo probando2.txt no está.
  • El sexto comando ls Documentos nos muestra el contenido de la carpeta Documentos, donde SÍ debería estar el archivo probando2.txt.

Otros comandos de interés

Los comandos comentados anteriormente, son una guía muy básica de supervivencia en una terminal. Con ellos, no nos quedaremos mirando la pantalla con cara estupefacta, y podremos hacer muchas tareas. Sin embargo, GNU es muy grande, y contiene muchos comandos diferentes. Algunos comandos más de uso común son:

  • whoami: indica quién es el usuario de la sesión actual.
  • who: indica que usuarios han iniciado sesión en el sistema.
  • su nombreUsuario: permite cambiar al usuario "nombreUsuario". Cuando se ejecuta en la forma su -, cambia a superusuario.
  • cat nombreArchivo: vuelca el contenido de un archivo por pantalla.
  • chmod permisos archivo: permite cambiar los permisos de acceso a un archivo.
  • chown usuario.usuario archivo: permite cambiar el propietario de un archivo.
  • useradd -m nombreUsuario: añade un nuevo usuario llamado "nombreUsuario" y crea su carpeta personal en "/home/nombreUsuario".
  • usermod: permite modificar un usuario.
  • userdel usuario: elimina un usuario.
  • passwd nombreUsuario: cambia la contraseña al usuario "nombreUsuario"
  • vi: editor de textos muy básico.
  • vim: editor de textos mejorado.
  • nano: editor de textos de manejo intuitivo.
  • find ruta -iname "*.jpg": bucar dentro de la ruta todos los archivos que tengan extensión "jpg".
  • locate nombreArchivo: indicar la ruta del archivo "nombreArchivo". Más rápido que find, pero depende de una base de datos que debe ser actualizad mediante el comando updatedb
  • touch nombreArchivo: permite crear un archivo vacío llamado "nombreArchivo"
  • man comando: muestra un manual de comando

Cualquier programa

Cualquier programa que podamos ejecutar desde el entorno gráfico, puede ser ejecutado desde la terminal. Por ejemplo, vamos a probar los siguientes comandos:

$ gnomine $ lowriter $ firefox http://www.meneame.net $ gedit

El sistema de archivos de GNU/Linux

Todo el Linux es tratado como un archivo. Tanto el Software como el Hardware. Es decir, que cuando queramos interactuar directamente con un dispositivo, tendremos que conocer el archivo con que GNU/Linux lo denomina. El sistema de archivos de GNU/Linux está organizado siguiendo un estándar llamado FHS (File Hierarchy System) que detalla los nombres, ubicaciones, contenidos y permisos de los archivos y directorios, es decir, un conjunto de reglas que especifican una distribución común de los directorios y archivos en sistemas Linux.

Organización de sistema de archivos según FHS

  • El directorio raíz ( / ): El contenido de este directorio debe ser el adecuado para reiniciar, restaurar, recuperar y/o reparar el sistema, es decir, debe proporcionar métodos, herramientas y utilidades necesarias para cumplir estas especificaciones.
  • /bin: En este directorio se ubica el código binario o compilado de los programas y comandos que pueden utilizar todos los usuarios del sistema.
  • /boot: Este directorio contiene todo lo necesario para que funcione el proceso de arranque del sistema.
  • /dev: Este directorio almacena las definiciones de todos los dispositivos. Como se ha mencionado, cada dispositivo tiene asociado un archivo especial.
  • /etc: El directorio /etc contiene archivos necesarios para configuración del sistema. Archivos que son propios del ordenador y que se utilizan para controlar el funcionamiento diversos programas. Deben ser ficheros estáticos y nunca pueden ser archivos binarios y/o ejecutables.
  • /home: Directorio que contiene los subdirectorios que son directorios origen para cada uno de los usuarios del sistema.
  • /lib: El directorio /lib contiene librerías compartidas necesarias para arrancar el sistema y para los ficheros ejecutables contenidos.
  • /media: Este directorio contiene los subdirectorios que se utilizan como puntos del montaje para los medios de almacenamiento, tales como disquetes, CD-ROM y memorias USB.
  • /opt: En este directorio (/opt de options, u opciones en castellano) se suelen instalar complementos o add-ons de los programas.
  • /proc: Es un directorio virtual, donde se crean dinámicamente archivos relacionados con el estado del sistema. Algunos archivos importantes de este directorio son meminfo y cpuinfo. Además, hay archivos que modifican el estado del sistema al cambiar su contenido, como /proc/sys/net/ipv4/ip_forward.
  • /root: Este directorio es el directorio /home del administrador del sistema (root).
  • /sbin: Los programas y comandos que se utilizan para la administración del sistema se almacenan en /sbin, /usr/sbin y /usr/local/sbin. /sbin únicamente contiene los ejecutables esenciales para el arranque, recuperación y reparación del sistema.
  • /srv: Contiene los archivos de datos específicos para cada servicio instalado en el sistema.
  • /tmp: En este directorio se guardan los archivos temporales.
  • /usr: Este directorio está pensado para almacenar datos que se puedan compartir con otros hosts.
  • /usr/bin: Éste es el directorio primario de comandos ejecutables del sistema. /usr/bin alberga los archivos ejecutables vinculados al software instalado en el sistema.
  • /usr/lib: Este directorio incluye librerías compartidas y ficheros binarios pensados para no ser ejecutados directamente por los usuarios del sistema.
  • Accede al directorio /var/log/ empleando el comando cd. Después, visualiza el contenido del archivo syslog mediante el comando cat

    Realiza los apartados que se piden a continuación

    1. Crea el usuario perico en su sistema. Con el grupo principal alumno, y con el directorio personal en /home/perico.
    2. Crea el grupo mantenimiento y haz que perico pertenezca a dicho grupo
    3. Crea en el directorio home de perico un fichero oculto con el nombre que quieras y con la extensión ".leeme", dentro de este fichero ponga una palabra, cualquiera.
    4. Cambia los permisos del fichero anterior para que sólo sea legible por el root.
    5. Abre el archivo con vi, y escribe lo siguiente:
    6. #!/bin/bash echo "Eres $(whoami) en $(hostname)."
    7. Añade permisos de ejeución al archivo, y ejecútalo.