Está en la página 1de 10

Programa: Técnica Profesional en Programación de Computadores

Semestre: 1
Docente: José Palacio
Asignatura: Fundamentos de Sistemas Operativos
Tema: Administración de Archivos y Directorios en GNU/Linux

ADMINISTRACIÓN DE ARCHIVOS
Y DIRECTORIOS EN GNU/LINUX
En Linux todos los archivos se organizan en directorios que, a su vez, se relacionan entre sí jerárquicamente en una
estructura de archivos global. A un archivo se hace referencia no sólo por su nombre, sino también por su ubicación en
la estructura de archivos. Los comandos sobre archivos en Linux pueden realizar operaciones como mover o copiar
directorios complejos junto con sus subdirectorios y archivos, puede localizar archivos, moverlos, enlazarlos, etc. Los
administradores de archivos de escritorio como el Konqueror y Midnight Commander utilizados en los escritorios KDE y
Gnome, ofrecen una interfaz gráfica de usuario para realizar las mismas operaciones usando iconos, ventanas y menús.

ARCHIVOS EN LINUX
Puede asignar nombres a un archivo utilizando cualquier carácter alfabético, el carácter de subrayado y los números.
También puede incluir comas y puntos. A excepción de algunos casos especiales, no debería comenzar nunca un nombre
de archivo con un punto. Como regla práctica se aconseja no utilizar tampoco los siguientes caracteres para nombres
de archivos: ¡ # & ( ) ‘ “ ; | : < > TAB @ $ ^ { } * ? \ . La razón estriba en que el shell reconoce algunos de estos
caracteres dándole un significado propio y llevando a cabo ciertas acciones.

Los nombres de archivos pueden tener un máximo de 256 caracteres, y se debe tener en cuenta que Linux distingue
entre mayúsculas y minúsculas (Case Sensitive).

En los sistemas Linux la extensión no es una característica del archivo como en el caso de Windows. Es decir, el sistema
operativo no reconoce una extensión de por sí, pero a pesar de eso los nombres de archivo suelen seguir ciertos criterios
simulando una extensión. Esto permite al usuario reconocer los archivos simplemente viendo su nombre. La tabla
siguiente resume algunas de las extensiones empleadas más frecuentemente.

Extensión Descripción
.c Código fuente de un programa C
.cc Código fuente de un programa C++
.csh Código de un script de shell
.gif Imagen codificada en formato GIF
.gz Archivo comprimido con gzip
.jpg Imagen codificada en formato JPEG
.o Archivo objeto
.ps Archivo Postscript
.sh Programa Shell
.tar Archivo empaquetado con tar
.tex Archivo formateado con TeX o LaTeX
.txt Texto ASCII
.Z Archivo comprimido con compress

En Linux es común encontrar nombres con más de una extensión, como por ejemplo:

trabajo.tar.gz

1
Esto suele indicar que el archivo trabajo ha sido procesado primero con la orden tar para empaquetar un conjunto de
archivos probablemente y posteriormente con la orden gzip para comprimir el archivo resultante.

En Linux, los archivos poseen una serie de permisos, los cuales fueron indicados anteriormente, además de esto poseen
un usuario dueño del mismo, que es quien puede manipular los permisos del mismo, y decidir a quienes se les da acceso
al mismo y a quienes no.

Se debe tener muy presente que en la consola de Linux todos los archivos son archivos de texto.

DIRECTORIOS
En Linux los directorios indican archivos especiales que permiten agrupar archivos clasificándolos de la forma deseada.
Conceptualmente un directorio actúa como un contenedor de un grupo de archivos.

Análogamente, y dado que un directorio es en sí mismo un archivo, puede contener a su vez otro directorio,
denominado subdirectorio, proporcionando una forma efectiva de organizar la información.

Debido a que los directorios son archivos, estos también pueden ser visualizados dentro de un editor de texto y como
resultado se observarán los archivos contenidos dentro del directorio.

ARCHIVOS ESPECIALES
Los archivos son la piedra angular de Linux. El acceso a los dispositivos se realiza mediante archivos, denominados
archivos de dispositivo, que representan cada uno un dispositivo físico. Por ejemplo, una unidad de disquete tiene
asociado un archivo llamado fd0 (si es la primera o única disquetera). Introducir información en este archivo equivale a
enviar información a la unidad de disquete. Análogamente existen archivos de dispositivo para el puerto de
comunicaciones, la impresora, el teclado, una unidad de disco, etc.

La principal ventaja de Linux a la hora de tratar todo como archivo radica en que permite llevar a cabo una verdadera
independencia del dispositivo. Es decir, el acceso a un puerto serial, por ejemplo, se lleva a cabo de la misma manera
en cualquier sistema Linux (UNIX). Además si se sabe manejar los archivos, sabrá manejar todos los dispositivos del
sistema.

ARCHIVOS PUNTO O ARCHIVOS OCULTOS


Un archivo cuyo nombre comienza por el carácter punto (.) se denomina archivo punto o archivo oculto. En realidad los
archivos ocultos si se pueden ver, aunque no aparecen en el listado de forma normal. Algunos archivos contienes
información crucial para la configuración de programas o para la realización de tareas, algunos pertenecen a un usuario
convencional del sistema, pero no es bueno que el mismo pueda modificarlos tan fácilmente, ya que afectarían su
configuración del sistema.

I-NODOS
Cuando Linux crea un archivo lleva a cabo dos tareas. Por una parte se ocupa de asignar suficiente espacio para
introducir los datos del archivo y por otro lado crea una estructura denominada i-nodo (nodo-i).

El i-nodo contiene la información necesaria para que Linux pueda manipular el archivo. En realidad, como usuario a
usted le resulta irrelevante saber que es un i-nodo y que información contiene para hacer uso de los archivos, sin
embargo resulta clarificador conocer algo sobre ello para entender mejor cómo funciona el sistema de archivos y en
particular como lo hacen los enlaces.

Linux mantiene una tabla con todos los i-nodos del sistema de archivos. Dentro de esta tabla cada nodo es identificado
mediante un número llamado el número-i.

El i-nodo es lo que realmente identifica a un archivo, pues hay un solo i-nodo por cada archivo. Asimismo, el número-i
es también único, puesto que especifica la posición ocupada por el i-nodo en la tabla de i-nodos.
2
Campos que integran la estructura de los i-nodos
El nombre del usuario propietario del archivo
El tipo de archivo (ordinario, directorio, …)
El tamaño del archivo
Donde se encuentran almacenados los datos
Los permisos de los archivo
La última vez que fue modificado el archivo
La última vez que se accedió al archivo
La última vez que se modificó el i-nodo
El número de enlaces del archivo

Haciendo uso de esta tabla, Linux realiza los accesos al sistema de archivos. Así por ejemplo, decimos que un directorio
contiene archivos. Sin embargo, esto no es del todo cierto, en realidad el directorio no contiene los archivos
propiamente dichos, sino todos los nombres de los archivos que a él pertenecen junto con su número-i. con este
enfoque se reduce considerablemente el espacio necesitado para los directorios.

Así, cuando Linux quiere acceder a un archivo contenido en un directorio, sólo tiene que mirar la entrada de directorio,
encontrar su número-i, ir hasta la tabla y buscar el i-nodo con toda la información relativa al archivo.

RUTAS RELATIVAS Y ABSOLUTAS


Las rutas son los caminos para llegar a un lugar específico, a nivel de computadores se dice que una ruta la serie de
directorios que hay que recorrer para llegar a un punto específico del sistema, sea un archivo u otro directorio.

RUTAS ABSOLUTAS
Una ruta absoluta es aquella que siempre empieza por el directorio raíz (/), dicha ruta no cambia sin importar la
ubicación actual dentro del sistema.

/etc/passwd
/var/spool/mail
/home/jose/carta.txt

RUTAS RELATIVAS
Las rutas relativas son aquellas que no empiezan por el directorio raíz, por lo general empiezan en el directorio actual,
aunque existen rutas relativas que pueden empezar por algún directorio de usuario.

Para aprender a utilizar las rutas relativas hay que comprender la siguiente simbología:

. Directorio Actual
.. Directorio Padre
~ Directorio principal del usuario actual
~usuario Directorio personal del usuario indicado

Se debe tener en cuenta que las rutas relativas para llegar a un mismo archivo son diferentes si nos encontramos en
directorios distintos al actual.

../etc/passwd
~/trabajos/Internet.jpg
named/localhost.zone

3
CARACTERES COMODINES
Las órdenes de manipulación de archivos pueden recibir como argumentos ciertos caracteres que reciben un
tratamiento especial, permitiendo realizar operaciones que afectan a varios archivos con cierta facilidad.

Por ejemplo el caracter * puede sustituir cualquier cantidad de caracteres. Por ejemplo para obtener la lista de todos
los archivos que comiencen por las letras ab se digitaría:

ls ab*

Otro carácter que recibe tratamiento especial y que resulta muy útil es el signo de interrogación (?). Situado en cualquier
parte del archivo representa un carácter del mismo. Así, si el directorio actual contiene varios archivos llamados datos1,
datos2, datos3 y datos4, podemos listarlos con la orden:

ls datos?

En otras ocasiones no interesará seleccionar caracteres dentro de un conjunto de ellos. En este caso se pueden emplear
los corchetes ([]) para indicar esa posibilidad. Así por ejemplo, si quisiéramos listar todos los archivos cuyos nombres
empiecen por una letra de la a hasta la e podríamos ejecutar.

ls [a-e]*

Si quisiéramos especificar algunos caracteres en particular podríamos de nuevo hacerlo empleando los corchetes. Por
ejemplo, para listar todos los archivos que comienzan por la letra s tanto en mayúscula como en minúscula se escribiría:

ls [sS]*

Para listar cualquier archivo que empiece por una letra cualquiera usaríamos:

ls [a-zA-Z]*

Se debe tener en cuenta que el comando ls * no muestra los archivos que empiecen en punto (.), para esto deberemos
ejecutar ls .*

Otro carácter comodín son las llaves ({}), estas permiten especificar un conjunto de archivos encerrado entre ambas,
por ejemplo:

ls {aplicacion1,aplicacion2}

En este ejemplo se listan los archivos aplicacion1 y aplicación2

COMANDOS PARA GESTIÓN DE DIRECTORIOS

cd
Este comando permite cambiarse a otro directorio diferente:

cd <directorio>

El cambio de un directorio a otro puede ser de tipo relativo o absoluto

El comando puede utilizar los siguientes atributos:

cd /home Lleva hasta el directorio /home


cd .. Devuelve al directorio anterior al actual
cd . Queda en el directorio actual
cd – Devuelve al directorio anteriormente visitado

4
cd ~ Lleva al directorio personal del usuario actual
cd ~usuario Lleva al directorio del usuario indicado
cd Lleva al directorio personal del usuario actual

mkdir
Este comando permite crear uno o varios directorios al mismo tiempo.

mkdir <dir1> <dir2> <dir3> ….. <dirN>

El comando mkdir posee un parámetro –p que permite crear una estructura de directorios completa.

mkdir –p a/b/c

Este ejemplo crea un directorio llamado a, luego dentro de él crea un directorio llamado b y dentro de éste una llamado
c.

rmdir
El comando rmdir se utiliza para la eliminación de directorios vacíos, posee la misma sintaxis que el comando mkdir.

rmdir <dir1> <dir2> <dir3> .... <dirN>

COMANDOS PARA GESTIÓN DE ARCHIVOS

cp
Este comando permite copiar uno o varios archivos y directorios a una ubicación diferente

La sintaxis de la orden cp es la siguiente:

cp [-ipr] <fichero1> <fichero2> .... <destino>

Los argumentos ficheros representan el nombre de los archivos y/o directorios a copiar y destino es el directorio donde
se ubicarán los ficheros copiados.

El parámetro –i permite que pida confirmación antes de sobrescribir un archivo existente, mientras que el parámetro –
p (preserve) hace que el archivo destino tenga las mismas fechas y permisos que el archivo de origen.

El parámetro –r (recursive) permite que se copie un directorio con todo su contenido al destino indicado.

Si al copiar un archivo a un destino, este no existe, el sistema crea una copia del archivo original con el nuevo nombre
indicado.

