Comandos de Linux relacionados con el sistema de archivos

Share on facebook
Share on twitter
Share on linkedin
Share on whatsapp
Share on telegram
Share on email

Linux trata a todos los dispositivos como si fuesen archivos. Es decir, para él, la configuración de una impresora, una pantalla, un teclado o un disco duro es un archivo que tiene una entrada correspondiente de dispositivo en el sistema.

Cada distribución de Linux o de UNIX, en general, tiene sus propias características. Esto quiere decir que un expero en AIX no necesariamente tiene por qué saber de HP-UX o de RedHat.

No obstante, existe un estandar respecto al sistema de archivos que se cumple en todos los UNIX.

  • /dev: Contiene todos los ficheros de dispositivos, tal y como comentaba anteriormente.
  • /var: Es un filesystem que contiene información variable.
    • adm: Información de administración del sistema.
    • log: Guarda archivos con información del sistema y otras aplicaciones que van guardando ahí su actividad, errores, etc.
    • run: Encontraremos información sobre los procesos que están en ejecución.
[[email protected]]# ll
total 100
drwxr-xr-x. 2 root root 4096 Jun 24 2016 account
drwxr-xr-x. 15 root root 4096 Jun 24 2016 cache
drwxr-xr-x. 2 root root 4096 Oct 20 2016 crash
drwxr-xr-x. 2 root root 4096 Jun 24 2013 cvs
drwxr-xr-x. 4 root root 4096 Jun 24 2016 db
drwxr-xr-x. 3 root root 4096 Jun 24 2016 empty
drwx------. 3 hpeserviceaccount hpeserviceaccount 4096 Oct 18 2016 hpesm
drwx--x--x. 3 root root 4096 Oct 19 2016 install
drwxr-xr-x. 37 root root 4096 Oct 13 03:29 lib
drwxr-xr-x. 2 root root 4096 Jun 28 2011 local
drwxrwxr-x. 6 root lock 4096 Oct 13 03:29 lock
drwxr-xr-x. 21 root root 4096 Oct 13 11:51 log
drwx------. 2 root root 16384 Jun 24 2016 lost+found
lrwxrwxrwx. 1 root root 10 Jun 24 2016 mail -> spool/mail
drwxr-xr-x. 2 root root 4096 Jun 28 2011 nis
drwxr-xr-x. 10 root sys 4096 Oct 19 2016 opt
drwxr-xr-x. 2 root root 4096 Jun 28 2011 preserve
drwxr-xr-x. 28 root root 4096 Jul 19 22:28 run
drwxr-xr-x. 15 root root 4096 Jul 6 18:28 spool
drwxrwxrwt. 3 root root 4096 Oct 13 12:15 tmp
drwxrwxrwt. 2 root root 4096 Mar 22 2017 VRTSat_lhc
drwxr-xr-x. 8 root root 4096 Jul 12 2016 www
drwxr-xr-x. 2 root root 4096 Jun 28 2011 yp
[[email protected]]#
  • /usr: Directorios de trabajo de las aplicaciones.
  • /proc: Tenemos información sobre el sistema (tipo de CPU, uso de memoria, modelos de disco, etc.).

Ejemplo:

[root]# cat /proc/cpuinfo 
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 63
model name : Intel(R) Xeon(R) CPU E5-4650 v3 @ 2.10GHz
stepping : 2
microcode : 46
cpu MHz : 2097.570
cache size : 30720 KB
physical id : 0
siblings : 1
core id : 0
cpu cores : 1
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 15
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts xtopology tsc_reliable nonstop_tsc aperfmperf unfair_spinlock pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm ida arat epb pln pts dtherm fsgsbase smep cqm_llc cqm_occup_llc
bogomips : 4195.14
clflush size : 64
cache_alignment : 64
address sizes : 40 bits physical, 48 bits virtual
power management:
  • /opt: Directorio de instalación de las aplicaciones.
  • /etc: Ficheros de configuración del sistema operativo y aplicaciones.
  • /bin y /sbin: Ficheros binarios, es decir, son los ejecutables de las aplicaciones.

