Archive for April, 2009
Curs tècnic sistemes microinformàtics. Sessió 30 d’abril de 2009
Posted by joaquin in BIT sistemes micro-informatics, cursos on 30/04/2009
Administración gráfica de un sistema linux/unix III
y
Tuneo de ADSL y redes caseras
Tenemos algunos recursos en internet con manuales para configurar cualquier tipo de conexión y cacharro.
http://wiki.bandaancha.st/
Configuración del router
Si tenemos un router sin manuales, podemos buscar el modelo en internet y a partir de el, buscar los manuales en internet.
El modelo y la marca vienen en una pegatina en la parte de abajo del aparato.
Configuración del ADSL
Para configurar un ADSL, buscamos los datos de configuración por defecto en internet o en la documentación que ha enviado el ISP (proveedor de la conexión a internet). Si no valiera ninguna de las dos, podemos llamar al ISP para que nos de los datos.
Especial atencion en si la configuración IP es estática o dinamica.
Despues de configurarlo, cambiamos la contraseña por defecto de administración, y si es un router wireless, cambiamos el essid y la contraseña, ya que las contraseñas por defecto suelen ser faciles de averiguar.
Curs administració de sistemes GNU/Linux. Sessió 26. Sessió 29 d’abril de 2009
Posted by josianito in Uncategorized, administrador sistemes Linux CEM Formació on 29/04/2009
Hoy continuaremos con la parte final de la instalación de un sistema de escritorio GNU/Linux configurand un sistema de backup. Para ello veremos una pequeña aplicación en modo gráfico llamada sbackup y los diferentes tipos de copia de seguridad que podemos realizar
http://bitelia.com/2007/07/02/copias-de-seguridad-con-sbackup/
Tras esto continuaremos conociendo más nuestra máquina, comenzando por obtener información de la misma (especialmente del directorio /proc) pasando a gestionar los procesos y los servicios que se ejecutan en la misma.
MÚLTIPLES FORMAS DE VER INFORMACIÓN DEL SISTEMA
(basado en el tutorial de Sergio González Durán – fuente de linuxtotal.com.mx)
Sistemas basados en GNU/Linux (Al igual que sus parientes basados en Unix como BSD o los de Macinstosh) conservan la tradición de tener multitud de comandos que permiten conocer el estado del sistema. Es decir, cada uno da pequeñas piezas de información sobre multitud de partes diferentes de lo que esta sucediendo en tu sistema Linux. Algunos de estos comandos pueden ser ejecutados por cualquier usuario y otros varios solo por root. En esta ocasión te presento, sin ningún orden en específico, una recopilación de los más útiles y usados de estos comandos.
uname
Imprime información del sistema
(Procesador instalado en el equipo) #> uname -p Intel(R) Core(TM) Duo CPU T2450 @ 2.00GHz (versión del kernel) #> uname -r 2.6.22.9-laptop-1mdv (o toda la información de uname a través de la opción -a) #> uname -a Linux segolap 2.6.22.9-laptop-1mdv #1 SMP Thu Sep 27 04:17:10 CEST 2007 i686 Intel(R) Core(TM) Duo CPU T2450 @ 2.00GHz GNU/Linux
Este último, muestra en orden, el tipo de kernel, el nombre del equipo, versión de kernel, fecha y hora, arquitectura del CPU (i686), tipo de procesador y tipo de sistema operativo (GNU/Linux).
fdisk
Permite manipular/crear particiones en Linux, pero tiene una interesante opción de consulta, -l:
#> fdisk -l Disk /dev/sda: 160.0 GB, 160041885696 bytes 255 heads, 63 sectors/track, 19457 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Disk identifier: 0x0002ecbc Device Boot Start End Blocks Id System /dev/sda1 * 1 63 506016 83 Linux /dev/sda2 64 10261 81915435 83 Linux /dev/sda3 10262 18929 69625710 83 Linux /dev/sda4 18930 19457 4241160 5 Extended /dev/sda5 18930 19457 4241128+ 82 Linux swap / Solaris Disk /dev/sdb: 40.0 GB, 40007761920 bytes 255 heads, 63 sectors/track, 4864 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Disk identifier: 0x000063b0 Device Boot Start End Blocks Id System /dev/sdb1 1 4863 39062016 c W95 FAT32 (LBA)
Podemos observar en este listado varios aspectos muy útiles, primero que tenemos dos dispositivos conectados al sistema, /dev/sda y /dev/sdb, los dos son discos duros, el primero es el propio del equipo y tiene varias particiones, incluso determinamos cual es la partición de arranque que es /dev/sda1. El segundo dispositivo contiene una partición Windows como podemos ver en la columna ‘System’ del último renglón ‘W95 FAT32′, que indiscutiblemente es de Windows, no es una memoria flash por el tamaño (Disk /dev/sdb: 40.0 GB) mostrado. Asi que se trata de un disco duro externo.
free
¿Sientes tu sistema demasiado lento?, comienza checando con free que despliega como se encuentra de saturada la memoria física RAM y la de la partición SWAP.
(la opción -m muestra el listado en megas)
#> free -m
total used free shared buffers cached
Mem: 2018 989 1028 0 39 450
-/+ buffers/cache: 500 1517
Swap: 4141 0 4141
La línea ‘Mem:’ es la memoría fisica RAM, que en este ejemplo tiene 2 GB de los cuáles se están usando 989 megas, bastante razonable todavía, la línea ‘Swap:’ muestra la partición de swap (lo que en Windows se le conoce como archivo de intercambio), que generalmente se establece al doble de la RAM y que idealmente no debe estar usada, como el ejemplo lo muestra. Cuando tu línea Swap muestra demasiado uso y casi nada libre, tienes serios problemas de rendimiento, considera entonces en incrementar tu RAM. Prueba con free -mt para ver una línea más al final con la suma de las dos Mem + Swap.
mount
Comando que se utiliza para montar dispositivos, algo complejo y con múltiples opciones. Pero para este tutorial, basta con que lo invoques sin opción alguna ni argumentos, para que nos revele la información de que tienes montado y en que lugar esta montado.
#> mount /dev/sda1 on /boot type ext3 (rw,noatime) /dev/sda2 on / type ext3 (rw,noatime) /dev/sda3 on /home type ext3 (rw,noatime) none on /proc type proc (rw) none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw) /dev/sdb1 on /media/hd type vfat (rw,nosuid,nodev,sync,users,umask=0022,iocharset=utf8)
Un pequeño análisis me permite determinar que en el equipo hay tres particiones sobre el mismo disco duro (dispositivo /dev/sda), que son /boot (sda1), / (sda2), y /home (sda3), todas son del tipo ‘ext3′ el filesystem por defecto de Linux. Hay dos sistemas virtuales montados en /proc y otro dispositivo (/dev/sdb1) accesible a través del directorio /media/hd y que es del tipo DOS FAT. Como podrás observar, esta información se complementa a la arrojada por fdisk -l.
lsmod
Muestra el status de los módulos del kernel actualmente cargados en el sistema.
[root@segolap ~]# lsmod Module Size Used by fat 45852 1 vfat i915 22688 3 drm 72628 4 i915 vmnet 34564 16 parport_pc 32004 0 parport 31592 1 parport_pc blkcipher 5860 1 ecb snd_seq_midi_event 6912 1 snd_seq_oss snd_seq 46800 5 snd_seq_dummy,snd_seq_oss,snd_seq_midi_event snd_seq_device 7276 3 snd_seq_dummy,snd_seq_oss,snd_seq ieee80211 31752 1 ipw3945 ieee80211_crypt 5248 2 ieee80211_crypt_wep,ieee80211 mmc_core 23108 2 mmc_block,sdhci agpgart 27656 3 drm,intel_agp snd_pcm 69636 3 snd_pcm_oss,snd_hda_intel libata 108688 2 ata_piix,ahci scsi_mod 124972 6 usb_storage,sr_mod,sg,scsi_wait_scan,sd_mod,libata ... listado no completo
El listado se autoexplica, el módulo, su tamaño y quien lo usa. Por ejemplo, el módulo ‘ieee80211′ es utilizado por el driver para tarjetas inalámbricas ‘ipw3945′, etc. Este comando se complementa con el de inserción de módulos insmod y con el que remueve módulos rmmod.
lspci
Lista los dispositivos PCI del sistema.
#> lspci 00:00.0 Host bridge: Intel Corporation Mobile 945GM/PM/GMS, 943/940GML and 945GT Express Memory Controller Hub (rev 03) 00:02.1 Display controller: Intel Corporation Mobile 945GM/GMS/GME, 943/940GML Express Integrated Graphics Controller (rev 03) 00:1b.0 Audio device: Intel Corporation 82801G (ICH7 Family) High Definition Audio Controller (rev 02) 00:1c.0 PCI bridge: Intel Corporation 82801G (ICH7 Family) PCI Express Port 1 (rev 02) 00:1d.1 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI Controller #2 (rev 02) 00:1d.7 USB Controller: Intel Corporation 82801G (ICH7 Family) USB2 EHCI Controller (rev 02) 00:1e.0 PCI bridge: Intel Corporation 82801 Mobile PCI Bridge (rev e2) 00:1f.0 ISA bridge: Intel Corporation 82801GBM (ICH7-M) LPC Interface Bridge (rev 02) 00:1f.1 IDE interface: Intel Corporation 82801G (ICH7 Family) IDE Controller (rev 02) 00:1f.2 SATA controller: Intel Corporation 82801GBM/GHM (ICH7 Family) SATA AHCI Controller (rev 02) 00:1f.3 SMBus: Intel Corporation 82801G (ICH7 Family) SMBus Controller (rev 02) 04:00.0 Ethernet controller: Broadcom Corporation NetLink BCM5787M Gigabit Ethernet PCI Express (rev 02) 05:00.0 Network controller: Intel Corporation PRO/Wireless 3945ABG Network Connection (rev 02) 06:00.0 FLASH memory: ENE Technology Inc ENE PCI Memory Stick Card Reader Controller 06:00.1 Generic system peripheral [0805]: ENE Technology Inc ENE PCI SmartMedia / xD Card Reader Controller 06:00.3 FLASH memory: ENE Technology Inc ENE PCI Secure Digital / MMC Card Reader Controller
Tomemos una línea de ejemplo:
05:00.0 Network controller: Intel Corporation PRO/Wireless 3945ABG Network Connection (rev 02)
El primer campo (05:00.0) es el slot PCI donde se ubica el dispositivo bus 05 dispositivo 00 función 0, después sigue la clase de dispositivo (Network controller), el fabricante (Intel Corporation), el nombre del dispositivo (PRO/Wireless 3945ABG Network Connection) y el número de revisión del mismo (rev 02).
Información bastante útil, ya que por ejemplo, en mi caso, este dispositivo no funcionó cuando recien instalé Linux, pero con esta info del sistema comencé a determinar el tipo de drivers que necesitaba para hacerla funcionar.
Puedes obtener aun más información de cada dispositivo PCI con la opción -v y aun más con -vv, asi que trata con lspci -vv y observa cuanto puedes lograr saber de cada dispositivo.
lsusb
Lista los dispositivos usb del sistema.
#> lsusb Bus 005 Device 004: ID 05e3:0702 Genesys Logic, Inc. USB 2.0 IDE Adapter Bus 005 Device 003: ID 064e:a101 Suyin Corp. Bus 005 Device 001: ID 0000:0000 Bus 001 Device 001: ID 0000:0000 Bus 002 Device 004: ID 062a:0003 Creative Labs Bus 002 Device 001: ID 0000:0000 Bus 003 Device 001: ID 0000:0000 Bus 004 Device 001: ID 0000:0000
mmmmm, no muy informativo que digamos, pero solo hay que saber buscar, asi que si usamos la opción -v, nos devuelve más información, en mi caso, la cámara web de mi laptop no funcionaba, para buscar los drivers o configuración adecuada busqué con este comando y encontré lo siguiente:
#> lsusb -v ... Bus 005 Device 003: ID 064e:a101 Suyin Corp. Device Descriptor: bLength 18 bDescriptorType 1 bcdUSB 2.00 bDeviceClass 239 Miscellaneous Device bDeviceSubClass 2 Common Class bDeviceProtocol 1 Interface Association bMaxPacketSize0 64 idVendor 0x064e Suyin Corp. idProduct 0xa101 bcdDevice 1.00 iManufacturer 2 SuYin iProduct 1 Acer CrystalEye webcam iSerial 3 CN0314-OV03-VA-R02.00.00 ...
El listado es bastante largo, asi que lo muestro con lo relevante solamente, en el ‘Bus 005 Device 003:’ se encuentra algo llamado ‘Suyin Corp’, y viendo más detalle con -v encuentro que es ‘Acer CrystalEye webcam’, asi que con esto se facilita la búsqueda en Internet para conseguir los drivers adecuados para linux, cosa que con paciencia eventualmente se logra. Ya que encontré que con la distro Mandriva viene soportada por defecto.
blkid
Block Id. Despliega los atributos del dispositivo de bloque.
#> blkid /dev/sda1: UUID="d22801c6-85ca-11dc-849e-afde43df714c" SEC_TYPE="ext2" TYPE="ext3" /dev/sda2: UUID="ae22f1dc-85ca-11dc-acbd-cb4aee4dedb7" SEC_TYPE="ext2" TYPE="ext3" /dev/sda3: UUID="d3990398-85ca-11dc-aab5-4d80db2607e2" SEC_TYPE="ext2" TYPE="ext3" /dev/sda5: TYPE="swap" UUID="f6bfa9b2-85ca-11dc-abd6-01935478454b" /dev/sdb1: LABEL="SEGO" UUID="46CD-5C01" TYPE="vfat"
dmidecode y lshw
Ahora bien, que si de determinar el hardware del equipo se trata, nada como este comando. Que lo que hace es leer la información del BIOS directamente y te regresa un listado muy completo de todo el hardware encontrado en el equipo. DMI es por Desktop Management interface y lee la información del llamado SMBIOS (System Management BIOS).
dmidecode por defecto ofrece un listado bastante largo y completo, asi que si deseas uno más corto o resumido, úsalo con -q.
Si no tienes instalado dmidecode prueba con lshw que básicamente hace lo mismo.
df
Reporta el uso de espacio en los discos duros.
# df Filesystem Size Used Avail Use% Mounted on /dev/sda2 77G 16G 58G 22% / /dev/sda1 479M 21M 433M 5% /boot /dev/sda3 66G 36G 30G 55% /home /dev/sdb1 38G 24G 14G 64% /media/hd
Muy fácil de entender y usar, úsalo seguido, sobre todo si descargas bastante y asi podrás saber cuando se están llenando tus dispositivos de almacenamiento. En algunas versiones de df tendrás que usar la opción -h (formato humano) para que puedas ver el mismo listado mostrado en Megas o Gigas.
uptime
Muestra cuanto tiempo lleva prendido el sistema y otra información.
#> uptime 19:59:45 up 2:18, 2 users, load average: 1.14, 1.13, 1.09
Primero la hora actual, seguido de ‘up 2:18′, que significa prendido por dos horas y 18 minutos, claro este campo puede cambiar a días, etc., dos usuarios en el sistema y por último la carga promedio del CPU (load average), en el último minuto, 5 y 15 respectivamente. Mientras más bajo este número es mejor, queriendo decir que por ejemplo, se requieren 1.14 procesadores en el momento que se ejecutó ‘uptime’ para en ese preciso instante terminar con todos los procesos del sistema. Esto no es exactamente preciso pero te puede dar una buena idea lo cargado o desocupado que esta tu CPU. Ahora bien, ¿quienes son esos dos usuarios en el sistema?, veámoslo con el siguiente comando.
w
Muestra que usuarios están en el sistema y lo que están haciendo.
# w 20:07:12 up 2:25, 2 users, load average: 1.18, 1.12, 1.09 USER TTY LOGIN@ IDLE JCPU PCPU WHAT root tty1 19:09 7:34 0.16s 0.16s -bash sergio :0 17:43 ?xdm? 2:22m 0.06s /bin/sh /usr/bin/quanta
La primera línea de w es lo mismo que regresa uptime, y después nos dice quienes son los dos usuarios en el sistema, en que terminal están ‘TTY’, si fuera desde otro equipo mostraría la IP, la hora en que se loguearon ‘LOGIN@’, y la última columna muestra lo que están ejecutando en el momento en que se ejecutó w.
Como complemento de uptime y w puedes usar lo siguiente:
#> who -b system boot 2008-01-13 17:41
Indica la fecha y hora en que el sistema inició.
lsof
List open files. Muestra los archivos que un proceso ha abierto para poder ejecutarse.
(ejecutamos 'man lsof' en una terminal) #> man lsof (desde otra terminal determinamos su PID) #> ps -ed | grep man root 9700 6514 0 21:11 pts/1 00:00:00 man lsof (y ejecutamos lsof con la opción -p) #> lsof -p 9700 COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME man 9700 root cwd DIR 8,2 4096 5603329 /root man 9700 root rtd DIR 8,2 4096 2 / man 9700 root txt REG 8,2 43416 9529630 /usr/bin/man man 9700 root mem REG 8,2 254076 9520457 /usr/share/locale/UTF-8/LC_CTYPE man 9700 root mem REG 8,2 1298800 7277050 /lib/i686/libc-2.6.1.so man 9700 root mem REG 8,2 52 9521060 /usr/share/locale/en_US.UTF-8/LC_MESSAGES/SYS_LC_MESSAGES man 9700 root mem REG 8,2 26052 9519467 /usr/lib/gconv/gconv-modules.cache man 9700 root mem REG 8,2 565473 7274508 /lib/ld-2.6.1.so man 9700 root 0u CHR 136,1 3 /dev/pts/1 man 9700 root 1u CHR 136,1 3 /dev/pts/1 man 9700 root 2u CHR 136,1 3 /dev/pts/1 man 9700 root 3r REG 8,2 4808 4523300 /etc/man.config
Podemos observar de las librerias, archivos de configuración (última línea), y los comandos que se invocaron para ejcutar una consulta de manual. este comando lsof es altamente útil cuando se trata de determinar las dependencias que un programa requiere para ejecutarse.
Si utilizas lsof sin argumentos te dará un larguísimo listado de todos los procesos que se estén ejecutando en ese momento.
last y lastb
last muestra un listado de los últimos usuarios logueados al sistema e información relevante, lastb last bad, muestra los últimos intentos de logueo al sistema que fracasaron, utilísimo para determinar posibles intentos de acceso ilegítimo al sistemo (hackeo).
#> last root tty1 Sun Jan 13 19:59 still logged in sergon :0 Sun Jan 13 17:43 still logged in reboot system boot 2.6.22.9-laptop- Sun Jan 13 17:41 (04:19) root tty1 Sun Jan 13 00:23 - crash (17:18) sergon :0 Sat Jan 12 23:56 - 00:48 (00:52) reboot system boot 2.6.22.9-laptop- Sat Jan 12 23:55 (22:05) sergon :0 Sat Jan 12 19:35 - down (00:57) reboot system boot 2.6.22.9-laptop- Sat Jan 12 19:34 (00:59) sergon :0 Sat Jan 12 17:41 - down (01:16) reboot system boot 2.6.22.9-laptop- Sat Jan 12 17:40 (01:17) sergon :0 Sat Jan 12 08:15 - 12:41 (04:25) reboot system boot 2.6.22.9-laptop- Sat Jan 12 08:15 (04:26) sergon :0 Fri Jan 11 22:11 - crash (10:03) reboot system boot 2.6.22.9-laptop- Fri Jan 11 21:49 (14:51) sergon :0 Thu Jan 10 22:12 - 22:36 (00:23) reboot system boot 2.6.22.9-laptop- Thu Jan 10 22:11 (00:24)
Podemos ver que usuario se logueó, en que terminal, día, fecha y hora, a que hora terminó o si continua logueado (still logged in). Es posible también conocer por ejemplo en las líneas que dice ‘crash’ que el sistema no se apagó adecuadamente.
#> lastb # lastb pedro 192.168.0.10 Sun Jan 13 22:04 - 22:04 (00:00) root tty2 Sun Jan 13 21:20 - 21:20 (00:00)
Con lastb obtenemos los intentos de logueo que fracasaron. Por ejemplo, en un sistema real en producción donde no existiera el usuario ‘pedro’ resultaría obvio que alguien esta tratando de obtener acceso remoto, adivinando usuario:contraseña. Deberías preocuparte enormemente y tomar acción, si en el listado de last observas un logueo de root u otro usuario que tu como administrador sepas no debió entrar al sistema en esas fechas u horas, o peor aun que se trata de tu ¡¡usuario!! y no habías ingresado previamente. Con seguridad significa que ya te hackearon tu sistema o consiguieron tu contraseña.
dmesg
Parte del servidor de mensajes del sistema syslog, dmesg es principalmente usado para mostrar los mensajes que se mostraron en pantalla cuando se inicio (boot) el sistema. Se usa sobretodo para realizar depuraciones al sistema de como se están cargando los diversos módulos y componentes al arranque del sistema o ya en ejecución. Debido a lo extenso del sistema, es conveniente redireccionar la salida a un archivo:
#> dmesg > mensajes
Con less o cat o en tu editor favorito puedes con calma analizar el archivo.
ps
El comando por excelencia para mostrar información de procesos, en este artículo de LinuxTotal.com.mx se encuentra una amplia explicación de este comando y otros usados para la administración de procesos.
Este artículo seguirá creciendo de vez en cuando con nueva información sobre comandos que regresan datos valiosos del sistema, asi que chécalo de tiempo en tiempo.
DESCUBRIENDO LAS POSIBILIDADES DEL DIRECTORIO /PROC
artículo original en inglés: Discover the possibilities of the /proc folder
El directorio /proc es una bestia extraña. Realmente no existe, sin embargo puedes explorarlo. Sus archivos de tamaño 0 no son ni binarios ni textos, sin embargo puedes examinarlos y desplegar su contenido. Este directorio especial contiene todos los detalles de tu sistema Linux, incluyendo el kernel, procesos y parámetros de configuración. Estudiando el directorio /proc, puedes aprender como los comandos de Linux trabajan e incluso es posible realizar tareas administrativas.
Bajo Linux, todo es administrado como un archivo; incluso los dispositivos son accedidos como archivos (en el directorio /dev). Aunque que podrías pensar que archivos “normales” son ya sea texto o binarios (o posiblemente dispositivos o archivos pipe), el directorio /proc contiene una extraño tipo de archivo: archivos virtuales. Estos archivos son listados, pero realmente no existen en disco; el sistema operativo los crea al vuelo si tratas de leerlos.
La mayoría de los archivos virtuales siempre tienen una marca de tiempo (timestamp) actual, lo que indica que están constantemente siendo actualizados. El directorio /proc en si mismo es creado cada vez que arrancas tu equipo. Se requiere ser root para poder examinar completamente el directorio en su totalidad; algunos de los archivos (tales como los relacionados a procesos) son propiedad del usuario que los ejecutó. Y aunque casi tdos los archivos son de solo lectura, hay algunos pocos con permisos de escritura (notablemente en /proc/sys) que permiten realizar cambios en los parámetros del kernel. (Queda claro que debes ser muy cuidados con esto)
Organización del directorio /proc
El directorio /proc está organizado en directorios virtuales y subdirectorios, que agrupan archivos de tópicos similares. Trabajando como root el comando ls /proc te despliega algo como lo siguiente:
#> ls /proc 1 2432 3340 3715 3762 5441 815 devices modules 129 2474 3358 3716 3764 5445 acpi diskstats mounts 1290 248 3413 3717 3812 5459 asound dma mtrr 133 2486 3435 3718 3813 5479 bus execdomains partitions 1420 2489 3439 3728 3814 557 dri fb self 165 276 3450 3731 39 5842 driver filesystems slabinfo 166 280 36 3733 3973 5854 fs interrupts splash 2 2812 3602 3734 4 6 ide iomem stat 2267 3 3603 3735 40 6381 irq ioports swaps 2268 326 3614 3737 4083 6558 net kallsyms sysrq-trigger 2282 327 3696 3739 4868 6561 scsi kcore timer_list 2285 3284 3697 3742 4873 6961 sys keys timer_stats 2295 329 3700 3744 4878 7206 sysvipc key-users uptime 2335 3295 3701 3745 5 7207 tty kmsg version 2400 330 3706 3747 5109 7222 buddyinfo loadavg vmcore 2401 3318 3709 3749 5112 7225 cmdline locks vmstat 2427 3329 3710 3751 541 7244 config.gz meminfo zoneinfo 2428 3336 3714 3753 5440 752 cpuinfo misc
Los directorios con números (más sobre esto en un momento) corresponden a cada proceso en ejecución; un autoenlace simbólico apunta al proceso actual. Algunos archivos virtuales proveen información sobre el hardware, tal como /proc/cpuinfo y /proc/interrupts. Otros proporcionan información relacionada a los archivos, tales como /proc/filesystems o /proc/partitions. Los archivos situados bajo /proc/sys son relacionados a la configuración de parámetros del kernel, como ya veremos.
El comando cat /proc/meminfo puede traer a la pantalla algo como lo siguiente:
# cat /proc/meminfo MemTotal: 483488 kB MemFree: 9348 kB Buffers: 6796 kB Cached: 168292 kB ...varias líneas cortadas...
Si ejecutas los comandos top o free, es posible que reconozcas algunos de estos valores. De hecho, varias utilerias muy conocidas acceden al directorio /proc para obtener su información. Por ejemplo, si tu quieres saber que tipo de kernel estás corriendo, puedes tratar con uname -srv, o ir directamente al origen y teclear cat /proc/version. Algunos otros archivos interesantes son:
- /proc/apm: Proveé información sobre “Advanced Power Management”, si es que esta instalado.
- /proc/acpi: Un directorio similar al anterior que ofrece bastantes datos sobre el más moderno ACPI (Advanced Configuration and Power Interface). Por jemplo, para ver si tu laptop está conectada a la corriente AC, puedes usar
cat /proc/acpi/ac_adapter/AC/stateo en algunas distroscat /proc/acpi/ac_adapter/ACAD/state, y así obtendrás “on line” o “off line”. - /proc/cmdline: Muestra los parámetros que fueron pasados al kernel al momento del arranque (boot time). En mi caso contiene lo siguiente: root=/dev/disk/by-id/scsi-SATA_FUJITSU_MHS2040_NLA5T3314DW3-part3 vga=0×317 resume=/dev/sda2 splash=silent PROFILE=QuintaWiFi, que me dice que en que partición está la raíz del filesystem, que modo VGA está en uso y más. El último parámetro tiene que ver con openSUSE’s System Configuration Profile Management.
- /proc/cpuinfo: Muestra datos sobre el procesador de tu equipo. Por ejemplo, en mi laptop,
cat /proc/cpuinfome da un listado que comienza con:.processor : 0 vendor_id : AuthenticAMD cpu family : 6 model : 8 model name : Mobile AMD Athlon(tm) XP 2200+ stepping : 1 cpu MHz : 927.549 cache size : 256 KB
Esto muestra que solo tengo un procesador, marcado como 0 de la familia 80686 (El ‘6′ en la familia de cpu es dígito medio): un AMD Athlon XP, corriendo a poco menos de 1GHZ.
- /proc/loadavg: Un archivo relacionado al anterior que muestra la carga promedio del procesador; su información incluye el uso de CPU en el último minuto, últimos cinco minutos y últimos 15 minutos, asi como el número de procesos actuales ejecutándose.
- /proc/stat: También proporciona estadísticas, pero tomando en cuenta el último boot (arranque).
- /proc/uptime: Un archivo pequeño que solo tiene dos números: por cuantos segundos tu sistema ha estado encendido, y cuantos segundos ha estado inactivo.
- /proc/devices: Despliega todos los dispositivos actuales configurados y cargados de caracter y bloque. /proc/ide y /proc/scsi proveen datos sobre dispositivos IDE y SCSI.
- /proc/ioports: Te muestra información sobre las regiones usadas para comunicaciones de E/S (I/O) de esos dispositivos.
- /proc/dma: Muestra los canales “Direct Memory Access” en uso.
- /proc/filesystems: Muestra cuáles tipos de sistemas de archivos (filesystems) están soportados por tu kernel. Una porción de esto puede lucir como esto:
nodev sysfs nodev rootfs nodev bdev nodev proc nodev cpuset ...some lines snipped... nodev ramfs nodev hugetlbfs nodev mqueue ext3 nodev usbfs ext2 nodev autofsLa primera columna muestra si el sistema de archivos está montado en un dispositivo de bloques. En mi caso, tengo particiones configuradas con ext2 y ext3.
- /proc/mounts: Muestra todos los “mounts” usados por tu máquina (la salida es muy similar a /etc/mtab). Similarmente, /proc/partititons y /proc/swaps muestra todas las particiones y el espacio swap respectivamente.
- /proc/fs: Si estás exportando sistemas de archivos con NFS, este directorio tiene entre sus muchos subdirectorios y archivos a /proc/fs/nfsd/exports, que muestra los sistemas de archivos que están siendo compartidos y sus permisos.
- /proc/net: No hay nada mejor que esto para información de red. Describir cada archivo en este directorio requeriría demasiado espacio, pero incluye dev (todos los dispositivos de red), varios archivos relacionados al firewall
iptables, estadísticas de red y sockets, información sobre wireless y más.
También hay varios archivos relacionados a la RAM. Ya mencioné anteriormente /proc/meminfo, pero también tienes a tu disposición /proc/iomem, que muestra cuanta memoria RAM ha sido utilizada por tu sistema y /proc/kcore, que representa la memoría física de tu RAM. A diferencia de otros archivos virtuales, /proc/kcore muestra un tamaño que es igual a la memoria RAM más una pequeña sobrecarga. (No trates de darle cat a este archivo, porque su contenido es binario y solo desconfigurará tu pantalla). Finalmente, hay muchos archicos y directorios relacionados con el Hardware, tal como /proc/interrupts y /proc/irq, /proc/pci (para todos los dispositivos PCI), /proc/bus y demás, pero todos estos incluyen información muy específica que la mayoría de los usuarios no necesitarán.
¿Que hay en un proceso?
Como ya lo había mencionado, los directorios con nombre numérico representan a los procesos en ejecución. Cuando un proceso termina, su directorio /proc desaparece automáticamente. Si examinas cualquiera de estos directorios mientras existen, encontrarás bastantes archivos, táles como:
attr cpuset fdinfo mountstats stat auxv cwd loginuid oom_adj statm clear_refs environ maps oom_score status cmdline exe mem root task coredump_filter fd mounts smaps wchan
Veamos más de cerca a los archivos principales:
- cmdline: Contiene el comando que inicio el proceso, con todos sus parámetros.
- cwd: Enlace simbólico al directorio actual de trabajo (current working directory cwd) del proceso; enlaces exe a los procesos ejecutables y enlaces root a su directorio superior.
- environ: Muestras todas las variables de ambiente para el proceso.
- fd: Contiene los descriptores de archivo para el proceso, mostrando cuáles archivos o dispositivos lo están usando.
- maps, statm and mem: Trabaja con la memoria en uso por el proceso.
- stat and status: Proveé información acerca del estatus del proceso, pero el segundo es mucho más claro que el primero.
Estos archivos plantean varios retos de programación de shell scripts. Por ejemplo, si quieres cazar a los procesos zombie, puedes buscar en todos los directorios numerados y verificar si aparece “(Z) Zombie” en el archivo status. Una vez necesitaba verificar si cierto programa se estaba ejecutando: Lo que hice fue escanear y mirar a los archivos cmdline, buscando por la cadena indicada. (También puedes hacer esto con la salida del programa ps, pero no es el punto en este artículo). Y si quieres programar un programa que se vea mejor que top, toda la información que necesitas esta aqui.
Configurando el sistema: /proc/sys
/proc/sys no solo proveé información sobre el sistema, tambié facilita o permita cambiar parámetros del kernel al vuelo, y habilta o deshabilita características de usabilidad. (Por supuesto, esto puede dañar tu sistema, considérate avisado.)
Para determinar si puedes configurar un archivo o es solo de lectura, usa ls -ld; si un archivo tiene el atributo “w”, significa que puedes configurar el kernel de alguna manera. Por ejemplo, ls -ld /proc/kernel/* comienza como esto:
dr-xr-xr-x 0 root root 0 2008-01-26 00:49 pty dr-xr-xr-x 0 root root 0 2008-01-26 00:49 random -rw-r--r-- 1 root root 0 2008-01-26 00:49 acct -rw-r--r-- 1 root root 0 2008-01-26 00:49 acpi_video_flags -rw-r--r-- 1 root root 0 2008-01-26 00:49 audit_argv_kb -r--r--r-- 1 root root 0 2008-01-26 00:49 bootloader_type -rw------- 1 root root 0 2008-01-26 00:49 cad_pid -rw------- 1 root root 0 2008-01-26 00:49 cap-bound
Se puede observar que bootloader_type no está hecho para ser cambiado, pero otros archivos si lo están. Para cambiar un archivo, puedes usar algo como esto:
echo 10 > /proc/sys/vm/swappiness
Este ejemplo en particular cambiará el rendimiento de la paginación de la memoria virtual. Por cierto, estos cambios son solo temporales, y sus efectos desapareceran cuando tu reinicies el sistema; usa sysctl y el archivo de configuración /etc/sysctl.conf para afectar los cambios de manera permanente.
Veamos el nivel superior del directorio /proc/sys:
- debug: Contiene (¡sorpresa!) información para depuración (debugging). Esto es muy bueno si estás metido en el desarrollo del kernel.
- dev: Proveé parámetros para dispositivos específicos en tu sistema; por ejemplo, checa el directorio dev/cdrom.
- fs: Ofrece datos sobre cada posible aspecto del sistema de archivos.
- kernel: Te permite afectar la configuración del kernel y su operación directamente.
- net: Te permite controlar aspectos relacionados a la red. Se cuidadoso, porque puedes perder conectividad.
- vm: Trata con el subsistema VM.
El directorio especial /proc proveé información completa y detallada acerca de los trabajos internos de Linux y te permite ajustar a la medida muchos aspectos de su configuración. Si te tomas algo de tiempo para aprender las posibilidades de este directorio, estarás en posición de obtener un sistema Linux más perfecto. ¿Y no es acaso lo que todos queremos?.
MANUAL BÁSICO DE ADMINISTRACIÓN DE PROCESOS
autor: sergio.gonzalez.duran@gmail.com
La definición de un proceso podría ser que es una instancia de un programa en ejecución (corriendo). A los procesos frecuentemente se les refiere como tareas. El contexto de un programa que esta en ejecución es lo que se llama un proceso. Este contexto puede ser mas procesos hijos que se hayan generado del principal (proceso padre), los recursos del sistema que este consumiendo, sus atributos de seguridad (tales como su propietario y permisos de archivos asi como roles y demás de SELinux), etc.
Linux, como se sabe, es un sistema operativo multitarea y multiusuario. Esto quiere decir que múltiples procesos pueden operar simultáneamente sin interferirse unos con los otros. Cada proceso tiene la “ilusión” que es el único proceso en el sistema y que tiene acceso exclusivo a todos los servicios del sistema operativo.
Programas y procesos son entidades distintas. En un sistema operativo multitarea, múltiples instancias de un programa pueden ejecutarse sumultáneamente. Cada instancia es un proceso separado. Por ejemplo, si cinco usuarios desde equipos diferentes, ejecutan el mismo programa al mismo tiempo, habría cinco instancias del mismo programa, es decir, cinco procesos distintos.
Cada proceso que se inicia es referenciado con un número de identificación único conocido como Process ID PID, que es siempre un entero positivo. Prácticamente todo lo que se está ejecutando en el sistema en cualquier momento es un proceso, incluyendo el shell, el ambiente gráfico que puede tener múltiples procesos, etc. La excepción a lo anterior es el kernel en si, el cual es un conjunto de rutinas que residen en memoria y a los cuales los procesos a través de llamadas al sistema pueden tener acceso.
ps
El comando ps es el que permite informar sobre el estado de los procesos. ps esta basado en el sistema de archivos /proc, es decir, lee directamente la información de los archivos que se encuentran en este directorio. Tiene una gran cantidad de opciones, incluso estas opciones varían dependiendo del estilo en que se use el comando. Estas variaciones sobre el uso de ps son las siguientes:
- Estilo UNIX, donde las opciones van precedidas por un guión -
- Estilo BSD, donde las opciones no llevan guión
- Estilo GNU, donde se utilizan nombres de opciones largas y van precedidas por doble guión –
Sea cual sea el estilo utilizado, dependiendo de las opciones indicadas, varias columnas se mostrarán en el listado de procesos que resulte, estas columnas pueden ser entre muchas otras, las siguientes (y principales):
| p o PID | Process ID, número único o de identificación del proceso. | |
| P o PPID | Parent Process ID, padre del proceso | |
| U o UID | User ID, usuario propietario del proceso | |
| t o TT o TTY | Terminal asociada al proceso, si no hay terminal aparece entonces un ‘?’ | |
| T o TIME | Tiempo de uso de cpu acumulado por el proceso | |
| c o CMD | El nombre del programa o camndo que inició el proceso | |
| RSS | Resident Sise, tamaño de la parte residente en memoria en kilobytes | |
| SZ o SIZE | Tamaño virtual de la imagen del proceso | |
| NI | Nice, valor nice (prioridad) del proceso, un número positivo significa menos tiempo de procesador y negativo más tiempo (-19 a 19) | |
| C o PCPU | Porcentaje de cpu utilizado por el proceso | |
| STIME | Starting Time, hora de inicio del proceso | |
| S o STAT | Status del proceso, estos pueden ser los siguientes
|
Las opciones completas de ps las encuentras en las páginas del manual (man ps), o escribiendo en la terminal ps L, y para ver un resumen de sus opciones más comunes usa ps –help:
#> ps --help
********* simple selection ********* ********* selection by list *********
-A all processes -C by command name
-N negate selection -G by real group ID (supports names)
-a all w/ tty except session leaders -U by real user ID (supports names)
-d all except session leaders -g by session OR by effective group name
-e all processes -p by process ID
T all processes on this terminal -s processes in the sessions given
a all w/ tty, including other users -t by tty
g OBSOLETE -- DO NOT USE -u by effective user ID (supports names)
r only running processes U processes for specified users
x processes w/o controlling ttys t by tty
*********** output format ********** *********** long options ***********
-o,o user-defined -f full --Group --User --pid --cols --ppid
-j,j job control s signal --group --user --sid --rows --info
-O,O preloaded -o v virtual memory --cumulative --format --deselect
-l,l long u user-oriented --sort --tty --forest --version
-F extra full X registers --heading --no-heading --context
********* misc options *********
-V,V show version L list format codes f ASCII art forest
-m,m,-L,-T,H threads S children in sum -y change -l format
-M,Z security data c true command name -c scheduling class
-w,w wide output n numeric WCHAN,UID -H process hierarchy
A continuación algunos cuantos ejemplos de ps con la salida recortada.
># ps -e (-e muestra todos los procesos) PID TTY TIME CMD 1 ? 00:00:01 init 2 ? 00:00:00 kthreadd 3 ? 00:00:00 migration/0 4 ? 00:00:00 ksoftirqd/0 #> ps -ef (-f muestra opciones completas) UID PID PPID C STIME TTY TIME CMD root 1 0 0 10:12 ? 00:00:01 init [5] root 2 0 0 10:12 ? 00:00:00 [kthreadd] ... root 6130 5662 0 10:24 pts/0 00:00:00 su - root 6134 6130 0 10:24 pts/0 00:00:00 -bash sergon 6343 5604 0 10:28 ? 00:00:00 kio_file [kdeinit] file /home/sergon/tmp/ksocket-sergon/kl root 6475 6134 0 10:38 pts/0 00:00:00 ps -ef #> ps -eF (-F muestra opciones completas extra) UID PID PPID C SZ RSS PSR STIME TTY TIME CMD root 1 0 0 412 556 1 16:59 ? 00:00:01 init [5] root 2 0 0 0 0 1 16:59 ? 00:00:00 [kthreadd] sergon 8326 8321 0 902 1272 0 17:07 ? 00:00:00 /bin/sh /usr/lib/firefox-2.0.0.8/run-mozilla.sh /usr/lib/f sergon 8331 8326 4 53856 62604 0 17:07 ? 00:00:50 /usr/lib/firefox-2.0.0.8/mozilla-firefox-bin sergon 8570 7726 2 15211 37948 0 17:17 ? 00:00:10 quanta #> ps ax (formato BSD sin guión, a muestra todos, x sin mostrar tty) PID TTY STAT TIME COMMAND 1 ? Ss 0:01 init [5] 2 ? S< 0:00 [kthreadd] 3 ? S< 0:00 [migration/0] 4 ? S< 0:00 [ksoftirqd/0] #> ps aux (formato BSD sin guión, u muestra usuarios y demás columnas) USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.0 1648 556 ? Ss 16:59 0:01 init [5] root 2 0.0 0.0 0 0 ? S< 16:59 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? S< 16:59 0:00 [migration/0] root 4 0.0 0.0 0 0 ? S< 16:59 0:00 [ksoftirqd/0] root 5 0.0 0.0 0 0 ? S< 16:59 0:00 [migration/1] #> ps -eo user,pid,tty (-o output personalizado, se indican los campos separados por coma, ver ps --help o ps L) USER PID TT root 1 ? root 2 ? sergon 8570 tty 1 root 8876 pts/1 #> ps -eH (muestra árbol de procesos) #> ps axf (lo mismo en formato BSD) #> ps -ec (el comando que se esta ejecutando, sin la ruta, solo el nombre real) #> ps -el (muestra formato largo de varias columnas, muy práctico) #> ps L (No muestra procesos, lista todos los códigos de formatos)
pstree
Muestra los procesos en forma de árbol, pstree –help te da las opciones más comunes. Recomiendo uses lo uses con la opción -A y -G para que te un árbol con líneas con líneas estilo ASCII y de terminal VT100 respectivamente, puedes añadir también -u para mostrar entre paréntesis al usuario propietario del proceso:
#> pstree -AGu
init---acpid
|-atd(daemon)
|-automount----2*[{automount}]
|-avahi-daemon(avahi)
|-beagled(sergon)----7*[{beagled}]
|-beagled-helper(sergio)----3*[{beagled-helper}]
|-compiz(sergon)----kde-window-deco
|-console-kit-dae----61*[{console-kit-dae}]
|-crond
|-dbus-daemon(messagebus)
|-dbus-daemon(sergio)
|-dbus-launch(sergio)
|-dcopserver(sergio)
|-dhclient
|-gam_server(sergio)
|-gconfd-2(sergio)
|-hald(haldaemon)----hald-runner(root)----hald-addon-acpi(haldaemon)
| |-hald-addon-cpuf
| |-hald-addon-inpu
| |-hald-addon-stor
|-httpd---8*[httpd(apache)]
|-2*[ifplugd]
|-ipw3945d
|-kaccess(sergio)
...
kill
El comando kill, que literalmente quiere decir matar, sirve no solo para matar o terminar procesos sino principalmente para enviar señales (signals) a los procesos. La señal por default (cuando no se indica ninguna es terminar o matar el proceso), y la sintaxis es kill PID, siendo PID el número de ID del proceso. Asi por ejemplo, es posible enviar una señal de STOP al proceso y se detendrá su ejecución, después cuando se quiera mandar una señal de CONTinuar y el proceso continuara desde donde se quedo.
#> kill -l (lista todas las posibles señales que pueden enviarse a un proceso) 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUSSIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8 43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2 63) SIGRTMAX-1 64) SIGRTMAX
La lista previa presenta una lista de todas las posibles señales que pueden mandarse a un proceso y estas pueden ser invocadas a través del número de la señal o de su código, por ejemplo:
#> kill -9 11428 (termina, mata un proceso completamente) #> kill -SIGKILL 11428 (Lo mismo que lo anterior)
Las señales más comunes son la 19 y 20 que detienen momentáneamente la ejecución de un proceso o programa, 18 la continua, 1 que es la señal de hang up que obliga al proceso a releer sus archivos de configuración estando en ejecución y 9 que termina rotundamente un proceso.
killall
El comando killall, que funciona de manera similar a kill, pero con la diferencia de en vez de indicar un PID se indica el nombre del programa, lo que afectará a todos los procesos que tengan ese nombre. Asi por ejemplo si se tienen varias instancias ejecutándose del proxy server squid, con killall squid eliminará todos los procesos que se esten ejecutando con el nombre ’squid’
#> killall -l (lista de posibles señales) #> killall -HUP httpd (manda una señal de "colgar", detenerse releer sus archivos de configuración y reiniciar) #> killall -KILL -i squid (manda señal de matar a todos los procesos squid pero pide confirmación en cada uno)
nice
Permite cambiar la prioridad de un proceso. Por defecto, todos los procesos tienen una prioridad igual ante el CPU que es de 0. Con nice es posible iniciar un programa (proceso) con la prioridad modificada, más alta o más baja según se requiera. Las prioridades van de -20 (la más alta) a 19 la más baja. Solo root o el superusuario puede establecer prioridades negativas que son más altas. Con la opción -l de ps es posible observar la columna NI que muestra este valor.
#> nice (sin argumentos, devuelve la prioridad por defecto ) 0 #> nice -n -5 comando (inicia comando con una prioridad de -5, lo que le da más tiempo de cpu)
renice
Asi como nice establece la prioridad de un proceso cuando se incia su ejecución, renice permite alterarla en tiempo real, sin necesidad de detener el proceso.
#> nice -n -5 yes (se ejecuta el programa 'yes' con prioridad -5) (dejar ejecutando 'yes' y en otra terminal se analiza con 'ps') #> ps -el F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 4 S 0 12826 12208 4 75 -5 - 708 write_ pts/2 00:00:00 yes #> renice 7 12826 12826: prioridad antigua -5, nueva prioridad 7 #> ps -el F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 4 S 0 12826 12208 4 87 7 - 708 write_ pts/2 00:00:15 yes (obsérvese el campo NI en el primer caso en -5, y en el segundo con renice quedó en 7, en tiempo real)
nohup y &
Cuando se trata ejecutar procesos en background (segundo plano) se utiliza el comando nohup o el operador &. Aunque realizan una función similar, no son lo mismo.
Si se desea liberar la terminal de un programa que se espera durará un tiempo considerable ejecutándose, entonces se usa . Esto funciona mejor cuando el resultado del proceso no es necesario mandarlo a la salida estándar (stdin), como por ejemplo cuando se ejecuta un respaldo o se abre un programa Xwindow desde la consola o terminal. Para lograr esto basta con escribir el comando en cuestión y agregar al final el símbolo & (ampersand).
$> yes > /dev/null &
$> tar czf respaldo /documentos/* > /dev/null/ &
$> konqueror & (con estos ejemplos se ejecuta el comando y se libera la terminal regresando el prompt)
Sin embargo lo anterior produce que el padre del proceso PPID que se invocó con sea el proceso de la terminal en si, por lo que si cerramos la terminal o salimos de la sesión también se terminaran los procesos hijos que dependan de la terminal, no muy conveniente si se desea que el proceso continué en ejecución.
Para solucionar lo anterior, entonces se usa el comando nohup que permite al igual que ‘&’ mandar el proceso y background y que este quede inmune a los hangups (de ahí su nombre nohup) que es cuando se cuelga o termina la terminal o consola de la cual se ejecutó el proceso.
$> nohup yes > /dev/null & $> nohup czf respaldo /documentos/* > /dev/null/ $> nohup konqueror
Asi se evita que el proceso se “cuelgue” al cerrar la consola.
jobs
Si por ejemplo, se tiene acceso a una única consola o terminal, y se tienen que ejecutar varios comandos que se ejecutarán por largo tiempo, se pueden entonces como ya se vió previamente con nohup y el operador ‘&’ mandarlos a segundo plano o background con el objeto de liberar la terminal y continuar trabajando.
Pero si solo se está en una terminal esto puede ser difícil de controlar, y para eos tenemos el comando jobs que lista los procesos actuales en ejecución:
#> yes > /dev/null & [1] 26837 #> ls -laR > archivos.txt & [2] 26854 #> jobs [1]- Running yes >/dev/null & [2]+ Running ls --color=tty -laR / >archivos.txt &
En el ejemplo previo, se ejecutó el comando yes y se envió a background (&) y el sistema devolvió [1] 26837, indicando asi que se trata del trabajo o de la tarea [1] y su PID, lo mismo con la segunda tarea que es un listado recursivo desde la raíz y enviado a un archivo, esta es la segunda tarea.
Con los comandos fg (foreground) y bg background es posible manipular procesos que esten suspendidos temporalmente, ya sea porque se les envió una señal de suspensión como STOP (20) o porque al estarlos ejecutando se presionó ctrl-Z. Entonces para reanudar su ejecución en primer plano usaríamos fg:
#> jobs [1]- Stopped yes >/dev/null & [2]+ Stopped ls --color=tty -laR / >archivos.txt & #> fg %1 #> jobs [1]+ Running yes >/dev/null & [2]- Stopped ls --color=tty -laR / >archivos.txt &
Obsérvese como al traer en primer plano al ‘job’ o proceso 1, este adquirió el símbolo [+] que indica que esta al frente. Lo mismo sería con bg que volvería a reinicar el proceso pero en segundo plano. Y también es posible matar los procesos con kill indicando el número que devuelve jobs: kill %1, terminaría con el proceso en jobs número 1.
top
Una utilería muy usada y muy útil para el monitoreo en tiempo real del estado de los procesos y de otras variantes del sistema es el programa llamado top, se ejecuta desde la línea de comandos, es interactivo y por defecto se actualiza cada 3 segundos.
$> top
top - 13:07:30 up 8 days, 6:44, 4 users, load average: 0.11, 0.08, 0.08
Tasks: 133 total, 1 running, 131 sleeping, 0 stopped, 1 zombie
Cpu(s): 0.0%us, 0.2%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.2%si, 0.0%st
Mem: 497356k total, 472352k used, 25004k free, 21500k buffers
Swap: 1156640k total, 257088k used, 899552k free, 60420k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
26156 sergon 15 0 2160 1016 784 R 1 0.2 0:00.93 top
1 root 15 0 2012 616 584 S 0 0.1 0:00.98 init
2 root RT 0 0 0 0 S 0 0.0 0:00.29 migration/0
3 root 34 19 0 0 0 S 0 0.0 0:00.00 ksoftirqd/0
4 root RT 0 0 0 0 S 0 0.0 0:00.00 watchdog/0
5 root RT 0 0 0 0 S 0 0.0 0:00.38 migration/1
...
Estando adentro de la apliación, presionando ‘h’ muestra una ayuda de los posibles comandos que permiten configurar top, por ejemplo, al presionar ’s’ pregunta por el tiempo en segundos de actualización, etc.
Estas son algunas de las herramientas, las más importantes y usadas, para adminsitrar procesos, hay varios programas en ambientes gráficos que en una sola pantalla permiten todo lo anterior y más, y en línea de comandos te recomiendo htop, que es como un top pero en esteroides.
SERVICIOS
Los servicios pueden iniciar o arrancar junto con la carga del sistema o pueden después ser puestos a funcionar cuando se requieran (es lo mejor). Parte esencial de la administración de sistemas Linux es continuamente trabajar con los servicios que este proporciona, cosa que es bastante sencilla. En este tutorial aprenderás todo lo necesario sobre como inicar/detener/reinicar etc. los servicios de tu equipo GNU/Linux.
Iniciando servicios manualmente, directorio init.d
Dentro de esta carpeta ubicada en /etc o en /etc/rc.d dependiendo de la distribucción, se encuntran una serie de scripts que permiten inicar/detener la gran mayoría de los servicios/servidores que estén instalados en el equipo. Estos scripts están programados de tal manera que la mayoría reconoce los siguientes argumentos:
- start
- stop
- restart
- status
Los argumentos son autodescriptivos, y tienen permisos de ejecucción, entonces siendo root es posible iniciar un servicio de la siguiente manera, por ejemplo samba:
#> /etc/rc.d/init.d/smb start Starting Samba SMB daemon [OK]
Solo que hay que cambiar start por stop | restart | status para detenerlo, reiniciarlo (releer archivos de configuración) o checar su estatus. Ahora bien si estás parado dentro del directorio puedes hacerlo asi.
#> pwd /etc/rc.d/init.d #> ./smb stop Shutting down Samba SMB daemon [OK]
Se trata de tan solo un script asi que con el permiso de ejecucción (x) puedes ejecutarlo con ./ seguido del nombre del servicio, sin espacios y después el argumento que necesites, inicarlo, detenerlo etc.
El comando service
En varias distros, como Fedora o RedHat, existe el comando service, este comando permite también iniciar y/o detener servicios, de hecho funciona exactamente igual a como si escribieramos la ruta completa hacía el directorio init.d, con service se indica de la siguiente manera:
#> service mysql status Checking for service MySQL: stopped
Si se desea iniciarlo:
#> service mysql start Starting service MySQL [OK]
Iniciando servicios desde el arranque del sistema
En muchos casos es conveniente que un servidor o servicio inicien junto con el arranque del equipo en si, por ejemplo el servidor web Apache o alguna base de datos, esto es para que estén disponibles todo el tiempo y no se requiera de intervención del administrador para iniciarlos.
En Linux, a diferencia de otros sistemas operativos, es posible configurarlo en base a niveles de ejecucción (run levels), cada nivel de ejecucción (en la mayoría de las distros son 7), inicia o detiene (Start o Kill) ciertos servicios. Estos niveles son los siguientes:
- 0 Detener o apagar el sistema
- 1 Modo monousuario, generalmente utilizado para mantenimiento del sistema
- 2 Modo multiusuario, pero sin soporte de red
- 3 Modo multiusuario completo, con servicios de red
- 4 No se usa, puede usarse para un inicio personalizado
- 5 Modo multiusuario completo con inicio gráfico ( X Window)
- 6 Modo de reinicio (reset)
Por ejemplo el nivel 0, que apaga el equipo, mata o detiene a todos los procesos del sistema, todos los servicios, lo mismo hace el 6 con la diferencia que después inicia un script que permite reiniciar el sistema. El nivel por omisión o por default del sistema esta definifo en /etc/inittab, en la línea initdefault:
$> grep initdefault /etc/inittab id:5:initdefault: # runlevel 0 is System halt (Do not use this for initdefault!) # runlevel 6 is System reboot (Do not use this for initdefault!)
La salida es de una distro OpenSuse 10. Como se puede apreciar existe una línea que comienza con id, seguido por 5 que indicaría entonces el nivel por default del sistema, basta con cambiar este valor con cualquier editor, reiniciar el equipo y se entraría a otro nivel, por ejemplo el 3 que tiene una funcionalidad completa pero sin sistema de ventanas X Window (ideal para equipos obsoletos o con pocos recursos de hardware). Nótese que en el listado previo aparecen dos líneas de comentarios, las que empiezan con #, que hacen la advertencia de no usar nunca los niveles 0 y 6 de initdefault, ya que jamás arrancaría el equipo. Se tendría que usar un método de rescate. (He aqui la importancia de jamás dejar una terminal abandonada con una sesión de root abierta ya que podría llegar un bromista y rápidamente cambiar la línea initdefault a 6 por ejemplo, y después estaría muy divertido viendo a un pobre administrador novato trátandose de explicar porque diablos el equipó se resetea hasta el infinito sin nunca entrar a una pantalla de login).
El nivel de ejecucción actual del sistema puede ser consultado con who -r y con el comando runlevel, este último muestra dos números el primero es el nivel previo en que se estaba y el segundo el nivel actual, si no se ha cambiado de nivel aparece una N.
Comando init
Este comando te permite cambiar el nivel de ejecucción actual por otro, es decir puedes estar en el nivel 3 y en cualquier momento pasar al 5 o viceversa, o entrar a un modo monousuario para tareas de mantenimiento como utilizar fsck. Esto sin necesidad de cambiar la línea initdefault en /etc/inittab, simplemente usando el comando init:
#> init 3
Puedes reiniciar el equipo con init 6 o incluso apagarlo con init 0, de hecho shutdown y otros comandos como halt, lo que hacen es invocar a init para apagar el equipo mas otras tareas como sincronizar buffers, etc. Si estás en una máquina que tenga particiones con sistemas de archivos ext2 o de windows como FAT, si invocas init 0 o init 6 tal cual, corres el riesgo de perder datos que no estén guardados en disco todavía, para esto combina init 0 con el comando sync que escribe lo que este en buffers de memoria a disco:
#> sync; sync; init 0
Con un doble sync nos aseguramos que todo se escriba en disco antes de comenzar a apagar.
Los directorios rc
Debajo de /etc se encuentra el directorio rc.d que a la vez contiene un directorio para cada nivel de ejecucción, asi tenemos rc0.d, rc1.d, rc2.d, rc3.d, etc. Hay algunas distros que estos directorios están ubicados directamente en /etc. Como ya te imaginaras, cada uno de estos directorios contiene scripts (o mas bien enlaces a scripts) que apuntan al directorio init.d, entonces el comando init (ya sea ejecutado manualmente o cuando se inicia el sistema), dependiendo del nivel indicado leera cada uno de los enlaces o accesos directos del directorio respectivo.
Ahora bien, un ejemplo (parcial) típico de estos directorios puede ser el siguiente, tomado de rc3.d
lrwxrwxrwx 1 root root 7 Oct 20 20:05 K22dbus -> ../init.d/dbus lrwxrwxrwx 1 root root 9 Oct 20 20:05 K22resmgr -> ../init.d/resmgr lrwxrwxrwx 1 root root 8 Oct 20 20:05 K24fbset -> ../init.d/fbset lrwxrwxrwx 1 root root 9 Oct 20 20:05 K24random -> ../init.d/random lrwxrwxrwx 1 root root 8 Oct 20 18:23 S01fbset -> ../init.d/fbset lrwxrwxrwx 1 root root 9 Oct 20 18:22 S01random -> ../init.d/random lrwxrwxrwx 1 root root 7 Oct 20 18:29 S03dbus -> ../init.d/dbus lrwxrwxrwx 1 root root 9 Oct 20 18:23 S03resmgr -> ../init.d/resmgr lrwxrwxrwx 1 root root 12 Oct 20 18:24 S04boot.udev -> ../init.d/boot.udev lrwxrwxrwx 1 root root 10 Oct 20 21:16 S05network -> ../init.d/network lrwxrwxrwx 1 root root 9 Oct 20 18:23 S06syslog -> ../init.d/syslog
Nótese que todos son enlaces al directorio init.d que como ya se vió previamente es donde realmente están ubicados los scripts de arranque de los servicios o servidores. También, todos los enlaces comienzan con K (kill) o con S (start), es pues fácil deducir que los que comienzan con K son scripts que recibirán el argumento stop y los que comienzan con S el de start, es decir, se inician. Esta gran simplicidad ofrece una enorme potencia al momento de configurar servicios ya que basta con agregar o quitar enlaces con el formato indicado para personalizar los niveles de ejecucción a nuestro gusto.
Después de la K o S sigue un número consecutivo, seguido generalmente del nombre del servicio que afectan, el número secuencial es simplemente el orden en que se leeran los scripts, primero los K comenzando con el 01 y hacía adelante y después los S. Entonces si por ejemplo no queremos que se inicie el samba en el nivel 3 bastaría con borrar su enlace en este directorio:
#> pwd /etc/rc.d/rc3.d #> rm S54smb
Y listo, el servidor samba ya no arrancaría cuando entremos en este nivel de ejecucción. Si por lo contrario lo que deseamos es iniciar (o apagar) un servicio, basta con crear su enlace en el directorio respectivo:
#> pwd /etc/rc.d/rc5.d #> ln -s /etc/rc.d/init.d/mysql S90mysql #> ls -l S90mysql lrwxrwxrwx 1 root root 9 Oct 20 18:23 S90mysql -> ../init.d/mysql
Con esto la siguiente vez que iniciemos el equipo o cambiemos a nivel 5 con init, también se iniciará el servidor de la base de datos MySQL. El número 90 es escogido al azar entre 01 y 99 es simplemente el orden en que serán iniciados o detenidos los servicios.
Comando chkconfig
Lo anterior puede resultar engorroso para más de alguno pero es la única manera si no se tienen herramientas gráficas o de línea de comandos para configurar los servicios mas agilmente, y precisamente una de estas herramientas de línea de comandos es chkconfig que permite configurar que servicios arrancan/detenien en cada nivel de ejecucción. Aclaración: chkconfig no inicia ni detiene servicios al momento (excepto aquellos bajo xinetd), tan solo crea o elimina precisamente los enlaces de los que se habló en el punto anterior de una manera mas amigable. Si lo que se quiere es iniciar o detener el servicio en tiempo real o manualmente hay que usar service o directamente el script con su argumento conveniente tal como se explicó anteriormente.
Veamos ejemplos que muestran como trabajar con chkconfig.
Con la opción –list nos da una lista completa de todos los servicios instalados y para cada nivel si arrancará (on) al entrar a ese nivel o se detendrá (off) o simplemente no se iniciara. Nótese que al final de la lista vienen los servicios que dependen del superservidor xinetd.
#> chkconfig --list
apache2 0:off 1:off 2:off 3:off 4:off 5:off 6:off
bluetooth 0:off 1:off 2:off 3:off 4:off 5:off 6:off
cron 0:off 1:off 2:on 3:on 4:off 5:on 6:off
cups 0:off 1:off 2:on 3:on 4:off 5:on 6:off
dhcpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
ldap 0:off 1:off 2:off 3:off 4:off 5:off 6:off
mysql 0:off 1:off 2:off 3:off 4:off 5:off 6:off
named 0:off 1:off 2:off 3:off 4:off 5:off 6:off
network 0:off 1:off 2:on 3:on 4:off 5:on 6:off
nfs 0:off 1:off 2:off 3:on 4:off 5:on 6:off
quotad 0:off 1:off 2:off 3:off 4:off 5:off 6:off
smb 0:off 1:off 2:off 3:on 4:off 5:on 6:off
vmware 0:off 1:off 2:on 3:on 4:off 5:on 6:off
xinetd 0:off 1:off 2:off 3:on 4:off 5:on 6:off
zebra 0:off 1:off 2:off 3:off 4:off 5:off 6:off
xinetd based services:
rsync: off
sane-port: off
servers: off
services: off
swat: on
systat: off
tftp: off
time: off
time-udp: off
vnc: off
vsftpd: off
Si se indica como argumento el nombre de algún servicio nos regresará su estatus:
#> chkconfig smb smb on
Sin ningún argumento nos dará una lista con el status de todos los servicios:
#> chkconfig httpd off mysql on smb on
Se desea que el servidor web apache (httpd) inicie cuando se entra en el nivel 5, entonces usamos la opción –level:
#> chkconfig --level 5 httpd on
La base de datos MySQL no se desea que inicie en los niveles 3 y 5, solo hasta que el administrador decida arrancarla:
#> chkconfig --level 35 mysql off
Ambientes gráficos
En todas las distribucciones actuales en sus ambientes gráficos X Window incluyen herramientas de configuración se servicios que facilitan mucho la administración de servidores. En una misma pantalla podemos cambiar niveles de ejecucción, con un click indicar si el servicio arranca o se detiene, incluso iniciarlos o detenerlos en ese momento, todo vía gráfica. Lo mejor es aprenderlo a realizarlo desde la línea de comandos ya que esta será muy similar en casi todas las distros o puede ser que el linux que se esté utilizando no tenga servicios gráficos, aun asi, ya familiarizados con una distribucción es muy sencillo e intuitivo utilizar estas herramientas gráficas por lo que no entraremos en detalles, solo diremos que por ejemplo en SuSE con yast o yast2 es posible no solo controlar servicios sino multitud de cosas mas, en redhat tenemos redhat-config-services y en fedora e incluso versiones enterprise de redhat es system-config-services, mandrake, ubuntu, etc. Todas tienen una interfaz gráfica, es solo cuestión de buscarla.
Por otro lado tenemos interfaces web como la excelente herramienta webmin, que también permite un control total sobre el manejo de servidores, sumamente eficaz cuando se controlan servidores via remota por la web.
(extraido de http://www.linuxtotal.com.mx/index.php?cont=info_admon_003
Curs tècnic sistemes microinformàtics. Sessió 29 d’abril de 2009
Posted by joaquin in BIT sistemes micro-informatics, cursos on 29/04/2009
Administración gráfica de un sistema linux/unix II (y repaso sobre virus en windows)
Hoy seguimos configurando la máquina con las gadmin tools
http://patrick.seeling.org/files/fall2008/cis463_GadminToolsd.pdf
Servidor de dhcp
El Servidor de nombres Bind9
Sincronizador de directorios Rsynk
configuración de un servidor proxy
http://www.antoniomtz.org/?q=servidor-proxy-squid
Como ha salido el tema en la clase:
como solucionar los problemas de virus:
Paso 1.- intentar arracar la máquina con un cdlive con antivirus para evitar que un virus que ha infectado el sistema continue en memoria despues de haber sido borrado del disco duro.
En el caso de que esto no sea posible, iniciar la máquina en modo a prueba de fallos y pasar el antivirus.
antivirus freeware:
avast
avira
cd life con antivirus:
kaspersky y avast
Para borrar archivos bloqueados: unlocker
solucionador de varios virus y malware: combofix (freeware)
Virus por USB
Para prevenir infecciones en la máquina por memorias usb, hay que desconectar en la máquina el autoarranque por usb:
gpedit.msc -> configuración de usuario -> sistema -> desactivar reproducción automatica
Para evitar infecciones en la memoria, proteger contra escritura, o comprar memorias que permiten proteger contra escritura mediante un boton o pestaña en la memoria.
En el caso de infeccion borrar con el unlocker o desde linux los archivos generados como:
autorun
recicle.bin
boot.bin
Programas anti spyware
spybot search & destroy
super spyware
malware bites
Curs administració de sistemes GNU/Linux. Sessió 25. Sessió 28 d’abril de 2009
Posted by xavi in administrador sistemes Linux CEM Formació, cursos on 28/04/2009
En la sesión de hoy, aparte de acabar los temas pendientes que acabaron en la sesión anterior (ndiswrapper para intentar configurar drivers wifi de windows sobre linux) y todo el tema de los winmódems nos dedicaremos a la …
Compilación y instalación de un nucleo nuevo o kernel del sistema GNU/linux. (http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.28.tar.gz).No me gusta ninguna de las guias que he visto o sea que os hago una de manera rápida.
1.-Os bajáis el paquete linux-2.6.28.tar.gz del enlace de arriba.
2.- Lo descomprimís en el directorio /usr/src/linux. . Si no existe este directorio, lo creáis. Para descomprimir, tar zxvf linux-2.6.28.tar.gz.
3.- Copiamos el fichero /boot/config-2.6.27 a /usr/src/linux/.config.Son las opciones de hardware y compilación.
4.- Instalamos ncurses (sudo aptitude install ncurses-dev)
5.- Compilamos.
sudo make && sudo make modules && sudo make modules_install
6.- Copiamos los ficheros donde toca
cp /usr/src/linux/arch/i386/boot/vmlinuz /boot/vmlinuz-2.6.28
cp /usr/src/linux/.config /boot/config-2.6.28
cp /usr/src/linux/System.map /boot/System.map-2.6.28
7.- Creamos el nuevo initrd.img
sudo aptitude install yaird (el sustituto del clasico mkinitrd)
sudo yaird 2.6.28 -o /boot/initrd.img-2.6.28
8.- Editamos /boot/grub/menu.lst
y añadimos las líneas del nuevo nucleo.
title Nuevo kernel root (hd1,0) # la partición que toque kernel /boot/vmlinuz-2.6.28 root=/dev/hdb1 ro (# sustituir /dev/hdb1 por la partición que toque) initrd /boot/initrd.img-2.6.28 savedefault boot
Curs tècnic sistemes microinformàtics. Sessió 28 d’abril de 2009
Posted by joaquin in BIT sistemes micro-informatics, cursos on 28/04/2009
Configurando servicios en modo gráfico.
Como la clase está un poco saturada estos días de consola, vamos a ver como configurar servicios importantes a través del entorno gráfico
Gadmin-tools
http://gadmintools.flippedweb.com/
Un manual para configurar algunas de ellas:
http://patrick.seeling.org/files/fall2008/cis463_GadminToolsd.pdf
dhcp, dns httpd
En el caso de que no pudieramos instalar uno de los programas con el aptitude o el apt, o despues de hacerlo no funciona, siempre se puede instalar desde el código fuente, bajandolo desde la página oficial del programa gadmintools.com
averiguamos las dependencias con
aptitude show gadmin-tools
Y las instalamos con el apt o a mano
Despues bajamos el tar.gz y lo descomprimimos con
tar -zxvf nombre_del_paquete.tar.gz
Leemos el fichero README y el INSTALL para ver las instrucciones de instalación.