grep
사용자 목록(명령줄에서 제공)과 사용자가 로그인/작업 중이거나 로그인하지 않은 경우 해당 출력을 어떻게 얻을 수 있습니까?
답변1
perl -le 'print while $_=getpwent' | sort
사용자 이름 목록이 제공됩니다.
ps -eo user= | sort -u
해당 uid가 하나 이상의 실행 중인 프로세스의 유효 사용자 ID인 사용자 이름 목록이 제공됩니다.
who | awk '{print $1}' | sort -u
현재 사용자가 나열됩니다.로그인
printf '%s\n' "$@" | sort -u
스크립트에 인수로 전달된 사용자가 나열됩니다.
이제 이 4개의 목록이 있으므로 이 comm
명령을 사용하여 해당 목록 중 어느 것이 주어진 두 목록에 공통인지, 한 목록에는 표시되고 다른 목록에는 표시되지 않는지 선택할 수 있습니다.
프로세스 교체를 지원하는 셸을 사용하면 임시 파일 생성을 피할 수도 있습니다.
예를 들어:
#! /bin/bash -
comm -12 <(printf '%s\n' "$@" | sort -u) \
<(ps -eo user= | sort -u)
라고 불리는:
./my-script root mythul stephane
3명의 사용자 중 누가 프로세스를 실행하고 있는지 보고합니다(시스템의 사용자 이름과 uid 사이에 일대일 관계가 있다고 가정).