Está en la página 1de 84

Administración de sistema Linux

Introducción
Orden de arranque
En primer lugar, cuando enciendes el ordenador, arranca la BIOS. Esta se encarga
de leer los primeros 512bytes del dispositivo de arranque que tenga configurado.
Aquí, en el mbr, durante la instalación de linux, has instalado un el programa que
le indica a la bios que se vaya a leer el fichero de la partición que le hayas dicho en
la instalación. /boot/grub/grub.conf
Así pues, el siguiente proceso ya está en manos del gestor de arranque. En tu caso
es el grub que te dejará elegir entre los sistemas operativos que haya en el fichero
grub.conf.
En el caso de que elijas linux, el gestor de arranque buscará un fichero llamado
/boot/vmlinuz que es el kernel del sistema operativo y otro llamado /boot/initrd
que es una imagen comprimida de un sistema de archivos temporal. Se cargan en
memoria y se configuran los distintos dispositivos, procesadores, subsistemas de
entrada/salida, etc. Posteriormente, se inicia el programa: init que se encarga de
montar el sistema de archivos real y terminar el proceso de arranque, para lo cual,
lee el fichero /etc/inittab que es el que indica el nivel de ejecución.
Niveles de ejecución
Los niveles de ejecución son procesos que ejecuta un sistema para llegar a
un estado. Un sistema puede estar en distintos estados:
Cuando se inicia un estado, por ejemplo, tras arrancar, se ejecutan los scripts propios de ese
estado. Estos scripts o programas son los ubicados en el directorio: /etc/rc.d/rc?.d/ donde ? es
el nivel de ejecución establecido en /etc/inittab. En concreto, se ejecutarán todos los
programas que se empiecen por S (Start).
La orden de /etc/inittab que determina el nivel de arranque viene dada por la línea:

 id:5:initdefault:
Cuando se apaga el ordenador, es decir, cuando se llama al estado 0, lo que se hace es ejecutar
todos los programas de la misma ruta (/etc/rc.d/rc?.d/) que empiezan por K (Kill). Así, pues,
cuando cambies de estado, p.ej. del estado 3 al 5, se ejecutarán primero los programas:
/etc/rc.d/rc3.d/K... y luego los programas: /etc/rc.d/rc5.d/S... O sea, primero se cierran los
programas propios del estado 3 y luego se arrrancan los programas propios del estado 5.
Puedes cambiar del nivel actual a otro, p.ej el 1 de la forma:

 init 1
para volver:

 init 5
Continuación de orden de arranque

Init, lee el archivo /etc/ttytab para ver cuantas terminales hay, y mediante fork crea un
proceso hijo para cada terminal. Cada proceso hijo ejecuta getty, que es quien imprime
el prompt del login y obtiene el nombre de usuario. Cuando el usuario entra al sistema,
se ejecuta login con el nombre como argumento y se ejecuta el Shell de ese usuario.
Si el nombre de usuario y la clave fueron correctos, arranca el proceso shell: éste
programa corre como cualquier otro proceso en el sistema.
El más conocido esel programa bash pero existen otros shells, por ejemplo csh(C Shell),
ksh(KornShell), sh(BourneShell), tcsh, zsh, ash.
El shell del usuario se especifica en el /etc/passwd, generalmente sh.
Es así, que el shell es hijo del init, los procesos de usuario los nietos, y todos los
procesos forman parte de un mismo árbol.
En los sistemas operativos GNU Linux, para visualizar ese arbol podemos hacerlo a
través del comando pstree. Por ejemplo, ejecutamos pstree -pl, donde los argumentos p
y l, respectivamente muestran los pid de los procesos y no truncan líneas largas.
EL FICHERO
/etc/profile, .bash_profile, .bashrc, .bash_logout
Existen tres ficheros en el directorio de un usuario que tienen un significado especial
para el shell Bash. Estos ficheros permiten al usuario configurar el entorno de su
cuenta automáticamente cuando entra en el sistema, cuando arranca un subshell o
ejecutar comandos cuando sale del sistema.
Los nombres de estos ficheros son .bash_profile, .bashrc y .bash_logout. Si ninguno
de estos ficheros existe en el directorio del usuario, /etc/profile es utilizado por el
sistema como fichero de configuracion de bash.
.bash_profile es el mas importante de los tres. Es leido y los comandos incluidos en
el, ejecutados, cada vez que el usuario entra en el sistema. Cualquier cambio hecho en
este fichero no tendrá efecto hasta que salgamos y entremos en el sistema de nuevo.
Una alternativa para no tener que salir del sistema es ejecutar el
comando:source .bash_source.
Bash permite dos sinónimos para este fichero, .bash_login (derivado del C
shell) y .profile (derivado del Bourne y Korn shell). Si .bash_profile no
existe, el sistema buscara primero .bash_login y luego .profile. Solamente
uno de estos ficheros es leído, en el caso que existan simultáneamente.
Éste fichero siempre se encuentra en el directorio HOME de cada usuario.
La otra forma de loguearnos es: su nombre_usuario De ésta manera
estaremos cambiando de usuario pero sin cargar el fichero .profile.
En definitiva, el archivo .profile permite realizar tareas que deseemos hacer
cada vez que nos logueemos y puede resultar extremadamente útil, pudiendo
llegar a hacer montones de cosas, simplemente sabiendo comandos de
Linux/UNIX.
Variables de entorno
Las variables de entorno son unos valores, etiquetados con un nombre (para
los que sepan programar: variables de las de toda la vida; el nombre de de
entorno es porque definen el entorno de trabajo, no por otra cosa).
Convencionalmente, los nombres de las variables se ponen en mayúsculas.

Las variables de entorno tienen tres usos básicos:


Usarlos para escribir menos, o tener valores fijos. Si no entiendes esto,
probablemente no te sirva. Tampoco es que se utilicen mucho.
Variables que consulten otros programas. Esto es importante, y estas variables, para
que las vean otros programas, tenemos que exportarlas (lo explico luego).
Variables para consultar, que generalmente no se modifican. Por ejemplo, dan
información sobre el directorio raíz del usuario.
Variables más comunes
l
Continuación variables de entorno