cp /home/analisis/archivo /home/manto/fichero

En este ejemplo se copia archivo del directorio analisis al directorio manto cambiándole el nombre a fichero.

mv
El comando mv se utiliza mover un archivo o directorio de una lugar a otro, su utilización es muy parecida a la del
comando cp.

mv [-if] <fichero1> <fichero2> …. <destino>

El parámetros i posee la misma funcionalidad del comando cp, f es para mover de forma forzada, es decir sin preguntar
si se sobrescribirá o no.

5
rm
La orden rm (remove) permite borrar archivos y directorios con todo su contenido.

La sintaxis del comando es:

rm [-fir] <fichero1> <fichero2> .... <ficheroN>

Los parámetros cumplen las mismas funcionalidades explicadas anteriormente.

ENLACES EN LINUX
La funcionalidad de los archivos ordinarios se ve mejorada con la introducción de los enlaces duros y los enlaces
simbólicos.

ENLACES DUROS
Un enlace no es más un segundo nombre para un archivo. El efecto es como si dos usuarios tuviesen copias del mismo
archivo pero en realidad comparten una misma copia del archivo con dos nombres. Con esta solución no solo se ahorra
espacio, también se consigue que las modificaciones realizadas por uno sean vistas por el otro.

ENLACES SIMBÓLICOS
Los enlaces simbólicos se introdujeron para mejorar ciertas limitaciones de los enlaces duros. En particular, los enlaces
no permiten asignar más de un nombre a los directorios. Tampoco se puede hacer un enlace de un archivo perteneciente
a un sistema de archivos localizado en otra máquina de la red. Estos problemas se solucionan con el uso de los enlaces
simbólicos, introducidos en el UNIX System V Versión 4.

Un enlace simbólico no es más que un archivo que contiene el nombre de otro archivo, de forma que cuando se hace
referencia al enlace simbólico ésta se dirige al archivo apuntado por el enlace. También puede crearse un archivo
simbólico que apunte a un directorio produciendo el mismo efecto. Este mecanismo contrasta con el de los enlaces
duros. En esta ocasión tenemos dos archivos con dos nombres, mientras que en los enlaces duros tenemos dos nombres
para el mismo archivo.

Existe otra diferencia importante entre los enlaces duros y simbólicos. Los enlaces duros a un archivo son indistinguibles
entre sí. Eliminar cualquiera de ellos o el primero que dio origen al archivo no afecta al resto. Los enlaces simbólicos,
por el contrario, dependen del archivo con el que están enlazados.

ln
El comando ln permite la creación de enlaces a un archivo o directorio específico. Se debe tener en cuenta que para
directorios se deberán crear enlaces de tipo simbólico.

La sintaxis del comando ln es la siguiente:

ln [-s] <fichero> <enlace>

Donde fichero es el nombre y la ubicación del archivo a enlazar y enlace es el nombre y la ruta del enlace a realizar.

El parámetro –s se utiliza para indicar un enlace simbólico.

ln ~/proyecto1/normativa.txt ~/proyecto2/normativa.txt

En el ejemplo se observa que se creará un enlace llamado normativa.txt dentro de un directorio llamado proyecto2 de
un archivo con el mismo nombre pero ubicado en el directorio proyecto1.

6
COMANDOS PARA ADMINISTRACION DE DISCO

df
Provee información sobre la utilización del espacio en disco en los diferentes sistemas de archivos montados en el
sistema. Para un sistema Linux, quedarse sin espacio libre es algo bastante grave, ya que muchos demonios y programas
en general utilizan el directorio /tmp para guardar información mientras se ejecutan. La sintaxis de df es la siguiente:

df [opciones] [sistema-de-archivo...]

Si no se provee del argumento sistema-de-archivo, df informará acerca de todos los sistemas de archivos montados y
en funcionamiento. Las opciones de df más relevantes son:

-h: Imprimir los tamaños de forma más legible para humanos.

-i: Informar sobre la utilización de los i-nodos. Los i-nodos son estructuras internas del sistema de archivos. Cuando éste
se queda sin i-nodos libres, por más que haya espacio libre en el disco, no se podrán crear nuevos archivos hasta que se
liberen i-nodos, generalmente esto no pasa a menos que se haya generado una enorme cantidad de archivos muy
pequeños.

-k: Mostrar los tamaños en bloques de 1024 bytes.

-m: Mostrar los tamaños en bloques de mega-bytes.

-h: Muestra los tamaños de archivo en un formato más legible.

Ejemplo de ejecución del comando df

usuario@maquina:~/$ df
Filesystem 1k-blocks Used Available Use% Mount
/dev/hda2 2949060 2102856 696400 75% /
/dev/hda1 23302 2593 19506 12% /boot
/dev/hda4 10144728 5506796 4637932 54% /home
/dev/hdb2 3678764 3175268 503496 86% /u

du
Este comando informa al usuario de la cantidad de almacenamiento utilizado por los archivos especificados, posee
varias opciones, su sintaxis es la siguiente:

du [opciones] [archivo...]

Sus opciones más significativas son:

-s: Muestra únicamente los tamaños de los archivos especificados en la línea de comandos.

-h: Muestra los tamaños de archivo en un formato más legible.

-c: Muestra en pantalla el espacio total ocupado por los archivos especificados.

-x: Omite en el conteo aquellos directorios que pertenezcan a otro sistema de archivos.

El administrador de un servidor necesita saber el espacio en disco ocupado por los distintos directorios del sistema, para
hacer limpieza. Para esto, se tiene en cuenta que no se deberán contar aquellos directorios que estén en su propio
sistema de archivos, entonces se puede ejecutar de esta forma:

7
# du -sxh /*
6.8M /bin
6.7M /boot
351k /dev
34M /etc
2.8G /home
43M /lib
3.0k /mnt
0 /proc
15M /root
7.3M /sbin
512 /swap
281k /tmp
5.3G /usr
758M /var

free
El comando free muestra el total de la memoria física de nuestro sistema y de las particiones de memoria virtual así
como las cantidades de memoria que estamos utilizando, que queda libre, que está siendo compartida en buffers del
kernel y cacheada.

total used free shared buffers cached


Mem: 256812 240668 16144 105176 50520 81848
-/+ buffers/cache: 108300 148512
Swap: 265032 780 264252

El comando free -m muestra la misma información, pero en megabytes, lo cual es más fácil de leer.

COMANDOS DE BUSQUEDA

find
Se utiliza este comando para buscar archivos dentro de una jerarquía de directorios. La búsqueda, como veremos más
adelante, se puede realizar mediante varios criterios. La sintaxis de este comando es:

find [ruta...] [expresión]

La expresión se conforma de opciones, pruebas y acciones.

Algunos de los criterios de búsqueda que se pueden utilizar son:

find CAMINO -name ARCHIVO


find CAMINO -name ARCHIVO -perm MODO

ARCHIVO corresponde al nombre entero o en parte del archivo que se está buscando, MODO son los permisos del
archivo a buscar representados en octal.

Por ejemplo; recuerda haber almacenado en su directorio personal una foto de su familia cuando estaban de vacaciones,
y lo único que recuerda es que estaba en formato PNG, para intentar localizar dicha foto, usa el comando find de la
siguiente forma:

8
find /home/carlos -name "*.png"

El administrador de un servidor de Internet necesita realizar una auditoría de seguridad, para ello una de las pruebas
que se necesita realizar es identificar aquellos archivos o directorios que poseen permiso de escritura para cualquier
usuario, esto lo puede hacer como sigue:

find / -perm 777

Este comando listará también los enlaces simbólicos, que aunque en el listado aparecen con todos los permisos
activados, no significa que cualquier usuario los pueda modificar. Para evitar entonces este inconveniente, se puede
ejecutar el comando de esta manera:

find / -perm 777 –follow

La opción -follow instruye a find para que en lugar de hacer la prueba con los enlaces simbólicos, la haga con los archivos
apuntados por estos enlaces.

