Consola/terminal

Bash Burn: Quemar sin interfaz grafica

Bashburn, antes conocido como Magma es un script de Bash diseñado para hacer el quemado de CDs desde una terminal mas facil, soporta el quemado normal de CDs de datos, de audio, limpiar CD-RW, multisesiones y mas.

[dalfa@MDV2006 ~]$ urpmq -i bashburn

Name        : bashburn
Version     : 1.5.2.1
Release     : 1mdk
Group       : Archiving/Cd burning
Size        : 141176                       
Architecture: i586
Source RPM  : bashburn-1.5.2.1-1mdk.src.rpm   
Build Host  : n3.mandrakesoft.com
Packager    : Jérémie Lenfant-Engelmann 
URL         : http://bashburn.sourceforge.net/
Summary     : BashBurn is a bash script designed to make CD burning
Description :

Sick of all those fancy CD-burning apps not working for you? You need something
that just gets the work done? Welcome to BashBurn - It just works!

BashBurn is the new name for the cd burning shell script Magma. It's not the
best looking CD-burning application out there, but it does what you want it to
do. (And if not then probably didn't want to do it anyway)

Bashburn could need lame codec for some operations.

Esta en los repositorios de Mandriva y tambien lo puedes descargar de su sitio:

http://freshmeat.net/projects/bashburn/
http://bashburn.sourceforge.net/

Combinaciones de teclas en el terminal

Sacado de aquí.

Aquí se comentan las combinaciones de teclas principales disponibles en el terminal y su función:

  • [ctrl] + a -> Mueve el cursor al principio de la línea
  • [ctrl] + e -> Mueve el cursor al final de la líneas
  • [ctrl] + d -> Para borrar el caracter seleccionado con el cursor
  • [ctrl] + r -> Busca hacia atrás comandos en el history
  • [ctrl] + l -> Limpia todo salvo la última línea (equivalente a clear)
  • [ctrl] + c -> Quita la línea que estabas escribiendo (si se pulsa mientras se ejecuta algún programa en esa shell, esta aplicación es matada)
  • [ctrl] + u -> Borra lo que se ha escrito hasta el punto en el que estoy desde el principio de la línea
  • [ctrl] + k -> Lo mismo, pero desde el final hasta el punto en el que estoy (se supone que el cursor lo tengo en algún punto entre el principio y el final de la línea)
  • [ctrl] + w -> borra la palabra anterior o, si el cursor está sobre una palabra, borra su primera letra
  • [alt] + d -> Corta lo que esté bajo el cursor y lo manda a un buffer (el buffer aquí hace una función parecido a cuando cortamos y pegamos en un editor de texto, por ejemplo)
  • [ctrl] + y -> Inserta el contenido del buffer
  • [alt] + f -> Va una palbra adelante
  • [alt] + b -> lo mismo, pero hacia atrás
  • [ctrl] + s -> Para la salida que se muestra el consola y el proceso se mantiene en ejecución
  • [ctrl] + q -> Reanuda la salida a la consola
  • [ctrl] + z -> Deja en suspenso un proceso, pudiendo posteriormente ejecutarlo en background (pulsando "bg") o en "foreground" (pulsando "fg")

Saludos

Cómo redimensionar muchas imagenes al mismo tiempo con resizeallimgs

¿nunca les ha pasado que quieren hacer muchas thumbnails en un directorio rapidamente desde un script? si es asi encontre uno que hace uso de image magick y funciona sensacional lo pego aqui para que todos lo podamos usar :)


    #!/bin/sh
    # Name: resizeallimgs
    # Purpose: resize all jpg or png images in present directory to another sized jpg
    # Written by: Rene
    # CopyLeft, 2005
    # Uses: convert and display commands from ImageMagick
    # Syntax: resizeallimgs -j OR -p OR resizeallimgs -h / --help for help
    # Example: resizeallimgs -j converts jpgs in directory to resized jpgs
    # Example: resizeallimgs -p converts pngs in directory to resized jpgs

    # provide help for this script
    function useage {
    echo -----------------------------------------
    echo useage: resizeallimgs -j"|"-p "("jpg or png")"
    echo help: resizeallimgs -h "/" resizeallimgs --help
    echo creates new jpg files in this directory called '<'filename'>'_thumb.jpg
    echo pre-existing images are not changed
    echo user prompted for WIDTH of thumbnail image - in pixels - Example: 200
    echo thumbnail is scaled proportionately to input dimension
    echo " "
    echo after resizing you can view a composite image of all resized images
    echo answer "'"y"'" or "'"n"'" "("without quotes")" to view a composite of resized images created in the directory
    echo Notes: can take some time to display a large number of images
    echo " right click on composite display to see next composite page if it exists"
    echo " composite display can be saved as a single image and more by left clicking on composite window"
    echo -----------------------------------------
    echo
    }

    if [ $1 = "-h" ]; then
    useage
    exit
    fi

    if [ $1 = "--help" ]; then
    useage
    exit
    fi

    echo "Enter the WIDTH of new images (ex:200)"
    read response

    if [ $1 = '-j' ]; then
    echo JPG images being resized
    ls -1 *.jpg | sed "s/\(.*\)\.jpg/\1.jpg \1_thumb.jpg/" |xargs -n 2 convert -resize $response -quality 100 -compress JPEG
    fi

    if [ $1 = '-p' ]; then
    echo PNG images being resized to JPGs
    ls -1 *.png | sed "s/\(.*\)\.png/\1.png \1_thumb.jpg/" |xargs -n 2 convert -resize $response -quality 100 -compress JPEG
    fi

    # Ask if user wants to view a composite of all new jpg images

    echo "Do you want to display all thumbnails created in this directory?(y/n)"
    read displayall
    if [ $displayall = "y" ]; then
    display 'vid:*_thumb.*'
    exit
    fi
    exit

