Algunas veces encadenamos muchos comandos para obtener información relevante sobre un determinado archivo. Los encadenamos o escribimos unos cuantos.
Eso hace que perdamos el tiempo y no tengamos en pantalla justo lo que deseamos saber. Por ejemplo en el caso de los logs ver si anda algún proceso escribiendo (si anda vivo), el tamaño de ese archivo en bytes y en «humano», la ruta absoluta real en la que se encuentra el archivo (por si es un enlace) y el tipo de archivo (un json, un xml, un archivo binario de sonido, …).
Para solucionar todo eso es bueno crearnos un sencillo script en bash llamado «f» (f de file) que nos permita del tirón realizar todo.
Creando el script
Abrimos nuestro editor de texto plano favorito (vim, vi, nano, emacs, joe, le, …) y guardamos el siguiente contenido con el nombre de «f»:
#!/bin/bash
filename="$1"
if [[ -z $1 ]]; then
echo -e "\e[1m[+] Ha de pasar un archivo como parámetro.\e[0m"
else
if [[ -f $1 ]]; then
# RUTA ABSOLUTA ARCHIVO
echo -e "\e[100m[+] Ruta absoluta\e[0m"
rutaAbsoluta=$(readlink -e $filename)
echo -e "\e[34mRuta absoluta:\e[0m\t$rutaAbsoluta"
# TAMAÑO ARCHIVO
echo -e "\n\e[100m[+] Tamaño archivo\e[0m"
enBytes=$(du -b $filename)
enHumano=$(du -h $filename)
echo -e "\e[34mEn Bytes:\e[0m\t$enBytes\n\e[34mEn Humano:\e[0m\t$enHumano"
# FECHA ARCHIVO
echo -e "\n\e[100m[+] Fecha archivo\e[0m"
accessDate=$(stat $filename | grep -iE "access:|modify:|Change:" | grep -v "Uid:" | grep -i "access" | cut -d ":" -f 2-100 | cut -d " " -f 2-100)
modifyDate=$(stat $filename | grep -iE "access:|modify:|Change:" | grep -v "Uid:" | grep -i "modify" | cut -d ":" -f 2-100 | cut -d " " -f 2-100)
changeDate=$(stat $filename | grep -iE "access:|modify:|Change:" | grep -v "Uid:" | grep -i "change" | cut -d ":" -f 2-100 | cut -d " " -f 2-100)
echo -e "\e[34mAccess:\e[0m\t\t$accessDate\n\e[34mModify:\e[0m\t\t$modifyDate\n\e[34mChange:\e[0m\t\t$modifyDate"
# TIPO DE ARCHIVO
echo -e "\n\e[100m[+] Tipo de archivo\e[0m"
tipoArchivo=$(file $filename)
echo -e "\e[34mTipo:\e[0m\t\t$tipoArchivo"
# PROCESOS USANDO EL ARCHIVO
echo -e "\n\e[100m[+] Procesos usando el archivo\e[0m"
procesosUsando=$(lsof -t $filename)
if [[ -z $procesosUsando ]]; then
echo "Ningún proceso utilizando \"$filename\" ahora mismo"
else
ps --no-headers up $procesosUsando
fi
else
echo -e "\e[1m[+] Ha de pasar un archivo como parámetro. Uno que exista a ser posible.\e[0m"
fi
fi
Una vez tenemos el archivo «f» lleno de instrucciones vamos a darle permisos de ejecución así:
$ chmod +x f
Ejecutando el script
Y movemos el archivo al directorio /usr/local/bin por ejemplo:
$ sudo mv f /usr/local/bin/
Finalmente rezamos un padre nuestro, vamos al baño, nos hacemos un café y probamos luego a escribir f en un emulador de terminal que tengamos a mano. Si todo va bien (/usr/local/bin anda en el PATH) ya podemos usar siempre que queramos el comando «f» para obtener información relevante sobre un determinado archivo.
Y eso es un poco todo. Saludos cordiales
:wq