Está en la página 1de 20

Estructuras Linux - Base de Conocimiento http://www.linuxparatodos.net/web/comunidad/base-de-...

Imprimir
Estructuras Linux « Volver a Inicio

Table of Contents [-]

1 SPARC VS. X86


2 EL SISTEMA DE JERARQUÍA DE FICHEROS
3 CODIFICACIÓN LITTLE-ENDIAN VS BIG-ENDIAN
3.1 ALMACENAMIENTO DE DATOS DE APLICACIÓN
4 DIFERENCIA ENTRE COMPILADORES
4.1 CONSTRUCCIÓN DE APLICACIONES
5 EMPAQUETAMIENTO DE APLICACIONES
6 MANEJO DE DISPOSITIVOS
7 NIVELES DE EJECUCIÓN
7.1 Nivel de ejecución 0
7.2 Nivel de ejecución 1
7.3 Nivel de ejecución 2
7.4 Nivel de ejecución 3
7.5 Nivel de ejecución 4
7.6 Nivel de ejecución 5
7.7 Nivel de ejecución 6
8 LOS MANDATOS CHKCONFIG Y SERVICE
9 SHELL DE COMANDOS
9.1 Acceso a los parámetros
9.2 Matemáticas con enteros
9.3 Redirecciones de Entrada/Salida
9.4 Abre y cierra archivos
10 PROGRAMACIÓN DE TAREAS
11 CONFIGURACIÓN DE INTERFACES DE RED
11.1 Procedimientos
11.1.1 Detección y configuración del hardware
11.2 Asignación de parámetros de red
11.2.1 Nombre del anfitrión (HOSTNAME)
11.2.2 Dirección IP, máscara de subred y puerta de enlace
11.2.3 Servidores de nombres
11.2.4 Agregar encaminamientos (rutas) adicionales
11.2.5 Función de Reenvío de paquetes para IP versión 4
11.3 Alta de direcciones IP virtuales
12 GESTIÓN DE USUARIOS
12.1 Procedimientos
12.2 Creando una cuenta en el modo de texto: useradd y passwd
12.2.1 Lo primero: la orden useradd
12.2.2 Lo segundo: la orden passwd
12.2.3 Opciones avanzadas
12.3 Manejo de Grupos
12.3.1 Alta de grupos
12.3.2 Alta de grupos de sistema
12.3.3 Baja de grupos
13 SEGURIDAD POR PERMISOS
13.1 Comandos chroot, chown, chgrp
14 ¿QUE ES LSB?
15 INTRODUCCIÓN A LOS SISTEMAS GRÁFICOS
15.1 JDS, Gnome, KDE
15.1.1 Java Desktop System
15.1.2 Gnome
15.1.3 KDE

SPARC VS. X86#

Los procesadores sparc, así como los procesadores x86, son dos claros exponentes de las distintas concepciones que
se pueden obtener para la solución de problemas. Mientras que los procesadores x86 (llamados así por la
compatibilidad hacia atrás dentro de la misma familia de circuitos) son elaborados con respecto de las especificaciones
de arquitectura de juegos de instrucciones CISC (Complex Instruction Set Computer o Computadora con juego de
instrucciones complejo), los sparc se elaboran con respecto de las especificaciones RISC (Reduced Instruction Set

1 de 20 23/11/11 15:32
Estructuras Linux - Base de Conocimiento http://www.linuxparatodos.net/web/comunidad/base-de-...

Computer o Computadora con juego de instrucciones reducido) I y II.

Cada una de las arquitecturas de juego de instrucciones (ISA – Instruction Set Architecture) tiene ventajas y
desventajas, y dependerá del proveedor de la solución la determinación del uso de cualquiera de ellas con respecto a
sus análisis de prestaciones, desempeño, viabilidad, factibilidad o costos asociados a la implementación. Por ejemplo:
un procesador con tecnología RISC requiere de un menor juego de instrucciones para la ejecución de mandatos,
siendo una de las razones por la cual el desempeño de las aplicaciones elaboradas para esta plataforma sea muy
estable, pero ocasionando que muchos de los compiladores disponibles para ella no hagan uso pleno de las
capacidades del chip. Con los procesadores CISC obtenemos un juego de instrucciones amplisimo y, como en el caso
de la familia IA32 (x86), con compatibilidad hacia atrás para con procesadores mas viejos de 4, 8 y 16 bits, lo que nos
permite hacer uso de sistemas de legado (legacy) en procesadores actuales, pero así mismo obtenemos cierto
desperdicio en las capacidades propias de la circuitería. En la familia de procesadores IA64 (Itanium) se ofrecen
circuitos con mayores prestaciones, pero perdiendo la compatibilidad hacia atrás con otros productos.

Específicamente para los sistemas Sparc (32 y 64 bits), el sistema operativo suele ser Solaris de Sun, el cual
solamente encontrabamos disponible para esta arquitectura. Sin embargo, y atendiendo (y entendiendo) la demanda
del mercado informático, Sun libera, primero, su versión de Solaris 9 para arquitectura x86, permitiendo el uso de este
sistema de una manera mas amplia. Posteriormente, libera una parte de su código, surgiendo de esta manera el
sistema OpenSolaris para plataformas x86 y permitiendo con ello una gran retroalimentación por parte de la comunidad
de desarrolladores interesados en aportar su tecnología a esta plataforma abierta.

Red Hat, proveedor de sistemas GNU/Linux para el mercado corporativo, distribuye una versión comercial de
herramientas pública y libremente disponibles, pero añadiendo mejoras y compartiendo los resultados con el mismo
método. Linux es un sistema operativo por demás versátil, ya que su naturaleza modular permite incrustarlo en
diminutos circuitos.

(por ejemplo: relojes, circuitos de control), hardware de legado (por ejemplo: equipo viejo 80386, 80486), PDA's,
SmartPhones, ruteadores, equipos de alta disponibilidad, así como ser un sistema operativo que está disponible para
prácticamente cualquier arquitectura ISA actualmente (ARM, IA32, IA64, Sparc, Alpha, x86-64, por nombrar algunas).
En particular, Red Hat Enterprise Linux se encuentra disponible tanto para plataformas IA32, IA64, x86-64, así como
Sparc.

En cuestión de compatibilidad y conformidad con respecto de estándares, los sistemas Unix (y en particular Solaris)
cumplen completamente los requerimientos del estándar POSIX (Portable Operating System Interface – Interfaz de
Sistema Operativo Portable), mientras que las distribuciones Linux, que si bien no cumplen en su totalidad los
requerimientos de dicho estándar si los cubren ampliamente, logrando con ello un gran nivel de afinidad con respecto
de los comandos especificados en POSIX y que nos permite como usuarios obtener prácticamente los mismos
resultados con los mismos comandos en ambas plataformas. De manera análoga, el crecimiento que ha tenido Linux,
así como su gran adopción en entornos productivos, de escritorio y de desarrollo, ha ocasionado que haya sistemas
novedosos, o actualizaciones de viejos sistemas, que por sus características de funcionamiento impiden su directa
compilación y ejecución en entornos ajenos a los que fueron creados. Viendo esta peculiaridad, se desarrolla una
especificación de conformidad para aplicaciones Linux, llamada LSB (Linux Standar Base – Base Estándar Linux) que
viene a complementar lo ofrecido por POSIX. Las versiones de Unix, tanto comerciales como abiertas (BSD), que
adopten cierta compatibilidad con la LSB, permitirán la adopción de herramientas y aplicaciones desarrolladas para
Linux en un entorno de trabajo Unix. Solaris implementa LSB en su versión 2.0.

Con esto, una de las situaciones que podemos observar es la diversificación de tecnologías, mas que ofrecernos una
divergencia, nos están dando la capacidad de converger en un punto donde tanto la compatibilidad como la
interoperabilidad entre los distintos sistemas nos ofrecen un amplio espectro para la oferta de soluciones.

EL SISTEMA DE JERARQUÍA DE FICHEROS#

El Filesystem Hierarchy Standard (Estándar de Jerarquía de Sistema de Ficheros) o FHS define los directorios
principales y sus contenidos en el sistema operativo LinuxGNU/Linux y otros sistemas de la familia Unix. Se diseñó

2 de 20 23/11/11 15:32
Estructuras Linux - Base de Conocimiento http://www.linuxparatodos.net/web/comunidad/base-de-...

originalmente en 1994 para estandarizar el sistema de archivos de las distribuciones GNU/Linux, basándose en la
tradicional organización de directorios de los sistemas Unix. En 1995 se amplió el ámbito del estándar a cualquier Unix
que se adhiriese voluntariamente.

Todos los archivos y directorios aparecen bajo el directorio raíz /, aunque se encuentre en distintos dispositivos físicos.
Ejemplos de directorios definidos por FHS incluyen:

/bin/ Ordenes esenciales, binarios para todos los usuarios (cat, ls, cp...). /dev/ Dispositivos. /home/ Directorios de
datos de los usuarios. /etc/ Ficheros de configuración del sistema. /lib/ Librerías esenciales para los binarios de /bin y
/sbin. /var/ Ficheros variables utilizados por programas instaladas, como logs y archivos temporales. /opt/ Paquetes de
programas de aplicaciones estáticos. /sbin/ Binarios de superusuario esenciales (init, route, ifup..). /proc/ Sistema de
archivos que documenta el estado del núcleo (kernel), principalmente archivos de texto (tiempo, red...), estos archivos
permiten conocer y cambiar ciertos parámetros del núcleo sin necesidad de reiniciar el sistema. /media/ Sistemas de
archivos montados temporalmente. /mnt/ Sistemas de archivos montados temporalmente (obsoleto).

CODIFICACIÓN LITTLE-ENDIAN VS BIG-ENDIAN#

El término endianness (finalización) se refiere a la técnica adoptada para el ordenamiento de los bytes (y anteriormente, de bits) dentro de las distintas
localidades de memoria de un equipo de cálculo, a nivel físico (hardware). Esto ocasiona que el sistema operativo de dicho dispositivo tenga que asimilar
dicho método de ordenamiento para la ejecución, lectura y movimiento de la información dentro de los distintos elementos de almacenamiento del equipo.
Existen 3 técnicas de finalización, y la adopción de esta depende del análisis de requerimientos del fabricante. La
técnica de big-endian (el extremo mayor finaliza primero) acomoda los bytes dependiendo del tamaño de la palabra,
colocando en primera instancia la última palabra de la instrucción y, en última instancia, la primera palabra. Por
ejemplo, para ordenar la instrucción 0x666973676c656173 en un equipo con un tamaño de palabra de 32 bits mediante
big-endian, obtendremos:

... 0x61730x6c650x7367 0x6669...


incremento de localidades -->

Algunas arquitecturas de microprocesadores que utilizan este tipo de ordenamiento son los procesadores de Motorola,
PowerPC y Sparc (aún cuando para la versión 9 adopta la técnica mixed-endian). La técnica little-endian (también
denominado como el “formato Intel”) coloca las palabras de las instrucciones de modo incremental, sin modificar su
ordenamiento, simplificando en muchas ocasiones los accesos a pilas y localidades de memoria por parte de los
algoritmos y programas ensamblados. Para ejemplificar, la misma instrucción arriba utilizada:

... 0x66690x7367 0x6c65 0x6173...


incremento de localidades -->

La técnica de middle-endian, denominada tambien bi-endian o mixed-endian, es una mezcla de las dos anteriores,
combinando el posicionamiento en memoria de las palabras de instrucción o datos. Algunos procesadores que utilizan
este método de posicionamiento son los ARM, PowerPC (excepto el PPC970/G5), DEC Alpha, Sparc v9, MIPS,
PA-RISC y los IA64. El ordenamiento mediante middle-endian en la instrucción dada, con un tamaño de palabra de 32
bits posiciona, contando a partir del byte más significativo, el 2do byte primero, luego el 1ro, luego el 4to y finalmente el
3ro:

... 0x73670x6669 0x61730x6c65...


incremento de localidades -->

El uso de cada técnica es determinada por el fabricante de la arquitectura, siendo la elección tomada con respecto del
hardware.

ALMACENAMIENTO DE DATOS DE APLICACIÓN#

Sea cual fuere el método de finalización (endianness) proporcionado por la arquitectura, la lectura de los datos e instrucciones deberá ser transparente
para las aplicaciones ya que será el sistema operativo quien interactue con el hardware y proporcione la interfaz para la aplicación. De igual manera, el
sistema de archivos (filesystem) actuará de manera independiente al método de finalización proporcionado, siendo afectadas todas aquellas aplicaciones
que trabajen con datos en crudo (raw data), con las cuales se deberá tener cuidado en la migración de los datos implicados en la operación ya que
deberán sufrir una actualización de formato si es que se debiera cambiar método de finalización, aunque generalmente estos datos no son transferibles

3 de 20 23/11/11 15:32
Estructuras Linux - Base de Conocimiento http://www.linuxparatodos.net/web/comunidad/base-de-...

entre arquitecturas. Al utilizar un mismo sistema operativo (ya sea Sun Solaris o Red Hat Enterprise Linux) en cualquiera que sea la arquitectura, el acceso
a los datos deberá ser transparente para las aplicaciones que hagan uso de estos.

DIFERENCIA ENTRE COMPILADORES#

Cada plataforma tiene cierta predilección hacia el compilador o compiladores que utilizará como recomendados, ya sea por el grado de optimización que se
obtiene en las aplicaciones derivadas, o en las prestaciones específicas de la herramienta. En los últimos años, muchos Unix comerciales han echado
mano de los compiladores libres gracias a la gran adaptabilidad que este tipo de herramientas presentan, no dejando de lado las herramientas propias del
sistema.
Por ejemplo Solaris 10 trae consigo varias herramientas que proporcionan un entorno parecido a Linux, para su uso por
parte de los desarrolladores de aplicaciones y sin perder de vista la inclusión de su propia suite de desarrollo mediante
el Sun Developer Studio 11, el cual trae consigo los compiladores propuestos por el proveedor. Algunas de las
herramientas que podemos encontrar en Solaris 10 y que nos permiten trabajar con un entorno parecido a Linux son:

Categoría Herramienta
Set de mandatos GNU Comandos especificados en el estándar POSIX, proveyendo portabilidad de los comandos entre las plataformas
Interprete de mandatos (shell) Bash
Guiones (scripting) Bash, Perl, Python, Tcl/Tk, gawk, sed
Entornos gráficos GNOME, KDE, GTK+
Compiladores y librerías de ejecución C, C++, G77, glibc ...
Herramientas de desarrollo de software Ld, ldd, lorder, ar, elmdump, Gmake, ant, nm, gprof, RCS, CVS
Herramientas de depuración Gdb, DDB
Servicios Web Apache, Tomcat, JBoss
Servicios Java Sun JRE, Sun JDK

En Linux se cuenta con una amplisima gama de herramientas para el desarrollo de soluciones, obligando a cada
distribución a elegir un cierto número de estas e implementarlas como un juego por defecto, o recomendado para dicha
distribución. Por ejemplo, distribuciones como Debian GNU/Linux tiene como filosofía el proveer la mayor cantidad de
aplicaciones para cualquiera de sus usuarios, delegando a estos la tarea de elección de las herramientas a utilizar
mediante la presunción de que los usuarios saben que herramientas necesitan (o la obligación de los mismos a
documentarse). Por otro lado, distribuciones basadas en Red Hat Enterprise proveen un juego de herramientas mas
reducido (sin dejar de ser amplio) orientadas hacia servidores de aplicaciones y servicios de uso genérico, contando
además con cierto nivel de preconfiguración y seguridad de la plataforma, así como de proveer un cierto número de
aplicaciones que facilitan la administración del propio sistema.

Cualquier distribución GNU/Linux es capaz de desempeñar las mismas tareas que cualquiera otra, pero depende de la
capacidad y habilidad del operador del sistema para la puesta en marcha de las aplicaciones y de la interacción de esta
con todo el sistema.

CONSTRUCCIÓN DE APLICACIONES#

Una de las particularidades de los sistemas GNU/Linux es la instalación y puesta en marcha de aplicaciones a partir del
código fuente de estas, mediante un proceso de compilación que si bien es particular para cada sistema, permite
identificar una serie de pasos “base” para la construcción de la aplicación (favor de referirse a la documentación
específica de dicha aplicación). Cabe mencionar que, para la instalación de programas mediante este método, es
indispensable contar con las herramientas de desarrollo necesarias para la compilación de la aplicación.

