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.
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:
el nombre (-name xxx)
find . -name tureceta*
Si es un archivo o carpeta (-type f –type d)
find . -type f -name tureceta*
find . -type d -name tureceta*
Los permisos que tiene (-perm nnn)
find . -type d -perm 777
El usuario al que pertenece (-user usuario1)
find . -type f -user usuario1
El grupo al que pertenece (-group grupo1)
find . -type f -group grupo1
Si el fichero está vacio (-empty)
find . -type f -empty
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
Modificados los datos en las últimas X*24h (- dtime n)
find . -tipe f -dtime 2 (en las últimas 48h = 2*24)
Accedidos en las últimas X*24h (- atime n)
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
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
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.
pool-designate-new-master host-uuid=<UUID of member XenServer host to become new master>
cat /etc/xensource/pool.conf to reflect to the new master.
Restarted XAPI service and it back to the pool.
Remove a Lost server from a Resource Pool
xe host-list xe -s [ip address] -u root -pw PASSWORD pool-sync-database xe -s [ip address] -u root -pw PASSWORD host-forget uuid=[the above command will provide the UUID] xe pool-eject host-uuid
Copy a VM to another XenServer
xe vm-list (note the name of the VM you wish to copy) xe sr-list (note the name of the storage you will to copy the VM to) xe vm-copy (needs the following parameters to complete) xe vm-copy vm=<name of VM to copy> sr-uuid=<UUID of SR to copy VM to> new-name-label=<NewNameofVM> new-name-description=”Description of VM”
while true ; do true ; donewhile true ; do true ; done &while true ; do `ls –lR /` ; done
How to Create a Local Storage Repository (CTX121313)
# cat /proc/partitions # ll /dev/disk/by-id Find the disk ID of the “sdb” or “cciss/c0d1”disk. The “scsi-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx” or “cciss-xxxxxxxxxxxxxxxxxxxxxxxxxx”format is what you need. Create a Storage Repository (SR): # xe sr-create content-type=user device-config:device=/dev/disk/by-id/<scsi-xxxxxxxxxxxxxxxxxxxxxxxxx> host-uuid=<host-uuid> name-label=”Local Storage 2” shared=false type=lvm- Or – # xe sr-create content-type=user device-config:device=/dev/disk/by-id/<cciss-xxxxxxxxxxxxxxxxxxxxxxxxx> host-uuid=<host-uuid> name-label=”Local Storage 2” shared=false type=lvm
Aqui os dejo 15 usos prácticos del comando de MySQL tan usado por los syadmins, mysqladmin
MySQL
1. ¿Cómo cambiar la contraseña del usuario root en MySQL
# mysqladmin -u root -pxxx password ‘yyy’ # mysql -u root -pyyy Welcome to the MySQL monitor. Commands end with ; or g. Your MySQL connection id is 2 Server version: 5.0.67 MySQL Community Server (GPL) Type ‘help;’ or ‘h’ for help. Type ‘c’ to clear the buffer.
2. ¿Cómo chequear si el servidor MySQL está corriendo?
# mysqladmin -u root -p ping Enter password: mysqld is alive
# mysqladmin -u root -pxxx version mysqladmin Ver 8.42 Distrib 5.0.67 on i686 Copyright (C) 2000-2006 MySQL AB This software comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to modify and redistribute it under the GPL license Server version 5.0.67 Protocol version 10 Connection Localhost via UNIX socket UNIX socket /var/lib/mysql/mysql.sock Uptime: 100 days 0 hours 0 min 0 sec Threads: 1 Questions: 241986 Slow queries: 0 Opens: 11097 Flush tables: 2 Open tables: 32 Queries per second avg: 1.23
# mysqladmin -u root -pxxx drop basedeprueba Dropping the database is potentially a very bad thing to do. Any data stored in the database will be destroyed.Do you really want to drop the ‘basedeprueba’ database [y/N] y Database “basedeprueba” dropped
10. ¿Cómo recargar/refrescar los privilegios de la tabla de permisos?
# mysqladmin -u root -pxxx reload;
El comando refresh hará un flush de todas las tablas y cerrará/abrirá los archivos de log.
# mysqladmin -u root -pxxx refresh;
11. ¿Cuál es el método seguro de detener el servidor MySQL?
13. ¿Cómo matar un proceso pendiente de un cliente MySQL? Previo a este comando es necesario identificar el thread a eliminar ejecutando el comando processlist de mysqladmin.
# mysqladmin -u root -pxxx kill 20
14. ¿Cómo iniciar y parar la replicación en un servidor esclavo en MySQL ?
15. ¿Cómo combinar múltiples comandos de mysqladmin juntos?
# mysqladmin -u root -pxxx process status version +—-+——+———–+—-+———+——+——-+——————+ | Id | User | Host | db | Command | Time | State | Info | +—-+——+———–+—-+———+——+——-+——————+ | 43 | root | localhost | | Query | 0 | | show processlist | +—-+——+———–+—-+———+——+——-+——————+Uptime: 3135 Threads: 1 Questions: 50 Slow queries: 1 Opens: 10 Flush tables: 2 Open tables: 0 Queries per second avg: 0.5 mysqladmin Ver 8.42 Distrib 5.0.67 on i686 Copyright (C) 2000-2006 MySQL AB This software comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to modify and redistribute it under the GPL license
Server version 5.0.67 Protocol version 10 Connection Localhost via UNIX socket UNIX socket /var/lib/mysql/mysql.sock Uptime: 52 min 15 sec