¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Scripts pequeños y paquetes de software

Después de esta lección: Puedo escribir y ejecutar un script de shell pequeño, y decir de qué paquete viene un programa.

Lección de 55 min13 comandosLaboratorio de comandos de Linux de cada día: los treinta comandos que se escriben de memoria

El informe que escribías cada lunes

Una tienda te manda cada semana un archivo con las visitas. Cada lunes escribes las mismas tres órdenes para ver qué día fue el más movido.

Un lunes te equivocas al escribirlas y mandas el día equivocado a tu responsable.

Quien trabaja bien escribe la tarea una vez, la guarda en un archivo y ejecuta el archivo.

Al final de esta lección

Nota

Puedo escribir y ejecutar un script de shell pequeño, y decir de qué paquete viene un programa.

Palabras clave

PalabraQué significaEjemplo
Scriptórdenes guardadas en un archivo, para ejecutarlas otra vez
Shebangla primera línea de un script, que dice qué programa lo lee#!/bin/bash
Argumentouna palabra que escribes tras una orden y que la orden puede usar$1
Código de salidaun número que deja una orden: 0 quiere decir que fue bien$?
Paqueteun programa y sus archivos, reunidos para que el sistema lo instale
Gestor de paquetesla herramienta que instala, actualiza y quita paquetesapt

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Una tubería responde a una pregunta

El laboratorio guarda un archivo pequeño de visitas en /srv/lab-web/report.csv. Cada línea trae un día, una coma y una cifra. El archivo está en inglés.

cut -d, -f1 se queda con la primera columna. -d, dice que las columnas se separan con comas. tail -n +2 salta la línea del título. sort -t, -k2 -n -r ordena por la segunda columna, como números, de mayor a menor. head -n 1 se queda con la primera línea.

Saca la primera columna

Comando
cut -d, -f1 /srv/lab-web/report.csv

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Encuentra el día más movido

Comando
tail -n +2 /srv/lab-web/report.csv | sort -t, -k2 -n -r | head -n 1

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Un error frecuente

Advertencia

Mucha gente cree que sort ordena los números por tamaño. Por defecto ordena como texto: 98 va después de 175, porque 9 va después de 1. Sin -n, la tubería de arriba imprime Tuesday,98. Añade -n siempre que la columna sean números.

Un script son órdenes en un archivo

Un script es un archivo de texto con órdenes. La shell las ejecuta de arriba abajo, como si las escribieras tú.

La primera línea es el shebang. Dice qué programa lee el archivo. Una línea que empieza por # es un comentario, y la shell la salta.

Dentro de un script, $1 es la primera palabra que escribes tras su nombre. Así el script sirve para cualquier archivo.

Escribe el script en un archivo

Comando
printf '#!/bin/bash\n# Muestra el día más movido de un archivo CSV.\ntail -n +2 "$1" | sort -t, -k2 -n -r | head -n 1\n' > busiest.sh

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Intenta ejecutarlo

Comando
./busiest.sh /srv/lab-web/report.csv

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Pide a bash que lo lea

Comando
bash busiest.sh /srv/lab-web/report.csv

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Permite que se ejecute

Comando
chmod +x busiest.sh

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Ejecútalo

Comando
./busiest.sh /srv/lab-web/report.csv

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Cada orden deja un código de salida

Cuando una orden termina, deja un número. 0 quiere decir que fue bien. Cualquier otro número avisa de un problema.

$? guarda el número que dejó la última orden. Los scripts y cron lo usan para saber si un trabajo salió bien.

Una orden que falla

Comando
ls /nothere ; echo "codigo $?"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

El script que funciona

Comando
./busiest.sh /srv/lab-web/report.csv ; echo "codigo $?"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Otro error frecuente

Advertencia

Mucha gente cree que un archivo que cat muestra también se ejecutará. Leer y ejecutar son permisos distintos. Un archivo nuevo no tiene la x para nadie. Escribe antes chmod +x, o pide a bash que lo lea.

El software llega en paquetes

En Ubuntu un programa llega como un paquete. El gestor de paquetes guarda la lista de lo instalado y de qué paquete es cada archivo.

dpkg lee esa lista. apt instala desde internet y necesita sudo. Con -s, apt-get install solo simula, así que se puede probar sin riesgo.

¿Dónde está el programa?

Comando
command -v curl

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

¿Qué paquete es dueño de ese archivo?

Comando
dpkg -S /usr/bin/curl

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

¿Está instalado el paquete?

Comando
dpkg -s curl | grep -E "^(Package|Status)"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Simula instalarlo otra vez

Comando
apt-get install -s curl 2>&1 | tail -n 3

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Ejemplo: los verbos de apt

EscribesQué hace¿Necesita sudo?
sudo apt updateRenueva la lista de lo que se puede instalarSí
sudo apt install htopInstala un paquete y lo que necesitaSí
sudo apt remove htopQuita el paqueteSí
apt-get install -s htopMuestra qué haría una instalación, sin cambiar nadaNo
dpkg -S /usr/bin/curlDice qué paquete es dueño de un archivoNo

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Para ir más lejos

Escríbelo tú, sin botones. Cambia el script para que imprima el día más tranquilo. ¿Qué opción quitas o añades?

Después busca la hora de cron que ejecutaría busiest.sh a las 07:30 cada lunes. En un servidor pondrías esa línea en /etc/cron.d, con el usuario antes de la orden.

Sobre este laboratorio y su código: Laboratorio de comandos de Linux de cada día: los treinta comandos que se escriben de memoria

¿Enseñas a una clase? Asigna este módulo a tus alumnos con guía del profesor, tareas con corrección automática y un laboratorio para cada alumno.