Variable PATH
EL PATH es una variable de entorno que contiene un grupo de directorios
predefinidos en los cuales el shell buscará el comando o programa a ejecutar. Esto
ahorra tiempo ya que el sistema no tendrá que buscar en todos los directorios el
programa a ejecutar. Por esto el sistema, en caso de que el directorio no figure en el
PATH, no podrá ejecutar el programa hasta que le demos la ruta exacta en donde se
encuentre.
Esta variable de entorno llamada PATH, es inicializada con un valor predeterminado
en el archivo /etc/profile que es sólo modificable por el "root" y funciona como una
referencia para todos los usuarios. Además cada usuario posee en un archivo oculto
denominado .bash_profile o .profile, donde se le asigna además del PATH inicial,
cualquier otra modificación exclusiva para él. También puede modificarse totalmente
esta variable.
Igualmente para poder ejecutar directamente un programa que
se encuentra en el directorio en que estamos parados
actualmente :
 Para empezar tienes que comprobar si tu fichero tiene permiso de
ejecución y si no le tiene asignárselo. Una vez realizada esta
comprobación tienes dos formas de ejecutar tu fichero:
 Utilizando la siguiente sintaxis: ./nombre donde nombre es el nombre
del fichero.

 Poniendo delante el nombre del shell con el que lo vas a ejecutar


y seguido el nombre del fichero:
Ejemplo: bash nombre_fichero ó sh nombre_fichero.
Variables de shell
Para visualizar todas las variables de entorno ejecutar el comando: env
Una variable de shell es una zona de almacenamiento de información
con un nombre que la identifica. Para no liarnos mucho, es similar a un
variable en lenguaje C. Podemos asignar un valor a una variable
mediante el operador “=“. Si la variable no existe el operador “=“ la
crea. No se debe dejar espacio entre el nombre de la variable y el
operador de asignación (=).
Para usar el valor de una variable es necesario anteponerle el símbolo $
delante de la variable.
 Ejemplos:
 $ AA=Hola que tal
 $ echo $AA
Shell y subshell
Podemos abrir una nueva shell simplemente ejecutando el fichero binario que contiene la shell.
También, cuando ejecutamos un script se abre una nueva shell que es la encargada de ir
interpretando las diferentes órdenes y de mantener el valor de las variables definidas. Esta
subshell tiene como tiempo de vida el tiempo de ejecución del script. Además esta subshell
hereda el valor de parte de las variables de entorno, pero en su propio espacio de memoria, por lo
que las modificaciones de cualquier variable de la nueva shell no tendrá repercusión en la shell
padre.

Cerrar una shell


Para cerrar una shell usamos la orden exit. Esta orden termina la ejecución de la shell y vuelve a
la shell padre. Si ejecutamos la orden exit sobre la shell inicial que abrimos al entrar al sistema
(llamada login shell) entonces terminamos la sesión de trabajo.

Variables exportadas
En el apartado anterior, veíamos que una subshell hereda parte de las variables definidas en la la
shell padre. Para que las shell hijas de una dterminada shell hereden una variable es necesario
indicarlo explícitamente con la orden export. Por ejemplo, si queremos que el valor de la
variable EDITOR pase a las subshell que sean hijas de la shell activa, tendremos que poner
$ export EDITOR o $ export EDITOR=vi
Ejemplos:
 Asignar la palabra contenido a una variable llamada AA
$ AA=contenido
 Mostrar el contenido de la variable en pantalla.
$ echo $AA
 Abrir una shell hija de la anterior.
$ /bin/bash
 Mostrar de nuevo el contenido de la variable
$ echo $AA
 Salir de la subshell activa
$ exit
 Mostrar de nuevo el contenido de la variable
$ echo $AA
 Exportar la variable
$ export AA
 Abrir una shell hija de la anterior.
$ /bin/bash
 Mostrar de nuevo el contenido de la variable
$ echo $AA
Comillas
 Este punto viene bien aclararlo antes de empezar a ver características de alias y script para no
