Administración del sistema de archivos

De XTech Capacitacion

Tabla de contenidos

Particiones y sistemas de archivos

Particiones

Una partición es una sección lógica de un disco rígido y una manera práctica para dividir los discos en partes independientes, que en realidad residen en un sólo disco rígido. Una partición es técnicamente definida en la tabla de particiones de un disco rígido.

Formatear en bajo nivel

fdisk es una herramienta que permite modificar el conjunto de particiones de un disco rígido.

La herramienta no está recomendada para los usuarios inexpertos o principiantes, dado que puede destuir todos los datos en el disco rígido y hacer el sistema incapaz de arrancar. es importante no confundir esta herramienta con la que se usaba en DOS.

Ejemplos

Mostrar el listado de las tablas de particiones del primer disco rígido (usando el esquema de nombres de Linux para los discos)

fdisk -l /dev/hda Mostrar el listado de particiones en todos los discos rígidos disponibles (práctico para solucionar problemas y recordar en que lugar están las particiones)

Usando fdisk

Cuando se crea una tabla de particiones para instalar Linux en un disco, es importante activar una de las particiones antes de que grabar la tabla de particiones.

Si se crea una partición FAT con el objeto de formatearla en DOS o Windows, se debe llenar con ceros el primer bloque de la partición de manera que el producto de Microsoft no malinterprete los parámetros. Si se ha creado /dev/hda1, se puede hacer lo siguiente.

dd if=/dev/zero bs=1k count=1 of=/dev/hda1

Formatear en alto nivel

mkfs es el comando de Unix para crear un sistema de archivos. Crea un nuevo sistema de archivos en una partición del disco. Por ejemplo:

   mkfs -t ext3 /dev/hdb1 

Crearía un nuevo sistema de archivos en Ext3 en la partición /dev/hdb1, que es la primera partición en el segundo disco IDE.

Normalmente no se debería usar mkfs a menos que se esté instalando un nuevo disco rígido en el sistema.

Espacio swap


Swap o memoria virtual es una técnica usada para grabar algo del contenido de la memoria, no usada en el momento, al disco rígido para hacer lugar a un proceso que necesita más memoria ahora.

This also make a good buffer for when peaks of memory usage occur. De este modo, se pueden arrancar programas aun cuando se use la memoria al máximo sin tener que cerrar procesos primero.

Linux puede agregar espacio para swap de dos maneras, o como un archivo swap dentro del sistema de archivos o como una partición separada. Microsoft Windows usa el concepto de archivo (archivo de páginas) mientras que el estándar para Linux es usar en una partición el espacio de swap.

Los beneficios de usar una partición swap incluyen:

  • Almacenamiento adaptado para ajustarse al contenido de memoria en lugar de archivos.
  • El contenido de swap no fragmentará el sistema de archivos.
  • Se puede distribuir en varios discos físicos para mejorar el rendimiento.
Comandos relacionados con swap

swapoff es el comando usado para desactivar swap para una partición de ese tipo.

Uso más común:

# swapoff -a

... desactivará todo los espacios de intercambio.

# swapon -a

... activará todos los espacios de intercambio.

# swapon -s

... mostrará todos los espacios de intercambio activos.

# mkswap

... borrará una partición y la adaptará para que sea un espacio de swap.

Integridad del sistema de archivos

Verificar el espacio ocupado

Comando du

du (uso del disco) es una herramienta que muestra como se usa el disco. Se ouede usar para determinar los tamaños de los archivos o directorios sin recurrir a ls.

Ejemplos de uso

Para determinar el tamaño del directorio actual

$ du -sh

La opción -s se usa para obtener un resumen del uso del disco (el tamaño total) en el directorio actual, -h muestra la cantidad en términos legibles por humanos de "K" por kilobytes, "M" por megabytes y "G" por gigabytes, en lugar de números de bloquees.

Para determinar los tamaños de cada archivo en el directorio actual,

$ du -sh *

hace un listado de cada archivo con su tamaño. En Linux, --max-depth=1 se puede usar para obtener un efecto similar.

Si se quiere saber los diez archivos más grandes en el directorio actual, se puede usar:

$ du -s * | sort -nr | head 

para mostrar esos archivos

Comando df

df muestra el espacio libre en cada volumen montado. La herramienta muestra el sistema de archivos, el tamaño total, la cantidad usada y disponible, este información como un porcentaje, y el punto de montaje.

Usando la opción -h muestra el listado de las cantidades en términos legibles por humanos de "K" por kilobyres, "M" por megabytes y "G" por gigabytes, en lugar de números de bloques.

Ejemplo
$ df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/hda2              74G   34G   41G  46% /
/dev/hdc1             150G   44G  106G  29% /bulk
shmfs                  94M     0   94M   0% /dev/shm

Comando fsck

