jueves, 23 de julio de 2015

Lista de comandos útiles en Linux


- no title specified

Un listado de comandos útiles para realizar tareas desde consola, algo que muchas veces nos puede llegar a sacar de apuros en diferentes situaciones.

Es un listado en constante actualización y es recopilado de varios sitios. Se puede descargar un archivo en formato PDF desde https://github.com/freelanceparaguay/shellExamples

 

Tabla de contenidos

1 Manejo de unidades de disco

1.1 Visualizar unidades de almacenamiento

1.2 Crear un USB boot

1.3 Formatear un disco usb

1.4 Formatear discos como ext3

1.5 Montar un archivo ISO para poder leerlo.

1.6 Crear un ISO a partir de un directorio

2 Manejo de archivos y directorios

2.1 Ordenar archivos

2.2 Manejar archivos comprimidos

2.3 Buscar archivos

2.4 Listar archivos

2.5 Reemplazar una cadena en varios archivos

2.6 Reemplazar una cadena en un archivo

2.7 Partir archivos grandes en varios pedazos

2.8 Buscar una cadena de texto en todos los archivos encontrados

2.9 Renombrar archivos

2.10 Verificar integridad de archivos utilizando md5sum y shasum

2.11 Convertir archivos según codificaciones latin1 a utf-8 y viceversa

3 Manejo de imágenes y videos

3.1 Limpiar datos exift de imágenes .jpg

3.2 Convertir imágenes de format vectorial a png

3.3 Modificar el tamaño de imágenes

3.4 Crear un video a partir de un bloque de imágenes

3.5 Crear un video desde la terminal

4 Manejo de navegadores web

4.1 Descargar páginas web

5 Configuración de consola

 

1 Manejo de unidades de disco

1.1 Visualizar unidades de almacenamiento

Ver las unidades de bloques.

lsblk

Visualizar las unidades usb existentes con sus nombres y sistemas de archivos.

lsusb

Desmontar unidad usb

umount /run/media/usuario/pendrive

1.2 Crear un USB boot

Escribir una imagen .ISO para hacer un USB booteable.

dd if=Fedora-Live-Security-x86_64-20-1.iso of=/dev/sdb bs=4M

1.3 Formatear un disco usb

Formatear un disco usb con sistema de archivos vfat.

mkfs.vfat -n /dev/sdd

mkfs.vfat /dev/sdb -I -n "nombre_del_volumenMIPENDRIVE"

1.4 Formatear discos como ext3

Formatear una partición como ext3.

mke2fs -j /dev/hdaX

1.5 Montar un archivo ISO para poder leerlo.

Se pueden montar archivos .iso en directorios.

mount fichero.iso /mnt/directorio/ -t iso9660 -o ro,loop=/dev/loop0

mount -o loop dvd1.iso /mnt/isodisk

1.6 Crear un ISO a partir de un directorio

Se puede utilizar la herramienta mkisofs o también dd.

mkisofs -o /tmp/cd.iso /tmp/directory/

También se puede crear usando el comando dd. La unidad de CD (dev/hdd) tiene que estar desmontada.

dd if=/dev/hdd of=fichero.iso

2 Manejo de archivos y directorios

2.1 Ordenar archivos

Ordena las líneas de todos los archivos .txt, elimina las duplicadas y lo guarda todo en resultado.txt

cat *.txt | sort | uniq > resultado.txt

2.2 Manejar archivos comprimidos

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/

2.3 Buscar archivos

Busca la cadena ‘unit1′ en el directorio /etc y subdirectorios en los archivos tipo f

find /etc -depth -type f -exec grep -il unit1 {} \;

 

Buscar archivos de tamaño mayor a 1000 Megas

find . -size +1000M

 

2.4 Listar archivos

Listar archivos y sumarizados y con bloques en Megas, ordenar en forma numérica y reversa para mostrar los de tamaño mayor, seleccionar los primeros 20.

du -sm * | sort -nr | head -20

 

2.5 Reemplazar una cadena en varios archivos

Reemplazar una cadena en varios ficheros.

find *.php -type f | xargs sed -i s/nombre/otronombre

find . -type f | xargs sed -i s/nombre/otronombre/g

 

Reemplaza una cadena por otra en todos los archivos del directorio DirectoryName guarda los originales con la extensión “.save”

perl -e "s/old_string/new_string/g;" -pi.save $(find DirectoryName -type f)

2.6 Reemplazar una cadena en un archivo

Otro ejemplo, buscar la cadena {PROXY_USER} (cadena completa incluso con las llaves) en el archivo settings.xml, el resultado se imprime en otro archivo llamado nuevosetting.xml

sed -s 's/${PROXY_USER}/pasantes/g' settings.xml > nuevosetting.xml

 

2.7 Partir archivos grandes en varios pedazos

Partir en varias partes un archivo grande.

split -b4300m MiPelicula.avi MiPeliculaPartida

Unir partes de archivos separados en un solo archivo.

cat MiPeliculaPartida.* > MiPelicula.avi

2.8 Buscar una cadena de texto en todos los archivos encontrados

find . -name *.ext -exec grep "cadena_buscada" '{}' \; -print > ~/archivo_destino

2.9 Renombrar archivos

Renombra *.png.jpg a *.jpg

rename 's/\.png\.jpg$/\.jpg/' *.jpg

2.10 Verificar integridad de archivos utilizando md5sum y shasum

Un archivo puede ser alterado, la forma de poder conocer si cambió en un determinado momento es obtener un hash de control y luego compararlo con la copia del archivo. El hash generado queda guardado en un archivo.

Crear hash :

shasum -b archivo.jpg > shasum.txt

Verificar hash:

shasum -c shasum.txt

Crear hash:

md5sum -b archivo.jpg > md5sum.txt

Verificar hash:

md5sum -c md5sum.txt

2.11 Convertir archivos según codificaciones latin1 a utf-8 y viceversa

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

3 Manejo de imágenes y videos

Es necesaio contar con las herramientas imagemagick y ffmpeg.

3.1 Limpiar datos exift de imágenes .jpg

A veces conviene limpiar los metadatos de las imágenes antes de subirlas a la web.

exiftool -all=imagen.jpg

3.2 Convertir imágenes de format vectorial a png

Se cuenta con varios archivos, los cuales se encuentran numerados. Ejemplo: archivo01.svg, archivo02.svg. Se convierte a archivos con el mismo nombre pero formato .png.

convert archivo*.svg midirectorio/archivo%02d.png

3.3 Modificar el tamaño de imágenes

Se cuenta con varios archivos, numerados. Ejemplo: archivo01.png, archivo02.png. Se cambian los tamaños a 300x300.

mogrify -resize 300x300 directorio/*.png

3.4 Crear un video a partir de un bloque de imágenes

Teniendo imágenes en formato .png y numeradas con dígitos de dos cifras al final, se produce un archivo de video en formato .avi. Ejemplo:  bloque01.png, bloque02.png, etc.

 ffmpeg -r 1 -i bloque_%02d.png  video.avi

3.5 Crear un video desde la terminal

Se puede grabar videos para tutoriales desde la terminal

ffmpeg -f x11grab -s 1024×768 -r 25 -i :0.0 -qscale 0 video.avi

ffmpeg -f x11grab -r 25 -i :0.0 -qscale 0 video.avi

4 Manejo de navegadores web

Modo seguro de Firefox (por ejemplo, para desactivar extensiones que funcionan mal)

firefox --safe-mode

lynx http://www.domain.com/

4.1 Descargar páginas web

Se pueden descargar páginas web desde línea de comandos.

wget -nH -r -np http://www.domain.com/bla/bla/bla/

5 Configuración de consola

Borrar historial de comandos.

history -c

 

Bash: Modificar y convertir bloques de imágenes a distintos tamaños

El problema que se planteó fue el siguiente:
Varios archivos dibujados en formatos .SVG, tenían que ser convertidos a formato .PNG.
Luego, estas imágenes debían ser convertidas a distintos tamaños y copiadas a distintos directorios.
Específicamente se aplicó a un proyecto Android, en el cual cada imagen se guardaba en distintos tamaños, en diferentes directorios según su resolución.
Hacerlo en forma manual, representaba la inversión de una gran cantidad de tiempo, con el script se acortaron tiempos.
A continuación el script.

-----------------------------------cortar aqui y colocar en un archivo-----
----------------------------------no incluir estas lineas

#!/bin/sh
#-------------------------------------------------------------------
# Toma como entrada los archivos dibujados en formato .SVG almacenados en un directorio
# y los convierte e formato .PNG
# Crea imagenes y directorios de diferentes tamanos
# Los archivos deben estar numerados con numeros de dos digitos al final
#
# ejemplo: archivo01.svg, archivo02.svg, archivo03.svg
# salida: archivo01.png, archivo02.png, archivo03.png
#-------------------------------------------------------------------

# PARAMETROS
# ---------------
#primer argumento el directorio
#segundo argumento los archivos en bloque .svg que luego seran convertidos

#ingresa al directorio posicionandose
cd $1

ARCHIVOPREFIJO=$2;
##obtiene el directorio
DIRECTORIO=`/usr/bin/pwd`;
MDPI="/";
echo $HOME;
echo $DIRECTORIO;

EXTENSION="png";

PNG="/png";
MDPI="/drawable-mdpi";
HDPI="/drawable-hdpi";
XHDPI="/drawable-xhdpi";
XXHDPI="/drawable-xxhdpi";
XXXHDPI="/drawable-xxxhdpi";
LDPI="/drawable-ldpi";

# convertir a png
############################3
rm -rf $DIRECTORIO$PNG;
mkdir $DIRECTORIO$PNG;
echo "-------------------------------------------------\n";
echo "Convirtiendo a PNG \n";
echo "-------------------------------------------------\n";
convert $ARCHIVOPREFIJO*.svg $DIRECTORIO$PNG"/"$ARCHIVOPREFIJO%02d.png

echo "-------------------------------------------------\n";
echo "Borrando directorios \n";
echo "-------------------------------------------------\n";
#limpiar directorios

rm -rf $DIRECTORIO$MDPI;
rm -rf $DIRECTORIO$HDPI;
rm -rf $DIRECTORIO$XHDPI;
rm -rf $DIRECTORIO$XXHDPI;
rm -rf $DIRECTORIO$XXXHDPI;
rm -rf $DIRECTORIO$LDPI;


echo "-------------------------------------------------\n";
echo "Creando directorios \n";
echo "-------------------------------------------------\n";
#crear directorios

mkdir $DIRECTORIO$MDPI;
mkdir $DIRECTORIO$HDPI;
mkdir $DIRECTORIO$XHDPI;
mkdir $DIRECTORIO$XXHDPI;
mkdir $DIRECTORIO$XXXHDPI;
mkdir $DIRECTORIO$LDPI;

#copiado de los archivos a cada directorio
#############################################
echo "-------------------------------------------------\n";
echo "Copiando archivos PNG \n";
echo "-------------------------------------------------\n";
cp $DIRECTORIO$PNG"/"*.$EXTENSION $DIRECTORIO$MDPI;
cp $DIRECTORIO$PNG"/"*.$EXTENSION $DIRECTORIO$HDPI;
cp $DIRECTORIO$PNG"/"*.$EXTENSION $DIRECTORIO$XHDPI;
cp $DIRECTORIO$PNG"/"*.$EXTENSION $DIRECTORIO$XXHDPI;
cp $DIRECTORIO$PNG"/"*.$EXTENSION $DIRECTORIO$XXXHDPI;
cp $DIRECTORIO$PNG"/"*.$EXTENSION $DIRECTORIO$LDPI;

#CONVERSION
##############################################
echo "-------------------------------------------------\n";
echo "Configurando resoluciones \n";
echo "-------------------------------------------------\n";

#echo $DIRECTORIO$MDPI"/"*.$EXTENSION;
mogrify -resize 300x300 $DIRECTORIO$MDPI"/"*.$EXTENSION
mogrify -resize 400x400 $DIRECTORIO$HDPI"/"*.$EXTENSION
mogrify -resize 700x700 $DIRECTORIO$XHDPI"/"*.$EXTENSION
mogrify -resize 1000x1000 $DIRECTORIO$XXHDPI"/"*.$EXTENSION
mogrify -resize 1280x1280 $DIRECTORIO$XXXHDPI"/"*.$EXTENSION
mogrify -resize 200x200 $DIRECTORIO$LDPI"/"*.$EXTENSION

echo "-------------------------------------------------\n";
echo "Finalizado \n";
echo "-------------------------------------------------\n";



-----------------------------------cortar hasta aqui y colocar en un archivo-----
----------------------------------no incluir estas lineas

Bash: Menúes de opciones


A veces es útil poder hacer un script con opciones numéricas desde teclado.
A continuación un ejemplo.

#!/bin/bash
OPCIONES="Menu1 Menu2 Salir"
echo "---------------------------------";
echo "INTERESANTE USO DE MENUES EN BASH";
echo "---------------------------------";
select opt in $OPCIONES; do
    if [ "$opt" = "Salir" ]; then
        echo done
        exit
    fi
    if [ "$opt" = "Menu1" ]; then
        echo "Menu 1"
    fi
    if [ "$opt" = "Menu2" ]; then
        echo "Menu 2"
    fi
done