어떤 명령줄을 사용해야 할까요?
- 이제 bash를 실행하는 사용자 목록을 알파벳 순서로 인쇄합니다.
- 현재 bash를 실행 중인 사용자 수를 인쇄합니다.
- 현재 bash를 실행 중인 사용자 목록을 저장하고 개수를 인쇄합니다.
답변1
나는 여러분이 아직 Unix에 익숙하지 않거나 이 질문을 하지 않을 것이라고 가정하고 있으므로 이와 같은 명령에 도달하기 위한 여러분의 사고 과정을 포함하겠습니다. 그러면 다음 것을 직접 찾을 수 있습니다.
먼저 실행 중인 프로세스 목록을 가져와야 합니다. 실행 중인 프로세스를 나열하려면 를 사용할 수 있습니다 ps
. 이미 알고 있을 수도 있지만 시작하는 것이 좋습니다. 유사한 명령을 본 적이 있습니다 . 즉 , 연관된 tty가 없는 명령 ps ax
( )도 모두 나열( )하는 것을 의미합니다.a
x
a
이제 모든 프로세스를 선택 하고( ) 실행 파일 이름을 표시하도록 지시해야 합니다 ( c
). 포함할 수도 x
있고 포함하지 않을 수도 있습니다. 모든 상호 작용에는 bash
확실히 연관된 tty가 있지만 쉘 스크립트는 그렇지 않을 수 있으므로 포함 여부는 필요에 따라 다릅니다. 출력을 더 쉽게 구문 분석할 수 있도록 출력을 우리가 관심 있는 값, 즉 사용자 및 명령( o user,command
)으로 제한하는 것도 편리합니다.
이는 다음을 제공합니다:
$ ps aco user,command
root login
root bash
user bash
root bash
user lynx
...
bash
이제 이를 필터링하여 각 사용자에 대한 인스턴스를 찾아야 합니다 . 이렇게 하려면 awk
스크립트를 사용하여 로 파이프하면 됩니다 $2=="bash" { print $1 }
. 이는 "두 번째 열이 "bash"인 경우 첫 번째 열을 인쇄합니다"를 의미합니다.
$ ps aco user,command | awk '$2=="bash" {print $1}'
root
user
root
sort
마지막으로 및 출력을 정렬하고 중복 항목을 제거하려고 합니다 uniq
.
$ ps aco user,command | awk '$2=="bash" {print $1}' | sort | uniq
root
user
네가 원한다면수량"bash"를 실행하는 사용자 수는 출력의 줄 수를 계산할 수 있습니다.
$ ps aco user,command | awk '$2=="bash" {print $1}' | sort | uniq | wc -l
2
그런 다음 출력 리디렉션을 사용하여 이러한 출력을 파일(예: command > file
.