Blog
Son muchas las maneras de interactuar con un sistema operativo y obviamente lo más común es utilizar la interfaz gráfica, sin embargo resulta conveniente también aprender a manejar la línea de comando. Por eso en Unipython hemos escrito para ti una breve introducción a Linux y Bash. Veamos,
Un poco de historia sobre Linux
En los años 80, el investigador del MIT Richard Stallman, creó un sistema operativo abierto y libre llamado GNU basado en Unix. Por la misma época, Linus Torwald, un estudiante finlandés, creó un sistema operativo llamado Linux. Con el tiempo, los dos proyectos se fusionaron bajo el nuevo nombre GNU/Linux, mejor conocido como Linux. Sobre esta base, se crearon algunas distribuciones (también llamadas “distros”) de GNU/Linux:
- Debian
- Red Hat
- CentO
- …
Se puede pensar en ellas como sabores de Linux. Además, la gente ha creado distribuciones de distribuciones: Una de las más utilizadas es Ubuntu, basada en Debian. Es sin duda la distribución más fácil de utilizar.
Gracias a una gran comunidad de usuarios y colaboradores, Ubuntu se actualiza con frecuencia y está muy bien documentada. Es sin duda la más fácil de usar viniendo de un SO (Sistema Operativo) diferente. Para esta Introducción a Linux y Bash vamos a utilizar Ubuntu 18.04.
Estructura de archivos en Ubuntu
Los datos en un sistema Linux se distribuyen en una estructura de árbol. Así, si una carpeta carpeta1 contiene dos subcarpetas subcarpeta1 y subcarpeta2, la estructura de estas carpetas puede representarse de la siguiente manera:
carpeta1 - subcarpeta1 - subcarpeta2
Si la subcarpeta1 de la carpeta1 contiene dos archivos (archivo1 y archivo2), entonces se verá algo así.
carpeta1 - subcarpeta1 - - archivo1 - - archivo2 - subcarpeta2
En la raíz de esta estructura de árbol, podemos encontrar el símbolo /: todas las carpetas y archivos son hijos de esta raíz.
En la carpeta / (llamada simplemente raíz), podemos encontrar las siguientes carpetas:
- /bin: archivos binarios esenciales (shell Bash, manipulación de archivos, …)
- /boot: archivos necesarios para arrancar el sistema
- /cdrom: carpeta temporal para CD-ROM
- /dev: archivos especiales para un conjunto de herramientas (consola, stdout, …)
- /etc: ficheros de configuración del sistema de ficheros
- /home: datos del usuario
- /lib: archivos de biblioteca para ejecutar archivos binarios en /bin y /sbin
- /lost+found: archivos dañados tras un fallo del sistema
- /media: carpetas temporales externas (llave USB, …)
- /mnt: directorios montados
- /opt: ficheros que no respetan la estructura normal del sistema
- /proc: archivos que contienen información del sistema
- /root: carpeta de inicio del usuario root
- /run: ficheros temporales que no deben ser eliminados
- /sbin: archivos binarios utilizados por el usuario root
- /srv: archivos utilizados por los proveedores de servicios (aplicación web, …)
- /tmp: archivos temporales que se pueden eliminar
- /usr: aplicación de usuario (dividida en /bin, /lib, …)
- /var: archivos de registro
Primeros comandos
Puede que estés acostumbrado a Windows o MacOs que vienen empaquetados con una interfaz gráfica. En Linux, no siempre es el caso, pero podemos utilizar el terminal para realizar algunas consultas.
Para ejecutar todos los comandos solo debes abrir un terminal y conectarte a tu máquina virtual mediante SSH:
Te aparecerá la siguiente información
- username: nombre de usuario actual
- @: un separador
- nombre_de_la_máquina: el nombre del ordenador/máquina virtual que estás usando.
- :: un separador
- ~ : directorio de trabajo actual
- $: un separador
Ten en cuenta que el $ corresponde a un usuario normal. Si es un usuario root (usuario administrador), se sustituye por #.
Por defecto, un terminal se abre en el directorio /home/nombredeusuario, que tiene el símbolo ~ cuando se conecta como nombredeusuario. Para comprobar dónde se encuentra, puedes utilizar pwd, que significa directorio de trabajo de impresión.
pwd
Tu máquina virtual devolverá esto:
/home/ubuntu
Para listar el contenido de un directorio, podemos utilizar ls:
ls
Ahora mismo la carpeta está vacía.
También podemos mostrar el contenido de otra carpeta, utilizando la ruta a esa carpeta como argumento. Así, si queremos mostrar el contenido del directorio /, podemos hacer:
ls /
Deberías ver las carpetas mencionadas anteriormente.
Para ver el contenido de la carpeta /usr/bin, ejecuta el siguiente comando:
ls /usr/bin
En estos dos ejemplos, hemos utilizado la ruta absoluta, es decir, la ruta desde el directorio raíz / hasta el archivo o directorio que nos interesa.
ls también puede tomar algunos argumentos predefinidos:
- -a: para listar todos los archivos incluyendo los ocultos
- -l: para mostrar información sobre archivos y carpetas
- -R: para listar archivos recursivamente
- -h: para mostrar el tamaño de los archivos de forma legible para el ser humano
- …
También puede visualizar los comandos disponibles y su documentación mediante el comando:
Ejecuta este comando para mostrar la función help
ls --help
Muchas herramientas contienen esta opción –help. No dudes en utilizarla siempre que quieras obtener más información sobre un comando. También podemos usar “man” para mostrar la ayuda. Entonces puedes desplazarte por la ayuda y salir de ella tecleando q.
Lee el manual para este comando
man ls
Enumera los archivos de la carpeta ~:
ls -a
Ahora deberíamos ver dos cosas:
. ..
Estas dos entidades representan la carpeta actual y la carpeta padre. Así, . es una representación de /home/ubuntu y .. es una representación de /home. Esto nos permite utilizar la ruta relativa para indicar un archivo o carpeta. Podemos utilizar la ruta absoluta desde la raíz / o la ruta relativa desde la carpeta en la que nos encontremos. Por ejemplo, como estamos en /home/ubuntu, podemos listar el contenido de la carpeta padre /home usando .
Ejecuta el siguiente comando para mostrar el contenido de la carpeta padre:
ls .
Incluso podemos mostrar el contenido de la carpeta /usr/bin utilizando ..
Ejecuta este comando para mostrar el contenido de esta carpeta:
ls ../../usr/bin
Aquí, estamos buscando la carpeta padre de la carpeta padre de la carpeta actual, es decir, la carpeta usr y luego la carpeta bin. Las rutas absolutas y relativas casi siempre se pueden utilizar de la misma manera. Ahora que sabemos cómo encontrar nuestro camino desde la carpeta actual, vamos a aprender cómo movernos desde la carpeta actual. Para ello, utilizaremos el comando cd, que significa cambiar directorio.
Desplázate a la raíz del sistema utilizando el siguiente comando:
cd /
Comprueba que estamos en la raíz utilizando el comando pwd:
- Mover a la carpeta /usr/bin. Se pueden utilizar varios comandos.
- Lista los archivos disponibles en esta carpeta.
Ten en cuenta también que puedes volver a la carpeta de inicio del usuario, es decir, /home/ubuntu en nuestro caso, simplemente utilizando cd o cd ~.
Volver a la carpeta de inicio.
Variables de entorno
Las variables de entorno son una forma de influir en el comportamiento del software de tu sistema. Por ejemplo, la variable de entorno LANG determina el idioma que utiliza el software para comunicarse con el usuario.
Las variables consisten en nombres a los que se asignan valores.
Crear una variable de entorno
La sintaxis para crear una variable de entorno es el siguiente comando Bash:
export NAME=VALUE
Utilizando este método, la variable se creará en la sesión actual. Si tu máquina virtual se detiene, tu variable de entorno no será persistente. Para hacer que las variables sean persistentes, necesitarás modificar el archivo .bashrc. Hablaremos más sobre este archivo en una entrada posterior.
Crea una variable de entorno llamada DATASCIENTEST con el valor nombre.apellido.
El valor de la variable también puede recuperarse utilizando el signo $ delante de su nombre, como en el siguiente ejemplo:
echo $DATASCIENTEST
También tenemos el comando printenv, que muestra los nombres y valores de todas las variables de entorno definidas.
Muestra todas las variables con este comando.
Verás que se muestran muchas variables (por cierto, verás que nuestra variable DATASCIENTEST está en la lista). El significado de una variable de entorno y el tipo de valor que se le puede asignar vienen determinados por la aplicación que la utiliza. Hay un pequeño número de variables de entorno bien conocidas, cuyo significado y tipo de valor están bien determinados, y que son utilizadas por muchas aplicaciones:
PATH`: Al escribir un comando, el sistema lo busca en las carpetas especificadas por la variable PATH, en el orden en que se indican.
USER`: Es el nombre del usuario conectado en ese momento. Esta variable está definida por el sistema.
PWD: Es el directorio de trabajo actual del intérprete de comandos.
HOME: Es la ubicación del directorio personal del usuario actualmente conectado.
Gracias a algunas de estas variables se mantiene la integridad de la arquitectura del sistema. Por ejemplo, cuando ejecutamos el comando pwd, simplemente imprimimos la variable de entorno PWD. Cuando cambiamos nuestro directorio actual, simplemente cambiamos el valor de PWD.
Borrar una variable
El comando unset se puede utilizar para eliminar completamente una variable de entorno:
unset DATASCIENTEST
Archivo .bashrc
El archivo .bashrc es un archivo de configuración utilizado por el shell Bash, que es un intérprete de comandos utilizado principalmente en sistemas operativos de tipo Unix, como Linux y macOS. Es específico para cada usuario y se encuentra en el directorio home.
La función principal del archivo .bashrc es definir variables de entorno, alias y funciones personalizadas para el intérprete de comandos Bash. Cuando un usuario abre una sesión de terminal, el archivo .bashrc se ejecuta automáticamente para cargar estas configuraciones personalizadas.
Es importante tener en cuenta que los cambios realizados en el archivo .bashrc sólo surten efecto cuando se abre una nueva sesión de terminal o se ejecuta el comando “source ~/.bashrc” para volver a cargar las configuraciones.
Este archivo es muy importante, y cualquier modificación de su contenido original puede causar problemas de ejecución o visualización. Te aconsejamos que tengas cuidado al manipular este archivo.
Esto nos ha dado una idea de cómo funciona Linux y de las principales funciones que debemos conocer para navegar por él.