왜 고유 쉘 목록을 얻을 수 없나요? [복사]

왜 고유 쉘 목록을 얻을 수 없나요? [복사]

내 시스템의 고유 쉘 목록을 얻으려고 합니다. 이 명령을 실행할 때:

cat /etc/passwd | cut -d ':' -f 7 | uniq

나는 얻다:

/bin/bash  
/bin/sync  
/sbin/shutdown  
/sbin/halt  
/bin/bash

uniq왜 내가 원하는 대로 되지 않는지 이해가 안 돼요 . 내가 이해하지 못하는 것은 무엇입니까?

이 출력을 가져와 복사본을 만들고 /bin/bash복사본의 줄 중 하나를 다른 줄로 바꾼 다음 diff파일을 시도했지만 출력이 없으므로 숨겨진 문자가 아닌 것 같습니다.

답변1

uniq이는 남성이 일하는 방식 때문입니다 .

참고: "uniq"는 중복 행을 감지하지 않습니다.인접하지 않는 이상. 입력을 먼저 정렬하거나 "uniq" 없이 "sort -u"를 사용할 수 있습니다.

따라서 사용하기가 더 좋으며 다음이 필요하지 않습니다 cat.

$ cut -d ':' -f 7 /etc/passwd | sort -u
/bin/bash
/bin/false
/bin/sync
/usr/sbin/nologin

또는 명령

 awk -F: '{ print $7 | "sort -u" }' /etc/passwd

@작은자郎제안:

awk -F: '!s[$7]++{print $7}' /etc/passwd

답변2

uniq이것이 작동 하려면 정렬된 출력을 전달해야 합니다 .

$ cat /etc/passwd | cut -d ':' -f 7 | sort | uniq
/bin/bash
/bin/sync
/sbin/halt
/sbin/shutdown

관련 정보