Archive for April, 2009

Curs tècnic sistemes microinformàtics. Sessió 30 d’abril de 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.

, , , , , ,

1 Comment

Curs administració de sistemes GNU/Linux. Sessió 26. Sessió 29 d’abril de 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/state o en algunas distros cat /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/cpuinfo me 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   autofs

    La 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

  • R runnable, en ejecución, corriendo o ejecutándose
  • S sleeping, proceso en ejecución pero sin actividad por el momento, o esperando por algún evento para continuar
  • T sTopped, proceso detenido totalmente, pero puede ser reiniciado
  • Z zombie, difunto, proceso que por alguna razón no terminó de manera correcta, no debe haber procesos zombies
  • D uninterruptible sleep, son procesos generalmente asociados a acciones de IO del sistema
  • X dead, muerto, proceso terminado pero que sigue apareciendo, igual que los Z no deberían verse nunca

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) SIGBUS       8) SIGFPE
 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

, , ,

No Comments

Curs tècnic sistemes microinformàtics. Sessió 29 d’abril de 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

, , ,

No Comments

Curs administració de sistemes GNU/Linux. Sessió 25. Sessió 28 d’abril de 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

1 Comment

Curs tècnic sistemes microinformàtics. Sessió 28 d’abril de 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.

, , , ,

No Comments