Buscar comandos escritos anteriormente en Linux. Comando history.

Los comandos de Linux no son siempre los más sencillos de recordad. Y en ocasiones hemos ejecutado hace tiempo algunos, tras investigar y experimentar, que querríamos volver a ejecutar unos meses más tarde. Pero no nos acordamos, y no es plan buscar con la flecha arriba.
Hoy os enseñamos dos maneras de recuperar esos comandos.

Comando history junto a grep.

Una de las maneras más socorridas es usar el comando history que guarda un historial de lo que hemos escrito en la línea de comandos, tanto en esta sesión como en sesiones anteriores.

Como es mucha información, tenemos que usar el tan usado grep para filtrar. Os dejamos algunos ejemplos.

  • history | grep palabraquequeremosbuscar : Para buscar una palabra concreta.
  • history | grep 'frase que queremos buscar ' : Cuando tenemos que buscar frases con espacios o caracteres raros.
  • history | grep 'frase con "comillas" que queremos buscar ' : si nuestra frase tiene comillas, podemos jugar alternando simples y dobles.

Filtrando el fichero Histfile con grep.

Otra manera es buscar en el fichero Histfile y filtrarlo con grep. Pero este tiene el problema que la variable $HISTFILE sólo guarda los comandos tras una sesión, no incluye los de la sesión actual. Hay que tenerlo en cuenta.

El comando sería grep -w “frase a buscar” $HISTFILE

Estos comandos os los dejamos por si los necesitáis, pero también como referencia nuestra, porque son comandos que usamos relativamente frecuentemente (y no nos acordamos de una vez a otra).

Cómo cambiar los permisos sólo de ficheros o directorios en Linux.

