Làm cách nào tôi có thể tìm thấy số lượng người dùng trực tuyến trong Linux?


10

Làm cách nào để biết có bao nhiêu người đã đăng nhập vào máy Linux? Tôi biết lệnh 'người dùng' hiển thị tất cả những người đã đăng nhập nhưng tôi cần một số. Có một công tắc cho người dùng mà tôi đang thiếu trong trang man không? Tôi đã nghĩ đến việc sử dụng grep -clệnh, nhưng phải có một cái gì đó giống nhau trong mỗi tên người dùng để làm việc này. Có cách nào dễ hơn không?

Câu trả lời:


15

Bạn đang tìm kiếm lệnh wc(đếm từ).

Thử cái này xem sao:

users | wc -w

lưu ý rằng phương pháp này (một giải pháp who / w) chỉ hiển thị người dùng đã đăng nhập, không nhất thiết phải là người dùng hoạt động (tức là người dùng bắt đầu một quy trình và sau đó đăng xuất để lại quá trình chạy phía sau). Chỉ để cho một cái đầu lên về sự khác biệt.
Estani

18

Về mặt kinh điển, lệnh là 'ai' chứ không phải 'người dùng', nhưng 'ai' cung cấp cho bạn nhiều thông tin hơn. Nhìn lại các bài viết Unix gốc (giữa những năm 70), ví dụ sẽ là:

who | wc -l

Sử dụng 'wc -l' đếm các dòng đầu ra - nó hoạt động với cả 'người dùng' và 'ai'. Sử dụng '-w' chỉ hoạt động đáng tin cậy khi có một từ cho mỗi người dùng (như với 'người dùng' chứ không phải với 'ai').

Bạn có thể sử dụng 'grep -c' để đếm các dòng. Vì bạn chỉ quan tâm đến tên người dùng không trống, bạn có thể làm:

who | grep -c .

Luôn có ít nhất một ký tự trên mỗi dòng.


Như đã lưu ý trong các bình luận của John T , userslệnh này khác với whomột số khía cạnh. Điều quan trọng nhất là thay vì đặt một tên cho mỗi dòng, nó sẽ phân tán nhiều tên trên mỗi dòng - Tôi không có một máy có đủ người dùng khác nhau đăng nhập để kiểm tra xem điều gì xảy ra khi số lượng người dùng lớn. Sự khác biệt khác là 'ai' báo cáo về các kết nối đầu cuối đang sử dụng. Khi nhiều cửa sổ đầu cuối mở, nó sẽ hiển thị nhiều dòng cho một người dùng, trong khi 'người dùng dường như liệt kê một người dùng đã đăng nhập chỉ một lần.

Do hậu quả của sự khác biệt này, grep -c .công thức '' sẽ không hoạt động với lệnh 'người dùng'; ' wc -w' là cần thiết.


nit nit nhỏ - lệnh người dùng không in 1 dòng trên mỗi người dùng, nó chỉ in tuần tự id, vì vậy grep -c. sẽ không hoạt động trong trường hợp này. Suy nghĩ thông minh mặc dù.
John T

điều này cũng có nghĩa là wc -l sẽ không hoạt động với lệnh người dùng, như được hiển thị ở đây: i26.tinypic.com/4pw0vd.png
John T

@ John T: oh - tốt, được chụp màn hình, bạn đã đúng. Tôi đã kiểm tra 'người dùng' trên MacOS X - nhưng chỉ với một người dùng đã đăng nhập. Khi tôi kiểm tra lại với người dùng thứ hai đã đăng nhập, tôi thấy hành vi 'tất cả trên một dòng'.
Jonathan Leffler

1
để mô phỏng nhiều người dùng hơn, bạn có thể SSH vào hộp riêng của mình :)
John T

Cảm ơn bạn vì thông tin có giá trị này, mặc dù tôi muốn gắn bó với lệnh "người dùng". Cũng nâng cao bạn, cảm ơn.

