bonjour
je me tourne vers vous quart je ne voie pas très bien comment je peux réaliser mon truc .
je bloque sur comment afficher les utilisateurs loguer au moment ou je me logue, je ne souhaite voir que le login nbr de connexion adresse ip
j ai réaliser la commande suivante mais j ai pas c vraiment ce que je veux .
après avoir exécuter la commande elle me ressort ceci
Jan:11:moi : 213.30.164.49
Jan:11:moi : 62.201.42.25
Jan:11:uber : 82.224.60.50
Jan:12:uber : 81.57.23.60
Jan:13:uber : 88.191.22.15
alors que si je regarde les logs je voie ceci
Jan:12:22:04:48:uber : 81.57.23.60
Jan:13:09:58:22:uber : 88.191.22.15
Jan:13:10:48:02:uber : 78.27.185.125
Jan:13:11:02:38:uber : 78.27.185.125
Jan:13:11:33:11:moi : 78.27.185.125
ma question et donc la suivante comment lui dire que je ne veux voir que ceux qui sont connectée aujourd’hui et non y a trois jour
je viens de trouver la solutions à mon problème, la commande suivante me permet de savoir le nombre de connection open sur le poste ainsi que les ip.
il y a encore un petit truc qui me chagrine je souhaiterais afficher les ip a cote du nbr de connexion et non en dessous .
savez vous comment je peux faire .
who | awk 'BEGIN{ n=0 } NR <= n arr[$1]++; END{for(i in arr){ print i, arr[i] }}' && finger | cut -c37-49,58-72 |sort -n -k2
J’ai deux machines de lancées à mon nom, j’ai mis un certain à réaliser pourquoi j’apparaissait deux foix
Le nom de la machine en regard de l’utilisateur serait un plus
[:space:]: espace ou tabulation
→ [[1]] : différent d’espace ou tabulation
→ [[2]]+ : répété au moins une fois → n’importe quelle chaine de caractère ne contenant pas d’espace ni de tabulation
chaque partie se trouvant entre ( et ) est récupérable dans la deuxième partie de la substition via \1, \2, \3
→ ^([[3]]+) va me permettre de récupérer la première chaine de caractère, i.e le login (le ^ indiquant le début de la ligne (quand il n’est pas entre crochets)).
→ de la même façon, i$[/i] me permettra de récupérer la chaine entre parenthèses à la fin de la ligne (le $ c’est pour la fin de la ligne), soit l’adresse IP.
Comme je me fous de ce qu’il y a entre les deux, je mets un .*.
En espérant avoir été clair…
Il semblerait que quand l’IP est resolvable par la machine, ce soit le nom qui apparaissent dans la commande who.
Sinon, j’aurais pu faire une regex un peu plus complexe…
À la reflexion, l’utilisation de sed n’était pas la plus judicieuse :
donne le même résultat que ma commande précédente, mais avec une syntaxe un peu plus claire (on prend les champs 1 et 5, séparés par " - ", et on enlève les parenthèses avec tr)
Tu peux alors choisir les champs que tu veux.
zyriuse :Ce que tu vois est le reverse DNS de ton adresse IP. Vu que ça dépend du FAI, tu ne peux pas filtrer avec une regex…
Mais tu peux refaire la résolution inverse :
# On change l'IFS pour lire ligne par ligne
IFS=''
for line in `who` ; do
# On affiche le login, la date et l'heure, sans retour à la ligne
echo $line | awk '{print $1 " - " $3 " - " $4 " - "}' | tr -d "\n"
# On récupère l'adresse
addr=`echo $line | awk '{print$5}' | tr -d '()'`
# Si on peut la résoudre, on la résoud, sinon on l'affiche tel quel
if host $addr >/dev/null ; then
dig $addr a +short
else
echo $addr
fi
done
bonjour
j ai du mal à tout comprendre dans le script totor
je comprend bien IFS <-- variable de séparation.
je ne comprend d’ou viens le -a de read -a infos
et aussi pourquoi fais tu ceci ?
merci de bien vouloir m expliquer
5 mois sans faire de script shell et je suis rouiller
l’option -a : c’est pour décomposer la ligne lue en un tableau (dont le nom est “infos”) host ${infos[4]} >&/dev/null : as-t’on des informations sur la machine dont le nom se trouve à l’indice 4 du tableau “infos”. Si oui, le statut de la commande vaut 0, si non le statut est <> 0. Et on redirige la sortie standard et d’erreur à la poubelle (>& désigne à la fois la sortie standard et la sortie d’erreur)
excuse moi de te déranger encore totor .
voici ce qui s’affiche a la place de l adresse ip comment faire pour ne sélectionner que les 4 bit de l adresse ip j ai essayer avec un cut passer en variable, mais quand je viens à le mettre à la suite il m’affiche tout en double
Je n’ai pas finger sur une station Linux sous la main et pas possible de l’installer.
Je l’ai juste sur un serveur AIX. J’espère donc que la sortie que j’obtiens correspond à ce que tu recherches.
printf "%20s%20s%20s\n" Login When Where
while read -a infos
do
((i++)) && printf "%20s%20s%20s\n" ${infos[0]} "${infos[4]} ${infos[5]}" ${infos[6]}
dones < <(finger)