este script se puede encontrar aqui: http://www.w-3productions.com/resizeallimgs y fue creado por Rene

ConsolaDrake (I)

Esta es la primera entrega de lo que será ConsolaDrake. Con estos textos quiero hacer ver al usuario novel, lo útil que puede llegar a ser la consola. Nos vamos a mover por Bash, que es el interprete de comandos más usado, y es el que viene por defecto en Mandrake.

Voy a usar el mismo sistema que me dan a mi en clases de Sistemas Operativos en la facultad. Que nadie se asuste por eso de facultad. Lo que se empieza a ver es lo básico. Vamos a ver los comandos más importantes y las opciones más usadas de cada uno de ellos.

NOTA: Si no sabes como sacar una consola, haz lo siguiente. Pulsa Alt+F2. En la ventana que te sale escribe “konsole”. También la puedes obtener en K-->Terminales--->Konsole.

Comandos:

Empezamos con el asunto. Los comandos que tocan en esta ocasión son los siguientes:

ls: Lista el contenido de un directorio

cd: Cambia de directorio

pwd: Muestra el path absoluto del directorio en el que estamos

mkdir: Crea un directorio

rmdir: Borra un directorio

cat: Muestra el contenido de un fichero

cp: Copiar archivos

mv: Renombra archivos y/o directorios

more: Muestra el contenido de un fichero paginando la salida

tail: Muestra las últimas líneas de un fichero

man: Muestra ayuda en línea de comandos

find: Busca ficheros en la estructura de un directorio

passwd: Cambia vuestro password

Antes que nada veamos que significa path abosluto y path relativo. En primer lugar path es la ruta hasta llegar a un directorio. Imaginemos por un momento que en el directorio /home/usuario/ tenemos otro directorio que se llama blogdrake. Cuando llegamos al sistema estamos entrando en nuestro directorio /home/usuario/ y si queremos entrar en nuestro directorio blogdrake podremos hacerlo de 2 formas:

a) La primera es hacer directamente cd blogdrake/ y estaremos entrando mediante el path relativo porque es relativo a nuestra posición actual.

b) Por otro lado, podemos hacer cd /home/usuario/blogdrake/ y llegaremos al mismo lado. De esta forma hemos llegado al mismo directorio mediante el path absoluto. Con el path absoluto llegamos independientemente de donde estamos.

Si estamos en /etc/ y hacemos cd blogdrake no entraremos en ningún lado. Sin embargo si hacemos cd /home/usuario/blogdrake/ sí. Esta es la diferencia entre el path absoluto y path relativo.

Mi ruta en el instante de iniciar en el sistema es como sigue:

[parver@BlogDrake parver]$ pwd
/home/parver



Una vez dicho esto comencemos con los comandos:

ls nos permite ver los archivos que están en el directorio. El uso de ls es como sigue:ls [opciones] . Si se pone sólo ls nos mostrará el directorio actual.

Opciones:

ls -a Muestra los archivos ocultos. (Los que empiezan con '.')

ls -l Muestra una amplia información de los archivos.

ls -F Añade tras cada nombre de directorio un `/', tras cada nombre de FIFO un `|', y tras cada nombre de un ejecutable un `*'.

cd sirve para cambiar de directorio. El uso es como sigue: cd . Como se puede ver, el uso de cd es bastante simple.

rm elimina un archivo. Su uso es así: rm [opciones] . También borra un directorio con la opción -r. Hay un par de opciones que yo uso a menudo:

Opciones:

rm -r Borrará un directorio y recursivamente lo que cuelgue de este directorio.

rm -f Borrará sin preguntar “¿Desea borrar el archivo....?”. Directamente lo borrará.

pwd muestra el directorio donde nos encontramos. Nos dará la ruta absoluta.

mkdir creará un directorio. Podremos usar ruta absoluta y relativa. El uso es tal que así: mkdir [opciones] . Una opción que yo suelo usar es -p que crea al directorio padre en caso necesario. Por ejemplo: mkdir -p d1/d2 si el directorio d1 no existe entonces lo crea. Si existe no pasará nada, sólo creará el directorio d2 dentro de d1.

rmdir elimina un directorio pero sólo si éste está vacío. Su uso es como sigue: rmdir . Si quieres eliminar un directorio que no está vacío hazlo con “rm -rf” (esta opción fijo que les mola a los BOFH, XDDDD)

cat muestra el contenido de un fichero. Su uso es sencillo: cat . Si por ejemplo tenemos un fichero que se llama “texto.txt” y queremos ver el contendido podemos hacer cat texto.txt. No tenemos la necesidad de abrir un editor de textos ni nada por el estilo.

cp copia un fichero. Su uso es de la siguiente forma: cp [Opciones] . Una opción muy común es la opción -r que copia recursivamente el directorio, es decir, que el directorio tenga más directorios en su interior.

mv renombra un fichero o directorio. Su uso es: mv . Para más información “man mv”.

more funciona de la misma manera, more . En este caso también se muestra el contenido, pero lo va paginando.

tail es también similar, solo que muestra las últimas filas del archivo. No lo muestra completo. Su uso es tail . Una opción muy común es la siguiente:

tail -n X . Donde X es cualquier número. De esta forma, se muestra las ultimas X líneas del fichero. Por defecto, si no se pone la opción, muestra las últimas 10.

man es importantísimo (man es tu amigo). Man os puede facilitar mucho las cosas. Es la ayuda a cada comando. Su uso es sencillo y práctico: man . Man os mostrará por pantalla la ayuda del comando, así como las opciones que se pueden usar. Podeis probar con cualquiera de los comandos que hemos vistos. Poned en consola “man ls”. Para salir, usad la letra “q”.

