The Linux Command Line – Ebook

The Linux ® Command Line es un libro publicado bajo licencia Creative Commons creado por William E. Shotts, Jr especialmente para aquellos que se están iniciando en el mundo de la línea de comandos Linux.

En sus 522 páginas se cubre el mismo material disponible en LinuxCommand.org pero con mucho más detalle. Además de lo básico de la línea de comandos se enseña el shell scripting y el uso de los programas más comunes de la línea de comandos Linux.

Podéis descargar el libro a través de este Link.

http://sourceforge.net/projects/linuxcommand/files/TLCL/09.12/TLCL-09.12.pdf/download

Web oficial de el libro. http://linuxcommand.org/

Comandos para buscar ficheros y carpetas en Linux

Vamos a ver algunos de los comandos que nos pueden resultar útiles cuando queremos buscar un archivo y/o carpetas en linux, desde consola.

  • locate
locate archivo.php

Este comando buscar en una “especie de base de datos” donde tiene la ruta de los fichero y así resulta mucho más rápido encontrar los ficheros o carpetas que si se tiene que recorrer toda la estructura de directorios.

Hay que tener en cuenta que la “base de datos” del locate puede estar obsoleta. Para actualizarla debemos usar este comando (lo pondré en segundo plano con “&” porque le puede costar en ejecutarse).

updatedb &
  • find

El comando find sirve para buscar ficheros y directorios pero es muy complejo y tiene muchas opciones, de las cuales sólo explicare algunas.

La ruta de acceso por defecto es el directorio actual (representado con un “. “)  y la expresión por defecto es –print. A la hora de buscar, puedes especificar muchos parámetros:

  1. el nombre (-name xxx)
  2. find . -name tureceta*
  3. Si es un archivo o carpeta (-type f –type d)
  4. find . -type f -name tureceta*
    find . -type d -name tureceta*
  5. Los permisos que tiene (-perm nnn)
  6. find . -type d -perm 777
  7. El usuario al que pertenece (-user usuario1)
  8. find . -type f -user usuario1
  9. El grupo al que pertenece (-group grupo1)
  10. find . -type f -group grupo1
  11. Si el fichero está vacio (-empty)
  12. find . -type f -empty
  13. El tamaño (-size n[cwbkMG]) siendo
    ‘b’    para bloques de 512-byte (este es el de por defecto)
    ‘c’    para bytes
    ‘w’   para two-byte words
    ‘k’    para Kilobytes (1024 bytes)
    ‘M’   para Megabytes (1048576 bytes)
    ‘G’    para Gigabytes (1073741824 bytes)

    find . -size 21k
  14. Modificados los datos en las últimas X*24h (- dtime n)
  15. find . -tipe f -dtime 2  (en las últimas 48h = 2*24)
  16. Accedidos en las últimas X*24h (- atime n)
  17. find . -tipe f -atime 2  (en las últimas 48h = 2*24)

Recordar que con la ayuda y con el man del comando tendréis toda la información

find --help
man find
  • whereis
  • Buscar la localización de un fichero binario, fuente o man

    [root@server ~]# whereis grep
    grep: /bin/grep /usr/share/man/man1/grep.1.gz /usr/share/man/man1p/grep.1p.gz
  • which
  • Buscar la localización de un fichero binario o ejecutable

    [root@sever ~]# which grep
    /bin/grep
    



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¡¡¡