You are on page 1of 75

Gua de programacin de scripts Bash

por Fernando Sosa Gil


Noviembre de 2005

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:

Intrprete interactivo de ingreso: Tras hacer login en modo texto


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

Intrprete interactivo de no ingreso: Terminal en ventana grfica


Copia el entorno padre y luego ejecuta ~/.bash_rc Presenta el prompt

Intrprete no interactivo: Al lanzar un script

Ciclo de vida de Bash

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/

Requisitos mnimos de un script


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

#!/bin/bash variable=2 variable=$variable + 1 b=$variable

Reglas de sustitucin de variables


Los $ se interpretan en el interior de comillas dobles (partial quoting) Los $ no se interpretan en el interior de comillas simples (full quoting) Si $variable1 causa error de sintaxis, ${variable1} debera funcionar

Ejemplo de sustitucin de variables


hello=A B Comando echo hello echo $hello echo ${hello} echo $hello C Salida #hello #A B C #A B C #A B C C ($ se interpreta literalmente) Explicacin (no se hace referencia a ninguna variable) (echo recibe A B C D, cuatro argumentos) (idntico al anterior) (echo recibe un nico argumento)

echo ${hello} #A B echo '$hello' #$hello

No es necesario declarar variables, pero existen declare y typeset. O tambin as:


variable1= unset variable1 #Declaracin que inicializa a nulo #Vuelta a nulo

Asignacin de variables

No puede haber espacios antes y despus del =

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

til para recorrer los argumentos sin usar las llaves { }

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 \ '

Entrecomillado de un carcter (Backslash \)

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

\Hello\ \$vble \\ 'i cant'\''t'

#imprime #imprime #imprime #muestra

Hello $vble \ i cant

Entrecomillado completo (comillas simples ')

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

echo \t\t\t echo -e \t\t\t echo $'\n'

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

Forma clsica: Comillas invertidas


for i in `ls` 2 argumentos, a y b 1 argumento: a b No argumento Argumento vaco

COMMAND `echo a b` COMMAND `echo a b` COMMAND `echo` COMMAND `echo`

Tambin se pueden usar $(comando)


#Asigna el resultado de ls -l a la vble a #Asigna el resultado de uname -m a la vble a

a=$(ls -l) a=$(uname -m)

REDIRECCIN DE E/S
Todo proceso abre 3 ficheros estndar:

stdin (descriptor de fichero 0)

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.

stdout (descriptor de fichero 1)

stderr (descriptor de fichero 2)

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

ls -l > lista.txt ls -l >> 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:

read a < fichero

Redireccionamiento de la salida de errores Cualquier comando qu genere mensajes de error a stderr puede redireccionar estos mensajes en otro fichero

ls -l 2> ls_errores ls -l 2>> ls_errores

Redireccionamiento de entrada y salida estndar

grep palabra < fichero_donde_buscar.txt > lineas_econtradas.txt

Utilidades:
#Redirige stderr y stdout #Crea un fichero vaco #Crea un fichero vaco, o no hace nada si ya existe

comando &> file : > file : >> file

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.

cat alumnos.asc | sort | uniq | lp

Ejemplo El fichero alums.asc contiene una lnea:


12345,"Sanchez PERez ","Juan",24/11/1988,"1DA","1"

Contruir un login de usuario consistente en:


inicial_del_nombre + primer_apellido + dia_nacimiento + mes_de_nacimiento
FILE=alums.asc APES=`cut -f 2 -d, | cut -f2 -d\" | tr 'A-Z' 'a-z'` NAME=`cut -f 3 -d, $FILE | cut -f2 -d\" | tr 'A-Z' 'a-z'` FNAC=`cut -f 4 -d, $FILE | tr -d '/' | cut -c 1-4` LOGIN=`echo "$NAME" | cut -c 1``echo "$APES" | cut -f1 -d" " `$FNAC

Exit y Exit Status

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

condicionales: test, [], if/then


Operadores que evalan la condicin y devuelven 0 para true, y 1 para false

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

test -z $1 /usr/bin/test -z &1 [ -z $1 ] [ -z $1 /usr/bin/[ -z $1 ]

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

cmp a b &> /dev/null grep -q $USR /etc/passwd [ 0 ] [ 1 ]

sintaxis comn de if
if [ <condicion> ] then ... elif [ condicion2 ] then ... else ... fi

Alternativa: (( condicion ))

Ejecuta comparaciones aritmticas numricas

#!/bin/bash (( 4 > 2 )) echo $?

Devuelve 0, true

Operadores para testear ficheros


if [ -op ruta_del_fichero ] -op Devuelve true si el fichero: -e Existe -s No tiene tamao cero -f Es regular -d Es un directorio -b Es un dispositivo de bloques(floppy, cdrom, etc.) -c Es un dispositivo de caracteres (teclado, modem, etc.) -p Es un tubera -h Es un enlace simblico (tambin -L) -S Es un socket -r Tiene permisos de lectura -w, -x -O Yo soy el propietario del fichero -G Su grupo es el mismo que el mo f1 -nt f2 f1 es ms reciente que f2 (nt = newer than) f1 -ot f2 (older than)

Comparacin entre enteros (cadenas con dgitos)


if if if if if if [ [ [ [ [ [ $a $a $a $a $a $a -eq -ne -gt -ge -lt -le $b $b $b $b $b $b ] ] ] ] ] ] es igual (equal) no es igual (not equal) mayor (greater than) mayor o igual (graeter or equal) menor (less than) menor o igual (less or equal)

Comparacin entre cadenas


if if if if [] [ [ [ [ $a $a $a $a = $b ] son iguales == $b ] son iguales != $b ] son diferentes \> $b ] mayor que, en orden alfabtico ASCII, pero los necesitan cdigo de escape $b ] menor que, en orden alfabtico ASCII la cadena es nula la cadena no es nula

if [ $a \< -z -n

Composicin de comparaciones

Opcin 1:
#AND lgico #OR lgico

if [ exp1 -a exp2 ] if [ exp1 -o exp2 ]

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

Variables de entorno y especiales


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

Algunas variables de entorno


$BASH $BASH_SUBSHELL $EDITOR $FUNCNAME $GROUPS $HOME $HOSTNAME $PATH $PWD $OLDPWD $SECONDS $P1 $P2 $PPID $TMOUT $UID Path del bash binario Nivel de subshell Editor por defecto Nombre de la funcion actual Grupos del usuario actual Home del usuario actual Ruta de binarios Directorio actual Antiguo directorio El nmero de segundos que lleva el script corriendo Prompt principal Prompt secundario PID del proceso padre Si no es cero, se har logout tras ese nmero de segundos ID del usuario actual (el de root es cero)

Segn la distribucin y versin, algunas de estas variables pudieran no estar definidas.

Algunas variables especiales


$! PID del ltimo proceso corriendo en background $_ ltimo argumento del previo comando ejecutado $$ Pid del propio script actual $*,$@,$1,$2, ${12}

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.

Referencias indirectas a variables


a=letra letra=z eval a=\$$a echo $a #Devuelve z

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

Mientras la condicin sea verdadera, se ejecuta el bloque


while [ $a -le $LIMIT ]; do ...

until
until <condicin> do ... done

Mientras la condicin sea falsa, se ejecuta el bloque

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

Usadas principalmente por grep, sed y awk

* 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

Caracteres y rango de caracteres [ ]


[xzy] [c-n] [a-z0-9] [^b-d] [Yy][Ee][Ss] Cualquiera de estos 3 caracteres Cualquier carcter de la c a la n Cualquier minscula o dgito Cualquier carcter que NO estn en el rango b-d Acepta YES, Yes, yes, yeS,...

FUNCIONES

Dos opciones:
nombre() { ... }

function nombre { ... }

La segunda opciones es ms portable

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)

func () { vble=37 } echo $vble func echo $vble

#No se imprime nada #imprime 37. Si fuera local no imprimira nada

Se admite la recursin

ALIAS

Son simples abreviaturas para acortar comandos. Comn encontrarse algunos en el script ~/.bashrc

alias rm=rm -i #Por defecto, rm pedir confirmacin unalias rm

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).

