Yo siempre fui un alumno inquieto, siempre deseando sacar partido de oportunidades como… por ejemplo, copiar los exámenes del semestre del pendrive del profesor o algo así. Cuando estudiaba en la enseñanza media (especialidad informática) deseé programar «algo» que hiciera lo siguiente:
- Detecte cuando se conecta un dispositivo USB en el ordenador de la clase
- Copie todo el contenido de ese dispositivo hacia el ordenador
Esto me permitiría tener el examen mucho tiempo antes, solo sería necesario que el profesor conectara su memoria USB (pendrive) en el ordenador y listo.
Desafortunadamente en mi instituto los ordenadores tenían Windows y … yo jamás y nunca aprendí a programar para este OS.
No obstante ahora uso Linux (obvio no? LOL!), y con los conocimientos que a lo largo de estos años he podido ir adquiriendo, ahora SÍ! ya puedo lograr esto con Linux
O sea, he programado un simple script que hace lo siguiente:
1. Crea la carpeta /home/.USBDRIVES/
2. Está comprobando cada 5 segundos si hay algún dispositivo USB (o CD/DVD) conectado al ordenador.
3. En caso de que esté alguno conectado, creará una carpeta dentro de /home/.USBDRIVES/ con el nombre del USB (por ejemplo: memoria-2gb) y además, copiará todos los archivos .doc, .pdf, etc (aquí el listado) hacia esta carpeta que recién acaba de crear.
4. En caso de que no haya ningún USB conectado, simplemente esperará 5 segundos para volver a iniciar la comprobación que expliqué arriba
Aquí les dejo el script y el archivo que contiene los formatos que se copiarán:
Para que el script pueda funcionar sin ningún tipo de problemas, lo mejor es que sea iniciado con privilegios administrativos (root), así como es obvio que se necesita que se inicie junto al ordenador, de esta forma nos aseguramos que si el ordenador es reiniciado o apagado, cuando vuelva a iniciar el script estará ahí funcionando, listo para extraer de cualquier USB lo que deseamos
Vamos a abrir una terminal… una vez abierta…
1. Supongamos que tenemos ambos archivos en /opt/ (/opt/usb-spy.sh y /opt/usb-spy.files), debemos darle privilegios de ejecución:
sudo chmod +x /opt/usb-spy.sh
2. Abrimos el archivo /etc/rc.local :
sudo nano /etc/rc.local
3. En él escribimos arriba de la línea final (exit 0) lo siguiente:
/opt/usb-spy.sh &
4. Ahora presionamos [Ctrl]+[X] para guardar y salir del archivo, presionamos [S] o [Y] (en dependencia del idioma del sistema) y luego [Enter]. Esto bastará para que se guarden los cambios que hicimos.
Y listo, esto bastará para que el script se inicie como root cuando encendamos el ordenador.
Es importante verificar que el archivo usb-spy.files esté en el mismo directorio de usb-spy.sh
Ahora… explicaré un poco el funcionamiento interno del script, pues sé que hay muchos amantes de Bash por acá
Q: ¿Cómo el script sabe que hay un dispositivo USB conectado? A: En el archivo /etc/mtab de nuestro sistema se encuentran los dispositivos o particiones que están montadas en nuesto sistema. Mediante la línea 23 del script se sabe si hay un USB conectado o no (haciendo cat al mtab y grep media)
Q: Sí, pero ¿cómo el script sabe si el cat y grep nos devuelve algún dato o no? A: Mediante un ciclo if, then, else que empieza en la línea 24.
Q: ¿Cómo hacer que copie solamente los archivos con extensiones deseadas? (.doc, .pdf, etc)
A: Mediante rsync con varios parámetros, esto es en la línea 34. Explicado de forma simple, con rsync copio solamente los archivos que coincidan con el filtro usb-spy.files, cada línea es un filtro por así decirlo. Además le paso el parámetro --prune-empty-dirs a rsync para que no me cree directorios vacíos.
No hay mucho que explicar en realidad, el script es realmente simple de entender
Si alguien tiene cualquier duda o pregunta, queja, idea o sugerencia por favor, que lo diga y prometo ayudarles en todo cuanto pueda.
Y bueno, estaba pensando poner algo como: «este script solo es para propósitos educativos, no usar con files dañinos» … pero… qué demonios!, úsenlo para lo que deseen, es hora de que los estudiantes tengamos algún tipo de ventaja contra los profesores que nos oprimen
Saludos