Un listado de comandos útiles para Linux
Este artículo contiene una colección de comandos y utilidades que suelo usar en la línea de comandos de Linux. No sé si tendrá mucho interés para vosotros puesto que, más que nada, lo pretendo llenar de cosas que necesito tener a mano desde muchos sitios. Vedlo más o menos como un «backup» online de truquillos.
Redirigir la salida de error al mismo sitio que la salida estándar. Ver aquí por qué.
cat archivo.txt > archivo.log 2>&1 |
Montar un archivo ISO para poder leerlo.
mount fichero.iso /mnt/directorio/ -t iso9660 -o ro,loop=/dev/loop0 |
Crear un ISO de un directorio
mkisofs -o /tmp/cd.iso /tmp/directory/ |
ídem con «dd»:
la unidad de CD (dev/hdd) tiene que estar desmontada
dd if=/dev/hdd of=fichero.iso |
Convertir un archivo de latin1 a utf-8
iconv -f latin1 -t utf8 archivo_entrada > archivo_salida |
Vice-versa; de utf8 a latin1
iconv -f utf8 -t latin1 archivo_entrada > archivo_salida |
Nota: Con la opción «-c» de iconv se omiten los caracteres no válidos en la salida (ver: «iconv --help»).
Crear un .wav desde un .mp3
NOTA: el archivo de salida viene primero.
mpg123 -w song.wav song.mp3 |
Reemplazar una cadena por otra en todos los archivos del directorio «DirectoryName» y guarda los originales con la extensión «.save»
perl -e "s/old_string/new_string/g;" -pi.save $(find DirectoryName -type f) |
Renombrar *.png.jpg a *.jpg
rename 's/.png.jpg$/.jpg/' *.jpg |
Renombrar archivos sustituyendo el espacio por un guión bajo:
find . -depth -name '* *' \ | while read f ; do mv -i "$f" "$(dirname "$f")/$(basename "$f"|tr ' ' _)" ; done |
Fórmula de conversión de grados Fahrenheit a Celsius
ºF = 32 + (1,8 * ºC) |
Convertir un PDF a PS con dos páginas por hoja
pdf2ps download/nombre.pdf - | psnup -2 > nombre.ps |
Buscar la cadena «unit1» en los archivos tipo «f» d el directorio «/etc» y sus subdirectorios
find /etc -depth -type f -exec grep -il unit1 {} ; |
Activar los cambios realizados en .Xdefaults
xrdb -merge .Xdefaults |
Crear archivo tar con ficheros después de una fecha
tar cvf backup.tar -N yyyy-mm-dd |
Crear archivo tgz manteniendo la ruta absoluta
tar cvfzP backup.tgz /ruta/al/dir/ |
Activar los pitidos del sistema con kernel 2.6
modprobe pcspkr |
Convertir un video mpg a avi (mencoder es parte de Mplayer)
mencoder entrada.mpg -ovc lavc -lavcopts vcodec=mpeg4 -vf scale=640:480 -sws 2 -oac copy -o salida.avi |
Crear un vídeo a partir de una imagen y un archivo de música
ffmpeg -shortest -loop_input -r 1 -i mi_imagen.png -i mi_musica.mp3 -acodec copy -vcodec libx264 -vpre slow -qscale 2 -g 5 -cmp 3 -subcmp 3 -mbd 2 -r 24 -crf 22 mi_video.avi |
Cambiar una cadena en varios archivos
find *.php -type f | xargs sed -i s/cadena/otracadena/g |
find . -type f | xargs sed -i s/cadena/otracadena/g |
otra forma más larga de hacerlo:
find ./ -type f | while read filename; do sed 's/cadena/otracadena/g' $filename > tmp.php; mv tmp.php $filename; done |
Buscar una cadena de texto en todos los archivos encontrados
find . -name *.ext -exec grep "cadena_buscada" '{}' ; -print > ~/archivo_destino |
Evitar la ejecución de la comprobación del sistema de archivos cada x montajes (ver «man tune2fs»)
tune2fs -c 0 -i 0 |
Muestra el estado actual
tune2fs -l /dev/hdaX |
El siguiente busca la partición raíz y configura la comprobación cada 30 montajes y cada mes
tune2fs -c30 -i1m `mount -l -t ext3|egrep "on / type"|awk '{print $1}'` |
Reiniciar con comprobación de errores en las particiones
shutdown -t0 -r -F now |
Parámetros para el lanzador de gnome-terminal en el panel
gnome-terminal --geometry=129x37+50+65 |
Parámetros para lanzar Eclipse con una máquina virtual en concreto
/ruta/a/eclipse/eclipse -vm /var/opt/jdk1.5.0/bin/java -vmargs -Xmx256M |
Ejecución de «./configure» para inkscape de cvs/svn
./configure --prefix=/var/opt --with-perl --with-python --enable-inkboard |
Crear/editar password de root en CUPS
lppasswd -g sys -a root |
Ordenar las líneas de todos los archivos .txt, eliminar las duplicadas y guardar todo en «resultado.txt»
cat *.txt | sort | uniq > resultado.txt |
Concatenar varios archivos pdf en uno solo (se puede omitir la opción -sPAPERSIZE para que cada página quede en su tamaño original). Origen: http://ansuz.sooke.bc.ca/software/pdf-append.php
gs -q -sPAPERSIZE=a4 -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=test3.pdf test1.pdf test2.pdf |
Añadir una cadena de texto al inicio de todas las páginas de un documento PDF.
echo "Este texto aparecerá al inicio de todas las páginas." | enscript -B -f Courier-Bold16 -o- | ps2pdf - | pdftk entrada.pdf stamp - output salida.pdf |
Abrir una instancia de Gnome-terminal a pantalla completa en cuyo interior se ejecuta el comando indicado con «-e»
gnome-terminal --full-screen --hide-menubar -t "NombreAplicacion" -e "comando" |
Modo seguro de Firefox (por ejemplo, para desactivar extensiones que funcionan mal)
firefox --safe-mode |
Obtener un archivo de la web desde la línea de comando
links -source <a href="http://www">http://www</a>.... > archivo.ext |
Cambiar la resolución de pantalla desde línea de comandos durante la sesión
xrandr -s 1280x1024 |
Cambiar el mapa de teclado a otro idioma ([] = opcional)
en terminal:
loadkeys es |
en una sesión «X-Window»:
setxkbmap -layout 'es' [-model pc105] |
o, simplemente,
setxkbmap es |
Cambiar configuración de la tarjeta de red
ethtool -s eth0 speed 10 duplex half |
Crear un listado de paquetes con su tamaño, los ordena por nombre y los guarda en el archivo indicado (más info en: Maximum RPM)
rpm -qa --queryformat '%{NAME}:%{ARCHIVESIZE}\n' | sort > lista_paquetes.txt |
Crear un listado de paquetes con su fecha de instalación
rpm -qa --queryformat '%{installtime} (%{installtime:date}) %{name}\n' |
Obtener un listado de los paquetes rpm instalados y su tamaño, ordenados:
rpm -qa --queryformat="%{SIZE}\t%{NAME}\n" | sort -k1,1n |
Formatear una partición como ext3
mke2fs -j /dev/hdaX |
Desactivar «Ctrl+Alt+Del» ver «/etc/inittab» => Three finger salute
Redimensionar un sistema de archivos ReiserFS en una partición que es más grande
resizefs.reiserfs /dev/sda1 +60GB |
Gestionar procesos iniciados en los distintos runlevels
chkconfig nombre_daemon |
Icono del menú «Aplicaciones» en Gnome
/opt/gnome/share/pixmaps/novell-button.png |
Ver el comportamiento de un programa con strace
strace nombre_programa 2>&1 |
por ejemplo, para ver los archivos .mo que intenta abrir inkscape:
strace inkscape 2>&1 | grep open.*.mo |
Ejecutar un comando constantemente, mostrando los cambios de la salida.
El siguiente comando ejecutará la instrucción «ls -lh» cada 3 segundos
watch -n3 'ls -lh' |
Muestra los scripts ejecutados dentro de un archivo rpm
rpm -qp --scripts archivo.rpm |
Descarga una URL, sin crear la carpeta con el nombre del dominio (-nH), recursivo (-r), sin ir hacia atrás (-np)
wget -nH -r -np http://www.dominio.com/bla/bla/bla/ |
Borrar un archivo cuyo nombre empieza con un guión
rm ./-nombre_archivo.ext |
Vaciar la partición swap: man swapon/swapoff. Realmente se deshabilita el swap en dicha partición
swapoff /dev/particion |
Para volver a activar el swap
swapon /dev/particion |
Obtener la dirección MAC de un sistema (SuSE Linux) y eliminar los dos puntos «:»
/sbin/ifconfig -a | awk '/eth/ {print $5}' | sed 's/://g' |
o también:
ip -o link show | awk '/ether/ { print $11 }' | sed 's/://g' |
Sumar el tamaño de todos los archivos de un tipo. Esto va en dos partes:
Encontrar los archivos que queremos, en este caso son todos los archivos SVG, averiguamos su tamaño con «stat» y los guardamos en un archivo:
find . -name "*.svg" | xargs stat -c%s > tamanos_svg.txt awk '{total+=$0}END{print total}' tamanos_svg.txt |
Aceptación automática de «RSA Fingerprint» al conectar por ssh a un servidor nuevo:
ssh root@vfltst02 -o StrictHostKeyChecking=no |
Ordenación de las líneas de un archivo por su longitud
cat archivo.txt | awk '{ print length, $0 }' | sort -n | awk '{$1=""; print $0}' > otro_archivo.txt |
Ejecución de un comando para cada archivo en un directorio; en este caso se descomprimen todos los archivos «.zip» del directorio actual.
for FILE in $(ls *.zip); do unzip $FILE; done |
Extraer una parte de una conjunto de imágenes con la herramienta «convert», de ImageMagick. Este comando extrae de todas las imágenes png del directorio actual un trozo de 630x460 píxeles, comenzando en el punto 330x326 (será su origen superior izquierdo) y lo guarda en una serie de imágenes llamadas «pq_xx.png» donde «xx» es un número de dos dígitos (desde «00» a «nn»).
convert '*.png' -crop 630x460+330+326! pq_%02d.png |
Reparar o recuperar una tabla de particiones de un disco duro o dispositivo de memoria Flash USB, obtenido de : http://enavas.blogspot.com/
gpart -W /dev/sdX /dev/sdX |
Convertir una página «man» en un documento pdf (visto en http://120linux.com/man-en-pdf/):
man -t comando | ps2pdf - > archivo.pdf |
Mover archivos de una carpeta a otra (renombrar), creando una copia de seguridad de los existentes con un sufijo indicado:
mv --backup --suffix=_old /carpeta/origen/* /carpeta/destino/ |
Matar varios procesos, obteniendo sus PIDs del comando «ps», en dos pasos: el primer comando mete en la variable «procs2kill» los PIDs de los procesos encontrados; el segundo los mata a todos de golpe.
procs2kill=`ps ax | grep keyring | awk '{print $1}'`;kill $procs2kill |
Terminar una copia de archivos mediante «scp» que ha sido truncada.
rsync --partial --progress --rsh=ssh ORIGEN DESTINO |
Capturas de pantalla desde la línea de comandos con ImageMagick:
# Toda la pantalla: import -window root archivo.png # Una ventana abierta (pulsa con el ratón sobre una ventana) # o una sección de la pantalla (arrastrando con el ratón) import archivo.png |
Desactivar el salvapantallas en Xorg, incluso la configuración DPMS «Energy Star».
xset -dpms; xset s 0; |
Más Xorg:
xrandr #Muestra las resoluciones posibles xrandr -s <em>ancho</em>x<em>alto</em> #Fija la resolución indicada xdpyinfo | grep dimensions #Muestra la resolución actual xdpyinfo | grep "dots per inch" #Muestra la resolución en ppp |
Mostrar una alerta visual mediante un script desde cron:
Importante: Hay que ejecutar el comando
xhost + |
al inicio de sesión, en «~/.bashrc» o algo similar y ejecutar desde tu crontab un script como este:
#!/bin/bash # exportar la variable DISPLAY: MUY IMPORTANTE export DISPLAY=:0.0 # Uno simple, con Zenity zenity --display=:0.0 --info --title "Recordatorio" --text "Acuérdate de la copia de seguridad" & # Para notify-send if [[ -z "$DBUS_SESSION_BUS_ADDRESS" ]]; then source "$HOME/.dbus/session-bus"/*-0 && export DBUS_SESSION_BUS_ADDRESS; fi # -t indica los milisegundos que se ve en pantalla el aviso # -i indica el icono que se mostrará notify-send "Acuérdate de la copia de seguridad" -t 5000 -i /usr/share/pixmaps/apple-green.png & |
Mover una estructura de directorios entre dos equipo mediante «tar» y «ssh»:
ver (http://www.linuxjournal.com/content/stupid-tar-tricks)
tar cf - dir1 | ssh remote_host "( cd /path/to/dir2; tar xf - )" |
Obtener el último carácter de una cadena:
mi_cadena=abcdefg lastchr=${mi_cadena#${mi_cadena%?}} echo $lastchr # Muestra "g" |
Convertir los nombres de todos los archivos de un directorio en minúsculas.
for i in *; do mv $i $(echo $i | tr [:upper:] [:lower:]); done |
Generar una cadena de ceros y unos. En este caso genera 100 dígitos. Para obtener una cadena más larga solo hace falta cambiar el número 100. El último «echo ""» es para añadir un cambio de línea al final para que quede bonito en la línea de comandos.
for i in `seq 1 100`;do echo -n $[$RANDOM%2];done; echo "" |