Linux에서 온라인으로 사용자 수를 어떻게 찾을 수 있습니까? 페이지에서 누락 된 사용자를위한

Linux 컴퓨터에 몇 명의 사람들이 로그온했는지 어떻게 알 수 있습니까? ‘users’명령에 로그인 한 모든 사람이 표시되지만 숫자가 필요하다는 것을 알고 있습니다. 매뉴얼 페이지에서 누락 된 사용자를위한 스위치가 있습니까? 나는 grep -c명령 을 사용하려고 생각 했지만 이것이 작동하려면 각 사용자 이름에 동일한 것이 있어야합니다. 더 쉬운 방법이 있습니까?



답변

wc(단어 수) 명령을 찾고 있습니다.

이 시도:

users | wc -w


답변

일반적으로 명령은 ‘사용자’가 아닌 ‘누가’이지만 ‘누가’는 더 많은 정보를 제공합니다. 원래 유닉스 기사 (70 년대 중반)를 되돌아 보면 그 예는 다음과 같습니다.

who | wc -l

‘wc -l’을 사용하면 출력 행 수를 계산 합니다. ‘users’와 ‘who’ 모두에서 작동합니다 . ‘-w’는 사용자 당 하나의 단어가있을 때만 안정적으로 작동합니다 ( ‘users’와 같지만 ‘who’는 아님).

‘grep -c’를 사용하여 줄을 계산할 수 있습니다. 공백이 아닌 사용자 이름에만 관심이 있으므로 다음을 수행 할 수 있습니다.

who | grep -c .

각 줄에는 항상 하나 이상의 문자가 있습니다.


에서 언급 한 바와 같이 의견 에 의해 존 Tusers명령과 다른 who측면의 숫자입니다. 가장 중요한 것은 한 줄에 하나의 이름을 부여하는 대신 한 줄에 여러 개의 이름을 퍼뜨리는 것입니다. 사용자 수가 많아 질 때 발생하는 상황을 테스트하기 위해 충분히 다른 사용자가 로그인 한 시스템이 없습니다. 다른 차이점은 ‘who’는 사용중인 터미널 연결을보고한다는 것입니다. 여러 터미널 창을 열면 단일 사용자에 대해 여러 줄이 표시되지만 ‘사용자’는 로그인 한 사용자를 한 번만 나열하는 것 같습니다.

이 차이의 결과로 ‘ grep -c .‘공식은 ‘users’명령과 작동하지 않습니다. ‘ wc -w‘가 필요합니다.


답변

쉘을 열고 다음을 입력하십시오.

who -q

마지막 줄은 당신에게 카운트를 제공합니다.

편집하다:

(한숨) 나는 그 질문을 오해했다. 다소 무차별 접근 방식은 다음과 같습니다.

고유 한 사용자 이름을 보려면

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

순 사용자 수를 보려면

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


답변

세션 수 또는 실제 사용자 수를 보시겠습니까?

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

그것은 내 랩톱에 있기 때문에 유일한 사용자이지만 3 번 로그온했습니다.

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

실제 사용자 수를 얻기 위해 이러한 중복 항목을 필터링하는 것은 매우 쉽습니다.

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


답변

다음은 tink 의 훌륭한 awk 게시물의 bash 버전입니다 .

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

좋아, 조금 더 길지만 이것을 찾을만한 가치가있었습니다 … :).

테스트하는 동안 다음 시도 전에 수행하십시오.

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


답변

현재 로그인 한 사용자 수 :

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

계정 이름이있는 위의 부타 :

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


답변

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

누가 목록을 인쇄하고 cut은 첫 번째 행을 제외한 모든 것을 제거하고 sort -u sort하여 중복을 제거하고 wc -l이 행을 계산합니다. 우분투 / bash에서 나를 위해 잘 작동합니다 🙂