Linux'ta çevrimiçi kullanıcı sayısını nasıl bulabilirim?


10

Bir Linux makinesinde kaç kişinin oturum açtığını nasıl görebilirim? 'Kullanıcılar' komutunun giriş yapan tüm kişileri gösterdiğini biliyorum ama bir numaraya ihtiyacım var. Man sayfasında eksik olduğum kullanıcılar için bir anahtar var mı? grep -cKomutu kullanmayı düşündüm , ancak bunun çalışması için her kullanıcı adında aynı olan bir şey olmalı. Daha kolay bir yol var mı?

Yanıtlar:


15

wc(Word count) komutunu arıyorsunuz .

Bunu dene:

users | wc -w

bu yaklaşımın (bir who / w çözümleri) yalnızca etkin olan kullanıcıları değil, yalnızca oturum açmış kullanıcıları (yani bir işlemi başlatan ve ardından çalışan işlemi geride bırakan oturumu kapatan) gösterdiğini unutmayın. Sadece fark hakkında kafa yormak için.
estani

18

Klasik olarak, komut 'kullanıcılar' yerine 'kim', ancak 'kim' size daha fazla bilgi verir. Orijinal Unix makalelerine (70'lerin ortalarına) bakıldığında, örnek şöyle olurdu:

who | wc -l

'Wc -l' kullanmak çıktı satırlarını sayar - hem 'kullanıcılar' hem de 'kim' ile çalışır. '-W' kullanmak yalnızca kullanıcı başına bir sözcük olduğunda güvenilir bir şekilde çalışır ('kullanıcılar' ile olduğu gibi 'kim' ile değil).

Satırları saymak için 'grep -c' kullanabilirsiniz. Yalnızca boş olmayan kullanıcı adlarıyla ilgilendiğiniz için şunları yapabilirsiniz:

who | grep -c .

Her satırda her zaman en az bir karakter vardır.


Belirtildiği gibi yapılan yorumlar tarafından John T , userskomut farklı whoaçılardan bir dizi. En önemlisi, her satıra bir ad vermek yerine, her satıra birkaç ad vermektedir - kullanıcı sayısı arttıkça ne olduğunu test etmek için oturum açmış yeterli farklı kullanıcılı bir makinem yok. Diğer fark, kullanılan terminal bağlantılarını 'kim' olarak bildirir. Birden çok terminal penceresi açıkken, tek bir kullanıcı için birden fazla satır gösterirken, 'kullanıcılar' giriş yapmış bir kullanıcıyı yalnızca bir kez listeliyor gibi görünüyor.

Bu farkın bir sonucu olarak, ' grep -c .' formülasyon 'kullanıcılar' komutuyla çalışmaz; ' wc -w' gereklidir.


small nitpick - users komutu kullanıcı başına 1 satır yazdırmaz, sadece id'nin sırayla yazdırılmasını sağlar, bu nedenle grep -c. bu durumda işe yaramaz. Akıllı düşünme olsa.
John T

bu ayrıca, wc -l komutunun burada gösterildiği gibi users komutu ile çalışmayacağı anlamına gelir: i26.tinypic.com/4pw0vd.png
John T

@John T: oh - ekran görüntüsü verildiğinde haklısın. MacOS X'te 'kullanıcıları' test ettim - ancak yalnızca bir kullanıcı giriş yaptı. Oturum açmış ikinci bir kullanıcı ile iki kez kontrol ettiğimde, 'hepsi bir satırda' davranışını görüyorum.
Jonathan Leffler

1
daha fazla kullanıcı simüle etmek için kendi kutunuza SSH yapabilirsiniz :)
John T

Bu değerli bilgiler için teşekkür ederim, ancak "users" komutuna bağlı kalmak istiyordum. Ayrıca seni oyladı, teşekkürler.

7

Bir kabuk açın ve şunu yazın:

who -q

Son satır size bir sayı verecektir.

DÜZENLE:

(iç çekiyor) Soruyu yanlış anladım. İşte biraz kaba kuvvet yaklaşımı:

Benzersiz kullanıcı adlarını görmek için:

who | awk '{ print $1 }' | sort | uniq

Bir dizi benzersiz kullanıcı görmek için:

who | awk '{ print $1 }' | sort | uniq | wc -l 

toplamda aynı kullanıcının tüm girişlerini sayar.
hayalci

yeniden düzenlemeyi kontrol edin, yeni yanıtların buna hitap ettiğini göreceksiniz.
Avery Payne

