Tips y comandos útiles de Linux que no te sabías

Muchos de los que leeis este blog seguro que os considerareis unos verdaderos eruditos de GNU/Linux, otros simplemente estareis empezando con el pingüino. Sea cual sea vuestro caso aquí teneis una lista con algunos comandos curiosos que quizá no conocíais.

Nota: todos los comandos y tips mostrados a continuación deben escribirse en una sola línea.

  • Deshabilitar el historial de bash (donde se almacenan los últimos comandos ejecutados

rm ~/.bash_history ; ln -sf /dev/null .bash_history

  • Si intentas realizar una tarea reservada el sistema te dirá que no puedes por falta de permisos. Pues bien, si después quieres ejecutar la misma tarea, pero como sudo, en lugar de escribir “sudo” seguido del comando, prueba:

sudo !!

  • Para eliminar una palabra completa en la consola: Mantén presionado ESC y pulsa BACKSPACE (borrar, encima del enter).
  • Si deseas crear múltiples directorios con nombres dir1, dir2, dir3… por ejemplo, usa el comando siguiente (análogamente puedes usar este sistema con otros comandos como touch, para crear archivos):

mkdir dir{1,2,3}

  • Para usar un comando con los mismos argumentos que se le pasaron al comando anterior (en nuestro ejemplo utilizamos el comando touch, pero el sistema es el mismo para cualquier otro):

touch !*

  • Genera aleatoriamente un password (en nuestro ejemplo, de 8 caracteres –para otra longitud cambia el número 8 por el que desees–):

< /dev/urandom tr -dc A-Za-z0-9_ | head -c8 ; echo

  • Para copiar un fichero con nombre muy largo sin tener que escribirlo dos veces puedes utilizar un método llamado expansión, de la siguiente forma:

cp NombreDeArchivoMuyLargo{,.orig}

  • Si deseas ejecutar un comando en consola, pero no quieres que se muestre ninguno de los posibles errores que puedan surgir, lo mejor es redireccionar la salida de error a /dev/null (pongamos que es una especie de agujero negro, XD):

[comando_a_ejecutar] 2> /dev/null

  • Para pasar un manual del comando man a pdf, tal y como vimos en un post pasado, puedes ejecutar (todo en la misma linea):

man -t <nombre_programa> | ps2pdf – > <ruta_destino/nombre_destino.pdf>

  • Si quieres cambiar la extensión a varios archivos a la vez, prueba lo siguiente. Ten en cuenta que en este ejemplo, la extensión que tienen los archivos a modificar es “.txt” y la nueva extensión que queremos asignarles es “.html”, modifícalo a tu gusto según tus necesidades:

for i in *.txt; do mv $i ${i%%.txt}.html; done

  • ¡Demasiados argumentos!. En ciertas ocasiones la consola nos lo dirá, por ejemplo si intentamos ejecutar rm * en un directorio donde haya muchos ficheros. La solución es una pequeña tubería utilizando “ls”  y “xargs”, como la siguiente (en este ejemplo usamos el comando “rm” pero puedes emplear cualquier otro):

ls | xargs rm

  • Si quieres conocer el nombre del directorio en el que te encuentras (Ojo, no me refiero al nombre completo del tipo /home/pepe/…/naturaleza/laguna, sino sólo al nombre. Por ejemplo, en el caso anterior, el nombre sería laguna), puedes usar el siguiente comando:

echo ${PWD##*/}

Espero que os hayan venido bien estos comandos curiosos, más adelante postearé algunos más que me vayan surgiendo.

Un saludo

Busca comandos en la shell con Apropos

Es imposible conocer todos los comandos que nos ofrece cualquier shell, para solucionar este “problema” existen herramientas que nos hacen la vida más fácil, una de ellas es el comando apropos.

Apropos es un comando que busca dentro de las descripciones de cada una de las páginas man las palabras claves que le indiquemos pasandolas como argumentos. Estas palabras claves pueden contener comodines o ser la palabra clave exacta.

Por ejemplo, si quisieramos buscar comandos que sirven para copiar ficheros podríamos hacerlo del siguiente modo (suponiendo un sistema en idioma inglés):

$ apropos "copy files"
cp (1)               - copy files and directories
cpio (1)             - copy files to and from archives
install (1)          - copy files and set attributes

Como véis nos muestra tres comandos que pueden servirnos para realizar operaciones de copiado de ficheros. Otro ejemplo podría ser la búsqueda de un comando/programa para gestionar particiones:

$ apropos "partition"
addpart (8)          - simple wrapper around the "add partition" ioctl
cfdisk (8)           - Curses/slang based disk partition table manipulator for Linux
delpart (8)          - simple wrapper around the "del partition" ioctl
fdisk (8)            - Partition table manipulator for Linux
iostat (1)           - Report Central Processing Unit (CPU) statistics and input/output statistics for devices, partitions an...
mpartition (1)       - partition an MSDOS hard disk
partprobe (8)        - inform the OS of partition table changes
partx (8)            - telling the kernel about presence and numbering of on-disk partitions.
sfdisk (8)           - Partition table manipulator for Linux

Encontrar shells r57 y c99 oculta en el servidor

Aqui os dejo estas pequeñas lineas de comandos en linux para encontrar las shells r57 y c99 en nuestro servidor.

Estos comandos lo que hace es buscar con el comando find en el directory que le digamos y en el tipo de extension que querramos, y con xargs busca dentro del contenido del archivo la palabra r57 o c99 segun le indiquemos, y con awk nos muestra la ruta completa del archivo que contiene r57 y c99, en estos casos nos muestra rm -rf que es el comando para borrar cualquier archivo o carpeta sin preguntar, no recomiendo usar rm -rf sin antes examinar el contenido de los archivos personalmente, vaya a ser que la caguemos.

Para buscar la shell r57 en php

find /var/www/  -name "*".php  -type f -print0  | xargs -0 grep r57 | uniq -c  | sort -u  | cut -d":" -f1  | awk '{print "rm -rf " $2}' | uniq

Para buscar la shell r57 en txt

find /var/www/  -name "*".txt  -type f -print0  | xargs -0 grep r57 | uniq -c  | sort -u  | cut -d":" -f1  | awk '{print "rm -rf " $2}' | uniq

Para buscar la shell r57 en gif

find /var/www/  -name "*".gif  -type f -print0  | xargs -0 grep r57 | uniq -c  | sort -u  | cut -d":" -f1  | awk '{print "rm -rf " $2}' | uniq

Para buscar la shell c99 en php

find /var/www/  -name "*".php  -type f -print0  | xargs -0 grep c99 | uniq -c  | sort -u  | cut -d":" -f1  | awk '{print "rm -rf " $2}' | uniq

Para buscar la shell c99 en jpg

find /var/www/  -name "*".jpg  -type f -print0  | xargs -0 grep c99 | uniq -c  | sort -u  | cut -d":" -f1  | awk '{print "rm -rf " $2}' | uniq

Para buscar la shell c99 en gif

find /var/www/  -name "*".gif  -type f -print0  | xargs -0 grep c99 | uniq -c  | sort -u  | cut -d":" -f1  | awk '{print "rm -rf " $2}' | uniq

Si teneis alguna pregunta hacerla¡¡¡¡¡ no os calleis, que callarse y quedarse con dudas es de tontos¡¡¡

Script para desactivar servicio mail en plesk

Este script en bash lo que hace es que comprueba todos los dominios en plesk que tienen el servicio mail activo y posteriormente lo desactiva

#!/bin/bash
SiteList=`egrep 'Server(Name)' /var/www/vhosts/*/conf/httpd.include|
awk '{print $3}'|grep -v www.*|
grep -v '^.*\..*\..*$'|sed 's/:80//'|
sed 's/:443//'|sort -u`;
for Site in $SiteList
do
Result=`/usr/local/psa/bin/domain -i $Site | grep 'Mail service' | awk '{print $3}'`;
if [ $Result == On ]; then
Command=`/usr/local/psa/bin/domain -u $Site -mail_service false`
echo "Turning Off Mail Service: $Site";
fi
done