Comandos de AWK para la Gestión de Usuarios y Archivos en Linux

Enviado por Programa Chuletas y clasificado en Informática y Telecomunicaciones

Escrito el en español con un tamaño de 5,93 KB

Este documento presenta una serie de comandos AWK útiles para la gestión de usuarios, archivos y procesos en sistemas Linux. Los ejemplos cubren diversas tareas, desde la visualización de información hasta la manipulación de archivos y la monitorización del sistema.

Gestión de Usuarios

  • Mostrar los logins de todos los usuarios del archivo /etc/passwd:
    awk -F: '{ print $1 }' /etc/passwd
  • Mostrar los logins, directorios y la shell de todos los usuarios del archivo /etc/passwd, separados por "--":
    awk -F: '{ print $1," -- ",$6," -- ",$7}' /etc/passwd
  • Mostrar el login y directorio de todos los usuarios que empiecen con "a" del archivo /etc/passwd:
    awk -F: '/^a/ { print $1, $6 }' /etc/passwd
  • Mostrar los registros de usuarios del archivo /etc/passwd que utilizan la shell csh:
    awk -F: '$7 == "/bin/csh" {print $0 }' /etc/passwd
  • Mostrar los registros de usuarios sin privilegios del sistema (UID >= 500):
    awk -F: '$3>=500 { print $0 }' /etc/passwd
  • Mostrar los registros de usuarios del archivo /etc/passwd cuyos nombres de login empiecen con "a" y que utilizan bash:
    awk -F: '/^a/ && $7=="/bin/bash" { print $0 }' /etc/passwd

Gestión de Archivos

Se asume la existencia de un archivo llamado personas.txt con el formato nombre:apellido:numero.

  • Mostrar todos los registros cuyo nombre sea "francisco" del archivo personas.txt:
    awk -F: '/^francisco/ { print $0 }' personas.txt
  • Mostrar todos los registros con apellido "huerta" del archivo personas.txt:
    awk -F: '/huerta/ { print $0 }' personas.txt
  • Mostrar los registros del archivo personas.txt cuyo nombre sea "juan":
    awk -F: '/^juan/ { print $0 }' personas.txt
  • Mostrar todos los registros del archivo personas.txt con su número de registro:
    awk -F: '{ print NR,$0 }' personas.txt

Información del Sistema

  • Mostrar los usuarios conectados al sistema y su hora de conexión:
    who | awk '{ print $1,$4 }'
  • Mostrar la fecha en formato día mes año:
    date | awk '{ print $3,$2,$6 }'
  • Mostrar la hora del sistema:
    date | awk '{ print $4 }'

Manipulación de Archivos y Directorios

  • Mostrar todos los archivos del directorio actual cuyo nombre empiece con "a":
    ls | awk '/^a/'
  • Mostrar los permisos ($1) y los nombres de los archivos ($9) del directorio actual (ls -l):
    ls -l | awk '{ print $1,$9 }'
  • Mostrar los campos del 1 al 5 del listado de ls -l:
    ls -l | awk '{ for (x=1; x<=5; x++) { printf "%s ", $x }; printf "\n" }'
  • Mostrar el listado de todos los archivos vacíos del directorio actual:
    ls -l | awk '$5==0 { print $9 }'
  • Mostrar el listado de todos los archivos no vacíos del directorio actual:
    ls -l | awk '$5>0 { print $9 }'
  • Listar el contenido del directorio actual que empiece con "a":
    ls | awk '/^a/ { print $1 }'

    Otra forma:

    ls | awk '/^a/ { print $1 }' | awk '{ print "cat " $1 }' | bash
  • Sumar los tamaños de todos los archivos del directorio actual pertenecientes al usuario "alumno":
    ls -l | awk '$3=="alumno" { sum+=$5 } END { print sum }'

    Otra forma:

    ls -l | awk '$3 == "alumno" { sum+=$5 } END { print sum }'
  • Mostrar un listado de todas las carpetas o subcarpetas del directorio actual:
    ls -l | awk '/^d/ { print $1," ",$9 }'
  • Borrar solo los archivos del directorio actual:
    ls -l | grep -v ^d | awk '{ print "rm " $9}' | bash
  • Mostrar el listado de archivos del directorio actual en mayúsculas:
    ls | awk '{ print toupper($1) }'

    Otra forma:

    ls | awk '/^d/ { print toupper($1) }'

Monitorización y Seguridad

  • Mostrar las características de la CPU de la máquina:
    dmesg | awk '/CPU/ { print $1 }'
  • Listar el nombre de los usuarios que nunca se han conectado al sistema:
    lastlog | awk '$2 == "Never logged in" { print $1 }'
  • Mostrar las líneas con "invalid user" y el total de ellas del archivo /var/log/secure:
    awk '/invalid user/ { count++; print $0 } END { print count }' /var/log/secure
  • Mostrar los ingresos al sistema entre el 1 y el 5 de junio:
    last | awk '$2 == "Jun" && ($3 >= 1 && $3 <= 5)'
  • Mostrar las ejecuciones del comando su:
    awk '/su:/ { print }' /var/log/auth.log
  • Mostrar todos los intentos de conexión al sistema fallidos:
    awk '/FAILED LOGIN/ { print $0 }' /var/log/secure
  • Matar todos los procesos de un determinado tipo (en este ejemplo, la ejecución del editor vi):
    ps aux | grep vi | grep -v grep | awk '{ print "kill -9 " $2}' | bash
  • Mostrar la cantidad de usuarios en el sistema en este momento:
    w | awk 'NR>2 { cont++ } END { print cont }'

Entradas relacionadas: