En linux, se puede obtener la información del hardware utilizando una serie de comandos, que funcionan con cuenta de usuario normal. Todos estos comandos vienen en la instalación por defecto, eso sí, para conocer datos como de la batería y otros manejados por ACPI existe acpitool, que se debe instalar por separado y pueden consultar este post
- cat /etc/redhat-release, muestra la versión de Fedora o CentOS o Redhat Enterprise o Mandriva o ... Suse?? imagino que debe funcionar
[root@note3 ~]# cat /etc/redhat-release
Fedora release 16 (Verne)
- lscpi
00:00.0 Host bridge: Advanced Micro Devices [AMD] RS880 Host Bridge
00:01.0 PCI bridge: Hewlett-Packard Company Device 9602
00:04.0 PCI bridge: Advanced Micro Devices [AMD] RS780 PCI to PCI bridge (PCIE port 0)
00:05.0 PCI bridge: Advanced Micro Devices [AMD] RS780 PCI to PCI bridge (PCIE port 1)
00:07.0 PCI bridge: Advanced Micro Devices [AMD] RS780 PCI to PCI bridge (PCIE port 3)
00:09.0 PCI bridge: Advanced Micro Devices [AMD] RS780/RS880 PCI to PCI bridge (PCIE port 4)
00:11.0 SATA controller: ATI Technologies Inc SB7x0/SB8x0/SB9x0 SATA Controller [AHCI mode]
00:12.0 USB Controller: ATI Technologies Inc SB7x0/SB8x0/SB9x0 USB OHCI0 Controller
00:12.2 USB Controller: ATI Technologies Inc SB7x0/SB8x0/SB9x0 USB EHCI Controller
00:13.0 USB Controller: ATI Technologies Inc SB7x0/SB8x0/SB9x0 USB OHCI0 Controller
00:13.2 USB Controller: ATI Technologies Inc SB7x0/SB8x0/SB9x0 USB EHCI Controller
00:14.0 SMBus: ATI Technologies Inc SBx00 SMBus Controller (rev 42)
00:14.2 Audio device: ATI Technologies Inc SBx00 Azalia (Intel HDA) (rev 40)
00:14.3 ISA bridge: ATI Technologies Inc SB7x0/SB8x0/SB9x0 LPC host controller (rev 40)
00:14.4 PCI bridge: ATI Technologies Inc SBx00 PCI to PCI Bridge (rev 40)
00:14.5 USB Controller: ATI Technologies Inc SB7x0/SB8x0/SB9x0 USB OHCI2 Controller
00:16.0 USB Controller: ATI Technologies Inc SB7x0/SB8x0/SB9x0 USB OHCI0 Controller
00:16.2 USB Controller: ATI Technologies Inc SB7x0/SB8x0/SB9x0 USB EHCI Controller
00:18.0 Host bridge: Advanced Micro Devices [AMD] Family 10h Processor HyperTransport Configuration
00:18.1 Host bridge: Advanced Micro Devices [AMD] Family 10h Processor Address Map
00:18.2 Host bridge: Advanced Micro Devices [AMD] Family 10h Processor DRAM Controller
00:18.3 Host bridge: Advanced Micro Devices [AMD] Family 10h Processor Miscellaneous Control
00:18.4 Host bridge: Advanced Micro Devices [AMD] Family 10h Processor Link Control
01:05.0 VGA compatible controller: ATI Technologies Inc M880G [Mobility Radeon HD 4200]
01:05.1 Audio device: ATI Technologies Inc RS880 Audio Device [Radeon HD 4200]
03:00.0 SD Host controller: Ricoh Co Ltd MMC/SD Host Controller (rev 01)
03:00.1 System peripheral: Ricoh Co Ltd Memory Stick Host Controller (rev 01)
03:00.2 System peripheral: Ricoh Co Ltd Device e852 (rev 01)
03:00.3 FireWire (IEEE 1394): Ricoh Co Ltd FireWire Host Controller (rev 01)
07:00.0 Network controller: Broadcom Corporation BCM43224 802.11a/b/g/n (rev 01)
- lscpu, para obtener detalles del procesador instalado:
[root@note3 ~]# lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 2
On-line CPU(s) list: 0,1
Thread(s) per core: 1
Core(s) per socket: 2
Socket(s): 1
NUMA node(s): 1
Vendor ID: AuthenticAMD
CPU family: 16
Model: 6
Stepping: 3
CPU MHz: 2800.000
BogoMIPS: 5586.04
Virtualization: AMD-V
L1d cache: 64K
L1i cache: 64K
L2 cache: 1024K
NUMA node0 CPU(s): 0,1
- lsusb, para obtener información sobre los puertos usb y dispositivos conectados:
[root@mardones3 ~]# lsusb
Bus 004 Device 002: ID 04e6:5119 SCM Microsystems, Inc. SCR3340 - ExpressCard54 Smart Card Reader
Bus 005 Device 002: ID 03f0:231d Hewlett-Packard
Bus 006 Device 002: ID 138a:0007 Validity Sensors, Inc. VFS451 Fingeprint Reader
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Si conocen otro comando útil, no dejen de sugerirlo.
Este blog tiene la idea de acercar un poco el tema de las herramientas computacionales, usando preferencialemente Linux, y traducir a "cristiano" todos esos programas, software y otras palabras raras que usan los que saben de computación y aquellos que dicen saber también. Por eso aquí va un filtro con cosas útiles e intentado ser claro, cualquier cosa... por mail, msn, comentarios, etc como quieran, manden preguntas, felicitaciones, reclamos, inquietudes, etc. etc.
Buscar aquí
25 octubre 2012
01 octubre 2012
Cómo obtener la lista de archivos abiertos por un proceso
Más de alguna vez es necesario conocer qué archivos está utilizando un proceso, si mantiene algún puerto abierto o talvez, cuántos archivos tiene abierto el proceso. Para este tipo de consultas, lsof es la respuesta, tanto en linux como HPUX.
Es importante ejecutar este comando con usuario root, para tener acceso a la información de todos los procesos del sistema.
Lsof (que significa lista de archivos abiertos) soluciona esto con el switch -p. Este switch, permite pasar el PID del proceso que interesa y devuelve la lista completa de archivos en el sistema, por ejemplo, si en una consola tengo un comando vi archivodeprueba y busco el lsof de esto, me muestra:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
vim 7230 art cwd DIR 8,5 4096 11272193 /home/art
vim 7230 art rtd DIR 8,2 4096 2 /
vim 7230 art txt REG 8,2 2097296 5524129 /usr/bin/vim
vim 7230 art mem REG 8,2 43504 4980738 /lib64/libcrypt-2.14.90.so
vim 7230 art mem REG 8,2 129136 4980749 /lib64/libselinux.so.1
vim 7230 art mem REG 8,2 168512 4980787 /lib64/ld-2.14.90.so
vim 7230 art mem REG 8,2 2076800 4980849 /lib64/libc-2.14.90.so
vim 7230 art mem REG 8,2 145176 4980852 /lib64/libpthread-2.14.90.so
vim 7230 art mem REG 8,2 22696 4980869 /lib64/libdl-2.14.90.so
vim 7230 art mem REG 8,2 48128 4980853 /lib64/librt-2.14.90.so
vim 7230 art mem REG 8,2 603096 4980862 /lib64/libm-2.14.90.so
vim 7230 art mem REG 8,2 89592 4980864 /lib64/libgcc_s-4.6.3-20120306.so.1
vim 7230 art mem REG 8,2 122536 4980909 /lib64/libresolv-2.14.90.so
vim 7230 art mem REG 8,2 1768576 5511386 /usr/lib64/libpython2.7.so.1.0
vim 7230 art mem REG 8,2 25472 5507774 /usr/lib64/libgpm.so.2.1.0
vim 7230 art mem REG 8,2 390288 4981185 /lib64/libfreebl3.so
vim 7230 art mem REG 8,2 20144 4981210 /lib64/libattr.so.1.1.0
vim 7230 art mem REG 8,2 162128 4981202 /lib64/libtinfo.so.5.9
vim 7230 art mem REG 8,2 17512 4981201 /lib64/libutil-2.14.90.so
vim 7230 art mem REG 8,2 34392 4981212 /lib64/libacl.so.1.1.0
vim 7230 art mem REG 8,2 120624 4980926 /lib64/libnsl-2.14.90.so
vim 7230 art mem REG 8,2 1552816 5777033 /usr/lib64/perl5/CORE/libperl.so
vim 7230 art mem REG 8,2 951176 5510911 /usr/lib64/libruby.so.1.8.7
vim 7230 art mem REG 8,2 62552 4980826 /lib64/libnss_files-2.14.90.so
vim 7230 art mem REG 8,2 104997456 5507757 /usr/lib/locale/locale-archive
vim 7230 art 0u CHR 136,3 0t0 6 /dev/pts/3
vim 7230 art 1u CHR 136,3 0t0 6 /dev/pts/3
vim 7230 art 2u CHR 136,3 0t0 6 /dev/pts/3
vim 7230 art 3u REG 8,5 12288 11273358 /home/art/.archivodeprueba.swp
Si tuviera un puerto abierto aparecería algo como:
java 4643 acloc 121u inet 0xe0000001b7328a00 0t0 TCP *:8009 (LISTEN)
Ahora, si de antemano se tiene el puerto abierto, se puede usar éste artículo para encontrar el ejecutable del proceso
Es importante ejecutar este comando con usuario root, para tener acceso a la información de todos los procesos del sistema.
Lsof (que significa lista de archivos abiertos) soluciona esto con el switch -p. Este switch, permite pasar el PID del proceso que interesa y devuelve la lista completa de archivos en el sistema, por ejemplo, si en una consola tengo un comando vi archivodeprueba y busco el lsof de esto, me muestra:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
vim 7230 art cwd DIR 8,5 4096 11272193 /home/art
vim 7230 art rtd DIR 8,2 4096 2 /
vim 7230 art txt REG 8,2 2097296 5524129 /usr/bin/vim
vim 7230 art mem REG 8,2 43504 4980738 /lib64/libcrypt-2.14.90.so
vim 7230 art mem REG 8,2 129136 4980749 /lib64/libselinux.so.1
vim 7230 art mem REG 8,2 168512 4980787 /lib64/ld-2.14.90.so
vim 7230 art mem REG 8,2 2076800 4980849 /lib64/libc-2.14.90.so
vim 7230 art mem REG 8,2 145176 4980852 /lib64/libpthread-2.14.90.so
vim 7230 art mem REG 8,2 22696 4980869 /lib64/libdl-2.14.90.so
vim 7230 art mem REG 8,2 48128 4980853 /lib64/librt-2.14.90.so
vim 7230 art mem REG 8,2 603096 4980862 /lib64/libm-2.14.90.so
vim 7230 art mem REG 8,2 89592 4980864 /lib64/libgcc_s-4.6.3-20120306.so.1
vim 7230 art mem REG 8,2 122536 4980909 /lib64/libresolv-2.14.90.so
vim 7230 art mem REG 8,2 1768576 5511386 /usr/lib64/libpython2.7.so.1.0
vim 7230 art mem REG 8,2 25472 5507774 /usr/lib64/libgpm.so.2.1.0
vim 7230 art mem REG 8,2 390288 4981185 /lib64/libfreebl3.so
vim 7230 art mem REG 8,2 20144 4981210 /lib64/libattr.so.1.1.0
vim 7230 art mem REG 8,2 162128 4981202 /lib64/libtinfo.so.5.9
vim 7230 art mem REG 8,2 17512 4981201 /lib64/libutil-2.14.90.so
vim 7230 art mem REG 8,2 34392 4981212 /lib64/libacl.so.1.1.0
vim 7230 art mem REG 8,2 120624 4980926 /lib64/libnsl-2.14.90.so
vim 7230 art mem REG 8,2 1552816 5777033 /usr/lib64/perl5/CORE/libperl.so
vim 7230 art mem REG 8,2 951176 5510911 /usr/lib64/libruby.so.1.8.7
vim 7230 art mem REG 8,2 62552 4980826 /lib64/libnss_files-2.14.90.so
vim 7230 art mem REG 8,2 104997456 5507757 /usr/lib/locale/locale-archive
vim 7230 art 0u CHR 136,3 0t0 6 /dev/pts/3
vim 7230 art 1u CHR 136,3 0t0 6 /dev/pts/3
vim 7230 art 2u CHR 136,3 0t0 6 /dev/pts/3
vim 7230 art 3u REG 8,5 12288 11273358 /home/art/.archivodeprueba.swp
Si tuviera un puerto abierto aparecería algo como:
java 4643 acloc 121u inet 0xe0000001b7328a00 0t0 TCP *:8009 (LISTEN)
Ahora, si de antemano se tiene el puerto abierto, se puede usar éste artículo para encontrar el ejecutable del proceso
27 septiembre 2012
Borrado rápido en VI
Vi tiene mil comandos de teclas, unos muy útiles son para borrar palabras o líneas.
- Borrar desde una línea N hasta el inicio del archivo, se debe usar la secuencia: Escape d1G así tal cual presionar la tecla escape, la letra d, el número 1 y G mayúscula (Shift + G)
- Borrar desde una línea N hasta el final del archivo, se debe usar la secuencia: Escape dG esto es, presionar Escape, seguido de la letra d y G mayúscula.
- Borrar un caracter, para borrar un caracter hay que estar en modo Escape y presionar la letra x esto borra un caracter a la derecha, si no existen más carácteres a la derecha, comienza a borrar hacia la izquierda.
- Borrar una palabra completa, para borrar una palabra completa (hacia la derecha) se presiona la tecla d y w también en modo escape.
Evitar el indent en VI
Puede pasar a veces que al copiar texto en VI, comience a colocar tabs en las líneas del archivo despues de caracteres como : ; , esto es que tiene habilitada la configuración de identar las líneas, lo que puede ser útil si se programa, pero una manera fácil de quitar esto temporalmente es usando el comando de vi:
:set noautoindent
Ojo, que primero hay que borrar lo copiado y después lo volvemos a pegar y será como el original :D
23 agosto 2012
Definir la tecla para borrar en Unix
Un lío clásico en Unix como definir la tecla para borrar el caracter anterior, sin duda hay varias formas, pero una simple de recordar es ejecutando
stty erase y se presiona la tecla de backspace (o borrado) y después enter
Con esto se reemplaza el molesto Ctrl-H u otra loca combinación de teclas. Ojo! que dura la sesión.
stty erase
Con esto se reemplaza el molesto Ctrl-H u otra loca combinación de teclas. Ojo! que dura la sesión.
16 agosto 2012
Shortcuts para herramientas windows
Si eres uno de lo que no les gusta pasar por una serie de ventanas para llegar a cambiar opciones, estos son algunos shortcut útiles:
- inetcpl.cpl, opciones de internet.
- tecla windows + R, ventana de ejecutar.
- tecla windows + tecla pausa, propiedades del sistema, útil para revisar cosas como la RAM instalada, velocidad del procesador, ir al administrador de dispositivo, cambiar variables de ambiente, etc.
- tecla windows + E, explorador de archivos.
- services.msc, lista de servicios del sistema.
Trabajar con dos monitores
Hoy por hoy, en linux es bastante simple de trabajar con más de un monitor, pues los detecta sólo y existen herramientas gráficas que ayudan a solucionar algunos problemas. Por ejemplo, Gnome, tiene una herramienta gráfica que ayuda a resolver el orden de los monitores, pero XFCE al parecer la mejor forma es hacerlo vía comando. Primero, se debe saber como los monitores son conocidos por el sistema, para ello se ejecuta el comando xrandr sin parámetros:
[root@mardones2 ~]# xrandr
Screen 0: minimum 320 x 200, current 2646 x 1024, maximum 8192 x 8192
VGA-0 connected 1280x1024+0+0 (normal left inverted right x axis y axis) 338mm x 270mm
1280x1024 60.0*+ 75.0
1152x864 75.0
1024x768 75.1 70.1 60.0
832x624 74.6
800x600 72.2 75.0 60.3
640x480 72.8 75.0 60.0
720x400 70.1
LVDS connected 1366x768+1280+0 (normal left inverted right x axis y axis) 309mm x 174mm
1366x768 60.0*+
1280x720 59.9
1152x768 59.8
1024x768 120.1 60.0 59.9
960x720 120.0
928x696 120.1
896x672 120.0
800x600 120.0 60.3 59.9 56.2
848x480 59.7
700x525 120.0
720x480 59.7
640x512 120.0
640x480 120.0 59.9 59.4
512x384 120.0
400x300 120.6 112.7
320x240 120.1
DisplayPort-0 disconnected (normal left inverted right x axis y axis)
DisplayPort-1 disconnected (normal left inverted right x axis y axis)
Aquí se ve que el VGA-0 y LVDS, vga es monitor del notebook y LVDS es el monitor externo enchufado (bien podría ser un televisor o proyector... de ahí lo importante de saber primero como lo reconoce el sistema).
Así, si se quiere dejar el monitor del notebook como principal y el monitor externo orientado de tal forma, que al mover el mouse hacia la derecha pasar al monitor extendido podemos resolver esto de la siguiente forma:
xrandr --output VGA-0 --right-of LVDS
si se prefiere que el sentido contrario se usa --left-of
como siempre, man xrandr entrega las opciones, que pueden ser muy utiles.
[root@mardones2 ~]# xrandr
Screen 0: minimum 320 x 200, current 2646 x 1024, maximum 8192 x 8192
VGA-0 connected 1280x1024+0+0 (normal left inverted right x axis y axis) 338mm x 270mm
1280x1024 60.0*+ 75.0
1152x864 75.0
1024x768 75.1 70.1 60.0
832x624 74.6
800x600 72.2 75.0 60.3
640x480 72.8 75.0 60.0
720x400 70.1
LVDS connected 1366x768+1280+0 (normal left inverted right x axis y axis) 309mm x 174mm
1366x768 60.0*+
1280x720 59.9
1152x768 59.8
1024x768 120.1 60.0 59.9
960x720 120.0
928x696 120.1
896x672 120.0
800x600 120.0 60.3 59.9 56.2
848x480 59.7
700x525 120.0
720x480 59.7
640x512 120.0
640x480 120.0 59.9 59.4
512x384 120.0
400x300 120.6 112.7
320x240 120.1
DisplayPort-0 disconnected (normal left inverted right x axis y axis)
DisplayPort-1 disconnected (normal left inverted right x axis y axis)
Aquí se ve que el VGA-0 y LVDS, vga es monitor del notebook y LVDS es el monitor externo enchufado (bien podría ser un televisor o proyector... de ahí lo importante de saber primero como lo reconoce el sistema).
Así, si se quiere dejar el monitor del notebook como principal y el monitor externo orientado de tal forma, que al mover el mouse hacia la derecha pasar al monitor extendido podemos resolver esto de la siguiente forma:
xrandr --output VGA-0 --right-of LVDS
si se prefiere que el sentido contrario se usa --left-of
como siempre, man xrandr entrega las opciones, que pueden ser muy utiles.
11 julio 2012
Convertir numeros hexadecimales o binarios usando bc
Convertir números grandes puede ser un lío por ejemplo si queremos transformar a decimal el número 17870283321406128128 windows muestra un valor algo extraño con varias letras C, que no está bien. Afortunadamente, unix hace mejor el trabajo y usando algo tan simple como bc, podemos obtener el valor correcto para ello se usa la opción obase=16 pues tenemos un decimal a hexadecimal:
servidor > bc
obase=16
17870283321406128128
F800000000000000
y listo... ahi tenemos el valor real... ahora si tenemos un hexadecimal y queremos pasar a decimal:
servidor > bc
ibase=16
F800000000000000
17870283321406128128
Ahora, si queremos pasar de binario a decimal o hexadecimal, hay que usar el ibase u obase con =2, así por ejemplo:
servidor > bc
ibase=2
1010
10
obtenemos que el binario 1010 es un 10 decimal.
PD: para salir de bc se usa quit
servidor > bc
obase=16
17870283321406128128
F800000000000000
y listo... ahi tenemos el valor real... ahora si tenemos un hexadecimal y queremos pasar a decimal:
servidor > bc
ibase=16
F800000000000000
17870283321406128128
Ahora, si queremos pasar de binario a decimal o hexadecimal, hay que usar el ibase u obase con =2, así por ejemplo:
servidor > bc
ibase=2
1010
10
obtenemos que el binario 1010 es un 10 decimal.
PD: para salir de bc se usa quit
12 junio 2012
Agregar/Quitar texto a cada línea de un archivo y/o reemplazar texto desde la consola
Un problema común para quienes les toca trabajar con archivos de texto, es que en alguna oportunidad, toca agregar o quitar texto de cada línea de un archivo, para qué? para realizar cargas masivas de datos por ejemplo... así, si queremos agregar por ejemplo una comilla al inicio de cada línea del archivo, se puede usar en vi estando en modo escape se escribe :%s/^/"/g con esto, se agrega una comilla al comienzo de cada línea, para quitarla, es algo como: :%s/^"//g nótese que ahora el símbolo va acompañado con la comilla y al lado esta vacío.
Para el agregar o quitar al final de la línea?? se usa: :%s/$/"/g el símbolo $, representa el fin de línea, así se agrega la comilla al final de la línea. Para quitarla igual que antes :%s/"$//g
Ahora para hacerlo desde afuera, se puede recurrir a sed y se utiliza casi la misma combinación de comandos. En la consola para agregar escribiremos:
sed -e "s/^/"/g" nombrearchivo
El detalle acá es que el cambio lo mostrará en pantalla por defecto, entonces hay que redirigir la salida con un > nombre_archivo_destino, ie,
sed -e "s/^/"/g" nombrearchivo > nombre_archivo_destino
Debe notarse sí que la línea de arriba tiene un error, pues la comilla que aparece entre slash provoca un error, entonces es necesario "escapar" (significa agregar un back slash antes del caracter) la comilla, quedando así la línea:
sed -e "s/^/\"/g" nombrearchivo > nombre_archivo_destino
También, esto sirve si queremos incluir sed para tratar la salida de otro comando, por ejemplo, agregar algo a la salida del cat:
[root@localhost ~]# cat archivo
uno
dos
tres
[root@localhost ~]# cat archivo | sed "s/^/salto /g"
salto uno
salto dos
salto tres
Para el agregar o quitar al final de la línea?? se usa: :%s/$/"/g el símbolo $, representa el fin de línea, así se agrega la comilla al final de la línea. Para quitarla igual que antes :%s/"$//g
Ahora para hacerlo desde afuera, se puede recurrir a sed y se utiliza casi la misma combinación de comandos. En la consola para agregar escribiremos:
sed -e "s/^/"/g" nombrearchivo
El detalle acá es que el cambio lo mostrará en pantalla por defecto, entonces hay que redirigir la salida con un > nombre_archivo_destino, ie,
sed -e "s/^/"/g" nombrearchivo > nombre_archivo_destino
Debe notarse sí que la línea de arriba tiene un error, pues la comilla que aparece entre slash provoca un error, entonces es necesario "escapar" (significa agregar un back slash antes del caracter) la comilla, quedando así la línea:
sed -e "s/^/\"/g" nombrearchivo > nombre_archivo_destino
También, esto sirve si queremos incluir sed para tratar la salida de otro comando, por ejemplo, agregar algo a la salida del cat:
[root@localhost ~]# cat archivo
uno
dos
tres
[root@localhost ~]# cat archivo | sed "s/^/salto /g"
salto uno
salto dos
salto tres
03 mayo 2012
Que servicio tiene abierto el puerto X ?
Es una pregunta muy comun y por desgracia, uno se suele dar varias vueltas antes de saber eso. Sin embargo, en linux, es fácil pues el netstat tiene una opcion -p que muestra el programa asociado al puerto, pero HP UX, no tiene esta opción pero sí, existe lsof.
Muy importante antes es que se debe ejecutar con el usuario root, para tner acceso completo a la información de los procesos del sistema.
Lsof es un comando muy potente, que al ejecutarlo sin opciones, muestra todos los archivos abiertos en el sistema... por ello la lista será muuuuuy larga. Cómo ayuda lsof a encontrar la aplicación que utiliza el puerto, muy simple, con el switch -i, se debe ejecutar algo así:
Si quiero saber que aplicación tiene abierto el puerto 3001, que al filtrar la salida de netstat me muestra algo así:
tcp 0 0 *.3001 *.* LISTEN
Ahora ejecuto:
lsof -i :3001
Nótese el : es obligatorio, entonces obtengo:
servidor1:> lsof -i :3001
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
comando1 14892 temip 12u inet 0xe00000032c54f080 0t0 TCP *:3001 (LISTEN)
Y aquí esta la respuesta, la aplicación comando1, cuyo PID es 14892, tiene levantado el puerto TCP 3001
Actualización: otro detalle importante es que si existen muchas conexiones, intentará resolver los nombres de los servidores, para evitar la demora que pueda significar esto y muestre más rápido la información en sólo números, tanto para la dirección IP y el puerto se puede agregar la opción -nP, donde:
n es para que muestre la IP del servidor, y
P es para que muestre el número de puerto, no el nombre del servicio si está registrado en el el /etc/services
siendo más óptimo el comando: lsof -nP -i :3001
Muy importante antes es que se debe ejecutar con el usuario root, para tner acceso completo a la información de los procesos del sistema.
Lsof es un comando muy potente, que al ejecutarlo sin opciones, muestra todos los archivos abiertos en el sistema... por ello la lista será muuuuuy larga. Cómo ayuda lsof a encontrar la aplicación que utiliza el puerto, muy simple, con el switch -i, se debe ejecutar algo así:
Si quiero saber que aplicación tiene abierto el puerto 3001, que al filtrar la salida de netstat me muestra algo así:
tcp 0 0 *.3001 *.* LISTEN
Ahora ejecuto:
lsof -i :3001
Nótese el : es obligatorio, entonces obtengo:
servidor1:> lsof -i :3001
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
comando1 14892 temip 12u inet 0xe00000032c54f080 0t0 TCP *:3001 (LISTEN)
Y aquí esta la respuesta, la aplicación comando1, cuyo PID es 14892, tiene levantado el puerto TCP 3001
Actualización: otro detalle importante es que si existen muchas conexiones, intentará resolver los nombres de los servidores, para evitar la demora que pueda significar esto y muestre más rápido la información en sólo números, tanto para la dirección IP y el puerto se puede agregar la opción -nP, donde:
n es para que muestre la IP del servidor, y
P es para que muestre el número de puerto, no el nombre del servicio si está registrado en el el /etc/services
siendo más óptimo el comando: lsof -nP -i :3001
28 febrero 2012
Como revisar en un script si un archivo existe?
Muchas veces para realizar tareas simples, pero programadas necesitamos hacer que un script revise si existe un archivo determinado, esto es bastante simple, pero depende muchas veces del Sistema Operativo, en general, en bash en linux, se puede hacer con un:
if [ -e "rutadelarchivo" ]
then
comandos
fi
Actualización 24-04. Al usar el -e para algo como /home/katador/archivo*, es decir, me interesa saber si existen archivos que comiencen con la palabra archivo, al usar el -e sólo, no lo reconoce, entonces es factible usar el truco de:
if [ ls /home/katador/archivo* >/dev/null ]
then
comandos
fi
Esto quiere decir que si ejecutamos un ls /home/katador/archivo* y existen archivos arrojará el listado de archivos, de lo contrario, arroja un error y utilizando esta misma salida del comando, se utiliza el If, pues sí existen archivos, sera TRUE, de lo contrario, al arrojar el error lo considera FALSE.
El >/dev/null, es la redirección del comando, para que no muestre nada por la salida estandar.
if [ -e "rutadelarchivo" ]
then
comandos
fi
Actualización 24-04. Al usar el -e para algo como /home/katador/archivo*, es decir, me interesa saber si existen archivos que comiencen con la palabra archivo, al usar el -e sólo, no lo reconoce, entonces es factible usar el truco de:
if [ ls /home/katador/archivo* >/dev/null ]
then
comandos
fi
Esto quiere decir que si ejecutamos un ls /home/katador/archivo* y existen archivos arrojará el listado de archivos, de lo contrario, arroja un error y utilizando esta misma salida del comando, se utiliza el If, pues sí existen archivos, sera TRUE, de lo contrario, al arrojar el error lo considera FALSE.
El >/dev/null, es la redirección del comando, para que no muestre nada por la salida estandar.
08 febrero 2012
Revisar disco utilizado por directorios en HP-UX
Para revisar el disco utilizado en las distintas carpetas, difiere un poco en HPUX de linux. Por defecto du muestra todas las subcarpetas, tal como en Linux, pero para obtener los mismos resultados cambian los parametros:
- para obtener el tamaño de sólo una carpeta se puede utilizar:
du -ks /carpeta
esto devuelve el numero de kilobytes y el nombre de la carpeta, el k es la opción para los kilobytes y s es para que imprima solo el gran total.
- ordenar la salida de du, por ejemplo de mayor a menor:
du -ks /carpeta | sort -nr
con esto sale ordena de mayor a menor las opciones -n de sort, le indica un orden numérico y r que haga de mayor a menor (reverse).
Además, si se tienen directorios montados en distintos disco, se hace más complicada la recopilación del espacio en disco, pues se debiera considerar sólo el espacio ocupado por cada device, para ello, se puede utilizar la opción -x que agrega la restricción, para contabilizar el espacio ocupado en el directorio solicitado y los siguientes que estén en el mismo disco, así, por ejemplo si se tiene un escenario donde:
Filesystem kbytes used avail %used Mounted on
/dev/vg00/lvol3 4194304 3685800 504592 88% /
/dev/vg00/lvol1 2097152 183472 1899200 9% /stand
/dev/vg00/lvol8 15728640 12061944 3641728 77% /var
/dev/vg00/lvol6 10616832 4394432 6173848 42% /usr
/dev/vg00/lvol5 2097152 1536144 557096 73% /tmp
/dev/vg00/lvol4 8814592 5364512 3423184 61% /opt
/dev/vg00/lvol7 10485760 7725264 2739488 74% /home
/dev/vgtemipdb/lvol1
10485760 20063 9811597 0% /home/oracle/u01
/dev/vgtemipdb/lvol2
220200960 81325775 130199831 38% /home/oracle/data
entonces si interesa conocer de manera clara es espacio utilizado en el disco donde está el raíz, podemos utilizar:
du -ksx /* | sort -nr
- para obtener el tamaño de sólo una carpeta se puede utilizar:
du -ks /carpeta
esto devuelve el numero de kilobytes y el nombre de la carpeta, el k es la opción para los kilobytes y s es para que imprima solo el gran total.
- ordenar la salida de du, por ejemplo de mayor a menor:
du -ks /carpeta | sort -nr
con esto sale ordena de mayor a menor las opciones -n de sort, le indica un orden numérico y r que haga de mayor a menor (reverse).
Además, si se tienen directorios montados en distintos disco, se hace más complicada la recopilación del espacio en disco, pues se debiera considerar sólo el espacio ocupado por cada device, para ello, se puede utilizar la opción -x que agrega la restricción, para contabilizar el espacio ocupado en el directorio solicitado y los siguientes que estén en el mismo disco, así, por ejemplo si se tiene un escenario donde:
Filesystem kbytes used avail %used Mounted on
/dev/vg00/lvol3 4194304 3685800 504592 88% /
/dev/vg00/lvol1 2097152 183472 1899200 9% /stand
/dev/vg00/lvol8 15728640 12061944 3641728 77% /var
/dev/vg00/lvol6 10616832 4394432 6173848 42% /usr
/dev/vg00/lvol5 2097152 1536144 557096 73% /tmp
/dev/vg00/lvol4 8814592 5364512 3423184 61% /opt
/dev/vg00/lvol7 10485760 7725264 2739488 74% /home
/dev/vgtemipdb/lvol1
10485760 20063 9811597 0% /home/oracle/u01
/dev/vgtemipdb/lvol2
220200960 81325775 130199831 38% /home/oracle/data
entonces si interesa conocer de manera clara es espacio utilizado en el disco donde está el raíz, podemos utilizar:
du -ksx /* | sort -nr
31 enero 2012
Obtener velocidad de tarjeta de red en HPUX
En HPUX, una forma de obtener la velocidad de conexión de la tarjeta de red (que en linux podemos usar mii-tool) es utilizar el comando lanadmin con el parametro -x y el indice de la tarjeta que se quiere revisar. Ahora si no se sabe cual tarjeta... una opción es usar el comando netstat -i nos muestra la estadísticas de red:
netstat -i
Name Mtu Network Address Ipkts Ierrs Opkts Oerrs Coll
lan0 1500 10.181.23.0 prd1149 1624149909 0 2348185029 0 0
lo0 32808 loopback localhost 10500568 0 10500568 0 0
lan4 1500 10.181.10.0 rsp1149 5177904 0 151 0 0
entonces si se ejecuta lanadmin -x 0:
lanadmin -x 0
Speed = 1000 Full-Duplex.
Autonegotiation = On.
netstat -i
Name Mtu Network Address Ipkts Ierrs Opkts Oerrs Coll
lan0 1500 10.181.23.0 prd1149 1624149909 0 2348185029 0 0
lo0 32808 loopback localhost 10500568 0 10500568 0 0
lan4 1500 10.181.10.0 rsp1149 5177904 0 151 0 0
entonces si se ejecuta lanadmin -x 0:
lanadmin -x 0
Speed = 1000 Full-Duplex.
Autonegotiation = On.
24 enero 2012
Depurar scripts en HP-UX o linux
Una de las ventajas de los sistemas *nix, es que se puede hacer una depuración de los script usados en el shell de manera muy simple, mostrando línea a línea lo que ocurre, así por ejemplo, mostrará valores que toman las variables, las ejecuciones de comando, etc... esto sirve para bash, ksh y sh (si no saben que shell están corriendo pueden hacer un echo $SHELL o print $SHELL) la depuración consiste en agregar a la primera línea del script donde se encuentra algo como:
#!/usr/bin/ksh , o
#!/bin/sh , o
#!/bin/bash
le agregamos un -x, quedando #!/usr/bin/ksh -x con esto, la siguiente ejecución mostrará algo como:
> cat test_script.ksh
#!/usr/bin/ksh -x
QTY=1
while [ $QTY -lt 3 ]
do
print "vez " $QTY
QTY=$(( QTY + 1))
done
> test_script.ksh
+ QTY=1
+ [ 1 -lt 3 ]
+ print vez 1
vez 1
+ QTY=2
+ [ 2 -lt 3 ]
+ print vez 2
vez 2
+ QTY=3
+ [ 3 -lt 3 ]
Sin -x muestra por pantalla:
vez 1
vez 2
#!/usr/bin/ksh , o
#!/bin/sh , o
#!/bin/bash
le agregamos un -x, quedando #!/usr/bin/ksh -x con esto, la siguiente ejecución mostrará algo como:
> cat test_script.ksh
#!/usr/bin/ksh -x
QTY=1
while [ $QTY -lt 3 ]
do
print "vez " $QTY
QTY=$(( QTY + 1))
done
> test_script.ksh
+ QTY=1
+ [ 1 -lt 3 ]
+ print vez 1
vez 1
+ QTY=2
+ [ 2 -lt 3 ]
+ print vez 2
vez 2
+ QTY=3
+ [ 3 -lt 3 ]
Sin -x muestra por pantalla:
vez 1
vez 2
20 enero 2012
como ver el contenido de un paquete instalado en HP-UX
Si el paquete fue agregado con swinstall, se puede revisar con swlist -l file
Obtener información de hardware en HP-UX
En HP-UX, existe una serie de comandos que entregan información muy detallada del sistema:
Si cstm no es capaz de recopilar la información, tambien se puede utilizar print_manifest, que arroja una salida formateada bastante util. Ojo, que tal vez no este en el PATH, de ser así, en man print_manifest saldrá la ruta, en este caso para HP-UX 11.31 es /opt/ignite/bin/print_manifest.
También se puede utilizar ioscan, para obtener la lista completa, basta ioscan -f, con eso entrega la lista completa de hardware instalado en la máquina.
- cstm, interfaz de comando que permite obtener la información del sistema, se ingresa a una shell y se debe ingresar:
- map all, con esto muestra una lista de todos los dispositivos del sistema.
- selall, con esto se seleciona todo
- infolog, muestra el log recopilado, con pausas y al final ofrece la opción de guardar el log (SaveAs) o no hacer nada (Done)
Si cstm no es capaz de recopilar la información, tambien se puede utilizar print_manifest, que arroja una salida formateada bastante util. Ojo, que tal vez no este en el PATH, de ser así, en man print_manifest saldrá la ruta, en este caso para HP-UX 11.31 es /opt/ignite/bin/print_manifest.
También se puede utilizar ioscan, para obtener la lista completa, basta ioscan -f, con eso entrega la lista completa de hardware instalado en la máquina.
19 enero 2012
Cómo ver los procesos en forma de árbol, en Solaris y HPUX?
El comando ptree, tanto en Solaris y HP-UX sirve para obtener una lista jerarquizada de los procesos que están ejecutandose en el momento, por ejemplo, en HPUX donde estoy usando screen luce algo así:
PID COMMAND
29501 screen -h 10000 -S amardone
29503 /usr/bin/sh
27588 telnet prd1082
20897 /usr/bin/sh
19846 /usr/bin/sh
La identación no es mucha, pero clarifica cual es padre y los hijos no? así se observa que dentro de screen hay tres consolas (/usr/bin/sh) y en una de ellas un telnet.
En particular HP UX, también se puede conseguir un resultado similar con el parámetro H, entonces el comando sería algo como:
ps -feH
Si al ejecutar arroja un error como éste:
ps: illegal option -- H
usage: ps [-edaxzflP] [-u ulist] [-g glist] [-p plist] [-t tlist] [-R prmgroup] [-Z psetidlist]
es porque no está la variable de ambiente UNIX95 que afecta a algunos comando como ps, de hecho si revisan la ayuda de ps, verán que en la opción -H dice (UNIX Standard Only.) esto significa que se debe asignar un valor a la variable UNIX95, que se hace con un tradicional export o setenv dependiendo del shell.
export UNIX95=1
con esto se obtiene el resultado esperado, aunque la salida tal como dije antes, es menos gráfica, algo como esto:
root 1806 1 0 May 1 ? 00:01:26 /usr/sbin/stm/uut/bin/sys/diagmond
root 2194 1806 0 May 1 ? 00:03:31 diaglogd
root 2195 1806 0 May 1 ? 00:17:04 psmctd
Si observan bien, hay un par de espacios de identación a la derecha para señalar los procesos hijos y para los que no sepan, la tercera columna es el ppid, el parent pid o pid padre.
PID COMMAND
29501 screen -h 10000 -S amardone
29503 /usr/bin/sh
27588 telnet prd1082
20897 /usr/bin/sh
19846 /usr/bin/sh
La identación no es mucha, pero clarifica cual es padre y los hijos no? así se observa que dentro de screen hay tres consolas (/usr/bin/sh) y en una de ellas un telnet.
En particular HP UX, también se puede conseguir un resultado similar con el parámetro H, entonces el comando sería algo como:
ps -feH
Si al ejecutar arroja un error como éste:
ps: illegal option -- H
usage: ps [-edaxzflP] [-u ulist] [-g glist] [-p plist] [-t tlist] [-R prmgroup] [-Z psetidlist]
es porque no está la variable de ambiente UNIX95 que afecta a algunos comando como ps, de hecho si revisan la ayuda de ps, verán que en la opción -H dice (UNIX Standard Only.) esto significa que se debe asignar un valor a la variable UNIX95, que se hace con un tradicional export o setenv dependiendo del shell.
export UNIX95=1
con esto se obtiene el resultado esperado, aunque la salida tal como dije antes, es menos gráfica, algo como esto:
root 1806 1 0 May 1 ? 00:01:26 /usr/sbin/stm/uut/bin/sys/diagmond
root 2194 1806 0 May 1 ? 00:03:31 diaglogd
root 2195 1806 0 May 1 ? 00:17:04 psmctd
Si observan bien, hay un par de espacios de identación a la derecha para señalar los procesos hijos y para los que no sepan, la tercera columna es el ppid, el parent pid o pid padre.
Suscribirse a:
Entradas (Atom)