Bu hala işe yaramıyor, uniq sadece art arda yinelenen satırları kaldırıyor, önce kimin çıktısını sıralamanız gerekiyor.
theotherreceive

01:00 'de cevap göndermek için ne olsun. (iç çekme) sabit.
Avery Payne

3

Oturum sayısını veya gerçek kullanıcı sayısını görmek ister misiniz ?

$ who
andrew   tty1         2009-07-26 15:31 (:0)
andrew   pts/0        2009-07-27 00:11 (:0.0)
andrew   pts/1        2009-07-27 01:58 (:0.0)

Bu benim dizüstü bilgisayarımda, bu yüzden tek kullanıcı benim, ama üç kez oturum açtım.

$ who | wc -l
3
$ users | wc -w
3

Gerçek kullanıcı sayısını elde etmekle birlikte bu kopyaları filtrelemek oldukça kolaydır.

$ users | tr ' ' '\n' | sort -u 
andrew
$ users | tr ' ' '\n' | sort -u | wc -l
1

3

İşte tink'in büyük awk postunun bir bash versiyonu :

set $(users)
declare -A user
for u ; do ((user[$u]++)) ; done
for key in "${!user[@]}" ; do echo "$key: ${user[$key]}" ; done | column -t | sort -nk 2

Tamam, biraz daha uzun, ama bunu bulmaya değdi ... :).

Test sırasında bir sonraki denemeden önce yapın:

shift $#                # clear positional parameters
unset user              # remove associative array variable

2

şu anda giriş yapmış olan kullanıcı sayısı:

who |cut -c 1-9 |sort -u |wc -l

hesap adlarıyla yukarıdaki buta:

who |cut -c 1-9 |sort -u |tee /dev/tty |wc -l

1
who | cut --delimiter=' ' -f 1 | sort -u | wc -l

Listeyi yazdıran, kesen ilk satır hariç her şeyi kaldırır, sıralar -u sıralar ve kopyaları kaldırır ve wc -l satırları sayar. Ubuntu / bash'da benim için iyi çalışıyor :)


1

Sadece w( /usr/bin/wRed Hat tabanlı sistemimde) kullanabilir veya uptimegiriş yapmış gerçek kullanıcıların sayısını gösterebilirler.

ağırlık:

                              v
 22:40:38 up 3 days, 22 min,  1 user,  load average: 0.02, 0.01, 0.00
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
manuel   pts/0    pc-manuel        09:35    0.00s  0.07s  0.00s /usr/bin/screen -xRR

çalışma süresi:

                              v
 22:39:18 up 3 days, 21 min,  1 user,  load average: 0.08, 0.02, 0.01

1

Ve sadece bir boru kullanan bir yöntem ...

users | awk '{for(i=1;i<=NF;i++){a[$i]++}}END{for(i in a){print i"\t"a[i]}}'

:}



0

TOP adlı unix için ücretsiz aracı her zaman indirebilirsiniz. Kullanıcıların bir listesini ve aynı zamanda sistemde ne yaptıklarını üretir ve çalıştığı sürece güncellemeye devam eder.

Http://www.unixtop.org/ adresinde bulunur.

Birçok komut satırı anahtarına sahiptir, böylece aradığınız bilgileri ayıklamanız gerekir.


Paketlerden yüklemek için bir seçeneğimiz olmasa da, varsayılan olarak üst içermeyen bir linux dağıtımı bulamadım.
theotherreceive

0
who | cut -d ' ' -f1 | uniq | wc -l

2
Bu, Kim'in cevabının küçük bir varyasyonu gibi görünüyor ve hiçbir açıklama içermiyor. Bu cevaba bir yorum olarak daha uygun olabilir (bu biraz daha fazla tekrar gerektirir). Amaç, her cevabın daha önce katılmış olandan oldukça farklı bir çözüm sunmasıdır.
fixer1234

-2

Uygun bir sırayla oturum açmış ve oturumu kapatmış toplam kullanıcı sayısını arıyorsanız, çalıştırılacak en iyi komut

cat -n /etc/passwd

2
Hayır, bu komutun yaptığı şey bu değil. cat -ndosyadaki tüm satırları yazdırır, her birini numaralandırır. Bu sistemde mevcut kullanıcıların bir listesini alırsınız, ancak çok fazla giriş bilgisi alamazsınız.
cpast
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.