find realizará una búsqueda a partir del directorio que le digamos. Su uso es fácil: find . El uso “normal” que yo suelo usar es poner find /directorio/ -name “lo_que_sea” y me buscará “lo_que_sea_” a partir del directorio /directorio/. Usa man find y verás todas las opciones que viene.

passwd sirve para cambiar la clave de un usuario. Como usuario teclea passwd y podrás realizar un cambio de clave. Si eres root puedes cambiar la clave de cualquier usuario poniendo passwd usuario.

A continuación, propongo ejercicios similares a los que tenemos que entregar en clase nosotros. Cualquier cosa que hagais que os de el resultado esperado, significará que está bien hecho. Esto quiere decir, que puede haber muchas posibilidades de hacer una misma cosa. Si alguna os resulta muy complicada, preguntadla, que alguno con algo más de experiencia os lo puede contestar.

Ejercicios:

1.- Comprueba la ruta en la que estas

2.- Moverse al directorio raíz con una sola orden

3.- Comprobar que estais en el raiz

4.- Visualizar la ayuda del comando rmdir

5.- Haceros un directorio que se llame ConsoleDrake. Cread ahora, con una sola orden, un directorio temporal dentro de ConsoleDrake que se llame temporal1 y que contenga otro que se llame temp1

6.- Copiar cualquier fichero que de vuestro directorio a ConsoleDrake/ con el nombre “copiado”

7.- Visualiza las 2 últimas líneas del fichero /etc/modules.conf

8.- Mostrar en la pantalla los ficheros que empiezan por “a” dentro del directorio /etc/

9.- Borrar el directorio temporal1

10.- Cambiar el nombre del directorio ConsoleDrake por el de BlogDrake

11.- Visualizar todos los ficheros y directorios que cuelgan del directorio "/usr", incluyendo los ocultos y en formato largo, es decir, incluyendo el tamaño, la fecha ...

12.- Mostrar los contenidos del directorio "/etc" ordenados ascendentemente por fecha.

13.- Visualizar en formato largo, todos los ficheros del directorio "/etc" que comiencen por "r", sin que se liste el contenido de los subdirectorios, sino tan solo su nombre.

14.- Localizar los fichero llamados "shadow" del sistema y mostrar su nombre completo y su tamaño.

Cortar archivos y volverlos a unir [ split y cat ]

Siempre me habia preguntado como partir un archivo y unirlo de nuevo en Linux pero nunca me habia puesto a averiguar sobre eso, hace unos dias en la lista Newbie-Es de MandrivaLinux mencionaron la aplicacion split se usa asi:

split -b 100m archivo prefijo

Creara partes de 100 megas hasta donde alcance el archivo original y le colocara el prefijo especificado a cada parte para unirlos se hace asi:

cat prefijo* > archivo

Esto unira todos los los archivos con el prefijo especificado en el nombre de archivo que queramos colocar :-D ¿sencillo no? lo mejor sera crear un archivo tar.gz y adentro colocar todo aquello que queramos y luego partir ese unico archivo.

Cosillas para novatos: el comando History

¿Has olvidado cómo era aquel comando que ejecutaste anteayer y que era tan útil?, tan útil que dijiste; no hay problema, seguro que me acuerdo.

Pues toma nota.

Si ejecutas: $ history
te aparecerá una lista con las últimas entradas en el prompt. Algo como esto:

1 k3b
2 mplayer /home/mihome/esepedazodepelicula.mpg
3 rm -rf
4 mv morenanatural.uhh rubiadebote.ahh
.
.
.
.
90 su
91 ogg123 -z /home/mihome/musica
92 history

Si quieres volver a ejecutar alguno de los comandos, sólo tienes que teclear:
$ !N

Donde N es el número que precede al comando en la lista anterior.
Y para la próxima, no te olvides de apuntar las cosas en tu cuaderno de notas.

Un saludo
Alvaro

Cosillas para novatos: Vi

Algunas notas rápidas sobre cómo trabajar con Vi / Vim (Vi mejorado)



Como, en el momento de escribir esto, sigo de vacaciones y usando un viejo Pentium (ya no, ya he vuelto a Madrid), estoy escribiendo algún articulillo con un editor de texto que no necesita de ningún entorno de ventanas.



Uso Vi.



Estas notas están dirigidas a quienes no tienen experiencia con este procesador. Si eres de los que lo usan habitualmente no te servirán de nada.



Nunca viene de más saber cómo editar un fichero desde una consola para esas ocasiones en que, por ejemplo, no nos funcionan bien las X y tenemos que modificar el XF86Config o tenemos un ordenador del pleistoceno y se tarda más en abrir el editor que en escribir el artículo.



Para abrir un archivo: $ vi < nombre_archivo > o $ vim < nombre_archivo >

Si el archivo existe, Vi lo abre para editarlo, si no existe crea uno con ese nombre.



Para comenzar a escribir en modo insertar: pulsar "i"



Para ir al modo comando (modo normal): Pulsar "ESC"



Para borrar desde la posición del cursor hasta el final de la palabra: "dw" (también borra el espacio hasta la siguiente palabra) y "de" (no borra el espacio)



Para borrar desde la posición del cursor hasta el final de la línea: d$



Borrar toda la línea (también equivale a cortar): dd o Xdd, donde X es el número de líneas a borrar.



Pegar: p



Deshacer: u

Rehacer: ctrl+r



Ir a la primera línea de la pantalla: May-h

Ir a la última línea de la pantalla: May-l (ele)

Ir a al final del fichero: May-g

Ir a determinada línea: < numero_linea >May-g

Saber en qué línea estamos: Ctrl+g



Buscar hacia el final de documento: /< cadena a buscar >

Buscar hacia el principio del documento: ?< cadena a buscar >

seguir buscando: n

seguir buscando en dirección opuesta: May-N



Grabar el archivo: :w

Salir sin grabar (si no se ha realizado ningún cambio): :q

Salir sin grabar (si hemos realizado cambios): :q!



Grabar y salir: :wq ó :x



Puedes encontrar esta información explicada con más detalle, y otras muchas cosas, ejecutando el archivo "vimtutor"



Un saludo

Alvaro

FBGRAB: Tomar screenshot de una TTY

Desde una tty con framebuffer puedes tomar una screenshot con fbgrab es muy facil de usar solo:

[dalfa@MDV2006 ~]$ fbgrab nombre_de_archivo.png

aqui un pequeño corta y pega de la man:

fbgrab(1)                                                            fbgrab(1)

NAME
       fbgrab - takes screenshots using the framebuffer device

SYNOPSIS
       fbgrab [options] filename

DESCRIPTION
       fbgrab  reads  the  framebuffer device (/dev/fb*) or a dump thereof and
       saves a PNG image file. You can use it for  making  screenshots  of  of
       virtually  any  application, from traditional test applications to your
       X-windows desktop, as well as framebuffer applications.

OPTIONS
       -?     print usage information.

       -b bitdepth
              the number of bits per pixel used, optional  when  reading  from
              device.

       -c console
              specifies which console (or virtual terminal - like other people
              call this feature) to grab. Sometimes this  changing  is  faster
              then  the  framebuffer  is  refreshed  (especially when grabbing
              framebuffer apps). If so, you should use  -C  console  ...  This
              waits  some time before grabbing. You can't use -s in this case.

       -d device
              specifies which framebuffer device you want to read. If  you  do
              not  use  this  option,  it takes the value from the FRAMEBUFFER
              environment variable. If no FRAMEBUFFER environment variable  is
              given  or  if  its value is NULL, then DEFAULT_FB is taken. (see
              source code), which usually is /dev/fb0.

       -f filename
              Read from from file instead of device, requires that -w (width),
              -h (height) and -b (bitdepth) are specified.

       -h height
              the  height  of the frambeuffer in pixels, optional when reading
              from device.

       -i     turns off interlacing. If you do not want ADAM7 interlacing, you
              should use the -i option.

       -s seconds
              specifies  how many seconds to wait before grabbing. fbgrab does
              not lock console switching, so you can switch it while  waiting,
              if  you  cannot  use  -c requires normally that fbgrab is run as
              root.

       -w width
 the width of the frambeuffer in pixels,  optional  when  reading
              from device.

EXAMPLES
       fbgrab fb.png

       will take a framebuffer snapshot, or if you don't have fbgrab  at  your
       machine, you can do

       cp /dev/fb0 framebuffer.dump

       and then

       fbgrab -w 1024 -h 768 -b 16 -f framebuffer.dump fb.png

       to convert it to a picture.

La utilidad kibitz

La utilidad kibitz

Hace unos días, trataba de explicarle a un amigo, nuevo en las lides de Linux lo que se podía hacer a través de la shell o comandos, estábamos liados charlando a través del irc, pero claro, es difícil tratar de explicar con ejemplos con este método, mi querido amigo me comentaba que lo suyo es que el pudiera ver lo que yo hacía, ciertamente le comenté yo, pero no veo la forma, aunque seguramente la habrá.
Y la hay.

Tenemos una pequeña utilidad llamada kibitz que forma parte del paquete expect que nos permite compartir nuestra cuenta de usuario con todos los usuarios que le indiquemos a esta pequeña maravilla; el resultado es que, a todos aquellos usuarios que invitemos con kibitz les aparecerá nuestra cuenta shell en su pantalla y podrán ver todo aquello que nosotros tecleemos en nuestra cuenta y desde nuestro terminal.
Bueno, si hacemos:

$ rpm -qf `which kibitz`

obtendremos:

$ expect-8.4.2-1mdk

Ya sabes, si no lo tienes tira de urpmi.
Bueno, una vez instalado simplemente ejecutamos kibitz con los usuarios a los que queremoa invitar a compartir nuestra cuenta.

$ kibitz usuario_a_invitar

Si queremos que sean mas usuarios habra que añadir una ejecucion e kibitz por cada unos de ellow.

$ kibitz usuario1 kibitz usuario2 ... y asi sucesivamente.

Yo solo he probado con uno, no mas, pero si echamos un vistazo a la man asi nos lo dice.
Solo decir que cuando el usuario recibe la invitacion de kibitz, este genera un número aleatorio que deberá ser ejecutado por el invitado.

En fin, nada más, para ser mi primer artículo tampoco quiero excederme en palabreria, solo probarlo y si sirve, bienvenido sea.
Ah, ni que decir tiene que usuarios conectados a nuestra maquina via ssh funciona perfectamente, como no podia ser de otra manera.

Manual: Como buscar un comando

A la hora de buscar donde se ubican aquellos programas que necesitamos, que aunque, como todos sabemos la mayoria lo hace en /usr/bin, hay otros que se pueden ubicar en distintos directorios, normalmente del tipo bin.

Yo cuando tengo que dar el path de un comando, por ejemplo cuando hago un enlace a la aplicacion en kde, en vez de ir buscando con la pestaña de navegacion uso estos comandos que me indican cual es el path completo de lo que preciso.

Veamos los que tenemos pues:

# type ==> es una orden interna de la propia shell, en esta caso de bash y su uso es sencillo, simplemente tecleamos la orden fichero a buscar y nos dara el path.

# type amarok
amarok is /usr/bin/amarok
#

Otro comando de esta familia es whereis, que como vemos nos da el mismo resultado.

# whereis amarok
amarok: /usr/bin/amarok

Por ultimo tenemos el comando which que hace exactamente los mismo.

# which amarok
/usr/bin/amarok

Estas ordenes solamente buscan en los directorios que tengamos establecidos en nuestra variable PATH, ahora bien, si queremos buscar ficheros en linea de comando de forma mas eficiente, para ellos tenemos locate y desde luego find.

Multitail: Leer muchos Logs a la vez y salidas de programas

Con multitail se pueden ver varios logs a la vez en una terminal o puedes decirle que te muestra la salida de un programa.

Esta en los repositorios de urpmi o lo puedes compilar facilmente con solo "make install"

[dalfa@MDV2006 ~]$ urpmq -i multitail

Name        : multitail
Version     : 3.4.5
Release     : 1mdk
Group       : Text tools
Size        : 89501                        
Architecture: i586
Source RPM  : multitail-3.4.5-1mdk.src.rpm   
Build Host  : n1.mandrakesoft.com
Packager    : Lenny Cartier 
URL         : http://www.vanheusden.com/multitail/
Summary     : Multitail lets you view one or multiple files like the original tail program
Description :
multitail lets you view one or multiple files like the original tail program.
The difference is that it creates multiple windows on your console (with
ncurses). It can also use colors while displaying the logfiles, for faster
recognition of which lines are important and which are not. It supports regular
expressions. It has interactive menus for editing given regular expressions and
deleting and adding windows.

http://www.vanheusden.com/multitail/
http://freshmeat.net/projects/multitail/

Música en consola

Como  he comentado en alguna ocasión, en la casa del pueblo tengo un ordenador viejo fabricado a base de piezas recicladas, asi que procuro no sobrecargar el sistema demasiado.

Aparte de usar un escritorio ligero procuro utilizar programas que no necesiten un entorno gráfico.

Voy a comentar un par de ellas.

Son dos reproductores de Mp3 para linea de comandos.



Mp3blaster.

Mp3blaster

Reproduce Mp3, ogg y wav. Su uso es muy sencillo.

Lanzas el programa desde una terminal* , pulsando F1 seleccionas el
directorio donde tienes almacenada la música .

Una vez en él pulsamos F2 para crear un grupo.

Pulsando 5 comenzamos.

Los controles son:

4 pista anterior

5 play / pausa

6 pista siguiente

1 retroceso rapido

2 stop

3 avance rápido



*NOTA: En la captura vemos el mp3blaster corriendo en una consola sobre un entorno gráfico. Si lo ejectuamos de esta manera el programa no funciona. Hay que correrlo desde una terminal pura y dura. Esto no sé si es un problema del xfce o del mp3blaster.

MPFC:

mpfc

Este es un reproductor bastante más sencillito aunque tiene la funcionalidad de añadirle plugins (copio/pego)

cue cuesheet tracks adding plugin.

flac FLAC format playing plugin.

lirc LIRC control plugin.

musepack Musepack format playback plugin.

radio Radio control plugin.

remote Remote MPFC control plugin.

wma WMA format playback plugin.

Lanzamos el reproductor desde una terminal
indicándole el directorio donde almacenamos la música.

Pulsando 'enter' comienza la reproducción.

Pytone reproductor ogg / mp3

¡Hola!, esta es la primera vez que escribo en blogdrake, así que me presento: mi nombre es tuxina, me paso la vida tratando de "infectar" a aquellos que me rodean, desafortunadamente el antidoto esta muy extendido...jeje supongo que me entendereis.

Hoy vengo a hablaros de un reproductor de ogg/mp3, su nombre es PyTone, esta escrito en python y su interfaz en ncurses, su principal caracteristica (para mi) es que permite desplazarse muy comodamente entre directorios para seleccionar las canciones que quieres oir. La primera vez que se ejecuta crea una lista, basada en los "tags" de las canciones, aunque si no estan bien editados no sera muy util. De todas formas tambien se puede navegar directamente por el arbol de directorios (la ruta del directorio donde esta la musica hay que indicarla en el fichero de configuracion en ~/.pytone/pytonerc). En Mandrake este fichero viene muy bien comentado, lo digo porque en debian (que era lo que usaba cuando conoci el programa) ni siquiera existe este fichero de configuracion sino solo uno general y tuve que crearlo, ningun problema, pero es una muestra mas del buen acabado de Mandrake.

logicamente al estar basado en ncurses el programa se ejecuta en consola. A mi, que siempre tengo un konsole con varias pestañas abiertas me viene muy bien, y a los que solo usan consola pero no renucian al multimedia tambien (podriamos aprovechar a hacer una pequeña lista de programas en consola para el dia a dia, por ejemplo ¿existe algun procesador de textos en consola?)

bueno, no os doy mas la chapa, espero que os guste el programilla si os da por probarlo, un saludo y hasta otra.

Usando SUDO

Este artículo se puede leer en el sitio MandrakeSecure.net en inglés, lo traduje porque me pareció muy interesante y el contenido era un tanto poco amigable incluso para los hispanoparlantes habituados a leer documentación en inglés, espero que les sea de utilidad y utilicen con precaución la herramienta sudo.

Usando sudo

Publicado primero en inglés en MandrakeSecure.net

Revisión/Modificación: Nov 5,
2001, Traducción: Feb 27 2004
Autor:Vincent Danen
Traductor:Dardo A. Valdez

Para qué se usa sudo?

Una de mis herramientas de seguridad favoritas es sudo. No es una herramienta para monitorear la seguridad, pero te permite asegurar tu sistema específicamente en aquellos casos en que necesitas dar ciertos privilegios de root a varios usuarios al mismo tiempo.

