Archive for febrero 23, 2007

Listado de comandos útiles en Bash

VARIABLES DE ENTORNO

set -    

export $PATH=/variable/entorno    

echo $PATH    

env - Muestra las variables de entornos del usuario

MÓDULOS

lsmod - Muestrar los módulos cargados en el núcleo de Linux    

modprobe nombre_modulo -> Añade o quita módulos del kernel

PROCESOS

fg - procesos en foreground    

bg - procesos en background    

ps -auxw -  Ver todos los procesos y que no nos corte la pantalla    

killall nombre_proceso - Si deseamos matar todos los procesos ejecutados por el comando vim    

kill -l - Ver todas las señales de los procesosEstados de los procesos
Id Estado del proceso
D uninterruptible sleep (usually IO)
R runnable (on run queue)- Proceso ejecutando o en cola
S sleeping - Proceso dormido
T traced or stopped - Proceso detenido
W paging - Proceso paginado
X dead - Proceso muerto
Z zombie Aquellos procesos cuyos procesos padres han muerto dejando el proceso hijo sin finalizar. Cuando esto ocurre no es una buena señal.

ESTADÍSTICAS

free -m     De memoria    

vmstat -s -S: M  Del sistema

GENÉRICAS

watch 'ls -la'  Muestra el resultado de un comando  cada x segundos    

which  comando - Localiza el comando    

type comando  - Muestra los aliases del comando    

sudo comando usuario  - Ejecuta un comando como si fuera otro usuario

RUNLEVELES

chkconfig --list ejemplo Muestra/Modifica el estado de los servicios del sistema en cada nivel de arranque (runlevel)

DISCOS

cat /dev/cdrom > /usr/imagen.iso  - Crea una imagen del cdrom    

cat /dev/hda > /dev/hdb  - Clona el disco duro    

mount -rt iso9660 /dev/hdc /cdrom   - Montar en modo lectura con sitema de fichero iso9660 un cdrom    

fsck /dev/hda1 - Comprueba el disco    

fdisk -l  - Muestra las particiones del disco

CADENAS Y FICHEROS

tr 'A-Z' 'a-z'

RED

netstat -atun | grep ESTAB  - Muestra las conexiones establecidas con nuestra máquina    

netstat -a - Muestras los puertos abiertos    

ifdown eth0 - Desactiva el servicio de red para la tarjeta eth0    

ifup eth0 - Activa el servicio de red para la tarjeta eth0    

iptraf - Herramienta gráfica de gestión de tráfico de red    

/usr/sbin/iftop - Otra herramienta de análisis de tráfico

TAR

tar -tzvf fichero.tar Muestra el contenido del fichero

COMPILACIÓN

gcc -o prueba prueba.c

FIND

find / -name mysql* -exec rm {}  - Busca todos los ficheros que comiencen por  mysql y los elimina    

find . -name "*mysql*" -print    - Busca todos los ficheros que contengan la palabra mysql

HORAS

date --set=15:30 - Cambiar la hora

APT

apt-cache search datoabuscar - Busca una aplicación en la lista de aplicaciones a instalar (sólo distribuciones Debian)    

apt-get install nombreaplicacion - Instala la aplicación especificada (si se tiene conexión a Internet), sólo disponible en distribuciones Debian    

apt-get install -f - Comprueba la correcta instalación de los paquetes descargados en '/var/cache/apt/archives/', repitiendo la instalación si fuese necesario o bajando algún paquete dependiente que no se haya descargado    

apt-get update - Actualiza la base de datos de paquetes a actualizar o instalar a partir del fichero '/etc/apt/sources.list'. La base de datos la constituyen un conjunto de ficheros ubicados en '/var/lib/apt/lists/'    

apt-get upgrade - Actualiza todos los paquetes instalados en el sistema a la última versión disponible    

apt-get clean - Elimina todos los paquetes (.deb) descargados (almacenados automáticamente en '/var/cache/apt/archives/') 

apt-get update && apt-get -f dist-upgrade && apt-get clean . Actualizar completamente el listado de paquetes disponibles

Si estás detrás de un proxy  no transparente  apt-get necesita IP y puerto del proxy obtenido de unas variable de entorno que vamos a menter automáticamente en .bashrc y .bash_profile:
export http_proxy=http://128.19.54.25:8080/
export ftp_proxy=http://128.19.54.25:8021/ 

YUM

Por defecto YUM lee el fichero de configuración /etc/yum.conf    

Importar las claves GPG    

rpm --import /usr/share/rhn/RPM-GPG-KEY    

rpm --import /usr/share/rhn/BETA-RPM-GPG-KEYyum info festival    

yum install festival    