Hay más directorios pero, para empezar, con estos ya nos manejamos.

LG 34WN750-B - Monitor UltraWide Plano, Panel IPS 3440x1440, 219, 300nit, 10001,...
  • Monitor 34 " Ultra Wide 21:9, Quad HD 3440 x1440
  • HDR 10 (High Dynamic Range); 300 cd/m 2; color calibrado
  • Panel IPS para una visión óptima desde cualquier ángulo (16.7 m colores - sRGB 99 %)

A continuación, voy a explicar algunas de las tareas más sencillas para aprender a manejarse por el sistema de archivos:

Consultar el contenido de un directorio en Linux

Utilizaremos el comando ls. En el siguiente ejemplo, además muestro los permisos y el propietario de cada archivo y directorio e incluyo los ficheros ocultos:

[[email protected] ~]# ls -l
total 148
drwxr-xr-x 5 root root     66 Sep 11 17:18 amzn-drivers
-rw-r--r-- 1 root root   3840 Jan 16  2018 binance_all_asks_venta_BNB_sort.html
-rw-r--r-- 1 root root   4025 Jan 16  2018 binance_all_bids_compra_BNB_sort.html
-rwxr--r-- 1 root root   5271 Dec 10 09:41 drop_tables.sh
-rw-r--r-- 1 root root   2822 Dec 10 13:01 drop_tables.sql
-rw-r--r-- 1 root root 112019 Dec 17 10:02 index.html
-rw-r--r-- 1 root root   5816 Dec 10 08:37 rename_tables_puerto53.sql
-rwxr--r-- 1 root root   4510 Dec 10 08:34 rename_tables.sh
[[email protected] ~]#

Mostrar los archivos ocultos

Con el comando anterior hemos sacado un listado de los archivos de un directorio, pero no muestra los archivos ocultos. Para ello, tenemos que añadir el parámetro «a» al comando «ls». Veamos un ejemplo:

[[email protected] ~]# ls -la
total 220
dr-xr-x---.  8 root root   4096 Jan 26 06:47 .
dr-xr-xr-x. 22 root root   4096 Oct 15 10:47 ..
drwxr-xr-x   5 root root     66 Sep 11 17:18 amzn-drivers
drwxr-xr-x   2 root root     39 Oct  2 21:31 .aws
-rw-------.  1 root root  18987 Jan 25 21:32 .bash_history
-rw-r--r--.  1 root root     18 Dec 29  2013 .bash_logout
-rw-r--r--.  1 root root    176 Dec 29  2013 .bash_profile
-rw-r--r--   1 root root    179 Jan 14  2018 .bashrc
-rw-r--r--   1 root root   3840 Jan 16  2018 binance_all_asks_venta_BNB_sort.html
-rw-r--r--   1 root root   4025 Jan 16  2018 binance_all_bids_compra_BNB_sort.html
drwx------   3 root root     17 Sep 22  2017 .cache
-rw-r--r--.  1 root root    100 Dec 29  2013 .cshrc
-rwxr--r--   1 root root   5271 Dec 10 09:41 drop_tables.sh
-rw-r--r--   1 root root   2822 Dec 10 13:01 drop_tables.sql
drwx------   2 root root     99 Oct  7 08:05 .gnupg
-rw-r--r--   1 root root 112019 Dec 17 10:02 index.html
-rw-------   1 root root    272 Oct 25 15:56 .lesshst
-rw-------   1 root root  13940 Jan 21 08:37 .mysql_history
drwxr-----.  3 root root     19 Sep 19  2017 .pki
-rw-r--r--   1 root root   5816 Dec 10 08:37 rename_tables_puerto53.sql
-rwxr--r--   1 root root   4510 Dec 10 08:34 rename_tables.sh
-rw-------   1 root root   1024 Jan  9 06:53 .rnd
drwx------.  2 root root     48 Oct 11  2017 .ssh
-rw-r--r--.  1 root root    129 Dec 29  2013 .tcshrc
[[email protected] ~]#

