# Afficher les utilisateurs connectés

**URL:** <https://www.debian-fr.org/t/afficher-les-utilisateurs-connectes/30201>\
**Category:** Programmation\
**Created:** [Février 21, 2016, 12:32 UTC](https://www.debian-fr.org/t/afficher-les-utilisateurs-connectes/30201 "2016-02-21T00:32:12Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![zyriuse](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/z/49beb7/32.png) [@zyriuse](https://www.debian-fr.org/u/zyriuse)\
**Post date:** [Février 21, 2016, 12:32 UTC](https://www.debian-fr.org/t/afficher-les-utilisateurs-connectes/30201/1 "2016-02-21T00:32:12Z")

</div>

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 .

```auto

```

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

---

<div class="post-metadata">

**Author:** ![zyriuse](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/z/49beb7/32.png) [@zyriuse](https://www.debian-fr.org/u/zyriuse)\
**Post date:** [Février 21, 2016, 12:33 UTC](https://www.debian-fr.org/t/afficher-les-utilisateurs-connectes/30201/2 "2016-02-21T00:33:15Z")

</div>

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
`

---

<div class="post-metadata">

**Author:** ![kna](https://www.debian-fr.org/user_avatar/www.debian-fr.org/kna/32/5623_2.png) [@kna](https://www.debian-fr.org/u/kna)\
**Post date:** [Février 21, 2016, 12:33 UTC](https://www.debian-fr.org/t/afficher-les-utilisateurs-connectes/30201/3 "2016-02-21T00:33:57Z")

</div>

```auto
?
```

?

---

<div class="post-metadata">

**Author:** ![Mimoza](https://www.debian-fr.org/user_avatar/www.debian-fr.org/mimoza/32/3858_2.png) [@Mimoza](https://www.debian-fr.org/u/Mimoza)\
**Post date:** [Février 21, 2016, 12:34 UTC](https://www.debian-fr.org/t/afficher-les-utilisateurs-connectes/30201/4 "2016-02-21T00:34:14Z")

</div>

Une petite explication de ta ligne SED ne ferais pas de mal ![:mrgreen:](https://www.debian-fr.org/uploads/default/original/1X/cc83e9b583138e48ff45f96609046b06d06c7f9d.gif "Mr. Green") SED et les expression régulière étant connu pour leur limpidité 😒

---

<div class="post-metadata">

**Author:** ![ggoodluck47](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/g/c67d28/32.png) [@ggoodluck47](https://www.debian-fr.org/u/ggoodluck47)\
**Post date:** [Février 21, 2016, 12:34 UTC](https://www.debian-fr.org/t/afficher-les-utilisateurs-connectes/30201/5 "2016-02-21T00:34:15Z")

</div>

Salut,

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 🙂

---

<div class="post-metadata">

**Author:** ![kna](https://www.debian-fr.org/user_avatar/www.debian-fr.org/kna/32/5623_2.png) [@kna](https://www.debian-fr.org/u/kna)\
**Post date:** [Février 21, 2016, 12:34 UTC](https://www.debian-fr.org/t/afficher-les-utilisateurs-connectes/30201/6 "2016-02-21T00:34:55Z")

</div>

> [@Mimoza](#):
>
> Une petite explication de ta ligne SED ne ferais pas de mal ![:mrgreen:](https://www.debian-fr.org/uploads/default/original/1X/cc83e9b583138e48ff45f96609046b06d06c7f9d.gif "Mr. Green") SED et les expression régulière étant connu pour leur limpidité 😒

- [: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… ![:017](https://www.debian-fr.org/uploads/default/original/1X/7bbea83f89515ab7c7a738dddb86c4d4f140bd13.gif "reflechit")

> [@ggoodluck47](#):
>
> Le nom de la machine en regard de l’utilisateur serait un plus 🙂

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… 😆

* * *

1. :space 

2. :space 

3. :space:

---

<div class="post-metadata">

**Author:** ![Totor](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/58f4c7/32.png) [@Totor](https://www.debian-fr.org/u/Totor)\
**Post date:** [Février 21, 2016, 12:35 UTC](https://www.debian-fr.org/t/afficher-les-utilisateurs-connectes/30201/7 "2016-02-21T00:35:00Z")

</div>

Bonjour,

Juste pour le fun :

```auto
# sans mise en forme
who | awk -F "[()]" '{print $1, $(NF-1)}'
# avec mise en forme
who | awk -F "[()]" '{printf "%-10s%15s\n", $1, $(NF-1)}'
```

---

<div class="post-metadata">

**Author:** ![Mimoza](https://www.debian-fr.org/user_avatar/www.debian-fr.org/mimoza/32/3858_2.png) [@Mimoza](https://www.debian-fr.org/u/Mimoza)\
**Post date:** [Février 21, 2016, 12:35 UTC](https://www.debian-fr.org/t/afficher-les-utilisateurs-connectes/30201/8 "2016-02-21T00:35:01Z")

</div>

Merci Kna ![:023](https://www.debian-fr.org/uploads/default/original/1X/3c587556c0cc11389317c03a60788d77ceebd307.gif "OK")

---

<div class="post-metadata">

**Author:** ![zyriuse](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/z/49beb7/32.png) [@zyriuse](https://www.debian-fr.org/u/zyriuse)\
**Post date:** [Février 21, 2016, 12:35 UTC](https://www.debian-fr.org/t/afficher-les-utilisateurs-connectes/30201/9 "2016-02-21T00:35:13Z")

</div>

pensez vous qu’il est possible avec la commande sed   
d’avoir que les champs login, date heure, adresse ip, et non pas tout le champs adresse ip

j’étudie plus en détaille la commande sed que je ne connais pas du tout ou presque pas, je suis entrain de voir la commande de kna

`who | sed 's/\([]\+\).*(\(\))$/\1 \2/' && echo ' hy'
moi pts/0 2011-01-19 10:58 (pla93-6-78-22-190-125.fbx.proxad.net)
`

voici l’adresse d’un site que j ai trouver qui explique le fonctionnement de la commande  
[http://www.lmd.ens.fr/Ressources-Info/Unix-Doc/html/cours-unix-12.html](http://www.lmd.ens.fr/Ressources-Info/Unix-Doc/html/cours-unix-12.html)

---

<div class="post-metadata">

**Author:** ![kna](https://www.debian-fr.org/user_avatar/www.debian-fr.org/kna/32/5623_2.png) [@kna](https://www.debian-fr.org/u/kna)\
**Post date:** [Février 21, 2016, 12:35 UTC](https://www.debian-fr.org/t/afficher-les-utilisateurs-connectes/30201/10 "2016-02-21T00:35:17Z")

</div>

À la reflexion, l’utilisation de sed n’était pas la plus judicieuse :

```auto

```

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 :

```auto
# 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
```

---

<div class="post-metadata">

**Author:** ![Totor](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/58f4c7/32.png) [@Totor](https://www.debian-fr.org/u/Totor)\
**Post date:** [Février 21, 2016, 12:35 UTC](https://www.debian-fr.org/t/afficher-les-utilisateurs-connectes/30201/11 "2016-02-21T00:35:27Z")

</div>

[quote=“kna”]À la reflexion, l’utilisation de sed n’était pas la plus judicieuse :

```auto

```

[/quote]  
ce qui revient à [ça](http://www.debian-fr.org/afficher-les-utilisateurs-connectes-t31322.html#p317104)

[quote=“kna”]

[code]

# On change l’IFS pour lire ligne par ligne

[…]done  
[/code][/quote]

```auto
while IFS=' ()' read -a infos
do
  printf "%s - %s - %s - " ${infos[0]} ${infos[2]} ${infos[3]}
  host ${info[4]} >&/dev/null && dig ${info[4]} a +short || echo ${info[4]}
done < <(who)
```

---

<div class="post-metadata">

**Author:** ![zyriuse](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/z/49beb7/32.png) [@zyriuse](https://www.debian-fr.org/u/zyriuse)\
**Post date:** [Février 21, 2016, 12:35 UTC](https://www.debian-fr.org/t/afficher-les-utilisateurs-connectes/30201/12 "2016-02-21T00:35:28Z")

</div>

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 ?

```auto

```

merci de bien vouloir m expliquer

5 mois sans faire de script shell et je suis rouiller 😠😠

---

<div class="post-metadata">

**Author:** ![Totor](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/58f4c7/32.png) [@Totor](https://www.debian-fr.org/u/Totor)\
**Post date:** [Février 21, 2016, 12:35 UTC](https://www.debian-fr.org/t/afficher-les-utilisateurs-connectes/30201/13 "2016-02-21T00:35:29Z")

</div>

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)

---

<div class="post-metadata">

**Author:** ![zyriuse](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/z/49beb7/32.png) [@zyriuse](https://www.debian-fr.org/u/zyriuse)\
**Post date:** [Février 21, 2016, 12:35 UTC](https://www.debian-fr.org/t/afficher-les-utilisateurs-connectes/30201/14 "2016-02-21T00:35:30Z")

</div>

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 😊

```auto
pla93-6-78-22-184-125.fbx.proxad.net
```

---

<div class="post-metadata">

**Author:** ![Totor](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/58f4c7/32.png) [@Totor](https://www.debian-fr.org/u/Totor)\
**Post date:** [Février 21, 2016, 12:35 UTC](https://www.debian-fr.org/t/afficher-les-utilisateurs-connectes/30201/15 "2016-02-21T00:35:30Z")

</div>

quel est ton code ?

---

<div class="post-metadata">

**Author:** ![zyriuse](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/z/49beb7/32.png) [@zyriuse](https://www.debian-fr.org/u/zyriuse)\
**Post date:** [Février 21, 2016, 12:35 UTC](https://www.debian-fr.org/t/afficher-les-utilisateurs-connectes/30201/16 "2016-02-21T00:35:30Z")

</div>

j ai repris le meme code que celui que tu ma fais plus haut .

```auto
CONNECTION_IP=`who | cut -c48-62`
#echo $CONNECTION_IP
echo "###############################"
while IFS=' ' read -a infos
do
  printf "%s: %s: %s: " ${infos[0]} ${infos[2]} ${infos[3]} #$CONNECTION_IP
# printf "%s " ${infos[4]} | cut -c48-62
 host ${info[4]} >&/dev/null && dig ${info[4]} +short || echo ${info[4]}

done < <(who)
~
```

voici ce que j ai crée mais je trouve sa un peu crade

```auto

```

j ai utiliser la commande finger parce que je ne savais pas que who me listé tous les users connectée.

---

<div class="post-metadata">

**Author:** ![Totor](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/58f4c7/32.png) [@Totor](https://www.debian-fr.org/u/Totor)\
**Post date:** [Février 21, 2016, 12:35 UTC](https://www.debian-fr.org/t/afficher-les-utilisateurs-connectes/30201/17 "2016-02-21T00:35:39Z")

</div>

Salut,

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.

```auto
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)
```

---

<div class="post-metadata">

**Author:** ![zyriuse](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/z/49beb7/32.png) [@zyriuse](https://www.debian-fr.org/u/zyriuse)\
**Post date:** [Février 21, 2016, 12:35 UTC](https://www.debian-fr.org/t/afficher-les-utilisateurs-connectes/30201/18 "2016-02-21T00:35:40Z")

</div>

merci totor tu viens de me faire rappeler comment on fait pour faire les espaces j étais justement entrain de chercher .

```auto
printf "%20s%20s%20s\n" 
```

merci pour tout ![:041](https://www.debian-fr.org/uploads/default/original/1X/bfe857c9119752799c3eac55ca37a50312c51282.gif "applaudit") ![:023](https://www.debian-fr.org/uploads/default/original/1X/3c587556c0cc11389317c03a60788d77ceebd307.gif "OK")

---

<div class="post-metadata">

**Author:** ![Totor](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/58f4c7/32.png) [@Totor](https://www.debian-fr.org/u/Totor)\
**Post date:** [Février 21, 2016, 12:35 UTC](https://www.debian-fr.org/t/afficher-les-utilisateurs-connectes/30201/19 "2016-02-21T00:35:41Z")

</div>

de rien. la communauté est là pour cela.  
d’ailleurs, un alignement à gauche serait préférable :

```auto
printf "%-20s%-20s%-20s\n" 
```

après, c’est une histoire de gout.

---

<div class="post-metadata">

**Author:** ![zyriuse](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/z/49beb7/32.png) [@zyriuse](https://www.debian-fr.org/u/zyriuse)\
**Post date:** [Février 21, 2016, 12:35 UTC](https://www.debian-fr.org/t/afficher-les-utilisateurs-connectes/30201/20 "2016-02-21T00:35:41Z")

</div>

quand j aurais finis avec tout le bazar je le déposerais dans la section script pour que tout le monde puisse en profiter.