yum list festival*    

yum update    

RedHat sólo ofrece soporte para up2date    

up2date

febrero 23, 2007 at 9:36 am Deja un comentario

10 Buenos hábitos a la hora de programar en shell scripting

Traducción propia del artículo de IBM http://www-128.ibm.com/developerworks/aix/library/au-badunixhabits.html

1 – Definir una estructura de árbol de una sóla vez

mkdir -p tmp/a/b/c  

en vez de 

~ $ mkdir tmp 
~ $ cd tmp 
~/tmp $ mkdir a 
~/tmp $ cd a 
~/tmp/a $ mkdir b 
~/tmp/a $ cd b 
~/tmp/a/b/ $ mkdir c 
~/tmp/a/b/ $ cd c 
~/tmp/a/b/c $ 

Y mejor todavía, pues crea el directorio project y dentro los distintos directorios 

mkdir -p project/{lib/ext,bin,src,doc/{html,info,pdf},demo/stat/a}

2 – Cambiar el path, no mover el fichero. Por ejemplo, no desempaquetar ficheros directamente en el directorio que deseemos. Para ello podemo usar la opción -C

tar xvf -C tmp/a/b/c newarc.tar.gz

3 – Combinar comandos con operadores de control

Por ejemplo:  Ejecutar un comando sólo si otro comando ha devuelto 0 exit status. 

cd tmp/a/b/c && tar xvf ~/archive.tar 

Otro ejemplo: Ejecutar un comando sólo si otro comando no ha devuelto un 0 exit status. 
cd tmp/a/b/c || tar xvf ~/archive.tar

4 – Entrecomillar variables con cuidado

Ejemplos: 
ls tmp/ 
a b 

~ $ VAR="tmp/*" 

~ $ echo $VAR 
tmp/a tmp/b 

~ $ echo "$VAR" 
tmp/* 

~ $ echo $VARa 

~ $ echo "$VARa" 

~ $ echo "${VAR}a" 
tmp/*a 

~ $ echo ${VAR}a 
tmp/a

5 – Usar secuencias de escape para controlar la entrada en el log

cd tmp/a/b/c ||  
> mkdir -p tmp/a/b/c &&  
> tar xvf -C tmp/a/b/c ~/archive.tar 

cd tmp/a/b/c  
>                 ||  
> mkdir -p tmp/a/b/c  
>                    &&  
> tar xvf -C tmp/a/b/c ~/archive.tar 

6 – Agrupar los comandos en una lista para poder ir redirigiendo los resultados

Ej. Ejecutar una lista de comandos en un subshell 

~( cd tmp/a/b/c/ || mkdir -p tmp/a/b/c &&  
> VAR=$PWD; cd ~; tar xvf -C $VAR archive.tar )  
> | mailx admin -S "Archive contents" 

Ej. Ejecutar una lista de comandos en el propio shell 

~ $ { cp ${VAR}a . && chown -R guest.guest a &&  
> tar cvf newarchive.tar a; } | mailx admin -S "New archive" 

7 – Usar xargs fuera de find. Usar con -e. Por defecto se considera el símbolo _ como fin de línea. Si por alguna razón aparece ese símbolo en una línea como único carácter con xargs, todo lo que venga detrás no será filtrado. 

~ $ find some-file-criteria some-file-path |  
> xargs some-great-command-that-needs-filename-arguments 

Otros ejemplos de xargs 
$ xargs 
a 
b 
c 
Control-D 
a b c 
~ $ 

Otros ejemplos: 

~/tmp $ ls -1 | xargs 
December_Report.pdf README a archive.tar mkdirhier.sh 

~/tmp $ ls -1 | xargs file 
December_Report.pdf: PDF document, version 1.3 
README: ASCII text 
a: directory 
archive.tar: POSIX tar archive 
mkdirhier.sh: Bourne shell script text executable 
~/tmp $

8 – Evitar usar grep y wc -l. Usar mejor -c que cuenta las líneas y es más rápido

time grep -c and tmp/a/longfile.txt

9 – Es preferible usar awk en vez de grep

Usar 
ls -l | awk '$6 == "Dec"' 

en vez de 
ls -l /tmp/a/b/c | grep Dec 

 10 – No usar tuberías con grep y cat puesto que grep toma el nombre del fichero como argumento
 

BIEN 
time grep and tmp/a/longfile.txt 

MAL 
time cat tmp/a/longfile.txt | grep and

febrero 23, 2007 at 8:35 am 5 comentarios


Calendario

febrero 2007
L M X J V S D
« Ene   Mar »
 1234
567891011
12131415161718
19202122232425
262728  

Posts by Month

Posts by Category