7

Mở một vỏ và gõ:

who -q

Dòng cuối cùng sẽ cung cấp cho bạn một số lượng.

BIÊN TẬP:

(thở dài) Tôi hiểu nhầm câu hỏi. Đây là một cách tiếp cận có phần vũ phu:

Để xem tên người dùng duy nhất:

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

Để xem số lượng người dùng duy nhất:

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

tính tất cả thông tin đăng nhập của cùng một người dùng trong tổng số.
hayalci

kiểm tra chỉnh sửa lại, tôi nghĩ bạn sẽ thấy rằng câu trả lời mới giải quyết điều đó.
Avery Payne

Điều này vẫn không hoạt động, uniq chỉ loại bỏ các dòng liên tiếp trùng lặp, bạn cần sắp xếp đầu ra của ai trước.
thứ

đó là những gì tôi nhận được khi đăng câu trả lời lúc 1 giờ sáng. (thở dài) cố định.
Avery Payne

3

Bạn có muốn xem số lượng phiên, hoặc số lượng người dùng thực tế ?

$ 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)

Đó là trên máy tính xách tay của tôi, vì vậy tôi là người dùng duy nhất, nhưng tôi đã đăng nhập ba lần.

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

Mặc dù khá dễ dàng để lọc ra các bản sao này để có được số lượng người dùng thực tế.

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

3

Đây là một phiên bản bash của bài đăng tuyệt vời của tink :

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

Ok, nó dài hơn một chút, nhưng đáng để tìm cái này ... :).

Trong khi thử nghiệm, hãy thực hiện trước lần thử tiếp theo:

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

2

số người dùng hiện đang đăng nhập:

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

buta ở trên với tên tài khoản của họ:

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

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

Ai in ra danh sách, cắt bỏ mọi thứ trừ hàng đầu tiên, sắp xếp -u sắp xếp nó và loại bỏ các bản sao và wc -l đếm các dòng. Hoạt động tốt với tôi trên ubfox / bash :)


1

Bạn chỉ có thể sử dụng w( /usr/bin/wtrên hệ thống dựa trên Red Hat của tôi) hoặc uptime, chúng hiển thị số người dùng đã đăng nhập thực tế.

w:

                              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

thời gian hoạt động:

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

1

Và một phương pháp chỉ sử dụng một đường ống ...

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

:}



0

Bạn luôn có thể tải xuống công cụ miễn phí cho unix được gọi là TOP. Nó tạo ra một danh sách người dùng và cả những gì họ đang làm trên hệ thống tại thời điểm đó và sẽ tiếp tục cập nhật miễn là nó đang chạy.

Nó được đặt tại http://www.unixtop.org/

Nó có nhiều công tắc dòng lệnh để bạn có thể trích xuất thông tin bạn đang tìm kiếm.


Tôi vẫn chưa tìm thấy một bản phân phối linux không bao gồm top theo mặc định, chứ chưa nói đến việc không có tùy chọn để cài đặt nó từ các gói.
theotherreceive

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

2
Đây có vẻ như là một biến thể nhỏ của câu trả lời của Kim, và nó không có lời giải thích. Nó có thể thích hợp hơn khi bình luận về câu trả lời đó (đòi hỏi một chút đại diện hơn). Mục đích là mỗi câu trả lời cung cấp một giải pháp hoàn toàn khác với những gì đã được đóng góp.
fixer1234

-2

Nếu bạn đang tìm kiếm tổng số người dùng đăng nhập và đăng xuất theo một trình tự phù hợp, lệnh tốt nhất để chạy là

cat -n /etc/passwd

2
Không, đó không phải là những gì lệnh đó làm. cat -nchỉ cần in tất cả các dòng trong tập tin, đánh số từng cái. Bạn sẽ nhận được một danh sách người dùng tồn tại trên hệ thống đó, nhưng bạn sẽ không nhận được nhiều thông tin đăng nhập.
cpast
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.