Lo primero que debemos tener siempre presente es que en Linux todo es un archivo, desde las unidades de disco duro y extraíbles hasta los directorios. De hecho, un directorio es un tipo especial de archivo que almacena la dirección en memoria de los archivos y/o subdirectorios que contenga.
Ya vimos que las rutas pueden ser absolutas o relativas: son absolutas cuando comienzan desde el root (/) y pueden ser referenciadas desde cualquier lugar del sistema, y son relativas cuando dependen de la ubicación actual. En las rutas es muy común encontrar un punto (.) o dos puntos seguidos (..): el primero refiere a la ubicación en donde estamos ahora y el segundo se refiere al directorio padre.
Es muy común que los nombres de los archivos contengan espacios, por lo que es importante usar comillas dobles (") al referenciarlos en la terminal. Por ejemplo: "mi archivo.txt".
Otro punto fundamental es que, a diferencia de otros sistemas operativos tales como Windows, donde la extensión es importante porque le indica al sistema qué tipo de archivo es, Linux simplemente ignora la extensión del archivo y se fija en su contenido para determinar de qué tipo es. De esta forma, a un archivo .jpg se le podría cambiar su extensión a .txt y aún así el sistema Linux lo seguiría tratando como a una imagen.
| Comando | Descripción |
|---|---|
whereis |
(where is?) Busca la ubicación de un archivo ejecutable. Si están disponibles, retorna también su fuente y manual |
cd ruta |
(change directory) Cambia a la ruta indicada, sea absoluta o relativa |
cd |
Vuelve al directorio de inicio (home) |
cd .. |
Sube un nivel en los directorios. ../.. sube dos niveles, ../../.. sube tres y así sucesivamente |
cd ../directorio |
Sube un nivel y enseguida ingresa a otro subdirectorio |
cd - |
Muestra en pantalla el directorio anterior y regresa a él |
mkdir directoriomkdir directorio1 directorio2... |
(make directory) Crea uno o varios directorios en la ubicación actual |
mkdir -v |
(-view) Muestra un mensaje sobre el directorio creado |
mkdir directorio && cd $_ |
Crea un directorio y cambia inmediatamente a él |
mkdir directorio{01,02,03...} |
Crea directorios con igual nombre y distinto sufijo (directorio01, directorio02, directorio03...) |
mkdir directorio{A..D} |
(dos puntos) Crea 4 directorios con igual nombre y distinto sufijo: directorioA, directorioB, directorioC y directorioD |
mkdir -p subdirectorio1 subdirectorio2... |
(-parent) Crea uno o varios subdirectorios |
mkdir directorio1/directorio2/directorio3... |
Crea subdirectorios anidados |
touch archivotouch archivo1 archivo2 "archivo_nuevo"... |
Crea uno o varios archivos en la ubicación actual [1] |
touch archivo{01,02,03...} |
Crea archivos con igual nombre y distinto sufijo: archivo01, archivo02, archivo03... |
touch archivo{A..D} |
(punto punto) Crea 4 archivos con igual nombre y distinto sufijo: archivoA, archivoB, archivoC y archivoD |
touch -m archivo |
(-modify) Actualiza la fecha de modificación del archivo a la actual |
./archivobash archivo |
Ejecuta un archivo |
du -h archivo |
(disc use -human-readable) Muestra el tamaño que ocupa un archivo o directorio |
locate archivo |
Busca un archivo según su nombre |
find ruta -name nombre -type tipo |
Busca un archivo o directorio con cierto nombre dentro de un directorio dado. La opción -type especifica el tipo: d para directorios, f para archivos |
file archivo |
Muestra una descripción breve del archivo |
stat archivo |
Muestra información detallada sobre un archivo, como su nombre, su tamaño, su fecha de creación, etc. |
grep expresión archivo |
Busca una expresión determinada en cierto archivo |
realpath archivo |
Muestra la ruta absoluta de un archivo |
dirname archivo |
Muestra el directorio padre de un archivo |
basename ruta |
Extrae el nombre de una carpeta o de un archivo con su extensión |
basename ruta .extensión |
Extrae el nombre de un archivo SIN su extensión |
basename -a *.extensión |
(-all) Muestra todos los archivos del directorio actual que tengan cierta extensión |
basename -s .extensión -a *.extensión |
(-suffix) Muestra todos los archivos del directorio actual que tengan cierta extensión, SIN su extensión |
cp archivo_original archivo_nuevo |
(copy) Copia un archivo y crea uno nuevo |
cp archivo1 archivo2 archivo3... ruta |
Copia el o los archivos y los pega en un directorio dado. [1] |
cp -i archivo ruta |
(-interactive) Copia el archivo y lo pega en un directorio dado, pidiendo confirmación |
cp * |
Copia todo el contenido del directorio actual |
cp -r directorio1 directorio2... directorio_destino |
(-recursive) Copia el o los directorios y los pega en otro |
cp -r directorio_origen/. directorio_destino |
Copia solamente el contenido del directorio y lo pega en otro |
rmdir directorio |
(remove directory) Borra un directorio sólo si está vacío |
rmdir -v directorio |
(-verbose) Borra un directorio y muestra un mensaje |
rm archivo |
(remove) Borra un archivo del directorio actual |
rm ruta/archivo |
Borra un archivo de la ruta indicada |
rm -r -i archivo |
(-recursive -interactive) Borra el archivo, pidiendo confirmación |
rm -r -f directorio |
(-force) Fuerza el borrado del directorio. ATENCIÓN: Debe tenerse muchísimo cuidado con la opción -rf porque no pide confirmación ni arroja error si el directorio no existe. |
mv archivo1 archivo2... ruta |
(move) Mueve uno o varios archivos desde el directorio actual a otro directorio de destino |
mv ruta_origen ruta_destino |
Mueve un archivo o directorio desde ruta_origen a ruta_destino |
mv archivo nombre_nuevo |
Renombra el archivo o directorio |
unzip archivo.zip |
Descomprime un archivo zip |
zip -r comprimido.zip archivo1 archivo2... |
(-recursive) Comprime archivos y directorios con sus contenidos en uno con extensión zip |
zip -x comprimido.zip archivo1 archivo2 -x archivo3 |
(-exclude) Comprime los archivos archivo1 y archivo2 y excluye a archivo3 |
zip -d comprimido.zip archivo1 archivo2... |
(-delete) Borra archivos y directorios de un archivo zip. ATENCIÓN: NO borra los directorios si NO están vacíos |
zip -e comprimido.zip archivo1 archivo2... |
(-encrypt) Comprime varios archivos en un archivo zip, pidiendo una contraseña para descomprimirlo |
cat archivo |
(concatenate) Visualiza el contenido de un archivo sin la necesidad de abrir un editor |
cat -n archivo |
(-number) Visualiza el contenido de un archivo mostrando los números de línea |
cat > archivo |
Crea un archivo nuevo e inmediatamente permite escribir su código |
cat archivo1 archivo2 > archivo3 |
Concatena dos archivos y lo guarda como un archivo nuevo |
tac archivo |
(cat invertido) Muestra el contenido del archivo pero invertido, imprimiendo desde la última línea hasta la primera |
[1] Si ya existen archivos con el mismo nombre, se sobreescribirán.
Afortunadamente, la consola cuenta con varios comandos nativos para filtrar el contenido de los archivos:
| Comando | Descripción |
|---|---|
wc -w |
(word count -words) Muestra la cantidad de palabras en el archivo |
wc -l |
(-lines) Muestra la cantidad de líneas del archivo |
wc -m |
Muestra la cantidad de caracteres en el archivo |
head archivo |
Muestra las primeras 10 líneas de un archivo |
head -n número archivo |
Muestra las primeras líneas de un archivo, desde la primera hasta la cantidad indicada |
tail archivo |
Muestra las últimas 10 líneas de un archivo |
tail -n +número archivo |
Muestra las últimas líneas de un archivo, desde la cantidad indicada hasta el final |
sort archivo |
Ordena alfabéticamente las líneas del archivo |
nl archivo |
(number lines) Muestra el archivo con las líneas numeradas |
nl -w número archivo |
Muestra el archivo con las líneas numeradas. La opción -w indica la cantidad de espacios de indentación |
nl -s cadena archivo |
Muestra el archivo con las líneas numeradas. La opción -s (-string) señala una cadena de texto que se imprimirá luego del número. Por ejemplo, con -s ' - ' se mostrará:1 -
... |
Los operadores de redirección permiten enviar la salida de un comando a un archivo, o bien leer desde un archivo como entrada para un comando.
| Operador | Descripción |
|---|---|
comando > archivo |
Toma la salida del comando y lo guarda en un archivo |
comando >> archivo |
Añade la salida del comando al final del archivo |
comando < archivo |
Lee el contenido del archivo y lo utiliza como entrada para el comando |
El operador "mayor que" (>) envía la salida de un comando a un archivo. Por ejemplo:
ls -1 > lista.txt # Guarda la lista de archivos y directorios actuales en un archivo de texto
El operador >> agrega la salida del comando al final del archivo, sin borrar el contenido anterior.
echo "Esta es una línea nueva" >> lista.txt # Agrega una nueva línea al final del archivo de texto
Al contrario que >, el operador "menor que" (<) lee el contenido de un archivo para un comando. La diferencia con | radica en que éste conecta dos comandos entre sí, mientras que el operador < conecta un archivo directamente a un comando.
wc -m < lista.txt # Cuenta la cantidad de caracteres en un archivo de texto
Existen dos comandos útiles para manipular el tamaño de los archivos: truncate y split.
| Comando | Descripción |
|---|---|
truncate -s tamaño archivo |
(-size) Recorta o extiende un archivo a un cierto tamaño |
split -b tamaño archivo prefijo |
(-bytes) Divide un archivo en varias partes según un tamaño dado |
split -n número archivo prefijo |
(-number) Divide un archivo en cierto número de partes |
Este comando nos permite tanto truncar como extender un archivo según su tamaño actual. Por defecto, el tamaño está indicado bytes, pero también se puede especificar en kilobytes con el sufijo K, en megabytes con M, en gigabytes con G, etc.
truncate -b 100K archivo.txt # Extiende el archivo a 100 kilobytes (si su tamaño es menor)
El comando split divide un archivo en varias partes. La opción -b indica el tamaño de cada parte, mientras que la opción -n indica la cantidad de partes en que se dividirá el archivo. Por defecto, los archivos resultantes se nombran con una secuencia de letras (aa, ab, ac...), pero se pueden utilizar números con la opción -d.
split -b 250K archivo.txt fragmento- # Divide el archivo en partes de 250 kilobytes. Los nombres de las partes serán "fragmento-aa", "fragmento-ab", etc. split -b 2M -d archivo.txt parte_ # Divide el archivo en partes de 2 megabytes. Los nombres de las partes serán "parte_00", "parte_01", etc. split -n 6 archivo.txt parte_ # Divide el archivo en 6 partes iguales
aulas y primer grado (así con espacio). Ingresar a este último y crear 4 directorios cuyos nombres sean alumno01, alumno02, alumno03 y alumno04 usando sufijos.aulas y crear un archivo de nombre piso1.txt.Recepción Sala 101 Sala 102 Sala 103 Oficina de Dirección
Oficina.piso02.txt.Biblioteca Sala 201 Sala 202 Sala 203 Sala 204
file una breve descripción de este archivo.piso3.txt y moverlo al directorio primer grado.primer grado hacia aulas.aulas y concatenar los archivos piso1.txt y piso2.txt en un nuevo archivo de nombre piso1y2.txt.aulas y primer grado pidiendo confirmación y aceptando todo.alumnos.txt cuyo código sea:
Patricia -> Tercer grado Úrsula -> Segundo grado Federico -> Tercer grado Carla -> Primer grado Walter -> Primer grado Lucio -> Segundo grado Graciela -> Tercer grado Diana -> Primer grado Zoe -> Segundo grado Ignacio -> Tercer grado Berta -> Primer grado Silvio -> Primer grado Julieta -> Primer grado Matías -> Segundo grado Esteban -> Segundo grado Osvaldo -> Tercer grado Tatiana -> Segundo grado Ramón -> Tercer grado Horacio -> Tercer grado Nancy -> Segundo grado Alfredo -> Primer grado Vicente -> Primer grado Katherine -> Tercer grado Yolanda -> Segundo grado
stat y luego dividirlo en partes de 250 kilobytes cuyo prefijo será fragmento_.parte- seguido de un número.