Envoyé par
Jipété
Et une fois les larmes de rire séchées, lisons ça :
que j'ai trouvé sur
un site... Solaris (première ligne du point 2) !
Et moi, en voyant "$ lastlog", je me suis dit qu'il y avait une petite faute de frappe (il y en a tellement partout, maintenant
) et que le $ symbolisait le prompt (comme bien souvent) et qu'il suffisait donc de taper
lastlog, et que si c'était prévu pour Solaris, rien ne m'empêchait de le tenter sous Linux et bingo !
Bon, désolé si on a tout faux
"Un site Solaris" c'est vite dit, il fallait quand même la trouver cette page que l'auteur a "inventé" et dont le but principal n'est manifestement que d'afficher de la pub.
Bon, voilà une version améliorée de mon script qui affiche le nom des utilisateurs et qui devrait aussi fonctionner sous linux en plus de Solaris.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| #!/bin/ksh
# ou /bin/bash si on veut
PATH=$(getconf PATH)
[ -f /var/adm/lastlog ] && { ll=/var/adm/lastlog ; ls=2; hs=4 ; } || { ll=/var/log/lastlog ; ls=8; hs=64 ; }
set -e
d=$(mktemp -d)
trap "cd /; rm -rf $d" 0
cd $d
split -b $(((ls+hs+1)*4)) $ll foo || { echo failed ; exit 1 ; }
uid=0
printf "+------------+------------+------------+--------------------------+\n"
printf "| %-10s | %-10s | %-10s | %-24s |\n" uid line host timestamp
printf "+------------+------------+------------+--------------------------+\n"
for i in foo*; do
timestamp=$(dd if=$i bs=4 count=1 2>/dev/null|od -D|awk '{print $2}')
line=$(dd if=$i bs=4 count=$ls skip=1 2>/dev/null)
host=$(dd if=$i bs=4 count=$hs skip=$((ls+1)) 2>/dev/null)
if [ $timestamp -ne 0 ]; then
username=$(getent passwd $uid | sed 's/:.*$//')
printf "| %-10s | %-10s | %-10s | %-24s | \n" "$username" "$line" "$host" "$(perl -le"print scalar localtime $timestamp")"
printf "+------------+------------+------------+--------------------------+\n"
fi
uid=$((uid+1))
done |
Et voici comment utiliser la commande finger pour récupérer les mêmes informations (et d'autres) :
for i in $(getent passwd | sed 's/:.*$//'); do finger $i; done
Partager