Cuando uno se dedica a la administracion de servidores, es común que utilicemos muchos comandos e instrucciones, y mas común es que nos olvidemos de como funcionan o mejor dicho, de cual es el que necesitamos para determinada tarea.
Eh aqui algunos comandos básicos y útiles para los administradores de sistemas Linux/Unix/BSD.
Eh aqui algunos comandos básicos y útiles para los administradores de sistemas Linux/Unix/BSD.
1. Sistema
(Hardware, Statistics, Users, Limits, Runlevels, root password, Compiel Kernel)
Running kernel and system information
# uname -a # Obtiene la version de kernel
# lsb_release -a # informacion completa de cualquier distribucion BSD
# cat /etc/SuSE-release # Obtener la version de SuSE
# cat /etc/version # Obtener la version de Slackware
# cat /etc/debian_version # Obtener la version de Debian
Utiliza /etc/
DISTR
-release con DISTR= lsb (Ubuntu), redhat, gentoo, mandrake, sun (solaris) y demas, tambien checa /etc/issue
# uptime # muestra el tiempo que ha estado encendido tu sistema
# hostname # Nombre del host
# hostname -i # Muestra la direccion IP del sistema. (Linux solamente)
# man hier # Descripcion de jeraquias del sistema de archivos
# last reboot # Muestra historial de reinicios del sistema
1.1 Informacion del Hardware
Hardware detectado por el kernel
# dmesg # Hardware detectado y mensajes de inicioLinux
# lsdev # informacion del hardware installado
# dd if=/dev/mem bs=1k skip=768 count=256 2>/dev/null | strings -n 8 # Lee el BIOS
# cat /proc/cpuinfo # o del CPUFreeBSD
# cat /proc/meminfo # Información de la memoria
# grep MemTotal /proc/meminfo # Despliega la memoria física
# watch -n1 'cat /proc/interrupts' # Ver interrupciones en cambio continuo
# free -m # Memoria utilizada y libre (-m muestra en MB)
# cat /proc/devices # Dispositivos configurados
# lspci -tv # Muestra dispositivos PCI
# lsusb -tv # Muestra dispositivos USB
# lshal # Muestra una lista de todos los dispositivos con sus proiedades
# dmidecode # Muestra DMI/SMBIOS: información hw del BIOS
# sysctl hw.model # Modelo del CPU
# sysctl hw # Devuelve bastante información del hardware
# sysctl vm # Use de la memoria
# dmesg | grep "real mem" # Hardware memory
# sysctl -a | grep mem # Kernel memory información y configuración
# sysctl dev # dispositivos configurados
# pciconf -l -cv # Muestra los dispositivos PCI
# usbdevs -v # Muestra los dispositivos USB
# atacontrol list # Muestra los dispositivos ATA
# camcontrol devlist -v # Muestra los dispositivos SCSI
1.2 Carga, estadísticas y mensajes
Los siguientes comandos son útiles para averiguar lo que está sucediendo en el sistema.
# top # despliega y actualiza los procesos del CPU1.3 Usuarios
# mpstat 1 # despliega estadísticas relacionadas a procesadores
# vmstat 2 # estadísticas de memoria virtual
# iostat 2 # despliega estadísticas de E/S (intervalo de 2 seg)
# systat -vmstat 1 # BSD sumario de estadísticas del sistema (intervalos de 1 s)
# systat -tcp 1 # BSD conexiones tcp (intenta con -ip)
# systat -netstat 1 # BSD conecciónes de red activas
# systat -ifstat 1 # BSD trafico de red a través de las interfaces activas
# systat -iostat 1 # BSD rendimiento del Disco y del CPU
# tail -n 500 /var/log/messages # Últimos 500 mensajes del kernel/syslog
# tail /var/log/warn # Mensajes de advertencia del sistema, ver syslog.conf
# id # Muestra id de usuarios activos, grupo y loginLos passwords son encriptados y almacenados en /etc/shadow para Linux y solaris, para FreeBSD en /etc/master.passwd Si master.passwd es modificado manualmente (borrando un password) , ejecuta
# last # muestra los últimos logins al sistema
# who # Quién esta activo en el sistema
# groupadd admin # Agrega el grupo "admin" y el usuario colin (Linux/Solaris)
# useradd -c "Colin Barschel" -g admin -m colin
# usermod -a -G# Agregar usuario existente al grupo (Debian)
# groupmod -A# Agregar usuario existente al grupo (SuSE)
# userdel colin # Borrar usuario colin (Linux/Solaris)
# adduser joe # FreeBSD agrega usuario joe (interactivo)
# rmuser joe # FreeBSD borrar usuario joe (interactivo)
# pw groupadd admin # Usa pw on FreeBSD
# pw groupmod admin -m newmember # Agregar nuevo miembro al grupo
# pw useradd colin -c "Colin Barschel" -g admin -m -s /bin/tcsh
# pw userdel colin; pw groupdel admin
# pwd_mkdb -p master.passwd
para reconstruir la base de datos.Para prevenir temporalmente el acceso al sistema (para todos los usuarios excepto root) utiliza nologin. Se desplegara el mensaje en nologin (puede no funfionar con ssh pre-shared keys).
# echo "Sorry no login now" > /etc/nologin # (Linux)1.4 Limites
# echo "Sorry no login now" > /var/run/nologin # (FreeBSD)
Algunas aplicaciones requieren limites muy altos al abrir archivos y sockets (proxys, web servers, bases de datos), Los limites por defeto usualmente son muy bajos.
Linux
Para shell/script
Los limites del shell son gobernados por
ulimit
, el estado es checado con ulimit -a
. Por ejemplo, para cambiar el límite de archivos abiertos de 1024 a 10240 ejecuta:# ulimit -n 10240 # This is only valid within the shel
El commando ulimit
puede ser utilizado en un script para cambiar los limites solo dentro del script.Para usuarios/procesos
Usuarios activos y aplicaciones pueden ser configurados en
/etc/security/limits.conf
. Por ejemplo:# cat /etc/security/limits.confSistema
* hard nproc 250 # Limit user processes
asterisk hard nofile 409600 # Limit application open files
Los limites del kernel se establecen con sysctl. Los limites permanentes se establecen en
/etc/sysctl.conf
.# sysctl -a # Ver todos los limites del sistemaFreeBSD
# sysctl fs.file-max # Ver limite max. de archivos abiertos
# sysctl fs.file-max=102400 # Cambiar max. de archivos abiertos
# echo "1024 50000" > /proc/sys/net/ipv4/ip_local_port_range # rango de puerto
# cat /etc/sysctl.conf
fs.file-max=102400 # Entrada permanente en sysctl.conf
# cat /proc/sys/fs/file-nr # Cuantos descriptores de archivos hay en uso
Para shell/script
Utilizar el comando
limits
en csh o tcsh o como en Linux, utilizar ulimit
en sh o bash shell.Para usuarios/procesos
Los limites por default al acceder están configurados en
/etc/login.conf
. Un valor ilimitado sigue siendo limitado por el valor máximo del sistema.Sistema
Límites del kernel
# sysctl -a # Ver todos los limites del sistemaPara detalles, vea FreeBSD handbook Chapter 11
# sysctl kern.maxfiles=XXXX # número máximo de descriptores de archivos
kern.ipc.nmbclusters=32768 # Entrada permanente en /etc/sysctl.conf
kern.maxfiles=65536 # Valores típicos para Squid
kern.maxfilesperproc=32768
kern.ipc.somaxconn=8192 # Cola TCP. Mejor para apache/sendmail
# sysctl kern.openfiles # cuantos descriptores de archivos hay en uso
# sysctl kern.ipc.numopensockets # Cuantos sockets abiertos hay en uso
# sysctl -w net.inet.ip.portrange.last=50000 # Default es 1024-5000
# netstat -m # estadísticas del bufer de memoria de red
Solaris
Los valores siguientes en
/etc/system
, incrementarán el máximo de descriptores de archivo por procesos:set rlim_fd_max = 4096 # Hard limit en descriptores de archivo para un solo proc1.5 Limites
set rlim_fd_cur = 1024 # Soft limit en descriptores de archivo para un solo proc
Linux
Una vez que inicio el sistema, el kernel ejecuta
init
que a su vez llama a rc
el cual carga todos los scripts pertenecientes a un runlevel. Los scripts son almacenados en /etc/init.d y ligados a /etc/rc.d/rcN.d donde N es el número de runlevel.El runlevel por defecto esta configurado en /etc/inittab que usualmente es 3 o 5:
# grep default: /etc/inittabEl runlevel actual (ver lista siguiente) puede ser cambiado con
id:3:initdefault:
init
. Por ejemplo para pasar de runlevel 3 a 5:# init 5 # Enters runlevel 5
- 0 Shutdown and halt
- 1 Single-User mode (also S)
- 2 Multi-user without network
- 3 Multi-user with network
- 5 Multi-user with X
- 6 Reboot
chkconfig
para configurar los programas que serán ejecutados al iniciar un runlevel.# chkconfig --list # Lista todos los scripts initDebian y todas las distribuciones basadas en el, utilizan
# chkconfig --list sshd # Reporta el estado de sshd
# chkconfig sshd --level 35 on # Configura sshd para los niveles 3 y 5
# chkconfig sshd off # Deshabilita sshd para todos los runlevels
update-rc.d
para administrar los scripts de runlevels. Por defecto se inicia en 2, 3, 4 y 5 y apagar en 0, 1 y 6.# update-rc.d sshd defaults # Activa sshd con el runlevel por defaultFreeBSD
# update-rc.d sshd start 20 2 3 4 5 . stop 20 0 1 6 . # Con argumentos específicos
# update-rc.d -f sshd remove # Dashabilita sshd para todos los runlevels
# shutdown -h now (or # poweroff)# Shutdown and halt the system
El enfoque de arranque BSD es diferente del SysV, no existen los niveles de ejecución (runlevels). El estado final de inicio (single user, con o sin X) es configurado en
/etc/ttys
. Todos los scripts del Sistema Operativo (SO) se localizan en /etc/rc.d/
y en /usr/local/etc/rc.d/
para aplicaciones de terceros. La activación de los servicios es configurada en /etc/rc.conf
y /etc/rc.conf.local
. El comportamiento predeterminado está configurado en /etc/defaults/rc.conf
. Los scripts responden al menos a start | stop | status.# /etc/rc.d/sshd statusEl proceso
sshd is running as pid 552.
# shutdown now # Go into single-user mode
# exit # Go back to multi-user mode
# shutdown -p now # Shutdown and halt the system
# shutdown -r now # Reboot
init
también se puede utilizar para llegar a uno de los siguientes estados nivel. Por ejemplo # init 6
para reiniciar.- 0 Halt and turn the power off (signal
USR2
) - 1 Go to single-user mode (signal
TERM
) - 6 Reboot the machine (signal
INT
) - c Block further logins (signal
TSTP
) - q Rescan the ttys(5) file (signal
HUP
)
Linux método 1
En el boot loader (lilo o grub), entre la siguiente opción de inicio:
init=/bin/shEl kernel montara la partición raiz e
init
iniciara el bourne shell en vez de rc
y un runlevel. Utilice el comando passwd
en el prompt del sistema paracambiar el password y después reinicie. Olvídese del modo single user (usuario unico) a menos que requiera cambiar el password.Si después de iniciar, la partición raíz es montada como solo lectura, remontela con rw
# mount -o remount,rw /FreeBSD método 1
# passwd # or delete the root password (/etc/shadow)
# sync; mount -o remount,ro / # sync before to remount read only
# reboot
En FreeBSD, iniciar en modo single user, remontar la partición root / como rw y utilice passwd. Usted puede seleccionar el modo de single user en el menú de inicio (opcion 4) el cual es desplegado por 10 segundos al iniciar. El modo single user debe darle un shell como root en la partición /
# mount -u /; mount -a # montara / rwLinux, FreeBSD y Unix metodo 2
# passwd
# reboot
Otros Unix puede que no le permitan hacerlo con el simple truco de init. La solución es montar la partición raíz de algún otro sistema operativo (como un CD de rescate) y cambiar la contraseña en el disco.
- Inicie con un live CD o CD de instalacion in modo rescate el cual le dará un shell.
- Localice la partición raíz con fdisk p.e. fdisk /dev/sda
- Montela y utilice chroot:
# mount -o rw /dev/ad4s3a /mnt1.7 Módulos del kernel
# chroot /mnt # chroot into /mnt
# passwd
# reboot
Linux
# lsmod # Lista todos los módulos cargados en el kernel
# modprobe isdn # cargar un modulo (aquí isdn)
FreeBSD
# kldstat # Lista todos los módulos cargados en el kernel1.8 Compilar el kernel
# kldload crypto # Cargar un modulo (aquí crypto)
Linux
# cd /usr/src/linuxFreeBSD
# make mrproper # Limpia todo, incluyendo archivos de configuración
# make oldconfig # Reutilizar el viejo .config si existe
# make menuconfig # o xconfig (Qt) o gconfig (GTK)
# make # Crear una imagen del kernel
# make modules # Compilar módulos
# make modules_install # Instalar módulos
# make install # Instalar el kernel
# reboot
Opcionalmente actualizar el árbol de código fuente (en
/usr/src
) con csup (a partir de FreeBSD 6.2 o posterior):# csupSe puede utilizar el siguiente supfile como ejemplo:
*default host=cvsup5.FreeBSD.org # www.freebsd.org/handbook/cvsup.html#CVSUP-MIRRORSPara modificar y reconstruir el kernel, copie el archivo de configuración genérico en uno nuevo y editelo a sus necesidades (también puede editar el archivo
*default prefix=/usr
*default base=/var/db
*default release=cvs delete tag=RELENG_7
src-all
GENERIC
directamente). Para reiniciar la construción despues de una interrupción, agregue la opción NO_CLEAN=YES
al comando make a fin de evitar se limpien los objetos ya construidos.# cd /usr/src/sys/i386/conf/Para reconstruir el SO completamente:
# cp GENERIC MYKERNEL
# cd /usr/src
# make buildkernel KERNCONF=MYKERNEL
# make installkernel KERNCONF=MYKERNEL
# make buildworld # Construye el SO completo pero no el kernelPara cambios pequeños en la fuente puede utilizar NO_CLEAN=yes a fin de evitar la reconstrucción de todo el árbol. Sin embargo, utilícelo con cuidado.
# make buildkernel # Utilice KERNCONF como en el caso anterior si procede
# make installkernel
# reboot
# mergemaster -p # Compara solo los archivos sabemos son escenciales
# make installworld
# mergemaster -i -U # Actualizacón de toda la configuración y otros archivos
# reboot
# make buildworld NO_CLEAN=yes # No borrar los objetos anteriores
# make buildkernel KERNCONF=MYKERNEL NO_CLEAN=yes
Hasta la próxima.
Fuente: UnixToolBox
4 comentarios:
Algunas aclaraciones, respecto a Solaris:
1. Para saber la versión del Solaris que tienen corriendo es con:
> uname -a
> cat /etc/release
En cuanto al tiempo que ha estado arriba el sistema, pueden ejecutar
> who -b
que les da la hora en la que se reinició el sistema.
1.2 Carga, estadísticas y mensajes.
Sobre esto he econtrado algunas opciones interesantes con el comando ps que escribiré en un artículo próximo del blog.
Por lo pronto incluyo algunos comandos útiles:
- prstat : Reporta estadísticas de losp rocesos activos. Este comando les devuelve entre otras cosas un gran total de unnúmero de ejecuciones determinadas. Pueden ejecutar algo como lo siguiente:
> prstat -v -n 1000,1 1 1 | sort -k 1,1 |grep -v Total|grep -v USERNAME
se van a divertir.
- sar : System activity reporter
Ahora, podrían decirme qué significan estos dos comandos? ;)
> sar -p 1 59 | grep Average (1 min)
> sar -p 1 3540 | grep Average (1 hr)
- vmstat .. auqnue ya lo tieen, pueden jugar cone ste:
> vmstat -p 1 10
Saludos!
Querido Yusuf:
En el punto 1.4 (Límites), en el apartado "Para usuarios/procesos" mencionas que "Usuarios activos y aplicaciones peden ser configurados en /etc/security/limits.conf", e incluso, más abajo muestras un pedacito del mencionado archivo.
En efecto, este archivo configura los límites, peeeeeeeeero, ¿no es acaso el que está relacionado con PAM?
Originalmente en Linux (al menos en slackware puedes encontrar otro archivo de límites (/etc/limits), cuyo formato es ligeramente diferente del de PAM.
Saludos!
¡Sí, más comentarios!
El apartado 1.5 se llama también Límites, ¿es eso correcto?
Sobre ese mismo apartado:
Cabe mencionar que en Slackware (al menos hasta la versión 10), el runlevel 4 es Milti-user con XWindow y el 5 no tiene un propósito definido.
Ahora, respecto al manejo de los runlevels en Solaris, es muy sencillo, al menos en cuanto a la gestión manual de servicios.
Aquí tenemos un direcorio /etc/init.d en el que radican todos los archivos de inicio, tal como se usan en linux, es decir, con las opciones de start, stop, etc.
Luego hay directorios para cada uno de los runleves:
/etc/rc0.d
/etc/rc1.d
.........
/etc/rc5.d
Dentro, hay ligas simbólicas a los archivos en /etc/init.d, con la particularidad de que algunos comienzan con una letra (S o K), sigue un número y generalmente el nombre del script. La idea es que, esos que comienzan con S se inician al entrar al nivel y los que comienzan con K se apagan. Y el número indica el orden en el que se ejecutan estos procesos. Es decir, supongamo que en /etc/init.d hay una rchivo llamado miServicio0 y miServicio1.
Si en /etc/rc2.d tenemos:
S10miServicio0 y
S11miServicio1
Significa que ambos servicios se van a iniciar al entrar al runlevel 2, primero miServicio0 y espués miServicio1
Ahora, si en /etc/rc3.d las entradas son:
S10miServicio0 y
K01miServicio1
Significa que al entrar al runlevel 3, miServicio0 se va a iniciar (sólo si estaba previamente apagado), miServicio1 va a ser detenido (sólo si estaba previamente encendido).
Bueno, me parece que ahora sí es todo.
Alfredo, muchas gracias por acrecentar nuestro intelecto y sobretodo por complementar este post.
Bienvenidas todas las sugerencias y correciones :-D
Publicar un comentario