Comandos básicos de Linux — ejercicios con rutas, comodines, una entrega de IC2 y una carpeta en caos (y el espacio que se llevó mis archivos .c)
Un viernes por la tarde quise limpiar los temporales de mi carpeta de prácticas antes de subirla. Escribí rm *.tmp… o eso creía. Se me coló un espacio entre el asterisco y .tmp, pulsé Intro y la terminal solo dijo que no encontraba .tmp. Cuando hice ls, no quedaba nada: ni los temporales ni mis archivos .c. Un solo espacio. Lo vas a ver en directo en «¿Qué falla aquí?», con la salida real, y vas a entender por qué rm ni se enteró de que había un comodín.
Estos son los ejercicios de comandos básicos de Linux con solución, el cierre del tema después de la teoría y la práctica. Son cuatro ejercicios en tres niveles (rutas, comodines, la entrega de una práctica y una carpeta en caos), tres fragmentos con trampa, las soluciones comentadas con su salida real y un chuletario para tener a mano en el laboratorio.
Tabla de Contenidos
Cómo usar este artículo
- Abre la terminal de Fedora y, para cada ejercicio, copia primero el bloque de preparación: crea las carpetas y archivos con los que vas a trabajar.
- Intenta resolverlo solo. Si llevas más de diez minutos atascado, abre la pista .
- Antes de mirar la solución, haz los fragmentos de «¿Qué falla aquí?»: predice qué sale y luego compruébalo.
- Compara con las soluciones comentadas. No hay una única respuesta buena: si tu orden hace lo mismo, vale.
Las salidas son reales, de una única ejecución con el usuario sergio. En tu ordenador saldrán tu usuario y tu fecha; si tu Fedora está en español, los errores saldrán traducidos («No such file or directory» → «No existe el fichero o el directorio»). ls te pondrá los nombres en columnas; aquí salen uno por línea.
Antes de empezar: los comodines en Linux
Los comodines (wildcards) son caracteres especiales que representan uno o varios caracteres en nombres de archivo. Te ahorran escribir los archivos uno a uno:
| Comodín | Significa | Ejemplo | Encaja con |
|---|---|---|---|
* | Cero o más caracteres cualesquiera | *.c | main.c, practica1.c… |
? | Exactamente un carácter | practica?.c | practica1.c, pero no practica10.c |
[abc] | Uno de los caracteres de la lista | [aeiou]* | Lo que empieza por vocal |
[a-z], [0-9] | Uno del rango | *[0-9]* | Lo que tiene una cifra en el nombre |
Y lo más importante, lo que explica casi todos los errores con comodines: los comodines los expande bash, no el comando. Cuando escribes ls *.c, bash busca qué archivos encajan, sustituye el patrón por la lista (ls main.c practica1.c) y solo entonces ejecuta ls. El comando nunca ve el asterisco. De ahí salen tres reglas:
- Funcionan con cualquier orden que reciba nombres de archivo:
ls,cp,mv,rm,cat… - Si el patrón no encaja con nada, bash lo deja tal cual y el comando recibe
*.pdfliteral (y se queja de que no existe). *no encaja con los archivos ocultos: para esos, el patrón tiene que empezar por punto (.o*).
Usar un comodín con rm sin mirar antes qué expande. Primero ls *.tmp (o echo *.tmp); si la lista es la que esperas, cambia ls por rm.
Nivel básico
Ejercicio 1: encontrar archivos con rutas, sin moverte
Tienes un pequeño proyecto de C en tu carpeta personal. Prepáralo con esto:
mkdir -p proyecto/src/utils proyecto/src/tests proyecto/docs touch proyecto/src/main.c proyecto/src/utils/helpers.c proyecto/src/utils/math.c touch proyecto/src/tests/test1.c proyecto/docs/manual.txt echo 'Proyecto de IC2' > proyecto/docs/readme.txt
Resuelve estas tareas sin usar cd, solo con rutas desde tu carpeta personal:
- Lista el contenido de
proyecto/src/utils. - Muestra el contenido de
readme.txt. - Copia
helpers.caproyecto/src/tests/y comprueba que está. - Lista todos los archivos
.cdel proyecto con una sola orden y comodines. - ¿Cuántos
.chay enproyecto/src/utils?
Salida esperada: en el punto 2 tiene que salir Proyecto de IC2; en el punto 4, cinco archivos (contando la copia del punto 3); en el punto 5, dos.
cat y cp aceptan rutas igual que ls. Para el punto 4, un * solo cubre un nivel de carpeta: proyecto/src/*/*.c encuentra lo que hay en utils y tests, pero no main.c, que está un nivel más arriba.
Ejercicio 2: comodines en acción
Ahora una carpeta con archivos de todos los tipos. Prepárala:
mkdir comodines cd comodines touch archivo1.txt archivo2.txt archivo3.txt datos1.csv datos2.csv datos3.csv touch script1.sh script2.sh imagen.png foto.jpg video.mp4 .oculto1 .oculto2 ls -a
La última orden de la preparación te enseña lo que hay, ocultos incluidos:
$ mkdir comodines $ cd comodines $ touch archivo1.txt archivo2.txt archivo3.txt datos1.csv datos2.csv datos3.csv $ touch script1.sh script2.sh imagen.png foto.jpg video.mp4 .oculto1 .oculto2 $ ls -a . .. .oculto1 .oculto2 archivo1.txt archivo2.txt archivo3.txt datos1.csv datos2.csv datos3.csv foto.jpg imagen.png script1.sh script2.sh video.mp4
Resuelve con comodines:
- Lista solo los
.txt. - Lista los
.txty los.csven una sola orden. - Lista los que empiezan por
datos. - Lista los que tienen una cifra en el nombre.
- Lista los ocultos que empiezan por
.o. - Copia los archivos de texto (
.txty.csv) a una carpeta nuevatextos. - ¿Qué pasa con
ls *.pdf? ¿Da error o no muestra nada?
Salida esperada: en el punto 4 salen nueve archivos (cuidado con video.mp4); en el 7, un error.
Se pueden poner varios patrones en la misma orden (ls *.txt *.csv). Para el punto 4, piensa que la cifra puede estar en cualquier sitio del nombre: necesitas un * a cada lado de [0-9].
Nivel intermedio
Ejercicio 3: prepara la entrega de la práctica 2
Es domingo por la noche y toca entregar la práctica 2 de IC2. Tienes esto:
mkdir -p IC2/Practicas/P2/pruebas IC2/Entregas cd IC2/Practicas/P2 touch main.c funciones.c funciones.h notas.txt borrador.c ls
La salida real:
$ mkdir -p IC2/Practicas/P2/pruebas IC2/Entregas $ cd IC2/Practicas/P2 $ touch main.c funciones.c funciones.h notas.txt borrador.c $ ls borrador.c funciones.c funciones.h main.c notas.txt pruebas
Desde dentro de P2, haz la entrega:
- Una copia de seguridad de toda la práctica en
Practicas/P2_copia, por si acaso. - Renombra
main.cap2_medina.c(la profesora pide el apellido en el nombre; pon el tuyo). - Copia a
IC2/Entregassolo lo que se entrega:p2_medina.c,funciones.cyfunciones.h. - Borra
borrador.ccon confirmación. - Quita la carpeta
pruebas, que está vacía. - Comprueba cómo quedan
P2,Entregasy la copia.
Salida esperada: Entregas con tres archivos; P2 con funciones.c, funciones.h, notas.txt y p2_medina.c; y la copia, intacta, con el main.c original.
Desde IC2/Practicas/P2, Entregas está dos niveles arriba: ../../Entregas/. cp acepta varios orígenes y un destino al final, que tiene que ser una carpeta.
Desafío final
Ejercicio 4: organiza el caos
Una carpeta caos con todo mezclado, como la de cualquiera a mitad de cuatrimestre. Créala:
mkdir caos
cd caos
touch practica1.c practica2.c practica3.c examen_final.c examen_parcial.c
touch apuntes_linux.txt apuntes_c.txt apuntes_python.txt foto_clase.jpg foto_lab.jpg
touch borrar_esto.tmp basura.tmp cache.tmp
echo 'int main(void) { return 0; }' > practica1.c
ls
Lo que enseña la terminal:
$ mkdir caos
$ cd caos
$ touch practica1.c practica2.c practica3.c examen_final.c examen_parcial.c
$ touch apuntes_linux.txt apuntes_c.txt apuntes_python.txt foto_clase.jpg foto_lab.jpg
$ touch borrar_esto.tmp basura.tmp cache.tmp
$ echo 'int main(void) { return 0; }' > practica1.c
$ ls
apuntes_c.txt
apuntes_linux.txt
apuntes_python.txt
basura.tmp
borrar_esto.tmp
cache.tmp
examen_final.c
examen_parcial.c
foto_clase.jpg
foto_lab.jpg
practica1.c
practica2.c
practica3.c
Tu objetivo es que quede así:
caos/ ├── codigo/ │ ├── practicas/ ← los practica*.c │ └── examenes/ ← los examen*.c ├── apuntes/ ← los apuntes*.txt ├── multimedia/ ← las fotos .jpg └── (los .tmp, borrados)
Reglas:
- Nada de mover archivo a archivo: un comodín por grupo.
- Los
.tmpse borran con confirmación, y antes compruebas cuáles son. - Al final, una sola orden que enseñe toda la estructura.
- Diez órdenes como máximo.
mkdir -p crea las cinco carpetas de una vez (codigo incluida). Con mv practica*.c codigo/practicas/ mueves las tres prácticas en una orden. Y ls -R enseña el árbol completo desde donde estás.
¿Qué falla aquí?
Tres fragmentos cortos que parecen correctos. Lee cada uno, predice qué va a salir y solo entonces mira la salida real.
Fragmento 1: limpiar los temporales
En la carpeta limpieza hay dos archivos de código y dos temporales. Quiero borrar los temporales:
ls rm * .tmp ls
¿Qué queda en la carpeta? Piénsalo antes de seguir.
$ ls basura.tmp cache.tmp main.c notas.txt $ rm * .tmp rm: cannot remove '.tmp': No such file or directory $ ls
No queda nada. El espacio entre * y .tmp convierte un patrón en dos argumentos: * (que bash expande a todos los archivos) y .tmp (un nombre que no existe). rm recibe cinco nombres, borra los cuatro que existen y solo se queja del quinto. El mensaje de error te hace pensar que no ha pasado nada, cuando ha pasado todo.
Leer el error de rm como «no ha borrado nada». rm procesa sus argumentos uno a uno: un error con uno no impide borrar los demás.
El arreglo: sin espacio, y mirando antes con ls:
ls *.tmp rm *.tmp ls
Al ejecutarlo:
$ ls *.tmp basura.tmp cache.tmp $ rm *.tmp $ ls main.c notas.txt
Antes de un rm con comodines, escribe la misma orden con echo delante: echo rm * .tmp te enseña exactamente lo que rm va a recibir, sin borrar nada.
Fragmento 2: la copia de seguridad que no copió
Quiero una copia de seguridad de toda la carpeta Practicas antes de tocar nada:
cp Practicas Practicas_copia ls
¿Tienes copia? Predice y mira:
$ cp Practicas Practicas_copia cp: -r not specified; omitting directory 'Practicas' $ ls Practicas
No hay copia: ls solo enseña Practicas. cp sin -r se salta las carpetas: escribe un aviso («omitting directory») y sigue como si nada. Si no lees el mensaje, crees que tienes copia de seguridad y no la tienes.
Confiar en que no ha salido nada en rojo. En la terminal no hay colores que avisen: hay que leer cada línea que escribe la orden.
Con -r (recursive) cp entra en la carpeta y copia todo lo que hay dentro:
cp -r Practicas Practicas_copia ls -R Practicas_copia
Resultado:
$ cp -r Practicas Practicas_copia $ ls -R Practicas_copia Practicas_copia: P1 Practicas_copia/P1: hola.c
ls -R de la copia es la comprobación rápida: si aparece hola.c dentro de P1, la copia está completa.
Fragmento 3: la carpeta con espacio
Quiero una carpeta llamada «Mis practicas» y entrar en ella:
mkdir Mis practicas ls cd Mis practicas
¿Cuántas carpetas se crean? ¿Puedo entrar?
$ mkdir Mis practicas $ ls Descargas Documentos Escritorio Mis practicas $ cd Mis practicas bash: cd: too many arguments
Se crean dos carpetas, Mis y practicas, porque el espacio separa argumentos y mkdir recibe dos nombres. Y cd Mis practicas falla con «too many arguments»: cd solo admite un destino y le han llegado dos.
Usar espacios en nombres de archivos y carpetas en Linux. Funcionan, pero te obligan a poner comillas en todas las órdenes.
El arreglo: comillas (o, mejor todavía, un guion bajo: Mis_practicas):
mkdir "Mis practicas" ls cd "Mis practicas" pwd
Y esto es lo que sale de verdad:
$ mkdir "Mis practicas" $ ls Descargas Documentos Escritorio Mis practicas $ cd "Mis practicas" $ pwd /home/sergio/Mis practicas
Si pulsas Tab después de cd Mis, bash completa el nombre con la barra invertida que hace falta: cd Mis\ practicas. La barra le dice que ese espacio forma parte del nombre.
Soluciones comentadas
Solución del ejercicio 1
# 1. contenido de utils sin moverme de mi carpeta ls proyecto/src/utils # 2. ver readme.txt: cat acepta rutas igual que ls cat proyecto/docs/readme.txt # 3. copiar helpers.c a tests (destino = carpeta que existe) cp proyecto/src/utils/helpers.c proyecto/src/tests/ ls proyecto/src/tests # 4. todos los .c: un * por cada nivel de carpeta ls proyecto/src/*.c proyecto/src/*/*.c # ** en bash NO baja a todos los niveles: vale lo mismo que * ls proyecto/**/*.c # 5. cuántos .c hay en utils ls proyecto/src/utils/*.c
La salida real:
$ ls proyecto/src/utils helpers.c math.c $ cat proyecto/docs/readme.txt Proyecto de IC2 $ cp proyecto/src/utils/helpers.c proyecto/src/tests/ $ ls proyecto/src/tests helpers.c test1.c $ ls proyecto/src/*.c proyecto/src/*/*.c proyecto/src/main.c proyecto/src/tests/helpers.c proyecto/src/tests/test1.c proyecto/src/utils/helpers.c proyecto/src/utils/math.c $ ls proyecto/**/*.c proyecto/src/main.c $ ls proyecto/src/utils/*.c proyecto/src/utils/helpers.c proyecto/src/utils/math.c
Por qué está hecho así:
- Rutas en lugar de
cd. Todas las órdenes aceptan una ruta relativa desde donde estás. Es más rápido y no te arriesgas a perderte. cp ... proyecto/src/tests/copia dentro porquetestses una carpeta que existe.ls proyecto/src/testslo confirma: ahora hay dos archivos.- Dos patrones para todos los
.c.proyecto/src/*.cencuentramain.cyproyecto/src/*/*.clos cuatro de las subcarpetas: 1 + 4 = 5. **no es recursivo por defecto. En bash,proyecto/**/*.cvale lo mismo queproyecto/*/*.c: un solo nivel. Por eso solo encuentraproyecto/src/main.c. Para que baje a todos los niveles hay que activarshopt -s globstar, que no viene activado.- Contar con la vista.
ls proyecto/src/utils/*.cda dos líneas: dos archivos. Cuando veas tuberías,ls ... | wc -llo contará por ti.
| Patrón | Niveles que mira | Encuentra |
|---|---|---|
proyecto/src/*.c | Solo src | main.c |
proyecto/src/*/*.c | Un nivel por debajo de src | helpers.c (×2), test1.c, math.c |
proyecto/**/*.c | Uno por debajo de proyecto (sin globstar) | main.c |
Solución del ejercicio 2
# 1. solo los .txt ls *.txt # 2. .txt y .csv en una sola orden: dos patrones ls *.txt *.csv # 3. los que empiezan por datos ls datos* # 4. los que tienen una cifra en cualquier parte del nombre ls *[0-9]* # 5. los ocultos que empiezan por .o (el patrón ya lleva el punto) ls -d .o* # 6. copiar los de texto a una carpeta nueva mkdir textos cp *.txt *.csv textos/ ls textos # 7. un patrón que no encaja con nada llega tal cual a ls ls *.pdf
La salida real:
$ ls *.txt archivo1.txt archivo2.txt archivo3.txt $ ls *.txt *.csv archivo1.txt archivo2.txt archivo3.txt datos1.csv datos2.csv datos3.csv $ ls datos* datos1.csv datos2.csv datos3.csv $ ls *[0-9]* archivo1.txt archivo2.txt archivo3.txt datos1.csv datos2.csv datos3.csv script1.sh script2.sh video.mp4 $ ls -d .o* .oculto1 .oculto2 $ mkdir textos $ cp *.txt *.csv textos/ $ ls textos archivo1.txt archivo2.txt archivo3.txt datos1.csv datos2.csv datos3.csv $ ls *.pdf ls: cannot access '*.pdf': No such file or directory
Por qué está hecho así:
ls *.txt *.csv: dos patrones, cada uno se expande por separado ylsrecibe seis nombres.*[0-9]*encuentra nueve, no ocho.video.mp4tiene un4en la extensión y el patrón mira todo el nombre. Cuenta: tresarchivo, tresdatos, dosscriptyvideo.mp4= 9.ls -d .o*: el patrón ya empieza por punto, así que encaja con los ocultos sin necesidad de-a. La-devita quelsintente entrar en ellos si fueran carpetas.cp *.txt *.csv textos/: varios orígenes y un destino que es carpeta. Creamostextosantes porquecpno crea carpetas.ls *.pdfda error. No hay ningún.pdf, así que bash no expande nada ylsrecibe el texto*.pdftal cual. Busca un archivo que se llama literalmente*.pdfy no lo encuentra.
ls *.{txt,csv} también funciona, pero las llaves no son un comodín: bash las convierte en *.txt *.csv antes de buscar archivos. Si te lías, usa los dos patrones separados.
Solución del ejercicio 3
# 1. copia de seguridad de toda la práctica (carpeta: hace falta -r) cp -r ../P2 ../P2_copia ls .. # 2. renombrar main.c con mi apellido mv main.c p2_medina.c # 3. copiar a Entregas solo lo que se entrega: varias fuentes, un destino cp p2_medina.c funciones.c funciones.h ../../Entregas/ ls ../../Entregas # 4. borrar el borrador preguntando rm -i borrador.c # 5. quitar la carpeta pruebas, que está vacía rmdir pruebas # 6. comprobar cómo queda ls ls ../P2_copia
Lo que enseña la terminal:
$ cp -r ../P2 ../P2_copia $ ls .. P2 P2_copia $ mv main.c p2_medina.c $ cp p2_medina.c funciones.c funciones.h ../../Entregas/ $ ls ../../Entregas funciones.c funciones.h p2_medina.c $ rm -i borrador.c rm: remove regular empty file 'borrador.c'? y $ rmdir pruebas $ ls funciones.c funciones.h notas.txt p2_medina.c $ ls ../P2_copia borrador.c funciones.c funciones.h main.c notas.txt pruebas
Por qué está hecho así:
- La copia de seguridad va primero. Si algo sale mal en los pasos siguientes,
P2_copiaconserva la práctica tal como estaba, conmain.cyborrador.cincluidos (lo confirma el últimols). cp -r ../P2 ../P2_copia: desde dentro deP2, la carpeta se nombra como../P2. La copia queda como hermana, enPracticas.mvpara renombrar porque el archivo no tiene que estar dos veces: solo cambia su nombre.- Un
cpcon tres orígenes. El último argumento (../../Entregas/) es el destino; todo lo anterior se copia dentro.notas.txtno se entrega, por eso no está. rm -iyrmdir. Son las dos órdenes de borrar «con red»:rm -ipregunta yrmdirsolo funciona si la carpeta está vacía.
| Paso | Orden | Dónde queda cada cosa |
|---|---|---|
| 1 | cp -r ../P2 ../P2_copia | Copia completa (6 elementos) en P2_copia |
| 2 | mv main.c p2_medina.c | En P2, main.c pasa a llamarse p2_medina.c |
| 3 | cp ... ../../Entregas/ | Entregas: 3 archivos |
| 4 | rm -i borrador.c | Fuera de P2 (sigue en la copia) |
| 5 | rmdir pruebas | Fuera de P2 (sigue en la copia) |
Solución del ejercicio 4
# 1. toda la estructura de una vez mkdir -p codigo/practicas codigo/examenes apuntes multimedia # 2-5. un comodín por grupo de archivos mv practica*.c codigo/practicas/ mv examen*.c codigo/examenes/ mv apuntes*.txt apuntes/ mv *.jpg multimedia/ # 6. revisar antes de borrar y borrar preguntando uno a uno ls *.tmp rm -i *.tmp # 7. el resultado completo ls -R
Al ejecutarlo:
$ mkdir -p codigo/practicas codigo/examenes apuntes multimedia $ mv practica*.c codigo/practicas/ $ mv examen*.c codigo/examenes/ $ mv apuntes*.txt apuntes/ $ mv *.jpg multimedia/ $ ls *.tmp basura.tmp borrar_esto.tmp cache.tmp $ rm -i *.tmp rm: remove regular empty file 'basura.tmp'? y rm: remove regular empty file 'borrar_esto.tmp'? y rm: remove regular empty file 'cache.tmp'? y $ ls -R .: apuntes codigo multimedia ./apuntes: apuntes_c.txt apuntes_linux.txt apuntes_python.txt ./codigo: examenes practicas ./codigo/examenes: examen_final.c examen_parcial.c ./codigo/practicas: practica1.c practica2.c practica3.c ./multimedia: foto_clase.jpg foto_lab.jpg
Son nueve órdenes, una menos que el máximo. Así quedan los trece archivos:
Por qué está hecho así:
mkdir -pcon cuatro rutas crea cinco carpetas:codigoaparece sola porque-pcrea las intermedias.- Un comodín por grupo.
practica*.cencaja con las tres prácticas yexamen*.ccon los dos exámenes. Ojo con*.ca secas: se habría llevado las prácticas y los exámenes a la misma carpeta. ls *.tmpantes derm -i *.tmp. Es la regla del fragmento 1: mirar lo que expande el patrón antes de borrar.rm -ipregunta tres veces, una por archivo, y se contestaya las tres.ls -Rsin argumentos recorre la carpeta actual (.) y todas sus subcarpetas: es la «foto final» que pedía el enunciado.
| Orden | Archivos que mueve o borra | Quedan sueltos en caos |
|---|---|---|
| (inicio) | — | 13 |
mv practica*.c codigo/practicas/ | 3 | 10 |
mv examen*.c codigo/examenes/ | 2 | 8 |
mv apuntes*.txt apuntes/ | 3 | 5 |
mv *.jpg multimedia/ | 2 | 3 |
rm -i *.tmp | 3 | 0 |
Cuenta comprobada: 3 + 2 + 3 + 2 + 3 = 13.
Pruébalo en tu terminal
En Linux no hay Python Tutor, pero sí un truco para «ver» lo que hace bash antes de ejecutar nada: echo. Repite el fragmento 1 sin borrar nada (con la carpeta limpieza recién creada):
echo *.tmp echo * .tmp echo rm * .tmp
Lo que deberías ver:
$ echo *.tmp basura.tmp cache.tmp $ echo * .tmp basura.tmp cache.tmp main.c notas.txt .tmp $ echo rm * .tmp rm basura.tmp cache.tmp main.c notas.txt .tmp
Qué observar:
echo *.tmpenseña los dos archivos que encajan: es lo que recibiríarm *.tmp.echo * .tmpenseña los cuatro archivos más.tmpsuelto al final: el espacio ha partido el patrón en dos.echo rm * .tmpescribe la orden completa tal como la ejecutaría bash. Es la prueba del delito.- Ninguna de las tres órdenes ha borrado nada:
echosolo escribe. Haz esto cada vez que dudes de un comodín.
Chuletario: comandos básicos de Linux
Lo esencial en 30 segundos: pwd te dice dónde estás y ls qué hay. Una ruta con / delante empieza en la raíz; sin ella, en tu carpeta actual. cp duplica, mv mueve o renombra y rm borra sin papelera. Las carpetas necesitan -r para copiarse o borrarse con rm, y mkdir -p crea rutas enteras. Los comodines los expande bash: comprueba con ls o echo antes de borrar.
| Quiero… | Código | Resultado |
|---|---|---|
| Saber dónde estoy | pwd | /home/sergio |
| Ver todo, ocultos incluidos, con detalles | ls -la | Una línea por elemento |
| Ver un árbol entero | ls -R carpeta | Cada carpeta con su contenido |
| Subir un nivel / dos niveles | cd .. / cd ../.. | La carpeta de arriba |
| Ir a casa / volver a la anterior | cd / cd - | ~ / la carpeta previa |
| Crear una ruta entera | mkdir -p a/b/c | Las tres carpetas |
| Quitar una carpeta vacía | rmdir carpeta | Error si no está vacía |
| Crear un archivo vacío | touch archivo | 0 bytes |
| Ver un archivo | cat archivo | Su contenido |
| Copiar dentro de una carpeta | cp archivo carpeta/ | Mismo nombre, otro sitio |
| Copiar una carpeta | cp -r origen copia | Todo el contenido |
| Renombrar / mover | mv viejo nuevo / mv archivo carpeta/ | El original desaparece |
| Borrar preguntando | rm -i archivo | rm: remove ...? |
| Borrar una carpeta con todo | rm -r carpeta | Sin preguntar, sin papelera |
| Ruta absoluta de algo | realpath archivo | /home/sergio/... |
| Escribir / añadir una línea | echo 'x' > f / echo 'x' >> f | > machaca, >> añade |
| Comodín | Ejemplo | Encaja con |
|---|---|---|
* | ls *.c | Todos los .c (no los ocultos) |
? | ls practica?.c | practica1.c, no practica10.c |
[0-9] | ls *[0-9]* | Lo que tiene una cifra |
.o* | ls -d .o* | Ocultos que empiezan por .o |
Plantillas de los ejercicios:
# Ejercicio 1: rutas sin moverse ls proyecto/src/*.c proyecto/src/*/*.c # todos los .c (5) # Ejercicio 2: varios patrones, un destino cp *.txt *.csv textos/ # Ejercicio 3: entrega cp -r ../P2 ../P2_copia # primero, la copia cp p2_medina.c funciones.c funciones.h ../../Entregas/ # Ejercicio 4: un comodín por grupo mkdir -p codigo/practicas codigo/examenes apuntes multimedia mv practica*.c codigo/practicas/ ls *.tmp && rm -i *.tmp # mirar antes de borrar
| Síntoma | Causa probable |
|---|---|
No such file or directory | Estás en otra carpeta, sobra una / delante o hay una mayúscula mal |
cp: -r not specified; omitting directory | Copiar una carpeta sin -r: no se ha copiado nada |
rm: cannot remove 'x': Is a directory | rm sin -r sobre una carpeta (usa rmdir si está vacía) |
rmdir: failed to remove 'x': Directory not empty | La carpeta tiene algo: mira con ls antes de nada |
mkdir: cannot create directory 'a/b' | Falta la carpeta intermedia: usa mkdir -p |
cd: too many arguments | Un nombre con espacios sin comillas |
ls: cannot access '*.pdf' | El comodín no encaja con ningún archivo |
Ha desaparecido todo tras un rm con comodín | Un espacio dentro del patrón (* .tmp) |
Antes de entregar, pregúntate:
- ¿He hecho
pwdantes de crear, mover o borrar? - ¿He comprobado con
ls(oecho) qué expande cada comodín antes de usarlo conrm? - ¿He copiado las carpetas con
-ry he leído los avisos decp? - ¿Tengo una copia de seguridad (o la carpeta compartida) antes de cualquier
rm -r?
Con esto cierras los comandos básicos. El siguiente paso es Permisos en Linux: por qué /etc es de root, qué significa el rw-r--r-- de ls -l y cómo cambiarlo con chmod. Si te has saltado algo, vuelve a la teoría o a la práctica.
¿Te ha servido este artículo? Así puedes apoyar SergioLearns →




Qué es un sistema operativo — teoría con tu portátil en una tarde de estudio, una llamada a write() y la CPU que nunca descansa (y los tres programas que no se ejecutaban a la vez)