Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Liste des utilisateurs / Linux

2 views
Skip to first unread message

c-note

unread,
May 2, 2008, 8:31:25 AM5/2/08
to
Bonjour,

je cherche un moyen "propre" d'obtenir la liste des utilisateurs (au
sens personne et non pas utilisateur apache, ntp, ...) d'une machine Linux.

En BASH, on peut faire :

cat /etc/passwd | grep "/home" | grep "/bin/bash" | awk -F: '{print $1}'

Passer par la commande système Python n'est pas à mon gout très élégant :-)

Y a t-il un moyen plus simple ?

Merci

Alain BARTHE

unread,
May 2, 2008, 9:13:54 AM5/2/08
to
c-note a écrit :

for line in open ("/etc/passwd", "r").readlines ():

user, id, gid, pass, name, home, shell = line.strip().split (":")

if (shell == "/bin/bash"): print user

Alain BARTHE

unread,
May 2, 2008, 9:24:03 AM5/2/08
to
c-note a écrit :

Pardon, j'avais pas tout lu :

for line in open ("/etc/passwd", "r").readlines ():

user, id, gid, pass, name, home, shell = line.strip().split (":")

if shell == "/bin/bash" and home.startswith ("/home"):
print user

c-note

unread,
May 2, 2008, 11:16:04 AM5/2/08
to
Alain BARTHE a écrit :

Merci de ta reponse, ca me va à merveille :-)

yves

unread,
May 2, 2008, 2:51:00 PM5/2/08
to
Le Fri, 02 May 2008 15:24:03 +0200, Alain BARTHE a écrit:

Bonjour,

> for line in open ("/etc/passwd", "r").readlines ():
>
> user, id, gid, pass, name, home, shell = line.strip().split (":")
>
> if shell == "/bin/bash" and home.startswith ("/home"):
> print user

A noter que le .readlines () n'est plus nécessaire (depuis Python version
xx ?)
Et qu'on ne peut pas utiliser "pass" (quel est le terme: mot réservé ?
mot clé du langage ?)

Version modifiée:

for line in open ("/etc/passwd", "r"):
user, id, gid, password, name, home, shell = line.strip().split (":")


if shell == "/bin/bash" and home.startswith ("/home"):
print user

--
Yves

Thierry B.

unread,
May 2, 2008, 3:19:50 PM5/2/08
to
--{ Alain BARTHE a plopé ceci: }--

>
> if shell == "/bin/bash" and home.startswith ("/home"):
> print user

Attention, tous les yusers n'ont pas forcément Bash,
et tous les yusers ne sont pas forcément dans /home !

Souvent, on les reconnait plutôt parce que leur uid
est supérieur à une certaine valeur (1000 ?)


--
"Rébarbatique" : science de la documentation informatique.

elfoiros

unread,
May 3, 2008, 3:44:48 AM5/3/08
to
Thierry B. wrote:
> --{ Alain BARTHE a plopé ceci: }--
>
>> if shell == "/bin/bash" and home.startswith ("/home"):
>> print user
>
> Attention, tous les yusers n'ont pas forcément Bash,
> et tous les yusers ne sont pas forcément dans /home !
>
> Souvent, on les reconnait plutôt parce que leur uid
> est supérieur à une certaine valeur (1000 ?)
>
>
Je vais me renseigner, il y a forcement un moyen de determiner si un
utilisateur designe une personne ou un programme.

Merci les gars :-)

Pierre Hanser

unread,
May 3, 2008, 9:58:12 AM5/3/08
to
elfoiros a écrit :

probablement que si le shell est /bin/false, c'est pas un utilisateur...

--
Pierre

elfoiros

unread,
May 3, 2008, 10:38:52 AM5/3/08
to
C'est plus compliqué que ça, tiré d'une Ubuntu :
www-data:x:33:33:www-data:/var/www:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh
list:x:38:38:Mailing List Manager:/var/list:/bin/sh
irc:x:39:39:ircd:/var/run/ircd:/bin/sh
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
libuuid:x:100:101::/var/lib/libuuid:/bin/sh
dhcp:x:101:102::/nonexistent:/bin/false

Alexfff

unread,
May 3, 2008, 7:29:28 PM5/3/08
to

extrait du fichier /etc/adduser.conf sur debian:

# FIRST_SYSTEM_[GU]ID to LAST_SYSTEM_[GU]ID inclusive is the range for
UIDs
# for dynamically allocated administrative and system accounts/
groups.
# Please note that system software, such as the users allocated by the
base-
passwd
# package, may assume that UIDs less than 100 are
unallocated.
FIRST_SYSTEM_UID=100
LAST_SYSTEM_UID=999

# FIRST_[GU]ID to LAST_[GU]ID inclusive is the range of UIDs of
dynamically
# allocated user accounts/
groups.
FIRST_UID=1000
LAST_UID=29999

ce qui devrait grandement faciliter la distinction user system | user.

Laurent

unread,
May 5, 2008, 8:29:37 AM5/5/08
to
Pierre Hanser a écrit :

> probablement que si le shell est /bin/false, c'est pas un utilisateur...
ça dépend : mes utilisateurs de mail sont en shell /bin/false... parce
que je ne veux pas qu'ils aient accès à un shell, justement..
Maintenant, sont-ce des utilisateurs au sens de /c-note/ ... c'est une
autre question :)

Alain BARTHE

unread,
May 7, 2008, 4:35:26 AM5/7/08
to

A noter qu'on peut sous Linux utiliser le module pwd, avec les fonctions
getpwall (), getpwnam () et getpuid()

Par exemple :

import pwd

users = [ u.pw_name for u in pdw.getpwall()
if u.pw_shell = "/bin/bash" and u.pw_dir.startswith ("/home") ]

Cela ne resout pas l'identification d'un utilisateur physique mais
simplifie la syntaxe.

Alain BARTHE

unread,
May 7, 2008, 11:40:40 AM5/7/08
to

Sur une machine que j'administre, je mets manuellement l'adresse mail
des utilisateurs "humains" dans le champ gecos,
sous la forme preno...@domaine.fr

Ainsi, quand j'ai une intervention a faire sur la machine a une date
connue je fais une recherche du caractere @ sur le champ gecos et je
recupere la liste des adresses des utilisateurs auxquels je dois envoyer
un message d'avertissement.


C'est simple, pas standard, mais tres pratique.

0 new messages