fsck (comprueba de la consistencia del sistema de archivos) es un comando usado para verificar el sistema de archivos por errores de consistencia y los repara. Esta herramienta es importante para mantener la integridad de los datos de manera que se debería ejecutar regularmente, especialmente después de un reinicio imprevisto (cuelgue, suspensión el suministro de energía).


El sistema de archivos puede cualquier archivo de dispositivo (e.g. /dev/hda) o su punto de montaje.

fsck sin opciones comprobará todos los dispositivos en /etc/fstab

Podría ser necesario ejecutar fsck desde el modo monousuario si se necesita comprobar y restaurar un sistema de archivos posiblemente dañado, especialmente si se va a comprobar /usr.

fsck es meramente una interfaz para otros verificadores ás específicos que están ubicados en /sbin.

Comando e2fsck

e2fsck es nu comando que se usa para verificar un sistema de archivos ext2. e2fsck también soporta ext3. El comando automáticamente guarda los bloques malos encontrados en el sistema de arhivos, de manera que aquellas partes del disco rígido no se usen más.

e2fsck debe ejecutarse sobre un sistema de archivos desmontado. En situaciones de emergencia se un usa CD de rescate o un Live CD, para después ejecutar el comando e2fsck sobre las particiones correspondientes.


Método de solo lectura

# e2fsck -c /dev/hda

Método no-destructivo de lectura/escritura

# e2fsck -c -c /dev/hda


Comando mke2fs

mke2fs es un comando que crea un sistema de archivos ext2 (formatea) un disco rígido en una partición del disco rígido. Un sistema de archivos ext2 es nativo para Linux. Cuando se le da la opción -j, crea un sistema de archivos ext3, que es apróximadamente lo mismo, solamente que tiene además capacidades transaccionales. Un sistema de archivos relacionado es el sistema de archivos transaccional de Han Reiser, o ReiserFS, que está optimizado para pequeños archivos.


Comando debugfs

Herramienta interactiva para reparar el sistema de archivos ext2 en una partición específica.

Comando dumpe2fs

Muestra la información del bloque y grupo de bloques de un sistema de archivos presente en un dispositivo.

Montar y Desmontar sistemas de archivos

El archivo fstab

fstab es un archivo de configuracion y se usa para decirle al kernel que unidades (técnicamente sistemas de archivos) montar y donde. Localizado en /etc/fstab su formato es:

[Dispositivo, Dispositivo virtual o Volumen remoto] [Punto de montaje] [Tipo de Sitema de archivos] [Opciones] [dump] [Orden de fsck]

Campos

El primer campo, (fs_spec), describe el dispositivo especial de bloque o sistema de archivos remoto a ser montado.

Este es la ubicación física de los sistemas de archivos, por ejemplo:

  • /dev/hda - La unidad master conectada al cable IDE primario.
  • /dev/hda2 - La segunda partición en el disco master sobre el IDE primario.
  • /dev/hdb - second drive on primary IDE cable. Segunda unidad en el cable primario IDE.
  • /dev/fd0 - Primera unidad de disquete

Puede también ser una etiqueta del volumen del sistema de archivos o UUID, usando esto tiene la ventaja que al agregar/quitar discos no hará que se monte. El formato para usar en lugar del nombre del dispositivo en el archivo fstab es:

LABEL=<etiqueta>

(Donde <etiqueta> es algún nombre, p.ej. Boot)

UUID=<uuid>

(Donde <uuid> es algún número como 3e6be9de‐8139‐11d1‐9106‐a43f08d823a6)

Cómo se definen la etiqueta y el UUID depende en como se usan los sistemas de archivos. Pueden normalmente definirse cuando se crea/foramatea el sistema de archivos y el tipo de sistema de archivos usualmente tiene alguna herramienta para cambiarlo después (p.ej.: e2tunefs,xfs_admin,reiserfstune,etc.)

El segundo campo, (fs_file), describe el punto de montaje para el sistema de archivos. Para particiones de intercambio (swap), este campo debe decir ‘‘none’’.

El punto de montaje es la carpeta del sistema de archivos bajo la raíz del sistema mediante la cual se accede al dispositivo (o volumen remoto, etc.)

  • /media/floppy
  • /media/cdrom
  • /mnt (temporary mount point)

El tercer campo, (fs_vfstype), describe el tipo del sistema de archivos. Si vfs_fstype tiene el valor ‘‘ignore’’, la entrada es ignorada. Esto es útil para ver aquellas particiones del disco que no están siendo usadas.

Por ej.: iso9660, ext2, ext3, ReiserFS

El cuarto campo, (fs_mntops), describe las opciones de montaje asociadas con el sistema de archivos. Este campo describe como debería manejar el kernel al sistema de archivos, por ejemplo, si el usuario puede modificar archivos en él.

  • sync/async - Todas las E/S al sistema de archivos deberían hacerse (a)sincrónicamente.
  • auto - El sistema de archivos se puede montar automáticamente (en el arranque, o cuando se le pasa la opción -a al comando mount). Esto es realmente innecesario ya que es la opcíón predeterminada de mount -a de cualquier modo.
  • noauto - El sistema de archivos NO se montará automáticamente en el arranque, cuando se le pase la opción -a. Se debe montar explícitamente el sistema de archivos.
  • dev/nodev - Interpreta/No interpreta dispositivos (o volúmenes remotos, etc.) desde ese sistema de archivo a montar o ya montado.
  • exec / noexec - Permite/impide la ejecución de binarios del sistema de archivos.
  • suid/nosuid - Permite/bloquea las operaciones de suid y sgid bits.
  • ro - Monta como sólo lectura.
  • rw - Mount como lectura-escritura.
  • user - Permite a cualquier usuario montar el sistema de archivos. Esto implica noexec, nosuid, nodev a menos que se defina otra cosa.
  • nouser - Solamente permite a root montar el sistema de archivos. Esta es la opción predetermnada.
  • defaults - Usa las configuraciones predeterminadas. Es equivalente a rw, suid, dev, exec, auto, nouser, async.
  • _netdev - esto es un dispositivo de red, montarlo después de levantar la red. Solamente es válido con sistema de archivos de tipo nfs.

El quinto campo, (fs_freq), lo utiliza el comando dump para determinar que sistemas de ficheros necesitan ser volcados (dumped). Si el quinto campo está vacío, dump asume que el sistema de ficheros no necesita ser volcado.

Es decir, establece si la herramienta de backup hará backup del sistema de archivos. Si se define como "0" el sistema de archivos será ignorado, si se pone "1" se hará una copia de seguridad del sistema de archivos.

El sexto campo, (fs_passno), lo usa el programa fsck para determinar el orden en el cual se van a chequear los sistemas de archivos cuando el sistema arranca.

Si se pone en "0" el sistema de archivos se ignora, si se pone "1" el sistema se comprueba primero antes que cualquier otro, mientras que si se pone "2" el sistema de archivos será verificado luego del anterior.

Un archivo /etc/fstab común
/dev/hda2 / ext2 defaults 1 1 - monta la 2ª partición de la primera unidad
/dev/cdrom /mnt/cdrom iso9660 noauto,ro,user 0 0 - monta el CD cuando se lo solicite (no en el arranque)
/dev/hda1 /mnt/dos/c msdos defaults 0 0 - monta una partición FAT para uso bajo linux
/dev/fd0 /mnt/floppy ext2 noauto,user 0 0 - monta un disquete cuando se lo pida (no en el arranque)
/dev/hdb1 none ignore defaults 0 0 - ignora la segunda unidad
/dev/hda3 none swap sw -monta la tercera partición en la primera unidad 
Automontaje de una imagen ISO en /etc/fstab
/iso-archiv/image.iso /mnt/image1 iso9660 ro,loop,auto 0 0

Cuotas de disco

¿Qué son las quotas?

Las cuotas de sistemas de archivos se refieren a cuanto espacio de disco se le permite a un usuario dado en una determinada partición. Las cuotas se establecen usando el comando quota. El propósito de las cuotas es impedir que un usuario tome más espacio en disco del que necesita, especialmente en sistemas de archivos multiusuario.

Existen dos tipos de cuotas, por bloques y por inodos. Un bloque equivale generalmente a un Kb. Un inodo es un elemento de una tabla de inodos la cual a su vez es un elemento del sistema de archivos. Haciendo una simplificación, en general un inodo es prácticamente lo mismo que un archivo. Es decir, se puede limitar tanto por cantidad de KBs usados como por cantidad de archivos creados.

Además, cada cuota consta de dos límites: límite hard y límite soft. El límite hard no se puede pasar nunca, mientras que el límite soft se puede pasar durante un determinado período llamado tiempo de gracia.

Por otro las cuotas se pueden aplicar tanto a usuarios como a grupos.

Soporte para cuotas

El sistema de archivos, debe tener soporte para cuotas, para ello es necesario editar el archivo /etc/fstab y agregar las opciones usrquota y grpquota, en aquellas líneas correspondientes a particiones en las que se deseen aplicar límites.

El siguiente es un ejemplo:

/dev/hda1 / ext3 defaults 1 1
/dev/hda6 /home ext3 defaults,usrquota,grpquota 1 2
/dev/fd0 /mnt/floppy auto umask=0022,users,iocharset=utf8,sync,noauto,exec 0 0
/dev/hda8 /ocho ext3 defaults 1 2
none /proc proc defaults 0 0
/dev/hda7 /siete ext3 defaults 1 2
none /tmp tmpfs defaults 0 0
/dev/hda9 /vservers ext3 defaults 1 2
/dev/hda5 swap swap defaults 0 0

