[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: saber comandos



El sáb, 02-05-2009 a las 14:23 -0400, Reiniel Gonzalez Martinez
escribió:
> Hola a tod@s, quisiera saber si existe algún comando que me dijera
> cuanta SWAP, CPU y RAM está utilizando mi servidor, en un determinado
> momento, no necesito ningún programa que me diga esto como htop por
> ejemplo solo los comandos….gracias de antemano 
> 
> 

Perdón, no me dí cuenta de tu procedencia, mil disculpas... esta es la
información más relevante a la que me refería...

Texto tomado de la Web, tiene los permisos adecuados para ello...
(Espero te sirva)

DESCUBRIENDO LAS POSIBILIDADES DEL DIRECTORIO /PROC
Copyright 2005-2008 Sergio González Durán
Se concede permiso para copiar, distribuir y/o modificar este documento
siempre y cuando se cite al autor y la fuente de linuxtotal.com.mx y
según los términos de la GNU Free Documentation License, Versión 1.2 o
cualquiera posterior publicada por la Free Software Foundation.
autor: Federico Kereki (fkereki.@gmail.com)
traducción: sergio.gonzalez.duran@gmail.com
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=0x317 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.


Conclusión
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?.


Saludos, 
Mauricio J. Adonis C.
------------------------------------------
Usuario Linux  # 482032
Usuario Ubuntu #  25554
Ubuntu Code of Conduct - 1.0.1 signatario
(FD9329AC66C0907805831BF8E8D0B29A3AE3D244)
------------------------------------------

Attachment: signature.asc
Description: Esta parte del mensaje =?ISO-8859-1?Q?est=E1?= firmada digitalmente


Reply to: