Professional Documents
Culture Documents
Qu es la shell?
Es el programa que interpreta las peticiones del usuario para ejecutar programas. Hay muchas: /bin/sh, /bin/bash, /bin/csh... (en MSDOS era command.com) Bash (Bourne-Again SHell) se ha convertido en el estndar de facto.
Inicio de bash
/bin/bash se ejecuta de 3 modos diferentes:
Ejecuta /etc/profile (vbles de entorno y funciones para todo el sistema) Ejecuta ~/.profile (especfico del usuario, redefine variables generalmente ejecuta ~/bashrc) Presenta el prompt
Una vez presentado el prompt (que se puede cambiar en variable $PS1 generalemente en ~/bashrc), se queda a la espera de comandos Cuando se introduce un comando: Hace sustitucin de variables Expande los metacaracteres Maneja redireccionamientos de entrada y salida y las tuberas Realiza la sustitucin de comandos Ejecuta el comando, pasndolo al ncleo Cuando finaliza el programa vuelve a presentar el prompt
Documentacin
El comando ms importante: man Internet. Esto es un resumen de Advanced Bash-Scripting Guide http://www.tldp.org/LDP/abs/
Fichero textual con permisos de ejecucin Primera lnea del script (carcter Sha-bang #! )
#!/bin/bash
Esto no es obligatorio, pero facilita la cosas: Cuando ejecutemos el script, la shell detecta el caracter #! y lanza / bin/bash para que procese el script. Nos asegura que siempre ser ejecutado por bash, aunque nuestra shell actual sea otra (csh, sh...) Cada lenguaje script indica su binario: Se ejecuta como cualquier otro comando
#!/usr/bin/perl
./script.sh
#!/bin/sh # Comentario # /bin/sh es enlace simbolico a /bin/bash en linux comando1 comando2 \ comando_2_contina #podemos partir lneas con \ comando3;comando4 #los comandos se separan por fin de lnea, o por ;
Variables y parmetros
Reglas tpicas: no comenzar por dgitos, no carcteres especiales, etc. Slamente aparece sin el $ en: Asignaciones (=, read, cabeceras de bucles) Otros casos especiales (cuando es unset, exportada o seal) Empiezan por $ cuando son referenciadas. Bash interpreta el carcter $ como sustitucin de la variable por su contenido
Asignacin de variables
vble1 =valor1 #Comando vble1 con argumento =valor1 vble1= valor1 #Comando valor1 cuya salida se asigna a la variable vble1
Tipos de asignacin
a=16+5 ; a=$b #Asignacin normal let a=16+5 #Asignacin con let for a in 7 8 9 10 #Cabeceras de bucles echo -n Dame la IP: ; read IP #Clusula read
Tipos de variables
Esencialmente, todas las variables son cadenas Dependiendo del contexto bash permite comparaciones y operaciones entre ellas, siempre que sean dgitos
Argumentos de un script
./scriptname 1 2 3 4 5 6 7 8 9 10 11
scriptname podr manejarlos con las vbles: Denotan cada parmetro segn su posicin Denotan todos los parmetros separados por espacio Igual que el anterior pero cada parmetro entrecomillado Nmero de argumentos pasados El nombre del script tal cual ha sido tecleado basename $0 obtieen el nombre normal del fichero (sin path) Comando que reasigna los argumentos perdiendo todos una posicin:
$1<--$2, $2<--$3, $3<--$4, $4<--$5
$1,${10} $* $@ $# $0 shift
Ejemplo: Script que crea una cuenta local de usuario, usando como parmetros el usuario, contrasea y grupo
#!/bin/bash # alta_usuario.sh useradd $1 -s /bin/bash -g $3 -p $2 -d /home/$3/$1 cp -R /etc/skel /home/$3 mv /home/$3/skel /home/$3/$1 chown -R $1:$3 /home/$3/$1 chmod 700 /home/$3/$1 ./alta_usuario.sh jsanchez2711 12345 alumnos
Entrecomillado \ '
Anteponer un \ a un caracter dice a la shell que lo interprete literalmente. Es similar a hacer un entrecomillado simple en un slo carcter.
echo echo echo echo
No se realiza ninguna sutitucin de variables ni se contemplan significados especiales caracteres. Se toma la cadena literalmente. Excepto: \ para poder escribir una comilla simple
echo 'I Can'\''t' #I Can't
Entrecomillado parcial (comillas dobles ) Evita el significado especial de todos los caracteres, excepto: $ que inicia una sustitucin de variable que cerrara las comillas ' que abre un entrecomillado fuerte \ que inicia entrecomillado de carcter
Ejemplos de entrecomillados
vble1=una variable con 5 palabras COMMAND Esta es $vble1 COMMAND Esta es $vble1 vble2= COMMAND $vble2 $vble2 COMMAND $vble2 $vble2 COMMAND $vble2 $vble2 #Ejecuta COMMAND sin argumentos #Ejecuta COMMAND con 2 argumentos vacos #Ejecuta COMMAND con 1 arg (1 espacio) #Ejecuta COMMAND con 7 argumentos #Ejecuta COMMAND con 1 argumento
Caracteres de escape
Algunos comandos, como sed y echo, atribuyen significados especiales a ciertos caracteres:
Nueva lnea Retorno de carro Tabulacin Tabulacin vertical Espacio Alerta (beep) octal ASCII equivalente a 0xx muestra \b\b\b literalmente nuestra 3 tabulaciones (-e imprime caracteres de escape) una forma de simular la opcin -e
\n \r \t \v \b \a \0xx
Sustitucin de comandos
Con el acento grave (`) se ejecutan uno o varios comandos, y bash literalmente pone la salida en otro contexto, como por ejemplo, asignndola a una variable, como argumentos de un comando o como lista de en un bucle
REDIRECCIN DE E/S
Todo proceso abre 3 ficheros estndar:
El lugar desde el que el programa espera leer su entrada. Por defecto es el teclado El lugar donde el programa escribir su salida. Por defecto es la pantalla. Es el lugar donde el programa escribe sus emnsajes de error. Po defecto en la pantalla.
Estos y cualquier otro fichero pueden ser redirigidos. Usualmente se redirigen stdout, stdin y stderr, combinados con los filtros:
find, cat, sort, grep, wc, cut
Redireccionamiento de salida: De proceso a fichero La salida que cualquier comando genere en stdout, se puede redireccionar a cualquier otro fichero:
#sobreescribe en caso de existir lista.txt #aade en caso de existir lista.txt
Redireccionamiento de entrada: De fichero a proceso Cualquier comando que lea su entrada de stdin puede redireccionar su entrada para que venga de otro fichero:
Redireccionamiento de la salida de errores Cualquier comando qu genere mensajes de error a stderr puede redireccionar estos mensajes en otro fichero
Utilidades:
#Redirige stderr y stdout #Crea un fichero vaco #Crea un fichero vaco, o no hace nada si ya existe
Si se quiere vaciar un fichero, este mtodo es el ms eficiente (similar a touch si el fichero no existe)
exec 3<> File i>&j 2>&1 #Abre el File para R/W asignndole el descriptor 3 #Redirige el descriptor i a j. Toda salida del fichero apuntado por i se enva al fichero apuntado por j. Redirige los errores a stdout
TUBERAS
Se utiliza para enlazar comandos. Aqu NO hay ficheros, se usa slo entre procesos. La salida de un comando se convierte en la entrada del siguiente.
exit: comando para terminar el script. Puede devolver un valor que ser entregadoa su script padre exit status: Todo comando ejecutado, al acabar devuelve un exit status 0 si termin correctamente no-cero en caso contrario
Este mecanismo se suele incorporar en las funciones y en nuestro propio script. Si no se captura mediante asignacin, se puede obtener con $?
echo hello echo $? #Exit status 0 lalala echo $? #devolver no-cero, porque el comando no existe
test <condicional> Desde la linea de comandos se ejecuta /usr/bin/test, extensin de bash Desde un script es parte de sh-utils (no llama al binario anterior) [ <condicional> El corchete izquierdo es sinnimo de test, pero ms eficiente. No tiene por qu cerrarse con ], pero generalmente ello incurre a error por otras circunstancias ajenas al comando. [[ <condicional> ]] Mtodo diferente de comparacin, ms intuitivo y parecido a los lenguajes tpicos. Ms verstil y completo. Adaptado de ksh88
if/then
Se suele combinar con alguno de las tres opciones anteriores para ejecutar comandosen caso de que la comparacin sea true o false
#True si hay argumentos #Mismo resultado, pero con test builtin #Funcionalmente idntico #Debera funcionar, pero podra devolver error #De nuevo, funcionalmente vlido
if if if if if
if/then tambin puede usarse con comandos directamente. En este caso ms que evaluar, simplemente devuelve su cdigo de error.
true true 0 es 1 es si son idnticos (cmp devuelve 0) si usuario encontrado true true
if if if if
sintaxis comn de if
if [ <condicion> ] then ... elif [ condicion2 ] then ... else ... fi
Alternativa: (( condicion ))
Devuelve 0, true
if [ $a \< -z -n
Composicin de comparaciones
Opcin 1:
#AND lgico #OR lgico
Opcin 2:
if [ exp1 ] && [ exp2 ] AND lgico if [ exp1 ] || [ exp2 ] OR lgico if [ -f /usr/bin/netscape -a -f /root/archivo.html ]; then netscape /root/archivo.html & fi
! niega el resultado de la comparacin If [ ! -e $file ]; then #si no existe el fichero
Operadores aritmticos
+ - * / ** % += -= *= /= %= Suma, resta, multiplicacion, divisin Potencia Mdulo Suma-incremento
Bash no entiende aritmtica de punto flotante. Los decimales se interpretan como cadenas
Operadores de bit
<< >> & | ~ ! ^ Desplazamiento hacia la izquierda Desplazamiento hacia la derecha And Or negacin NOT XOR
Constantes
let let let let let decimal = 32 octal = 032 hexadecimal = 0x32 binario = 2#1111001101 base32 = 32#77
Al iniciar la shell, como todo proceso, se crea un entorno de variables. Se pueden modificar de forma permanente en /etc/profile, ~/.profile o
~/.bashrc
Son visibles desde cualquier script Afectan al comportamiento de la shell y a la interfaz de usuario Espacio reservado para el entorno es limitado Se pueden cambiar con export, pero solo afectar a los procesos hijos
Manipulacin de cadenas
Multitud de diversas opciones para manipular cadenas
Longitud Extraer Subcadenas: $(#cadena) expr length $cadena ${cadena:posicion} expr substr $cadena $pos ${cadena:posicion:longitud} expr substr ... Posicin de subcadena: expr match Index: expr index Borrar subcadena: ${cadena#subcadena} Reemplazar: ${cadena/subcadena/reemplazo} Reemplazar todas: ${cadena//subcadena/reemplazo}
Estas opciones son interesantes como alternativa a repetidas operaciones con grep, sed, cut, tr, etc.
for
for arg in <lista> do ... done
Si <in list> es omitido, for usa automticamente los parmetros pasados al script o a la funcin. En <lista> puede ir cualquier lista de elementos:
for file in * ; do ... for file in $(ls) ; do ... for file in `ls` ; do ...
Alternativas
for a in 1 2 3 4 5 6 7 8 9 10 for a in `1 step 10` for ((a=1; a <= 10 ; a++)) #construccin similar a C
Ejemplo: En todos homes de los profesores hay que copiar el archivo / usr/share/instituto/monitorprofe y llamarlo .monitorprofe. Si ya existe se mantendr, pero hay que asegurarse que la lnea que define RetardoGH sea RetardoGH=12
#!/bin/sh archivo=/usr/share/instituto/monitorprofe for i in `ls /home/profesor` ; do if [ ! -f /home/profesor/$i/.monitorprofe ]; then cp -f $archivo /home/profesor/$i/.monitorprofe else grep -v Retardo /home/profesor/$i/.monitorprofe > /tmp/tmpkk echo 'RetardoGH="12"' >> /tmp/tmpkk mv /tmp/tmpkk /home/profesor/$i/.monitorprofe fi chown $i:profesor /home/profesor/$i/.monitorprofe done
while
while <condicin> do ... done
until
until <condicin> do ... done
break y continue
break: Termina el bucle. El programa sigue ejecutndose justo despus del done de ese bucle. Continue: Salta a la siguiente iteracin del bucle. Admite como parmetro el nmero de iteracin.
for i in 1 2 3 4 5 6 7 8 9 10; do if [ $i -eq 4 ]; then continue 2 fi echo -n $i done #Salida con continue 2: 1 2 3 2 3 2 3 2 3... #Salida con continue: 1 2 3 5 6 7 8 9 10
case
case $variable in $condicion1) ... ;; $condicion2) ... ;; * ) ... ;; esac
ejemplo de case
Script que acepta parmetros tipo: script.sh --h --conf archivo
while [ $# -gt 0 ]; do case $1 in -h|--help) echo Mostrar ayuda ;; -c|--conf) CONF_FILE=$2 shift ;; -d|--debug) DEBUG=1 ;; *) echo Parmetro no reconocido;; esac shift done
select
select variable [in list] do .... break done
Si [in list] es omitido, select usa automticamente lso parmetros pasados al script o a la funcin. Es un caso aislado de for
EXPRESIONES REGULARES
* Cualquier caracter o grupo de caracteres, includa la cadena vaca 1133* Coincide con 1133 seguida de cualquier cadena, incluida la vaca. . Cualquier carcter, excepto nueva lnea ? Cualquier carcter, o ninguno ^ Principio de lnea (aunque tambin puede usarse para negar) $ Al final de una expresin regular, indica fin de lnea Ejemplo: ^$ indica lneas vacas
FUNCIONES
Dos opciones:
nombre() { ... }
Las variables locales tienen que ser declaradas con local. En caso contrario son vistas desde fuera de la funcin (si la funcin ya se ha ejecutado)
Se admite la recursin
ALIAS
Son simples abreviaturas para acortar comandos. Comn encontrarse algunos en el script ~/.bashrc
Su uso se suele limitar a estos casos, ya que en los scripts no tienen la potencia de otros recursos en principio parecidos (como las macros en C, que permiten recursividad).
Los operadores && y || no tienen por qu usarse slo con condiciones, tambin pueden admitir comandos. Son conocidas como and list y or list. Permiten ejecutar comandos consecutivamente, con un carcter lgico. Se ejecutan por orden. Cada uno se ejecuta si se recibe del comando anterior un valor verdadero (cero). Si se ha pasado un argumento, el echo no se llegar a ejecutar. Se ejecutan por orden, a la espera que cada uno reciba del comando anterior un valor false. Si alguno produce un verdadero, no se ejecutan los siguientes comandos.
ARRAYS
No tienen que declarase, ni son posiciones contiguas, slo 1 dimensin Asignarlas posicin a posicin
#Para acceder al dato se usan corchetes
Asignarlas en una sola lnea Asignarlas tomando las posiciones por defecto (a modo de enumeracin)
${#array[0]} #longitud del primer elemento ${#array[@]} #Nmero de elementos en array ${#array[@]:2} #Array completo desde el tercero al final
De forma similar hay caracteres especiales para reemplazar, eliminar, buscar, etc.
Debugging
No hay comandos en bash para depurar el cdigo. Habr que conformarse con echo's y mensajes crpticos de error. Ejemplos de error
#Produce: [37 command not found
#Borrar ficheros en cuyo nombre tengan un espacio badname=`ls | grep ' '` rm $badname exit 0
En este caso sobran las comillas en rm, para que rm reciba todos los argumentos, no solo 1. Mejor: rm * *
rm *\ *
##/root/utils/debecho.sh (debug-echo) ##Har echo del parmetro pasado, si se ha definido la variable DEBUG debecho () { if [ -z $DEBUG ]; then echo $1 >&2 #canal de errores fi }
De esta forma se pueden poner debecho's a lo largo del cdigo, y activarlos/desactivarlos con solo definir o no-definir DEBUG con algn valor. #!/bin/bash . /root/utils/debecho.sh #similar a include en c (punto y espacio) DEBUG=1 debecho $variable #si no definimos
Bash admite opciones para ejecutar un script. En este caso son interesantes 2 opciones:
verbose: hace echo de todas las lneas antes de ejecutarlas xtrace: igual que el anteriro, pero con los comandos expandidas A - Desde la lnea de comandos:
bash -o verbose script.sh (abreviando: bash -v script.sh) bash -o xtrace script.sh (abreviando: bash -x script.sh)
B - En el sha-bang:
#!/bin/bash -x
Comandos internos
Comandos que pertenecen a Bash Son ms rpidos que programas externos (Bash suele lanzar los comandos externos en procesos hijos a travs de fork) Lso comandos builtin suelen tener un comando externo del mismo nombre, pero en realidad Bash los implementa internamente.
Filesystem
cd pwd
pushd, popd (a modo de pila-bookmark de directorios) dirs (lista el contenido de la pila anterior)
variables
let <operacion_aritmtica> eval <condicin_lgica> set <asignacin> unset export declare, typeset, readonly getopts (manejar argumentos de forma avanzada)
scripts
., source (Similar a #include en C) exit exec (ejecuta sin fork, pero fuerza un exit al acabar)
commands
true
false
control de tareas
jobs (lista las tareas ejecutndose en background y sus identificadores, NO es tan til como ps) disown (Elimina una tarea) kill (fuerza la eliminacin) fg, bg (manda una tarea a primer o segundo plano) wait supend (similar a control-Z) logout
Comandos externos
Tpicos man,ls,cat tac invierte el orden de los caracteres rev invierte el orden de las lineas cp,mv,rm copiar, mover, borrar ficheros o directorios Muy comn cp -f y rm -f para evitar confirmacin en scripts rmdir,mkdir borrar y crear directoriso vacos mkdir -p /a/b/c crea toda la ruta si no existe (p de parents) chmod cambia permisos chattr cambia atributos. Especialmente importante Hace al fichero inmutable: no puede modificarse, linkearse, borrarse, ni si quiera por root. Este mecanismo es usado actualmente con gnome.conf para que no se pueda hacer loguin grfico en un equipo ni an sabiendo la clave de root. La solucin es entrar por ssh y hacerle chattr -i ln -s
chattr +i fichero
Comandos ms complejos find xargs expr Hora y Fecha date zdump time touch at batch cal sleep usleep hwclock, clock
Procesado de Texto sort tsort uniq cut paste join head tail grep look sed awk wc tr fold fmt col
column colrm nl ... comandos de fichero tar gzip bzip2 cpio file which whereis whatis locate, slocate diff cmp basename dirname
sum, cksum, md5sum crypt more, less redes host traceroute ping whois finger vrfy acceso remoto ftp telnet wget lynx rlogin rsh, ssh
rcp, scp rsync mail Miscelneo clear factor bc dc jot, seq banner lp tee dd units dialog
Comandos de Administracin
USUARIOS Y GRUPOS (ver add_nuevos_alumnos.sh) users Muestra todos los usuarios logueados (como who -q) groups Grupos al que pertenece el usuario actual chown, chgrp Cambia propietario y grupo de un fichero useradd Crear usuarios userdel Borrar usuarios usermod Modifica usuarios groupmod Modifica grupos id lista Ids del usuario y grupos asociados al proceso actual who Muestra todos los usuarios logueados en el sistema w Muestra usuariso loguedos y procesos que dependen de l Usuarios logueados que hayan iniciado X: w | grep startx quota Muestra cuotas de usuario o de grupo setquota Fija una cuota de usuario o de grupo
Mscara de permisos por defecto al crear un fichero muestra el logname. Similar a whoami El usuario actual pasa a ser root u otro usuario En los intitutos su est eliminado, pero existe sudo Ejecuta un programa como root u otro usuario (/etc/sudoers) sudo cp /root/secretfile /home/nando Cambia, fija y maneja contraseas de usuario echo $nuevapassword | passwd --stdin Lista los ltimos usuarios logueados
Extracto de cdigo de add_nuevos_alumnos.sh PASS=12345; APES="sanchez perez"; NAME="juan"; FNAC="27/11" GRUP="D1A"; USER=jsanchez2711 #GRUPO if ! grep $GRUP /etc/group > kk; then groupadd $GRUP mkdir -p /home/aulas/$GRUP chown -R root:$GRUP /home/aulas/$GRUP chmod 775 /home/aulas/$GRUP fi #USUARIO if [ ! -d /home/alumnos/$USER ]; then echo -n "Creando $USER en grupo $GRUP ..." E_PASS=`mkpasswd -S "GV" $PASS` ./alta_usuario.sh $USER $E_PASS alumnos usermod -G $GRUP,alumnos -c "$NAME $APES" $USER setquota $USER $ALUM_QUOTA $ALUM_QUOTA 0 0 /home
Muestra la ruta del terminal actual Activa/desactiva la recepcin de mensajes al terminal actual Manda un mensaje al terminal de todos los usuariso logueados Muestra todos los mensajes del sistema desde el arranque. til combinarlo con grep para hallar dispositivos usb, etc. dmesg -c #borra todos los mensajes tras mostrarlos
dmesg | grep USB
ESTADSTICAS E INFO uname Muestra especificaciones de sistea oeprativo, ncleo, etc. lastcomm Muestra informacin de comandos previos lanzados por usuarios lastlog Muestro la fecha/hora del ltimo loguin de cada usuario lsof Lista ficheros abiertos strace Herramienta para diagnosticar y depurar comandos nmap Escner de puertos de red nmap 172.x.x.2 | grep ftp #21/tcp open ftp free -m Muestra memoria y cach usada en megabytes
procinfo lsdev du df stat vmstat netstat uptime hostname hostname -s LOGS logger logrotate
Extrae extensa informacin de /proc lista los dispositivos Espacio de disco usado por archivos, directorios o discos Epacio usado por los sistemas de ficheros Detalladas estadstics de un fichero Estadstics de memoria virtual Informacin de la red tiempo que lleva el sistema corriendo nombre del host actual Dominio Aade el mensaje pasado a /var/log/messages Utilidad para rotar, comprimir, borrar, etc todo lo referido a /var/log. Configuracion en /etc/logrotate.conf
Muestra los procesos que estn accediendo a un fichero, directorio o dispositivo. Con la opcin -k los elimina. Muy til cuando no podemos desmontar, por ejemplo un usb, porque est ocupa (busy error).
fuser -um /dev/sda1 #/dev/sda1 1772(nando) kill -9 1772
Procesos en estructura de rbol Datos de los procsos que ms uso hacen de cpu Mantiene un comando ejecutndose an despus del logout Muestra el pid de un proceso Programador de tareas. /etc/crontab
CONTROL DE PROCESOS Y ARRANQUE init comando padre de todos los procesos. Determina el nivel de ejecucin del sistema:
0 : 1 : 2-5: 6 : halt monousurio multiusuario reboot
runlevel halt, reboot shutdown RED ifconfig iwconfig route chkconfig tcpdump
Esto est definido en /etc/inittab Muestra el nivel de ejecucin actual Apaga, reinicia el equipo shutdown -h now # lo mismo que halt shutdown -r 12:00 # reboot a las 12 Configuracin de red configuracin de red inalmbrica Tabla de rutas del kernel (obtener la puerta de enlace) Chequea la configuracin de red Sniffer de paquetes de red
SISTEMA DE FICHEROS mount, umount Montar/desmontar un sistema de ficheros. /etc/fstab sync Sincroniza posibles buffers con el dico duro. til ejecutarlo para asegurarse que una copia de ficheros ha finalizado mkswap Crea una particin swap o fichero swap swapon, swapoff Activa/desativa un espacio swap mke2fs ,mkntfs Crear sistemas de ficheros: ext2, ntfs dump2fs Lista informacin del sistema de ficheros hdparm Muestra o cambia parmetros del disco duro fdisk gestor de particiones fsck, e2fsck, debugfs Cheaquea, repara y deputa sistemas de ficheros badblocks Busca sectores daados en un dispositivo mkboot Crea disco de arranque chroot Cambia el directorio de root mknod Crea archivos de dispositivos. Generalmente necesesario cuando se aade nuevo hardware mkntfs Crea sistema de ficheros ntfs MAKEDEV Utilidad similar a mknod, ms fcil de usar tmpwach Borra ficheros no accedidos en un periodo de tiempo
if [ $1 ]; then dump $1'uf' /dev/nst0 / dump $1'uf' /dev/nst0 /boot dump $1'uf' /dev/nst0 /usr dump $1'uf' /dev/nst0 /var dump $1'uf' /dev/nst0 /home if [ $1 = 4 ]; then mt -f /dev/nst0 rewind mt -f /dev/nst0 offline fi else echo "se necesita un parmetro" fi
MODULOS modconf lsmod modprobe insmod rmmod depmod modinfo Utilidad interactiva para manejar los mdulos Muestro los mdulos instalados en el ncleo Carga un mdulo Fuerza cargar un mdulo Fuerza desinstalar un mdulo Crea archivo de depencias del mdulo Muestra informacin de un mdulo
MISCELNEO ldd watch muestra las dependencias de libreras de un ejecutable Ejecuta un comando repetidamente a intervalos de tiempo
Compilacin en programas c
archivo_ejecutable ya puede ejecutarse como un comando ms Depurar errores en tiempo de ejecucin La opcin -g aade al ejecutable informacin que puede manejar el debugger Esto nos abrir una sesin de debugger. A travs de comandos como list, run, print, podemos localizar la lnea que genera el fallo en tiempo de ejecucin
gdb archivo_ejecutable
Python
Lenguaje GPL, orientado a objetos y de propsito general Multiplataforma, pero especialmente en Linux y Macs Muy usado en herramientas y en web por su sencillez Es interpretado ==> no hay necesidad de compilar cdigo en Python antes de ejecutarlo. El cdigo (.py) es compilado a bytecode (*.pyc) cada vez que es ejecutado por la mquina virtual de python. Paquetes necesarios: apt-get install python