Operaciones Con Ficheros y Directorios

Table of contents

Ubicación En El Sistema De Archivos

En cualqiuer momenta dado cuando entramos a un sistema de Linux, nos encontraremos en un directorio el cual puede o no contener archivos.

Es importante mantener la referencia a el directorio de inicio principal, lo podemos llamar directorio hogar que se denota con ~ or $HOME. En cualquier comando que entremos, podemos usar ~ como el punto de referencia a nuestro directorio de inicio.

No importa donde estemos en el estructura de directorios siempre podemos volver a la base usando el comando cd de esta manera:

-> cd

-> cd ~

-> cd $HOME

Comandos Para Navegar Directorios y Ficheros

Los comands básicos de navegación en la linea de comandos son ls y cd. Podemos usar una variedad de opciones o banderas para influenciar la salida de los comandos.

Con mucha frecuencia usaremos los comados siguientes:

ls
listar archivos y ficheros
mkdir
crear directorios
cd
cambiar a un directorio
cp
copiar ficheros o directorios
mv
renombrar ficheros o directorios
rm
borrar ficheros o directorios
touch
utilidad para crear un fichero o actualizar fecha de creación
echo
usado para representar texto en la terminal
tree
utilidad para mostrar el árbol completo de la localidad designada

Estos comandos son de uso universal y funcionan de la misma manera en cualquier sistema operativo variante de RHEL o Debian.

Cada comando tiene opciones que alteran la salida del comando.

Crear Directorios y Ficheros

An algun momento habrá la necesidad de agrupar información acerca de un tema. Esto se logra creado directorios en los que podemos guardar los archivos de interes.

La sintaxis general para crear directorios es asi:

mkdir [opciones] /paso/a/diretorio

Crear un directorio.

-> mkdir data

Crear un subdirectorio (directorio dentro de otro directorio).

-> mkdir data/pets

Crear una cadena de directorio y subdirectorios en un solo paso usando la opción -p.

-> mkdir -p dir/subdir2/subdir2

Cambiar a un directorio.

-> cd data
-> cd dir/subdir2/

Crear un fichero con el comando touch.

-> touch datafile1.txt

Crear un fichero con el comando echo. En este ejemplo, el fichero esta en un subdirectorio.

echo "fichero de Camoa" > data/pets/camoa.txt

Crear un directory escondido

-> mkdir .hidden_directory

Crear un fichero escondido usando el editor VI.

-> vi .hidden_file

Listar Directorios y Ficheros

En sistemas donde no hay interfaz gráfico solo podemos usar el indicador. La interacción en el indicador, o linea de comandos, es en texto puro. Asi que estamos limitados a usar comando para navegar archivos y carpetas.

La sintaxis general para listar directorios y ficheros es asi:

  • el comando ls
  • opciones del comando
  • localidad a listar
    ls [opciones] /paso/a/diretorio
    ls [opciones] /paso/a/diretorio/fichero
    

Veremos a continuación el uso general del comando ls para listar contenido.

Listar el contenido de un directorio.
La linea que contiene el símbolo / al final, indica que es un directorio. Los demas son ficheros.

-> ls data/
datafile1.txt
datafile2.txt
pets/

Listar un solo fichero en un directorio.

-> ls data/datafile1.txt
data/datafile1.txt

Listar ficheros en formato largo usando la opción -l.

->  ls -l data/
total 8
-rw-r--r-- 1 root root    0 Jun 11 02:06 datafile1.txt
-rw-r--r-- 1 root root   13 Jun 11 02:06 datafile2.txt
drwxr-xr-x 2 root root 4096 Jun 11 02:37 pets/

un guión - al inicio de la linea indica que es un fichero regular

la letra d al principio de la linea, y el simbolo / al final de la linea. indica que es un directorio.

Listar ficheros multiples usando el asterisco *.

-> ls -l data/datafile*
-rw-r--r-- 1 root root  0 Jun 11 02:06 data/datafile1.txt
-rw-r--r-- 1 root root 13 Jun 11 02:06 data/datafile2.txt

-> ls -l data/*.txt
-rw-r--r-- 1 root root  0 Jun 11 02:06 data/datafile1.txt
-rw-r--r-- 1 root root 13 Jun 11 02:06 data/datafile2.txt

ls -l data/data*.w
-rw-r--r-- 1 root root  0 Jun 11 02:06 data/datafile1.txt
-rw-r--r-- 1 root root 13 Jun 11 02:06 data/datafile2.txt

Listar ficheros usando expresiones regulares 1.

-> ls -l data/datafile[0-9]*.txt
-rw-r--r-- 1 root root  0 Jun 11 02:06 data/datafile1.txt
-rw-r--r-- 1 root root 13 Jun 11 02:06 data/datafile2.txt

Usar el comando tree para listar el contenido entero de una localidad.

-> tree
.
|-- Downloads
|-- MyDocuments
|-- data
|   |-- datafile1.txt
|   |-- datafile2.txt
|   `-- pets
|       `-- camoa.txt
`-- temp

Listar contenido en forma recursiva con la opción -R. Esto es útil cuando queremos encontrar un fichero pero no sabemos exactamente donde se encuentra.

-> ls -lR data
data:
total 8
-rw-r--r-- 1 root root    0 Jun 11 02:06 datafile1.txt
-rw-r--r-- 1 root root   13 Jun 11 02:06 datafile2.txt
drwxr-xr-x 2 root root 4096 Jun 11 03:53 pets/

data/pets:
total 4
-rw-r--r-- 1 root root 94 Jun 11 02:37 camoa.txt

Listar solo directorios usando la opcíon -d

-> ls -ld *
drwxr-xr-x 2 root root 4096 Jun 11 00:12 Downloads/
drwxr-xr-x 2 root root 4096 Jun 11 00:12 MyDocuments/
drwxr-xr-x 2 root root 4096 Jun 11 02:06 data/
drwxr-xr-x 2 root root 4096 Jun 11 00:12 temp/

Listar solo directorios usando ^d.

-> ls -l | grep ^d
drwxr-xr-x 2 root root 4096 Jun 11 00:12 Downloads/
drwxr-xr-x 2 root root 4096 Jun 11 00:12 MyDocuments/
drwxr-xr-x 2 root root 4096 Jun 11 02:06 data/
drwxr-xr-x 2 root root 4096 Jun 11 00:12 temp/

Listar solo ficheros usando ^-.

-> ls -l | grep ^-
-rw-r--r-- 1 root root    0 Jun 11 02:06 datafile1.txt
-rw-r--r-- 1 root root   13 Jun 11 02:06 datafile2.txt

Listar ficheros con la opción -t usada para mostrar los articulos que han sido modificados mas recientememte. Por defecto, mostrara la entrada mas reciente al principio de la lista.

-> ls -lt
total 16
drwxr-xr-x 3 root root 4096 Jun 11 02:35 data/
drwxr-xr-x 2 root root 4096 Jun 11 00:12 temp/
drwxr-xr-x 2 root root 4096 Jun 11 00:12 Downloads/
drwxr-xr-x 2 root root 4096 Jun 11 00:12 MyDocuments/

Lo mismo que arriba, pero usando la opción -r para clasificar la salida en reverso con lo mas reciente listado por ultimo.

-> ls -ltr
total 16
drwxr-xr-x 2 root root 4096 Jun 11 00:12 MyDocuments/
drwxr-xr-x 2 root root 4096 Jun 11 00:12 Downloads/
drwxr-xr-x 2 root root 4096 Jun 11 00:12 temp/
drwxr-xr-x 3 root root 4096 Jun 11 02:35 data/

Listar el inode correspondiente a un fichero usando la opción -i.

-> ls -li data/pets/camoa.txt
3044362 -rw-r--r-- 1 root root 94 Jun 11 02:37 data/pets/camoa.txt

Listar las stadisticas completas de un fichero.

-> stat data/pets/camoa.txt
  File: data/pets/camoa.txt
  Size: 94        	Blocks: 8          IO Block: 4096   regular file
Device: b2h/178d	Inode: 3044362     Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2023-06-11 02:37:53.148264837 +0000
Modify: 2023-06-11 02:37:53.148264837 +0000
Change: 2023-06-11 02:37:53.149171904 +0000
 Birth: 2023-06-11 02:37:53.148264837 +0000

Mostrar el tamaño de un fichero usando la opción -h, que indica notación humana legible.

-> ls -lh data/pets/camoa.txt
-rw-r--r-- 1 root root 94 Jun 11 02:37 data/pets/camoa.txt

La opción -h en conjunto con -l y -s muestran el tamaño del fichero como 1K 234M 2G etc. En el ejemplo anterior, el fichero es de 94K de tamaño.

Copiar Directorios y Ficheros

La sintaxis general para copiar directorios y ficheros es asi:

cp [opciones] /paso/a/diretorio /paso/a/diretorio-nuevo
cp [opciones] /paso/a/diretorio/fichero  /paso/a/diretorio/fichero-nuevo

En este ejemplo, tenenos el fichero camoa.txt y lo compiamos a un nuevo fichero pantera.txt.

-> ls -l
-rw-r--r-- 1 root root 94 Jun 11 02:37 camoa.txt

-> cp camoa.txt pantera.txt

-> ls -l
-rw-r--r-- 1 root root 94 Jun 11 02:37 camoa.txt
-rw-r--r-- 1 root root 94 Jun 11 03:50 pantera.txt

Copiar directorios requiere la opción -r porque casi siempre los directorios no estan vacios. Aqui copiamos el directorio pets a animals.

-> ls -l
drwxr-xr-x 2 root root 4096 Jun 11 03:53 pets/

-> cp -r pets animals

-> ls -l
drwxr-xr-x 2 root root 4096 Jun 12 04:04 animals/
drwxr-xr-x 2 root root 4096 Jun 11 03:53 pets/

Renombrar Directorios y Ficheros

La sintaxis general para renombrar directorios y ficheros es asi:

mv [opciones] /paso/a/diretorio /paso/a/diretorio-nuevo
mv [opciones] /paso/a/diretorio/fichero  /paso/a/diretorio/fichero-nuevo

Aqui decidimos cambiar el nombre del archivo pantera.txt a obsidian.txt.

-> ls -l
-rw-r--r-- 1 root root 94 Jun 11 02:37 camoa.txt
-rw-r--r-- 1 root root 94 Jun 11 03:50 pantera.txt

-> mv pantera.txt obsidian.txt

-> ls -l
-rw-r--r-- 1 root root 94 Jun 11 02:37 camoa.txt
-rw-r--r-- 1 root root 94 Jun 11 03:50 obsidian.txt

De manera similar, podemos renombrar un directorio o subdirectorio.

-> mv dir1 dir2

-> mv ~/dir1/subdir1  ~/dir1/subdir2

Borrar Directorios y Ficheros

La sintaxis general para borrar directorios y ficheros es asi:

rm [opciones] /paso/a/diretorio /paso/a/diretorio-nuevo
rm [opciones] /paso/a/diretorio/fichero  /paso/a/diretorio/fichero-nuevo

Finalmente, decidimos borrar el archivo obsidian.txt.

-> rm obsidian.txt

Borrar directorios requiere la opción r si tiene ficheros.

Debe observarse mucho cuidado al usar rm -rf puesto que es un comando muy destructivo causando daños irreversibles.

el símbolo ~ indica que esta directamente bajo el directorio de inicio

-> rm -r ~/directorio

Podemos usar la opción -f para evitar la confirmación por cada articulo a borrar.

-> rm -rf [fichero|directorio]

Se puede borrar mas de un fichero o directorio a la vez.

-> rm -rf fichero1 fichero2 dir/fichero3

-> rm -rf directorio1 dir/subdir

Ficheros y Directorios Escondidos

El sistema operativo puede mantener ciertos ficheros fuera de la vista con el propósito de proteger información importante y prevenir que sea alterada o borrada accidentalmente. Un fichero escondido es generalmente estático y no de uso general, es decir, modificaciones a ficheros escondidos son muy infrequentes.

Se dice que un fichero o directorio es escondido cuando el primer símbolo en el nombre es un punto . seguido por letras y números, por ejemplo .bashrc

Enseguida listemos ficheros y directorios escondidos usando las opciónes siguientes:

  • -a para mostrar ficheros escondidos
  • -l para producir una lista extendida
    -> ls -la /root
    total 88
    drwx------ 1 root root  4096 Jun 11 02:37 ./
    drwxr-xr-x 1 root root  4096 Jun 10 23:55 ../
    -rw-r--r-- 1 root root  2896 Jun 11 00:01 .aliasrc
    -rw------- 1 root root   591 Jun 11 00:09 .bash_history
    -rw-r--r-- 1 root root   149 Jun 11 00:11 .bash_profile
    -rw-r--r-- 1 root root   466 Jun 11 00:09 .bashrc
    drwxr-xr-x 2 root root  4096 Jun 11 00:12 Downloads/
    drwxr-xr-x 2 root root  4096 Jun 11 00:12 MyDocuments/
    drwxr-xr-x 3 root root  4096 Jun 11 02:35 data/
    drwxr-xr-x 2 root root  4096 Jun 11 00:12 temp/
    

Por defecto, el comando ls muestra . que indica el directorio corriente y .. que indica un directorio arriba. Para omitir . y .. podemos usar la opción -A asi:

-> ls -lA /root
total 88
-rw-r--r-- 1 root root  2896 Jun 11 00:01 .aliasrc
-rw------- 1 root root   591 Jun 11 00:09 .bash_history
-rw-r--r-- 1 root root   149 Jun 11 00:11 .bash_profile
-rw-r--r-- 1 root root   466 Jun 11 00:09 .bashrc
drwxr-xr-x 2 root root  4096 Jun 11 00:12 Downloads/
drwxr-xr-x 2 root root  4096 Jun 11 00:12 MyDocuments/
drwxr-xr-x 3 root root  4096 Jun 11 02:35 data/
drwxr-xr-x 2 root root  4096 Jun 11 00:12 temp/

Todas las operaciones tales como copiar, renombrar, mover, etc, se aplica igualmente a ficheros y directorios escondidos.

Paso Absoluto vs Paso Relativo

El paso absoluto de un archivo o directorio se refiere a el paso que se sigue desde la raíz del sistema hasta su lugar final.

El paso relativo se refiere a la localización en relación al punto donde nos encontramos en el sistema de archivos.

Veamos un ejemplo.

El usuario devuser esta en su directorio de inicio /home/devuser con la structura mostrada. Usamos el comando pwd para verificar donde nos encontramos, y el comando tree para visualizar la estructura del directorio. El símbolo ~ indica que nos encontramos en el directorio de inicio del usuario.

devuser@ubuntu1 [ DevEsp ]
~
hist:13 -> pwd
/home/devuser

devuser@ubuntu1 [ DevEsp ]
~
hist:14 -> tree
.
|-- Downloads
|-- MyDocuments
|-- data
|   |-- animals
|   |   `-- camoa.txt
|   |-- datafile1.txt
|   |-- datafile2.txt
|   `-- pets
|       `-- camoa.txt
|-- mydir
|   |-- dir1
|   |   |-- subdir1
|   |   |-- subdir2
|   |   `-- subdir3
|   `-- dir2
|       |-- subdir1
|       |-- subdir2
|       `-- subdir3
`-- temp

Esto muestra como listar el fichero camoa.txt usando el paso absoluto.

devuser@ubuntu1 [ DevEsp ]
~
hist:15 ->  ls -l /home/devuser/data/pets/camoa.txt
-rw-r--r-- 1 devuser devuser 94 Jun 14 04:50 /home/devuser/data/pets/camoa.tx

Luego el usuario se cambia al directorio mydir/dir1 y desde allí lista el fichero camoa.txt usando el paso relativo, es decir, el paso con respecto as su posición en la estructura del directorio.

devuser@ubuntu1 [ DevEsp ]
~
hist:15 -> cd mydir/dir1

devuser@ubuntu1 [ DevEsp ]
~/mydir/dir1
hist:16 -> ls -l ../../data/pets/camoa.txt
-rw-r--r-- 1 devuser devuser 94 Jun 14 04:50 ../../data/pets/camoa.txt

Usamos dos puntos .. para indicar que vamos a escalar un posición arriba; hacemos esto cuantas veces sea necesario para localizar el recurso fuera del directorio donde nos encontramos.

Referencias

Paginas Manuales

Return to main page.

  1. Discutiremos expresiones regulares extensamente en otro articulo.