Está en la página 1de 88

EX - LINUX EXPERTO EN LINUX.

MODULO 1

EXPERTO EN LINUX.
MODULO 1

Breve Historia

El núcleo Linux, desde la primera publicación de su código fuente en 1991, nacido desde un pequeño
número de archivos en lenguaje C bajo una licencia que prohíbe la distribución comercial a su estado
actual de cerca de 296 MiBs de fuente bajo la Licencia pública general de GNU.

En 1983 Richard Stallman inició el ambicioso Proyecto GNU, con el propósito de crear un sistema
operativo similar y compatible con UNIX y los estándares POSIX. Dos años más tarde, 1985, creó la
Fundación del Software Libre (FSF) y desarrolló la Licencia pública general de GNU (GNU GPL), para
tener un marco legal que permitiera difundir libremente el software. De este modo el software de
GNU fue desarrollado muy rápidamente, y por muchas personas. A corto plazo, se desarrolló una
multiplicidad de programas, de modo que a principios de los años 1990 había casi bastante software
disponible como para crear un sistema operativo completo. Sin embargo, todavía le faltaba un
núcleo.

Esto debía ser desarrollado en el proyecto GNU Hurd, pero Hurd demostró desarrollarse muy
inactivamente, porque encontrar y reparar errores (eliminación de fallos, debugging en inglés) era
muy difícil, debido a las características técnicas del diseño del micro núcleo.

Otro proyecto de sistema operativo software libre, en los años 1980 fue BSD. Este fue desarrollado
en la Universidad de Berkeley desde la 6. ª Edición de Unix de AT&T. Puesto que el código de AT&T
Unix estaba contenido en BSD, AT&T presentó una demanda a principios de los años 1990 contra la
Universidad de Berkeley, la cual limitó el desarrollo de BSD y redujo el desarrollo. Así a principios de
los años 1990 no produjo ningún sistema completo libre.

El futuro de BSD era incierto debido al pleito y detuvo el desarrollo. Además, el Proyecto GNU
gradualmente se desarrollaba pero, este carecía de un bien formado núcleo UNIX. Esto dejó un nicho
crítico abierto, que Linux llenaría muy pronto.

Desarrollo del núcleo Linux

Mascota de Linux

En 1991 en Helsinki, Linus Torvalds comenzó un proyecto que más tarde llegó a ser el núcleo Linux.
Esto fue al principio un emulador terminal, al cual Torvalds solía tener acceso en los grandes

Academy Xperts Bolivia 1


EX - LINUX EXPERTO EN LINUX. MODULO 1

servidores UNIX de la universidad. Él escribió el programa expresamente para el hardware que


usaba, e independiente de un sistema operativo, porque quiso usar las funciones de su nueva
computadora personal con un procesador 80386. Este es aún el estándar de hoy. El sistema
operativo que él usó durante el desarrollo fue Minix, y el compilador inicial fue el GNU C compiler,
que aún es la opción principal para compilar Linux hoy (aunque Linux puede ser compilado bajo
otros compiladores, tal como el Intel C Compiler).

Como Torvalds escribió en su libro "Solamente por diversión"), él tarde o temprano comprendió que
había escrito un núcleo de sistema operativo. El 25 de agosto de 1991, anunció este sistema en un
envío a la red Usenet, en el newsgroup (grupo de noticias):

Hola a todos aquellos que usan Minix -

Estoy haciendo un sistema operativo (gratuito) (solamente una afición, no será grande ni profesional como el
GNU) para clones 386(486) AT. Este ha estado gestándose desde abril, y está comenzando a estar listo. Me
gustaría recibir cualquier comentario sobre las cosas que gustan/disgustan en minix, ya que mi SO (Sistema
Operativo) se le parece un poco (la misma disposición física del sistema de archivos, debido a motivos
prácticos, entre otras cosas).

Actualmente he portado bash(1.08) y gcc(1.40), y las cosas parecen funcionar. Esto implica que conseguiré
algo práctico dentro de unos meses, y me gustaría saber qué características quiere la mayoría de la gente.
Cualquier sugerencia es bienvenida, pero no prometeré que las pondré en práctica :-)

Linus Benedict Torvalds (torvalds@kruuna.helsinki.fi)

PD. Sí – es libre de cualquier código de minix, y tiene un sistema de archivos multi-hilo. NO es portable (usa
386 una conmutación de tarea etc.), y probablemente nunca será soportada por nada más que los discos
duros AT, porque es todo lo que tengo :-(.

Linux bajo la Licencia pública general de GNU GPL

Torvalds primero publicó el núcleo Linux bajo su propia licencia, la cual fue casi una licencia de
código fuente compartida (en inglés, share source) y que tenía una restricción contra la actividad
comercial. En 1992, él sugirió cambiar a la GNU GPL. Primero anunció este cambio en las notas de
lanzamiento de la versión 0.12.4, a mediados de diciembre de 1992 él publicó la versión 0.99 usando
la GNU GPL.5

Más tarde, Torvalds dijo en una entrevista, "registrar a Linux bajo la GPL fue definitivamente la mejor
cosa que alguna vez hice".

Distribuciones y versión de Kernel de Linux

Academy Xperts Bolivia 2


EX - LINUX EXPERTO EN LINUX. MODULO 1

Versión de kernel linux

Actualmente kernel de Linux esta 4.8-rc2 pero la más estable es la versión 4.7.2.

Distribuciones de Linux
A continuación podes encontrar información sobre las distribuciones más importantes de
Linux (aunque no las únicas).

Academy Xperts Bolivia 3


EX - LINUX EXPERTO EN LINUX. MODULO 1

UBUNTU

Distribución basada en Debian, con lo que esto conlleva y centrada


en el usuario final y facilidad de uso. Muy popular y con mucho
soporte en la comunidad. El entorno de escritorio por defecto es
GNOME.

• http://www.ubuntu.com/

REDHAT ENTERPRISE

Esta es una distribución que tiene muy buena calidad, contenidos y


soporte a los usuarios por parte de la empresa que la distribuye. Es
necesario el pago de una licencia de soporte. Enfocada a empresas.

• https://www.redhat.com/en

FEDORA

Esta es una distribución patrocinada por RedHat y soportada por la


comunidad. Fácil de instalar y buena calidad.

• http://fedora.redhat.com/

DEBIAN

Otra distribución con muy buena calidad. El proceso de instalación es


quizás un poco más complicado, pero sin mayores problemas. Gran
estabilidad antes que últimos avances.

• http://www.debian.org/

Academy Xperts Bolivia 4


EX - LINUX EXPERTO EN LINUX. MODULO 1

OpenSuSE

Otra de las grandes. Fácil de instalar. Versión libre de la distribución


comercial SuSE.

• https://www.opensuse.org/

SuSE LINUX ENTERPRISE

Otra de las grandes. Muy buena calidad, contenidos y soporte a los


usuarios por parte de la empresa que la distribuye, Novell. Es
necesario el pago de una licencia de soporte. Enfocada a empresas.

• https://www.suse.com/

SLACKWARE

Esta distribución es de las primeras que existió. Tuvo un periodo en


el cual no se actualizo muy a menudo, pero eso es historia. Es raro
encontrar usuarios de los que empezaron en el mundo linux hace
tiempo, que no hayan tenido esta distribución instalada en su
ordenador en algún momento.

• http://www.slackware.com/

Academy Xperts Bolivia 5


EX - LINUX EXPERTO EN LINUX. MODULO 1

GENTOO

Esta distribución es una de las únicas que incorporaron un concepto


totalmente nuevo en Linux. Es un sistema inspirado en BSD-ports.
Puedes compilar/optimizar vuestro sistema completamente desde
cero. No es recomendable adentrarse en esta distribución sin una
buena conexión a internet, un ordenador medianamente potente (si
quieres terminar de compilar en un tiempo prudencial) y cierta
experiencia en sistemas Unix.

• https://www.gentoo.org/

KUBUNTU

Distribución basada en Ubuntu, con lo que esto conlleva y centrada


en el usuario final y facilidad de uso. La gran diferencia con Ubuntu
es que el entorno de escritorio por defecto es KDE.

• http://www.kubuntu.com/

MANDRIVA

Esta distribución fue creada en 1998 con el objetivo de acercar el uso


de Linux a todos los usuarios, en un principio se llamó Mandrake
Linux. Facilidad de uso para todos los usuarios.

• http://www.mandrivalinux.org/

Hay distribuciones que son especialmente para un servicio como Centos que es orientado a
servidores y Kali para realizar testeos de penetración.

PRACTICA 0

Cada alumno tiene que averiguar que distribuciones más existen con el kernel Linux y para cuál es
su función.

Academy Xperts Bolivia 6


EX - LINUX EXPERTO EN LINUX. MODULO 1

Tema 1: Arquitectura de Sistemas

1.1 ESTRUCTURA BASICA

De la misma manera que el Unix, el Linux se puede dividir generalmente en cuatro componentes
principales: el núcleo (kernel), el shell, el sistema de archivos y las utilidades. El núcleo es el
programa medular que ejecuta programas y gestiona dispositivos de hardware tales como los discos
y las impresoras. El shell proporciona una interfaz para el usuario. Recibe órdenes del usuario y las
envía al núcleo para ser ejecutadas. El sistema de archivos, organiza la forma en que se almacenan
los archivos en dispositivos de almacenamiento tales como los discos. Los archivos están
organizados en directorios. Cada directorio puede contener un número cualquiera de
subdirectorios, cada uno de los cuales puede a su vez, contener otros archivos. El núcleo, el shell y
el sistema de archivos forman en conjunto la estructura básica del sistema operativo. Con estos tres
elementos puede ejecutar programas, gestionar archivos e interactuar con el sistema. Además,
Linux cuenta con unos programas de software llamados utilidades que han pasado a ser
considerados como características estándar del sistema. Las utilidades son programas
especializados, tales como editores, compiladores y programas de comunicaciones, que realizan
operaciones de computación estándar. Incluso uno mismo puede crear sus propias utilidades

Academy Xperts Bolivia 7


EX - LINUX EXPERTO EN LINUX. MODULO 1

Como una alternativa a la interfaz de la línea de órdenes, Linux proporciona una interfaz gráfica de
usuario (GUI) llamada X-Windows que cuenta con varios administradores de ventana que puede
utilizar. Un administrador de ventana trabaja de forma muy parecida a los GUI de Windows y del
Mac, posee ventanas iconos y menús, todos ellos gestionados por medio del ratón. Dos de los
administradores de programas más populares son el Free Virtual Window Manager y el Open Look
Window Managger, además de los administradores de ventanas X-Windows también utiliza un
administrador de archivos y uno de programas.

El sistema de archivos de Linux organiza los archivos en directorios, de forma similar al DOS. Todo
el sistema de archivos de Linux es un gran conjunto interconectado de directorios que están
organizados en una estructura jerárquica de árbol. Linux posee un gran número de utilidades que
se pueden clasificar en tres categorías: editores, filtros y programas de comunicaciones. Y a
diferencia de otros sistemas operativos se distribuye de forma gratuita bajo una licencia pública de
GNU de la Free Software Foundation (Fundación de programas libres) lo que básicamente significa
que puede ser copiado libremente, cambiado y distribuido dejando siempre disponible el código
fuente.

El software de Linux es frecuentemente desarrollado por varios usuarios que deciden trabajar
conjuntamente en un proyecto. Una vez que se ha completado se instala en una localización ftp de
Internet. Cualquier usuario de Linux puede acceder a la localización y descargar el software.

a) EL SHELL

El shell proporciona una interfaz entre el núcleo y el usuario. Se puede describir como un intérprete:
interpreta las órdenes que introduce el usuario y las envía al núcleo. La interfaz del shell es muy
sencilla. Normalmente consiste en un inductor desde el que se teclea una orden y después se pulsa
enter. En cierta forma, se está tecleando una orden en una línea. A menudo, esta línea se conoce
como la línea de órdenes.

Academy Xperts Bolivia 8


EX - LINUX EXPERTO EN LINUX. MODULO 1

Como una alternativa a la interfaz de la línea de órdenes, Linux proporciona una interfaz gráfica de
usuario (GUI) llamada X-Windows, que cuenta con varios administradores de ventanas que puede
utilizar. Dos de los administradores de ventanas más populares son el Free Virtual Window Manager
(fvwm) y el Open Look Window Manager (olwm).

Aunque un administrador de ventanas constituye una interfaz flexible y vistosa, hay que tener
presente que tan solo es un añadido al shell. El administrador de ventanas simplemente le pasa al
shell las órdenes que recibe, éste las interpreta y las envía de nuevo al núcleo, para ser ejecutadas.

A lo largo de los años se han hido desarrollando varios tipos de diferentes de shell. En la actualidad,
hay tres shells principales: Bourne, Korn y C-shell. El shell Bourne fue desarrollado en el Laboratorio
Bell para el sistemaV. El C-shell fue desarrollado para la versión BSD del Unix. El shell Korn es una
mejora y ampliación del shell Bourne. Linux usa versiones mejoradas o de dominio público de estos
shells: el shell Bourne Again, el TC-shell y el shell Korn. Una vez que inicie su sistema Linux, se
encontrará en el shell Bourne Again; donde se podrá acceder a los demás.

b) SISTEMA DE ARCHIVOS

Los directorios están organizados en una estructura jerárquica de árbol, que empieza en un
directorio raíz (root) inicial. Todos los demás directorios se derivan, en última instancia, de este
primer directorio raíz.

Academy Xperts Bolivia 9


EX - LINUX EXPERTO EN LINUX. MODULO 1

c) CARACTERISTICAS

• Multitarea: La palabra multitarea describe la habilidad de ejecutar varios programas al mismo


tiempo. LINUX utiliza la llamada multitarea preventiva, la cual asegura que todos los programas que
se están utilizando en un momento dado serán ejecutados, siendo el sistema operativo el encargado
de ceder tiempo de microprocesador a cada programa.

• Multiusuario: Muchos usuarios usando la misma maquina al mismo tiempo.

• Multiplataforma: Las plataformas en las que en un principio se puede utilizar Linux son 386-, 486-
. Pentium, Pentium Pro, Pentium II, Amiga y Atari, también existen versiones para su utilización en
otras plataformas, como Alpha, ARM, MIPS, PowerPC y SPARC.

• Multiprocesador: Soporte para sistemas con más de un procesador está disponible para Intel y
SPARC.

• Funciona en modo protegido 386.

• Protección de la memoria entre procesos, de manera que uno de ellos no pueda colgar el sistema.

• Carga de ejecutables por demanda: Linux sólo lee del disco aquellas partes de un programa que
están siendo usadas actualmente.

• Política de copia en escritura para la compartición de páginas entre ejecutables: esto significa que
varios procesos pueden usar la misma zona de memoria para ejecutarse. Cuando alguno intenta
escribir en esa memoria, la página (4Kb de memoria) se copia a otro lugar. Esta política de copia en
escritura tiene dos beneficios: aumenta la velocidad y reduce el uso de memoria.

• Memoria virtual usando paginación (sin intercambio de procesos completos) a disco: A una
partición o un archivo en el sistema de archivos, o ambos, con la posibilidad de añadir más áreas de

Academy Xperts Bolivia 10


EX - LINUX EXPERTO EN LINUX. MODULO 1

intercambio sobre la marcha Un total de 16 zonas de intercambio de 128Mb de tamaño máximo


pueden ser usadas en un momento dado con un límite teórico de 2Gb para intercambio. Este límite
se puede aumentar fácilmente con el cambio de unas cuantas líneas en el código fuente.

• La memoria se gestiona como un recurso unificado para los programas de usuario y para el caché
de disco, de tal forma que toda la memoria libre puede ser usada para caché y ésta puede a su vez
ser reducida cuando se ejecuten grandes programas.

• Todo el código fuente está disponible, incluyendo el núcleo completo y todos los drivers, las
herramientas de desarrollo y todos los programas de usuario; además todo ello se puede distribuir
libremente. Hay algunos programas comerciales que están siendo ofrecidos para Linux actualmente
sin código fuente, pero todo lo que ha sido gratuito sigue siendo gratuito.

• Emulación de 387 en el núcleo, de tal forma que los programas no tengan que hacer su propia
emulación matemática. Cualquier máquina que ejecute Linux parecerá dotada de coprocesador
matemático. Por supuesto, si el ordenador ya tiene una FPU (unidad de coma flotante), esta será
usada en lugar de la emulación, pudiendo incluso compilar tu propio kernel sin la emulación
matemática y conseguir un pequeño ahorro de memoria.

• Soporte para muchos teclados nacionales o adaptados y es bastante fácil añadir nuevos
dinámicamente.

• Consolas virtuales múltiples: varias sesiones de login a través de la consola entre las que se puede
cambiar con las combinaciones adecuadas de teclas (totalmente independiente del hardware de
video). Se crean dinámicamente y puedes tener hasta 64.

• Acceso transparente a particiones MS-DOS (o a particiones OS/2 FAT) mediante un sistema de


archivos especial: no es necesario ningún comando especial para usar la partición MS-DOS, esta
parece un sistema de archivos normal de Unix (excepto por algunas restricciones en los nombres de
archivo, permisos, y esas cosas). Las particiones comprimidas de MS-DOS 6 no son accesibles en
este momento, y no se espera que lo sean en el futuro. El soporte para VFAT (WNT, Windows 95)
ha sido añadido al núcleo de desarrollo y estará en la próxima versión estable.

• Un sistema de archivos especial llamado UMSDOS que permite que Linux sea instalado en un
sistema de archivos DOS.

• Sistema de archivos de CD-ROM que lee todos los formatos estándar de CD-ROM.

• TCP/IP, incluyendo ftp, telnet, NFS, etc.

• Diversos protocolos de red incluidos en el kernel: TCP, IPv4, IPv6, AX.25, X.25, IPX, DDP, Netrom,
etc.

CARACTERISTICAS GENERALES

- Linux es un kernel monolítico


- Es capaz de linkar módulos en tiempo de ejecución
- No está diseñado a partir de hilos de núcleo

Academy Xperts Bolivia 11


EX - LINUX EXPERTO EN LINUX. MODULO 1

- Tiene un diseño reentrante de modo que pueden existir varios procesos en modo núcleo
‘ejecutándose’ a la vez.
- Tiene soporte para aplicaciones de usuario multihilo
- Compatible con estándares: POSIX, las APIs del UNIX SysV y los sockets BSD
- Admite multiproceso simétrico (SMP)
- No expropiativo

SEGURIDAD

Se debe tener cuidado con este sistema. Verificando los registros (logs) del sistema, tales como
/var/log/messages y no perder de vista el sistema.

Se debe tener el sistema actualizado, estar seguro de que se ha instalado las versiones actuales de
los programas y estar al tanto de las nuevas alertas de seguridad.

2. Proceso de arranque de Linux

El proceso de arranque en Linux es el proceso de inicialización del sistema operativo que realiza
Linux el núcleo o kernel (un componente de este sistema informático), el programa en el sistema
que asigna los recursos de la máquina a los otros programas que ejecuta.

En Linux, el flujo de control durante el arranque es desde el BIOS, al gestor de arranque y al núcleo
(kernel). El núcleo inicia el planificador (para permitir la multitarea) y ejecuta el primer espacio de
usuario (es decir, fuera del espacio del núcleo) y el programa de inicialización (que establece el
entorno de usuario y permite la interacción del usuario y el inicio de sesión), momento en el que el
núcleo se inactiva hasta que sea llamado externamente.

La etapa del cargador de arranque no es totalmente necesaria. Determinadas BIOS pueden cargar y
pasar el control a Linux sin hacer uso del cargador. Cada proceso de arranque será diferente
dependiendo de la arquitectura del procesador y el BIOS.

1. El BIOS realiza las tareas de inicio específicas de la plataforma de hardware.


2. Una vez que el hardware es reconocido y se inicia correctamente, el BIOS carga y ejecuta el
código de la partición de arranque del dispositivo de arranque designado, que contiene la
fase 1 de un gestor de arranque Linux. La fase 1 carga la fase 2 (la mayor parte del código
del gestor de arranque). Algunos cargadores pueden utilizar una fase intermedia (conocida
como la fase 1.5) para lograr esto, ya que los modernos discos de gran tamaño no pueden
ser totalmente leídos sin código adicional.
3. El gestor de arranque a menudo presenta al usuario un menú de opciones posibles de
arranque. A continuación, carga el sistema operativo, que descomprime en la memoria, y
establece las funciones del sistema como del hardware esencial y la paginación de memoria,
antes de llamar a la función start_kernel().
4. La función start_kernel() a continuación realiza la mayor parte de la configuración del
sistema (interrupciones, el resto de la gestión de memoria, la inicialización del dispositivo,
controladores, etc), antes de continuar por separado el proceso inactivo y planificador, y el
proceso de Init (que se ejecuta en el espacio de usuario).

Academy Xperts Bolivia 12


EX - LINUX EXPERTO EN LINUX. MODULO 1

5. El planificador toma control efectivo de la gestión del sistema, y el núcleo queda dormido
(inactivo).
6. El proceso Init ejecuta secuencias de comandos (Scripts) necesarios para configurar todos
los servicios y estructuras que no sean del sistema operativo, a fin de permitir que el entorno
de usuario sea creado y pueda presentarse al usuario con una pantalla de inicio de sesión.

En el apagado, Init es llamado a cerrar todas las funcionalidades del espacio de usuario de una
manera controlada, de nuevo a través de secuencias de comandos, tras lo cual el Init termina y el
núcleo ejecuta el apagado.

• Fase del cargador de arranque

Un cargador de arranque (boot loader en inglés) es un programa diseñado exclusivamente para


cargar un sistema operativo en memoria. La etapa del cargador de arranque es diferente de una
plataforma a otra.

Como en la mayoría de arquitecturas este programa se encuentra en el MBR, el cual es de 512 bytes,
este espacio no es suficiente para cargar en su totalidad un sistema operativo. Por eso, el cargador
de arranque consta de varias etapas. Las primeras operaciones las realiza el BIOS. En esta etapa se
realizan operaciones básicas de hardware. En esta primera etapa se localiza el sector de arranque
(o MBR) y se carga el cargador de este sector (normalmente una parte de LILO o GRUB).

A partir de ese momento, el proceso de arranque continúa de la siguiente manera:

La primera etapa del cargador de arranque carga el resto del gestor de arranque, que normalmente
da un mensaje que pregunta que sistema operativo (o tipo de sesión) el usuario desea inicializar.
Bajo LILO, esto se hace a través del mapa instalado que lee el archivo de configuración /etc/lilo.conf
para identificar los sistemas disponibles. Incluye datos como la partición de arranque y la
localización del kernel para cada uno, así como las opciones personalizadas en su caso. El sistema
operativo seleccionado es cargado en la memoria RAM, un sistema de archivos mínimo inicial se
establece en la memoria RAM desde un archivo de imagen (" initrd "), y junto con los parámetros
adecuados, el control se pasa al sistema operativo activado recientemente.

LILO y GRUB difieren en algunos aspectos:

LILO no entiende los sistemas de archivos, por lo que utiliza desplazamientos de disco sin procesar
y el BIOS para cargar los datos. Se carga el código del menú y, a continuación, en función de la
respuesta, carga, o el sector MBR del disco de 512 bytes como en Microsoft Windows, o la imagen
del kernel de Linux.

GRUB por el contrario comprende los sistemas de archivos comunes ext2 , ext3 y ext4. Debido a que
GRUB almacena sus datos en un archivo de configuración en vez de en el MBR y a que contiene un
interfaz de línea de comandos, a menudo es más fácil rectificar o modificar GRUB si está mal
configurado o corrupto.

• GRUB

GRUB se carga y se ejecuta en 4 etapas:

Academy Xperts Bolivia 13


EX - LINUX EXPERTO EN LINUX. MODULO 1

La primera etapa del cargador la lee el BIOS desde el MBR.

La primera etapa carga el resto del gestor de arranque (segunda etapa). Si la segunda etapa está en
una unidad grande, en ocasiones se carga una fase intermedia 1.5, que contiene código adicional
para permitir que los cilindros por encima de 1024, o unidades tipo LBA, puedan leerse. El gestor de
arranque 1.5 es almacenado (si es necesario) en el MBR o en la partición de arranque.

La segunda etapa del gestor de arranque ejecuta y muestra el menú de inicio de GRUB que permite
al usuario elegir un sistema operativo y examinar y modificar los parámetros de inicio.

Después de elegir un sistema operativo, se carga y se le pasa el control.

GRUB soporta métodos de arranque directo, arranque chain-loading, LBA, ext2, ext3, ext4 y hasta
"un pre-sistema operativo en máquinas x86 totalmente basado en comandos". Contiene tres
interfaces: un menú de selección, un editor de configuración, y una consola de línea de comandos.

• LILO

LILO es más antiguo. Es casi idéntico a GRUB en su proceso, excepto que no contiene una interfaz
de línea de comandos. Por lo tanto todos los cambios en su configuración deben ser escritos en el
MBR y luego reiniciar el sistema. Un error en la configuración puede dejar el disco inservible para el
proceso de arranque hasta tal grado, que sea necesario usar otro dispositivo (disquete, etc) que
contenga un programa capaz de arreglar el error. Además, no entiende el sistema de archivos. En
su lugar, la ubicación de los archivos de imagen se almacenan directamente en el MBR y el BIOS se
utiliza para acceder a ellos directamente.

• Loadlin

Otra forma de cargar Linux es desde DOS o Windows 9x, donde el núcleo de Linux reemplaza
completamente la copia de funcionamiento de estos sistemas operativos. Esto puede ser útil en el
caso de hardware que necesita ser conectado a través del software y la configuración de estos
programas sólo está disponible para DOS y no para Linux, debido a cuestiones de secretos
industriales y código propietario. Sin embargo, esta tediosa forma de arranque ya no es necesaria
en la actualidad ya que Linux tiene drivers para multitud de dispositivos hardware. Aun así, esto era
muy útil en el pasado.

Otro caso es cuando Linux se encuentra en un dispositivo que el BIOS no lo tiene disponible para el
arranque. Entonces, DOS o Windows pueden cargar el driver apropiado para el dispositivo
superando dicha limitación del BIOS, y cargar Linux desde allí.

• Fase del kernel

El kernel de Linux se encarga de todos los procesos del sistema operativo, como la gestión de
memoria, planificador de tareas, I/O, comunicación entre procesos, y el control general del sistema.
Este se carga en dos etapa: en la primera etapa el kernel (como un archivo imagen comprimido) se
carga y se descomprime en memoria, y algunas funciones fundamentales como la gestión de
memoria de base se establecen. El control entonces se cambia a la etapa final para iniciar el kernel
principal. Una vez que el núcleo está en pleno funcionamiento - y como parte de su puesta en
marcha, después de ser cargado y ejecutado - el kernel busca un proceso de inicio para ejecutar,

Academy Xperts Bolivia 14


EX - LINUX EXPERTO EN LINUX. MODULO 1

que (separadamente) fija un espacio de usuario y los procesos necesarios para un entorno de
usuario y ultimar la entrada . Al núcleo en sí entonces se le permite pasar a inactivo, sujeto a las
llamadas de otros procesos.

• Fase de carga del kernel

El kernel es cargado normalmente como un archivo imagen, comprimido dentro de otro con zlib
como zImage o bzImage. Contiene una cabecera de programa que hace una cantidad mínima de
instalación del hardware, descomprime la imagen completamente en la memoria alta , teniendo en
cuenta cualquier disco RAM si está configurado. A continuación, lleva a cabo su ejecución. Esto se
realiza llamando la función startup del kernel (en los procesadores x86 a través de la función
startup_32() del archivo /arch/i386/boot/head).

• Fase de inicio del kernel

La función de arranque para el kernel (también llamado intercambiador o proceso 0) establece la


gestión de memoria (tablas de paginación y paginación de memoria), detecta el tipo de CPU y
cualquier funcionalidad adicional como capacidades de punto flotante, y después cambia a las
funcionalidades del kernel para arquitectura no específicas de Linux, a través de una llamada a la
función start_kernel().

start_kernel ejecuta una amplia gama de funciones de inicialización. Establece el manejo de


interrupciones (IRQ), configura memoria adicional, comienza el proceso de inicialización (procesa el
espacio del primer usuario), y luego comienza la tarea inactiva a través de cpu_idle(). En particular,
el proceso de inicio del kernel también monta el disco RAM inicial ("initrd") que se ha cargado
anteriormente como el sistema raíz temporal durante la fase de arranque. Esto permite que los
módulos controladores se carguen sin depender de otros dispositivos físicos y drivers y mantiene el
kernel más pequeño. El sistema de archivos raíz es cambiado más tarde a través de la llamada a
pivot_root(), que desmonta el sistema de archivos temporal y lo reemplaza por el real una vez que
éste sea accesible. La memoria utilizada por el sistema de archivos temporal es entonces
recuperada.

Por lo tanto, el núcleo inicializa los dispositivos, monta el sistema de archivos raíz especificado por
el gestor de arranque como de sólo lectura, y se ejecuta Init (/sbin/init), que es designado como el
primer proceso ejecutado por el sistema (PID=1). También puede ejecutar opcionalmente initrd
para permitir instalar y cargar dispositivos relacionados (disco RAM o similar), para ser manipulados
antes de que el sistema de archivos raíz está montado.

En este punto, con las interrupciones habilitadas, el programador puede tomar el control de la
gestión general del sistema, para proporcionar multitarea preventiva, e iniciar el proceso para
continuar con la carga del entorno de usuario en el espacio de usuario.

• El proceso de inicio

El trabajo de Init es "conseguir que todo funcione como debe ser" una vez que el kernel está
totalmente en funcionamiento. En esencia, establece y opera todo el espacio de usuario. Esto
incluye la comprobación y montaje de sistemas de archivos, la puesta en marcha los servicios de
usuario necesarios y, en última instancia, cambiar al entorno de usuario cuando el inicio del sistema

Academy Xperts Bolivia 15


EX - LINUX EXPERTO EN LINUX. MODULO 1

se ha completado. Es similar a los procesos Init de Unix y BSD, de la que deriva, pero en algunos
casos se ha apartado o se hicieron a la medida. En un sistema Linux estándar, Init se ejecuta con un
parámetro, conocido como nivel de ejecución, que tiene un valor entre 1 y 6, y que determina que
subsistemas pueden ser operacionales. Cada nivel de ejecución tiene sus propios scripts que
codifican los diferentes procesos involucrados en la creación o salida del nivel de ejecución
determinado, y son estas secuencias de comandos los necesarios en el proceso de arranque. Los
scripts de Init se localizan normalmente en directorios con nombres como "/etc/rc...". El archivo de
configuración de más alto nivel para Init es /etc/inittab.

Durante el arranque del sistema, se verifica si existe un nivel de ejecución predeterminado en el


archivo /etc/inittab, si no, se debe introducir por medio de la consola del sistema. Después se
procede a ejecutar todos los scripts relativos al nivel de ejecución especificado.

Después de que se han dado lugar todos los procesos especificados, Init se aletarga, y espera a que
uno de estos tres eventos sucedan:- que procesos comenzados finalicen o mueran; un fallo de la
señal de potencia (energía); o una petición a través de /sbin/telinit para cambiar el nivel de
ejecución.

• Niveles de Ejecución

Los niveles de ejecución de Unix o runleves, en inglés, indican el modo en el que el sistema será
iniciado. Los niveles son indicados mediante los números del 0 al 6. En la mayoría de los Unix y
distribuciones Linux (aunque no podría decir que en todas) el nivel de ejecución son los siguientes:

0 indica halt o apagado de la máquina.


1 Indica monousuario.
2 Indica modo multiusuario sin soporte de red.
3 Indica modo multiusuario completo con soporte de red.
4 No usado, con esta opción el administrador puede personalizar el inicio para cargar algún servicio.
5 Indica multiusuario completo con inicio gráfico (X11) (Aunque en Solaris indica shutdown)
6 Indica shutdown y reboot: Se apaga inmediatamente la máquina para reinicio.

Los modos específicos para una distribución particular se encuentran en el archivo /etc/inittab:

# Default runlevel. The runlevels used by Mandriva Linux are:


# 0 - halt (Do NOT set initdefault to this)
# 1 - Single user mode
# 2 - Multiuser, without NFS (The same as 3, if you do not have networking)
# 3 - Full multiuser mode
# 4 - unused
# 5 - X11
# 6 - reboot (Do NOT set initdefault to this)
#
id:5:initdefault:
Las líneas precedidas por el sígno numeral # son comentarios. En los comentarios se indica cuáles
son los runleves de mandriva, los cuales coinciden con los presentadas aquí. Al final de los
comentarios, en color rojo, aparece la línea:

Academy Xperts Bolivia 16


EX - LINUX EXPERTO EN LINUX. MODULO 1

id:5:initdefault:

Esto quiere decir que cuando el sistema arranca, lo hace en el modo 5, que, como hemos visto,
indica multiusuario completo (con red y modo gráfico). Observe que en los comentarios de los
modos 0 y 6 aparece un par de recomendaciones importantes: NO establezca el valor default de init
en este número. ¿Por qué no?

Un administrador (root) puede editar el archivo /etc/inittab como mejor convenga al usuario, sin
embargo también tiene el poder de establecerlo en 0 ó en 6. Si se establece en 6, algo que hice
como experimento en mi Mandriva, la próxima vez que la máquina se encienda, se leerá el modo 6,
shutdown y reboot, y se hará exactamente eso. De hecho se crea un ciclo infinito de reinicios que
puede ser desconcertante para el usuario. Algo similar pasa al establecer el modo de ejecución en
0, cada vez que se enciende la computadora, inmediatamente se apaga. La manera de cambiar esto
es entrar en modo recover y editar de nuevo el archivo /etc/inittab.

Pero si no deben establecerse, ¿Por qué están ahí? La razón es que otros usuarios pueden
requerirlos realmente.

3. Parada o Reinicio del Sistema

Cerrar un sistema Linux tiene algo de truco. Recuerde que nunca se debe cortar la corriente o pulsar
el botón de reset mientras el sistema este ejecutándose. El núcleo sigue la pista de la entrada/salida
a disco en buffers de memoria. Si se reinicializa el sistema sin darle al núcleo la oportunidad de
escribir sus buffers a disco, puede corromper sus sistemas de ficheros.

En tiempo de cierre se toman también otras precauciones. Todos los procesos reciben una señal
que les permite morir airosamente (escribiendo y cerrando todos los ficheros y ese tipo de cosas).
Los sistemas de ficheros se desmontan por seguridad. Si se desea, el sistema también puede alertar
a los usuarios de que se está cerrando y darles la posibilidad de desconectarse.

La forma más simple de cerrar el sistema es con el comando shutdown. El formato del comando es:

shutdown <tiempo> <mensaje-de-aviso>

El argumento <tiempo> es el momento de cierre del sistema (en el formato hh:mm:ss), y <mensaje-
de-aviso> es un mensaje mostrado en todos los terminales de usuario antes de cerrar.
Alternativamente, se puede especificar el parámetro <tiempo> como "now", para cerrar
inmediatamente. Se le puede suministrar la opcion -r a shutdown para reinicializar el sistema tras
el cierre.

Por ejemplo, para cerrar el sistema a las 20:00, se puede utilizar el siguiente comando:

# shutdown -r 20:00

El comando halt puede utilizarse para forzar un cierre inmediato, sin ningún mensaje de aviso ni
periodo de gracia. halt se utiliza si se es el único usuario del sistema y se quiere cerrar el sistema y
apagarlo.

Academy Xperts Bolivia 17


EX - LINUX EXPERTO EN LINUX. MODULO 1

* No apague o reinicialice el sistema hasta que vea el mensaje:

The system is halted

Es muy importante que cierre el sistema "limpiamente" utilizando el comando shutdown o el halt.
En algunos sistemas, se reconocerá el pulsar [ctrl][alt][Supr], que causará un shutdown; en otros
sistemas, sin embargo, el utilizar el "Apretón de Cuello de Vulcano" reinicializará el sistema
inmediatamente y puede causar un desastre.

El proceso de parada es análogo al proceso de arranque. Básicamente consistirá en cambiar el nivel


de ejecución del sistema pasando a un nivel 0 (parada). Como consecuencia de ello se ejecutarán
todos los scripts de parada del directorio /etc/rc.d/rc0.d

El directorio /etc/rc.d/rc0.d únicamente contendrá ficheros de parada. También por convenio se ha


decidido darles un nombre especial, en este caso, su nombre empieza por la letra K (de la palabra
inglesa Kill). Podemos decir que un fichero de parada (K) es un alias, en cuanto a funcionalidad, de
una llamada a un fichero S pasándole como parámetro stop

S40crond stop === K40crond

El programa que se ejecutará al pasar al nivel de ejecución 0 será /etc/rc.d/rc con el parámetro 0,
como indicaba el fichero /etc/inittab. Como consecuencia se ejecutarán todos los scripts pasándoles
el parámetro stop.

Para parar el sistema se necesitan atributos de superusuario (root) y se debe tener en cuenta que
puede haber más usuarios en el sistema y que deberían estar avisados de la parada.

Tema 2: Instalación y Administración de Paquetes

Esta una lección que sería mejor que viniera la primera antes de la anterior ya que aprenderemos
como instalar el sistema desde cero y cómo gestionar los distintos paquetes instalados. No obstante

Academy Xperts Bolivia 18


EX - LINUX EXPERTO EN LINUX. MODULO 1

entiendo el razonamiento del orden de estudio de la LPI ya que en la primera lección dábamos
cuestiones de hardware que son al fin y al cabo las de más bajo nivel.

Y dicho esto comencemos con la lección propiamente dicha. De nuevo se hará hincapié en que
vamos a estudiar instalaciones a nivel de Linux en general no se trata de guías de instalación de
ninguna distribución en concreto, se trataran temas generales. En cuanto la gestión de paquetería
nos centraremos en la gestión de paquetes en Debian (lección 4) y la gestión de paquetes en RedHat
(lección 5). No nos olvidamos del boot manager (lección 2) ni de las librerías (lección 3). Vamos pues
con el tema de hoy en el que hablaremos del diseño del layout del disco duro.

Al instalar un sistema Linux más allá de la decisión del idioma del instalador alguna otra pregunta lo
primero a lo que nos enfrentaremos será al particionado del disco duro. Que estructura queremos
que tenga esto. El particionado del sistema no es una cuestión meramente organizativa si no que
dependiendo del sistema que queramos montar será conveniente hacerlo de una determinada
forma o de otra. Y es precisamente lo que estudiaremos hoy. Comencemos:

• System considerations

Existen varias variables que harán que elijamos una estructura en nuestro disco duro u otra esas
son: tamaño del disco, lo que ocupa el sistema, para que será usado el sistema y como se realizarán
los backups.

• Limited disk space

El primer escenario en el que nos encontramos es uno con espacio en disco limitado. Normalmente
se tiende a tratar de conseguir dejar la mayor cantidad de espacio disponible en la parte del usuario,
para que este pueda trabajar con mayor holgura. No obstante he de añadir yo que esto puede variar
dependiendo de la función del sistema, en determinados sistemas es posible que el espacio
reservado para usuarios prácticamente no se utilice. Cada administrador de sistemas debe valorar
el uso de su sistema y tratar de elegir la opción más correcta. Pero algo en común de las instalaciones
en discos con espacio limitado es el reducir al mínimo el número de particiones. Podríamos decir
que el número mínimo para una buena instalación de linux es:

/boot Es suficiente con una pequeña cantidad de megas, es necesario tener en cuenta que debe ser
la primera de las particiones. Normalmente con un centenar de megas es más que suficiente y puede
reducirse hasta 50mb.

/ el directorio raíz es donde se instala el sistema. Aquí depende mucho del sistema que queráis
montar. Dado que los sistemas avanzan cada poco tiempo no creo que hagan preguntas en el
examen en términos absolutos. No obstante en la documentación nos dicen la cifra de 850mb. Pero
ahora mismo tenemos una debian base sin entorno gráfico con servidor LAMP y con poco más ya
que no hay mucha tontería y sube ligeramente del 1gb de ocupación en disco. Esta partición es
donde se guardará todo lo que no esté en /boot swap Es un tipo de partición especial.

En el libro de oreilly nos hablan de que si solo contamos con 1gb para la instalación dejaremos
100mb para la swap esto me parece totalmente obsoleto. Usualmente no suele dejarse una swap
menor que el tamaño de la memoria RAM instalada.

Academy Xperts Bolivia 19


EX - LINUX EXPERTO EN LINUX. MODULO 1

Larger systems:

En estos sistemas ya tendremos discos más grandes y podremos planear estrategias de backup así
como el fragmentar más la partición. En el libro de oreilly nos dan estos valores para un disco de
100gb:

/boot 100mb

swap 1gb

/ minimo 500mb

/usr 4gb ya que aqui se guardan los ejecutables

/var 2gb ya que aquí se guardan los logs de las distintas aplicaciones. Si se llenase la partición podría
afectar a la estabilidad del sistema así que es mejor ir sobrados de espacio aquí.

/tmp 500mb aquí se guardan los ficheros temporales. Conviene de nuevo que este separada y que
sea grande ya que si el sistema no puede escribir en /tmp podríamos decir que afecta a la estabilidad
del sistema, aunque es quedarse cortos ya que lo que suele ocurrir es que se bloquea la máquina.

/home aquí iría el resto del espacio para los usuario, es decir 90gb

Muchas veces estos discos están replicados o están montados en remoto y demás.

Nota propia: Encuentro que en este capítulo el libro de oreilly esta terriblemente obsoleto (a pesar
de estar revisado en el 2009) y no termino de ver el sentido real de estudiar tamaños absolutos del
disco. Personalmente me quedaría con los conceptos más que con las cifras, las particiones que es
conveniente crear y que particiones es conveniente que sean más grandes. Repito que dependiendo
del sistema es muy posible que no necesitemos carpetas de home tan grandes, por ejemplo en un
servidor web las carpetas de home a penas se utilizan. Entiendo que este layout está pensado para
servidores a los que accederán múltiples (bastantes) usuarios. Una vez hecha la aclaración
prosigamos.

• Mount points

Los mount points son conocidos en español como los puntos de montaje. Para poder acceder a una
partición es necesario que estos estén montados en un directorio y a esto se le conoce como mount
point. Para poder montar una partición en un directorio primero tendrás que crearla y ya una vez
creada montarla con el comando mount. Si no quieres montar la partición de forma manual será
necesario que las incluyas en el fichero /etc/fstab con la sintaxis adecuada. Lo que haya aquí se
montará en el arranque del sistema.

• Superblock

El superbloque es un bloque que tiene cada filesystem que contiene la información metadata con
la estructura de ese filesystem. La información que se incluye aquí es el tipo, el tamaño y el estado
del filsystem montado.

Academy Xperts Bolivia 20


EX - LINUX EXPERTO EN LINUX. MODULO 1

• MBR

Son las siglas para master boot record, se trata de un pequeño programa que contiene la
información con las particiones del disco y la carga del sistema operativo. El MBR está situado
siempre en los primero 512 bytes del disco. En caso de dañarse el MBR será imposible arrancar, por
lo que es más que conveniente guardar un backup de esto. Para ello podremos hacer uso del
comando dd y clonar solo los primeros 512 bytes gracias a las variables count = 1 bs=512. La
restauración del MBR se podrá hacer por tanto haciendo uso del mismo comando pero alterando el
orden de los comandos.

• Booting from a USB device

Al igual que se puede arrancar desde un cd es posible arrancar linux desde un usb. Pero hay que
tener en cuenta que los discos usb pueden ser modificados. Esto es muy útil para tener un sistema
portable que llevarte a donde quieras y además al arrancar desde aquí podemos montar los discos
del ordenador dentro desde nuestro sistema arrancado desde el usb y usarlo para hacer
troubleshooting.

Para poder arrancar desde el usb necesitamos hacer arrancable el usb para lo cual una partición
debe tener el flag de bootable activado, así como activar el arranque desde este dispositivo en la
BIOS.

• System role

Como adelantaba anteriormente dependiendo de la funcionalidad que se le vaya a dar al sistema el


layout que se elija para diseñar el sistema cambiará. Lo cierto es que hoy en día el almacenamiento
se ha abaratado enormemente y no es el quebradero de cabeza que era antes. Personalmente mi
consejo es mejor que sobre a que falte. Además en la actualidad es muy viable tener datos cargados
externamente por red por medio de sistemas NFS.

• Backup

Es un hecho el que debemos implementar una política de backup en nuestros sistemas. Debemos
ser capaces de poder recuperar el sistema en caso de que ocurra un desastre. El mejor backup sería
aquel que cuenta que cuenta con todos los datos en todo momento y se pueden recuperar
instantáneamente. No obstante este backup ideal no existe y siempre hay algún inconveniente.

Una posibilidad de hacer backup sería el uso del comando dd que ya hemos comentado
anteriormente. Este comando hace un backup bit a bit de los datos de un disco/partición mediante
us uso podemos clonar discos duros completos. También es posible hacer un backup de la estructura
de las particiones mediante el comando “sfdisk -d /dev/disco_duro > particiones_bk.txt”. Para
recuperarlas haríamos algo parecido pero en sentido contrario “sfdisk /dev/disco_duro <
particiones_bk.txt"

• Swap space

Al instalar linux tendrás que instalar una partición de swap, esto es una partición para la memoria
virtual. Para que nos entendamos esto es una memoria ram que se almacena en el disco duro,
normalmente esto sucede cuando la memoria ram se agota. Históricamente la regla no escrita en

Academy Xperts Bolivia 21


EX - LINUX EXPERTO EN LINUX. MODULO 1

linux era la de hacer una partición que fuera el doble de la cantidad de ram, sucede que con el
aumento de la cantidad de ram en la actualidad muchas veces la swap se deja en el mismo tamaño
que la ram o incluso en una cantidad fija que es a veces menor que la cantidad de ram. En sistemas
de escritorio con grandes cantidades de ram se opta incluso por la desactivación de la ram, pero
digamos que esto es algo muy extremo.

• General guidelines

Ahora unos consejos generales sobre este tema:

Mantener el filesystem de root (/) lo más sencillo posible dividiendo fragmentando el resto tanto
como sea posible.

Hacer una partición a parte para la partición de /boot en bios y kernels antiguos es necesario que
ésta esté por debajo del cilindro 1024

Separar /var y así asegurarnos de que tenemos suficiente espacio para gestionar los logs, spools y
los mails. Es conveniente ir rotando aquí los ficheros haciendo una copia de los más antiguos
ficheros y borrándolos.

Separar /tmp y así no correr el riesgo de bloquear el sistema porque tmp crezca desmesuradamente

Separar /usr y asegurarse de que va bien de espacio ya que aquí están los ejecutables y también
entre otras cosas el kernel del sistema.

Separar el /home así aunque tengamos varios usuarios podrán usar el sistema y aunque cambiemos
de máquina o hagamos un upgrade podremos conservar estos datos. Además así un usuario que
crezca demasiado no nos bloqueará el sistema.

El tamaño de la swap se recomienda que sea de 2 veces el tamaño de la memoria ram o si no al


menos de igual tamaño que esta.

El requisito mínimo para instalar Centos es el siguiente:

Sin entorno de escritorio:

Memoria RAM: 64 MB (mínimo).


Espacio en Disco Duro: 1 GB (mínimo) - 2 GB (recomendado).
Procesador: ver Arquitecturas

Con entorno de escritorio:

Memoria RAM: 1 GB (mínimo)2.


Espacio en Disco Duro: 20 GB (mínimo) - 40 GB (recomendado).
Procesador: ver Arquitecturas
Y las particiones requeridas para el funcionamiento son:

Una partición raíz o “/” de 20 GB


Una partición Swap de 2GB
El resto para la “/home”

Academy Xperts Bolivia 22


EX - LINUX EXPERTO EN LINUX. MODULO 1

LABORATIORIO 1:

Instalar Centos OS 6 minimal

• Sistema de gestor de paquetes

Un sistema de gestión de paquetes, también conocido como gestor de paquetes, es una colección
de herramientas que sirven para automatizar el proceso de instalación, actualización, configuración
y eliminación de paquetes de software. El término se usa comúnmente para referirse a los gestores
de paquetes en sistemas Unix-like, especialmente GNU/Linux, ya que se apoyan considerablemente
en estos sistemas de gestión de paquetes.

En estos sistemas, el software se distribuye en forma de paquetes, frecuentemente encapsulado en


un solo fichero. Estos paquetes incluyen otra información importante, además del software mismo,
como pueden ser el nombre completo, una descripción de su funcionalidad, el número de versión,
el distribuidor del software, la suma de verificación y una lista de otros paquetes requeridos para el
correcto funcionamiento del software. Esta metainformación se introduce normalmente en una
base de datos de paquetes local.

• Comparación entre instaladores y sistemas de gestión de paquetes

Las diferencias principales entre un sistema de gestión de paquetes y un instalador son las
siguientes:
Sistema de Gestión de Paquetes Instalador
Cada producto viene unido a su propio
Forma parte del sistema operativo.
instalador.
Usa una única base de datos de instalación. Rastrea su propia instalación
Puede verificar y administrar todos los paquetes sobre
Sólo trabaja con su propio producto.
el sistema.
Un único vendedor de sistema de administración de
Múltiples vendedores de instalador.
paquetes.
Un único formato de paquetes. Múltiples formatos de instalación

Los sistemas de gestión de paquetes tienen la tarea de organizar todos los paquetes instalados en
el sistema y se encargan de mantener su usabilidad. Esto se consigue combinando las siguientes
técnicas:

- Comprobación de la suma de verificación para evitar que haya diferencias entre la versión
local de un paquete y la versión oficial.
- Comprobación de la firma digital
- Instalación, actualización y eliminación simple de paquetes
- Resolución de dependencias para garantizar que el software funcione correctamente

Academy Xperts Bolivia 23


EX - LINUX EXPERTO EN LINUX. MODULO 1

- Búsqueda de actualizaciones para proveer la última versión de un paquete, ya que


normalmente solucionan bugs y proporcionan actualizaciones de seguridad.
- Agrupamiento de paquetes según su función para evitar la confusión al instalarlos o
mantenerlos

Muchos de los sistemas de gestión de paquetes ampliamente utilizados utilizan backends simples
para instalar los paquetes. Por ejemplo, YUM utiliza RPM como backend y APT utiliza dpkg.

Para realizar prácticas sobre los gestores de paquetes realizar laboratorio 2.

• Paquetes RPM

RPM son para sistemas basados en SuSE y RedHat (de ahí el título que no especifique a que
distribución que corresponde ya que son más de una distribución primitiva que la usan). Es otro
sistema de empaquetado y conjunto de instrucciones que se encargará de dejarlo todo OK para
nosotros de una manera fácil y rápida. Así como al comando dpkg se le pueden pasar una variedad
de parámetros también al comando rpm, veámoslas:

Para instalar:
# rpm -i paquete.rpm

Para desinstalar:
# rpm -e paquete.rpm

Para instalar y ver el progreso:


# rpm -iv paquete.rpm

Para instalar o actualizar según el caso y ver el progreso (opción recomendada):


# rpm -Uvh paquete.rpm

Para confirmar si está instalado o no:


# rpm -q paquete.rpm

Para forzar la desinstalación (opción no recomendada):


# rpm -e paquete.rpm --force

TEMA 3: COMANDOS GNU Y UNIX

• Trabajo en la línea de comandos

Trabajar con la línea de comandos no es una tarea tan desalentadora como muchos pudieran
pensar. No se requieren conocimientos especiales para usar la línea de comandos, pues es un
programa como otro cualquiera. La mayoría de las acciones realizadas en Linux pueden llevarse a

Academy Xperts Bolivia 24


EX - LINUX EXPERTO EN LINUX. MODULO 1

cabo usando la línea de comandos. Aunque existen herramientas gráficas para la mayoría de
programas, a veces esto no es suficiente. Entonces es cuando la línea de comandos cobra su utilidad.

La terminal es llamada a menudo la línea de comandos, el "prompt", o el "shell". Antes, éste era el
único método por el cual el usuario interactuaba con lel ordenador; sin embargo, muchos usuarios
de Linux encuentran más rápido el uso de la terminal que un método gráfico e incluso hoy día tiene
algunas ventajas. Aquí aprenderá cómo usar la terminal.

El uso original de la terminal era como administrador de ficheros y de hecho todavía es usado con
este fin. Usted puede usar la terminal como un navegador de archivos para administrar sus ficheros
y deshacer los cambios realizados.

Para iniciar la consola debemos ingresar a nuestras máquinas virtuales una vez iniciada nuestro
servidor Linux

Para el Linux que no está instalado en modo grafico la figura anterior es nuestra consola, en caso
que nuestro Linux Centos este en modo grafico nuestra consola se encuentra en:

Academy Xperts Bolivia 25


EX - LINUX EXPERTO EN LINUX. MODULO 1

Haciendo click nos mostrara la consola

El prompt En sistemas Unix/Linux tiene el aspecto de:

usuario@máquina:~$ // usuario normal


root@máquina:~# // usuario root

Academy Xperts Bolivia 26


EX - LINUX EXPERTO EN LINUX. MODULO 1

Por lo general es mejor trabajar en usuario root que en usuario normal por los privilegios de
ejecución permitidos, en otro capítulo lo veremos.

Órdenes comunes

Ver directorios: - ls
El comando ls (LiSta) muestra los archivos diferenciados por colores y texto con formato

Crear directorios: - mkdir (nombre del directorio)


El comando mkdir (del inglés MaKeDIRectory) crea un directorio.

Cambiar de Directorio: - cd (/directorio/ubicación)


El comando cd (Cambiar de Directorio) cambia de su directorio actual a cualquier directorio
especificado.

Copiar Archivos/Directorios: - cp –rf (nombre de archivo o directorio de origen) (directorio o


archivo de destino)

Academy Xperts Bolivia 27


EX - LINUX EXPERTO EN LINUX. MODULO 1

La orden cp (CoPiar) copia los archivos que usted especifique. La orden cp -r copia cualquier
directorio que usted especifique.

Eliminar Archivos/Directorios: -rm (el nombre del archivo o directorio).

El comando rm (del Inglés ReMove, eliminar) borra el fichero con el nombre especificado. El
comando rm -r borra el directorio especificado junto con todo su contenido.

Mover/Renombrar Archivos/Directorios: -mv (archivo o directorio)


El comando mv (MoVer) mueve/renombra el archivo o directorio especificado.

• Procesar flujos de texto usando filtros

Para este punto veremos algunos comandos

Comando sed

Este comando modifica directamente el contenido del fichero, enviándolo a la salida estándar.

Su sintaxis puede adoptar dos formas:

sed [opciones] -f fichero-script [fichero-entrada]


sed [opciones] texto-script [fichero-entrada]

Fichero-entrada será en nombre del fichero que se desea modificar. Texto-script o fichero-script,
son el conjunto de comandos que queremos que ejecute sed.

Academy Xperts Bolivia 28


EX - LINUX EXPERTO EN LINUX. MODULO 1

Veamos algunos de los comandos de sed que puede emplear en sus scripts. El campo direcciones,
hace referencia a los números de línea. Pueden no recibir direcciones, en cuyo caso se opera con
el fichero completo. Si se recibe una dirección, se opera sobre la línea especificada. Si se reciben
dos direcciones (un rango), se opera sobre dicho rango de líneas, ambas inclusive.

Comando Direcciones significado


= 0o1 Muestra el número de línea actual.
a\ texto 0o1
Añade el texto al fichero.
0o1 Inserta el texto en el fichero.
i\texto
r fichero 0o1 añade el texto delfichero indicado en
el fichero.
c\texto rango Reemplaza el rango de líneas
seleccionado con el texto
proporcionado.
s/regexp/sustituto/ rango Reemplaza el texto que coincida con
la expresión regular por el sustituto.
w fichero rango Escribe el espacio de patrones actual
en el fichero especificado.
q 0o1 Finaliza de inmediato el script, pero
imprime el espacio de patrones
actual.
Q 0o1 Finaliza de inmediato el script.

Ejemplo:
Reemplazar 2015 por 2016 en el archivo hola_2.txt guardando en hola_1.txt

Sustituir apariciones de - por / en las líneas 1 a 4 en el archivo hola_2.txt:

Mostrar las líneas actuales del hola_2.txt

Academy Xperts Bolivia 29


EX - LINUX EXPERTO EN LINUX. MODULO 1

Comando cut

Es utilizado para la extracción de segmentos (campos, caracteres o bytes) de un fichero de entrada


para mostrarlos por la salida estándar. Sus opciones son:

Flag Resultado
-b o –bytes Corta por el número de bytes especificados
-c o –characters Corta por el número de caracteres especificados
-f o –fields Corta por el número de campos especificados. Por
defecto los campos están delimitados por una
tabulación, aunque podemos cambiar el carácter
delimitador con “-d carácter_delimitador”).

Con ejemplos lo entenderemos mejor. Vamos a ver el formato del fichero passwd:

En este caso, los campos están delimitados por “:”, y no por tabulaciones. Tendremos que usar el
flag -d para cambiar el campo delimitador. Si quisiéramos obtener un listado de los usuarios del
sistema y su directorio home (campos 1 y 6), deberíamos ejecutar la siguiente orden:

Academy Xperts Bolivia 30


EX - LINUX EXPERTO EN LINUX. MODULO 1

Observamos que hemos utilizado -f1,6 para que nos corte los campos 1 y 6. Si quisiéramos que nos
cortara todos los campos que van del 1 al 6, la sintaxis sería -f1-6, y si en vez de campos, queremos
cortar por caracteres, seria -c1-6, para cortar los caracteres del 1 al 6.

Comando wc (Word Count)

Comando que genera un contador de palabras, lineas o bytes. Su uso es muy sencillo y útil.

El resultado nos indica que el fichero contiene 36 líneas, 56 palabras y 1788 bytes. Si queremos
especificar un único formato de salida, se haría con:

Flag Resultado
-l o –lines Cuenta las líneas
-w o –words Cuenta las palabras
-c o –bytes Cuenta los bytes
-m o –chars Cuenta los caracteres

Comandos para transformar ficheros: expand, sort, split, uniq y tr

Los comandos que vamos a comentar no cambian realmente el contenido de los ficheros, sino que
envían el fichero modificado a la salida estándar. Después, podemos canalizar la salida a otro
comando o fichero.

Comando expand : convertir tabulaciones en espacios:

Interesante comando para los que programan pequeños scripts o programas desde un editor de
texto. Todavía recuerdo la primera vez que lo utilicé. Estuve varios días programando un programa
en java, era para una práctica que tenía que presentar. Después de que el profesor modificara las
líneas de código que creyera oportunas, el programa devolvía errores de indexación todos lados.
Motivo? pues el editor de texto que yo utilicé tenia definidos las tabulaciones como tabulaciones
(lógico), y mi profesor tenía la opción marcada de gedit de “insertar espacios en lugar de
tabulaciones” y ancho de tabulador. Cada vez que pulsaba el tabulador, insertaba cuatro espacios.
Fue tan sencillo como hacer:

El comando unexpand, hace lo opuesto, convierte varios espacios en tabulaciones. También acepta
la opción -t num.

Comando sort: ordenar ficheros

Academy Xperts Bolivia 31


EX - LINUX EXPERTO EN LINUX. MODULO 1

sort (en inglés ordenar), es utilizado para ordenar la salida de un comando. Tenemos el documento
abecedario.txt que contiene letras al azar. Para mostrar una salida ordenada:

Recordemos que sort ordena por el valor ASCII, el cual distingue entre letras mayúsculas y
minúsculas.

Algunas de las opciones de este comando son:

Flag Resultado
-f o –ignore-case Ignora entre mayúsculas y minúsculas
-M o –month-sort Ordena por las abreviaturas de tres letras de los
meses (de JAN a DEC)
-r o –reverse Invierte el orden
-n o –numeric-sort Ordenación numérica
-k campo o –fey=campo Permite definir el campo de la ordenación

Comando split: dividir ficheros

Este comando nos permite dividir un fichero en dos o más. Algunas de las opciones de este comando
son:

Flag Resultado
-b tamaño o –bytes=tamaño Divide el fichero por bytes. Puede cortar un
fichero por la mitad de una línea.
-C tamaño o –line-bytes=tamaño Divide un fichero por el número de bytes
especificado sin romper sus líneas.
-l lineas o –lines=lineas Divide un fichero en bloques no superiores al
número de líneas especificado.

El siguiente comando nos genera los ficheros aba, abe, abc, etc, con tres líneas cada uno, extraídas
del fichero abecedario.txt:

El archivo lo dividirá en xaa, xab, xac, etc.

Academy Xperts Bolivia 32


EX - LINUX EXPERTO EN LINUX. MODULO 1

Comando uniq: eliminación de lineas duplicadas

Nos permite eliminar todas las líneas que sean idénticas. Supongamos que al ordenar un fichero,
queda de la siguiente manera:

Comando tr : traducción de carácteres

Su sintaxis puede resultar un poco confusa para algunos:


tr [OPCIÓN] … SET1 [SET2]

Veamos algunos ejemplos para entenderla mejor. Queremos convertir todas las vocales de la
siguiente frase a mayúsculas:

También podemos utilizar dicho comando para eliminar ciertos caracteres, con -d:

Ahora eliminaremos todos los espacios repetidos que tengamos en una frase con la opción -s:

Academy Xperts Bolivia 33


EX - LINUX EXPERTO EN LINUX. MODULO 1

Comandos para combinar ficheros: cat, join y paste


Combinar ficheros con cat

Aunque este comando es utilizado para mostrar el contenido de ficheros pequeños, lo cierto es
que és una herramienta para combinar ficheros (cat es abreviatura de concatenar). Utilizando este
comando con una redirección de salida, se puede combinar dos ficheros en uno:

cat fichero_1.txt fichero2.txt > fichero_combinado.txt

Algunas de las opciones que ofrece son:

Flag Resultado
-E o –show-ends Muestra el signo dolar al final de cada linia ($)
-n o –number Numera las lineas al comienzo de cada una
-b o –number-nonblank Solo numera las lineas que contienen texto
-s o –squeeze-blank Substituye los grupos de lineas en blanco por una
sola
-T o –show-tabs Muestra los carácteres de tabulación como ^I

El comando tac (cat al revés), invierte el orden de las lineas al mostrarlas

Asociar de ficheros por campos con join

Este comando combina dos ficheros según el campo que hayamos especificado. Por defecto join
tiene en cuenta el primer campo para realizar la combinación.

Si fichero1.txt contiene:

Y el fichero2.txt

Vemos que sucede al ejecutar el comando join:

Academy Xperts Bolivia 34


EX - LINUX EXPERTO EN LINUX. MODULO 1

Fusionar líneas con paste

La función de este fichero es la de fusionar ficheros línea a línea, separando las líneas de cada
fichero mediante tabulaciones.
Teniendo en cuenta que el contenido de fichero1.txt y fichero2.txt es el mismo que en el ejemplo
anterior, el resultado de este comando:

Flujos estándares y su redirección

De entre los diferentes tipos de flujo, definiremos los tres que destacan:

Entrada estándar (stdin): Es la utilizada para recoger información. En la mayoría de los casos es a
través del teclado.
Salida estándar (stdout): Se usa para enviar información al exterior. Suele ser el monitor.
Error estándar (stderr) : Es utilizada para llevar los mensajes de error y de alta prioridad.
Ahora veamos una tabla con los operadores comunes de redirección:

Operador Efecto
> Crea un fichero que contiene la salida estándar. Si el fichero
existe, se sobrescribe.
>> Añade al fichero la salida estándar. Si el fichero no existe, se
sobrescribe.
2> Crea un fichero con la salida de error estándar. Si el fichero
no existe, se crea.
2>> Añade a un fichero la salida de error estándar. Si el fichero no
existe, se crea.
&> Crea un fichero que contiene tanto el error estándar como la
salida estándar. Si el fichero existe, se reemplaza.
<> El fichero especificado se utiliza tanto para la salida estándar
como para la entrada estándar.
< El contenido del fichero especificado se envía para utilizarlo
como entrada estándar
<< Acepta el texto de las siguientes lineas como entrada
estándar.

Veamos ejemplos:

Operador “>”:

Academy Xperts Bolivia 35


EX - LINUX EXPERTO EN LINUX. MODULO 1

Operador “>>”:
En este ejemplo, vemos como el resultado de ejecutar la orden “ls etc” se añade a fichero.txt:

Operador “2>”:
Ahora vamos a intentar listar una carpeta que no existe, y enviar los errores a un fichero:

Como vemos, no muestra ningún error por pantalla diciendo que la carpeta no existe, ya que
hemos redirigido la salida de error al fichero “errores.txt”

Operador “2>>”:
Este comando haría exactamente lo mismo que el anterior, solo que las líneas de error se
añadirían a las ya existentes.

Operador “&>”:
Podríamos decir que este operador actúa como “>” y “2>” a la vez. Vamos a listar una carpeta que
existe y otra que no, redirigiendo su salida a fichero.txt.

Vemos que tanto los errores como el resultado de “ls /etc/” se guardan en el mismo fichero.

Academy Xperts Bolivia 36


EX - LINUX EXPERTO EN LINUX. MODULO 1

Operador “<>”:
Utilizamos fichero.txt para tanto para la salida estándar como para la entrada estándar.

Operador “<“:
En el siguiente ejemplo vemos como cambiamos a al vez la entrada y salida estándar de un
programa. Cogemos el contenido de “fichero.txt” y lo enviamos a “fichero2.txt”.

Podríamos haber omitido el uso de “<” y en este caso el resultado hubiera sido el mismo. Unix
dispone de un gran número de comandos que leen de la entrada estándar, realizan la operación
con el texto y escriben en la salida estándar: cat, grep, soft, cut, sed, tr…

Gestiones básicas de ficheros

Antes de empezar a trastear con los ficheros debemos tener en cuenta un par de cosas. La primera,
es que a diferencia de otros sistemas operativos, para Linux “fichero1.txt” y “Fichero1.txt” son
ficheros distintos. Linux distingue entre mayúsculas y minúsculas. La segunda es que la mayoría de
los comandos aceptan “comodines”, que nos gestionar los ficheros. Tenemos 3 clases de comodines:

Opción Resultado
? Representa un solo carácter. Por ejemplo, s?l podría
ser sol, sal o cualquier otro nombre de fichero que
empiece por s termine por l.
* El funcionamiento de asterisco es similar, solo que no
determina el número de caracteres que queremos.
Es decir, volviendo al ejemplo de antes, s*l podría ser
sol o soaeiuol. Si buscáramos con esa expresión, nos
devolvería todos los ficheros que empiecen por sy
acaben por l.
[] Se usan para determinar rangos. s[a-w]l podría ser
válido para cualquier fichero que empiece por s,
contenga cualquier letra del abecedario excepto la z,
pues la hemos dejado fuera del rango, y acabe por l.

