El Shell Bash de GNU/Linux 5.6 – Comandos para trabajar con archivos y carpetas
- El Shell Bash de GNU/Linux 1 – Introducción
- El Shell Bash de GNU/Linux 2 – Tuberías y filtros
- El Shell Bash de GNU/Linux 3 – Variables de entorno
- El Shell Bash de GNU/Linux 4 – Expresiones regulares
- El Shell Bash de GNU/Linux 5 – Sistema de ficheros
- El Shell Bash de GNU/Linux 5.1 – El árbol de directorios estándar
- El Shell Bash de GNU/Linux 5.2 – Tipos de ficheros
- El Shell Bash de GNU/Linux 5.3 – nombres, rutas absolutas y relativas
- El Shell Bash de GNU/Linux 5.4 – Permisos
- El Shell Bash de GNU/Linux 5.5 – Listar ficheros
- El Shell Bash de GNU/Linux 5.6 – Comandos para trabajas con archivos y carpetas
- El Shell Bash de GNU/Linux 5.7 – Otros comandos útiles
- El Shell Bash de GNU/Linux 5.8 – Montaje de sistemas de ficheros
5.6 – Comandos para trabajar con archivos y carpetas
pwd
Muestra la ruta absoluta del directorio actual, directorio en el que nos encontramos o directorio de trabajo.
Cada vez que un usuario se conecta al sistema, o nada más salir a la terminal, se nos posiciona en nuestra carpeta de trabajo ($HOME), /home/jblanco por ejemplo.
cd
Cambia el directorio de trabajo.
Si se utiliza la orden cd sin argumentos, te sitúa directamente en tu directorio $HOME.
cd → te lleva a tu carpeta personal (/home/jblanco)
Su sintaxis es:
cd [camino]
Si queremos ir a un directorio determinado sustituiremos camino por la ruta absoluta o relativa del directorio.
Ejemplos:
cd ..
Nos sitúa en el directorio padre del directorio actual. Es decir sube un nivel en la jerarquía de carpetas.
cd /home/jblanco/Documentos
Nos sitúa en el directorio Documentos utilizando para ello una ruta absoluta que empieza por ‘/’ (la raíz del sistema de archivos Linux).
cd ; cd ../ppalotes/Documentos
Me sitúo primero en mi directorio de trabajo /home/jblanco y después (‘;’ punto y coma) en los Documentos de ppalotes usando ruta relativa.
ls
Muestra el contenido de un directorio.
Opciones:
- -F ejecutable (*), directorio (/).
- -R listado recursivo
- -a lista todas las entradas
- -l listado en formato largo
- -h tamaños human friendly
- -t ordena por fecha de modificación
Ejemplos:
ls -la → formato largo de todos los archivos, incluido los archivos ocultos → empiezan por .
ls -ld */ → Lista sólo directorios en formato largo
ls -ld /etc/*/ → Lista solo los directorios de /etc en formato largo
ls -l|grep ^d → Lista todo y luego se queda solo con directorios usando grep
ls -l|grep ^- → Lista todo y luego se queda solo con archivos usando grep
NOTA: En un listado largo, en la primera columna, se puede apreciar que los archivos regulares empiezan por el carácter guión ‘-‘, mientras que los directorios lo hacen por la letra ‘d’.
mkdir
Crea un directorio. Permite crear uno o varios directorios.
Su sintaxis es:
mkdir [-p] [camino]
La opción –p permite que los directorios padre que no existan sean creados.
Ejemplos:
mkdir –p ../ejercicios/tema6
Crea el directorio tema6, y al utilizar la opción –p también crea el directorio padre ejercicios, si no existe todavía.
mkdir tema5
Crea el directorio tema5 sobre el directorio actual.
Ejercicio 1: ¿Que hace el siguiente comando?
mkdir -p ~/ejercicios/tema1 tema2 tema3 tema4
Ejercicio 2: ¿Que hace el siguiente comando?
mkdir -p /home/jblanco/ejercicios/{tema1,tema2,tema3,tema4}
Donde jblanco es un posible usuario del sistema.
rmdir
Borra un directorio, siempre y cuando esté vacío.
Su sintaxis es:
rmdir [camino]
Su funcionamiento es igual que la orden mkdir.
Ejemplos:
rmdir /home/jblanco/ejercicios/{tema1,tema2,tema3,tema4}
Borra los directorios:
/home/jblanco/ejercicios/tema1
/home/jblanco/ejercicios/tema2
/home/jblanco/ejercicios/tema3
/home/jblanco/ejercicios/tema4
rmdir ejercicios
Borra la carpeta /home/jblanco/ejercicios, suponiendo que yo me encuentro en mi carpeta $HOME.
Ficheros
file
Determina el tipo de un fichero. Útil si nos hemos descargado algo que dice ser un PDF, y nuestro visor no lo abre.
ubuntu@jblanco-u904:~$ file Documentos/
Documentos/: directory
Útil también si te bajas un comprimido o un vídeo y no tiene extensión, o bien si te descargas una imagen y lo mismo, no sabes si es JPG, PNG, GIF …
cat
Lee un fichero y muestra su contenido por pantalla.
Ejemplo:
cat /etc/passwd
Visualiza el fichero de usuarios.
Sin parámetros, lee de la entrada estándar:
cat > script.sh
>echo $PATH
>CTRL+D
Genera un archivo script.sh con la línea “echo $PATH” en su interior. Es una forma rápida de generar un mini archivo de texto.
El comando cat es muy útil, se utiliza en combinación de filtros como grep, cut y tr, para hacer búsquedas avanzadas en ficheros, filtros, etc.
Con el siguiente comando, podemos aislar del fichero de configuración /etc/login.defs los valores establecidos, es decir que no comiencen por almohadilla ‘#’ que es un comentario:
cat /etc/login.defs|grep -v “^#”|sort -u
Además ordeno la entrada mediante sort, quitando repetidos (-u) y eliminar algunas lineas en blanco.
En grep se usa la opción -v (justo las líneas que NO coincidan con el patrón de la expresión regular), y el patrón dice ^# lineas que comiencen por una almohadilla. Pues justo saca las lineas que NO comiencen por almohadilla.
touch
Da un toque a un archivo (actualiza fecha modificación) o lo crea vacío.
touch archivo
Ejemplo: Creamos pepito y listamos solo los que comiencen por “p”
touch pepito
ls -l p*
-rw-r–r– 1 ubuntu ubuntu 0 2016-02-21 19:01 pepito
cp
Su sintaxis es:
cp [opciones] fichero1 fichero2
Copia el contenido de “fichero1” en “fichero2”.
También se puede especificar el camino absoluto o relativo de cada uno de los ficheros.
Ejemplo:
cp coche.jpg fotos/coches/coche3.jpg
Copia el fichero coche.jpg desde el directorio actual hasta el directorio fotos/coches, con otro nombre coche3.jpg.
Las opciones más importantes son:
- -i pedirá confirmación si el fichero destino ya existe antes de sobrescribirlo.
- -r copia recursiva (un directorio junto con sus ficheros y subdirectorios) en otro directorio. Si el directorio destino no existe, lo crea.
Ejemplos
Cuando se utilizan varios ficheros para copiar, el destino tiene que ser un directorio.
cp coche1.jpg coche2.jpg fotos/coches
Copia los archivos coche1.jpg y coche2.jpg al directorio fotos/coches.
Verificando
cp –i coche1.jpg fotos/coches
Copia el archivo coche1.jpg en el directorio fotos/coches, pidiendo confirmación para sobrescribirlo, puesto que ya hay un archivo con ese nombre, en ese directorio
Recursivo
cp –r ejercicios so/pruebas
Copiamos el directorio ejercicios y todo su contenido al directorio so, en un nuevo directorio que creamos al hacer la copia, llamado pruebas.
rm
Borra ficheros y directorios (r indica comportamiento recursivo → para borrar directorios).
Su sintaxis es:
rm [opciones] fichero/s
Sus opciones más notorias son estas:
- -r borra recursivamente. Se emplea para borrar directorios.
- -f borra todos los ficheros sin confirmación.
- -i pide confirmación para borrar cada fichero.
Ejemplos:
rm –f fich1 fich2 → Borra los ficheros fich1 y fich2 del directorio actual sin pedir confirmación.
rm –r pruebas → Borra el directorio pruebas y todo su contenido recursivamente. Solicita la confirmación.
El comando más peligroso de Linux es:
sudo rm -rf /
No lo utilicéis nunca!!!
mv
Mueve o renombra ficheros y directorios dentro del sistema de ficheros. Sus posibles sintaxis son:
Renombrar:
a) mv [opciones] fichero1 fichero2
b) mv [opciones] directorio1 nuevo_directorio
Mover:
c) mv [opciones] fichero/s directorio
d) mv [opciones] directorio1 directorio2
Las opciones más importantes son:
- -i si el fichero destino existe, pide confirmación antes de sobrescribirlo.
- -f es la opción por defecto. Si el fichero existe, lo sobrescribe sin pedir confirmación.
Ejemplos:
mv so sistemas_operativos → Cambia el nombre del directorio so por sistemas_operativos.
mv ud1 ud2 sistemas_operativos → Mueve los ficheros ud1 y ud2 al directorio sistemas_operativos.
mv pruebas sistemas_operativos → Mueve los directorios y ficheros del directorio pruebas al directorio sistemas_operativos.
find
Busca los ficheros que satisfacen la expresión de búsqueda a partir de los directorios señalados, y devuelve rutas absolutas a los ficheros resultado.
La orden find permite efectuar búsquedas muy potentes de archivos.
Lleva como argumentos los nombres de directorios seguidos de varias opciones que especifican el tipo y el criterio de la búsqueda.
Además es posible ejecutar una acción con los resultados.
Su sintaxis es:
find directorio [condiciones] acción
Donde:
directorio es el directorio a partir del cual comienza la búsqueda.
condiciones se puede substituir por:
–name patrón → Búsqueda por el nombre del fichero.
–iname patrón → Búsqueda por el nombre del fichero insensible a MAYS/MINS.
-type f,d,l,etc. → Búsqueda por el tipo del fichero (f: fichero, d: directorio, …).
-perm NNN → Búsqueda por la máscara de permisos en octal.
-user nombre_usuario → Búsqueda por el nombre de usuario.
-size n → Fichero con tamaño n bloques.
Existen más unidades: c byte, k kilobyte, M mega, G giga
+ mayor que, – menor que, sin signo igual al tamaño
-mtime n → Ficheros modificados hace n días.
-atime n → Ficheros cuyo último acceso fue hace n días.
acción indica la acción a realizar con los ficheros encontrados:
-print (por defecto)
-delete (cuidado)
-exec (la más potente)
-ok (igual que exec pero pide confirmación)
Por defecto cada expresión de la condición o criterio va unida por and, explícitamente –a.
find . -type f -name *.pdf -size +100k -ls
→ ficheros terminados en .pdf de más de 100KB
También podemos unir las expresiones por or utilizando para unir expresiones –o.
find / -name “*.txt” -o -name “*.java”
→ ficheros de texto o fuentes de java
Se pueden poner paréntesis pero utilizando la barra \ para “escaparlos” \( expresiones \) separándolos de la expresión por un espacio a cada lado:
find $HOME -type f \( -name *.txt -o -name *.c \) -ls
→ ficheros (f) AND que terminen en .txt OR .c, con los resultados usamos la acción listar (-ls)
Se pueden realizar acciones para los ficheros que cumplan las condiciones, mediante las acciones -exec y -ok.
find ruta opciones –exec comando {} \;
find ruta opciones –ok comando {} \;
Las llaves {} representan cada uno de los resultados de búsqueda. Es como iterar en un bucle. El final ‘\;’ es para impregnar el caracter punto y coma ‘;’ separador de comandos, pero tenemos la necesidad de ‘escaparlo‘ mediante la barra invertida ‘\’.
Ejemplos:
find /media/iphone –iname “*.mp3”
Se busca en el directorio /media/iphone todos los ficheros MP3, sin importar MAYS/MINS (iname), y se muestran (–print por defecto)
find /media/iphone –iname “*.mp3” -exec cp {} ~/Música \;
Ahora, además los copia a mi carpeta Música.
find programas –name ‘*.c’ –delete
Se busca en el directorio programas ficheros de extensión .c y se borran.
Se pueden usar los meta-caracteres comodín del Shell como parte del patrón del criterio de búsqueda de archivos. En ese caso se recomienda encerrar entre comillas dobles.
find es posiblemente junto a grep y sed uno de los comandos más potentes de Linux. De hecho son la base de los scripts, ya que casi todos los problemas a resolver partirán de una búsqueda.
resultados=`find / -name *.c`
Asigna a la variable resultado la salida del comando find, es decir un fichero en memoria con una ruta absoluta para cada coincidencia del patrón *.c en todo el sistema de archivos /.
Si no queremos ver errores en pantalla, podemos redireccionar la salida estándar de errores a /dev/null, es el cubo de basura en Linux.
resultados=`find / -name *.c 2> /dev/null`
Después con un bucle for podemos iterar por esos resultados.
for i in $resultados ; do echo $i; done
Nos vemos pronto en el siguiente capítulo.
- El Shell Bash de GNU/Linux 1 – Introducción
- El Shell Bash de GNU/Linux 2 – Tuberías y filtros
- El Shell Bash de GNU/Linux 3 – Variables de entorno
- El Shell Bash de GNU/Linux 4 – Expresiones regulares
- El Shell Bash de GNU/Linux 5 – Sistema de ficheros
- El Shell Bash de GNU/Linux 5.1 – El árbol de directorios estándar
- El Shell Bash de GNU/Linux 5.2 – Tipos de ficheros
- El Shell Bash de GNU/Linux 5.3 – nombres, rutas absolutas y relativas
- El Shell Bash de GNU/Linux 5.4 – Permisos
- El Shell Bash de GNU/Linux 5.5 – Listar ficheros
- El Shell Bash de GNU/Linux 5.6 – Comandos para trabajas con archivos y carpetas
- El Shell Bash de GNU/Linux 5.7 – Otros comandos útiles
- El Shell Bash de GNU/Linux 5.8 – Montaje de sistemas de ficheros
Pingback: El Shell Bash de GNU/Linux 5.2 – Tipos de ficheros | SOSpedia punto net
Pingback: El Shell Bash de GNU/Linux 5.4 – Permisos | SOSpedia punto net
Pingback: El Shell Bash de GNU/Linux 5.7 – Otros comandos útiles | SOSpedia punto net
Pingback: El Shell Bash de GNU/Linux 5 – Sistema de ficheros | SOSpedia punto net
Pingback: El Shell Bash de GNU/Linux 4 – Expresiones regulares | SOSpedia punto net
Pingback: El Shell Bash de GNU/Linux 5.1 – El árbol de directorios estándar | SOSpedia punto net
Pingback: Bonus Pack 2018: Recopilación de artículos de sospedia.net – Clases fp