locate
locate es un comando de búsqueda de archivos, bastante parecido al comando find. La diferencia de locate es que la
búsqueda la hace en una base de datos indexada para aumentar significativamente la velocidad de respuesta. Esto
quiere decir, que locate realmente no busca en el disco del sistema, sino que en un archivo con la lista de todos los
archivos que existen en Linux. Generalmente todas las distribuciones de Linux ejecutan a una hora determinada
(generalmente cerca de las 4:00 am, ya que tarda algún tiempo realizar esta tarea) un comando para actualizar la base
de datos que utiliza locate, dicho comando se llama updatedb. Su sintaxis es:

locate PATRÓN

Donde PATRÓN corresponde al mismo tipo de patrón que en el comando find. Ejemplo de ejecución:

Ejemplo de uso del comando locate

usuario@maquina:~/$ locate locate


/usr/bin/locate
/usr/lib/locate
/usr/lib/locate/bigram
/usr/lib/locate/code
/usr/lib/locate/frcode
/usr/share/doc/kde/HTML/en/kcontrol/kcmlocate.docbook.gz
/usr/share/doc/xlibs-dev/XdbeAllocateBackBufferName.3.html
/usr/share/doc/xlibs-dev/XdbeDeallocateBackBufferName.3.html
/usr/share/doc/xlibs-dev/XtAllocateGC.3.html
/usr/share/emacs/20.7/lisp/locate.elc
/usr/share/gnome/help/gsearchtool/C/locate.png
/usr/share/man/man1/locate.1.gz
/usr/share/man/man5/locatedb.5.gz
/usr/X11R6/man/man3/XdbeAllocateBackBufferName.3x.gz
/usr/X11R6/man/man3/XdbeDeallocateBackBufferName.3x.gz
/usr/X11R6/man/man3/XtAllocateGC.3x.gz
/var/lib/locate
/var/lib/locate/locatedb
/var/lib/locate/locatedb.n

Como se puede observar, locate ha listado todos aquellos archivos que posean la palabra “locate” en su nombre (los
directorios están incluidos).

9
whereis
Este comando se utiliza para localizar el archivo binario, el código fuente y la página de manual de un determinado
comando. Su sintaxis es como sigue:

whereis [opciones] archivo...

La lista de opciones más utilizadas es:

-b: Buscar solamente el archivo binario.

-m: Buscar solamente la página manual.

-s: Buscar solamente el código fuente.

Como ejemplos, se ve lo siguiente:

usuario@maquina:~/$ whereis -m whereis


whereis: /usr/share/man/man1/whereis.1.gz

usuario@maquina:~/$ whereis passwd


passwd: /usr/bin/passwd /etc/passwd /usr/man/passwd.5.gz

En el primer caso se ha pedido la página de manual del mismo comando whereis, mientras que en el segundo se han
pedido todos los archivos que tengan que ver con el comando passwd.

grep
Su funcionalidad es la de escribir en salida estándar aquellas líneas que concuerden con un patrón. Su sintaxis es como
sigue:

grep [opciones] PATRÓN [ARCHIVO...]

grep [opciones] [-e PATRÓN | -f ARCHIVO] [ARCHIVO...]

Este comando realiza una búsqueda en los ARCHIVOs (o en la entrada estándar, si no se especifica ninguno) para
encontrar líneas que concuerden con PATRÓN. Por defecto grep imprime en pantalla dichas líneas. Sus opciones más
interesantes son:

-c: Modificar la salida normal del programa, en lugar de imprimir por salida estándar las líneas coincidentes, imprime la
cantidad de líneas que coincidieron en cada archivo.

-e PATRÓN: Usar PATRÓN como el patrón de búsqueda, muy útil para proteger aquellos patrones de búsqueda que
comienzan con el signo “”.

-f ARCHIVO: Obtiene los patrones del archivo ARCHIVO

-H: Imprimir el nombre del archivo con cada coincidencia.

-r: Buscar recursivamente dentro de todos los subdirectorios del directorio actual.

El patrón de búsqueda normalmente es una palabra o una parte de una palabra. También se pueden utilizar expresiones
regulares, para realizar búsquedas más flexibles.

Si se quisiera buscar la ocurrencia de todas las palabras que comiencen con “a” minúscula, la ejecución del comando
sería algo así:

grep 'a*' archivo

10