En la mayoría de los CMS, por ejemplo en el archiconocido WordPress, los permisos de los ficheros y directorios son diferentes. 644 (ficheros) y 755 (directorios) en la mayoría de los casos, aunque a veces 664 y 775 (os explicaremos por qué en otro artículo.

Bien, así que ahora, porque he cometido un error o por (lo más frecuente) una diferencia de permisos al subir contenido por FTP, ahora tengo que cambiar los permisos. Normalmente esto se hace por línea de comandos (a menos que tengas un FTP ideal). ¿Cómo lo hago? Hoy os lo explicamos.

Cómo cambiar los permisos de ficheros o directorios en Linux.

La manera más habitual y rápida de hacerlo es con el comando find. Vamos a usar ese comando para encontrar sólo directorios, o sólo ficheros, y añadir al comando un final en el que se hará el cambio de permisos a los resultados.
Os ponemos primero los comandos (dos opciones en cada uno) y luego los explicamos. Obviamente podéis seleccionar otros directorios etc.

  • Cambio de permisos a ficheros.

    find /raizdelsitio -type f -exec chmod 644 {} \; o
    find /raizdelsitio -type f -exec chmod 644 {} \+;
  • Cambio de permisos a directorios.

    find /raizdelsitio -type d -exec chmod 755 {} \; o
    find /raizdelsitio -type d -exec chmod 755 {} \+;

Explicación de los comandos.

Como veis estamos usando find para encontrar los tipos de fichero (f) o directorios (d).
Se añade al final el chmod relevante para cada tipo de fichero.
El elemento {} lo que hace es ejecutar el final del find (chmod en este caso) a cada salida del find.
El + te lo pone en columnas y no sólo en filas.
El \ lo que hace es “escapar” el comando y ; decir que finalice. Así que \; indica el final del comando por si los ejecutamos en scripts.
Más información aquí.

Cómo obtener la versión de la distribución de Linux y del kernel por línea de comandos.

Cuando hablamos de Linux tenemos que diferenciar dos cosas: el kernel de Linux y la distribución de Linux. El kernel actúa de puente entre el hardware y el sistema operativo, y suele tener un número que lo identifica.
La distribución contiene los kernel, la interfaz gráfica, el software etc.
Distribuciones famosas son Debian, Ubuntu, Red Hat, Arch Linux, CentOS….

Hoy os vamos a resumir y recordar cómo obtener la versión de la distribución. Y decimos recordar porque estos artículos los usamos también nosotros como referencia rápida.

  • lsb_release -a
    Nos da información sobre la distribución. Es el comando más usado para esta función.
  • cat /etc/os-release
    Este comando muestra información sobre la distribución contenida en la el fichero /etc/os-release presente en todos los Linux.
  • hostnamectl
    Este comando, usado para cambiar el nombre del host de un equipo, cuando se ejecuta así, sólo, muestra información de la distribución y del kernel.
  • cat /etc/*release
    Información sobre la distribución.

Para mostra información del kernel.

El comando mejor para esto es
uname -r

Cómo mostrar en Linux las últimas conexiones e intentos de conexión de usuarios. Comando last.

Si tienes un ordenador o servidor Linux, es muy probable que te interesa saber quién se ha conectado y cuando, quién no se ha conectado y qué intentos fallidos de conexión has tenido.
Hoy os vamos a enseñar a realizar todo eso.

Comando last.

El comando last muestra la lista de los últimos usuarios que han iniciado sesión, así como el sistema, y fecha y hora. Puedes paginar con |more o |less.
Lo que hace realmente es leer el fichero /var/log/wtmp
Opciones:

  • last nombredeusuario muestra la lista sólo para ese usuario.
  • last -n X muestra las X (un número) últimas líneas
  • last -F Muestra las horas de inicio y fin de sesión
  • last -f rutaynombredefichero muestra la información respecto a ese fichero en vez del fichero wtmp
  • last -x muestra las entradas con cambios de apagado o cambios de niveles de ejecución. Para ver cuando se ha apagado y reiniciado. También last -x reboot o last-x shutdown
  • last -s yesterday -t today Para ver desde (por ejemplo) ayer a hoy.
  • last -t YYYYMMDDHHMMSS para ver quién estaba registrado a cierta hora. También podemos limitar esto por usuario.
  • last pts/0 muestra sólo los inicios de sesión por pts/0. Pts es pseudo terminal y tty terminal.

Comando lastb.

El comando lastb permite ver los intentos de sesión fallidos. Obviamente aquí aparecerán muchos así que filtrad o paginar.
También podéis poner lastb nombredeusuario .
Este comando podemos usarlo para ver los ataques que recibimos, o los intentos fallidos de acceso de un usuario.

Comando lastlog.

El comando lastlog permite ver la última conexión por usuario. Así que podemos usarlo para ver cuando se conectó alguien por última vez, o que usuarios nunca se han conectado.
Con lastlog -b numerodedias podemos ver quien no ha iniciado sesión en un número de días igual o superior a numerodedias.

Recordad que con el comando who podemos ver quien está conectado en este momento.

Cómo cambiar el hostname en un equipo Ubuntu Linux

Hace unos días instalamos un servidor Ubuntu Linux (por requerimientos del software). Tuvimos que cambiar el nombre de host de ese equipo y aquí os dejamos cómo se hace.

Cambiar el hostname de un equipo Ubuntu.

Si sólo quieres cambiarlo sólo hasta el siguiente reinicio puedes poner:

hostname NUEVONOMBRE

Para hacerlo más permanente, tienes que editar dos ficheros.

  • El fichero etc/hostname que es el que da el nombre al servidor. Hazlo con este comando, o con tu editor favorito
    sudo vim /etc/hostname
  • El fichero etc/hosts que le dice dónde tiene que ir cuando pongan ese nombre. Es su DNS interno. Hazlo con este comando (o pon tu editor)
    sudo vim /etc/hosts

No es necesario reiniciar aunque si muy conveniente (sudo reboot).

Puedes comprobar el cambio con los comandos hostname o
hostnamectl .

Cómo desbloquear una IP bloqueada con Fail2ban

Hace un tiempo escribimos un artículo sobre cómo proteger un servidor con Fail2ban. Es una gran herramienta. Pero a veces bloquea IPs que no queremos. Por ejemplo si un cliente se equivoca mucho en su contraseña, o nosotros mismos (alguna vez nos ha bloqueado jejeje). Hoy os enseñamos cómo desbloquearlo.

Cómo desbloquear una IP bloqueada con Fail2ban.

Tenemos que conectarnos por ssh. Obviamente si nos ha bloqueado nuestra IP no podremos, así que o tendremos que acceder desde otro sitio (casa u otra oficina), o cambiar nuestra IP dinámica (reseteando router y ONT y ver si la cambia), o accediendo desde el SSH de nuestro panel del servidor.
Nota: Apunta antes la IP que quieres desbloquear, la tuya. Puedes verlo buscando cual es mi IP en Google. Cualquiera de esas páginas te lo dará.

Una vez hemos accedido por ssh tenemos que encontrar qué servicio nos han bloqueado en nuestra IP (ssh, ftp etc). Para ello tenemos que ejecutar:

iptables -L -n

Ahí comprobamos nuestra Ip y el servicio.

Podemos verificar los servicios con

fail2ban-client status

Ahora para desbloquear la IP ponemos:

fail2ban-client set servicio unbanip XXX.XXX.XXX.XXX

Donde servicio es el servicio que nos han baneado (ssh, ftp etc) y XXX…. la IP a desbloquear.

Con eso prueba a acceder porque debería estar solucionado.

Cómo activar los procesadores de un servidor virtual o cloud sin reiniciar

Hoy hemos tenido que ampliar los procesadores de un servidor Cloud para un cliente. Lo bueno de estos servidores es que, cuando hay un aumento repentino de accesos, se les puede aumentar los recursos de forma temporal. Porque son servidores virtuales.

Sin embargo, la mayoría de las veces el aumento requiere reinicio y esto, en una máquina en producción, puede no ser viable inmediatamente. Hoy os enseñamos cómo activar los procesadores añadidos sin tener que reiniciar.

Cómo activar los procesadores de un servidor virtual sin reiniciar.

Al activar los procesadores nuevos podéis comprobar como todavía no están en funcionamiento con los comandos de este artículo. Por ejemplo si hacemos un lscpu veremos algo como:


Si veis los CPU 0 y 1 aparecen online peor los 2 y 3 salen offline (en linux se centan desde 0).

Como hemos dicho podemos reiniciar, y activará los que tiene offline. Pero también podemos ejecutar estos comandos:

Activar procesadores.

echo 1 > /sys/devices/system/cpu/cpu2/online
echo 1 > /sys/devices/system/cpu/cpu3/online

De esta manera pones a 1 (online) los atributos  sysfs de dichos procesadores.

También se puede hacer lo mismo con chcpu

chcpu -r
chcpu -e 2

(Esto reescanea los cpus y activa el procesador 2)

Para desactivar los procesadores:

echo 0 > /sys/devices/system/cpu/cpu2/online
echo 0 > /sys/devices/system/cpu/cpu3/online

Esto hace lo contrario.

Si ahora hacéis de nuevo un lscpu obtendréis que están todos activos:

 

Excluir directorios en las búsquedas con find en Linux. Prune y -not -path

En ocasiones tienes que buscar ficheros en un árbol de directorios Linux, pero quieres excluir directorios de la búsqueda. ¿Cómo se hace con find? Hoy te lo contamos.

Cómo excluir directorios de las búsquedas con find en Linux.

Tienes varias opciones, os dejamos dos de las más usadas -prune  y -not -path de find.

  • -prune. La opción -prune le dice a find que no descienda por ese directorio.  Vamos a ver ciertos ejemplos.
    Recordamos que $ find . -name prueba busca todo con nombre prueba.- $ find . -name prueba -prune   Esto dice que busque todo con nombre prueba y no descienda por los directorios con ese nombre.
    $ find ./* -prune  Aquí find mostrará el contenido del directorio actual pero no descenderá por sus directorios (por prune).¿Cómo hacer que con prune se puedan omitir ciertos directorios y  muestre otros? Con la opción -o -print   . -o es un OR, con lo que podemos poner más comandos que no sigan la pauta del prune. -print muestra el contenido. Ejemplos:

    -$ find . -name prueba -prune -o -print

    Esto excluye el directorio prueba y muestra el resto. Es como si dijera “encuentra prueba, no bajes por ahí, y muestra todo lo demás”.

    $ find . -name prueba -prune -print -o -print

    Encuentra todo lo que sea prueba, no desciendas por ahí pero muéstramelo y luego muestra el resto. Es igual que el anterior pero muestra los resultados prueba encontrados.

     - $ find . -type d -name Azul -prune -o -name "*.jpg" -print

Esto busca todos los ficheros con extensión jpg excepto los que están en el
directorio Azul.
Con esto podéis crear vosotros las combinaciones que os hagan falta.

  • -not -path.
    Path te permite buscar en una ruta, -not -path te excluye esa ruta. Así que

    find /home/user/pedro -type f -not -path "*doc/texto*" -not -path "*images/texto*"

    Busca todos los ficheros en el directorio pedro que no tengan las rutas indicadas.

Uno de los problemas que tiene path es que va a tardar  más porque comprueba en todas las búsquedas si cumple la cadena en -not -path. Podemos optimizarlo usando una combinación de ambos comandos:

find . -path ./docs/privados -prune -o -print

Esto evita el directorio docs/privados y todo lo que haya debajo (prune hace que
no descienda por él) y muestra todo lo demás.

Cómo saber las conexiones activas por FTP en un servidor Linux

Si tienes un servidor Linux y quieres saber qué conexiones de FTP están activas en ese momento o, dicho de otra manera, cuánta gente hay conectada en ese momento por FTP, hoy os decimos cómo.

Enumerar las conexiones activas por FTP en un servidor Linux.

  • Pure-ftpwho: Este es uno de los primeros comandos a probar. En línea de comandos lista las conexiones de FTP activas. Pero además tiene algún parámetro interesante como -c  o -w que hace que el resultado se muestre en html. Por lo tanto puede usarse en u script y mostrarse en una web o herramienta interna.
  • Puedes filtrar los resultados de netstat para el puerto que quieras, tanto el 21 de FTP clásico como el 22 de sftp.
    netstat -tan | grep \:21     para FTP
    netstat -tan | grep \:22    para SFTP
  • En algunos servidores, si lo tienen instalado, también puedes ejecutar ftptopftpwho.

Así podréis vigilar vuestras conexiones en  el servidor.

Cómo saber el número de cores y CPUs en un Linux

En ocasiones puede interesarte saber el número de cores en tu máquina Linux, o el número de procesadores que van a poder gestionar un proceso. Hoy os decimos cómo.

Cómo saber el número de cores y CPUs en un Linux.

Tienes varias maneras. Por un lado puedes usar el comando nproc.

  • nproc sin ningún delimitador proporciona el número de procesadores disponibles.
  • nproc –all proporciona el número de procesadores instalados (estén o no disponibles).

Por otro lado, el comando lscpu proporciona algo más de información detallada sobre el procesador, si bien a lo mejor algo confusa.

Aquí hay que tener en cuenta que:

CPUs =Hilos de procesamiento X núcleos por socket X sockets

Como veis en la imagen CPUs= 1 X 4 x 1= 4, mismo resultado que el comando nproc.

En este caso, por ejemplo, tenemos 1 procesador físico en 1 socket con 4 núcleos, y un hilo, por lo tanto 4 procesadores “virtuales”.

Para más inri podéis ver esta misma información de otra manera con:

 grep -E 'processor|core id' /proc/cpuinfo

o
grep -m 1 'cpu cores' /proc/cpuinfo