La línea de comandos

Cinco mil comandos, pero con veinte te las arreglas

Marco González Luengo

Tabla de contenidos
  1. Terminal, consola y shell
  2. Anatomía de un comando
  3. Moverse por los directorios
  4. Dos teclas que te ahorran la vida
  5. Cómo pedir ayuda
  6. Comandos de todos los días
  7. Archivos y directorios
  8. Ver el contenido de un archivo
  9. Buscar
  10. Saber cosas del sistema
  11. Archivos ocultos
  12. Atajos propios: alias
  13. Editores de texto
  14. Ejercicios

La línea de comandos provoca rechazo al principio: una pantalla negra que espera que escribas algo. Con la práctica pasa a ser la forma más rápida de hacer casi cualquier cosa, y en un servidor, muchas veces, la única.

Terminal, consola y shell

Tres palabras que se usan como sinónimos, pero no lo son:

Cuando abres una terminal, lo primero que ves es el prompt:

noquierouser@oilers:~$

Usuario, @, nombre del equipo, :, directorio actual (~ es tu carpeta personal) y $. Si en vez de $ aparece #, estás como root: cuidado.

Anatomía de un comando

ls -l -a /etc

¿Y cómo sabe la shell dónde está el programa ls? Lo busca en los directorios listados en la variable PATH. Puedes ver dónde lo encontró con which:

which ls
/usr/bin/ls

Moverse por los directorios

Comando Qué hace
pwd Muestra en qué directorio estás (print working directory)
ls Lista el contenido del directorio
cd /etc Entra al directorio /etc
cd .. Sube un nivel
cd o cd ~ Vuelve a tu carpeta personal
cd - Vuelve al directorio donde estabas antes

Una ruta puede ser:

Dos teclas que te ahorran la vida

Y dos más: Ctrl + C interrumpe el programa que está corriendo, y Ctrl + L limpia la pantalla.

Cómo pedir ayuda

Nadie se sabe los miles de comandos que existen, ni todas las opciones de cada uno. Lo que sí hay que saber es dónde buscar:

Forma Para qué sirve
ls --help Ayuda rápida: la lista de opciones
man ls El manual completo. Se navega con las flechas, /palabra busca y q sale
man -k palabra o apropos palabra Busca comandos relacionados con un tema
whatis ls Una línea que dice qué hace el comando
info ls Documentación más extensa, en los programas de GNU
tldr Ejemplos prácticos y cortos, hechos por la comunidad

Los manuales también están en línea, por ejemplo en man7.org.

Comandos de todos los días

Archivos y directorios

mkdir proyectos           # crea un directorio
mkdir -p a/b/c            # crea toda la ruta de una vez
touch notas.txt           # crea un archivo vacío
cp notas.txt copia.txt    # copia un archivo
cp -r proyectos respaldo  # copia un directorio completo
mv copia.txt viejo.txt    # mueve o renombra
rm viejo.txt              # borra un archivo
rm -r respaldo            # borra un directorio y todo su contenido

rm no tiene papelera: lo borrado, borrado está. Con rm -i pregunta antes de cada archivo.

Ver el contenido de un archivo

cat archivo       # vuelca todo el contenido
less archivo      # lo muestra paginado
head archivo      # las primeras 10 líneas
tail archivo      # las últimas 10 líneas
tail -f archivo   # las últimas, y se queda mostrando lo nuevo

Buscar

find /etc -name "*.conf"    # busca archivos por nombre
grep root /etc/passwd       # busca líneas que contengan "root"

Saber cosas del sistema

whoami     # quién soy
w          # quién está conectado y qué hace
uptime     # hace cuánto está prendido el equipo
uname -a   # versión del kernel
hostname   # nombre del equipo

Archivos ocultos

En Linux, un archivo o directorio cuyo nombre empieza con un punto es oculto: ls no lo muestra a menos que se lo pidas con -a. Así se esconden, sobre todo, archivos de configuración como .bashrc.

ls -a ~

Atajos propios: alias

Un alias le da un nombre corto a un comando largo:

alias ll='ls -la'
ll

Escribir alias solo muestra los que ya existen. Un alias creado así dura hasta que cierras la terminal. Para que sea permanente, se agrega esa misma línea al final de ~/.bashrc.