En el archivo /etc/fstab mostrado sería el caso de que se desee aplicar las cuotas para usuarios y grupos en la partición /dev/hda6 (/home).

Inicialización de quotas

Es importante ejecutar el comando quotacheck sobre los sistemas de archivos correspondientes para comprobar y actualizar las cuotas para los sistemas de archivos montados.

quotacheck -vug /dev/hda6

Configuración de quotas

El comando edquota se utiliza para editar las cuotas por usuario (o por grupo). Para configurar quotas para el grupo users, por ejemplo, se ingresaría edquota -g users, se abriría un editor que de manera predeterminada es vi.

Disk quotas for group users (gid 100):
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/hda7                    180924     200000     250000       1232     1235     1300

El de arriba es un ejemplo de configuración de cuotas, la primer columna Filesystem se refiere a la partición, la segunda a la cantidad de bloques ocupados (que no hay que editar) luego está el límite soft y el límite hard por bloques. Luego aparece la cantidad de inodos, el límite soft y el límite hard por bloques. Por supuesto, los límites están en 0 si nunca se usó edquota para un determinado grupo o usuario.

El tiempo de gracia

El tiempo de gracia se edita ejecutando edquota -t y el mismo se puede expresar en días, horas, minutos, o segundos.

Grace period before enforcing soft limits for users:
Time units may be: days, hours, minutes, or seconds
  Filesystem             Block grace period     Inode grace period
  /dev/hda7                     7days                  7days

Activación y desactivación de quotas

La activación y desactivación de cuotas se realizan con los comandos quotaon y quotaoff respectivamente.

Ejemplo de activación:

[root@hibernia sergio]# quotaon -gv /dev/hda7
/dev/hda7 [/siete]: group quotas turned on

Información de quotas

Se puede obtener la información de cuotas aplicadas al sistema con el comando repquota.

Ejemplo: Información detallada de las cuotas por grupo en la partición /dev/hda7.

[root@hibernia sergio]# repquota -gv /dev/hda7
*** Report for group quotas on device /dev/hda7
Block grace time: 7days; Inode grace time: 7days
                        Block limits                File limits
Group           used    soft    hard  grace    used  soft  hard  grace
----------------------------------------------------------------------
root      -- 2531600       0       0         101887     0     0
bin       --      20       0       0              1     0     0
daemon    --      40       0       0             11     0     0
sys       --    3900       0       0             35     0     0
adm       --      16       0       0              3     0     0
tty       --      24       0       0            674     0     0
disk      --       0       0       0          14052     0     0
lp        --       0       0       0             44     0     0
kmem      --     120       0       0              4     0     0
mail      --     116       0       0              5     0     0
uucp      --       0       0       0            713     0     0
floppy    --       0       0       0            276     0     0
utmp      --      40       0       0              4     0     0
cdwriter  --    1504       0       0             27     0     0
audio     --       0       0       0            181     0     0
users     --  180924  200000  250000           1232  1235  1300
nogroup   --     268       0       0              2     0     0
rpm       --   50220       0       0             59     0     0
xfs       --       4       0       0              1     0     0
rpc       --       8       0       0              2     0     0
ntp       --    5756       0       0              8     0     0
saned     --      16       0       0              4     0     0
ups       --      28       0       0              5     0     0
slocate   --       4       0       0              1     0     0
sergio    --    3024       0       0             50     0     0
gornis    --    1188       0       0              7     0     0
silvana   --    1164       0       0              4     0     0
alfa      --    6752       0       0            737     0     0
#106      --       8       0       0              2     0     0
#107      --      44       0       0              4     0     0

Statistics:
Total blocks: 9
Data blocks: 2
Entries: 30
Used average: 15,000000

Permisos y propiedades de archivos

Linux asocia con cada archivo un número de propiedades por seguridad y otros razones. Un grupo de propiedades, conocidas como permisos son atributos especiales que controlan la capacidad de los usuarios para realizar varias operaciones sobre ellos.

¿Por qué permisos?

Unix y los sistemas estilo Unix tales como Linux, son inherentemente sistemas operativos multiusuarios, y tienen la necesidad de proporcionar mejor control, para que un usuario malicioso no pueda interferir con otros archivos de usuarios. Por ejemplo, un usuario puede tener información sensible que otro usuario puede querer acceder. Sin permisos de archivos, el otro usuario puede ser capaz de acceder a ellos. Con ellos, el usuario no puede leer el archivo.

En los sistemas de arriba, cada archivo, directorio, o dispositivo tiene un grupo de permisis asociados con él. Estos permisos son visibles si se hace un ls con la opción -l, que puede mostrar algo como

-rw-r--r--    1 root     root         1059 Dec 18 13:23 /etc/passwd

El bloque de los permisos es lo primero en la línea:

-rw-r--r--

Partimos esta cadena en cuatro secciones:

- rw- r-- r--

  1. El primer bloque de un carácter representa el tipo de archivo (ver debajo).
  2. El segundo bloque representa los permisos asociados con el usuario (que lo creó)
  3. El tercero representa los permisos asociados con el grupo del usuario al que pertenece
  4. El cuarto representa los permisos asociados con cualquier otro (a veces llamado mundo).

En cada bloque de tres caracteres, los caracteres r, w, y x significan que el archivo puede ser leído, modificado, o ejecutado. Un guión significa que el permiso no está puesto (por ejemplo en 1 arriba, el archivo se puede leer y modificar por el propietario, pero no se puede ejecutar). Así, por ejemplo r-x significa que los permisos de lectura y ejecución están puestos, pero no el de escritura.

Cambio de permisos y propietarios

Muchos permisos se ponen automáticamente cuando se crea un archivo. Estos permisos están basados en el usuario, las preferencias administrativas y los datos.

Cambiar permisos

A cada archivo se le asigna automáticamente un conjunto de permisos, que se puede definir con el comando umask. Para cambiar los permisos predeterminados, se usa el comando chmod, que modifica los permisos de lectura, escritura, y ejecución para el usuario, grupo y el mundo.

Cambiando el propietario

Cada archivo tiene un propietario. Cuando un archivo es creado por un usuario, esto se asigna automáticamente, aunque el dueño del archivo puede cambiarse (esto es, el archivo puede "entregarse" a alguien), por medio del comando chown, por ejemplo

chown juan:juan ~/juan's_todo_list

cambia el dueño del creador de juan's_todo_list al usuario y grupo juan.

Cambiar de grupo

Cada archivo pertenece a un grupo. Este podría ser el grupo privado del usuario (un usuario puede pertenecer a un grupo conteniendo solamente a ese usuario), u otro grupo más amplio, tales como editores, por ejemplo. De nuevo, la asignación del grupo automático puede cambiarse con el comando chgrp. Por ejemplo, si el archivo borrador_final pertenecía al grupo escritores, para cambiar el grupo al grupo editores se puede hacer así

#chgrp editores ~/borrador_final

Permisos adicionales

Los sistemas UNIX emplean típicamente tres permisos o modos adicionales. Estos permisos especiales se asignan a archivos o directorios en conjunto, no a cada clase de forma separada (como sucedía con los permisos básicos).

  • Permiso set user ID, setuid o SUID: cuando un archivo que tiene este permiso asignado se ejecuta, el proceso resultante asumirá la ID de usuario efectiva dada a la clase de usuario. El ejemplo típico es el cambio de una clave de usuario: ningún usuario debería poder modificar /etc/passwd/ directamente. La única forma de poder modificarlo debería ser a través del comando correspondiente, que necesariamente tendrá que tener asignado el setuid. Es decir, el comando /usr/bin/passwd ejecutado por un usuario se ejecutará como si lo hubiese invocado el superusuario, de manera de poder modificar /etc/passwd.
  • Permiso set group ID, setgid o SGID: cuando un archivo que tiene este permiso asignado se ejecuta, el proceso resultante asumirá la ID de grupo efectiva dada a la clase de grupo. Cuando el setgid le es asignado a un directorio, archivos nuevos y directorios creados debajo de ese directorio heredarán el grupo de ese directorio, a diferencia del comportamiento por defecto, que es usar el grupo primario del usuario efectivo al asignar el grupo de archivos nuevos y directorios.
  • Permiso de sticky bit (bit pegajoso): El comportamiento típico del sticky bit en archivos ejecutables fuerza al kernel a retener la imagen del proceso resultante luego de su terminación. Originalmente, esta era una característica para ahorrar memoria, pero hoy en día, los precios de las memorias han disminuido y existen mejores técnicas para manejarlo, así que no se lo suele utilizar más para optimizaciones en archivos.

En un directorio, por el contrario, el sticky bit previene que los usuarios renombren, muevan o borren los archivos que allí se encuentran, pertenecientes a usuarios otros que ellos mismos, incluso si tienen permiso de escritura en el directorio. Solo el propietario del directorio y el superusuario quedan exentos de esto.

Estos tres permisos (especificables de forma independiente), un bit por cada uno de ellos, permiten 8 combinaciones posibles que se expresan con un dígito en base 8 (del 0 al 7, uno por cada combinación posible) que se antepone al modo de permisos. Así, el modo se ampliaría ahora del 0000 al 7777.

Por ejemplo:

chmod +t /home           # agrega permisos de sticky bit al directorio home
chmod ug+s /home/grupo    # agrega el setuid al usuario y al grupo

Atributos de archivos

En los sistemas ext2 y ext3 los archivos poseen atributos, estos se pueden hacer visibles con el comando lsattr

[sergio@hibernia ~]$ lsattr print2.pdf
----i-------- print2.pdf

El archivo print2.pdf posee el atributo de inmutabilidad "i". Los demás guiones indican atributos deshabilitados. Los atributos atributos son:

Atributos
Atributos Significado
A por defecto los archivos guardan 3 fechas, la de creación (ctime) , ultima modificación (mtime) , y ultimo acceso (atime). En este caso el atributo A hará que no quede guardado el ultimo acceso en atime.
a con este atributo, conseguimos que el archivo solo pueda abrirse en modo actualización, por lo tanto, aunque un usuario tenga permisos de escritura sobre el, no podra borrar, solo añadir datos.
D Se aplica a directorio, los cambios efectuados en el mismo se efectúan sincrónicamente.
d La herramienta dump para backup omitirá el archivo.
E Muestra que un archivo comprimido tiene un error de compresión.
I Se usa en directorios para indicar que estos están indexados con un árbol de hash.
i Este, hace que el archivo sea inmutable, incluso por el usuario root. Es decir, que no se pueda modificar.
j Los datos se escriben primero al journal del sistema ext3 antes de escribirse en el propio archivo. Tiene sentido cuando se monta el sistema de archivos con las opciones "data=ordered" o "data=writeback" .
s este activará el borrado seguro, el funcionamiento de este atributo es el siguiente, cuando borrás el archivo, los bloques se rellenan con ceros y se vuelven a grabar en disco. Así no habrá manera de recuperar los datos con herramientas de bajo nivel.
S Cuando posea este atributo, al modificarse, se guardara directamente en el disco duro sin pasar por el bufer.
T Sirve para considerar a un directorio como si estuviera en el primer nivel de directorios.
t Hace que el archivo no posea un fragmento al final combinado con otro archivo.
u Cuando se elimina un archivo se guarda el contenido del mismo.
X El contenido crudo de un archivo comprimido se puede acceder directamente.
Z El archivo comprimido está sucio.

Se puede cambiar el estado de un atributo con el comando chattr, el siguiente muestra la eliminación del atributo "i":

[root@hibernia sergio]# chattr -i print2.pdf
[root@hibernia sergio]# lsattr pr
print2.pdf  print.pdf
[root@hibernia sergio]# lsattr print2.pdf
------------- print2.pdf

Listas de control de acceso

El comando setfacl sirve para definir la lista de control de acceso para un directorio o archivo, mientras que el comando getfacl permite verlas.

anita:~# getfacl /usr/local/sbin/sshd 

# file: /usr/local/sbin/sshd
# owner: root
# group: bin
user::rwx
group::---              #effective:---
mask:---
other:---

anita:~# setfacl -m user:toni:r-x /usr/local/sbin/sshd 
anita:~# getfacl /usr/local/sbin/sshd 

# file: /usr/local/sbin/sshd
# owner: root
# group: bin
user::rwx
user:toni:r-x           #effective:---
group::---              #effective:---
mask:---
other:---
anita:~#

Enlaces duros y simbólicos

El comando ln crea un enlace de un archivo a otro.

Los enlaces se dividen en dos clases, duros y simbólicos. Los enlaces simbólicos (symlinks) son preferidos frecuentemente debido a su flexibilidad y la capacidad para trabajar a través de diferentes particiones. Los enlaces duros son indistinguibles del original y tienen sus propias restricciones.

Dado un archivo, no es trivial localizar otros archivos enlazados a él. Los enlaces simbólicos pueden encontrarse buscando en el sistema de archivos entero enlaces simbólicos que apunten a ese archivo. Los enlaces duros por otro lado, se pueden encontrar solamente buscando cada inodo en un bajo nivel inodos que comparten los mismos punteros de datos que ese archivo, o buscando cada directorio punteros de inodos.

Duros

Los enlaces duros son implementados en los sistemas de archivos estilo unix (ext2/3, etc) como diferentes entradas en bloques de directorio que apuntan al mismo inodo. Cambiando de nombre o borrando una de esas entradas no borra los datos, solamente disminuye la cuenta del enlace. Dado que las entradas en el directorio comparten el mismo inodo, todos los metadatos del archivo son los mismo, excluyendo el nombre. Los nombres de los enlaces se mantienen en la entrada del directorio y no en el inodo. Los enlaces duros no pueden atravesar particiones. Además, el usuario no puede crear enlaces duros a directorios, solamente existen los enlaces especiales . y .. que refieren a sí mismo y al padre respectivamente.

Además a diferencia de los enlaces simbólicos, los enlaces duros nunca se pueden romper moviendo uno de los archivos (entradas de directorio) a otra ubicación.

Con los enlaces duros, se mantiene un contador de enlaces en el inodo de cada archivo. Cuando el contador de enlaces cae a 0, se borra el inodo y los bloques de datos son liberados para reusarlos. De esta manera, una vez que un archivo es duramente enlazado, cualquier "copia" del archivo se puede borrar, y los otros quedarán intactos. Normalmente, los archivos tienen un único enlace. Los directorios tienen tantos enlaces como subdirectorios tengan (incluyendo . y ..).

