이 파이프라인을 해석하는 방법:
cat /etc/passwd | cut -d : -f 9 2>&1 | sort | uniq 2>&1 | wc -l
나는 유닉스를 스스로 가르치고 있지만 그것을 잘 이해하지 못합니다. 여기서는 무엇을 의미하나요 cut -d : -f 7 2>&1
?
답변1
cut -d : -f 9 2>&1
이는 더 큰 맥락에서 파이프라인의 일부인 별도의 Unix 스타일 명령입니다. 명령 전체에서 "|" 문자로 이를 알 수 있습니다.
Unix 스타일 명령줄은 왼쪽에서 오른쪽으로 읽습니다. 실제 실행 파일(또는 별칭)은 입니다 cut
. 인수는 cut
"-d : -f 9"이고 전체 명령의 stderr 출력은 "2>&1"을 통해 stdout으로 리디렉션됩니다.
Unix 또는 Linux 명령줄 사용자에게 필요한 기술 중 하나는 명령과 해당 구문을 찾는 방법입니다. 따라서 man cut
. 이는 명령을 호출하는 방법에 대한 간단한 매뉴얼인 "man 페이지"를 제공합니다. 표준 입력(명령 전체에서 파이프로 제공 cut
)에 대한 입력을 받습니다. cat
입력은 문자로 구분된 열로 처리되며, 레코드는 행인 각 레코드에 대해 일부 숫자가 포함됩니다. 각 행의 특정 열을 "잘라내고" 해당 열(문자열만)을 표준 출력에 배치하여 sort
예제에 제공합니다.
Unix 스타일 명령은 명령줄의 특정 부분을 표시하기 위해 종종(항상 그런 것은 아님) "-" 문자나 "--" 문자열을 사용합니다. '-d'는 다음 문자를 열 구분 기호로 사용함을 의미합니다(예: ":", 콜론). '-f'는 입력 행에서 열 9를 제거하고 문자열을 표준 출력으로 인쇄한다는 의미입니다.
리디렉션 문구를 출력하는 셸은 2>&1
전체 파이프라인을 설정하여 오류 메시지(일반적으로 파일 설명자 2에 인쇄됨)를 파일 설명자 1(stdout이라고도 함)과 동일한 위치, 즉 sort
.
전반적으로 파이프라인은 공통적인 작업을 수행합니다. 즉, 파일의 고유 문자열 수를 계산합니다. cat /etc/passwd
"/etc/passwd" 파일(사용자 ID 특성을 정의하는 유명한 Unix/Linux/*BSD 파일)의 내용을 표준 출력에 배치합니다.
cut
내 시스템에 존재하지 않는 열 9를 제거했습니다 . "사용자 ID"의 숫자 형식이라고 가정해 보겠습니다. 사용자 ID(또는 기타)의 문자열 표현이 들어오며 sort
옵션이 없습니다. sort
이 경우 입력 행은 어휘적으로 재정렬되지만 중복되거나 고유한 사용자 ID를 따르므로 이는 중요하지 않습니다.
sort
플래그 없이 출력을 으로 보냅니다 uniq
. 표준 입력에 입력된 각 줄을 모니터링합니다. uniq
해당 줄이 이전 줄과 어휘적으로 동일하면 아무 작업도 수행하지 않고, 그렇지 않으면 해당 줄을 인쇄합니다. 입력이 사전순으로 정렬되므로 uniq
고유한 줄만 인쇄됩니다. 중복된 내용은 인쇄되지 않습니다.
wc
입력을 받았습니다 uniq
. "-l" 플래그를 사용하면 wc
수신된 행 수만 인쇄됩니다. 즉, 사용자 ID(또는 /etc/passwd의 9열에 있는 값)에 대한 고유 값의 수입니다.
사소한 모드만 사용하면 이 파이프라인에서 중복된 사용자 ID(또는 무엇이든)를 계산할 수 있습니다. uniq -c
고유한 줄을 인쇄할 뿐만 아니라 연속된 줄의 개수도 인쇄합니다. 이를 파이프로 연결하여 awk '{if ($2 > 1) {print $0}}
개수가 1보다 큰 행(즉, 중복 행)만 가져올 수 있습니다. wc -l
중복된 행만 계산됩니다.