Editores de texto

Tarde o temprano vas a editar un archivo de configuración desde la terminal. Estos son los editores más comunes, y lo mínimo para sobrevivir:

Editor Guardar Salir
nano Ctrl + O, Enter Ctrl + X
vim Esc, :w, Enter Esc, :q, Enter (:wq guarda y sale; :q! sale sin guardar)
emacs Ctrl + X, Ctrl + S Ctrl + X, Ctrl + C

Si no conoces ninguno, parte con nano: los atajos aparecen en la parte de abajo de la pantalla. Y si caíste en vim sin querer, respira: Esc, :q!, Enter.

Ejercicios

¿Qué opción de ls muestra los permisos, el dueño, el grupo, el tamaño y la fecha de cada archivo?

ls -l: muestra el listado en formato largo, una línea por archivo con todos esos datos. Qué significa cada columna se ve en Usuarios y permisos.

¿Qué hace ls -la? ¿Qué son los archivos de la forma .nombre-archivo?

ls -la combina dos opciones: -l para el formato largo y -a (de all) para mostrar todos los archivos, incluidos los ocultos.

Los archivos, directorios o enlaces cuyo nombre empieza con punto, como .nombre-archivo, son ocultos. Además, siempre aparecen dos entradas especiales: . (el directorio actual) y .. (el directorio de arriba).

¿Qué hacen pwd, cd .. y cd -?
  • pwd (print working directory) muestra la ruta absoluta del directorio donde estás.
  • cd .. sube al directorio padre.
  • cd - vuelve al directorio donde estabas antes del último cd.
Nombra todas las formas en que podrías obtener ayuda sobre un comando, por ejemplo, xzibit.
  • xzibit --help o xzibit -h, si el programa lo soporta.
  • man xzibit.
  • info xzibit.
  • whatis xzibit, para una descripción de una línea.
  • apropos xzibit o man -k xzibit, para buscar temas relacionados.
  • tldr xzibit, para ejemplos rápidos.
  • Buscarlo en internet, idealmente en la documentación oficial o en man7.org.

(Yo dawg, xzibit no existe. Pero si existiera, así pedirías ayuda.)

¿Por qué para eliminar un directorio con rm hay que agregar -r?

Porque un directorio contiene otros archivos y directorios, y rm no borra un directorio con contenido. La opción -r (recursivo) hace que entre a cada subdirectorio, borre su contenido y después borre el directorio. Funciona sin importar cuántos niveles de profundidad haya.

Existe también rmdir, que solo borra directorios vacíos: una forma segura de no llevarse nada por delante.

¿Qué hace alias? ¿Qué pasa si lo ejecutas sin nada más?

alias asocia un nombre corto a un comando más largo, por ejemplo alias ll='ls -la'. Sin argumentos, muestra todos los alias definidos en la sesión actual (varias distribuciones traen algunos configurados, como ll o ls --color).

cat, more y less muestran el contenido de un archivo. ¿En qué se diferencian?
  • cat vuelca todo el contenido de una vez. Es ideal para archivos cortos o para mandar el contenido a otro comando, pero con un archivo largo el texto pasa volando y solo ves el final.
  • more muestra el archivo página por página, avanzando hacia abajo.
  • less también pagina, pero permite moverse en cualquier dirección, buscar con /palabra y no necesita leer el archivo completo antes de mostrarlo.

Para leer un archivo largo, less es el más completo (de ahí el chiste: less is more).

¿Cómo mostrarías en pantalla el contenido del archivo /etc/os-release?

Con cualquiera de estos:

cat /etc/os-release
less /etc/os-release
more /etc/os-release

Por cierto, ese archivo dice qué distribución y versión estás usando.

En tu editor preferido, ¿cómo guardas los cambios y sales?

Depende del editor:

  • nano: Ctrl + O y Enter para guardar; Ctrl + X para salir.
  • vim: Esc y :w para guardar; :q para salir; :wq hace las dos cosas.
  • emacs: Ctrl + X, Ctrl + S para guardar; Ctrl + X, Ctrl + C para salir.

Sigue con Redirección y tuberías.