El Shell Bash de GNU/Linux 5.6 – Comandos para trabajar con archivos y carpetas

  1. El Shell Bash de GNU/Linux 1 – Introducción
  2. El Shell Bash de GNU/Linux 2 – Tuberías y filtros
  3. El Shell Bash de GNU/Linux 3 – Variables de entorno
  4. El Shell Bash de GNU/Linux 4 – Expresiones regulares
  5. El Shell Bash de GNU/Linux 5 – Sistema de ficheros
  6. El Shell Bash de GNU/Linux 5.1 – El árbol de directorios estándar
  7. El Shell Bash de GNU/Linux 5.2 – Tipos de ficheros
  8. El Shell Bash de GNU/Linux 5.3 – nombres, rutas absolutas y relativas
  9. El Shell Bash de GNU/Linux 5.4 – Permisos
  10. El Shell Bash de GNU/Linux 5.5 – Listar ficheros
  11. El Shell Bash de GNU/Linux 5.6 – Comandos para trabajas con archivos y carpetas
  12. El Shell Bash de GNU/Linux 5.7 – Otros comandos útiles
  13. 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.

  1. El Shell Bash de GNU/Linux 1 – Introducción
  2. El Shell Bash de GNU/Linux 2 – Tuberías y filtros
  3. El Shell Bash de GNU/Linux 3 – Variables de entorno
  4. El Shell Bash de GNU/Linux 4 – Expresiones regulares
  5. El Shell Bash de GNU/Linux 5 – Sistema de ficheros
  6. El Shell Bash de GNU/Linux 5.1 – El árbol de directorios estándar
  7. El Shell Bash de GNU/Linux 5.2 – Tipos de ficheros
  8. El Shell Bash de GNU/Linux 5.3 – nombres, rutas absolutas y relativas
  9. El Shell Bash de GNU/Linux 5.4 – Permisos
  10. El Shell Bash de GNU/Linux 5.5 – Listar ficheros
  11. El Shell Bash de GNU/Linux 5.6 – Comandos para trabajas con archivos y carpetas
  12. El Shell Bash de GNU/Linux 5.7 – Otros comandos útiles
  13. El Shell Bash de GNU/Linux 5.8 – Montaje de sistemas de ficheros

7 comments

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.