Como podemos ver, todos los archivos que empiezan por punto son archivos ocultos.

Crear un directorio en Linux

Un directorio sirve para agrupar ficheros y otros subdirectorios en un lugar del sistema operativo. Si lo comparamos con Windows, sería una carpeta.

[[email protected] ~]$ mkdir contactos 
[[email protected] ~]$ ls -l total 0
 drwxrwxr-x 2 usuario1 usuario1 6 oct 27 19:40 contactos
[[email protected] ~]$

Para eliminar un directorio de manera recursiva, ejecutaremos el comando rm -r directorio.

Entrar y salir de un directorio

  • Entrar
[[email protected] ~]$ cd contactos
[[email protected] contactos]$ ls vocales.txt
[[email protected] contactos]$
  • Salir
[[email protected] contactos]$ cd ..
[[email protected] ~]$

Mostrar el directorio en el que estamos

[[email protected] contactos]$ pwd
/home/usuario1/contactos
[[email protected] contactos]$

Crear un fichero en Linux

El comando touch fichero creará un fichero vacío en Linux.

Con el comando vi crearemos o editaremos un fichero de texto.

Ver el contenido de un fichero

Utilizaremos los comandos cat, morevi:

[[email protected] contactos]$ cat vocales.txt
a, e, i, o, u 
[[email protected] contactos]$

Copiar archivos de un directorio a otro en Linux

Con el comando cp copiamos archivos de un origen a un destino. El destino puede ser otro directorio o el mismo pero con un nombre de archivo diferente.

Si añadimos el parámetro «-p», clonaremos los permisos del fichero.

[[email protected] contactos]$ cp -p vocales.txt /home/usuario1/letras
[[email protected] contactos]$ ls /home/usuario1/letras/ 
vocales.txt 
[[email protected] contactos]$

Borrar archivos y directorios en Linux

Usaremos el comando «rm archivo» a «rm -r directorio» para eliminar directorios de manera recursiva.

Si queremos borrar un directorio que está vacío, ejecuteremos el comando rmdir directorio.

Mover y renombrar ficheros en Linux

El comando mv mueve un fichero de un directorio a otro o renombra el archivo.

  • Mover
[[email protected] contactos]$ mv vocales.txt /home/usuario1/letras/ 
[[email protected] contactos]$ ls /home/usuario1/letras/ vocales.txt 
[[email protected] contactos]$
  • Renombrar
[[email protected] contactos]$ cd ../letras/ 
[[email protected] letras]$ mv vocales.txt vocales1.txt 
[[email protected] letras]$ ls -la total 4 drwxrwxr-x 2 usuario1 usuario1 25 oct 27 20:01 . drwx------ 6 usuario1 usuario1 132 oct 27 19:57 .. 
-rw-rw-r-- 1 usuario1 usuario1 14 oct 27 19:50 vocales1.txt 
[[email protected] letras]$

Creación de enlaces a archivos en Linux

Podemos crear dos tipos de enlaces a archivos:

  • Blandos (soft link): Crean un enlace simbólico a un fichero para que podamos acceder a él desde una ubicación diferente sin que tengamos que copiarlo a ese sitio.
[[email protected] letras]$ ln -s vocales1.txt vocales.txt
[[email protected] letras]$ 
total 4
drwxrwxr-x 2 usuario1 usuario1 43 oct 27 20:34 . 
drwx------ 6 usuario1 usuario1 132 oct 27 19:57 .. 
-rw-rw-r-- 1 usuario1 usuario1 14 oct 27 19:50 vocales1.txt 
lrwxrwxrwx 1 usuario1 usuario1 12 oct 27 20:34 vocales.txt -> vocales1.txt 
[[email protected] letras]$ cat vocales.txt
a, e, i, o, u 
[[email protected] letras]$
  • Duros (hard link): Crean un nuevo fichero en el sistema con el nombre que indiquemos pero compartiendo el mismo inodo, lo que significa que cada enlace duro que creemos es una copia exacta de el resto de enlaces duros asociados al mismo fichero. Por lo tanto, si realizamos algún cambio en alguno de los enlaces como, por ejemplo, un cambio de permisos, éstos también se verán reflejados en el resto de enlaces duros.
$ ln test hard-link
$ ls -li
13592 -rw-r--r-- 2 david martinez 5 2011-04-27 19:09 hard-link
13592 -rw-r--r-- 2 david martinez 5 2011-04-27 19:09 test

No podemos crear enlaces duros sobre directorios.

Sincronizar filesystems con rsync

Con rsync sincronizaremos el contenido de un sistema de archivos origen a un destino sin tener que copiar todo el contenido de nuevo, ya que solamente copiaremos los cambios, ganando mucho tiempo cuando el volumen de datos es muy grande.

Ejemplo de uso:

rsync –delete –recursive –times -og –links –perms –hard-links\ /tmp/rsync/ [email protected]_remoto:/tmp/rsync

–delete: Elimina ficheros que existen en el destino pero no en el origen.
–recursive: Copia directorios de manera recursiva
–times: Envía la información de las fechas y horas de modificación de los ficheros.
-og: No modifica ni el usuario ni el grupo de los ficheros.
–links: Copia los enlaces simbólicos.
–perms: Copia los permisos.
–hard-links: Copia los enlaces duros, siempre que estén dentro del diretorio que se está copiando.

También podemos utilizarlo para sincronizar dos filesystems locales:

nohup rsync -avzhr --delete /filesystem_origen/ /filesystem_destino/ &

Es recomendable utilizar nohup cuando tenemos que sincronizar una cantidad grande de datos.

Advertencia: El filesystem origen se copiará dentro del FS destino, es decir, has de tener en cuenta el path absoluto en el destino para que no haga una copia en el destino del tipo /FS_DESTINO/FS_DESTINO.

Programación por cron de rsync:

00 00 26 * * /usr/bin/rsync -avzhr --progress --hard-links --numeric-ids --delete --exclude /FS_ORIGEN/config.php /FS_ORIGEN  [email protected]_destino:/FS_DESTINO > /tmp/log.out 2>&1

Prueba FreeFileSync para la sincronización de datos en Windows al estilo de rsync


Búsqueda de archivos en Linux con el comando find

Con el comando find buscaremos archivos por nombre, fechas, propietarios, tamaño, etc.

Ejemplos:

  • Búsqueda por nombre:
[[email protected] ~]$ find . -name voc*.txt -exec ls -la {} \; 
-rw-rw-r-- 1 usuario1 usuario1 14 oct 27 19:50 ./letras/vocales1.txt 
[[email protected] ~]
  • Búsqueda por fechas:

-mtime 0: Busca archivos modificados entre ahora mismo y las últimas 24 horas.
-mtime -1: Busca archivos modificados hace menos de 24 horas.
-mtime 1: Busca archivos modificados entre las últimas 24 y 48 horas.
-mtime +1: Busca archivos modificados desde hace más de dos días.
-mmin +5 -mmin -10: Busca archivos modificados entre los 6 y los 9 últimos minutos.

[[email protected] ~]$ find . -mtime +15 
./.bash_profile 
./.gnome2 
./.bashrc 
./.mozilla 
./.mozilla/extensions 
./.mozilla/plugins 
./.bash_logout 
[[email protected] ~]$

Con la ayuda del comando (man find), veremos todos los parámetros disponibles de este comando para optimizar nuestra búsqueda.

Comprimir y Descomprimir Archivos en Linux

Empaquetar archivos con tar

Hay muchas aplicaciones capaces de empaquetar múltipes archivos y directorios en un solo fichero en formato tar. Sin embargo, tar es un estándar muy utilizado en todos los sitemas UNIX. Particularmente, es muy útil porque conserva los permisos y propietarios de los archivos originales, por lo que viene muy bien a la hora de hacer restauraciones.

El funcionamiento de este comando es muy simple.

  • Empaquetar: tar cvf mifichero.tar midirectorio
  • Desempaquetar: tar xvf mifichero.tar

Comprimir y descomprimir un archivo con tar y gzip (tgz)

En Linux es muy frecuente utilizar gzip para comprimir un archivo, es decir, para tener una copia de seguridad del mismo que ocupe menos en el sistema.

Ejemplo:

[[email protected] letras]$ gzip vocales1.tar 
[[email protected] letras]$ ll total 4 
-rw-rw-r-- 1 usuario1 usuario1 153 oct 27 20:13 vocales1.tar.gz 
[[email protected] letras]$

Para descomprimir, simplemente, utilizaremos gunzip vocales.tar.gz.

También podemos comprimir un fichero o un directorio directamente en tar y gz al mismo tiempo, es decir en tgz:

tar cvzf fichero.tgz fichero_o_directorio

Para descomprimir un tgz, lo haríamos de la siguiente manera:

tar xvzf fichero.tgz

Comprimir y descomprimir archivos con star

Si lo que nos interesa es conservar los permisos de SELINUX, utilizaremos el comando star.

Ejemplo de compresión:

star -xattr -H=exustar -c -f=home.star /home/

Para descomprimir con star, ejecutaremos el siguiente comando:

star -x -f=home.star

Comprimir y descomprimir con bzip2

BZip2es otro algoritmo de compresión más que podemos utilizar en Linux. Para comprimir utilizaremos el siguiente comando:

bzip fichero

Y para descomprimirlo:

bzip2 -d fichero.bz2

Comprimir y descomprimir ficheros con ZIP

No podía faltar en Linux un algoritmo tan popular como el ZIP. Para comprimir un fichero, ejecutaremos:

zip archivo.zip ficheros

Para descomprimir, utilizaremos el comando unzip:

unzip archivo.zip

Comprimir y descomprimir ficheros con RAR

RAR también es un compresor muy popular que también podemos utilizar en Linux. Para comprimir, ejecutaremos el siguiente comando:

rar -a archivo.rar ficheros

Y para descomprimir:

rar -x archivo.rar

Dividir un fichero en diferentes partes, en Linux

Si tenemos un archivo muy grande y lo queremos particionar, en Linux utilizaremos el comando split. Veamos un ejemplo:

[[email protected] temporal]# nohup split -b 100G 1148_ioc.tgz "1148_ioc.tgz.part" &
[1] 9688
[[email protected] temporal]# ls -lah
total 1.2T
drwxr-xr-x 2 sftp_WO0000002535992 sftp_WO0000002535992 4.0K Jun 15 15:00 .
drwxr-xr-x 4 root                 root                 4.0K Jun 15 08:18 ..
-rw-r--r-- 1 sftp_WO0000002535992 sftp_WO0000002535992 1.1T Jun 15 06:18 1148_ioc.tgz
-rw-r--r-- 1 root                 root                 100G Jun 15 15:00 1148_ioc.tgz.partaa
-rw-r--r-- 1 root                 root                  12G Jun 15 15:02 1148_ioc.tgz.partab
-rw------- 1 root                 root                    0 Jun 15 14:43 nohup.out
[[email protected] temporal]#

Como podemos observar, el comando split ya está creando el primer fichero con extensión «.partX» de 100GB y ha comenzado a crear el segundo..

En este caso, el fichero de 1TB, lo dividiremos en diferentes partes de 100G, tal y como podemos ver en los parámetros de split.

Conocer cuánto espacio disponible tenemos en los filesystems de Linux

El espacio de un filesystem se mide por dos parámetros:

  • El tamaño de los archivos.
  • La cantidad de inodos utilizados.

Si cualquiera de las dos métricas llega al 100% de ocupación, no podremos escribir más archivos en el filesystem.

Para revisarlo, utilizaremos el comando «df»:

[root]# df -hP /root
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg00-rootvol 6.0G 3.7G 2.0G 66% /
[root]# df -i /root
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/mapper/vg00-rootvol 393216 91386 301830 24% /
[[email protected] ~]#

