Saltar al contenido
sudoquest@root
Linux

La terminal y los archivos

Moverte por un servidor Linux sin escritorio: dónde estás, cómo se organizan los archivos y cómo crearlos, copiarlos, borrarlos y encontrarlos.

20 min de lectura

Casi todos los servidores del mundo funcionan con Linux, y casi ninguno tiene escritorio: ni ventanas, ni ratón, ni iconos. Se manejan desde una terminal, escribiendo órdenes. Parece antiguo, pero es la forma más rápida y precisa de trabajar con una máquina que está en otra sala (o en otro país): te conectas por SSH, escribes lo que quieres que haga y te contesta con texto.

En este tema aprendes lo primero que hace cualquier técnico al entrar en un servidor: saber dónde está, moverse, y crear, copiar, mover, borrar y buscar archivos. Cada sección tiene un ejercicio con una terminal de verdad (simulada, pero con las mismas órdenes y las mismas respuestas que un Ubuntu Server): lo que escribas ahí, pasa.

El prompt: quién, dónde y qué

Al entrar, la terminal te espera con una línea como esta, el prompt:

tecnico@srv-ficheros:~$ 

Te dice tres cosas: quién eres (tecnico), en qué máquina (srv-ficheros) y dónde estás (~, que significa “tu carpeta personal”). El $ del final indica que eres un usuario normal; si fueras el administrador, root, sería un #.

Detrás del prompt escribes una orden, y casi todas siguen la misma forma:

tecnico@srv-ficheros:~$ ls -l /var/log
  • ls es el programa que quieres ejecutar (listar).
  • -l es una opción: cambia cómo lo hace (formato largo). Las opciones cortas llevan un guion y se pueden juntar: ls -l -a es lo mismo que ls -la.
  • /var/log es el argumento: sobre qué lo hace. Si no pones ninguno, ls lista la carpeta en la que estás.

Linux distingue mayúsculas y minúsculas: Documentos y documentos son dos carpetas distintas, y LS no es una orden.

¿Dónde estoy? pwd y ls

pwd (print working directory) dice en qué carpeta estás, con su ruta completa:

tecnico@srv-ficheros:~$ pwd
/home/tecnico

ls (list) enseña lo que hay dentro. En la terminal, cada tipo sale de un color: las carpetas en azul, los programas en verde, los enlaces en cian.

tecnico@srv-ficheros:~$ ls
Descargas  Documentos  Imagenes

Con -l (long), una línea por archivo con todos sus datos:

tecnico@srv-ficheros:~$ ls -l
total 12
drwxr-xr-x 2 tecnico tecnico 4096 Sep 28 09:30 Descargas
drwxr-xr-x 2 tecnico tecnico 4096 Sep 28 09:30 Documentos
drwxr-xr-x 2 tecnico tecnico 4096 Sep 28 09:30 Imagenes

De izquierda a derecha: el tipo (d es un directorio, - un archivo, l un enlace) y los permisos (rwxr-xr-x, los verás en el tema 3), el número de enlaces, el dueño y el grupo, el tamaño en bytes, la fecha de la última modificación y el nombre.

Los archivos cuyo nombre empieza por punto son ocultos: ls no los enseña salvo que se lo pidas con -a (all). Suelen ser configuración, como .bashrc:

tecnico@srv-ficheros:~$ ls -a
.  ..  .bash_logout  .bashrc  .profile  Descargas  Documentos  Imagenes

Ejercicio

¿Dónde estoy?

Acabas de entrar por SSH en el servidor de ficheros. Antes de tocar nada, mira dónde estás y qué hay.

Preparando la máquina…

El árbol de directorios

En Linux no hay C: ni D:. Todo cuelga de un único directorio, la raíz, que se escribe /. Dentro están siempre las mismas carpetas, en cualquier Linux:

Carpeta Qué hay
/home las carpetas personales: la tuya es /home/tecnico
/root la carpeta personal del administrador
/etc la configuración del sistema y de los servicios
/var/log los registros (logs): lo que va pasando en la máquina
/tmp archivos temporales: se vacía al reiniciar
/usr/bin los programas (ls, cp… son archivos de aquí)
/srv los datos que sirve el servidor (en este, las carpetas compartidas)

Hay dos formas de escribir una ruta:

  • Absoluta: empieza por / y describe el camino desde la raíz. /var/log/syslog significa lo mismo estés donde estés.
  • Relativa: no empieza por / y se cuenta desde donde estás. Si estás en /home/tecnico, Documentos/pendientes.txt es /home/tecnico/Documentos/pendientes.txt.

Y tres atajos que se usan a todas horas: . es la carpeta en la que estás, .. la de arriba y ~ tu carpeta personal.

ls enseña una carpeta; tree enseña todo lo que cuelga de ella, de un vistazo:

tecnico@srv-ficheros:~$ tree /srv/compartido
/srv/compartido
├── LEEME.txt
├── contabilidad
│   └── facturas-septiembre.ods
├── direccion
├── diseno
│   └── logo.svg
└── ventas
  └── clientes.csv

4 directories, 4 files

Con -L 1 se queda en el primer nivel, y con -d enseña solo las carpetas.

Moverse: cd

cd (change directory) te lleva a otra carpeta. No contesta nada si todo va bien: el prompt cambia para decirte dónde estás ahora.

tecnico@srv-ficheros:~$ cd /var/log
tecnico@srv-ficheros:/var/log$ ls -l
total 16
drwxr-xr-x 2 root root 4096 Sep 28 09:30 apt
-rw-r----- 1 root adm    71 Oct  5 09:28 auth.log
-rw-r--r-- 1 root root   48 Sep 28 09:30 dpkg.log
-rw-r----- 1 root adm    59 Oct  5 09:29 syslog

cd .. sube un nivel; cd a secas (o cd ~) te devuelve a casa, y cd - a donde estabas antes. Si la carpeta no existe, te lo dice:

tecnico@srv-ficheros:~$ cd /nada
bash: cd: /nada: No such file or directory

No such file or directory (“no existe ese archivo o carpeta”) es el error que más vas a ver. Casi siempre es una letra mal escrita o una ruta relativa desde el sitio equivocado.

Ejercicio

Moverse por el sistema

Los registros del sistema viven en /var/log. Ve a mirarlos y vuelve a casa.

Preparando la máquina…

Crear: mkdir y touch

mkdir (make directory) crea carpetas y touch crea archivos vacíos (si el archivo ya existe, solo le pone la fecha de ahora).

tecnico@srv-ficheros:~$ mkdir proyectos
tecnico@srv-ficheros:~$ touch proyectos/ideas.txt

mkdir no crea las carpetas intermedias que falten, salvo que se lo pidas con -p (parents). Con -p, tampoco se queja si la carpeta ya existe:

tecnico@srv-ficheros:~$ mkdir -p proyectos/web/css

Ejercicio

Crear carpetas y archivos

Prepara en tu carpeta personal el sitio para un proyecto nuevo.

Preparando la máquina…

Copiar, mover y renombrar: cp y mv

cp origen destino copia. Si el destino es una carpeta que existe, la copia va dentro con el mismo nombre; si no, se crea con el nombre que le des.

tecnico@srv-ficheros:~$ cp Descargas/factura.pdf Documentos/

Para copiar una carpeta entera hace falta -r (recursive). Sin ella, cp se niega:

tecnico@srv-ficheros:~$ cp Documentos copia
cp: -r not specified; omitting directory 'Documentos'

mv mueve, y renombrar no es más que mover a un nombre nuevo en el mismo sitio:

tecnico@srv-ficheros:~$ mv Documentos/borrador.txt Documentos/propuesta.txt

Para trabajar con muchos archivos a la vez están los comodines: * es “cualquier cosa” y ? “un carácter cualquiera”. mv Descargas/*.jpg Imagenes/ mueve todos los que acaban en .jpg. Quien los sustituye por los nombres de verdad es la terminal, antes de ejecutar la orden: mv recibe la lista ya hecha.

Ejercicio

Copiar, mover y renombrar

Tu carpeta Descargas es un desastre. Pon cada cosa en su sitio.

Preparando la máquina…

Borrar: rm y rmdir

rm (remove) borra archivos; rmdir, carpetas vacías. Para borrar una carpeta con todo lo que tiene dentro, rm -r.

tecnico@srv-ficheros:~$ rmdir Documentos
rmdir: failed to remove 'Documentos': Directory not empty

Ejercicio

Borrar con cuidado

En Descargas sobran cosas, pero contrato.pdf y nominas.ods son importantes. En Linux no hay papelera: lo borrado, borrado está.

Preparando la máquina…

Buscar: find

find recorre una carpeta y todo lo que tiene dentro buscando lo que le pidas. Lo más habitual es buscar por nombre:

tecnico@srv-ficheros:~$ find /srv/compartido -name "*.csv"
/srv/compartido/ventas/clientes.csv
  • -name busca por nombre (con comodines); -iname, igual pero sin distinguir mayúsculas.
  • -type f solo archivos; -type d, solo directorios.
  • -maxdepth 1 no baja más de un nivel.

El patrón va entre comillas: si no, la terminal intenta completar el * con los archivos de la carpeta en la que estás, y find recibe otra cosa (a veces, un error; a veces, una búsqueda equivocada que no avisa).

Ejercicio

Encontrar un archivo

Dirección pide el informe-trimestral.pdf, que está en algún sitio de /srv/compartido. Nadie recuerda dónde.

Preparando la máquina…

Leer archivos: cat, less, head y tail

  • cat archivo enseña el archivo entero.
  • less archivo lo enseña por páginas (en la simulación, entero).
  • head y tail enseñan el principio y el final: tail -n 20 /var/log/syslog son las 20 últimas líneas del registro del sistema, lo primero que se mira cuando algo falla.
tecnico@srv-ficheros:~$ cat /srv/compartido/LEEME.txt
Carpetas compartidas de la empresa. No borrar nada sin avisar.

Aquí basta con conocerlas: pruébalas en cualquier consola de la sala (cat sobre un LEEME.txt, tail sobre un registro). Se practican a fondo, con su ejercicio, en el tema 2: leer y procesar texto.