tener complicaciones y confusiones. En GNU/Linux existen tres tipos de comillas: las dobles
("), comillas sencillas (') y comillas inversas o tics inversos (`). Empezaremos con las comillas
inversas. Estas indican al shell que tendrá que remplazar lo que esta encerrado entre ellas con
su resultado. Supongamos que quisiéramos ver solamente el día de hoy. Entonces teclearíamos
el comando
 [shrek@pantano:~]$ date +%d
 15

 Ahora bien, cada vez que quisiéramos ver el día de hoy tendríamos que ingresar este comando
nuevamente. Si le asignamos a una variable de entorno el resultado, solo tendríamos que
mostrar esta variable.
 [shrek@pantano:~]$ DIAHOY=`date +%d`
 [shrek@pantano:~]$ echo $DIAHOY
 15

 Hay que tener en cuenta que para asignarle un valor a una variable tenemos que solo poner un
nombre seguido del signo "=" y luego lo que queramos ponerle dentro. En cambio para
mostrarla tendremos que anteponer el signo de dólar "$". Esto seria igual a poner
El otro tipo de comillas, la sencilla ('), le dice al sistema que no haga ninguna
expansión.
[shrek@pantano:~]$ DIAHOY='date +%d'
[shrek@pantano:~]$ echo $DIAHOY
date +%d
El ultimo tipo de comillas son las dobles, este tiene casi la misma
funcionalidad que las comillas simples pero con la salvedad de que lo que se
incluya dentro de estas estará sujeto a expansión por parte del shell, siendo los
caracteres con significado especial los tics inversos (`) el signo de dólar ($), la
diagonal (\) y las mismas comillas dobles ("). Por ejemplo podríamos ingresar
el siguiente comando
[shrek@pantano:~]$ echo "`date`"
Sat Apr 15 14:17:01 ART 2000
Alias
La utilización de alias nos da la capacidad de poder referenciar a un comando con otro
nombre. La diferencia sustancial que podemos encontrar con los script de shell, es que los
script para ejecutarse primero lanzaran a un subshell como un proceso hijo del shell que esta
ejecutando en ese momento. En cambio un alias funciona en el proceso del shell siendo
ejecutado en forma interna con la subsiguiente velocidad que esto otorga al no tener que
crearse un nuevo proceso o de buscar en el disco rígido.
Crear un "alias" al comando "date" con el modificador correspondiente:
[shrek@pantano:~]$ alias hora='date +%r'
[shrek@pantano:~]$ hora 02:45:04 PM
Ahora bien, esto funcionará mientras estemos en el sistema, ya que estos datos son cargados
en memoria y al salir del sistema se perderán. Para que cada vez que entremos al sistema los
alias sigan funcionando deberemos agregarlos a un archivo, que aparece en forma oculta en
el directorio de cada usuario, denominado .bashrc o en caso de que se requiera que el alias
funcione para todos los usuarios en el /etc/bashrc. Este archivo es leído por el /bin/bash cada
vez que se entra al sistema. En él se tendrá que poner la línea alias en igual forma que lo
haríamos en la interfaz de comandos.
Procesos

Control, Administración
y Monitorear los Jobs del
Shell, Procesos y
Prioridades
Job Control
Los shells ofrecen control job
 La habilidad de parar, reiniciar, y enviar al segundo plano (background) los
procesos en ejecución
El shell te permite poner un & al final de la línea de comando para iniciarlo en el
segundo plano
También puedes presionar Ctrl+Z para suspender un trabajo ejecutándose en primer
plano
Trabajos suspendidos y enviados a segundo plano son asignados un número por el
shell
Estos números se pueden pasar como argumentos a comandos del shell de control de
trabajos
Estos comandos de Control-de-Trabajo incluyendo: jobs, fg, y bg
Los jobs
 El comando del shell jobs imprime los trabajos activos, su estatus y número de
job:
 $ jobs
 [1]- Stopped vim index.html
 [2] Running netscape &
 [3]+ Stopped man ls
·Los números de los trabajos (Job) se dan en corchetes cuadrados
 Al usarlo en combinación con otros controles de trabajos, necesitas
precederles con un símbolo de por ciento, por Ejemplo %1
 Los trabajos marcados con + y - pueden ser accesados con %+ o %- y también por sus
números
 %+ es como el shell denomina el trabajo actual - el trabajo más
recientemente activo
 %- es el trabajo previo al trabajo actual
El Primer Plano: fg
Trae trabajos desde el (background) segundo plano al primer (foreground)
Reinicia un trabajo suspendido, ejecutando el el primer plano
fg %1 - Trae el trabajo número 1 al primer plano
fg sin argumentos opera sobre el trabajo actual

El Segundo Plano: bg
Reinicia un trabajo suspendido, ejecutándolo en segundo plano
bg %1 - Lleva el trabajo número 1 al segundo plano
bg sin argumentos opera sobre el trabajo actual
Ejemplo, después de ejecutar gimp y suspenderlo con Ctrl+Z, use bg para
ejecutarlo en background
Crear, Monitorear, y Eliminar (Kill)
Procesos
¿Que es un Proceso?
El kernel considera cada programa ejecutándose en el sistema
como un proceso
Un proceso ‘vive’ durante su ejecución, con un tiempo de vida que
puede ser corto o largo
Se dice que un proceso ‘murió’ cuando el termina
El kernel identifica cada proceso con un número conocido como un
id del proceso, o pid
El kernel mantiene un record de las propiedades de varios procesos
Propiedades de los Procesos
Un proceso tiene un id de usuario (uid) y uno de grupo (gid) cual juntos especifican
permisos que tienen.
Un proceso tiene un id de proceso padre (ppid) - cual es el pid del proceso que lo
creo
 El kernel inicia el proceso init con el pid 1 al arranque
 Todos los demás procesos son hijos del proceso con el pid 1
Cada proceso tiene su propio directorio de trabajo (working directory), inicialmente
heredado del proceso padre
Existe un ambiente (environment) para cada proceso - una colección de variables
de ambiente y sus valores asociados
 El ambiente es normalmente heredado de su proceso padre
Monitoreando Procesos: ps
 El comando ps nos da un vistazo a los procesos ejecutándose en el sistema en un
momento dado
 Opciones de ps
 Algunas de las más comunes son:
 Opciones Descripción
• -a Muestra los procesos de otros usuarios
• -f Muestra los procesos en un formato de árbol ancestral
• -u Utiliza el formato de salida ‘usuario’, muestra nombres de
usuarios y tiempo de inicio delos procesos
• -w Usa un formato más ancho de salida. Normalmente se recorta
cada línea de la salida; cada uso de la opción w hace que la ventana
sea más ancha
• -x Incluir procesos que no poseen el terminal de control
• -e Muestra información de todos los procesos
• -l Usa el formato ‘largo’ de salida
• -f Usa el formato ‘completo’ de salida
• -C comando Muestra solo el proceso asociado con el comando
• -U usuario Muestra solo los procesos que usuario es el dueño
Monitorear Procesos: pstree
Despliega una vista de los procesos en ejecución
Siempre utiliza un desplegado tipo árbol, como ps -f
 Por defecto solo muestra el nombre de cada comando
Normalmente muestra todos los procesos
 Especifique un número pid como argumento para mostrar un proceso
en particular y sus descendientes
 Especifique un nombre de usuario como argumento para mostrar el árbol
de procesos del usuario
Opciones pstree
-a Muestra los argumentos de los comandos
-c No compactar sub-árboles idénticos en contenido
-G Intenta utilizar caracteres de pantallas específicos al
terminal
-h Resalta los procesos ancestrales del proceso actual
-n Ordena numéricamente por pid, y no alfabéticamente por
nombre
-p Incluir pids en la salida
Monitorear Procesos: top
Muestra continuamente en pantalla completa, vista de actividad de los
procesos en ejecución
 Espera un lapso de tiempo para refrescar la pantalla y así crear la
ilusión de ejecución en tiempo real
Los procesos se muestran en orden descendiente de su uso de recursos del
procesador
También muestra tiempo que el sistema esta en uso, average de carga,
estatus del CPU, y información de memoria
Opciones del comando top
-b Modo Batch - envía una vista (snapshots) a la salida estándar
-n número Sale después de mostrar número de vistas
-d número Espera número de segundos entre las vistas
-i Ignora los procesos inactivos (idle)
-s Deshabilita comandos interactivos, puede ser
peligroso si ejecuta como el root
Interactuando con el comando top
q Sale del Programa
Ctrl+L Redibuja la pantalla
h Muestra pantalla de ayuda
k Pide interactivamente un pid y una señal, y le
envía la señal al proceso
n Pide interactivamente por el número del
proceso para mostrar la información; 0 (el por
defecto) significa mostrar los que caben
R Cambiar la prioridad (niceness) de un proceso
s Cambia el número de segundos ha pausar
entre actualizaciones. Se puede incluir fracciones de
tiempo segundo (0.5, por ejemplo)
Enviar Señales a los Procesos
A un proceso se le puede enviar una señal por el kernel o otro
proceso
Cada señal es un mensaje muy simple:
 Un número entero pequeño
 Con un nombre de mnemónico
Los nombres de las señales se escriben todos capitalizados, ejemplo
INT ; a menudo se escriben con la parte SIG como parte del
nombre: SIGINT
Algunas señales son tratadas especialmente por el kernel; otras
tienen un significado convencional
Existen unas 30 señales disponibles, no todos son muy útiles
Señales Comunes Para Uso Interactivo
El comando kill -l lista todas las señales
La siguiente son las más usadas:
Enviar Señales: kill
El comando kill se usa para enviar una señal a un proceso
Es un comando ejecutable normal, pero muchas shells también lo
proveen como un comando interno
Sintaxis:
 kill [# señal] <PID>
·Use kill -HUP pid o kill -s HUP pid para enviar un SIGHUP al
proceso con este pid. S
 SIGHUP (1) : esta señal del comando kill provoca que el proceso vuelva a
leer sus archivos de configuración.
Si no incluyes el nombre de la señal, el comando kill enviara un SIGTERM
Puedes especificar más de un pid para enviarle señal a más de un proceso
Puede ponerse el número de señal en lugar de su nombre
Ejemplo: las tres siguientes órdenes son equivalentes
 kill 19800
 kill -15 19800
 kill –SIGTERM 19800
Modificar Prioridades de Procesos:
No todas las tareas requieren el mismo monto de tiempo de ejecución
GNU/Linux tiene el concepto de prioridad de ejecución para esta
situación
La prioridad de los Procesos son dinámicamente alterado por el kernel
Puedes ver la prioridad actual de un proceso con top o ps -l y observar
la columna PRI
La prioridad pueden ser alteradas usando el comando nice
 La asignación alterada por nice se ve en la columna NI
del comando top
El comando nice:
Inicia un programa con una prioridad alterada
Nombre extraño: procesos con ‘nice’ aplicado requieren menos recursos
El rango de nice es desde +19 (muy nice) a -20 (no muy nice)
Usuarios que no son root solo pueden especificar rangos desde 1 al 19;
el root tiene el rango completo
El valor por defecto de nice es 10
Para ejecutar un comando con su nice incrementada (prioridad
reducida):
$ nice -10 comando-de-ejecución-prolongada &
$ nice -n 10 comando-de-ejecución-prolongada &
Para ejecutar un comando con su nice reducida (prioridad más alta):
$ nice --15 comando-importante &
$ nice -n -15 comando-importante &
El Comando renice
El comando renice cambia el nivel de nice de un proceso
existente
Los usuarios no son permitidos incrementar el nivel de nice
de un proceso
Para ajustar el proceso con pid 2984 al máximo de nice de el
(reducir su prioridad):
$ renice 20 2984
Para ajustar el proceso con pid 3598 a un nice más bajo
(con prioridad más alta):
$ renice -15 3598
 También puedes cambiar el nivel de nice de todos los
procesos de un usuario:
$ renice 15 -u miguel
Ejercicios
Ejercicio 1
1) Inicie un proceso ejecute man find y suspéndalo con Ctrl+Z.
2) Ejecute xclock en background, use &
3) Use jobs para listar los trabajos en segundo plano y los procesos
detenidos.
4) Use el comando fg para traer a man find al primer plano; salga de el
normalmente con "q"
5) Use fg para traer a xclock al foreground, y termínelo con Ctrl+C
6) Ejecute xclock nuevamente, pero esta vez sin el &. Debe estar
ejecutándose en el foreground
(no podrás utilizar el shell). Suspéndalo con Ctrl+Z y observe que sucede.
Para apropiadamente ejecutarlo en el background, use bg.
Ejercicio 2
1) Use top para mostrar los procesos en ejecución en su computador.
2) Ejecute a top para que ordene por el uso de la memoria, para que los
procesos que usan más
memoria estén arriba.
3) Restrinja para que solo se muestren los procesos que usted es el dueño.
4) Intente matar (kill) uno de sus procesos (asegúrese de no ser nada
importante).
5) Muestre una lista completa de los procesos ejecutándose en su maquina
utilizando ps.
6) Muestre la misma lista pero en forma de árbol, usando ambos ps y
pstree.
7) Logre que ps ordene la salida por el tiempo de uso del sistema.
Ejercicio 3
1) Cree el siguiente script shell, llámelo siempre, en su directorio home:
#!/bin/sh
n=1
while test $n –eq 1
do
echo hola todos...
done
Hazlo ejecutable y ejecútelo en el background así:
$ chmod a+rx siempre
$ ./siempre &
2) Use el comando ps -l para revisar el nivel de nice del archivo
3) Ejecuta el script con nice y asignarle un nivel de 15. Intenta ejecutarlo al lado de uno con
un nivel de nice menor, y ver la diferencia en top
4) Usando a nice o renice trate que el nivel de nice sea menos de 0, o sea negativo-
Mas comandos administrativos
l
DIAGNÓSTICO DE SISTEMA
Para diagnosticar el estado de un Linux de manera rápida:
Por consola: basta con utilizar 5 comandos básicos, en el
siguiente orden:
0. uname -a : nos dice la version de kernel, procesador, y nombre
de sistema
1. df : nos muestra la ocupación del disco duro.
2. free : nos muestra el uso de la memoria
3. ps -aux : nos muestra los procesos en curso
4. netstat -a : nos muestra las conexiones de red actuales
Otro programa muy útil para el diagnostico del sistema y las
conexiones de red sería IPTRAF que se ejecuta como iptraf o
/usr/bin/iptraf (en Ubuntu se encuentra en los backports, en
FEDORA esta en los repositorios Universe).
ESTADO DE DISCO: lo normal es que de un día para otro no aumente ni en un punto
porcentual, a no ser que tenga algún servicio concreto de estadísticas o BBDD. Si llega
al 90% hay que empezar a barrer el sistema de ficheros, localizar ficheros grandes, etc.
ESTADO DE PROCESOS: normalmente veremos una serie de procesos que van desde
el ID 1 al 600-700. Todos ellos son los iniciados al arrancar del sistema. El resto son
servidores iniciados posteriormente. El estado de los procesos en marcha suele mostrar
siempre el mismo aspecto, aunque cada servidor tendrá uno distinto. Conviene
conocerlo. En cuanto a la ocupación de la CPU ningún servicio suele ocupar mas de un
10% suele tener esos picos. Todo lo que tenga valores como 40% o mas se consideran
niveles anormales; puede tratarse de generadores de estadísticas. Un programa útil para
ver los porcentajes es top.
ESTADO DE MEMORIA: mientras quede RAM libre no hay problema. Un servidor
Linux incluso puede aguantar usando SWAP.
RESOLUCION DE PROBLEMAS

En general, los problemas pueden venir de tres


partes:
1.- Conectividad: problemas de conexión a red.
2.- Servidores: servicios que no funcionan
correctamente, no arrancan, etc..
3.- Sistema: discos duros llenos, errores de
dispositivos, kernel-panic, etc..
1.- Conectividad
Hay que asegurarse de que hay conectividad. Para ello
seguimos los siguientes pasos:
- Un ping continuo a la máquina.
- Intentar acceder a alguno de los servicios del equipo
(23, 22). Algunos máquinas pueden tener cerrado el ping
o los ICMP en general.
Si no hay conectividad, entonces es un problema que
deben solventar los responsables de las conexiones, y
determinar si es responsabilidad nuestra
2.- Servidores

Existen varios modos de verificar que los servicios están en marcha,


y los más prácticos son los siguientes:
-Comprobar que el proceso esta en marcha :
ps -axf | grep nombre_proceso
-Comprobar que el puerto que utiliza esta abierto:
netstat -ln | grep puerto
-Comprobar que el puerto responde correctamente:
telnet localhost 25 por ejemplo
-Comprobar que esta generando logs (en /var/log)
-Comprobarlo con el script de inicio:
/etc/rc.d/init.d/servicio status
A veces puede ocurrir que el proceso del servicio se pare nada mas iniciarse,
por eso conviene comprobar DOS veces que el proceso esta en marcha.
Proceso GENERAL de resolución

Este proceso describe el proceso genérico de resolución de problemas de


cualquier servidor de Linux:

0. Verificar si el servicio esta en marcha:


Se puede hacer con: service <servicio> status
/etc/rc.d/init.d/servicio status
ps -axf | grep servicio
netstat -ln | grep puerto_servicio
telnet localhost puerto_servicio

1. Si el servicio esta parado, iniciarlo directamente con:


/etc/rc.d/init.d/servicio start
2. Chequear dos veces si el servicio esta en marcha realmente.
3. En cualquier caso, si esta en marcha o parado, chequear los logs
correspondientes al servicio para verificar o comprobar errores.
4. Según la información que nos den los logs actuar en consecuencia.
De todas formas, cada servicio Linux tiene sus peculiaridades, por eso se describen
por separado a continuación.
Notas: debe tenerse en cuenta que los servicios dependen a veces de otros servicios
externos o internos, cosa que a veces puede provocar malentendidos.
Los servicios se pueden: iniciar (start), parar (stop), reiniciar (restart) y recargar la
configuración (reload), de la siguiente manera:
Administración de cuentas de
usuario
EL ADMINISTRADOR DEL SISTEMA
ESTA ENCARGADO DE LA
ADMINISTRACION DE LOS USUARIOS,
PRIVILEGIOS Y ASIGNACION DE
DIRECTORIOS Y SHELLS
ADICION, ELIMINACION,
ADMINISTRACION, AJUSTE,
DIRECTORIOS, SHELLS
La información asociada a los usuarios en un sistema Linux se
guarda en el fichero /etc/passwd y las contraseñas y datos
afines en /etc/shadow. Por su parte la información de los
grupos, sus miembros y passwords están en /etc/group y
/etc/gshadow respectivamente. (Vemos a la derecha un
ejemplo del fichero /etc/passwd).
Para crear un usuario se usa el comando useradd, aunque es
mucho mejor usar un script que viene instalado en Linux, que
se llama adduser. Este script controla como funciona useradd
y permite realizar funciones avanzadas, como crear
automáticamente el directorio del usuario, configurar su perfil,
etc.

31/05/11
Adición de un usuario
El resultado, será un registro dentro del archivo /etc/passwd.

/etc/passwd, tiene la siguiente forma:


nombre:contraseña:UID:GID:información_usuario:directorio_base:shell
nombre: es el nombre para entrar
contraseña: es un campo codificado que no se puede conocer.
UID: es un número asignado por el sistema operativo
GID: un nombre o número único para el grupo
información_usuario: nombre completo del usuario
directorio_base: es el directorio donde queda al entrar
shell: el shell del usuario (e.g. /bin/bash).
Si no queremos que un usuario pueda tener acceso a estos terminales, bastaría con
indicarle aquí un nombre falso, como por ejemplo /bin/false y de este modo este
usuario no podría interactuar con el sistema aunque realizara correctamente el login.
/etc/shadow
Este fichero consta de 8 campos separados por dos puntos.
Nombre :Contraseña: Ult.cambio :Mínimo :Máximo :Aviso:Inactivo:Caducidad

Contraseña es la auténtica contraseña del usuario aunque encriptada.


Esta contraseña hoy en día se representa en tres partes distintas,
separadas por el símbolo del dólar ($).
Id. Esto nos indica el método de encriptación que fue utilizado. Un
valor de 1 indica MD5, un valor de 2 Blowfish, 3 es NT Hash, 5 es
SHA-256 y 6 es SHA-512.
Salt. Este valor se usa por los algoritmos de encriptación y puede
ser de hasta 16 caracteres. Este valor se crea aleatoriamente en
cada generación de contraseña.
Hash. La contraseña en sí misma. MD5 usa 22 caracteres, SHA-
256 usa 43, y SHA-512 usa 86.
Si nos encontramos con un asterisco en este campo significa que la
cuenta está bloqueada. Lo mismo se puede conseguir colocando una
exclamación (!) al principio de la contraseña. Una cuenta sin contraseña
la veremos o bien con todo este campo en blanco, o bien con dos
exclamaciones consecutivas (!!).
Ult.Cambio nos indica el día en que se cambió la contraseña por última vez.
(Este número indica los días que han transcurrido desde el 1-1-1970).
Mínimo. El mínimo número de días que hay que esperar para cambiar la
contraseña.
Máximo. El máximo número de días antes de que la contraseña caduque.
Aviso. Antes de que la contraseña caduque, avisaremos al usuario al llegar
a este número de días.
Inactivo. Una vez que la contraseña caduque esperaremos este número de
días antes de bloquearla definitivamente.
Caducidad. Es una fecha, en la cual la cuenta automáticamente quedará
bloqueada. (Este número indica los días que han transcurrido desde el 1-1-
1970).

31/05/11
/etc/group, tiene la siguiente forma:
nombre de grupo:clave:GID:otros miembros
nombre de grupo: nombre del grupo
clave: contraseña para acceder a un grupo. Esto es raras veces necesario. Para
evitar el que los usuarios cambien a grupos privilegiados (con el comando
newgroup), se pone el campo de la clave a "*".
GID: número único para el grupo
otros miembros: usuarios que pertenecen al mismo grupo. Recuérdese que
en /etc/passwd cada usuario tiene un GID por defecto. Sin embargo, los
usuarios pueden pertenecer a mas de un grupo, añadiendo sus nombres de
usuario a otras líneas de grupo en /etc/group. El comando groups lista a qué
grupos se tiene acceso.
/ETC/GSHADOW
Este fichero consta de 4 campos separados por dos puntos.
Nombre del grupo:Contraseña: Administradores: Miembros

Contraseña. Una contraseña encriptada con las mismas


características que la existente en el fichero shadow. Si existe
una contraseña en un grupo, un usuario que se quiera
introducir como miembro del grupo tendrá que saber dicha
contraseña ya que el sistema se la pedirá (comando newgrp).
Si un grupo no tiene una contraseña, solo el root o los
administradores del grupo podrán asignar miembros a dicho
grupo.
Administradores. Una lista de usuarios separados por coma
que pueden añadir o eliminar miembros al grupo.
Miembros. Lista de miembros del grupo separados por coma.

31/05/11
COMANDO USERADD
El comando useradd permite añadir nuevos usuarios al
sistema, además de establecer la información por defecto de
los nuevos usuarios que se añadan. Se encuentra enlazado
simbólicamente por el nombre adduser. Ambos nombres se
pueden emplear indistintamente.
Sintaxis: useradd [opciones] [login]
Ejemplos:
adduser pepe crea el usuario pepe con las propiedades por
defecto
useradd -D muestra las propiedades por defecto de los
nuevos usuarios
adduser -D -b /dir cambia el directorio base por defecto de los
nuevos usuarios (/home) a /dir. El directorio /dir debe existir
previamente
adduser pedro amigos añade a pedro al grupo amigos. Esto
es una opción que se le añadió a adduser para
31/05/11
poder añadir
usuarios a grupos rápidamente.
COMANDO USERDEL
El comando userdel permite eliminar definitivamente un usuario del sistema.
Sintaxis: userdel [opciones] <login>
Ejemplo:
userdel -r pepe elimina al usuario pepe y borra su directorio base. Por defecto
el directorio base se mantiene

COMANDO PASSWD
El comando passwd permite cambiar el password de un usuario. También
puede bloquear, desbloquear y deshabilitar una cuenta. Si se invoca sin
argumentos se asume el usuario actual.
Sintaxis: passwd [opciones] [login]
Ejemplos:
passwd pepe coloca una contraseña para pepe
passwd -d pepe deshabilita la cuenta del usuario pepe eliminando su password
passwd -l pepe bloquea la cuenta del usuario.
passwd -u pepe desbloquea la cuenta del usuario pepe

31/05/11
COMANDO USERMOD
El comando usermod se emplea para modificar algunas propiedades de los
usuarios como: el login, el directorio base, el shell que se inicia al conectarse, los
grupos a los que pertenece, la fecha de expiración de la cuenta, etc. También
bloquea y desbloquea una cuenta.
Sintaxis: usermod [opciones] <login>
Ejemplos:
usermod -s /bin/csh pepe coloca el shell csh para el usuario pepe
usermod -G users,disk pepe señala como grupos secundarios de pepe a users
y disk
usermod -e 2001-10-20 pepe indica que la cuenta de pepe expirará el 20 de
octubre de 2001

COMANDO USERMOD
El comando usermod se emplea para modificar algunas propiedades de los
usuarios como: el login, el directorio base, el shell que se inicia al conectarse, los
grupos a los que pertenece, la fecha de expiración de la cuenta, etc. También
bloquea y desbloquea una cuenta.
Sintaxis: usermod [opciones] <login>
Ejemplos:
usermod -s /bin/csh pepe coloca el shell csh para el usuario pepe
usermod -G users,disk pepe señala como grupos secundarios de pepe a users y
disk
usermod -e 2001-10-20 pepe indica que la cuenta de 31/05/11
pepe expirará el 20 de
octubre de 2001
COMANDOS GROUPADD Y GROUPDEL
Los comandos groupadd y groupdel añaden y eliminan un grupo en el sistema
respectivamente.
Sintaxis: groupadd [opciones] <grupo> groupdel <grupo>
Ejemplos:
groupadd admin
groupdel admin

COMANDO GROUPMOD
El comando groupmod permite modificar en un grupo su identificador y nombre.
Sintaxis: groupmod [opciones] <grupo>
Ejemplo:
groupmod -n usuarios users cambia el nombre del grupo users a usuarios
COMANDO GPASSWD
El comando gpasswd permite administrar los grupos. Se puede utilizar para añadir
y eliminar usuarios, señalar un administrador e indicar un password de grupo.
Sintaxis: gpasswd [opciones] <grupo>
Ejemplos:
gpasswd -A pepe admin señala como administrador del grupo admin al usuario
pepe
gpasswd admin cambia el passwd del grupo admin
gpasswd -a joe admin añade el usuario joe al grupo admin
31/05/11
COMANDO SU
El comando su permite ejecutar un shell (u otro comando) cambiando los
identificadores del grupo y del usuario actual. Si se le pasa - como primer argumento
ejecuta el shell como un login shell, o sea se creará un proceso de login tal y como
ocurre naturalmente cuando un usuario se conecta al sistema. Si no se especifica el
login del usuario se asume root.
Sintaxis: su [opciones] [login]
Ejemplos:
su -
su pepe ejecuta un shell haciéndonos pasar por el usuario pepe
su -c "cat /etc/shadow" ejecuta un comando con los privilegios de root en lugar de
un shell

31/05/11
COMANDO SUDO
El programa sudo es una utilidad de los sistemas operativos tipo Unix, como
GNU/Linux, BSD, o Mac OS X, que permite a los usuarios ejecutar programas con los
privilegios de seguridad de otro usuario (normalmente el usuario root) de manera
segura.
Los usuarios deben confirmar su identidad al ejecutar sudo dando su propia
contraseña antes de ejecutar el programa requerido. Una vez se ha autenticado el
usuario, y si el archivo de configuración /etc/sudoers permite dar al usuario acceso al
comando requerido, el sistema lo ejecuta y lo registra.
En un entorno gráfico, se usa gksudo.
El archivo de configuración /etc/sudoers especifica qué usuarios pueden ejecutar qué
comandos en nombre de qué otros usuarios. Como sudo es muy estricto con el
formato de este archivo, y cualquier error podría causar problemas serios, existe la
utilidad visudo; ésta permite al usuario root editar el archivo y luego revisar su
corrección antes de guardarlo.

31/05/11
COMANDO NEWGRP
El comando newgrp permite iniciar un nuevo shell cambiando el identificador
del grupo (gid) del usuario actual. Sólo podrán hacerlo los usuarios que
pertenezcan al grupo o en caso de que este tenga una contraseña, aquellos
que la conozcan.
Sintaxis: newgrp [grupo]
Ejemplo:
newgrp bin

COMANDO ID
El comando id, imprime dado un usuario, sus identificadores de usuario y de
grupo principal (gid y uid) así como del resto de los grupos a los que
pertenece. Sin argumentos se asume el usuario actual.
Sintaxis: id [opciones] [login]
Ejemplo:
id pepe

31/05/11
Otros comandos para la
administración de usuarios como
UBUNTU

31/05/11
Comandos adduser, addgroup
añade un usuario o grupo al sistema

adduser y addgroup añaden usuarios al sistema de acuerdo a las opciones de


la línea de órdenes y a la configuración en /etc/adduser.conf. Pro ‐
porcionan una interfaz más amigable para los programas useradd y
groupadd , eligen valores para UID y GID conformes con las normas de
Debian, crean un directorio personal con la configuración predetermi ‐
nada, ejecutan un script personalizado y algunas otras cosas. adduser y
addgroup pueden ejecutarse de cinco maneras distintas:
1. adduser [options] [--home DIR] [--shell|-s SHELL] [--no-create-home]
[--uid ID] [--firstuid ID] [--lastuid ID] [--ingroup GROUP | --gid ID] [--
disabled-password] [--disabled-login] [--gecos GECOS] user
2. adduser --system [opciones] [--home DIR] [--shell
SHELL] [--no-cre‐ ate-home] [--uid ID] [--group | --ingroup
GRUPO | --gid ID] [--dis‐ abled-password] [--disabled-
login] [--gecos GECOS] usuario
3. adduser --group [opciones] [--gid ID] grupo addgroup
[opciones] [--gid ID] grupo
4. adduser --group --system [opciones] [--gid ID] grupo
addgroup --system [opciones] [--gid ID] grupo
5. adduser [opciones] usuario grupo
Ejemplo sin argumentos
neptuno:~# adduser
Adding a new user. The username should not exceed 8 characters
in length, or you may run into problems later.
Enter login name for new account (^C to quit): cmeneses
Editing information for new user [cmeneses]
Full Name: Carlos Meneses del Arco
GID [100]:100
Group 'users', GID 100
First unused uid is 704
UID [704]: 704
Home Directory [/home/cmeneses]: /usuarios/externos/cmeneses
Shell [/bin/bash]: /bin/bash
Password [cmeneses]: XXXXXX
Information for new user [cmeneses]:
Home directory: [/usuarios/externos/cmeneses] Shell: [/bin/bash]
uid: [704] gid: [100]
Is this correct? [y/N]:y
Addgroup puede ejecutarse de las siguientes maneras:
addgroup [options] [--gid ID] nombre_grupo
addgroup --system [options] [--gid ID] nombre_grupo
Añadir un grupo de usuarios si se invoca adduser con la opción --group y sin
las opciones --system o addgroup respectivamente, añadirá un grupo de
usuarios. Se elegirá un GID de entre el rango especificado para los UID de
usuario en el fichero de configuración. El GID puede modificarse con la
opción --gid. El grupo se creará sin usuarios.
Añadir un grupo del sistema Si se invoca adduser con la opción --system se
añadirá un grupo del sistema. A GID will be chosen from the range specified
for system UIDS in the configuration file. The GID can be overridden with
the --gid option. El grupo se creará sin usuarios.
Comandos deluser, delgroup
añade un usuario o grupo al sistema
deluser y delgroup elimina usuarios y grupos del sistema de acuerdo a las
opciones en línea de órdenes y a la configuración en /etc/deluser.conf
y /etc/adduser.conf. pueden ejecutarse de tres maneras:
1. deluser [opciones] [--remove-home] [--home DIR] [--remove-all-
files] [--backup] [--backup-to] usuario
2. deluser --group [opciones] grupo
delgroup [opciones] [--only-if-empty] grupo
3. deluser [opciones] usuario grupo
EMPAQUETANDO Y COMPRIMIENDO

31/05/11
EMPAQUETANDO Y COMPRIMIENDO
Comprimir Datos: consiste en la reducción del volumen de información tratable
(procesar, transmitir o grabar). En principio, con la compresión se pretende
transportar la misma información, pero empleando la menor cantidad de espacio.
El espacio que ocupa una información codificada (datos, señal digital, etc.) sin
compresión es el cociente entre la frecuencia de muestreo y la resolución. Por
tanto, cuantos más bits se empleen mayor será el tamaño del archivo. No obstante,
la resolución viene impuesta por el sistema digital con que se trabaja y no se puede
alterar el número de bits a voluntad; por ello, se utiliza la compresión, para
transmitir la misma cantidad de información que ocuparía una gran resolución en
un número inferior de bit.
Empaquetar Archivos: Juntar dos o más archivos en un solo archivo se le llama
paquete.
EL EMPAQUETADOR UNIVERSAL: TAR

El comando tar es utilizado normalmente para empaquetar o desempaquetar


ficheros; empaquetar significa guardar en un único fichero una lista de varios
ficheros, o el contenido de todo un directorio (o varios directorios). El formato del
comando tar es:
tar [opciones] [fichero1][fichero2]...[ficheroN]
Opciones
c: Crea un nuevo archivo tar.
v: Modo verbose, quiere decir que mostrará por pantalla las operaciones que va
realizando archivo por archivo, si no se pone esta opción ejecutará la acción pero
en pantalla no veremos el proceso.
x: Extrae los archivos (Descomprime los ficheros que se encuentran dentro del
archivo tar).
t: Nos muestra el contenido del archivo tar. Esto es cuando tu
deseas saber que es lo que contiene ese archivo sin necesidad de
desempaquetarlo.
p: Mantiene los permisos originales de los archivos.
f: Cuando se usa con la opción -c, usa el nombre del archivo
especificado para la creación del archivo tar; cuando se usa con la
opción -x, retira del archivo el archivo específico.
z: Comprime el archivo tar con gzip.
j: Comprime el archivo tar con bzip2.
Ejemplos:
Empaquetar: tar -cvf archivo.tar /dir/a/comprimir/
Desempaquetar: tar -xvf archivo.tar
Ver contenido: tar -tf archivo.tar
GZIP (GNU ZIP)[ .gz ]:
Permiten compactar y descompactar respectivamente uno o varios
ficheros. No se debe confundir gzip con ZIP, el cual no es
compatible. gzip no archiva ficheros, sólo los comprime. Debido
a esto a menudo se usa junto con alguna herramienta para archivar
(popularmente tar). El formato del comando gzip es:
gzip [opciones] [fichero1][fichero2]...[ficheroN]

Opciones
-d Descomprime un archivo comprimido con gzip.
-l Muestra información sobre el archivo comprimido que le
pasemos como parámetro.
-r A esta opción se le pasa como parámetro un directorio. Gzip
navegara por ese directorio de forma recursiva y comprimirá todos los
archivos que encuentre dentro de la estructura de directorios.
-t Comprueba que un archivo comprimido con gzip este correcto. Si se
encuentra bien no muestra ningún error y si lo encuentra nos informa de
cual es el problema.
-v Muestra el nombre y el porcentaje de reducción por cada fichero
comprimido o descomprimido. Muestra el número de versión, y las
opciones de compilación de este:1 ó 9. El 1 aumenta la velocidad pero
disminuye el total de compresión, así se puede ir subiendo hasta 9
donde la velocidad de compresión es lenta pero la cantidad de bytes
reducidos es mayor.
Ejemplos:
Comprimir: gzip -9 fichero
Descomprimir: gzip -d fichero.gz
(gzip solo comprime archivos, no directorios)
Ejemplos
gzip -9 archivo.tar El resultado será archivo.tar.gz.
Para comprimir, puedes poner gzip -d y el nombre del archivo gz
a descomprimir:
gzip -d archivo.tar.gz
En esta ocasión archivo.tar.gz será descomprimido y reemplazado
por archivo.tar. Un equivalente a gzip -d es el comando gunzip :
gunzip archivo.tar.gz
Ojo que puedes comprimir y descomprimir con esta herramienta ,
así como con la poderosa herramienta tar, ambas tienen las
mismas extensiones y son compatibles entre ambas. por ejemplo
puedes comprimirlo con tar y descomprimirlo con gzip y
viceversa. La diferencia esta en que tar también hace la función
de empaquetado.
TAR y GZIP JUNTOS (.tar.gz)

Se pueden usar tar y gzip para comprimir y


archivar al mismo tiempo haciendo mas
flexibles nuestros archivos. Para esto utilizamos
el comando tar.
Ejemplos
Comprimir: tar -czfv archivo.tar.gz ficheros
Descomprimir: tar -xzvf archivo.tar.gz
Ver contenido: tar -tzf archivo.tar.gz
Instalar software en formato gzip/tar

Las instrucciones genéricas para la instalación de un paquete


de software Linux en formato gzip/tar son:
1. Consiga el paquete de código fuente en Internet o en un
CD de distribución y cópielo en un directorio vacío
(preferiblemente usando el nombre que identifique el
paqute)
2. Si está comprimido con gzip, lo descomprimimos con el
siguiente comando:
gzip -d paquete.tar.gz
El resultado es que el paquete se descomprime y la
extensión .gz desaparece del nombre del paquete (por
ejemplo paquete.tar)
3. Desde el archivo tar resultante, ejecute el comando tar:
tar -xvf paquete.tar
Este comando extrae los fichero desde el archivo y los copia en un
subdirectorio del directorio actual.
4. Cambie de directorio y vaya al nuevo directorio creado en el paso
3, así: cd nuevo_directorio
5. Busque un fichero llamado INSTALL o README. Uno de esos
ficheros debería darle instrucciones sobre cómo proceder con la
instalación. El comando make se utiliza en general para instalar el
paquete.
Una vez construido y ejecutado el programa, puede que necesite realizar
configuraciones adicionales. Debe consultar las páginas man y/o los HOWTO
que acompañan al software para obtener información sobre la forma de
proceder.

También podría gustarte