Averiguar cuáles son los archivos que más ocupan en Linux

Esta información es vital para saber qué archivos son los que nos están llenando un filesystem. Cuando se llene, es posible que deje de funcionar alguna aplicación porque ya no podrá escribir datos en él.

En el siguiente ejemplo, averiguamos en KB, cuáles son los 30 archivos o directorios que más espacio están ocupando:

[root var]# du -xk |sort -rnk1 |head -30
4769572 .
3053292 ./opt
2123036 ./opt/OV
2008900 ./opt/OV/installation
2006376 ./opt/OV/installation/temp
652932 ./spool
652840 ./spool/mail
507116 ./opt/osit
500732 ./opt/osit/ESAR
495048 ./opt/osit/ESAR/portmon
461860 ./log
369320 ./tmp
367884 ./tmp/patchtool.oC5AtV
211024 ./opt/opsware
210060 ./opt/opsware/yum
210056 ./opt/opsware/yum/plugins
209808 ./opt/opsware/yum/plugins/cache
209804 ./opt/opsware/yum/plugins/cache/opsware
172368 ./lib
113368 ./opt/erm
112772 ./opt/erm/save
93152 ./opt/perf
92556 ./opt/perf/datafiles
92240 ./lib/rpm
83240 ./opt/OV/log
82552 ./opt/OV/log/OpC
61616 ./lib/rear
59596 ./lib/rear/output
46476 ./cache
44900 ./cache/yum
[root var]#

Saber qué procesos están utilizando un sistema de archivos

A veces nos interesa saber si un filesystem está siendo utilizado por alguna aplicación porque queramos hacer alguna acción sobre él. Si quisiéramos modificar algún aspecto de la estructura del FS que requisiese desmontarlo, no podríamos mientras esté en uso, así que necesitaremos saber qué proceso lo está utilizando. Lo podremos hacer con los comandos fuserlsof:

[[email protected] ~]$ /sbin/fuser /home/usuario1
/home/usuario1: 5694c 10469c 10612c
[[email protected] ~]$ ps -ef |grep 10612
usuario1 10612 5694 0 21:13 pts/0 00:00:00 vi prueba.txt

[root]# lsof /var |head
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
vmtoolsd 1526 root 4w REG 253,9 5 131437 /var/run/vmtoolsd.pid
rsyslogd 1735 root 1w REG 253,9 1431 134767 /var/log/messages
rsyslogd 1735 root 2w REG 253,9 391269442 134768 /var/log/secure
rsyslogd 1735 root 4w REG 253,9 0 134766 /var/log/maillog
rsyslogd 1735 root 5w REG 253,9 22458 131165 /var/log/cron
rpcbind 1765 rpc 3r REG 253,9 0 131798 /var/run/rpcbind.lock
python 1808 root cwd DIR 253,9 4096 133424 /var/opt/opsware/agent
python 1808 root 1w FIFO 253,9 0t0 131808 /var/opt/opsware/agent/daemonbot.fifo
python 1808 root 2w FIFO 253,9 0t0 131808 /var/opt/opsware/agent/daemonbot.fifo
[root]#

Averiguar el tipo de archivo

El comando file nos dirá si un archivo es de tipo texto o binario.

[[email protected] ficheros]$ file fichero.txt 
fichero.txt: ASCII text 
[[email protected] ficheros]$

Ahora que ya has aprendido los comandos más básicos de Linux relacionado con el sistema de archivos, te interesará saber cómo funciona Logical Volume Manager o LVM, ya que la mayoría de los sistemas Linux lo utilizan. También deberás saber cómo asignar, modificar o eliminar los permisos de cada archivo y directorio.

Te puede interesar

¿Te ha gustado? Compártelo

Share on facebook
Share on twitter
Share on linkedin
Share on whatsapp
Share on telegram
Share on email
About Author

Contenido Relacionado

Artículos Recientes

Deja un comentario