Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Liste des utilisateurs / Linux

12 réponses
Avatar
c-note
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

10 réponses

1 2
Avatar
Alain BARTHE
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


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

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

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

Avatar
Alain BARTHE
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


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

Avatar
c-note
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


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


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


Avatar
yves
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

Avatar
Thierry B.
--{ 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.

Avatar
elfoiros
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 :-)


Avatar
Pierre Hanser
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.


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

--
Pierre



Avatar
elfoiros
Pierre Hanser wrote:
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.


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

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




Avatar
Alexfff
On 2 mai, 21:19, "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 ?)

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


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_UID0
LAST_SYSTEM_UID™9

# FIRST_[GU]ID to LAST_[GU]ID inclusive is the range of UIDs of
dynamically
# allocated user accounts/
groups.
FIRST_UID00
LAST_UID)999

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


Avatar
Laurent
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 :)

1 2