Listas lgicas con comandos


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.

Comando1 && comando2 && comando3

[ ! -z $1 ] && echo Falta el argumento 1 && exit 1

Comando1 || comando2 || comando3

ARRAYS

No tienen que declarase, ni son posiciones contiguas, slo 1 dimensin Asignarlas posicin a posicin
#Para acceder al dato se usan corchetes

area[11]=23 echo ${area[11]}

Asignarlas en una sola lnea Asignarlas tomando las posiciones por defecto (a modo de enumeracin)

area= ( [11]=once [17]=diecisiete )

numeros=( cero uno dos tres ) echo ${numeros[0]} #imprimir cero

algunas operaciones (recordar que todos los datos son cadenas)

${#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

a=37 if [$a -gt 27 ]; then echo $a fi exit 0

#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 *\ *

Depurando con echo

Una forma de activar/desactivar echo's a lo largo del cdigo.

##/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

Depurando con opciones de script

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

C - Activarlas/desactivarlas en el mismo cdigo:


set -o verbose #tambin set -v ... set +o verbose #desactiva la opcion (tambin set +v)

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.

Hay muchos comandos internos. I/O


echo printf read

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

Usualmente son lanzados por root (Ejemplos en /etc/rc.d/ )

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

umask logname su sudo passwd last

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

TERMINALES tty mesg wall dmesg

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

CONTROL DE TRABAJO ps fuser Procesos actuales y estadsticas.


ps -A | grep dnsmasq #est corriendo dnsmasq?

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

pstree top nohup pidof cron

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

BACKUP dump, restore #copia_servidor.sh 0

Crea y restaura copias de seguridad

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

Forzar que se cargue un mdulo:


echo 8139too >> /etc/modules

Impedir que se cargue un mdulo (blacklisted):


echo ich2rom >> /etc/hotplug/blacklist

MISCELNEO ldd watch muestra las dependencias de libreras de un ejecutable Ejecuta un comando repetidamente a intervalos de tiempo

Compilacin en programas c

Compilar cdigo c: (apt-get install gcc)

gcc archivo.c -o archivo_ejecutable


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

gcc -g archivo.c -o archivo_ejecutable

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

You might also like