• Uso de streams, pipes y redirecciones


Bifurcaciones y paso de múltiples argumentos a comandos
Bifurcaciones

tee: este comando se encarga de dividir la entrada estándar para que se muestre en la salida
estándar y en tantos ficheros como se desee. Esto es útil cuando no solo se quieren enviar datos

Academy Xperts Bolivia 37


EX - LINUX EXPERTO EN LINUX. MODULO 1

hacia una tuberia, sino también guardar una cópia en un archivo. Si este no existe, lo crea, y si existe
lo sobrescribirá, siempre y cuando no usemos el flag -a.

Supongamos que queremos ver el contenido de un archivo por pantalla y a su vez guardar el
contenido en un fichero:

• Generar líneas de comandos

xargs: este comando se utiliza para pasar un gran número de argumentos a otros comandos. En la
siguiente instrucción queremos buscar los archivos .log y copiarlos en nuestra dirección actual.

• Pipes

Empecemos traduciendo la palabra al español: pipe –> tubería. Tener claro esto va a ser
fundamental para entender su funcionamiento.

Las pipes o pipelines se representan mediante la barra vertical ( | ). Se utilizan para redireccionar la
salida estándar de un programa a la entrada estándar de otro. La mejor forma para comprenderlas
es viendo un ejemplo.

Supongamos que necesitamos extraer un determinado dato de un fichero. El fichero passwd,


situado en /etc, contiene datos sobre los usuarios y grupos definidos del sistema. Ejecutamos cat
/etc/passwd para ver su estructura:

Academy Xperts Bolivia 38


EX - LINUX EXPERTO EN LINUX. MODULO 1

Queremos saber si el usuario “abel” existe en el sistema, y si es así, que Uid tiene. Dado que la
magnitud de este fichero puede ser muy grande, descartamos la búsqueda “a ojo” y haríamos lo
siguiente:

Hemos usado dos pipes, por lo tanto podemos diferenciar tres bloques:

cat /etc/passwd: muestra el contenido del fichero.

grep ^super: de las líneas mostradas por el comando anterior, busca la que empiece por “super”.

cut -f3 -d”:” : corta el campo 3 de la línea, teniendo en cuenta que delimitamos los campos con “:”

Más adelante veremos mejor el funcionamiento del comando grep y cut, lo que nos debe quedar
claro ahora es como hemos entrelazado tres comandos distintos para obtener un resultado, que
en este caso será “1000”.

Los pipes pueden tener una longitud arbitraria:

Comando uno |comando dos | comando tres […..]

Otro ejemplo interesante podría ser.

En este caso, nos devuelve el número de usuarios que tengan definida la shell bash.

• Crear, monitorizar y matar procesos

Academy Xperts Bolivia 39


EX - LINUX EXPERTO EN LINUX. MODULO 1

Procesos en primer y segundo plano

Normalmente, cuando se inicia un programa, este toma el control del terminal, impidiendo realizar
otras tareas. Para solucionar dicho problema, existe la posibilidad de poder pasar los procesos de
primer plano a segundo plano.

Se nos abre el vi en el terminal y no podemos hacer otra cosa que no sea editar hola.txt. Pulsamos
control-z para pausar el proceso y regresar al terminal.

Este proceso suspende el programa, por lo que la tarea que esté realizando, también la detiene. En
este caso no tiene importancia porque estamos editando un documento, pero podría tenerla según
el proceso pausado.

El terminal nos muestra el siguiente mensaje:

Ejecutamos la siguiente orden para ver el proceso y su estado:

Ahora si queremos volver al editor, debemos usar el comando fg (foreground). Si tuviéramos más
de un proceso detenido, deberemos utilizar este comando con un número (fg 2, fg 3, ….). Para saber
que numero va asociado a cada proceso detenido, tenemos el comando jobs.

La forma de pasar un proceso a segundo plano, para que así el proceso vuelva a estado de ejecución,
es mediante el comando bg (background):

No obstante, la manera más cómoda de ejecutar un programa en segundo plano, sin tener que
pararlo con control-z y luego usar la orden bg, es con el &. Podemos ejecutar un un programa en
segundo plano de la siguiente forma:

• Comando top

Academy Xperts Bolivia 40


EX - LINUX EXPERTO EN LINUX. MODULO 1

El administrador de tareas de Linux

Este comando es una variante dinámica de ps. Es utilizado cuando queremos saber cuánto tiempo
de CPU consumen los procesos, y poder comparar unos con otros. Como vemos en la siguiente
imagen, ordena las entradas por el uso de la CPU y actualiza los datos cada pocos segundos, por lo
que la convierte en una buena herramienta para localizar procesos descontrolados.

Opciones de top:

Opción Resultado

-d retardo Especificamos el tiempo que tardan en refrescarse


los datos.

-p pid Se usa para monitorizar determinados procesos. Las


PID las podemos obtener mediante el comando ps .
Admite hasta 20 PID.

-n iter Para que top muestre un determinado número de


actualizaciones.

-b Suele contener la fecha y hora de la compilación del


kernel

Además, mientras está en ejecución, top admite una serie de comandos:

Opción Resultado

Academy Xperts Bolivia 41


EX - LINUX EXPERTO EN LINUX. MODULO 1

ho? Nos muestra la información de ayuda.

k Después de introducir el PID, intentará destruir el


proceso.

q Sale de top.

r Permite cambiar la prioridad de un proceso, que por


defecto es 0. Nos pedirá un número PID y y un
nuevo valor para la prioridad (positivo lo reduce y
negativo lo aumenta). Solo root puede incrementar
la prioridad.

s Nos pie la velocidad en segundos, y es el tiempo que


tardan en actualizarse los datos.

P Los datos mostrados se ordenan por el uso de la


CPU, que es la configuración por defecto.

M Los datos se ordenan por el uso de la memoria.

Un dato importante que proporciona top es la carga media (load average), parámetro que indica la demanda
de tiempo de la CPU que utilizan los procesos. En la captura de top, más arriba, puedes ver tres cargas
medias: 0.29, 0.57 y 0.36, que corresponden a la carga media actual y a las dos anteriores. Un sistema donde
los programas no demandan tiempo de CPU la carga media es de 0, mientras que uno que si demanda, es de
1. Si un sistema suele tener una carga media de 0.5, por ejemplo, pero de repente se sitúa en 2,5, puede que
haya procesos colgados que estén acaparando la CPU. Un comando útil para ver la carga media del PC, así
como el tiempo que lleva encendido, es uptime.

• Comando ps

Este programa muestra el estado de los procesos. Admite muchas opciones útiles y sirve para
monitorizar procesos. Para el que venga de windows, podríamos decir que es como el
“Administrador de tareas” que aparece al presionar ctrl+alt+supr. Su sintaxis es muy sencilla:

ps [opciones]

Si no añadimos opciones, ps muestra los procesos del usuario con el que estamos logueado. No es
necesario colocar espacios entre las opciones, ya que se pueden agrupar, por ejemplo, en lugar de
poner ps -a -f, podríamos poner ps -af.

Como siempre, para conocer todas las opciones y posibilidades del programa deberemos consultar
el manual (man ps). Además, se nos muestran varios ejemplos que podrían sernos de utilidad:

To print a process tree:


ps -ejH
ps axjf

Academy Xperts Bolivia 42


EX - LINUX EXPERTO EN LINUX. MODULO 1

To get info about threads:


ps -eLf
ps axms

To get security info:


ps -eo euser,ruser,suser,fuser,f,comm,label
ps axZ
ps -eM

Entre algunas de las características más útiles tenemos:

Opción Resultado

–help Muestra la ayuda.

-A o -e Hacen que se muestren todos los procesos del


sistema. Si le adjuntamos la opción x, muestra todos
los procesos que pertenecen al usuario que ejecuta
el comando, además de incrementar la cantidad de
información que se muestra de cada proceso.

-u usuario muestran los procesos que pertenecen al usuario en


concreto.

-H , -f y –forest Muestra la jerarquía de procesos, útiles si


intentamos averiguar los parentescos de los
procesos.

-w Esta opción es utilizada para mostrar una salida más


ancha, ya que ps trunca su salida para que se adapte
a su pantalla.. Con ps w>ps.txt, redirigimos la salida
a un fichero, y lo abrimos que un editor de texto
que admita líneas más anchas.

-f, -l, j, l, u y v Se utilizan para ampliar la información


proporcionada en la salida ps.

Podemos combinar estas opciones de muchas maneras para obtener los resultados deseados. Una
de las combinaciones más útiles para el “día a día” podría ser:

ps -aux

que nos muestra los procesos de todos los usuarios con información añadida:

Academy Xperts Bolivia 43


EX - LINUX EXPERTO EN LINUX. MODULO 1

Interpretar la salida de ps

Es importante saber interpretar los campos mostrados por la anterior imagen. Como podemos
observar, la salida de ps comienza por un encabezado. Describamos esos campos:

Campo Descripción

USER Nombre de usuario que ejecuta el programa.

PID Número encargado de identificar el proceso. Es


importante ya que lo necesitamos para modificar o
destruir el proceso.

%CPU Porcentaje total de tiempo de CPU que utiliza el


proceso cuando se utiliza ps.

%MEM Porcentaje de memoria utilizada por el proceso.

VSZ Tamaño total del proceso en la memoria virtual, en


kilobytes.

RSS Cantidad de memoria utilizada por el proceso.

Academy Xperts Bolivia 44


EX - LINUX EXPERTO EN LINUX. MODULO 1

TTY Código que se utiliza para identifica el terminal. No


todos los procesos tienen TTY.

STAT Muestra información acerca del estado del proceso


(ver estado de un proceso Unix).

START Indica la hora de ejecución.

TIME Cantidad total de tiempo de CPU consumido.

COMAND Comando utilizado para iniciar el proceso.

Estado de un proceso Unix

• Preparado (R).- Runnable. Está preparado para la ejecución.

• Zombie (Z).- Todo proceso al finalizar avisa a su proceso padre, para que éste elimine su
entrada de la tabla de procesos. En el caso de que el padre, por algún motivo, no reciba
esta comunicación no lo elimina de la tabla de procesos. En este caso, el proceso hijo
queda en estado zombie, no está consumiendo CPU, pero sí continua consumiendo
recursos del sistema.

• Ejecutando (O).- Sólo uno de los procesos preparados se está ejecutando (para sistemas
monoprocesador).

• Parado (T).- (traced) Un proceso parado. Pasará a estar preparado en cuanto vuelva a
recibir la señal.

• Suspendido (S).- Un proceso se encuentra suspendido si no entra en el reparto de CPU, ya


que se encuentra esperando algún tipo de evento (por ejemplo, la recepción de una señal
software o hardware). En cuanto dicho evento se produce, el proceso pasa a formar parte
del conjunto de procesos preparados.

Comando uname: conocer el kernel

Podemos definir el concepto “kernel” como el corazón de nuestro sistema operativo Linux. Entre
las funciones más importantes se encuentran:

- Administración de la memoria para todos los programas y procesos en ejecución.


- Administración del tiempo que se tarda en procesador los programas.
- Es el encargado de que podamos acceder a los periféricos/elementos de nuestro
ordenador de una manera cómoda.

Academy Xperts Bolivia 45


EX - LINUX EXPERTO EN LINUX. MODULO 1

Aunque no podemos administrar este proceso en la misma medida que el resto, con uname si
podemos obtener información sobre éste. Como siempre, veremos algunas de sus opciones y
después ejemplos.

Opción Resultado

-n –nodename Nos muestra el nombre del equipo en la red

-s –kernel-name Devuelve el nombre del kernel, suele ser Linux

-v –kernel-version Suele contener la fecha y hora de la compilación del


kernel

-r –kernel-release Número de la versión del kernel

-m –machine Devuelve información sobre la máquina


(arquitectura)

-p –processor En teoría retorna información sobre la CPU


(fabricante, modelo, etc), pero en la práctica suele
devolver unknown, o como en mi caso lo mismo que
la opción –m (x86_84)

-o –opertating-system Nombre del sistema operativo

a –all muestra toda la información disponible

Ejemplo:

podemos combinar los parámetros que queramos con tal de adquirir la información deseada:

En la práctica, dicho comando es utilizado en scripts multiplataforma que utilicen estas opciones
para adquirir información y así ajustar sus acciones al sistema en que se ejecuta.

• Modificar las prioridades de ejecución de los procesos

Academy Xperts Bolivia 46


EX - LINUX EXPERTO EN LINUX. MODULO 1

Destruir procesos
El comando kill

Cuando queramos finalizar un proceso en ejecución, el comando a utilizar es kill. Este programa lo
que hace es enviar una señal al proceso. Podemos ver las señales poniendo el flag –l al comando.

Podemos especificar la señal empleando el número o el nombre de la misma. Las señales más
utilizadas son la 1 (finaliza los programas interactivos y hace que muchos demonios vuelvan a leer
sus ficheros de configuración), la 9 (hace que el proceso termine “a la fuerza”) y 15 (hace que el
proceso termine pero permite cerrar ficheros abiertos, etc).Esta última es la señal por defecto si no
especificamos señal.
El programa kill solo destruirá los procesos del usuario que los ejecuta, a excepción de root.

Una variante de este comando es killall. Permite destruir procesos en base a su nombre, en lugar
del PID. Por ejemplo, killall vi, destruirá todos los procesos llamados vi.

Al igual que con kill, con –s, podemos especificar la señal que queremos usar. Una opción importante
para killall es –i, que permite destruir procesos de forma interactiva:

Tanto kill como en killall admiten dos sintaxis para destruir un proceso:

kill –s señal PID

kill –numero_señal PID

killall –s señal nombre_proceso

killall –numero_señal nombre_proceso

Además killall admite:

killall – –signal señal nombre_proceso

• Administrar las prioridades de los procesos

Academy Xperts Bolivia 47


EX - LINUX EXPERTO EN LINUX. MODULO 1

Priorizar un proceso

Es posible administrar la prioridad con la que se ejecutan los procesos de nuestro sistema, con el
objetivo de priorizar el uso de la cpu a ciertos programas. Los comandos para realizar estas acciones
son nice y renice. Utilizamos nice para ejecutar un programa indicando la prioridad que queremos
que tenga y renice para modificarla de un programa ya en ejecución.

Podemos usar nice de tres maneras distintas:

- Indicando la prioridad después de un guión (solo para prioridades positivas).


- Indicando la prioridad después del flag -n.
- Indicando la prioridad después del parámetro –adjustement=.

nice -12 vi hola.txt

nice -n 12 vi hola.txt

nice –adjustement=12 vi hola.txt

Si omitimos el valor de regulación, nice utilizará por defecto la 10. Cuando ejecutamos un
programa sin nice, su prioridad es de 0. El rango de valores es de -20 a 19, siendo los valores
negativos los que tienen una prioridad más alta. Solamente con el usuario root podemos iniciar un
programa que una prioridad negativa.

El comando renice tiene la siguiente sintaxis:


renice prioridad [[-p] pids] [[-g] pgrps] [[-u] usuarios]

Donde pids son los id de los procesos, pgrps los ids de los grupos y usuarios el nombre o nombres
de los usuarios. Cuando queramos restablecer la prioridad para un determinado grupo o usuarios,
debemos tener en cuenta que solo root puede realizar esta acción.

Un ejemplo:
renice 3 -p 12122 31313 -u antonio maría

Establecemos la prioridad 3 para los procesos 12122 y 31313 para los usuarios antonio y maría.

• Buscar archivos de texto usando expresiones regulares

Comando grep

Este comando nos permite el uso de expresiones regulares para la búsqueda de archivos. Veamos
algunas de las opciones más importantes:

Flag Acción

-c o –count Contar líneas coincidentes

-i o –ignore-case Ignorar entre mayúsculas y minúsculas

Academy Xperts Bolivia 48


EX - LINUX EXPERTO EN LINUX. MODULO 1

-r –recursive Buscar recursivamente

-f o –file=fichero Especifica el fichero de entrada

-E o — extended-regexp Utilizar una expresión regular extendida

La sintaxis del comando es:


grep [opciones] regexp [ficheros]

Donde “regexp” es el conjunto de expresiones regulares

Un ejemplo sencillo podría ser el siguiente:


grep -r eth0 /etc/*

Dicha orden buscará en el directorio /etc/ y en TODAS sus subcarpetas todos los ficheros que
contengan la cadena “eth0”.

Dado que los usuarios normales no pueden acceder a determinados ficheros de /etc/, es posible
que al probar la orden os devuelva algún error. Para solucionar esto, o bien probamos la orden
como root, o redirigimos los errores a “/dev/null”

A continuación algunos ejemplos más complicados:


grep -r eth[01] /etc/*

Mostrará los ficheros que contengan la cadena eth0 y etho1.


grep -E “(www.\ejemplo\.es|www.\ejemplo2\.com” /etc/*

Se nos muestran todos los ficheros del directorio /etc/ y sus subdirectorios que contengan las
cadenas http://www.ejemplo.es o http://www.ejemplo2.com

Se deben entrecomillar ciertas expresiones regulares para que la consola no las intente analizar
como un comando propio.

Ahora usaremos el grep junto con otro comando:

<div style=”background-color: #e0e0e0; padding: 1.2em 1.2em 1.2em 61px;”ps ax | grep xterm

Muestra todos los procesos en ejecución llamados “xterm”

• Las expresiones regulares

El shell nos proporciona una característica que nos ahorra tiempo a la hora de teclear nombre de
ficheros con los que operan comandos. La característica se llama generación de ficheros o
expansión de nombres y permite utilizar caracteres especiales para especificar grupos de nombres
de ficheros.

Academy Xperts Bolivia 49


EX - LINUX EXPERTO EN LINUX. MODULO 1

Podemos encontrar nombre de ficheros que cumplen un determinado patrón, como por ejemplo
los que acaben en “.txt” o los que empiecen por “fichero” o los que tienen 3 caracteres. Veamos
los tipos de expresión regular:

Caracteres especiales utilizados:

Carácter Resultado Ejemplo

. Representa El comando “ls o.o“ mostrará los


cualquier carácter único, ficheros que empiecen poro,
excepto el salto de línea contenga cualquier otra letra, y termine
por o (oso, oco, olo..).

^ Representa el comienzo de cat /etc/passwd | grep ^u nos


una línea devolverá las lineas del fichero
que empiecen por “u”.

$ Representa el final de una cat /etc/passwd | grep “bash$” nos


línea devolverá las líneas del fichero que
acaben en “bash”.

| Separa dos posibles hola | adios coincide con hola y adiós


coincidencias

() Rodean subexpresiones. Es grep “\(us\)\+” passwd nos devolverá


utilizado para asegurarse de todas las coincidencias que encuentre
las expresiones que rodean con la cadena “us“.
sean tratadas como un
grupo.

\ Si se antepone a Para que la


un carácter especial, este cadenahttp://www.google.com sea
será tratado como tratada como
un carácter normal. tal, deberemos indica
www\.google\.com.
Sino, el punto podría ser igual a
cualquier carácter, y
nos podría devolver, por
ejemplo, wwwagoogleacom.

Expresiones entre corchetes:

Las expresiones que contengan caracteres rodeados entre corchetes, nos devolverán las cadenas
que coincidan con cualquiera de las letras que estén entre los mismos. Por ejemplo, el comando ls

Academy Xperts Bolivia 50


EX - LINUX EXPERTO EN LINUX. MODULO 1

C[AEIOU]L nos va a mostar todos los archivos que tengamos en el directorio que se llamen cal, cel,
cil, col y cul, y el comando ls [a-zA-z], todos los ficheros que empiecen por minúscula o mayúscula.

Expresión regular Resultado

[] Coincidencia con cualquiera de los caracteres


cerrados

[! ] Coincidencia con cualquiera de los caraceres no


cerrados

[–] Coincidencia con cualquiera de los caracteres del


rango

Operadores de repetición:

Se trata de símbolos especiales que se utilizan para denotar cuantas veces debe aparecer un
elemento coincidente.

Símbolo Resultado

? Especifica cero o una coincidencia

* Especifica cero o más ocurrencias

+ Coincide con una o mas apariciones

Ejemplos:

La expresión A?B, nos podrá coincidir con AEB, ACB, AB, …..

La expresión version10.*, nos podra coincidir con version101,version102, version1000 ….etc

• Realizar operaciones básicas de edición de archivos usando vi

Editor vi

vi (pronunciado ube-i) es el editor estándar de UNIX. El interés de aprender a manejar este editor
es que en cualquier máquina UNIX tendremos al menos esta herramienta para editar ficheros. vi
facilita 20 líneas en pantalla para realizar la edición. vi es un editor que, en un momento dado, se
encuentra en uno de dos modos básicos de operación: modo de comandos y modo de edición.

Academy Xperts Bolivia 51


EX - LINUX EXPERTO EN LINUX. MODULO 1

El modo por defecto es el modo de comandos. En este modo no se puede realizar la edición del
texto. vi espera al comando apropiado antes de realizar una operación. En general, vi volverá al
modo de comandos después de ejecutar un comando.

La ventaja de este modo de trabajar es que se pueden ejecutar comandos desde ficheros, y los
documentos pueden ser formateados o reestructurados simplemente ejecutando comandos de vi.

Si al presionar ESC el terminal emite un pitido quiere decir que estamos en modo de comandos.

Iniciando vi

Para comenzar a usar vi, teclear

vi nuevo_fichero

Este comando inicia el editor y, como el fichero no existe todavía, lo crea para ser editado. El
editor está ahora en modo de comandos esperando por un comando.

vi +5 nombre_fichero //Comienza la edición en la línea 5

vi + nombre_fichero //Comienza la edición en la última línea

Moviendo el cursor

Las siguientes teclas controlar el movimiento del cursor.

k arriba
j abajo
h izquierda
l derecha

Cuando se carga vi con un nuevo fichero, el cursor está en la esquina superior izquierda de la
pantalla, y no puede ser movido con las teclas de cursor.

Modo de entrada de texto (añadir, insertar)

a añade texto a partir del carácter en que está situado el cursor.


A añade texto al final de la línea actual.
i inserta texto a partir de la posición del cursor
I inserta texto al principio de la línea actual.
o inserta una línea debajo de la posición del cursor
O inserta una línea encima de la posición del cursor
:r fich permite insertar el fichero fich tras la línea actual

Borrando y cambiando texto

Los tres comandos más utilizados para alterar el texto son

x borra el carácter en el cursor


nx borra n caracteres hacia la derecha, incluido el que está sobre el cursor.
nX borra n caracteres hacia la izquierda.

Academy Xperts Bolivia 52


EX - LINUX EXPERTO EN LINUX. MODULO 1

r sustituye el carácter en el cursor


dd borra la línea en la que está el cursor
ndd borra n líneas hacia abajo incluyendo la que contiene el cursor.

Estos tres comandos son ejecutados en el modo de comandos, y vuelven al modo de comandos
después de ejecutarse.

Deshaciendo cambios

Hay veces que se realizan cambios y nos damos cuenta inmediatamente que hemos cometido un
error. El editor vi facilita mecanismos para deshacer acciones de comandos previos.

El comando u deshace el comando previo.

El comando U deshace todos los cambios realizados en la línea actual.

Guardando cambios y permaneciendo en vi

Es muy recomendable guardar los cambios que se van realizando de una forma regular. Para ello
se utiliza:w

Si decides que no quieres sobrescribir el fichero que estás editando, sino que quieres guardar los
cambios como un fichero nuevo, añade al comando :w el nombre del nuevo fichero, :w
nuevo_fichero2

Abandonando vi

Para dejar vi se utiliza, ZZ Guarda los cambios en el fichero original, y vuelve al intérprete de
comandos

:wq Igual que ZZ


:q! Abandona el editor, no guarda los cambios, y vuelve al intérprete de comandos
Comandos adicionales para posicionamiento del cursor

Además de las teclas h, j, k, l existen cuatro más:


b mueve el cursor al comienzo de la palabra anterior
e mueve el cursor al final de la palabra siguiente
0 mueve el cursor al comienzo de la línea (cero)
$ mueve el cursor al final de la línea

• Scroll de pantalla

Los comandos para avanzar una pantalla arriba y abajo (12 líneas) son

ctrl-d una pantalla abajo


ctrl-u una pantalla arriba

Para ficheros muy largos, se puede ir a una línea del texto

3000G va a la línea número 3000

Academy Xperts Bolivia 53


EX - LINUX EXPERTO EN LINUX. MODULO 1

Para posicionar el curso en la última línea del fichero, teclea G

Para posicionar el cursor al comienzo del fichero, teclea 1G

El siguiente comando muestra el número de línea actual

ctrl-g

• Búsqueda

Otro método de posicionarse dentro de un fichero es buscando una cadena de caracteres. En el


modo de comandos, cualquier cadena de caracteres precedida por / significa el comando de
búsqueda hacia adelante. El cursor se posiciona en la primera ocurrencia de dicha cadena.

El comando n busca hacia adelante la siguiente ocurrencia.

Para buscar hacia atrás, se utiliza el comando?

• Borrar texto

Ya se vio anteriormente el comando dd para borrar la línea actual.

El comando dw borra la palabra actual. Nótese que el comando de borrado comienza por d,
seguido por el ámbito de aplicación (d para una línea, w para una palabra (word en inglés)).

• Quitar y poner

Cuando se borra algo, es almacenado en un buffer temporal. El contenido de este buffer puede ser
accedido y 'puesto' o pegado en cualquier sitio del texto.

Para recuperar el último texto borrado, se usa el comando p

nyw guarda en la memoria intermedia n palabras contadas desde la posición del cursor.
y$ guanda en la memoria intermedia desde la posición del cursor hasta el final de la línea.
yy guarda en la memoria intermedia la línea entera en la que se encuentra el cursor.
yn guarda en la memoria intermedia n+1 líneas desde la línea actual.

Academy Xperts Bolivia 54


EX - LINUX EXPERTO EN LINUX. MODULO 1

Tema 4: Dispositivos, sistemas de ficheros Linux, estándar de jerarquía del sistema de ficheros

• Crear particiones y sistemas de ficheros

Particionar un disco es como dividirlo en discos más pequeños contenidos dentro de la misma
carcasa.
Las particiones pueden ser de dos tipos: primarias o lógicas, las particiones lógicas se crean dentro
de una partición primaria especial llamada extendida.
Como mínimo en un disco debe de haber una partición primaria y como máximo puede haber cuatro
particiones primarias o tres primarias y una extendida, no puede haber más de una partición
extendida en un mismo disco duro.

Dentro de una partición extendida puede haber todas las particiones lógicas que queramos.
Cada partición puede contener un sistema de archivos diferentes.

Un sistema de archivos establece los mecanismos para acceder a los datos que contiene y permite
o no el acceso a dichos datos en determinadas circunstancias y en caso de alguna inconsistencia
posibilita medios para su restauración.

Existen diferentes sistemas de archivos y cada sistema operativo soporta diferentes sistemas de
ficheros, algunos de ellos son los siguientes:

Ext2 el primer sistema de archivos diseñado expresamente para Linux.


Ext3 versión mejorada de Ext2, ampliamente utilizada en distribuciones Linux
Ext4nuevo sistema de ficheros para Linux evolucionado de Ext3 algunas de sus ventajas con respecto
a este último son:
Aumento del tamaño del sistema de ficheros a 1 Exabay = 2^20 Terabyte y del tamaño máximo por
archivo (16 Tb).
Número ilimitado de directorios frente a los 32.000 de Ext3
Mayor velocidad en la creación y borrado de ficheros
XFS Implementado para sistemas Unix, rápido acceso para grandes cantidades de datos y altas
velocidades, pero lento en ficheros pequeños. Se utiliza en grandes servidores y donde se maneje
mucha información.
ReiserFS Sistema de archivos diseñado e implementado por la empresa Namesys, liderado por Hans
Reiser. Es soportado por Linux y otros sistemas operativos (algunos a través de implementaciones
muy inestables).
Fat16/Fat32 Sistemas Dos/Windows 95, Windows 98, este sistema de archivos produce una gran
fragmentación del disco.
NTFS sistema de archivos implementado para los sistemas operativos Windows Xp/2000/2003
server y Vista.
A la acción de crear un sistema de ficheros dentro de una partición se le llama también formatear
la partición.

La nomenclatura para identificar las particiones es diferente en Windows y en Linux. En Windows


las unidades se identifican con letras, por ejemplo:

Primer disco duro (IDE, SCSI ó SATA)

Academy Xperts Bolivia 55


EX - LINUX EXPERTO EN LINUX. MODULO 1

C: (primera partición del primer disco duro IDE)


D: (segunda partición del primer disco duro IDE)

Segundo disco duro (IDE ó SCSI ó SATA)

E: (primera partición del segundo disco duro IDE)


F: (segunda partición del segundo disco duro IDE)

En Linux se representan de la siguiente manera:

hda (primer disco duro IDE).

hda1 (primera partición del primer disco duro IDE).


hda2 (segunda partición del primer disco duro IDE).
hda5 (primera partición lógica de una partición extendida del primer disco duro IDE)

hdb (segundo disco duro IDE).

hdb1 (primera partición del segundo disco duro IDE).


hdb2 (segunda partición del segundo disco duro IDE).
hdb5 (primera partición lógica de una partición extendida del segundo disco duro IDE)

• Discos SCSI ó SATA.

sda (primer disco duro SCSI)

sda1 (primera partición del primer disco SCSI).


sda2 (segunda partición del primer disco SCSI).
sda5 (primera partición lógica del primer disco duro SCSI)

sdb (segundo disco duro SCSI)

GParted es un editor de particiones para Linux con el que podemos crear, borrar y redimensionar
particiones. También podemos crear el sistema de ficheros que tendrá cada partición. Con la versión
actual de Gparted 0.4.3 podemos crear los siguientes sistemas de ficheros:

Sistemas de ficheros que se puede implementar con Gparted

GParted Es muy fácil e intuitivo de usar, muchas distribuciones Linux lo incluyen en su live CD, entre
ellas Ubuntu.

Una vez que tenemos creadas nuestras particiones en nuestro disco y formateadas con el sistema
de archivos que van a utilizar, para poder utilizar dichas particiones en Linux, tenemos que hacer un
paso más, que es crear como mínimo el punto de montaje para el directorio raíz (/). Linux utiliza una
estructura de directorios jerarquizada en forma de árbol invertido en donde todo es tratado como

Academy Xperts Bolivia 56


EX - LINUX EXPERTO EN LINUX. MODULO 1

si fuera un archivo y para poder acceder a él debe estar acoplado (montado) dentro de esa
estructura de directorios encabezada por el directorio raíz.

La interfaz gráfica de instalación de cualquier “distro” de linux nos permite montar el directorio raíz
del sistema donde se instalarán los archivos más importantes del sistema operativo, pero también
podemos crear otros puntos de montaje como /home (que es como la carpeta Mis documentos de
Windows pero mucho más potente) en otra partición diferente, de esta manera si formateamos la
partición donde está el sistema operativo, mis documentos (tú /home) quedará a salvo y tus datos
no se perderán.

En el tutorial sobre como instalar Ubuntu 9.04 paso a paso se explica cómo establecer puntos de
montaje en la instalación del sistema operativo.

He dicho antes que en Linux todo es tratado como un archivo, es decir, si tenemos una disquetera,
un lector de DVD, un disco externo, etc. para que podamos acceder a estos dispositivos antes tienen
que estar montados como un archivo más.
Después de la instalación del sistema operativo podemos montar o desmontar los dispositivos o
archivos que queramos, si no sabes cómo hacerlo mira el tutorial que hay sobre comandos
Unix/Linux que hay “montado” en este mismo sitio web.

Para la instalación de Linux, ya sea de la distribución que sea, se necesita como mínimo dos
particiones: la principal, donde se instalará el sistema operativo, formateada con el sistema de
archivos que permita la distribución que vayamos a instalar y otra partición llamada swap
(intercambio de memoria virtual), esta partición es utilizada como memoria RAM virtual cuando
tenemos muchas aplicaciones abiertas y la memoria RAM de nuestro ordenador es insuficiente, de
tamaño del swap se suele poner el doble de la memoria RAM, es decir, si tenemos 250 Mb de
memoria RAM el tamaño del swap debería de ser aproximadamente de 500 MB, pero estas cifras
están pensadas para equipos con poca memoria. Por ejemplo, si te has comprado un equipo nuevo
con 4GB de memoria RAM, no es obligatorio que ponga 8GB para el swap. También hay que
considerar que si instalas Linux en un equipo con poca memoria y haces mucho uso del swap, tu
ordenador se volverá más lento ya que se tarda más tiempo en leer y escribir del disco duro que de
la memoria física RAM, en este caso deberías reconsiderar el ampliar la memoria RAM de tu
ordenador.

• Mantener la integridad de los sistemas de ficheros

Los sistemas de ficheros pueden enfermar de varias maneras: pueden verse desboradados por
exceso de información, pueden estar ajustados por el sistema de manera inapropiada o pueden
corromperse por culpa de drivers defectuosos o errores del hardware. En Linux existen varias
herramientas que ayudan a vigilar el estado, ajustar el rendimiento y reparar los sistemas de
ficheros. Muchas de estas herramientas deben ejecutarse cuando el sistema de ficheros no esté
montado, si lo hacemos con el sistema montado puede derivar en corrupción de datos.

• Poner a punto los sistemas de ficheros

Los sistemas de ficheros son grandes estructuras de datos y sirven para almacenar datos en un disco
de manera indexada; incluyen restricciones de diseño y, en muchos casos, no hay opción posible

Academy Xperts Bolivia 57


EX - LINUX EXPERTO EN LINUX. MODULO 1

ante tales restricciones. Existen herramientas que ayudan a definir las opciones del sistema de
ficheros que afectan al rendimiento. Las tres principales son: dumpe2fs, tune2fs y debugfs. La
primera de ellas proporciona información y las otras dos permiten cambiar las opciones del sistema
de ficheros. Esto es particularmente útil en sistemas de ficheros ext2fs, ext2fx y ext4fs.

• Obtener información sobre el sistema de ficheros

El comando dumpe2fs proporciona información sobre el sistema de ficheros y tiene una sintaxis
muy sencilla:

# dumpe2fs [opciones] dispositivo

El dispositivo es el fichero del dispositivo del sistema de ficheros; por ejemplo, /dev/hda2 o
/dev/sdb7 acepta varias opciones y la mayoría son poco conocidas. La más importante
probablemente sea -h, que omite la información sobre los descriptores de grupos; esta información
no se utiliza para ajustes básicos, sino para la depuración del sistema de ficheros. Este comando
devuelve una información, como por ejemplo la fecha de la última comprobación, el número de
nodos índice soportado por el sistema de ficheros, etc.

A diferencia de muchas utilidades de bajo nivel, dumpe2fs se puede ejecutar en un sistema de


ficheros que se encuentre montad, algo útil si queremos cambiar las configuraciones del disco del
sistema. El resto de sistema de ficheros no tienen una herramienta parecida a dumpe2fs, pero XFS
proporciona algo similar: xfs_info; para emplearlo, sólo deberíamos pasarle el nombre de la
partición que queremos comprobar:

# xfs_info /dev/sda7

También se le puede pasar el punto de montaje, que requiere que el sistema de ficheros este
montado. La información que devuelve es bastante técnica, relacionada en su mayor parte con los
tamaños de bloque, tamaños de sectores, etc.

Otra herramienta es xfs_metadump, que copia los metadatos del sistema de ficheros (nombres,
tamaño de ficheros, etc.) en un fichero. Este comando no copia el contenido real del fichero, está
pensado como herramienta para la depuración.

• Parámetros del sistema de ficheros que se pueden ajustar

El programa tune2fs permite cambiar parámetros del sistema de ficheros de los que informa
dumpe2fs, su sintaxis es muy sencilla:

# tune2fs [opciones] dispositivo

A pesar de parecer sencillo, resulta de una enorme complejidad, ya que cada una de las
características que permite ajustar tune2fs requiere una opción propia:

Ajustar el número máximo de montados: los sistemas de ficheros de Linux realizan una
comprobación periódica para evitar que los errores no detectados acaben afectando al disco. -c

Academy Xperts Bolivia 58


EX - LINUX EXPERTO EN LINUX. MODULO 1

montados nos permite ajustar el número máximo de veces que un disco puede montarse sin
comprobación. Se puede también engañar al sistema para que crea que el disco ha sido montado
un número de veces determinado con la opción -C montados.
Ajustar el tiempo entre comprobaciones: las comprobaciones de disco se hacen en función del
tiempo y número de montados. Se puede modificar este intervalo de tiempo con la opción -i
intervalo; este intervalo debe ir acompañado de “d,w o m” para especificar días, semanas o meses.
Añadir un respaldo de transacciones: -j añade un respaldo de transacciones al sistema de ficheros,
convirtiendo un sistema de ficheros ext2 en un ext3.
Definir los bloques reservados: -m porcentaje define el porcentaje de disco que se reserva para que
lo utilice root. Por defecto es 5%, algo excesivo para discos duros grandes. Deberíamos asignar cero
a los discos extraibles utilizados para almacenar ficheros. También se puede definir este espacio
reservado en bloques con la opción -r bloques.
Tune2fs dispone de muchas más opciones; no se debe utilizar con el sistema de ficheros montado.
En XFS un comando parecido seria xfs_admin, y algunas de sus opciones son las siguientes:

Utilizar la versión dos del formato del respaldo de transacciones: se activa con la opción -j y puede
mejorar el rendimiento en determinadas situaciones.
Obtener la etiqueta y el UUID del sistema de ficheros: la opción -l nos devuelve la etiqueta del
sistema de ficheros y la opción -i su UUID. En GNU/Linux rara vez se utiliza el nombre, sino que se
suele utilizar el UUID, un código largo que se utiliza por las distribuciones para especificar el sistema
de ficheros a montar.
Definir la etiqueta y el UUID del sistema de ficheros: la opción -L etiqueta cambia la etiqueta del
sistema de ficheros; la opción -U UUID modifica el UUID del disco. El nombre de la etiqueta tiene,
como máximo, 12 caracteres; en el caso de el UUID, se puede utilizar el mismo que tenía antes de
ser formateado, pero también se puede utilizar el valor generate para xfs_admin cree una nueva
UUID.

• Depurar un sistema de ficheros interactivamente

Se pueden modificar interactivamente las características de un sistema de ficheros mediante


debugfs, que incorpora las capacidades de dumpe2fs, tune2fs y muchas otras herramientas de
manipulación de ficheros. Para utilizarlo, escribiremos el nombre de fichero del dispositivo que
deseamos manipular y nos aparecerá el prompt de debugfs:

# debugfs /dev/hda2

debugfs:

Este prompt puede recibir varios comandos:

Mostrar información del superbloque del sistema de ficheros: show_super_stats o stats genera
información similar a lo que muestra dumpe2fs.
Mostrar la información del nodo índice: stat nobrefichero muestra los datos del nodo índice en un
fichero o directorio.
Deshacer el borrado de un fichero: escribiendo undelete inode nombre, donde inode es el número
de nodo índice del fichero borrado y nombre es el nombre de fichero que queremos darle (se puede
usar undel en lugar de undelete). Esta función es limitada, ya que, si no conocemos el número del

Academy Xperts Bolivia 59


EX - LINUX EXPERTO EN LINUX. MODULO 1

nodo índice del fichero que queremos recuperar, no nos sirve de nada. Para obtener una lista de los
nodos índice borrado escribiremos lsdel o list_deleted_inodes, lo malo es que puede que no
proporcione suficientes pistas para poder encontrar el fichero deseado.
Extraer un fichero: podemos extraer un fichero del sistema de ficheros escribiendo write fichero-
interno fichero-externo, donde fichero–interno es el fichero del sistema de ficheros que se manipula
y fichero–externo es el nombre de un fichero del sistema Linux principal. Este recurso es útil si el
sistema de ficheros tiene daños serios y queremos extraer un fichero crítico sin montar el sistema.
Manipular ficheros: se puede cambiar de directorio con cd, crear enlaces con ln, eliminar un fichero
con rm, etc.
Obtener ayuda: para generar un resumen de los comandos disponibles, escribiremos list_request,
lr, help o ?.
Salir: quit saldrá del programa.
Estas son sólo algunas de las posibilidades de debugfs; en manos de un experto, esta herramienta
permite recuperar un sistema de ficheros muy dañado o, al menos, extraer información crítica de
éste. No se debe utilizar esta herramienta en un sistema de ficheros montado.
El equivalente XFS más cercano a debugfs es xfs_db, que proporciona una herramienta interactiva
para acceder a un sistema de ficheros y manipularlo. Lo malo de xfs_db es que es una herramienta
sólo para expertos en XFS.

Mantener un respaldo de transacciones

Los sistemas de ficheros sin respaldo de transacciones como ext2fs proporcionan un buen
rendimiento, pero tienen una gran limitación tras un corte de corriente, una caída del sistema u otro
apagado súbito, ya que el sistema de ficheros podría quedar en un estado inconsistente, lo que
provoca que haya que comprobar todo el disco de forma automática cuando se inicia el sistema,
esto puede prolongarse en el tiempo.
Para evitar esto, existen los sistemas de ficheros con respaldo de transacciones que mantienen un
registro que describe las operaciones pendientes. GNU/Linux describe en este registro lo que va a
hacer antes de realizar la acción; el resultado es que, si se cae el sistema o falla la alimentación, el
sistema examina el registro y revisa sólo las tareas descritas en él; si se encuentra en estado
inconsistente, el sistema puede revertir los cambios comprobando sólo las estructuras de datos
descritas en el registro de forma automática al iniciar el sistema, lo que ayuda a que la recuperación
del sistema se haga en mucho menos tiempo.
Hoy en día, este método de respaldo de transacciones suele ser el estándar en GNU/Linux, pero
también nos podemos encontrar particiones pequeñas y medios extraibles que no utilicen este
método. Hay cuatro sistemas de ficheros de GNU/Linux que utilizan respaldo de transacciones:
ext3fs, ReiserFS, XFS y JFS.
ext3fs es similar a ext2fs, pero con respaldo de transacciones incorporado. Esto significa que, con la
opción -j de tune2fs, podremos convertir un sistema de ficheros ext2 en un ext3. Sin embargo, para
poder utilizar este respaldo de transacciones, deberemos montar el sistema de ficheros con el
código ext3 en vez de ext2. El resultado de crear este respaldo de transacciones es un fichero
.journal que contiene el registro.
El respaldo de transacciones tiene su propio conjunto de parametros que se definen con la opción -
J de tune2fs. Las subopciones size=tamño-registro y device=registro-externo permiten definir el
tamaño del registro y el dispositivo donde almacenarlo; por defecto, se crea un registro con el
tamaño adecuado para el sistema de ficheros y se almacena en éste.

Academy Xperts Bolivia 60


EX - LINUX EXPERTO EN LINUX. MODULO 1

• Revisar el sistema de ficheros

Esta es una tarea que probablemente tengamos que realizar de vez en cuando, por ejemplo en busca
de errores del sistema de ficheros. Si dejamos sin revisar durante mucho tiempo el sistema de
ficheros, puede derivar en pérdidas de datos. GNU/Linux incluye diversas herramientas para
comprobar la integridad de un sistema de ficheros, la principal para este fin se llama fsck, que es
una interface de usuario para otras herramientas como: e2fsck, xfs_check o xfs_repair, la sintaxis
de fsck es la siguiente:

# fsck [-sACVRTLP] [-t tiposf] [–] [opciones-fsck] sistema de ficheros

Algunos de los parámetros más comunes son los siguientes:

Revisar todos los ficheros: -A hace que se verifiquen todos los sistemas de ficheros marcados para
revisión en /etc/fstab. Esta opción se suele utilizar en scripts de inicio del sistema.

Indicar el progreso: -C muestra un indicador de progreso en modo texto del proceso de revisión,
esta opción se incluye también en e2fsck.

Mostrar una salida detallada: -V produce una salida detallada del proceso de revisión, -N le dice a
fsck que muestre lo que haría sin hacerlo realmente.

Definir el tipo de sistema de ficheros: se puede forzar el tipo de sistema de ficheros con el indicador
-t tiposf(sf=sistema de ficheros); junto con -A, se comprobarán sólo los sistemas de ficheros que
coincidan con el tipo especificado y, si lleva el prefijo “no” delante de tiposf, revisará todos excepto
el que coincida con tiposf.

Opciones específicas del sistema de fichero: FSCK le pasa opciones que no entiende o aquellas que
llevan doble guion (–) al programa de revisión subyacente. Algunas de las opciones más habituales
son -a o -p que, realizan una comprobación automática, -r realiza una comprobación interactiva y -
f fuerza una comprobación completa del sistema de ficheros, incluso en el caso de que el sistema
de ficheros parezca inicialmente limpio.

Listas de sistemas de ficheros: es el parámetro final del comando y se pueden definir uno o varios
sistemas de ficheros,.

FSCK se suele ejecutar solo con el nombre del dispositivo. Debemos asegurarnos de que el sistema
de ficheros no se encuentra montado, ya que, de lo contrario, podría derivar en una corrupción del
sistema de ficheros. Se ejecuta automáticamente al iniciarse el sistema sobre las particiones
marcadas en /etc/fstab realizando sólo un rápido examen superficial. El resultado es que el proceso
de comprobación durante el inicio no retrasa el arranque del sistema, a no ser que no se haya
apagado adecuadamente.

Existen un par de excepciones a esta regla de inicio: si el disco lleva sin ser revisado más tiempo del
establecido (normalmente 6 meses) o si el sistema de ficheros se montó más de un cierto número
de veces (normalmente 20), el sistema realizará una comprobación completa del disco durante el

Academy Xperts Bolivia 61


EX - LINUX EXPERTO EN LINUX. MODULO 1

arranque del sistema y, por tanto, veremos que se realizan comprobaciones del sistema de ficheros
aunque el sistema se haya apagado correctamente.
ext2fs y ext3fs necesitan programas revisores que corrijan problemas de escritura, errores,
problemas de hardware y motivos similares. Si detectamos un comportamiento extraño en un
sistema de ficheros con respaldo de transacciones, deberemos desmontarlo y realizar una
comprobación.

• Monitorizar el uso de disco

En GNU/Linux existen herramientas para comprobar el espacio que consumen los ficheros, ya que
uno de los problemas más comunes de los discos es que se pueden llenar. Esta tarea es llevada a
cabo por los programas: df que resume el uso de disco en función de las particiones, y du, que lo
hace en función de los directorios.

• Monitorizar el uso del disco por particiones

La sintaxis del comando df es la siguiente:

# df [opciones] [ficheros]

En el caso más simple, escribiremos el nombre del comando para ver un resumen del espacio en
disco utilizado en las particiones, lo que nos mostrará el fichero de dispositivo asociado al sistema
de ficheros (por ejemplo /dev/sda1), el espacio utilizado y el espacio libre en éste, así como el
porcentaje de espacio en uso y el punto de montado. El límite apropiado de uso de espacio en el
disco varía dependiendo del tipo de partición, aunque normalmente deberíamos pensar en limpiar
la partición cuando el espacio en uso supera el 80%.

df puede modificar su salida con varias opciones y cada una lo hace de un modo específico:

Incluir todos los sistemas de ficheros: -a o –all incluyen pseudo sistemas de ficheros con tamaño
cero entre los que se pueden encontrar /proc, /sys y otros.
Utilizar unidades a escala: -h o –human-readable muestran una escala en el tamaño entendible por
los humanos; no utilizan bloques, sino medidas conocidas para resumir el tamaño de los ficheros. -
H o –si tienen un efecto similar, pero utilizan potencias de 10 en lugar de en potencias de 2. Las
opciones -k o –kilobytes y -m o –megabytes fuerzan la salida en sus unidades respectivas.
Obtener información sobre los nodos índice: -i o –inodes nos ayudan a obtener información sobre
los nodos índice, lo que puede ser de mucha utilidad si tenemos muchos ficheros pequeños que
pueden agotar los nodos índice disponibles antes que el espacio disponible en disco. Esta opción
funciona bien con sistemas de ficheros que crean un número fijo de inodos (ext2, ext3, xfs, etc); sin
embargo, en sistemas de ficheros que crean inodos dinámicamente (Reisefs, …), esta opción pierde
sentido.

Sólo sistemas de ficheros locales: -l o –local hacen que se omitan los sistemas de ficheros en red, lo
que acelera el funcionamiento.
Mostrar el tipo de sistema de ficheros: -T o –print-type mostrarán el tipo de sistema de ficheros.

Academy Xperts Bolivia 62


EX - LINUX EXPERTO EN LINUX. MODULO 1

Limitar por tipo de sistema de ficheros: -t tiposf o –type=tiposf muestran información sobre los
sistemas de ficheros del tipo especificado. -x tiposf o –exclude-type=tiposf excluyen los sistemas de
ficheros del tipo especificado.

Se pueden especificar a df uno o más ficheros; el programa restringirá su informe al sistema de


ficheros en el que se encuentre el fichero o directorio especificado.
Monitorizar el uso de disco por directorios

La herramienta du permite refinar el diagnóstico y seguir el rastro a los directorios y ficheros que
están acaparando el espacio en disco, su sintaxis es similar a df:

# du [opciones] [directorios]

du busca los directorios especificados de forma recursiva e informa de cuánto espacio consume
cada uno y todos sus subdirectorios; tiene opciones para reducir el tamaño de la salida y realizar
algunas tareas útiles:

Indicar los ficheros además de los directorios: -a o –all harán que se informe sobre el espacio
utilizado por los ficheros de forma individual.

Hallar la suma total: -c o –total añaden una suma total al final de la salida.

Utilizar unidades a escala: -h o –human-readable muestran una escala en el tamaño entendible por
los humanos; no utilizan bloques, sino medidas conocidas para resumir el tamaño de los ficheros. -
H o –si tienen un efecto similar, pero utilizan potencias de 10 en lugar de en potencias de 2. Las
opciones -k o –kilobytes y -m o –megabytes fuerzan la salida en sus unidades respectivas.

Contar los enlaces de referencia: -l o –count-links hacen que du cuente individualmente cada enlace
de referencia que aparece. Normalmente, cuentan los ficheros que aparecen varias veces como
enlaces de referencia una sola vez.

Profundidad límite: –max-depth=n limita el informe a n niveles; los contenidos de los subdirectorios
son contados aunque no se informe sobre ellos.

Resumir: -s o –summarize evitan que obtengamos una línea de salida por cada subdirectorio y
muestran sólo aquellos ficheros y directorios que hallamos especificado.

Limitar a un sistema de ficheros: -x o –one-file-system limitan el informe al sistema de ficheros


actual. Si hay montado otro sistema de ficheros en el árbol que desea resumir, su contenido no se
incluirá en el informe.

Si hacemos una comprobación para saber el espacio consumido por un usuario en /home y
descubrimos que este consumo de espacio es un problema, deberíamos contactar con el usuario en
lugar de intentar limpiarlo nosotros. Debemos tener cuidado con qué ficheros borramos a pesar de
su tamaño, ya que algunos podrían ser ficheros de programa que se deberían eliminar a través del
sistema de administración de paquetes.

Academy Xperts Bolivia 63


EX - LINUX EXPERTO EN LINUX. MODULO 1

• Control del montaje y desmontaje del sistema de ficheros


Montar y desmontar sistemas de ficheros

Dentro de GNU/Linux, los sistemas de ficheros se utilizan con más frecuencia al montarse, es decir,
asociarse con un directorio. Esto se puede hacer una única vez empleando herramientas como
mount (y desmontándolos después con umount) o de manera permanente en cada reinicio,
modificando el fichero /etc/fstab.

Montar o desmontar temporalmente los sistemas de ficheros

Linux posee el comando mount para montar un sistema de ficheros en un punto de montado. El
comando umount invierte este proceso. En la práctica, no es complicado utilizar estos comandos,
aunque admiten un gran número de opciones.

• La sintaxis y parámetros de mount

La sintaxis de mount es la siguiente:

# mount [-alrsvw] [-t tiposf] [-o opciones] [dispositivo] [punto_de_montado]

Montar todos los sistemas de ficheros: -a hace que se monten todos los sistemas de ficheros listados
/etc/fstab.
Montar en modo sólo lectura: -r hace que se monte el sistema de ficheros en sólo lectura, aunque
se trate de un sistema de ficheros de lectura/escritura.
Mostrar una salida detallada: -v produce una salida detallada donde se incluyen comentarios sobre
las operaciones mientras tienen lugar.
Montar en modo lectura/escritura: -w monta el sistema de ficheros para operaciones de lectura y
escritura; es el comportamiento por defecto para la mayoría de los sistemas de ficheros, aunque
algunos drivers experimentales sólo funcionan en modo lectura.
Especificar el tipo de sistema de ficheros: -t tiposf sirve para especificar el tipo de sistema de
ficheros; los más comunes son ext2 (para ext2fs), ext3 (para ext3fs), ext4dev (para ext4), reiserfs
(para ReiserFS), jfs (para JFS), xfs (para XFS), vfat (para FAT con nombres largos de ficheros), msdos
(para FAT con 8 letras y 3 para la extensión), iso9660 (para sistemas de ficheros de CD-Rom), udf
(para sistemas de ficheros de DVD y algunos CD-Rom), nfs (para montados en red NFS), smbfs (para
compartir en red smb/cifs) y cifs (driver más reciente para compartir en red smb/cifs)… Se admiten
muchos otros y, si omitimos el parámetro, se intentará detectar el sistema de ficheros
automáticamente.
Montar por etiqueta o UUID: -L etiqueta y -U UUID indican que se debe montar el sistema de ficheros
con la etiqueta o el UUID especificados, respectivamente.
Opciones adicionales: -o permite añadir muchas opciones específicas del sistema de ficheros.
Dispositivo: es el nombre del fichero del dispositivo asociado a la partición o el dispositivo de disco;
este parámetro suele ser obligatorio, aunque se puede omitir en ciertas circunstancias.
Punto de montado: es el directorio al que se debe asociar el contenido del dispositivo, suele ser
obligatorio pero se puede omitir en ciertas circunstancias.
Linux suele hacer un buen trabajo de detección del tipo de sistema de ficheros y los parámetros por
defecto se suelen comportar razonablemente bien; sólo root puede ejecutar el comando mount,

Academy Xperts Bolivia 64


EX - LINUX EXPERTO EN LINUX. MODULO 1

pero si en el /etc/fstab se especifican las opciones user, users, u owner, un usuario normal podría
montar un sistema de ficheros indicando únicamente el dispositivo o el punto de montado, aunque
no podría indicar ambos.
Los dispositivos extraíbles se suelen montar de forma automática y, en los entornos GUI, se puede
abrir un explorador de archivos para el disco insertado. Para expulsar el disco, el usuario empleará
umount o una opción del entorno GUI del equipo.
El archivo /etc/mtab registra los sistemas de ficheros montados. Posee un formato similar a
/etc/fstab, pero no se trata de un fichero de configuración, podríamos examinarlo para determinar
qué sistemas de ficheros están montados (df es otro medio para conocer este dato).
Opciones de mount
Al añadir opciones específicas del sistema de ficheros, necesitaremos utilizar parámetros especiales
(a través de -o o en /etc/fstab). Algunas de estas opciones sólo tienen sentido en el fichero
/etc/fstab.

SIstemas de ficheros
Opción Descripción
soportados
Hace que se utilicen las opciones por defecto del sistema
defaults Todos de ficheros, se incluye principalmente en el fichero
/etc/fstab.
Usa el dispositivo de circuito cerrado, permite montar un
loop Todos
fichero como si se tratase de una partición de disco.
Monta o no monta el sistema de ficheros en tiempo de
auto o arranque o cuando root ejecuta e comando mount -a.
Todos
noauto Por defecto es auto pero la adecuada para los
dispositivos extraibles es noauto, se utiliza en /etc/fstab.
Permite o impide a los usuarios normales el sistema de
ficheros por defecto es nouser pero para los medios
user o extraibles es user, se utiliza en /etc/fstab y permite a los
Todos
nouser usuarios montar un disco escribiendo mount
/punto_de_montado y solo el usuario que lo monto
puede desmontarlo.
Es como users pero cualquier usuario puede desmontar
users Todos
un sistema de ficheros una vez montado.
Es similar a user pero el usuario debe ser el propietario
owner Todos
del fichero del dispositivo.
Cambia una o más opciones del montado sin desmontar
una partición explicitamente, se puede utilizar para
remount Todos
activar o desactivar el acceso en modo escritura a una
partición, por ejemplo.
Especifica un montado en modo solo lectura, es la
opción por defecto para algunos sistemas de ficheros en
ro Todos
los que el soporte no es particularmente fiable en modo
escritura.

Academy Xperts Bolivia 65


EX - LINUX EXPERTO EN LINUX. MODULO 1

Todos los sistemas de Especifica un montado en modo lectura/escritura, es la


rw ficheros de opción por defecto para la mayoría de los sistemas de
lectura/escritura ficheros de lectura/escritura.
La mayoría de los
sistemas de ficheros
Define el propietario de todos los ficheros (se puede
que no soportan
uid=valor consultar las ID de usuarios de Linux en el
permisos de tipo
fichero /etc/passwd).
UNIX (vfat, hpfs, ntfs
y hfs)
La mayoría de los
sistemas de ficheros
que no soportan Define el grupo de todos los ficheros (Se pueden
gid=valor
permisos de tipo consultar las ID de grupo en el fichero /etc/group).
UNIX (vfat, hpfs, ntfs
y hfs)
Define el valor umask para los permisos de ficheros.
La mayoría de los
El valor se interpreta en binario como los bits a eliminar
sistemas de ficheros
de los permisos de los ficheros. Por ejemplo, umask=027
que no soportan
umask=valor asigna unos permisos de 750 o -rwxr-x—. Si se utiliza
permisos de tipo
junto a uid=valor y gid=valor, esta opción permite
UNIX (vfat, hpfs, ntfs
controlar quien puede acceder a los ficheros de FAT,
y hfs)
HPFS y muchos otros sistemas de ficheros ajenos.
La mayoría de los
sistemas de ficheros
que no soportan Similar a umask, pero define el valor solo para los
dmask=valor
permisos de tipo directorios, no para los ficheros.
UNIX (vfat, hpfs, ntfs
y hfs)
La mayoría de los
sistemas de ficheros
que no soportan Similar a umask, pero define el valor solo para los
fmask=valor
permisos de tipo ficheros, no para los directorios.
UNIX (vfat, hpfs, ntfs
y hfs)
La mayoría de los
Si el código es b o binary, linux no modificara el
sistemas de ficheros
contenido de los ficheros. Si el código es t o text
que no soportan
conc=código linux convertirá automáticamente los ficheros de linux
permisos de tipo
en ficheros con los caracteres de fin de linea de DOS o
UNIX (vfat, hpfs, ntfs
Macintosh.
y hfs)
Desactiva las extensiones rock ridge para los CD-ROM
norock iso9660
ISO-9660.

Academy Xperts Bolivia 66


EX - LINUX EXPERTO EN LINUX. MODULO 1

Desactiva las extensiones joliet para los CD-ROM ISO-


nojoliet iso9660
9660.

Para buscar información sobre opciones adicionales que soportan los sistemas de ficheros,
consultaremos la página MAN de mount o la documentación de los sistemas de ficheros que se
encuentra en /usr/src/linux/Documentation/filesystems o /usr/src/linux/fs/nombrefs (nombrefs es
el nombre del sistema de ficheros).

• Uso de umount

El comando umount es más sencillo que mount; la sintaxis básica de umount es la siguiente:

# umount [-afnrv] [-t tipofs] [dispositivo|punto_de_montado]

La mayoría de los parámetros son similares a los de mount, pero hay excepciones:

Desmontar todos: -a hace que el sistema intente desmontar todas las particiones /etc/mtab (es el
fichero que contiene los sistemas de ficheros montados). Si el sistema se ejecuta con normalidad,
esta operación sólo tendrá un éxito parcial, ya que no podrá desmontar algunos sistemas de ficheros
clave, como la partición raíz (/).
Forzar el desmontado: -f fuerza una operación de desmontado que fallaría en condiciones normales:
es útil cuando se desmontan servicios compartidos por servidores NFS que han quedado fuera de
alcance.
Pasar a modo sólo lectura: -r indica que si no se puede desmontar un sistema de ficheros, se debe
volver a intentar montar éste en modo sólo lectura.
Desmontar particiones de un tipo específico de sistema de ficheros: -t tipofs indica que se
desmonten sólo las particiones del tipo especificado; se pueden indicar varios tipos de sistema de
ficheros separándolos con comas.
El dispositivo y el punto de montado: sólo debemos especificar uno de ellos, no los dos.
Para que los usuarios normales puedan utilizar umount, la partición o el dispositivo deben estar
listados en /etc/fstab, con la opción user, users u owned especificada; estas opciones son más útiles
con los dispositivos extraíbles.
No debemos extraer un medio externo sin desmontarlo previamente con el comando umount o con
las herramientas GUI, ya que Linux guarda en caché el acceso a la mayoría de sistemas de ficheros,
lo que significa que puede que los datos no se escriban en disco hasta pasado un cierto tiempo tras
escribir el comando de escritura. El medio extraíble no debe tener muestras de indicadores de
actividad si queremos retirarlo.
Montar sistemas de ficheros de manera permanente
El fichero /etc/fstab controla cómo proporciona Linux acceso a las particiones de disco y a los
dispositivos extraíbles. En Linux, cada dispositivo de disco (partición o disco extraíble) se monta en
un punto en particular del árbol de directorios. El fichero /etc/fstab describe cómo se disponen estos
sistemas de ficheros. El contenido del fichero consiste en una serie de líneas que contienen seis
campos cada una. Cada campo está separado por uno o más espacios o tabulaciones y las líneas que
comienzan por almohadilla (#) son comentarios y se ignoran. El significado de cada campo es el
siguiente:
Dispositivo: es la primera columna y suele contener los nombres de fichero de dispositivo o,
actualmente, en la mayoría de las distribuciones se especifica el UUID o las etiquetas. Este método

Academy Xperts Bolivia 67


EX - LINUX EXPERTO EN LINUX. MODULO 1

ayuda a reducir los problemas en caso de que cambien los números de partición. También es posible
listar un dispositivo de red, como en server:/home, que es la exportación de /home en el ordenador
llamado server o //winsrv/shr que es el shr compartido en el servidor Windows o SAMBA llamado
winsrv.
Punto de montado: es la segunda columna donde se especifica dónde se montará la partición o el
disco, que normalmente es un directorio vacío.
Tipo de sistema de ficheros: es la tercera columna, es el mismo código de tipo que utiliza umount,
un valor auto para este código permite al kernel detectar automáticamente el tipo de sistema de
ficheros. Es muy cómodo para los dispositivos extraíbles, sin embargo, no funciona en todos los
sistemas de ficheros.
Opciones de montado: es la cuarta columna y permite especificar opciones que modifican el modo
en que el kernel trata al sistema de ficheros. Se pueden especificar varias opciones separadas por
coma, opciones de montado que son las mismas que para el comando mount.
Copia de seguridad: el quinto campo contiene un “1” si la utilidad dump debe hacer una copia de
seguridad de la partición o un “0 (cero)” en caso contrario. Si no se utiliza la opción dump para copias
de seguridad, esta opción carece de sentido, pero está incluida, ya que dump era una herramienta
habitual.
Orden de revisión del sistema de ficheros: la sexta columna indica que se debe emplear el programa
fsck para revisar la integridad del sistema de ficheros durante el inicio. Se puede especificar el orden
de la revisión: 1 para la de más prioridad, y 2 para las que se revisan a continuación. El valor 0 (cero)
significa que no se debe revisar el sistema de ficheros, algo util para sistemas de ficheros como
ReiserFS.
Si añadimos un nuevo disco duro o tenemos que volver a particionar uno que ya tenemos, es
probable que necesitemos modificar /etc/fstab. También puede que necesitemos modificar algunas
opciones. Si queremos darle a los usuarios normales la capacidad de montar determinadas
particiones o dispositivos extraíbles, crearemos una entrada normal en /etc/fstab, asegurándonos
de añadir las opciones user, users u owner.
Como ocurre con cualquier otro sistema de ficheros, se deben proporcionar los puntos de montado
para los dispositivos que puede montar el usuario. Los medios extraíbles se suelen montar en /mnt
o /media.
La mayoría de los recursos compartidos de smb/cifs requieren un nombre de usuario y contraseña
como medio de control de acceso. Para solucionar esto, usaremos las opciones username=nombre
y password=contraseña. Estas opciones no son recomendables, ya que dejan al descubierto la
contraseña, que cualquiera puede leer en /etc/fstab. La opción credentials=fichero ofrece una
alternativa, ya que podemos hacer que Linux apunte a un fichero que contenga el nombre y la
contraseña y darle permisos para que sólo pueda leerlo root y quiza el usuario de smb/cifs.

• Administrar cuotas de disco

Un único usuario puede causar problemas en un entorno multiusuario al consumir demasiado


espacio en un disco e impidiendo a otros usuarios que puedan crear ficheros. Para solucionar esto,
en Linux se incluyen las cuotas de disco, que son límites que implementa el SO sobre del número de
ficheros o la cantidad de espacio de disco que puede consumir un usuario. El sistema de cuotas se
puede fijar para usuarios individuales o para grupos.

• Activar el soporte para cuotas

Academy Xperts Bolivia 68


EX - LINUX EXPERTO EN LINUX. MODULO 1

Las cuotas requieren soporte tanto en el kernel, para el sistema de ficheros utilizado, como en varias
utilidades del espacio de usuario. ext2fs, ext3fs, ReiserFS, JFS y XFS admiten cuotas. Se debe activar
explícitamente el soporte en el kernel mediante la opción quota support, que en la mayoría de las
distribuciones viene con este soporte precompilado.

Hay dos sistemas de soporte para cuotas: el del kernel 2.4.x, que se conoce como soporte quota v1
y el del kernel 2.6.x, que se conoce como sistema quota v2. Fuera del kernel, necesitaremos
herramientas de soporte para ampliar cuotas: para el sistema quota v2 el paquete se suele
denominar quota e instala varias utilidades, ficheros de configuración, scripts de inicio sys v, etc.

Para emplear las cuotas se deben activar en las entradas de /etc/fstab; más concretamente,
utilizaremos la opción usrquota para emplear cuotas de usuario y la opción grpquota para las cuotas
de grupo. Las entradas configuradas presentan un aspecto parecido al siguiente:

/dev/hdc5 /home ext3 usrquota,grpquota 1 1

Dependiendo de la distribución, puede que sea necesario configurar los scripts de inicio del paquete
quota para que se ejecute al inicio del sistema. Para activar el soporte de cuotas una vez instalado
el paquete quota, ejecutaremos el comando quotaon.

Una vez instalado el software y realizados los cambios en el fichero de configuración, se debe activar
el sistema de quotas reiniciando el sistema si hemos compilado el kernel a mano; en caso contrario,
debería bastar con modprobe para instalar el modulo del kernel, tras lo que será necesario volver a
montar los sistemas de ficheros en los que se hallan activadas las cuotas, escribiendo mount -o
remount /punto-montado.

• Definir las cuotas de los usuarios

Para establecer las cuotas después de activarlas, se puede hacer utilizando edquota, que inicia el
editor vi con un fichero de configuración temporal (/etc/quotatab) que controla las cuotas para el
usuario especificado. Cuando cerremos la utilidad edquota, se escribirá la información de las cuotas
de disco en las estructuras de datos de bajo nivel del disco. El comando edquota se emplea seguido
del nombre de usuario del que queremos editar las cuotas.

/etc/quotatab informa sobre el número de bloques de disco en uso y el número de nodos índice
(inodos) en uso. Un número límite de nodos índice es el límite del número de ficheros de los que
puede ser propietario un usuario, mientras que el tamaño de bloques de un disco varía dependiendo
del tipo de sistema de ficheros y las opciones de creación de éste. Se pueden alterar los límites
flexible (soft limit) y estricto (hard limit) tanto para bloques como para nodos índice.

Límite estricto (hard limit): es el número máximo de bloques o nodos índice que puede consumir el
usuario; el kernel no permitirá sobrepasar estos límites.
Límite flexible (soft limit): son menos restrictivos y los usuarios pueden exceder temporalmente
estos valores durante el tiempo de gracia; el sistema emitirá avisos y cuando se termine este tiempo
y no le permitirá crear más ficheros. El periodo de gracia se define con la opción -t del comando
edquota para todo el sistema de ficheros, no para cada usuario.
Otros comandos útiles son:

Academy Xperts Bolivia 69


EX - LINUX EXPERTO EN LINUX. MODULO 1

quotacheck: verifica y actualiza la información de la cuota en los discos con cuota activada. Se
ejecuta normalmente como parte del script de inicio, pero se puede ejecutar periódicamente como
una tarea cron. También se encarga de asegurar que la contabilidad de las cuotas sea la adecuada.
repquota: resume la información de las cuotas del sistema de ficheros especificado o de todos los
sistemas de ficheros con la opción -a. Es una herramienta útil para seguir la pista del uso de disco.
La herramienta quota recibe opciones que modifican su salida, como por ejemplo -g, que muestra
las quotas de grupo; -l, que omite los montados NFS; y -q, que limita la salida a los sistemas de
ficheros cuyo uso sobrepase el límite establecido.

• Administrar la propiedad y los permisos de los archivos


Administrar la propiedad de los ficheros

La seguridad de los ficheros reside en la propiedad y los permisos de éstos. La propiedad carece de
sentido sin permisos que hagan uso de ella, los permisos se basan en la asistencia de la propiedad.
La propiedad tiene 2 capas: cada fichero tiene un propietario individual y puede estar asociado a un
grupo. Ambos tipos de propiedad permiten ofrecer tres capas de permisos de acceso de control:
para el propietario, para el grupo y para todos los demás.

Interpretar la propiedad de los ficheros

Para conocer el propietario de un fichero usaremos el comando ls -l, que genera un listado largo
que incluye información sobre la propiedad y el permiso de los ficheros. En la mayoría de los casos,
los nombres de usuario asociados a los ficheros son los mismos que los nombres con los que éstos
acceden. Algunos servidores tienen cuentas propias y pueden ser propietarios de ficheros
específicos del servidor. Si borramos una cuenta, los ficheros de ésta no se perderán, pero sí el
nombre de la cuenta.

Cambiar el propietario de un fichero

El superusuario (root) puede cambiar el propietario de un fichero mediante el comando chown, cuya
sintaxis es la siguiente:

# chown [opciones] [nuevo_propietario] [:nuevo_grupo] nombres_ficheros

Nuevo propietario y nuevo grupo son el nuevo propietario y el nuevo grupo del fichero, se pueden
proporcionar ambos pero sólo se puede omitir uno de ellos. chown admite muchas opciones, pero
la más recursiva es -R o –recursive, que permite cambiar de propiedad un árbol de directorios
completo. Sólo root puede utilizar el comando chown; si trata de utilizarlo un usuario normal,
devolverá un mensaje de error.

Cambiar el grupo de un fichero

El comando chgrp cambia el grupo de un fichero, lo pueden ejecutar tanto root como los usuarios
normales. Los usuarios sólo pueden cambiar el grupo de un fichero por un grupo al que pertenezcan.
Su sintaxis es la siguiente:

chgrp [opciones] nuevo_grupo nombres_ficheros

Academy Xperts Bolivia 70


EX - LINUX EXPERTO EN LINUX. MODULO 1

Este comando acepta muchas opciones, entre las que se incluyen -R o –recursive. Esta herramienta
es un subconjunto de funcionalidades de chown, pero la pueden utilizar los usuarios normales.

Controlar el acceso a ficheros

El sistema de permisos Linux es moderadamente complejo, el grueso de la complejidad de la


propiedad y los permisos de los ficheros reside en los permisos finales.

Conocer los permisos

Son bastante complejos y, además de proporcionar acceso a los ficheros, también existen algunos
bits de permisos especiales que ofrecen unas funcionalidades poco habituales.

El significado de los bits de permisos

Esta cadena -rwxr-xr-x tiene diez caracteres de largo, el primer caracter es el código de tipo de
fichero y determina cómo interpretará Linux el fichero. La siguiente tabla resume los códigos de tipo
de linux:

Código Significado

– Fichero de datos normales (texto, ejecutables, gráficos, datos comprimidos, etc)


d directorio, son ficheros como otros cualesquiera, pero contienen nombres de fichero y
punteros a los nodos índice del disco.
l Enlace simbólico, contiene el nombre de otro fichero o directorio y cuando se accede al
enlace simbólico, linux intenta leer el fichero enlazado.
p Un pipe con nombre, permite comunicarse entre sí a dos programas en ejecución. Uno abre
el fichero para lectura y el otro para escritura, lo que permite transferir daos entre los programas.
s socket, es similar a un pipe con nombre, pero permite enlaces de red y bidireccionales.
b Dispositivo de bloque, fichero que corresponde a un dispositivo de hardware, hacia y desde
el que transferir información en bloques de más de un byte (discos duros, disquetes, CDROM, etc)
c Dispositivo de caracteres, fichero que se corresponde a un dispositivo de hardware hacia y
desde el que transferir los datos en unidades de un byte (puerto paralelo, RS-232 serie, etc)
Los restantes caracteres de la cadena se dividen en 3 grupos de 3 caracteres. El primer grupo,
controla el acceso al fichero del propietario, el segundo grupo controla el acceso del grupo y el
tercero controla los accesos de todos los demás usuarios. En cada uno de los tres caracteres, la
cadena de permisos determina la presencia o ausencia de cada uno de los tres tipos de acceso:
lectura, escritura y ejecución. Si se incluye el permiso de ejecución, el fichero se podrá ejecutar como
un programa; definir el bit de ejecución en un fichero que no es un programa, no tiene ningún tipo
de consecuencia. Si en la cadena de permisos aparece un guion (-), quiere decir que el permiso está
ausente. La presencia del permiso se indica con una r para lectura, un w para la escritura y una x
para la ejecución.
Por tanto, la cadena de permisos rwxr-xr-x significa que tanto el propietario del fichero como los
miembros de su grupo y todos los demás usuarios pueden leer y ejecutar el fichero, pero sólo su
propietario tiene permisos de escritura sobre él.

Academy Xperts Bolivia 71


EX - LINUX EXPERTO EN LINUX. MODULO 1

Linux codifica en formato binario la información de los permisos, que se puede expresar como un
único número de 9 bits. Este número se suele expresar en formato octal (base 8) debido a que un
número en base 3 tiene 3 bits de longitud, lo que significa que la representación en base 8 de una
cadena de permisos tiene 3 dígitos de longitud que corresponden al propietario, el grupo y los
permisos globales. Los permisos de lectura, escritura y ejecución se corresponden con cada uno de
los bits. El resultado es que se pueden determinar los permisos añadiendo número en base 8.

Cadena de
Código octal Significado
permisos

Permisos de lectura, escritura y ejecución para todos los


rwxrwxrwx 777
usuarios

Permisos de lectura y ejecución para todos los usuarios, el


rwxr-xr-x 755
propietario también tiene permisos de escritura

Permisos de lectura y ejecución para el propietario y el grupo,


rwxr-x— 750 permisos de escritura para el propietario y sin acceso al fichero
para todos los demás

Permisos de lectura, escritura y ejecución para el propietario,


rwx—— 700
los demás no tendrán acceso.

Permisos de lectura y escritura para todos los usuarios, nadie


rw-rw-rw- 666
tiene permiso de ejecución.

Permisos de lectura y escritura para el propietario y el grupo y


rw-rw-r– 664
de solo lectura para el resto

Academy Xperts Bolivia 72


EX - LINUX EXPERTO EN LINUX. MODULO 1

Permisos de lectura y escritura para el propietario y el grupo, y


rw-rw—- 660
no hay permisos para el resto de usuarios

Permisos de lectura y escritura para el propietario, permisos de


rw-r–r– 644
solo lectura para el resto

Permisos de lectura y escritura para el propietario y de solo


rw-r—– 640
lectura para el grupo, no hay permisos para los demás

Permisos de lectura y escritura para el propietario y nadie más


rw——- 600
tiene permisos

Permiso de lectura para el propietario y nadie mas tiene


r——– 400
permisos

El permiso de ejecución tiene sentido para los ficheros normales, pero no para el resto. Los
directorios utilizan el bit de ejecución de otra manera: si está definido significa que se puede buscar
en el contenido del directorio. Por eso, es difícil ver un directorio en el que el bit de ejecución no se
defina junto al de lectura. Si a un usuario se le da permiso para escribir en un directorio, este usuario
podrá crear, borrar o renombrar los ficheros del directorio aunque no sea el propietario de los
ficheros y no tenga permisos para escribir en ellos. Los enlaces simbólicos siempre tienen permisos
777, sin embargo, este acceso se aplica sólo al propio fichero del enlace y no al fichero enlazado. En
cambio, los permisos del enlace de referencia afectan al fichero enlazado.

La mayoría de las reglas de permisos no se aplican a root, por lo que puede leer o escribir en
cualquier fichero del ordenador, incluso en aquellos que tienen permisos 000, ya que root puede
cambiar los permisos de cualquier fichero. Hay algunos ficheros que pueden ser inaccesibles para
root, pero sólo porque existe una restricción subyacente, como por ejemplo que un disco duro no
esté instalado en el ordenador.

• bits de permisos especiales

Existen unas cuantas opciones más para permisos que se pueden indicar mediante cambios en la
cadena de permisos:

Definir la ID de usuario (SUID): la opción set user id (suid) se utiliza junto a los ficheros ejecutables
e indica a Linux que ejecute el programa con los permisos del propietario del sistema, en lugar de
con los permisos del usuario que ejecuta el programa. Esto quiere decir que, si se define el bit suid
para un programa y root es propietario de este, cualquier usuario que ejecute el programa lo hará
con los privilegios de root. Los programas suid están indicados por una “s” en la posición del bit de
ejecución del propietario, como en rwsr-xr-x.

Definir la ID de grupo (SGID): la opción set group id (SGID) asigna el grupo del programa en
ejecución como grupo del fichero. Está indicado mediante una “s” en la posición del bit de

Academy Xperts Bolivia 73


EX - LINUX EXPERTO EN LINUX. MODULO 1

ejecución del grupo, como en, rwxr-sr-x. Si se define este bit en un directorio, los nuevos ficheros
o subdirectorios creados en él, heredarán el grupo propietario del directorio y no del usuario que
lo creó.

sticky bit: ha cambiado de significado a lo largo de la historia. En las implementaciones más


modernas de Linux, se utiliza para evitar que los ficheros puedan ser borrados por usuarios que no
son sus propietarios. Si se define este bit en un directorio, sólo podrán borrar sus ficheros los
propietarios de ellos, el propietario del directorio o root. Este bit viene indicado por una “t” en la
posición del bit de ejecución de los permisos generales, como en rwxr-xr-t.

Todos estos bits de permisos especiales, sobre todo los programas suid, sgid y, en especial, suid
root, suponen riesgos potenciales para la seguridad. Algunos programas deben tener definido el
bit suid para funcionar correctamente, algo que no deberíamos hacer a menos que tengamos la
certeza de que es absolutamente necesario.

• Uso de ACL

Una lista de control de acceso (ACL) es una lista de usuarios o grupos y los permisos que tienen
asignados. Al igual que los permisos de propietarios, de grupo y globales, las ACL constan de 3 bits
para permisos de lectura, escritura y ejecución, el propietario del fichero puede asignar ACL a un
número arbitrario de usuarios y grupos, haciéndolas más flexibles que los permisos de Linux, que
están limitados a los grupos definidos por el administrador.

Actualmente, todos los sistemas de ficheros principales de Linux soportan ACL. Las ACL poseen sus
propios comandos para definirlas y visualizarlas. setfacl define una ACL y el comando getfacl
muestra la ACL de un fichero.

• Cambiar el modo de un fichero

Con el comando chmod se pueden modificar los permisos de un fichero. Este comando se puede
ejecutar de varios modos para obtener el mismo efecto. Su sintaxis es:

chmod [opciones] [modo[,modo…]] nombre_fichero…

La opción –recursive o -R modifica los permisos de un árbol de directorios. Se puede especificar el


modo de dos formas básicas: con un número en octal o con un modo simbólico, que es un conjunto
de códigos relacionados con la representación en cadena de los permisos.

chmod 644 report.txt

Además de modificar los 3 dígitos de permisos del archivo, si al comando anterior se le añade un
cuarto bit al principio, se pueden definir permisos especiales: si añado un 4, definiremos el bit de la
ID de usuario (SUID); si añado un 2, definiremos la ID de grupo (SGID); y si añado un uno, definiremos
el sticky bit. Si omitimos el primer dígito como en el ejemplo anterior, Linux tomará los 3 bits como
bits para permisos y no como bits para permisos especiales.

El modo simbólico consta de tres componentes: un código que indica el conjunto de permisos que
deseamos modificar, un símbolo que indica si deseamos añadir, borrar o definir el modo del valor

Academy Xperts Bolivia 74


EX - LINUX EXPERTO EN LINUX. MODULO 1

indicado y un código que especifica cuál debería ser el permiso. Estos códigos distinguen entre
mayúsculas y minúsculas:

Permisos
Código del Código de
para
conjunto de Significado tipo de Significado Significado
modificar el
permisos cambio
código

u propietario + añadir r lectura

g grupo – eliminar w escritura

definir igual
o global = x ejecución
que

ejecutar solo si el
fichero es un
a todos X directorio o tiene
permisos de
ejecución

s SUID o SGID

t sticky bit

permisos del
u propietario
existentes

permisos del grupo


g
existente

permisos globales
o
existentes

Para utilizar los parámetros de los permisos simbólicos, combinaremos uno o más códigos de la
primera columna con un símbolo de la tercera columna y uno o más códigos de la quinta columna.
Se pueden combinar varios parámetros, separándolos por comas:

Comando Permisos Iniciales Permisos Finales

chmod a+x program rw-r–r– rwxr-xr-x

Academy Xperts Bolivia 75


EX - LINUX EXPERTO EN LINUX. MODULO 1

chmod ug=rw report.txt r——– rw-rw—-

chmod o-rwx bigprogram rwxrwxr-x rwxrwx—

chmod g=u report.txt rw-r–r– rw-rw-r–

chmod g-w,o-rw report.txt rw-rw-rw- rw-r—–

• Definir el modo y el grupo por defecto

Cuando un usuario crea un fichero, por defecto, el propietario es el usuario que lo creó, y los
permisos por defecto los asigna el sistema. Estos permisos se pueden configurar y vienen definidos
por la máscara de usuario (umask), que se define con el comando umask. Como entrada, recibe un
valor octal que representa los bits a eliminar de los permisos 777 para los directros y los permisos
666 para los ficheros.

Valores de muestra de umask y sus efectos

umask ficheros creados directorios creados

000 666 (rw-rw-rw-) 777 (rwxrwxrwx)

002 664 (rw-rw-r–) 775 (rwxrwxr-x)

022 644 (rw-r–r–) 755 (rwxr-xr-x)

027 640 (rw-r—–) 750 (rwxr-x—)

077 600 (rw——-) 700 (rwx——)

277 400 (r——–) 500 (r-x——)

umask es una operación a nivel de bits; cualquier bit definido en la umask se elimina del permiso
final de los nuevos ficheros. Pero si un bit no está definido, su especificación en la umask no será
perjudicial. Los usuarios normales pueden introducir el comando umask para cambiar los permisos
de los nuevos ficheros que creen; root puede modificar la configuración de todos los usuarios en el
archivo /etc/profile. La definición en este archivo puede tener efecto o no, ya que puede ser
invalidada en otros puntos, como en los ficheros de configuración propios de los usuarios. La
mayoría de los sistemas Linux utilizan una umask por defecto de 002 o 022.

Para saber la umask actual, escribiremos umask sin parámetros y si le añadimos el parámetro -S la
obtendremos expresada simbólicamente en lugar de en forma octal. También podremos definir una

Academy Xperts Bolivia 76


EX - LINUX EXPERTO EN LINUX. MODULO 1

umask simbólicamente, como, por ejemplo, umask u=rwx, g=rx, o=rx, que es equivalente a umask
022.

Además de utilizar umask, los usuarios pueden cambiar su grupo por defecto nwegrp para crear
nuevos ficheros. Para esto, es necesario establecer un grupo diferente como grupo por defecto.
Para utilizar este comando, el usuario debe ser miembro del grupo especificado.

• Cambiar los atributos de los ficheros

Algunos sistemas de ficheros nativos de Linux admiten varios atributos que se pueden ajustar con
el comando chattr:

Sólo añadir: el atributo “a” establece el modo añadir, que desactiva el acceso de escritura al fichero,
excepto para añadir datos, es útil para evitar cambios accidentales o maliciosos en los ficheros que
recompilan datos.

Comprimir: el atributo “c” hace que el kernel comprima los datos escritos en el fichero de forma
automática y los descomprima cuando se vuelvan a leer.

Inmutabilidad: el modificador “i” hace que un fichero sea inmutable. Es un paso más allá que
desactivar el acceso de escritura al fichero, ya que con este atributo, no se podrá borrar, no se
podrán crear enlaces al fichero y éste no se podrá renombrar.

Respaldo de transacciones para los datos: el modificador “j” le dice al kernel que registre todos los
datos escritos en el fichero. Mejora la recuperabilidad de los datos escritos en el fichero después de
una caída del sistema, pero puede ralentizar el funcionamiento. No tiene efecto en los sistemas de
ficheros ext2.

Borrado seguro: cuando borramos un fichero, se elimina su entrada de directorio y su nodo índice
se marca como disponible para su reciclado. Los bloques de datos que componen el grueso del
fichero no se borran, el modificador “s” cambia este comportamiento, cuando se borra el fichero,
el kernel pone a cero sus bloques de datos, algo que es recomendable para los ficheros que
contienen datos sensibles.

No fusionar colas: la fusión de colas (tail-merging) es un proceso en el que se fusionan algunos datos
pequeños del final de los ficheros que no llenan un bloque completo con elementos similares de
otros ficheros. Esto implica un menor consumo de espacio en disco, sobre todo si se almacenan
muchos ficheros pequeños y no unos cuantos grandes. El modificado “t” desactiva este
comportamiento. Es útil cuando el sistema de ficheros debe ser leído por drivers que no son del
kernel, como, por ejemplo, el GRUB.

No actualizar el tiempo de acceso: el atributo “A” hará que Linux no actualice la marca temporal de
acceso cuando se accede a un fichero. Esto puede reducir la entrada/salida de disco, lo que es útil
para aumentar la duración de la batería de los portátiles.

Las opciones se definen empleando los símbolos de la resta (-), de suma (+) o de igualdad (=). El
primer símbolo elimina una opción de un conjunto existente, el segundo la añade y el tercero define
un conjunto preciso de opciones, sobrescribiendo las que ya existen. Para añadir un modificador a
un fichero, lo haremos de la siguiente forma:

Academy Xperts Bolivia 77


EX - LINUX EXPERTO EN LINUX. MODULO 1

chattr +i archivo

Si lo que deseamos es eliminar un modificador, lo haremos de la siguiente manera:

chattr -i archivo

• Crear y cambiar enlaces duros y simbólicos

Enlaces Simbólicos

Un enlace simbólico (enlace blando, o acceso directo) es un archivo especial que contiene un
nombre de camino. Así, los enlaces blandos pueden apuntar a ficheros en sistemas de ficheros
diferentes (posiblemente montados por NFS desde máquinas diferentes, unidades extraibles), y no
tienen por qué apuntar a ficheros que existan realmente.

Un enlace simbólico permite dar a un fichero el nombre de otro, pero no enlaza el fichero con un
inodo, es decir, en realidad lo que hacemos es enlazar directamente al nombre del fichero. Los
enlaces simbólicos son ampliamente usados para las librerías compartidas.

Para comprendelo mejor, un "enlace simbólico" no es más que una referencia (enlace) a una carpeta
(directorio) o fichero que está situado en un lugar físico distinto.

Crear enlaces simbólicos de directorios

La mejor forma de explicarlo es creando un enlace simbólico, pasemos a ello, el directorio publico
contiene varios documentos, y está localizado en /publico

Ahora vamos a crear un enlace simbólico en /home/pepe al directorio /publico

La forma de operar es la siguiente:

ln -s /origen /enlace-a-origen

Entonces podemos crear un enlace simbólico desde donde nos encontramos escribiendo la ruta
completa con el siguiente comando:

ln -s /publico/2015 /home/pepe/enlace-a-publico

o podemos ir al directorio donde deseamos crear el enlace

cd /home/pepe

ln -s /publico/2015 enlace-a-publico

Podemos comprobar los resultados por consola, si listamos veremos que el enlace tiene el carácter
l que lo identifica como enlace simbólico y se puede saber a que archivo están apuntando ya que se
muestra la ruta -->

ls -l /home/pepe/enlace-a-publico

Como se ve los bits de permisos en un enlace simbólico no se usan (siempre aparecen como
(rwxrwxrwx). En su lugar, los permisos del enlace simbólico son determinados por los permisos del
fichero o directorio apuntado.

Academy Xperts Bolivia 78


EX - LINUX EXPERTO EN LINUX. MODULO 1

Si intenta efectuar la orden chmod sobre el enlace simbólico recién creado, en realidad cambiará
los permisos del fichero al que apunta el enlace simbólico.

chmod 750 /home/pepe/enlace-a-publico

El comando anterior dará un mensaje de error, ya que el directorio 2015 no existe, esto significa
que ha podido crear un enlace simbólico al directorio aunque no exista.

Entonces nos disponemos a crear el directorio /publico/2015 con permisos 755

mkdir -m 755 /publico/2015

Y verificamos que se creó con los permisos asignados:

ls -dl /publico/2015

Repetimos el comando que nos dio error antes:

chmod 750 /home/pepe/enlace-a-publico

Ahora no obtuvimos el error por que el directorio existe, si listamos vemos que el enlace simbólico
mantiene sus permisos y que el directorio /publico/2015 fue el que cambio los permisos, de 755 a
750.

ls -l /home/pepe/enlace-a-publico

ls -dl /publico/2015

A continuación vamos a crear un archivo, haciendo uso del enlace simbólico al directorio 2013:

touch /home/pepe/enlace-a-publico/mifichero

Esto crea un archivo en enlace-a-publico llamado mifichero, pero la ubicación de este archivo es
/publico/2015 vamos a listar para verlo.

ls -l /publico/2015

El fichero se ha creado en realidad en /publico/2015

Debemos tener presente:

Academy Xperts Bolivia 79


EX - LINUX EXPERTO EN LINUX. MODULO 1

Hay que tener en cuenta, que si borramos el archivo o directorio origen, el enlace simbólico
permanece pero los datos desaparecen para siempre, pero si borramos el enlace simbólico no
borraremos el directorio o archivo real.

Es importante remarcar que si accedemos al directorio por el atajo y luego hacemos un cd ..


volveremos al directorio donde está el atajo y no al directorio superior.

Borrar enlaces simbólicos

Para eliminar un enlace tenemos dos posibles opciones:

unlink /home/pepe/enlace-a-publico

o podemos usar el conocido comando rm

rm /home/pepe/enlace-a-publico

Una vez que borramos el enlace simbólico comprobamos que el directorio al que estaba
apuntando aun existe.

ls -ld /publico/2015

Crear enlaces simbólicos de archivos

En el caso que quisiéramos crear un enlace simbólico al archivo tesis-grupal que está en el
directorio /publico lo hacemos con los siguientes comandos.

Creamos el archivo tesis-grupal

echo "Tesis sobre GNU/Linux" > /publico/tesis-grupal

Como sabemos podemos crear el enlace desde donde nos encontramos escribiendo la ruta
completa con el siguiente comando:

ln -s /publico/tesis-grupal /home/pepe/tesis-enlace-simbolico

o podemos ir al directorio donde deseamos crear el enlace y le asignamos el nombre tesis-enlace-


simbolico

cd /home/pepe

ln -s /publico/tesis-grupal tesis-enlace-simbolico

Y con el comando cat podemos ver que el enlace apunta hacia el archivo que creamos antes:

cat /home/pepe/tesis-enlace-simbolico

• Enlaces duros

Academy Xperts Bolivia 80


EX - LINUX EXPERTO EN LINUX. MODULO 1

Los enlaces duros lo que hacen es asociar dos o más ficheros compartiendo el mismo inodo. Esto
hace que cada enlace duro sea una copia exacta del resto de ficheros asociados, tanto de datos
como de permisos, propietario, etc. Esto implica también que cuando se realicen cambios en uno
de los enlaces o en el fichero este también se realizará en el resto de enlaces.

En sistemas GNU/Linux, los enlaces duros, tienen varias limitaciones. Una es que sólo se pueden
hacer enlaces duros a archivos, y no a directorios.

La segunda limitación es que no pueden expandirse a través de distintos sistemas de archivos. Esto
significa que no puede crear un enlace permanente desde /usr/bin/bash hacia /bin/bash si sus
directorios / y /usr pertenecen a distintos sistemas de archivos.

Vamos a crear un enlace duro al fichero "tesis-grupal" que antes usamos y veremos que
efectivamente comparten inodo y que los datos de propietario, grupo y permisos se mantienen
sincronizados:

ln /publico/tesis-grupal /home/pepe/tesis-enlace-duro

o podemos ir al directorio donde deseamos crear el enlace

cd /home/pepe

ln /publico/tesis-grupal tesis-enlace-duro

Luego listamos para analizar los resultados con ls -il

ls -il /publico/tesis-grupal

ls -il /home/pepe/tesis-enlace-duro

En la primera columna verificamos que tienen el mismo número de inodo y en la tercera se


especifica cuandos enlaces duros tiene el fichero, vamos a crear otro enlace y el numero se va a
incrementar.

ln /publico/tesis-grupal /home/pepe/tesis-enlace-duro2

o podemos ir al directorio donde deseamos crear el enlace

cd /home/pepe

ln /publico/tesis-grupal tesis-enlace-duro2

Luego listamos para analizar los resultados con ls -il

ls -il /publico/tesis-grupal

ls -il /home/pepe/tesis-enlace-duro

Academy Xperts Bolivia 81


EX - LINUX EXPERTO EN LINUX. MODULO 1

ls -il /home/pepe/tesis-enlace-duro2

Si editamos o modificamos un enlace duro veremos que también se modifican el resto de los
enlaces y en el archivo origen.

Por ejemplo vamos a agregar texto al enlace tesis-enlace-duro2 para comprobar como el cambio
afecta al archivo tesis-grupal y al otro enlace duro

echo "Cap. 1 Enlaces simbolicos" >> /home/pepe/tesis-enlace-duro

Y finalmente hacemos un cat a los archivos para verificar los resultados:

cat /publico/tesis-grupal

cat /home/pepe/tesis-enlace-duro

cat /home/pepe/tesis-enlace-duro2

y como podemos ver la edición al archivo tesis-enlace-duro también afecto al archivo tesis-grupal
y a tesis-enlace-duro2

Si queremos obtener más datos para comprobar que son iguales los 3 archivos podemos recurrir a
el comando stat

stat /publico/tesis-grupal

stat /home/pepe/tesis-enlace-duro

stat /home/pepe/tesis-enlace-duro2

Academy Xperts Bolivia 82


EX - LINUX EXPERTO EN LINUX. MODULO 1

En el caso de los enlaces duros si borras en archivo de origen no vamos a perder el fichero, ya que
los enlaces duros son una copia fiel de él.

• Borramos el archivo origen

rm /publico/tesis-grupal

el enlace duro funciona sin problemas

cat /home/pepe/tesis-enlace-duro

y vemos que existen dos enlaces duros todavía.

stat /home/pepe/tesis-enlace-duro

• Borrando enlaces duros

Igual que con los enlaces simbólicos podemos usar dos comandos para borrar los enlaces duros:

unlink /home/pepe/tesis-enlace-duro2

o podemos usar el conocido comando rm

Academy Xperts Bolivia 83


EX - LINUX EXPERTO EN LINUX. MODULO 1

rm /home/pepe/tesis-enlace-duro2

Con el comando anterior el único enlace duro que nos queda es el tesis-enlace-duro si lo
eliminamos ya perderíamos definitivamente el archivo, así que a no confundirse con este
concepto.

cat /home/pepe/tesis-enlace-duro

stat /home/pepe/tesis-enlace-duro

• Buscar archivos del sistema y colocar archivos en la ubicación correcta

Localizar ficheros

Linux proporciona varias herramientas para localizar ficheros que queremos utilizar; la primera de
ellas es un estándar para la localización de ficheros; la segunda incluye programas especializados
que buscan en un árbol de directorios o una base de datos.

FHS

La estructura de Linux es bastante sencilla y coherente, aunque los nuevos administradores pueden
confundirse, pues algunos directorios parecen estar preparados para fines similares o incluso
idénticos, pero, en realidad, poseen sutiles aunque importantes diferencias.

FSSTND y FHS

Las primeras distribuciones de Linux no siempre siguieron patrones idénticos, lo que derivó en una
gran confusión. Para evitar problemas, se tomaron varias medidas, entre ellas el desarrollo de
FSSTND (File system standard), que se publicó por primera vez a principios de 1994, FSSTND
estandarizó varias funcionalidades específicas:

Estandarizó los programas que se encontraban en /bin y /usr/bin. Este aspecto causaba problemas
cuando los scripts hacían referencia a los ficheros de una u otra ubicación.
Se especificó que los ficheros ejecutables no deberían estar en /etc, ubicación habitual hasta
entonces.
Eliminó los ficheros cambiales del árbol de directorios /usr, permitiendo así que este se montara en
modo sólo lectura.
Hacia 1995, las limitaciones de FSSTHD se hicieron evidentes y se desarrolló un nuevo estándar: FHS
(File system hierarchy standard – Estándar de jerarquía del sistema de ficheros) que se basó en

Academy Xperts Bolivia 84


EX - LINUX EXPERTO EN LINUX. MODULO 1

FSSTND, pero lo amplió sustancialmente; además, se desarrolló en colaboración con los


desarrolladores de algunos SO tipo UNIX diferentes a Linux. Por ese motivo, es más que un estándar
en Linux, ya que se puede emplear para definir la estructura de los ficheros de otro SO tipo UNIX.

FHS hace distinción entre ficheros compartibles y no compartibles. En el primer grupo encontramos
los ficheros de datos de los usuarios y los programas binarios, que se pueden compartir entre
ordenadores, algo que se realiza a través de un servidor NFS. Los ficheros no compartibles contienen
información específica del sistema, como los ficheros de configuración. Otra importante distinción
es la que se establece entre ficheros estáticos y ficheros variables: los primeros, normalmente, no
cambian, a no ser que intervenga directamente el administrador; los programas ejecutables son
ejemplos de ficheros estáticos. Los ficheros variables pueden ser cambiados por los usuarios; los
scripts automatizados, los servidores y similares, los directorios /home de los usuarios y las colas de
correo están compuestos por ficheros variables.

• Directorios importantes y sus contenidos

FHS define algunos directorios con mucha precisión. Los más comunes definidos por FHS, o
utilizados por convención, son los siguientes:
/: los sistemas de ficheros Linux tienen su raíz en un mismo directorio, conocido como sistema de
ficheros raíz o directorio raíz. Todos los demás directorios se ramifican desde este. Linux no utiliza
letras de unidad, sino que las particiones o discos extraibles se montan en un punto dentro del
sistema de ficheros raíz. Algunos directorios críticos deben residir siempre en la partición raíz, pero
otros pueden encontrarse en particiones independientes. No debemos confundir el directorio /root
con el directorio raíz.
/boot: contiene ficheros estáticos y no compartibles relacionados con el arranque del ordenador.
Algunos sistemas imponen limites particulares a /boot, por ejemplo, en BIOS antiguas y versiones
antiguas del LILO, pueden requerir que /boot se encuentre por debajo del cilindro 1024 del disco
duro. A veces, pero no siempre, puede que se requiera que /boot sea una partición independiente.
/bin: contiene algunos ficheros ejecutables, que son accesibles para todos los usuarios y constituyen
los comandos más importantes que pueden ejecutar los usuarios normales. Contiene ficheros
estáticos. Sus ficheros son compartibles, pero son tan importantes para el funcionamiento básico
del ordenador, que este directorio casi nunca se comparte. Cada cliente debe tener su directorio
/bin en local.
/sbin: es similar a /bin, pero contiene programas que sólo ejecuta el administrador. Es estático y, en
teoría, compartible, En la práctica, sin embargo, no tiene sentido compartirlo.
/lib: contiene bibliotecas de programa, que son código compartido por muchos programas y que se
almacenan en ficheros independientes, para ahorrar RAM y espacio en disco. /lib/modules contiene
módulos o drivers que se pueden cargar y descargar según necesitemos. Es estático y, teóricamente,
compartible, aunque en la práctica no se comparte.
/usr: aloja el grueso de los programas de un ordenador Linux. Tiene un contenido compartible y
estático, lo que permite montarlo en modo sólo lectura. Se puede compartir con otros sistemas
Linux; muchos administradores separan /usr en una partición independiente, aunque no es
necesario. Contiene algunos subdirectorios similares a los del directorio raíz como /usr/bin y
/usr/lib, que contienen programas y bibliotecas que no son totalmente críticos para el
funcionamiento del ordenador.
/usr/local: contiene subdirectorios que reflejan la organización de /usr. Aloja los ficheros que instala
localmente el administrador; es un área a salvo de las actualizaciones automáticas de todo el SO.

Academy Xperts Bolivia 85


EX - LINUX EXPERTO EN LINUX. MODULO 1

Después de la instalación de Linux, debería estar vacío, excepto para determinados subdirectorios
stub. Se suele separar en una partición para protegerlo de las reinstalaciones del SO.
/usr/X11R6: alberga los ficheros relacionados con el sistema X Window (entorno GUI). Contiene
subdirectorios similares a los de /usr, como /usr/X11R6/bin y /usr/X11R6/lib.
/opt: es similar a /usr/local, pero está pensado para los paquetes que no vienen con el SO, como los
procesadores de texto o juegos comerciales, que se guardan es sus propios subdirectorios. El
contenido de /opt es estático y compartible. Se suele separar en su propia partición para convertirlo
en un enlace simbólico a un subdirectorio de /usr/local.
/home: contiene los datos de los usuarios y es compartible y variable. Se considera opcional en FHS,
pero, en la práctica, lo opcional es el nombre. El directorio /home con mucha frecuencia reside en
su propia partición.
/root: es el directorio home del usuario root. Como la cuenta de root es tan crítica y específica del
sistema, este directorio variable no es realmente compartible.
/var: contiene ficheros efímeros de varios tipos, de registro del sistema, de cola de impresión, de
correo y news, etc. El contenido del directorio es variable, pues algunos subdirectorios son
compartibles y otros no. Se suele colocar /var en su propia partición, sobre todo si el sistema registra
una gran actividad en /var.
/tmp: es donde se crean los archivos temporales y variables que necesitan los programas. La
mayoría de las distribuciones limpian este directorio periódicamente en el inicio. Este directorio
raramente se comparte, pero se suele poner en una partición independiente, para que los procesos
no controlados no provoquen problemas en el sistema de ficheros al ocupar demasiado.
/mnt: la finalidad de este directorio es albergar el montaje de los dispositivos. En la estructura de
directorios, algunas distribuciones crean subdirectorios dentro de /mnt para que hagan de puntos
de montado; otras utilizan directamente /mnt o incluso puntos de montado independientes de
/mnt, como /floppy o /cdrom. FHS sólo menciona /mnt y no especifica cómo se ha de utilizar. Los
medios montados en esta partición pueden ser estáticos o variables y, por norma general, son
compartibles.
/media: es una parte opcional del FHS como /mnt, pero que podría contener subdirectorios para
tipos de medio específicos. Muchas distribuciones modernas utilizan subdirectorios /media como
punto de montado para los discos extraíbles e
/dev: Linux trata la mayoría de los dispositivos de hardware como si fueran ficheros, el SO debe
tener un lugar para estos en su sistema de ficheros. Ese sitio es el directorio /dev, que contiene un
gran número de ficheros que hacen de interfaces de hardware. Con los permisos apropiados,
podremos acceder al hardware del dispositivo leyendo y escribiendo en el fichero de dispositivo
asociado. El kernel permite que /dev, sea un sistema de ficheros virtual, creado automáticamente.

El kernel y las herramientas de soporte crean sobre la marcha entradas en /dev para adaptarse a las
necesidades de los drivers específicos. La mayoría de las distribuciones emplean este recurso.
/proc: es un directorio inusual, pues no corresponde a un directorio o partición normal, sino que se
trata de un sistema de ficheros virtual que proporciona acceso a ciertos tipos de información del
hardware dinámicamente. Esta información no se encuentra accesible a través de /dev.

En la administración de Linux, conocer la finalidad de los directorios resulta tremendamente útil, ya


que, si instalamos en una ubicación equivocada por ejemplo, un programa, un binario colocado en
/bin cuando debería estar en /usr/local/bin, puede que se sobrescriba o elimine al realizar una
actualización del sistema.

Academy Xperts Bolivia 86


EX - LINUX EXPERTO EN LINUX. MODULO 1

• Herramientas para localizar ficheros

Lo más habitual para localizar ficheros es hacerlo por su nombre, pero, a veces, se pueden seguir
otros criterios, como la fecha de modificación. Los comandos de localización de ficheros de Linux
pueden buscar en un árbol de directorios un fichero que coincida con el criterio especificado, incluso
podrían rastrear el sistema completo.

• El comando find

find implementa un sistema de fuerza bruta para localizar ficheros: realiza una búsqueda por todo
el árbol de directorios especificado para localizar los que satisfagan el criterio especificado. find
tiende a ser lento, pero es flexible y tiene una mayor probabilidad de éxito.
find [ruta…] [expresión…]
Se le pueden especificar una o más rutas para restringir sus operaciones. La expresión es un modo
de especificar lo que queremos buscar; las expresiones más comunes permiten buscar por varios
criterios:
Buscar por nombre de fichero: utilizando la expresión –nombre patrón, encontraremos los ficheros
que coincidan con el patrón especificado. Se pueden emplear comodines delimitando el patrón
entre comillas.
Buscar por el modo de permiso: la expresión –perm modo permite localizar ficheros que tengan
ciertos permisos. El modo se puede expresar simbólicamente o en modo octal si va precedido de un
mas (+). find localizará los ficheros en los que estén definidos todos los bits de permisos
especificados.

Buscar por el tamaño del fichero: se puede realizar una búsqueda de un fichero de un tamaño
determinado con la expresión –size n, donde “n” especifica en bloques de 512 bytes (se puede
modificar con una letra que sirva de código para el valor, por ejemplo, k para kilobytes).
Buscar por grupo: la expresión –gid GID, busca los ficheros cuya ID de grupo es GID. La opción –
group nombre localiza ficheros cuyo grupo tiene el nombre indicado. Esta última opción suele ser
más fácil de utilizar, pero la primera es útil en caso de que la GID se haya quedado huérfana y no
tenga nombre.

Buscar por ID de usuario: –uid UID busca los ficheros cuyo propietario tiene UID como ID de usuario.
–user nombre busca los ficheros cuyo propietario es nombre. Esta última opción suele ser más fácil
de utilizar, pero la primera es útil en caso de que la UID se haya quedado huérfana y no tenga
nombre.

Restringir la profundidad de la búsqueda: si deseamos limitar el número de subdirectorios en los


que buscar, emplearemos la expresión –maxdepth niveles.
find tiene muchas variantes y opciones adicionales, pero, por ejemplo, si deseamos localizar todos
los ficheros fuente en código #C con nombres que normalmente acaban en .c y se encuentran en el
directorio home, lo haremos de la siguiente manera:
find /home -name “*.c”
Lo que nos devolverá todos los ficheros que coincidan con el criterio de búsqueda. Los usuarios
normales pueden utilizar find, pero si carecen de permisos para listar el contenido de un directorio,
find devolverá un error junto con el nombre del directorio.

Academy Xperts Bolivia 87


EX - LINUX EXPERTO EN LINUX. MODULO 1

• El comando locate

Esta utilidad funciona de forma similar a find, pero difiere en dos aspectos importantes:
Es mucho menos sofisticado en sus opciones de búsqueda; se utiliza para buscar por el nombre de
fichero, con lo que el programa devuelve todos los ficheros que contienen la cadena especificada.
Trabaja con una base de datos que se encarga de mantener. Normalmente, se incluye una tarea
cron que llama a locate para que actualice su base de datos periódicamente. El comando updatedb
sirve para actualizar la base de datos manualmente. Es importante que se mantenga actualizada, ya
que, en caso contrario, al realizar las búsquedas, puede que nos devuelva nombres de ficheros que
ya no existan o que no localice ficheros recientes.
Al trabajar con una base de datos, normalmente es más rápido que find, sobre todo en las
búsquedas por todo el sistema. También es probable que devuelva muchas falsas alarmas,
especialmente si deseamos localizar un fichero con un nombre corto. Algunas distribuciones utilizan
slocate en vez de locate, que incluye características de seguridad que impiden que los usuarios vean
los nombres de los ficheros o de los directorios a los que no tienen acceso. En la mayoría de los
sistemas con slocate, locate es un enlace a slocate. Algunas distribuciones no instalan locate ni
slocate.
• El comando whereis

Busca los ficheros en un conjunto restringido de localizaciones. Esta herramienta no busca en


directorios de usuario o muchos otros sitios, pero es un modo rápido de localizar ejecutables de
programas y ficheros relacionados, como ficheros de documentación o configuración. El programa
whereis devulve los nombres de fichero que comienzan por aquello que escribamos como criterio
de búsqueda, incluso los ficheros que contienen extensiones, con frecuencia suele hallar los ficheros
de configuración de /etc, paginas MAN y ficheros similares. Para localizar por ejemplo, el programa
“ls”, escribiremos:
whereis ls
ls: /bin/ls /usr/share/man/man1/ls.1.bz2
Este resultado muestra el ejecutable ls y su página MAN, donde podremos consultar parámetros
para modificar el comportamiento de whereis.

• El comando which

Está considerado comando de búsqueda, pero es poco potente. Busca la ruta del comando escrito
y la lista completa, desde la primera coincidencia que encuentre. La opción -a permite buscar todas
las coincidencias.
Puede resultar útil, por ejemplo, para saber la ruta completa de un programa que se desee llamar
desde un script.

• El comando type

No es realmente un comando de búsqueda, sino que indica cómo será interpretado el comando que
escribamos: como un comando nativo, un comando externo, un alias, etc. Posee varias opciones
que modifican su comportamiento, por ejemplo, -t reduce la salida a los identificadores cortos,
builtin (nativo), file (fichero), alias u other (otro). -a devuelve una lista completa, mostrando, por
ejemplo, tanto la extensión del alias como la ubicación del ejecutable final, si le proporcionamos un
nombre de alias.

Academy Xperts Bolivia 88

También podría gustarte