Dependiendo de la distribución y versión con la cual contemos, lo mínimo requerido será un compilador (pej. gcc,
gcc-c++), herramientas de autoconfiguración (automake, make, m4), depuradores (pej. bison) así como las librerías de
desarrollo requeridas para la aplicación (pej. ncurses, gtk, gtk+, kdelibs, gtk#, etc)

El primer paso es el obtener el código fuente de la aplicación deseada, regularmente en un formato tar comprimido
(denominado tarball). Este tarball regularmente contiene el código fuente de la aplicación, así como las instrucciones
para su compilación e instalación además de otros objetos requeridos para el funcionamiento del sistema (imágenes,
ficheros de configuración, definición de rutas, etc). Hay que descomprimir dicho tarball en el directorio de fuentes de
aplicaciones (regularmente /usr/src) mediante el comando:

4 de 20 23/11/11 15:32
Estructuras Linux - Base de Conocimiento http://www.linuxparatodos.net/web/comunidad/base-de-...

# tar xvfz paquete-version-release.tar.gz

Esto nos da como resultado una carpeta conteniendo toda la información requerida para la construcción del paquete. Una vez leida la documentación del
sistema procedemos a cambiarnos al directorio recién creado, donde configuraremos los parámetros de compilación específicos para la aplicación, como
puede ser la ruta de instalación, banderas de compilación (optimización), arquitectura, etc. Por ejemplo:

# cd paquete-version-release
# ./configure --with-package=/path/to/package \
--enable-widget \
--disable-gizmo \
--with-x=29 \
--with-blah-blah-blah
CFLAGS="-O1 -g -mcpu=i686 -L/usr/unlikely/lib \
-I/usr/unlikely/include -Wl,-R/usr/unlikely/lib"

Debemos estar atentos a los distintos mensajes que arroje el proceso, ya que este nos indicará algunos fallos o
advertencias durante la configuración del paquete. Procedemos ahora a la construcción (compilación) del paquete
mediante al comando:

# make

Este es en si el proceso de compilación. En este paso detectaremos paquetes faltantes requeridos (dependencias) para el uso de nuestro paquete.
Nuevamente estaremos atentos a la salida del procedimiento, para detectar componentes faltantes o errores y advertencias originados. Si el procedimiento
finaliza de manera correcta (sin errores y atendiendo las advertencias), procedemos a la instalación:

# make install

Nota: Si planea desinstalar esta aplicación, no elimine la carpeta en la cual compiló o construyó la misma, ya que esta
carpeta contiene la información de instalación del paquete y solamente tendremos que recurrir al siguiente mandato
para desinstalarla

# make uninstall

EMPAQUETAMIENTO DE APLICACIONES#

RPM Package Manager (o RPM, originalmente llamado Red Hat Package Manager) es una herramienta de administración de paquetes pensada
básicamente para GNU/Linux. Es capaz de instalar, actualizar, desinstalar, verificar y solicitar programas. RPM es el formato de paquete de partida del
Linux Standard Base (LSB).
Originalmente desarrollado por Red Hat para Red Hat Linux, en la actualidad muchas distribuciones Linux lo usan,
dentro de los cuales las más destacadas son: Fedora Linux, Mandriva Linux, SuSE Linux, Conectiva Linux, Ubuntu
Linux y otros más sencillos como Sabios Linux. También se ha portado a otros sistemas operativos.

RPM es un formato orientado hacia la facilidad de administración de los paquetes instalados en un equipo GNU/Linux,
proveyendo de un sistema precompilado para cierto entorno objetivo (target). Para la instalación de un paquete RPM
es necesario que nuestra distribución GNU/Linux tenga capacidad para el uso de dicho formato (como los arriba
comentados). Al proveer un sistema binario (previamente compilado) ya no es necesario contar con un entorno de
desarrollo como el requerido por los tarballs. Además, RPM nos provee de una base de datos de las aplicaciones
instaladas bajo este formato, permitiendonos administrar de mejor manera el control de versiones de las aplicaciones,
automatización de actualizaciones, consultas a la base de datos para consultas sobre dependencias de otras
aplicaciones, redituandonos en reducción de esfuerzo, tiempos y costos originados por la instalación de paquetería en
nuestro sistema.

La sintáxis básica para la instalación de un paquete en formato RPM es:

# rpm –install paquete-version-release.rpm

Además de poder efectuar distintas tareas con el mismo mandato (mayor información, 'man rpm')

# rpm -iv paquete-version-release.rpm #Instala el paquete, con información de salida


# rpm -Uv paquete-version-release.rpm#Actualiza el paquete, con información de salida.
# rpm -qp paquete-version-release.rpm #Solicita mayor información sobre el paquete no instalado

5 de 20 23/11/11 15:32
Estructuras Linux - Base de Conocimiento http://www.linuxparatodos.net/web/comunidad/base-de-...

# rpm -q paquete #Solicita información sobre el paquete previamente instalado via rpm
# rpm -e paquete #Desinstala un paquete previamente instalado via rpm
# rpm -e –nodeps paque #Desinstala el paquete sin importar sus codependencias

Aún cuando el formato RPM nos provee una muy sencilla herramienta para la administración de paquetería, aún
debemos lidiar con la resolución de dependencias para nuestros paquetes.

Red Hat nos provee de herramientas que facilitan aún más la administración de nuestro sistema. Mediante la
suscripción a RHN, Red Hat nos proporciona un servicio de actualizaciones y de adquisición de paquetería muy
sencillo y basado en su formato RPM. Para Red Hat Enterprise Linux 4 (RHEL4) la herramienta se llama up2date, para
la versión Red Hat Advanced Server 5 (RHAS5) se utiliza la herramienta YUM.

Ambas herramientas (up2date y yum) tienen una funcionalidad similar: a través de depósitos contenedores de
paquetes en formato RPM precompilados para nuestro sistema facilitar la actualización, instalación y remoción de
paquetería, así como el cálculo y resolución de depedencias de manera automática.

# up2date -i paquete
# yum install paquete
# yum remove paquete

MANEJO DE DISPOSITIVOS#

En Linux, todo es representado mediante ficheros. Esto incluye al hardware. Es decir, cada componente de hardware conectado a nuestro equipo será
representado mediante un fichero dentro de nuestro mismo sistema. Todas las representaciones estarán contenidas dentro de la carpeta /dev de nuestro
sistema de ficheros. Por ejemplo:

/dev/hda #Disco PATA, maestro del primer bus


/dev/hda1 #Disco duro, maestro de primer bus, primera partición
/dev/sdc2 #Unidad de almacenamiento SCSI, USB o SATA, tercer bus, segunda partición
/dev/cdrom #Nemónico para unidad de almacenamiento óptica
/dev/ttyS0 #Puerto de transmisión en serie
/dev/mice #Nemónico para dispositivo apuntador (mouse)

Estos ficheros solamente contienen información sobre el vínculo (nodos) entre el hardware y el sistema operativo. Es
decir, como habremos de utilizar dichos dispositivos.

Sin embargo, contamos con otros ficheros que solamente estarán disponibles en nuestro sistema en tiempo de
ejecución. /proc es un sistema de ficheros que se crea al vuelo, y el cual contiene la infomación sobre los procesos en
ejecución dentro de nuestro entorno de trabajo. Dentro de este sistema de ficheros podremos encontrar información
sobre cómo está siendo aprovechado nuestros recursos. Por ejemplo:

/proc/cpuinfo #Información sobre los procesadores y sus núcleos (frec. de reloj, memoria
/proc/meminfo #caché, flops, arquitectura, etc.)
/proc/diskstats#Información detallada sobre el uso de la memoria

NIVELES DE EJECUCIÓN#

Es En sistemas GNU/Linux y otras versiones de Unix, init es el programa encargado de llevar la estación al nivel de ejecución en que se desea que opere.
Init es el primer proceso en ejecución después del la carga del Kernel e implementa dos sistemas de inicio: System V, o BSD-Like. Estos sistemas
especifican los guiones (scripts) de arranque para inicializar los diferentes servicios, programas o registros que sean necesarios para que el sistema
funcione como el usuario quiere o como el administrador estableció.
En los sistemas GNU/Linux se especifican hasta 7 niveles de ejecución (también conocidos como runlevels o niveles
de corrida). En las distribuciones Red Hat, así como en la gran mayoría de distribuciones, la especificación de los
niveles de ejecución son como sigue:

Nivel de ejecución 0#

Halt. Este nivel de ejecución se encarga de detener todos los procesos activos en el sistema, enviando a la placa
madre una interrupción para el completo apagado del equipo.

6 de 20 23/11/11 15:32
Estructuras Linux - Base de Conocimiento http://www.linuxparatodos.net/web/comunidad/base-de-...

Nivel de ejecución 1#

Single. Nivel de ejecución monousuario, sin acceso a servicios de red. Este nivel es regularmente utilizado en tareas de
mantenimiento del sistema, y el usuario que ejecuta es root.

Nivel de ejecución 2#

Al igual que el nivel de ejecución monousuario, pero con funciones de red y compartición de datos mediante nfs.

Nivel de ejecución 3#

Sistema multiusuario, con capacidades plenas de red, sin entorno gráfico. Este nivel de ejecución es el recomendado
para sistemas de servidor, ya que evita la carga innecesaria de aplicaciones consumidoras de recursos.

Nivel de ejecución 4#

Nivel especificado, pero no se utiliza.

Nivel de ejecución 5#

Al igual que el nivel de ejecución 3, pero con capacidades gráficas. Ideal para entornos de escritorio.

Nivel de ejecución 6#

Reboot. Este nivel de ejecución se encarga de detener todos los procesos activos en el sistema, enviando a la placa madre una interrupción para el reinicio
del equipo.
Los guiones de ejecución de mandatos especificos de cada nivel de ejecución se encuentran almacenados en las
carpetas /etc/rc{0..6}.d/, siendo únicamente enlaces simbólicos hacia los guiones específicos de las distintas
aplicaciones.

Es decir, cuando elegimos entrar a nuestro sistema en cierto nivel de ejecución (por ejemplo, 3), los guiones init que se
ejecutarán son los que se encuentren en la carpeta /etc/rc3.d/. El nombre del guión de ejecución se compone
básicamente de tres elementos: si el nombre del guión comienza con una letra 'K', se está especificando que para ese
nivel de ejecución específico el guión dará de baja (matar, o kill) los procesos iniciados por dicho guión. Por el contrario,
si el nombre

del guión comienza por la letra 'S' dicho guión iniciará (start) dicha tarea. Además, estos guiones se ejecutan en orden
alfabético, por lo que hay que determinar cual es el orden de ejecución mediante la inclusión de un número de dos
dígitos después de la primera letra del nombre del guión. El tercer elemento del nombre del guión especifica en si
mismo el nombre del servicio o tarea con la cual se va a trabajar. Ejemplo:

lrwxrwxrwx 1 root root 19 oct 26 2005 K99readahead -> ../init.d/readahead


lrwxrwxrwx 1 root root 25 oct 26 2005 K99readahead_early -> ../init.d/readahead_early
lrwxrwxrwx 1 root root 23 oct 26 2005 S00microcode_ctl -> ../init.d/microcode_ctl
lrwxrwxrwx 1 root root 18 oct 26 2005 S06cpuspeed -> ../init.d/cpuspeed

LOS MANDATOS CHKCONFIG Y SERVICE#

Red Hat, al ser una distribución orientada al mercado de servidores corporativos, se ha esforzado en proporcionar
herramientas útiles para el manejo de los servicios que habremos de utilizar. Este es el caso de las herramientas
chkconfig y service.

El mandato service (ubicado en /sbin) ejecuta el servicio enviado como primer parámetro, con la funcionalidad enviada
como segundo. Es decir:

# service kudzu stop #Detiene la ejecución del servicio 'kudzu”.


# service named start #Invoca el servidor de resolución de nombres para su inicio

7 de 20 23/11/11 15:32
Estructuras Linux - Base de Conocimiento http://www.linuxparatodos.net/web/comunidad/base-de-...

# service squid restart #Apaga completamente el servicio squid, para posteriormente volver a levantarlo
# service httpd reload #Recarga la configuración del servidor web, sin necesidad de apagarlo previamente
# service network status#Nos indica el estatus del servicio de red
# service –status-all #Nos indica el estatus de todos los servicios disponibles

A diferencia de service, chkconfig (también localizado en /sbin) nos permite controlar la ejecución de servicios entre
reinicios del equipo. Es decir, es el responsable de administrar dentro de la carpeta /etc/rcx.d si un guión se ejecuta (S),
o se apaga (K) en determinado nivel de ejecución:

# chkconfig kudzu off #Indica que el servicio kudzu no estará disponible para ningún nivel de ejecución.
# chkconfig httpd on #Indica que el servidor web estará disponible para todos los niveles de ejecución especificados para dicho servicio
# chkconfig –level 35 squid on #Indica que el servidor proxy squid estará disponible únicamente para los niveles de ejecución 3 y 5
# chkconfig –list #Lista todos los servicios configurados, así como su estado predeterminado en cada nivel de ejecución

SHELL DE COMANDOS#

Bash es un shell de Unix (intérprete de comandos de Unix) escrito para el proyecto GNU. Su nombre es un acrónimo
de bourne-again shell (otro shell bourne) — haciendo un juego de palabras (born-again significa renacimiento) sobre el
Bourne shell (sh), que fue uno de los primeros shells importantes de Unix. Hacia 1978 el shell Bourne era el shell
distribuido con el Unix Version 7. Stephen Bourne, por entonces investigador de los Laboratorios Bell, escribió el shell
Bourne original . Brian Fox escribió el shell bash en 1987. En 1990, Chet Ramey se convirtió en su principal
desarrollador. bash es el shell por defecto en la mayoría de sistemas GNU/Linux (viene como intérprete de mandatos
por defecto de las distribuciones Red Hat), además de Mac OS X Tiger, y puede ejecutarse en la mayoría de los
sistemas operativos tipo Unix. También se ha portado a Microsoft Windows por el proyecto Cygwin.

La mayoría de los shell scripts (guiones de órdenes) Bourne pueden ejecutarse por bash sin ningún cambio, con la
excepción de aquellos scripts de shell Bourne que hacen referencia a variables especiales de Bourne o que utilizan una
orden interna de Bourne. La sintaxis de órdenes de bash incluye ideas tomadas desde el Korn Shell (ksh) y el C Shell
(csh), como la edición de la línea de órdenes, el historial de órdenes, la pila de directorios, las variables $RANDOM y
$PPID, y la sintaxis de substitución de órdenes POSIX: $(...). Cuando se utiliza como un intérprete de órdenes
interactivo, bash proporciona autocompletado de nombres de programas, nombres de archivos, nombres de variables,
etc, cuando el usuario pulsa la tecla TAB.

La sintaxis de bash tiene muchas extensiones que no proporciona el shell Bourne. Varias de las mencionadas
extensiones se enumeran a continuación.

Acceso a los parámetros#

Los scripts de bash reciben los parámetros que le pasa la shell como $1, $2, ..., $n. Podemos saber cuantos hemos
recibido con el símbolo $#.

Por ejemplo, si nuestro script necesita dos parámetros pondremos:

if [ $# -lt 1 ]; then
echo "Necesitas enviar dos parametros"
exit 0
fi

Matemáticas con enteros#

Una gran limitación del shell Bourne es que no puede realizar cálculos con enteros sin lanzar un proceso externo. En
cambio, un proceso bash puede realizar cálculos con enteros utilizando la orden ((...)) y la sintaxis de variables $... de
la siguiente manera:

VAR=55 #Asigna el valor entero 55 a la variable VAR.


((VAR = VAR + 1)) #Suma uno a la variable VAR. Observe la ausencia del carácter '$'.
((++VAR)) #Otra forma de sumar uno a VAR. Preincremento estilo C.

8 de 20 23/11/11 15:32
Estructuras Linux - Base de Conocimiento http://www.linuxparatodos.net/web/comunidad/base-de-...

((VAR++)) #Otra forma de sumar uno a VAR. Postincremento estilo C.


echo $[VAR * 22] #Multiplica la variable VAR por 22 y substituye la orden por el resultado.
echo $((VAR * 22)) #Otra forma de realizar lo mismo.

La orden ((...)) también se puede utilizar en sentencias condicionales, ya que su código de retorno es 0 o 1
dependiendo de si la condición es cierta o falsa:

if ((VAR == Y * 3 + X * 2))
then
echo Si
fi
((Z > 23)) && echo Si

La orden ((...)) soporta los siguientes operadores relacionales: '==', '!=', '>', '<', '>=', y '<='.

Un proceso bash no puede realizar cálculos en coma flotante. Los únicos shell Unix capaces de esto son el Korn Shell
(versión de 1993) y el zsh (a partir de la versión 4.0).

Redirecciones de Entrada/Salida#

La sintaxis de bash permite diferentes formas de redirección de entrada/salida de las que el Shell Bourne tradicional
carece. bash puede redirigir la salida estándar y los flujos de error estándar a la vez utilizando la sintaxis:

orden &> archivo

que es más simple que teclear la orden Bourne equivalente, "orden > archivo 2>&1". Desde la versión 2.05b, bash
puede redirigir la entrada estándar desde una cadena utilizando la siguiente sintaxis (denominada "here strings"):

orden <<< "cadena a leer como entrada estándar"

Si la cadena contiene espacios en blanco, deben utilizarse comillas.

Ejemplo: Redirige la salida estándar a un archivo, escribe datos, cierra el archivo y reinicia stdout

# hace que el descriptor de archivo 6 sea una copia de stdout (descriptor archivo 1)
exec 6>&1
# abre el archivo "test.data" para escritura
exec 1>test.data
# genera algún contenido
echo "data:data:data"
# recupera stdout original, al hacer que sea una copia del descriptor de archivo 6
exec 1>&6
# cierra el descriptor de archivo 6
exec 6>&-

Abre y cierra archivos #

# abre el archivo test.data para lectura


exec 6<test.data
# lee hasta el final del archivo
while read -u 6 dta
do
echo "$dta"
done
# cierra el archivo test.data
exec 6<&-

Captura la salida de órdenes externas

# ejecuta 'find' y guarda los resultados en VAR


# busca nombres de archivos que terminan con la letra "h"
VAR=$(find . -name "*h")

9 de 20 23/11/11 15:32
Estructuras Linux - Base de Conocimiento http://www.linuxparatodos.net/web/comunidad/base-de-...

PROGRAMACIÓN DE TAREAS#

En el sistema operativo Unix, cron es un administrador regular de procesos en segundo plano (demonio) que ejecuta
programas a intervalos regulares (por ejemplo, cada minuto, día, semana o mes). Los procesos que deben ejecutarse y
la hora en la que deben hacerlo se especifican en el archivo crontab.

Cron se podría definir como el "equivalente" a Tareas Programadas de Windows. Los usuarios habilitados para crear su
archivo crontab se especifican en el archivo cron.allow. De manera análoga, los que no lo tienen permitido figuran en
/etc/cron.d/cron.deny, o /etc/cron.deny, dependiendo de la versión de unix.

Formato del archivo crontab Archivo crontab de ejemplo:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# run-parts
01 * * * * root nice -n 19 run-parts /etc/cron.hourly
50 0 * * * root nice -n 19 run-parts /etc/cron.daily
22 4 * * 0 root nice -n 19 run-parts /etc/cron.weekly
42 4 1 * * root nice -n 19 run-parts /etc/cron.monthly

Para agregar, quitar o modificar tareas, hay que editar el crontab. Esto se hace con la orden crontab -e, que abrirá el
editor definido en la variable de entorno EDITOR y cargará el archivo crontab correspondiente al usuario que está
logueado.

Cada vez que se ejecuta el crontab, se envía un mail al usuario que aparece en la variable de entorno MAILTO, si está
habilitado, indicándole la tarea realizada.

El formato de configuración de cron es muy sencillo.

El símbolo Numeral "#" es un comentario, todo lo que se encuentre después de ese carácter no será ejecutado por cron.
El momento de ejecución se especifica de acuerdo con la siguiente tabla:

1.Minutos: (0-59)

2.Horas: (0-23)

3.Días: (1-31)

4.Mes: (1-12)

5.Día de la semana: (0-6), siendo 1=Lunes, 2=Martes, ... 6=sábado y 0=Domingo

Para especificar todos los valores posibles de una variable se utiliza un asterisco (*).
La última columna corresponde al path absoluto del binario o script que se quiere ejecutar.

Por ejemplo:

30 10 * * 1 /usr/bin/who >> /home/quien.tex

Ejecuta la orden who todos los lunes a las 10:30 y guarda la salida en el archivo quien.tex

Para especificar dos o más valores en cada variable, estas deben estar separadas por comas, siguiendo con el
ejemplo anterior:

0,30 * * * 1 /usr/bin/who >> /home/quien.tex

Ejecuta la orden who todos los lunes cada media hora y guarda la salida en el archivo quien.tex

10 de 20 23/11/11 15:32
Estructuras Linux - Base de Conocimiento http://www.linuxparatodos.net/web/comunidad/base-de-...

Si queremos que se ejecute cada 15 minutos sería

0,15,30,45 * * * * /usr/bin/who >> /home/quien.tex

*/15 * * * * /usr/bin/who >> /home/quien.tex

En este ejemplo veremos como pasarle mas de un comando al cron y de paso como puede programarse una
descarga:

30 21 * * * cd /media/sda7/dexter/distributions/isos;wget [http://hola.com/archivo_a_descargar.loquesea]

Este otro es para programar el apagado de la PC. En este caso todos los sábados a las 9:30 pm.

30 21 * * 6 /sbin/shutdown -h now

CONFIGURACIÓN DE INTERFACES DE RED#

Configurar los parámetros de red en una estación de trabajo GNU/Linux o un servidor no es realmente complicado. Solamente requerirá de algunos
conocimientos básicos sobre redes y cualquier editor de texto simple.

Procedimientos #

Detección y configuración del hardware#

La detección del hardware es realizada o bien por el programa de instalación, o bien a través de kudzu, un servicio que
inicia con el sistema y que se encarga de detectar y configurar los dispositivos de hardware instalados. En términos
generales, no hace falta configurar parámetro alguno mientras los dispositivos de red sean compatibles y exista un
controlador para la versión del núcleo (kernel) ejecutado.

Si acaso no fuese detectado el dispositivo de red debido a la ausencia de kudzu, es posible configurar todo
manualmente. La marca de la tarjeta de red es lo que menos interesa, lo que es importante es que se determine con
exactitud que chipset utiliza la tarjeta de red. Esto puede determinarse examinando físicamente la tarjeta de red o bien
examinando a detalle la salida en pantalla que se obtiene al ejecutar el siguiente mandato:

# lspci | grep Ethernet

Lo anterior devuelve una salida similar a la siguiente (en el caso de una tarjeta 3Com 905 C)

Ethernet controller: 3Com Corporation 3c905C-TX [Fast Etherlink] (rev 120).

Debe modificarse con un editor de textos el fichero /etc/modules.conf (núcleos de la serie 2.4) o /etc/modprobe.conf
(núcleos de la serie 2.6). Debe verificarse que el módulo correspondiente a la tarjeta de red realmente este
especificado de forma correcta. Ejemplo:

alias eth0 3c59x

Si se realizó alguna edición de este fichero, deberá de ejecutarse el siguiente mandato, a fin de actualizar
dependencias:

# depmod -a

Si utiliza un núcleo de la serie 2.4.x o 2.6, la lista de módulos existentes en el sistema que se pueden utilizar para
distintos chipset de distintos modelos de tarjetas de red se puede obtener listando el contenido del directorio
/lib/modules/[versión del núcleo]/kernel/drivers/net/. Ejemplo:

# ls /lib/modules/`uname -r`/kernel/drivers/net/

11 de 20 23/11/11 15:32
Estructuras Linux - Base de Conocimiento http://www.linuxparatodos.net/web/comunidad/base-de-...

Asignación de parámetros de red#

Nombre del anfitrión (HOSTNAME)#

Debe modificarse con un editor de textos el fichero /etc/hosts, y debe verificarse que este diferenciado el eco o retorno
del sistema del nombre del sistema, el cual deberá estar asociado a una de las direcciones IP, específicamente la que
esté asociado a dicho nombre en el servidor del sistema de nombres de dominio (DNS) si se cuenta con uno en la red
local. Ejemplo:

127.0.0.1 localhost.localdomain localhost


192.168.1.50 nombre.dominio nombre

Se debe establecer un nombre para el sistema. Este deberá ser un FQDN (acrónimo de Fully Qualified Domain Name o
Nombre de Dominio Plenamente Calificado) resuelto por un servidor de nombres de domino (DNS) o bien. En el caso
de sistemas sin conexión a red o sistemas caseros, sea resuelto localmente en el fichero /etc/hosts. De tal modo, el
nombre del anfitrión (hostname) del sistema se definirá dentro del fichero /etc/sysconfig/network del siguiente modo:

NETWORKING=yes
HOSTNAME=nombre.dominio

Dirección IP, máscara de subred y puerta de enlace#

Debe modificarse con cualquier editor de textos, y verificar que sus parámetros de red sean los correctos, el fichero
localizado en la ruta /etc/sysconfig/network-scripts/ifcfg-eth0. Ejemplo:

DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.1.50
NETMASK=255.255.255.0
GATEWAY=192.168.1.254

Los parámetros anteriores son proporcionados por el administrador de la red local en donde se localice la máquina que
está siendo configurada, o bien definidos de acuerdo a una planificación previamente establecida. El administrador de
la red

deberá proporcionar una dirección IP disponible (IPADDR) y una máscara de la subred (NETMASK).

Servidores de nombres#

Debe modificarse con un editor de textos /etc/resolv.conf, donde se establecerán los servidores del sistema de
resolución de nombres de dominio (DNS). Ejemplo:

nameserver 192.168.1.254
nameserver 192.168.1.1

Agregar encaminamientos (rutas) adicionales#

Si se requiere establecer encaminamientos adicionales para obtener conectividad con otras redes, se pueden generar
ficheros para cada interfaz que sea necesario, en donde se establecen los valores para puerta de enlace, red a la que
se quiere acceder y la máscara de subred correspondiente. Los ficheros se deben generar dentro del directorio
/etc/sysconfig/network-scripts/ como route-[interfaz] y deben llevar el siguiente formato:

GATEWAY0=xxx.xxx.xxx.xxx
ADDRESS0=xxx.xxx.xxx.xxx
NETMASK0=xxx.xxx.xxx.xxx

Por citar un ejemplo, imaginemos que nos encontramos dentro de la red 192.168.1.0 y se requiere establecer
conectividad con las redes 192.168.2.0 y 192.168.3.0, con máscaras 255.255.255.0, a través de las puertas de enlace

12 de 20 23/11/11 15:32
Estructuras Linux - Base de Conocimiento http://www.linuxparatodos.net/web/comunidad/base-de-...

o enrutadores o encaminadores con dirección IP 192.168.2.1 y 192.168.3.1, correspondientemente para cada red
citada, a través de la primera interfaz Ethernet del sistema (eth0). La configuración de /etc/sysconfig/network-scripts
/route-eth0 sería la siguiente:

GATEWAY0=192.168.2.1
ADDRESS0=192.168.2.0
NETMASK0=255.255.255.0
GATEWAY1=192.168.3.1
ADDRESS1=192.168.3.0
NETMASK1=255.255.255.0

Función de Reenvío de paquetes para IP versión 4#

Si se tiene planeado implementar un NAT o DNAT, se debe habilitar el reenvío de paquetes para IP versión 4. Esto se
realiza en el fichero /etc/sysctl.conf cambiando net.ipv4.ip_forward = 0 por net.ipv4.ip_forward = 1:

net.ipv4.ip_forward = 1

Comprobaciones

Después de hacer configurado todos los parámetros de red deseados, solo deberá de ser reiniciado el servicio de red,
ejecutando lo siguiente:

# service network restart

Basta solamente comprobar si hay realmente conectividad. Puede ejecutarse el mandato ping hacia cualquier dirección de la red local para tal fin.

# ping 192.168.1.254

Las interfaces y la información de las mismas se puede examinar utilizando:

# ifconfig

Los encaminamientos se pueden comprobar utilizando:

# route -n

Para comprobar si hay resolución de nombres, se puede realizar una consulta hacia los servidores DNS definidos para el sistema, utilizando:

# host algún.dominio

Alta de direcciones IP virtuales#

El alta de direcciones IP es verdaderamente simple. Basta definir solamente la dirección IP, máscara de subred y el
nombre del dispositivo. El fichero se genera igualmente con el nombre del dispositivo con el prefijo ifcfg-. Ejemplo del
contenido del fichero /etc/sysconfig/network-scripts/ifcfg-eth0:0 que corresponde al primer dispositivo virtual del primer
dispositivo ethernet:

DEVICE=eth0:0
IPADDR=192.168.2.254
NETMASK=255.255.255.0

La comprobación, al ejecutar el mandato 'ifconfig', deberá regresar algo como lo siguiente:

eth0 Link encap:Ethernet HWaddr 00:01:02:03:04:05


inet addr:192.168.1.254 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:264830 errors:0 dropped:0 overruns:0 frame:0
TX packets:255396 errors:0 dropped:0 overruns:0 carrier:0
collisions:348 txqueuelen:1000
RX bytes:42375618 (40.4 MiB) TX bytes:20306080 (19.3 MiB)
Interrupt:11 Base address:0xd000

13 de 20 23/11/11 15:32
Estructuras Linux - Base de Conocimiento http://www.linuxparatodos.net/web/comunidad/base-de-...

eth0:0 Link encap:Ethernet HWaddr 00:01:02:03:04:05


inet addr:192.168.2.254 Bcast:192.168.2.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Interrupt:11 Base address:0xd000

lo Link encap:Local Loopback


inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:2590 errors:0 dropped:0 overruns:0 frame:0
TX packets:2590 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:3327899 (3.1 MiB) TX bytes:3327899 (3.1 MiB)

GESTIÓN DE USUARIOS#

Una cuenta de usuario contiene las restricciones necesarias para impedir que se ejecuten mandatos que puedan dañar
el sistema -programas troyanos como el Bliss-, se alteren accidentalmente la configuración del sistema, los servicios
que trabajan en el trasfondo, los permisos y ubicación de los archivos y directorios de sistema, etc.

Procedimientos#

Generalmente el paso que procede a una instalación de GNU/Linux es la creación de cuantas de usuario. Existen
distintos métodos, todos son sencillos y permiten crear una cuenta con su propio directorio de trabajo y los archivos
necesarios.

Actualmente se existen recursos como el programa instalador de Red Hat Linux y programas que funcionan desde un
entorno gráfico, como es Linuxconf y Webmin, y recursos que funcionan en modo de texto o desde una ventana
terminal, como son los mandatos tradicionales, useradd y passwd, y algunos otros programas, como YaST y la versión
correspondiente de Linuxconf o Webmin.

Creando una cuenta en el modo de texto: useradd y passwd#

Este procedimiento puede realizarse de forma segura tanto fuera de X Window como desde una ventana terminal en el entorno gráfico del que se
disponga. Fue el método comúnmente utilizado antes de la aparición de programas como YaST y Linuxconf. Sin embargo aún resulta útil para la
administración de servidores, cuando no se tiene instalado X Window, no se tienen instalados YaST o Linuxconf -o las versiones de estos que se han
instalado no trabajan correctamente-, o bien se tienen limitaciones o problemas para utilizar un entorno gráfico.

Lo primero: la orden useradd#

El primer paso para crear una nueva cuenta consiste en utilizar el mandato useradd del siguiente modo:

# useradd nombre_del_usuario

Lo segundo: la orden passwd#

Después de crear la nueva cuenta con useradd o que sigue a continuación es especificar una contraseña para el
usuario. Determine una que le resulte fácil de recordar, que mezcle números, mayúsculas y minúsculas y que,
preferentemente, no contenga palabras que se encontrarían fácilmente en el diccionario. Existen otras
recomendaciones más, por lo que es conveniente leer, antes de continuar, los comentarios finales acerca de la
seguridad incluidos en este mismo artículo.

Aunque el sistema siempre tratará de prevenirlo cuando se escoja una mala contraseña, el sistema no le impedirá que
lo haga. Especificar una nueva contraseña para un usuario, o bien cambiar la existente, se puede realizar utilizando el
mandato passwd del siguiente modo:

# passwd nombre_del_usuario

El sistema solicitará entonces que proceda a teclear la nueva contraseña para el usuario y que repita ésta para
confirmar. No verá el echo, por seguridad, el sistema no mostrará los caracteres tecleados, por lo que debe hacerlo con

14 de 20 23/11/11 15:32
Estructuras Linux - Base de Conocimiento http://www.linuxparatodos.net/web/comunidad/base-de-...

cuidado. Si se considera que tal vez se cometieron errores de tecleado, puede presionarse las veces que sean
necesarias la tecla <Backspace> o <Retroceso>. De cualquier forma el sistema le informará si coincide o no lo
tecleado.

Este procedimiento también puede utilizarse para cambiar una contraseña existente.

Opciones avanzadas#

En muchos casos pueden no ser necesarios, pero si se esta administrando un servidor o estación de trabajo, o bien se
es un usuario un poco más experimentado, y se quiere crear una cuenta con mayores o menores restricciones,
atributos y/o permisos, pueden utilizarse las siguientes opciones de useradd:

-c comment Se utiliza para especificar el archivo de comentario de campo para la nueva cuenta.

-d home dir Se utiliza para establecer el directorio de trabajo del usuario. Es conveniente, a fin de tener un sistema
bien organizado, que este se localice dentro del directorio /home.

-e expire date Se utiliza para establecerla fecha de expiración de una cuenta de usuario. Esta debe ingresarse en el
siguiente formato: AAAA-MM-DD.

-g initial group Se utiliza para establecer el grupo inicial al que pertenecerá el usuario. De forma predeterminada se
establece como único grupo 1. Nota: el grupo asignado debe de existir.

-G group,[...] Se utiliza para establecer grupos adicionales a los que pertenecerá el usuario. Estos deben separarse
utilizando una coma y sin espacios. Esto es muy conveniente cuando se desea que el usuario tenga acceso a
determinados recursos del sistema, como acceso a la unidad de disquetes, administración de cuentas PPP y POP.
Nota: los grupos asignado deben de existir.

-m Se utiliza para especificar que el directorio de trabajo del usuario debe ser creado si acaso este no existiese, y se
copiaran dentro de este los archivos especificados en /etc/skel.

-s shell Se utiliza para establecer el Shell que podrá utilizar el usuario. De forma predeterminada, en Red Hat™ Linux y
Fedora Core, se establece bash como Shell predefinido.

-u uid Se utiliza para establecer el UID, es decir, la ID del usuario. Este debe ser único. De forma predeterminada se
establece como UID el número mínimo mayor a 99 y mayor que el de otro usuario existente. Cuando se crea una
cuenta de usuario por primera vez, como ocurre en Red Hat Linux y Fedora Core generalmente se asignará 500 como
UID del usuario. Los UID entre 0 y 99 son reservados para las cuentas de los servicios del sistema.

Ejemplo:

useradd -u 500 -d /home/stratus -G floppy,pppusers,popusers fulano

Lo anterior creará una cuenta de usuario llamada fulano, que se encuentra incluido en los grupos floppy, pppusers y
popusers, que tendrá un UID=500, utilizará Bash como intérprete de mandatos y tendrá un directorio de trabajo en
/home/fulano.

Existen más opciones y comentarios adicionales para el mandato useradd, estas se encuentran especificadas en los
manuales -Man pages-. Para acceder a esta información, utilice el mandato man useradd desde una ventana terminal.
Eliminar una cuenta de usuario.

En ocasiones un administrador necesitará eliminar una o más cuentas de usuario. Este es un procedimiento
principalmente utilizado en servidores y estaciones de trabajo a los cuales acceden múltiples usuarios. Para tal fin nos
valdremos del mandato userdel. La sintaxis básica de userdel es la siguiente:

# userdel nombre_del_usuario

Si se desea eliminar también todos los archivos y sub-directorios contenidos dentro del directorio de trabajo del usuario a eliminar, se debe agregar la

15 de 20 23/11/11 15:32
Estructuras Linux - Base de Conocimiento http://www.linuxparatodos.net/web/comunidad/base-de-...

opción -r:

# userdel -r nombre_del_usuario

Manejo de Grupos#

Alta de grupos#

# groupadd grupo-que-sea

Alta de grupos de sistema#

Un grupo de sistema es aquel que tiene un número de identidad de grupo (GID) por debajo del 500. Regularmente se
asigna automáticamente el número de identidad de grupo más bajo disponible.

# groupadd -r grupo-que-sea

Baja de grupos#

# groupdel grupo-que-sea

Asignación de usuario existentes a grupos existentes.

# gpasswd -a usuario-que-sea grupo-que-sea

SEGURIDAD POR PERMISOS#

Comandos chroot, chown, chgrp#

En un sistema multiusuario seguro se deben definir permisos para el acceso a los distintos ficheros, carpetas, binarios,
dispositivos, etc. Linux no es la excepción, y podemos cambiar estos permisos a través de los comandos chmod,
chown y chgrp.

Aún cuando los distintos sistemas, servicios o programas que tengamos instalados en nuestro equipo contengan una
descripción sobre los permisos de los distintos elementos que lo conforman (y que requiere para un correcto
funcionamiento), podremos modificarlos para amoldarlos a nuestras necesidades específicas, como puede ser la
compartición de ficheros en un entorno mixto de sistemas operativos, o el acceso restringido a ciertas áreas de nuestro
servidor.

El la ilustración anterior podemos identificar la descripción de algunos ficheros de un sistema dado. Los datos que nos
ocupan en este tema están contenidos en la primera columna, en la cual se describen los permisos de nuestra
información. En dicha columna, cada línea está representada por un conjunto de 10 caracteres.

El primer caractér nos indica que tipo de fichero estamos manejando:

- (guión medio) : Se trata de un fichero regular (datos)


b : Describe un fichero especial de dispositivos de bloque. Es decir, describe a algún dispositivo de almacenamiento que puede ser aleatoriamente
accedido (ej. /dev/hd* si se cuenta con discos pata, o /dev/sd* si se cuenta con discos sata).
c : Describe un fichero especial de tipo caractér, es decir, describe algún dispositivo periférico, cuyo acceso es de modo serial (ej. /dev/input)
d : Este fichero es un fichero especial con función de directorio. Es una carpeta.
l : Enlace simbólico, un atajo suave hacia otro fichero dentro de nuestro mismo sistema de ficheros.
p: Tubería (pipe) tipo FIFO, o tubería nombrada (named pipe). Fichero de control para el acceso a procesos recurrentes en el sistema, para uso
interno de procesos.
s : Zócalo (socket). Igualmente, para el uso interno de procesos, pero con la capacidad del envío de mensajes entre dichos procesos.

Los siguientes 9 caracteres establecen los permisos sobre el fichero. La notación utilizada es:

- : El permiso está deshabilitado en esta casilla


r : Permiso de solo lectura. Esto nos permite solamente abrir dicho fichero para leerlo, pero no podremos modificarlo ni eliminarlo.

16 de 20 23/11/11 15:32
Estructuras Linux - Base de Conocimiento http://www.linuxparatodos.net/web/comunidad/base-de-...

w : Permisos de solo escritura. Esto nos permite modificar el documento, incluso eliminarlo. Si se utiliza en conjunto con el permiso de solo lectura,
en el fichero podremos obtener permisos de lectura y escritura exclusivas.
x : Permiso de ejecución. Esto nos permite darle atributos de ejecución a nuestro fichero, por ejemplo, algún guión (script) administrativo.

Dividiremos estos 9 caracteres en 3 juegos de 3 elementos cada uno. Cada juego tiene un comportamiento idéntico en
cuanto al establecimiento de los permisos.

El primer grupo describe los permisos del propietario (u – usuario) del fichero.
El segundo grupo de caracteres describe los permisos del grupo (g – grupo) al que pertenece el fichero.
El tercer grupo describe los permisos que cualquier otro usuario (o – otros) tendrá sobre el fichero o carpeta.

Cada juego de permisos está dado en un estricto orden: lectura, escritura y ejecución (rwx).

Si algún permiso NO se encuentra dado, entonces se deberá sustituir por un guión medio (-). Por ejemplo, si un para
un fichero queremos tener los permisos de lectura y ejecución, pero NO de escritura, lo veríamos como (r-x)

Cada uno de los permisos tiene un valor numérico, y pueden ser acumulativos para cada uno de los juegos de
permisos. Es decir:

0 : Ningún permiso dado ( --- )

1 : Permiso de ejecución ( --x )

2 : Permiso de escritura ( -w- )

3 : Permisos de escritura y de ejecución ( -wx )

4 : Permiso de lectura ( r-- )

5 : Permisos de lectura y de ejecución ( r-x )

6 : Permisos de lectura y escritura ( rw- )

7 : Permisos de lectura, escritura y ejecución ( rwx )

Dichos valores no son arbitrarios. De hecho, cada uno de estos valores no está dado en el sistema numérico decimal,
sino que debe ser leído en un sistema numérico octal (base 8). Podemos realizar el cálculo de cada juego de permisos,
si consideramos a cada uno de estos juegos como un digito octal representado de manera binaria (base 2), teniendo a
la izquierda nuestro bit más significativo (MSB), y a la derecha el bit menos significativo (LSB), como se muestra en la
siguiente tabla:

Lectura Escritura Ejecución


Conversión Resultado
(r) (w) (x)
02 02 02 0x22 + 0x21 + 0x20 = 08 + 08 + 08 08
02 02 12 0x22 + 0x21 + 1x20 = 08 + 08 + 18 18
02 12 02 0x22 + 1x21 + 0x20 = 08 + 28 + 08 28
02 12 12 0x22 + 1x21 + 1x20 = 08 + 28 + 18 38
12 02 02 1x22 + 0x21 + 0x20 = 48 + 08 + 08 48
12 02 12 1x22 + 0x21 + 1x20 = 48 + 08 + 18 58
12 12 02 1x22 + 1x21 + 0x20 = 48 + 28 + 08 68
12 12 12 1x22 + 1x21 + 1x20 = 48 + 28 + 18 78

El comando chmod es nuestra herramienta para modificar el modo (change mode) en el que se encuentra nuestro
fichero (los permisos con los que este cuenta). Su sintáxis básica es sencilla:

# chmod [OPCIONES] OCTAL nombredefich.ero


# chmod [OPCIONES] MODO nombredefich.ero

Es decir, si queremos que el fichero “archivo.txt” tenga permisos de lectura y escritura para el propietario y grupo, pero
solamente de lectura para cualquier otro usuario, ejecutamos el comando de la siguiente manera:

17 de 20 23/11/11 15:32
Estructuras Linux - Base de Conocimiento http://www.linuxparatodos.net/web/comunidad/base-de-...

# chmod 664 archivo.txt


# chmod 764 carpeta

Si queremos hacer lo mismo, pero para una carpeta completa, le indicamos que lo queremos hacer recursivamente
(opción -R):

# chmod -R 664 carpeta #El comando aplica a la carpeta y sus contenidos


# chmod -R 664 carpeta/#Con la diagonal al final, el comando solo afecta al contenido de la carpeta
# chmod -R 664 . #Cambia los permisos para todos los ficheros y carpetas
# chmod -R 664 *.* #Contenidos en la ruta actual

NOTA: Una carpeta debe tener el permiso de ejecución activo si es que queremos ejecutar dicha carpeta (entrar en
ella). Debemos darle el permiso de ejecución, al menos (dependiendo de su configuración) al propietario de dicha
carpeta.

Es frecuente en foros de discusión sobre programación de sitios web (aunque no exclusivo de estos) encontrar
respuestas como: “... es que no tienes permisos de lectura... necesitas cambiar los permisos en tu carpeta, ejecuta
'chmod 666 *' para que puedan leer tus ficheros...” o, los que se dieron cuenta de que necesitan el permiso de
ejecución indican “... ejecuta 'chmod 777' y listo...”. Como se puede apreciar, con respuestas como la primera podemos
hacer inaccesible una carpeta (o serie de carpetas) ya que no tenemos permiso de ejecutarlas, y con respuestas como
la segunda ponemos en un SERIO PROBLEMA de seguridad tanto a nuestra aplicación, como a nuestros datos.

Si deseamos, por ejemplo, asegurarnos de que toda la información contenida en 'carpeta' tenga permiso de lectura y
escritura para su propietario, ejecutamos:

# chmod -R u+rw carpeta/

El signo '+' indica que queremos adicionar dichos permisos, pero sin alterar cualquier otro permiso previamente
establecido. Análogamente, con el signo '-' removemos algún permiso:

# chmod -R o-wx carpeta

Podemos también hacer varios movimientos en una sola línea:

# chmod u+rw,g-wx,o-rwx,g+r *.png

NOTA: Recuerde que los nemónicos “u, g, o” representan al usuario propietario, grupo, otros. El nemónico “a” agrupa a
estos tres (a = all, todos)

Algunas veces nos será más cómodo utilizar la notación octal sobre la nemónica, dependiendo de las necesidades que
tengamos en el momento así como de la costumbre que obtengamos al manejar el mandato. Ningún método es
preferible sobre el otro.

¿QUE ES LSB?#

La Base Estándar para Linux (Linux Standard Base, abreviado LSB), es un proyecto conjunto de varias Distribuciones de Linux bajo la estructura
organizativa del Free Standards Group con el objeto de crear y normalizar la estructura interna de los sistemas operativos derivados de Linux. La LSB está
basada en la Especificación POSIX, la Especificación Única de UNIX (Single UNIX Specification) y en varios otros estándares abiertos, aunque extiende
éstos en ciertas áreas.
El objetivo de la LSB es desarrollar y promover un conjunto de estándares que aumentarán la compatibilidad entre las
distribuciones de Linux y permitirán que los programas de aplicación puedan ser ejecutados en cualquier sistema que
se adhiera a ella. Además, la LSB ayudará a coordinar esfuerzos tendentes a reclutar productores y proveedores de
programas que creen productos originales para Linux o adaptaciones de productos existentes.

Mediante un proceso de certificación es posible obtener la conformidad a la LSB de un producto. Dicha certificación la
lleva a cabo el Open Group en colaboración con el Free Standards Group (Grupo de Estándares Libres).

Como ejemplo, la LSB especifica: librerías estándar, un conjunto de órdenes y utilerías que extienden el estándar

18 de 20 23/11/11 15:32
Estructuras Linux - Base de Conocimiento http://www.linuxparatodos.net/web/comunidad/base-de-...

POSIX, la estructura jerárquica del sistema de archivos, los niveles de ejecución, y varias extensiones al sistema
gráfico X Window.

La LSB ha sido criticada por no considerar aportaciones de proyectos externos a la esfera de influencia de las
compañías miembros, especialmente del proyecto Debian. Por ejemplo, la LSB especifica que los programas deberían
ser distribuidos en el formato RPM de Red Hat, el cual fue inventado mucho después del formato de empaquetado deb
del proyecto Debian. Es muy poco probable que los programadores del proyecto Debian cambien su formato, el cual
consideran superior a RPM, (al igual que otros programadores). Sin embargo, la mayor parte de la crítica recibida por
este tema surge del malentendido en la sugerencia de este uso obligado del formato RPM: el estándar no dicta cuál
formato de empaquetado debe ser usado por el sistema operativo, sino solamente que un formato de empaquetado
debe ser soportado de manera que los paquetes de otros programadores puedan ser instalados en un sistema que
sigue el estándar LSB. Debido a que Debian incluye soporte a la LSB en forma opcional (en la versión 3.0 "woody" y en
la versión 3.1 "sarge"), este tópico desaparece al ser examinado cuidadosamente (esto es, el usuario final sólo necesita
usar el programa alien en Debian para transformar e instalar el paquete en formato RPM en el formato nativo). En otras
áreas la operación de la LSB es menos controvertida, y ha sido recibida con considerable gratitud.

INTRODUCCIÓN A LOS SISTEMAS GRÁFICOS#

JDS, Gnome, KDE#

Existen distintas ofertas para la ejecución de entornos gráficos dentro de los distintos sistemas tanto Linux, como Unix, la mayoría tomando como sistema
base el servidor de gráficos Xorg, un derivado libre del sistema de gráficos X11.

Java Desktop System#

Sun Java Desktop System, es un Entorno de escritorio para Solaris desarrollado por Sun Microsystems, que
anteriormente también estuvo disponible para Linux

Basado en el proyecto Mad Hatter, que vio la luz a finales del 2003, el objetivo se centra en el desarrollo de un Linux
amigable acompañado de su Star Office y Java, además de Gnome, Mozilla, Evolution ó Gaim y está basado en
estándares abiertos.

En un principio Java Desktop System se basaba en la distribución Suse, que fue comprada a posteriori por Novell, pero
más tarde los ejecutivos de Sun decidieron que Java Desktop System se base en Solaris, su otro sistema operativo.
Así los planes de Sun incluyen de esta manera unificar el interfaz de usuario de sus sistemas basados en Linux con los
basados en Solaris. Para algunos críticos sólo es un intento por ganar algunos usuarios para Solaris y, a largo plazo,
ofrecer una versión unificada en el escritorio de equipos personales y estaciones de trabajo. Quizás sea un adelanto de
la tan discutida liberación de Solaris.

Gnome#

El proyecto GNOME (GNU Network Object Model Environment) surge en agosto de 1997 como proyecto liderado por
los mexicanos Miguel de Icaza y Federico Mena para crear un entorno de escritorio completamente libre para sistemas
operativos libres, en especial para GNU/Linux. Desde el principio, el objetivo principal de GNOME ha sido proporcionar
un conjunto de aplicaciones amigables y un escritorio fácil de utilizar. GNOME también es una palabra del idioma inglés
que significa gnomo.

En esos momentos existía otro proyecto anterior con los mismos objetivos, pero con diferentes medios: KDE. Los
primeros desarrolladores de GNOME criticaban a dicho proyecto por basarse en la biblioteca de controles gráficos Qt,
cuya licencia (QPL), aunque libre, no era compatible con la licencia GPL de la FSF.

Años más tarde los problemas de licencia de Qt se han resuelto y estas críticas han cesado. Sin embargo, los dos
proyectos siguen rumbos tecnológicos distintos y se hacen una competencia amigable.

Como con la mayoría de los programas GNU, GNOME ha sido diseñado para ejecutarse en toda la gama de sistemas
operativos de tipo Unix con X Window, y especialmente pensado para GNU/Linux. Desde sus inicios se ha utilizado la

19 de 20 23/11/11 15:32
Estructuras Linux - Base de Conocimiento http://www.linuxparatodos.net/web/comunidad/base-de-...

biblioteca de controles gráficos GTK, originalmente desarrollada para el programa The GIMP.

A medida que el proyecto ha ido progresando en los últimos años, los objetivos del mismo se han extendido para tratar
una serie de problemas en la infraestructura Unix existente. Diseñado originalmente para Linux, GNOME ahora
funciona en la mayoría de sistemas tipo Unix y particularmente ha sido adoptado por Sun Microsystems como parte del
escritorio Java, sustituyendo el antiguo escritorio común de su plataforma Solaris. Es el entorno de escritorio por
omisión para muchas distribuciones de escritorio modernas de GNU/Linux, incluyendo Fedora y Ubuntu. Una lista de
las distribuciones de Linux que incluyen GNOME se mantiene en la Web de GNOME. Existe una versión oficial de
GNOME para los llamados LiveCD, que permite que un computador arranque directamente desde el CD-ROM y así
poder probar y disfrutar el escritorio. Muchos componentes de GNOME han cambiado hacia a Cygwin permitiendo que
las aplicaciones de GNOME funcionen en Microsoft Windows.

KDE#

KDE (K Desktop Environment) es un entorno de escritorio gráfico e infraestructura de desarrollo para sistemas Unix y,
en particular, Linux. La 'K', originariamente, representaba la palabra "Kool", pero su significado fue abandonado más
tarde. Actualmente significa simplemente 'K', la letra inmediatamente anterior a la 'L' (inicial de Linux) en el alfabeto.
KDE es distribuido junto a muchas distribuciones Linux.

KDE imitó a CDE (Common Desktop Environment) en sus inicios. CDE es un entorno de escritorio utilizado por varios
Unix. KDE se basa en el principio de la personalización. Todos los componentes de KDE pueden ser configurados en
mayor o menor medida por el usuario. Las opciones más comunes son accesibles en su mayoría desde menús y
diálogos de configuración. Los usuarios avanzados pueden optar por editar los archivos de configuración
manualmente, obteniendo en algunos casos un mayor control sobre el comportamiento del sistema.

La intención del proyecto KDE es la de crear un entorno gráfico que no se comporte de un modo predefinido, sino que
permita al usuario adecuar el sistema a su gusto y comodidad. Esto no impide que KDE resulte fácil de usar para
nuevos usuarios, detalle al que no se resta importancia.

0 archivos adjuntos 9844 Accesos

Promedio (0 Votos)

Comentarios

20 de 20 23/11/11 15:32

También podría gustarte