Creación

Los enlaces duros se crean con

  ln origen enlace

Donde el origen es un archivo existente, y enlace es el archivo a crear. El enlace es opcional. Si no se proporciona, se usa el nombre del archivo dado en origen se usa. Si el enlace es un directorio existente, creará el nuevo enlace allí.

Búsqueda

Localizar un enlace duro es un poco más difícil que un enlace simbólico.

En ls -l, el número que sigue a los permisos pero antes del dueño es el número de enlaces a ese archivo. Para archivos normales, si ese número es mayor a 1, entonces ese archivo tiene un enlace duro en algún otro lugar así como también el listado actualmente:

lrwxrwxrwx   2  username groupname  # 2004-03-08 15:55  foo

Los enlaces duros se pueden encontrar con

find -type f -links +1

Esto dará todos los archivos con más de un enlace a ellos.

Puede también identificar si dos archivos comparten el mismo inodo ejecutando

 stat file

en cada archivo. Notará un campo Inodo el cual da el número de inodo único.

Modificación

Debería mencionarse que modificando un archivo con múltiples enlaces duros usualmente significa que los otros enlaces también son afectados. Por ejemplo:

$ echo "Contenido de archivo 1." > archivo1
$ ln archivo1 archivo2
$ cat archivo2
Contenido of archivo 1.
$ echo "Contenido de archivo 2." > file2
$ cat file1
Contenido de archivo 2.

Simbólicos

Los enlaces simbólicos, (frecuentemente referidos simplemente como "symlinks"), son implementados en Linux como un archivo separado conteniendo una referencia en el archivo al archivo original, en términos más técnicos, un inodo conteniendo la ubicación "real" del archivo.

Los enlaces simbólicos usan una ruta que puede ser o absoluta (comenzando con /) o bien relativa a la ubicación del enlace. Si un enlace relativo se crea y luego se mueve, se romperá, mientras que los enlaces absolutos generalmente no.

A causa de su diseño, un enlace simbólico puede apuntar a cualquier directorio o archivo, o aun apuntar a una ubicación inexistente (en cuyo caso es llamado "roto").

Un programa llamado symlinks se escribió para hacer el proceso de ubicar y limpiar los enlaces simbólicos rotos. A diferencia de un enlace duro, borrar el archivo original provocará que el archivo sea borrado y los enlaces simbólicos apuntando a él se convierten en colgantes.

roman@donkey:~$ symlinks -v /etc/
relative: /etc/pam_ldap.conf -> libnss-ldap.conf
other_fs: /etc/motd -> /var/run/motd

Los enlaces simbólicos no tienen permisos o estado por su cuenta. En su lugar, usan los permisos del archivo al que apuntan aunque los permisos del enlace mismo son rwxrwxrwx. El tamaño de un enlace simbólico es informado como la longitud de la ruta que contiene (más el carácter nulo al final).

Ubicación correcta de los archivos del sistema

El comando find

find es una herramienta que permite primariamente la búsqueda de archivos en una jerarquía de directorios. Permite criterios versátiles de búsqueda, salida formateada, y comandos adaptados para ser ejecutados sobre los resultados de la búsqueda.

Ejemplos

Si uno quiere encontrar y borrar todos los archivos viejos de backup de sus sesiones de vi o emacs, pero guardar directorios que terminan en una tilde

Como root:

  find / -type f -name "*~" -exec rm {} \;

Otro ejemplo, siquiere realizar un grep recursivo:

  find . -exec grep -H "textoabuscar" {} \;

Find también funciona bien con xargs. Usando xargs minimiza el número de veces que grep o rm deben correr, acelerando las cosas. Los últimos comandos podrían haber sido:

  find / -type f -name "*~" | xargs rm
  find | xargs grep "textoabuscar"

Desde el directorio actual hacia abajo

  find . -type f -ctime -3 -exec ls -l {} \;

para las últimas 72 horas

  find . -daystart -type f -ctime -3 -exec ls -l {} \;

Para borrar todos los archivos con el nombre gornizali en tmp intentar

  cd /tmp;find ./ -name 'gornizali*' -exec rm -f \{\} ';'

Para contar las filas de todos sus archivos en el directorio actual usar

find | xargs cat  | wc -l


El comando locate

El comando locate devolverá todos los archivos y directorios que contienen la cadena de búsqueda en su nombre. Es básicamente equivalente a usar

find / -name *expresión*

Excepto que es mucho más rápido. Hace esto consultando la base de datos de locate que se actualiza periódicamente por el sistema (usualmente por un trabajo de cron (administrador de tareas periódicas). La siguiente ilustración muestra la salida del comando locate:

prompt:$ locate passwd
/etc/init.d/rpasswdd
/etc/pam.d/passwd
/etc/pam.d/rpasswd
/etc/passwd
/etc/passwd.old
/etc/samba/smbpasswd

La base de datos se puede definir cambiando el valor de la variable de entorno LOCATE_PATH. La base de datos se actualiza comúnmente de manera diaria. Si desea forzar la actualización use el comando updatedb o locate -u.

Puede usar las expresiones regulares con locate por medio de la opción -r:

locate -r "core\.[0-9]"

devuelve:

/usr/share/man/man4/pcmcia_core.4.gz
/usr/share/man/man2/mincore.2.gz

(También encontrará archivos core.[pid] lo cual es útil.)

El comando slocate

slocate es una versión de locate que tiene cuidado por la seguridad del sistema (lo hace administrando permisos y dueños de archivos) evitando que se muestren archivos a los usuarios que no están autorizados.

[sergio@hibernia ~]$ ls -l /usr/bin/locate
lrwxrwxrwx  1 root slocate 7 ago 31 13:58 /usr/bin/locate -> slocate*

El comando updatedb

updatedb es el comando para actualizar la base de datos de locate. En realidad, la base de datos de locate usualmente es la base de datos de slocate, y el comando updatedb es frecuentemente un enlace simbólico a slocate, usando la opción -u o una opción similar. Updatedb es ejecutada actualmente como una tarea de cron.

Mientras que updatedb debería ser suficiente para crear la base de datos inicial (la opción -u es la predeterminada) a veces parece ser necesario ejecutarlo explícitamente.

La única otra opción particularmente útil es -e directorio donde 'directorio' es uno o más directorios a excluirse de la base de datos. Por ejemplo, para excluir el directorio /mnt (que contiene directorios de punto de montaje para dispositivos portátiles), podría modificar la entrada en crontab como esto: updatedb -e /mnt

El archivo de configuración de updatedb /etc/updatedb.conf

Ejemplo de Mandriva Linux 2006

## Linux-Mandrake configuration.

#
# Originally written by Chmouel Boudjnah <chmouel@mandrakesoft.com>
#
# Modified 20010109 by Francis Galiegue <fg@mandrakesoft.com>
#
# Fixes by mlord@pobox.com, 20010328

# Where to start. 
FROM="/"

# Which directories to exclude. /home and /root are excluded for privacy, but
# YMMV
PRUNEPATHS="/proc,/tmp,/var/tmp,/usr/tmp,/net,/afs,/mnt"

# Security level :
#       0 turns security checks off. This will make searchs faster.
#       1 turns security checks on. This is the default.
SECURITY="1"

# Be verbose or no.
VERBOSE="NO"

# Where the database is located.
DATABASE="/var/lib/slocate/slocate.db"


# Which filesystems do we exclude from search?
PRUNEFS="nfs,smbfs,ncpfs,proc,devpts,supermount,vfat,iso9660,udf,usbdevfs,devfs"

El comando whereis

El comando whereis indica la ubicación de archivo binario, las fuentes, manuales, archivos de configuración y librerías de un determinado comando o paquete.

[sergio@hibernia ~]$ whereis rpm
rpm: /bin/rpm /etc/rpm /usr/lib/rpm /usr/share/man/man8/rpm.8.bz2
[sergio@hibernia ~]$ whereis apt
apt: /etc/apt /usr/lib/apt /usr/share/man/man8/apt.8.bz2
[sergio@hibernia ~]$ whereis apt-get
apt-get: /usr/bin/apt-get /usr/share/man/man8/apt-get.8.bz2

El comando which

El comando which dice donde se encuentra un programa. Este asume que el programa está en su PATH (es decir la ruta declarada en la configuración del usuario y/o del sistema). Por ejemplo::

$ which ldd
/usr/bin/ldd

Le dice que el comando ldd fue encontrado en /usr/bin, el cual está en su variable de entorno PATH.

Otro ejemplo:

$ which source
source: shell built-in command

Esto simplemente nos dice que la source es un comando embebido en la shell, que no es un programa real. Significando que no tiene un archivo binario. Otro ejemplo:

$ which javac
javac:   aliased to /usr/j2sdk1.4.2/bin/javac

Esto nos dice que javac es un alias para, en este caso un binario, ubicado en /usr/j2sdk1.4.2/bin/javac.

Licencia del artículo

Imagen:somerights.gif

Este artículo está disponible de acuerdo a los términos de la Licencia Creative Commons Attribution Share-Alike. [Términos de la licencia http://creativecommons.org/licenses/by-sa/2.5/]

Gracias a Jeremy de LQWiki, este artículo se puede distribuir en Argentina de acuerdo a los términos de la licencia Creative Commons - Atribución-CompartirDerivadasIgual 2.5 Argentina . (Lo mismo se aplica a todo artículo derivado de LQWiki que aparezca en este wiki)

Fuentes Consultadas

LQWiki

Herramientas personales