Veamos un ejemplo simple. Estás corriendo un servidor web y tienes un importante cliente al que le has dado una cuenta de shell en tu sistema. Si tuvieras que ausentarte del sistema durante un tiempo prolongado, probablemente necesitarías poder reinicia Apache si
algo imprevisto le sucediera (problemas). Podrías darle a este cliente, o a otro/s administradores de sitios, acceso por medio de su para permitirles poder reiniciar
el servicio. Ya que Apache usa el puerto 80, necesitas permisos de root para reiniciarlo. Hay tres posibilidades: la primera es darle al cliente la clave de root del sistema, en caso de que necesite reiniciar el servidor. Puedes no darle acceso, y tener el servidor caído hasta que tu puedas reiniciarlo personalmente (una opción factible en realidad, pero no muy buena para el negocio). O puedes usar sudo para darle acceso y autenticación al cliente para reiniciar el servidor web, sin la clave de root y sin darle acceso global a todo tu sistema.

Cuál de estas opciones crees que la mejor?

Obviamente la última. Sudo funciona de ese modo. Con él, puedes tener estricto control sobre tu sistema, permitiendo a ciertos usuarios acceso de root para realizar ciertas tareas sin darles el control de toda la máquina. No necesitas tener el 100% de confianza con sudo, a diferencia de su. Después de todo, si solo quieres que alguien pueda reiniciar el servidor web, para qué darle más posibilidades? Podrán modificar los archivos de configuración de Apache? Añadir nuevos usuarios? Reiniciar otros servidores? Absolutamente no.

Sudo nos ayuda en estos casos; es una herramienta lo suficientemente flexible para satisfacer tus necesidades.

Afortunadamente, viene incluído en prácticamente todas las distribuciones de Linux, desafortunadamente por lo general no se instala por defecto, así que probablemente tengas que instalarla tu mismo. Toma tus cds y hazlo.

Configurando sudo

Sudo es fácil de configurar y tiene un archivo con una sintaxis muy directa. Debes usar el comando visudo para editar el archivo /etc/sudoers. visudo es un wrapper, un intermediario entre sudo y tu editor de textos favorito que hará un control de sintaxis sobre el archivo, una vez que termines de editarlo. Por defecto, si no tienes configurada la variable EDITOR usará el editor vi. Fuera de las opciones del editor en sí, es fácil cambiar que invoca visudo.

Simplemente tipea lo siguiente como root para usar tu editor favorito (en este ejemplo uso Emacs):

[root@linux]# export EDITOR=emacs; visudo

Esto abrirá el archivo /etc/sudoers en emacs. Podés usar cualquier editor que quieras...joe, jed, vim, etc. Ahora que tienes abierto /etc/sudoers es hora de configurar
sudo.

Los comandos de sudo usan una sintaxis básica. Por defecto el archivo /etc/sudoers tendrá una sola instancia:

root	  ALL=(ALL) ALL

Que le indica a sudo que de acceso al usuario root ,con permiso de root, a todos los programas en todo el(los) sistema(s), (precisamente los derechos que tiene el usuario root por naturaleza). La sintaxis es simple:

user	   host = (user) command

La primera columna define el usuario al que se aplica el comando. La sección host define el host en el que tiene validez esta instancia. La sección (user) define el usuario que podrá ejecutar el comando, mientras que la
sección; command define el comando en sí.

También puede definir alias para Hosts, Usuarios, y Comandos usando las palabras clave Host_Alias, User_Alias, y Cmnd_Alias respectivamente.

Veamos unos cuantos ejemplos de diferentes alias que
podrías usar.

Host_Alias	LAN = vader.somehost.com, luke.somehost.com
Host_Alias SRV = deathstar.somehost.com, dagobah.somehost.com, han.somehost.com
Host_Alias MAIL = tattoine.somehost.com

Aquí hemos definido tres alias para Hosts. Al primero le dimos el alias de LAN, para identificar a nuestra red interna LAN, y le asignamos dos máquinas: vader.somehost.com,
y luke.somehost.com. El segundo alias es SRV, que identifica a nuestros servidores web y ellos son deathstar.somehost.com, dagobah.somehost.com, y han.somehost.com. El último alias es MAIL, e identifica a nuestro servidor de correo, conteniendo una sola máquina llamada tattoine.somehost.com.

A continuación definimos algunos alias de usuario:

User_Alias	  WEBADMIN = joe, bob
User_Alias MAILADMIN = joe, cathy
User_Alias BINADMIN = joe, doug

Aquí también tenemos tres alias de usuario. El primer alias tiene el nombre WEBADMIN y es para los administradores web, Joe y Bob. El segundo alias es MAILADMIN, para los administradores del servidor de correo, Joe y Cathy.

Finalmente, definimos el alias BINADMIN para los sysadmins regulares, otra vez Joe y Doug.

Ya hemos definido hosts y usuarios. Ahora tenemos que definir qué comandos podrán ejecutar usando los alias creados:

Cmnd_Alias	   SU = /bin/su
Cmnd_Alias BIN = /bin/rpm, /bin/rm, /sbin/linuxconf
Cmnd_Alias SWATCH = /usr/bin/swatch, /bin/touch
Cmnd_Alias HTTPD = /etc/rc.d/init.d/httpd, /etc/rc.d/init.d/mysql
Cmnd_Alias SMTP = /etc/rc.d/init.d/qmail

Aquí también tenemos alias. El primero lo llamamos SU y habilita al usuario para ejecutar el comando /bin/su . El segundo lo llamamos BIN, y permite correr los comandos: /bin/rpm, /bin/rm, y /sbin/linuxconf. El siguiente es SWATCH que permite ejecutar /usr/bin/swatch y /bin/touch. Luego definimos un alias HTTPD el cual permite a sus usuarios ejecutar /etc/rc.d/init.d/httpd y /etc/rc.d/init.d/mysql, para el mantenimiento de los servicios web.

Finalmente definimos SMTP, el cual permite al usuario manejar la ejecución del servidor SMTP qmail.

