Para trabajar desde una terminal, es muy necesario saber moverse entre carpetas y manipular ficheros y carpetas. Acciones como copiar, mover y borrar ficheros o crear carpetas forman parte del día a día en nuestras terminales de texto.
Por esa razón es necesario conocer algunos de los comandos más habituales para estas y otras tareas relacionadas, así como sus parámetros o curiosidades más importantes.
Copiar ficheros
Una operación básica a la hora de usar una terminal es la de copiar ficheros. Nos encontramos continuamente haciendo copias de ficheros o carpetas, ya sea de una ruta a otra o sobre la misma carpeta donde nos encontramos.
Para ello, utilizamos el comando cp
(copy), que suele utilizarse de la siguiente forma:
$ pwd
/home/manz
$ cp origen.txt /home/tux/destino.txt
En este sencillo ejemplo hemos copiado el fichero origen.txt
desde la carpeta /home/manz
a la carpeta /home/tux
cambiándole el nombre a destino.txt
.
Asumamos que seguimos en la carpeta /home/manz
:
La forma en la que especificamos las rutas y copiamos ficheros, pueden simplificarse y hacerse más flexibles dependiendo de si utilizamos rutas absolutas o rutas relativas:
Tipo | Descripción | Ejemplo |
---|---|---|
Ruta absoluta | Ruta completa de la carpeta o fichero (desde el raíz). | /home/tux |
Ruta actual | Ruta donde nos encontramos actualmente. | . |
Ruta padre | Ruta a la carpeta anterior de donde nos encontramos actualmente. | .. |
Ruta relativa | Ruta completa, pero sólo a partir de la carpeta donde nos encontramos. | ../tux |
Veámoslo con varios ejemplos:
# Caso 1: Rutas absolutas
$ cp /home/manz/origen.txt /home/tux/destino.txt
# Caso 2: Rutas relativas
$ cp origen.txt destino.txt
# Caso 3: Rutas relativas
$ cp origen.txt ../tux/destino.txt
# Caso 4: Ruta absoluta y ruta relativa
$ cp /etc/resolv.conf ./backup.conf
Vamos a explicar cada caso:
- El primer caso, equivalente al primer ejemplo, pero indicando rutas absolutas.
- El segundo caso, creamos una copia con nombre
destino.txt
en la misma ruta. - El tercer caso, asumiendo que seguimos en la ruta
/home/manz
, copiamos el ficheroorigen.txt
a la ruta relativa../tux
, es decir, a/home/tux
, con nombredestino.txt
. - El cuarto caso, copiamos el fichero
resolv.conf
de la ruta/etc
a.
, o sea, la carpeta actual donde nos encontramos, pero con el nombrebackup.conf
.
Por otro lado, es importante recalcar que el comando cp
tiene algunos parámetros que pueden resultarnos útiles, como por ejemplo el parámetro -r
que nos permite hacer copias recursivas, esto es, no sólo copiar ficheros, sino carpetas y su contenido, ya que por defecto cp
solo copia ficheros.
Los parámetros más populares son los siguientes:
Parámetro | Significado |
---|---|
-r (recursive) | El comando cp sólo copia ficheros. Usar -r si se quiere copiar carpetas y su contenido. |
-u (update) | Copia sólo cuando no hay fichero de destino. Si existe, sólo cuando el origen es más nuevo. |
-n (no clobber) | No sobreescribe en el destino un fichero que ya existe. |
-v (verbose) | Por defecto, cp trabaja en silencio. Con este parámetro muestra lo que está haciendo. |
Existe una versión alternativa llamada xcp
, desarrollada en Rust, que es una alternativa al comando cp
, no como un reemplazo completo, pero si con algunas ventajas.
Para instalarlo, debemos tener instalado Rust en nuestro sistema y escribir cargo install xcp
. Con ello instalaremos el comando y podremos utilizarlo.
La sintaxis es muy parecida a cp
y tiene algunas mejoras como mostrar una barra de progreso gráfica, copia más rápida de archivos o un mejor aprovechamiento de los núcleos de la CPU del sistema.
Mover o renombrar ficheros
Debemos saber que, en esencia, el proceso de mover un archivo de una carpeta a otra, si podemos cambiarle el nombre del archivo en el proceso, mover un archivo puede ser lo mismo que renombrar un archivo.
Al igual que hemos utilizado cp
para copiar ficheros, podríamos utilizar mv
(move) para mover archivos. La diferencia entre estos dos comandos es que, mv
en lugar de mantener el fichero original como hace cp
, lo elimina tras la copia:
# Caso 1: Mueve un fichero
$ mv /home/tux/info.txt /home/manz/
# Caso 2: Mueve y renombra un fichero
$ mv /home/tux/info.txt /home/manz/tuxdata.txt
# Caso 3: Renombra un fichero
$ mv info.txt tuxdata.txt
Obsérvese que en el primer caso, se está moviendo un fichero a una ruta concreta, pero podemos utilizar mv
para renombrar a la vez que movemos (como en el caso 2) o simplemente renombrar sin mover de ruta (caso 3).
De la misma forma que cp
, el comando mv
tiene los mismos parámetros que mencionamos.
Borrar ficheros
Al trabajar con archivos en Linux, con el tiempo es posible que no los necesites más y quieras borrarlos. Para ello existen algunos comandos interesantes.
Probablemente, otro de los comandos más utilizados en la terminal es rm
(remove), que sirve para eliminar ficheros o carpetas de nuestro sistema. Hay que tener mucho cuidado con él, ya que una vez un fichero es eliminado, aunque no es imposible, es complicado recuperarlo.
Parámetro | Significado |
---|---|
-f (force) | Fuerza a hacer el borrado, sin preguntar. |
-r (recursive) | Elimina recursivamente carpetas y su contenido. |
-d (dir) | Elimina carpetas vacías. |
-v (verbose) | Por defecto, rm trabaja en silencio. Con este parámetro muestra lo que está haciendo. |
Como mencionamos anteriormente, el comando rm
realmente no borra un fichero, sino que lo «marca» en el disco como reutilizable. Si la zona del disco donde residía es sobreescrita con otro fichero, probablemente sea imposible recuperarlo, pero en caso contrario hay cierta posibilidad.
Nota: Si deseas eliminar por completo un fichero, sin posibilidad de recuperación, es mejor utilizar el comando
shred -u
seguido del nombre del fichero a eliminar. Este comando sobreescribe con información aleatoria el fichero, y luego lo elimina (parámetro -u).
Si la filosofía por defecto del comando rm
no te agrada, o eres una persona que suele eliminar ficheros por accidente, quizás te interese el comando rip (rm improved).
Se trata de una alternativa a rm
desarrollada en Rust, que establece que al eliminar un archivo con rip
, pasa a estar «muerto» en una zona del disco denominada «cementerio» (por defecto, /tmp/graveyard-user
, donde user
es el nombre de usuario), que hace las veces de papelera de reciclaje tétrica.
Si hemos borrado accidentalmente el fichero, podemos «resucitarlo» escribiendo rip -u
(undelete) o simplemente acceder a los ficheros dentro de la estructura del cementerio. Si queremos vaciar el cementerio, basta con escribir rip -d
(decompose) o eliminar la estructura de carpetas manualmente.
Otra alternativa similar a rm
podría ser trash-cli.