Ahora tienes que definir como funcionan los alias en conjunto. Aquí es donde le das a cada uno permiso para usar ciertos comandos en determinados hosts. Si hacemos esto del mismo modo que vimos al principio del artículo, esto dará la posibilidad de ejecutar cualquier
programa en cualquier host con permisos de root. Obviamente queremos limitar un poco el acceso en este punto; a continuación vemos un ejemplo basado en los alias
que creamos anteriormente:

WEBADMIN     SRV = HTTPD
MAILADMIN MAIL = SMTP
BINADMIN ALL = BIN, SWATCH
joe ALL = NOPASSWD: SU
bob LAN = BIN

Esto hay explicarlo un poco, pero es fácil de comprender. La primera línea le dice a sudo que permita a aquellos usuarios definidos en el alias WEBADMIN (Joe y Bob), reiniciar Apache y MySQL (comandos definidos en el alias HTTPD), en los sistemas incluídos en el alias SRV (los servidores web). Esto quiere decir que en los sistemas dentro de los alias LAN y el MAIL (el servidor de correo), Joe y Bob no tendrán acceso para hacer lo mismo (reiniciar servicios), sino solo dentro de los tres sistemas definidos en el alias SRV.

La segunda línea le dice a sudo que permita a los usuarios del alias MAILADMIN (Joe y Cathy), reiniciar qmail en tattoine.somehost.com (definido por el alias de host MAIL)

La tercera línea indica a sudo que permita a los usuarios en BINADMIN (Joe y Dough), acceder a los comandos definidos en los alias BIN y SWATCH (que permite manipular la base de datos RPM con permiso de root, borrar cualquier archivo, ejecutar linuxconf para configurar el sistema, ejecutar swatch, y usar el comando touch como root), en todos los sistemas.

La cuarta línea indica a sudo que permita a Joe, nuestro administrador de sistema, usar el alias SU (para ejecutar su), en todas las máquinas sin tener que entrar una clave (más sobre esto a continuación).

La línea final indica a sudo que permita a Bob (quien a veces es requerido para hacer mantenimiento en las máquinas de la LAN), ejecutar los comandos definidos en el alias BIN sobre las máquinas especificadas en el alias LAN.



Bueno, qué quiere decir todo esto? Bien, Joe puede hacer casi cualquier cosa. Teniendo acceso su en todas las máquinas vía sudo, él tiene ese derecho, bueno después de todo él es nuestro administrador de sistema y tiene la clave root de todas formas; el acceso vía sudo es más bien una cuestión de conveniencia para él. Sin embargo, a Dough esto le permite realizar tareas administrativas ejecutando comandos como linuxconf y rpm sobre todos los sistemas, es decir que él es la mano derecha de Joe. Aún así no tiene derechos de acceso para iniciar/detener los servidores web, MySQL y qmail. Cathy sí puede iniciar y detener qmail, pero eso es todo lo que puede hacer. Bob por otro lado, puede iniciar y detener Apache y MySQL en el servidor web, y puede también hacer cierto trabajo administrativo en la LAN (vía rpm y linuxconf), sin embargo no tiene esos ni otros derechos en otras máquinas.

Te habrás dado cuenta de la palabra clave NOPASSWD seguramente. Cada usuario, cuando usa sudo, debe ingresar su propia clave. Por ejemplo, cuando Cathy quiere reiniciar qmail, sudo le pedirá su clave. Ella ingresará su propia clave, no la del root. Esto le indicará a sudo que una persona autorizada está ejecutando el comando. Pero en el caso de Joe, es un poco perezoso y no quiere tipear su clave todo el tiempo, y ya que su compañero de trabajo es el que está escribiendo el archivo sudoers, le pidió que le diera derechos NOPASSWD para ejecutar su. Así que cuando Joe ejecuta su, no tiene que ingresar su clave, pero cuando ejecuta linuxconf (por ejemplo), sí tiene que hacerlo.

Ya te habrás dado cuenta de la flexibilidad que provee sudo. Con un solo archivo, puedes definir derechos de acceso a múltiples máquinas para múltiples usuarios. Lo único que necesitas hacer es tener el mismo archivo en todas las máquinas de la red. Puedes hacer esto usando herramientas como rsync para sincronizar el archivo o usando NIS para hacerlo. De cualquier modo que lo hagas, solo tendrás que mantener un archivo para
todas las máquinas.

Sudo también provee un modo de rastrear a los usuarios que lo utilizan. Añadiendo una línea extra a tu archivo /etc/sudoers, puedes hacer que sudo escriba un archivo de log específico que puedes auditar, por ejemplo:

Defaults      logfile=/var/log/sudo.log, log_year

hará que sudo escriba sus actividades al archivo /var/log/sudo.log. Este archivo se verá luego mas o menos así:

Nov  1 13:44:06 2001 : joe : HOST=vader : TTY=pts/3 ; PWD=/home/joe/mail ;
USER=root ; COMMAND=/bin/su
Nov 2 13:34:59 2001 : doug : HOST=dagobah : TTY=pts/4 ; PWD=/var/www/html ;
USER=root ; COMMAND=/bin/rpm -ivh /mnt/updates/BIG/dis/8.1/RPMS/ucd-snmp-4.2.1-5mdk.i586.rpm
/mnt/updates/BIG/dis/8.1/RPMS/ucd-snmp-utils-4.2.1-5mdk.i586.rpm

Aquí puedes ver que el primero de noviembre, Joe usó el comando su en el host vader. Asimismo podes ver que el dos del mismo mes, Dough decidió instalar ucd-snmp y ucd-snmp-utils en el host dagoban. Como ves, el archivo log es extremadamente útil para rastrear
quien está haciendo qué, vía sudo.

No necesariamente hace falta convertir usuarios en root al usar sudo. Si, dado el caso, estuvieras ejecutando eggdrop bajo el uid de algún otro usuario (por ejemplo, un tal Stew), tu podrías decirle a sudo que use el id de otro usuario en vez de el del root. Por ejemplo, puedes usar algo como esto:

Cmnd_Alias     IRC = /home/stew/bin/eggdrop, /home/stew/bin/irc/ircd
joe deathstar.somehost.com = (stew) IRC

Esto dejará a Joe ejecutar eggdrop e ircd en el directorio home de Stew como si él fuera Stew y no el root, en la máquina con el nombre de host deathstar.


Usando sudo

Ahora que ya has visto como se configura sudo, como lo usas? sudo es muy fácil de usar, como verás. Para determinar qué comandos tienes disponibles para usar vía sudo, podés ejecutar:

[joe@deathstar]$ sudo -l

Password:
User joe may run the following commands on this host:
(root) /etc/rc.d/init.d/httpd, /etc/rc.d/init.d/mysql
(root) /bin/rpm, /bin/rm, /sbin/linuxconf
(root) /usr/bin/swatch, /bin/touch
(root) NOPASSWD: /bin/su
(stew) /home/stew/bin/eggdrop, /home/stew/bin/irc/ircd

Este te mostrará exactamente qué comandos puedes ejecutar y cómo qué usuario. Para usar sudo para reiniciar Apache por ejemplo, deberías usar lo siguiente:

[joe@deathstar]$ sudo /etc/rc.d/init.d/httpd restart

Password:

Luego de que Joe le pase su clave, Apache reiniciará. Si él quisiera iniciar eggdrop como Stew, debería hacer algo bastante diferente:

[joe@deathstar]$ sudo -u stew
/home/stew/bin/eggdrop

Password:

Esto ejecutará eggdrop en background con el uid de Stew. Ya que sudo intentará, por defecto, ejecutar como root, debes suministrarle el nombre del usuario si es que no es el root (como en este caso). Observa que pasa si Joe no especifica el nombre de usuario Stew:

[joe@deathstar]$ sudo /home/stew/bin/eggdrop

Sorry, user joe is not allowed to execute '/home/stew/bin/eggdrop' as root 
on deathstar.somehost.com.

Como puedes ver, sudo es muy flexible y muy apto para reemplazar a su. De hecho iría más lejos haciendo disponible su solo a través de sudo. Para que su funcione para usuarios sin permiso de root (quiero decir, para permitirles volverse root u otro/s usuarios incluso), /bin/su debe tener el bit setuid activado, así puede ejecutarse como root. Si remueves el bit setuid de /bin/su, incluso aunque un usuario conozca la clave de root no podrá hacer su a root o a cualquier otro usuario. Quitar el setuid de /bin/su y restringir los logeos de root desde consola y vía SSH es un modo muy efectivo de asegurar la máquina contra accesos no autorizados con permiso de root.

Para poder hacerlo, en ese caso, simplemente asignate a tí mismo acceso sudo para ejecutar su (como lo ejemplificamos con Joe previamente), y luego quita el bit setuid de /bin/su ejecutando como root, lo siguiente:


[root@deathstar]# chmod u-s /bin/su
[root@deathstar]# ls -l /bin/su
-rwxr-xr-x 1 root root 18172 Sep 14 09:16 /bin/su*

Ahora si intentas ejecutar el comando "su -" como usuario (no como root), incluso si ingresas la clave correcta para el root, no podrás cambiarte a root. Para que alguien pueda usar realmente su, debe existir en sudoers el permiso apropiado y debe ejecutar su a través de sudo de la siguiente manera:


[joe@deathstar]$ sudo su -
[root@deathstar]#

Encuentro este enfoque mucho mejor que restringir el acceso al root. Teniendo su como una aplicación setuid, cualquier usuario en el sistema puede intentar ejecutar su; y si tiene la clave de root o puede adivinarla, se volverá root con todos los derechos que implica. Teniendo su acceso restringido a través de sudo, y con el bit setuid removido, las posibilidades de acceder por la fuerza como root quedan muy limitadas. Piénsalo de esta manera: si alguien puede comprometer tu máquina y obtener acceso de consola como el usuario "apache" o "nobody", con el su setuid, puede intentar logearse como root, y si obtiene la clave nada lo detendrá. Con su acotado sin el bit setuid, incluso si obtiene acceso a una consola como usuario "apache", está limitado solo a los derechos de acceso del usuario "apache". Aunque pueda saber la clave de root, no puede usar su para obtener acceso de root. Es más, ni siquiera puede usar su para volverse Joe (tendría que logearse al sistema desde el principio como Joe).

Para llevar el caso más allá aún, esto significaría que necesitarían acceso a una consola local para logearse como Joe (si es que tienen su clave), o vía SSH (ya que Joe sabe que es mejor eso que telnet). Pero Joe es inteligente. No se metió en el problema de configurar sudo solo para falla ahí. También configuró SSH para rechazar todos los logeos usando la clave y solo permitir logeos basados en autenticación por llaves. Sin la llave privada de Joe, nadie puede logearse en su cuenta vía SSH. Así incluso si tu servidor Apache, Sendmail o DNS permite a alguien obtener acceso de consola a tu sistema con una cuenta sin privilegios (de usuario), el daño que podrían hacer sería mínimo. Sin tener su disponible para usuarios sin privilegios, sin acceso a una consola local y sin poder logearse vía SSH a menos que tengan la llave privada, un atacante debe resolver muchas dificultades para atacar tu servidor para obtener acceso root. Puedes descansar sabiendo que no le has hecho fácil su trabajo tan solo tomando unas pocas y simples medidas de seguridad.

Vamos a tomar un enfoque de autenticación basado en llaves con OpenSSH en el futuro para que puedas redondear apropiadamente la seguridad de tu servidor. Pero por ahora, usa sudo como tu primer línea de defensa en tu sistema.