![각 사용자/그룹 조합에 대해 얼마나 많은 파일이 있는지 계산하는 방법은 무엇입니까?](https://linux55.com/image/82070/%EA%B0%81%20%EC%82%AC%EC%9A%A9%EC%9E%90%2F%EA%B7%B8%EB%A3%B9%20%EC%A1%B0%ED%95%A9%EC%97%90%20%EB%8C%80%ED%95%B4%20%EC%96%BC%EB%A7%88%EB%82%98%20%EB%A7%8E%EC%9D%80%20%ED%8C%8C%EC%9D%BC%EC%9D%B4%20%EC%9E%88%EB%8A%94%EC%A7%80%20%EA%B3%84%EC%82%B0%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
각 사용자/그룹 조합에 대해 얼마나 많은 파일이 있는지 계산하는 방법은 무엇입니까? 모든 디렉토리 트리 /etc, /usr 및 /var에 존재하는 모든 사용자/그룹 조합에 대해 이 작업을 수행해야 합니다.
답변1
find . -type f -printf %u:%g\\n | awk '{usergroup[$0]++}; END {for(key in usergroup) printf "%-20s %d\n",key,usergroup[key]}'
hl:hauke 401
hl:1003 10
root:root 1
find
각 파일에 대해 이와 같은 줄을 인쇄합니다 username:groupname
.
awk
발생 횟수를 계산하려면 연관 배열을 사용하세요. 각 행에 대해 행 내용으로 명명된 변수가 증가됩니다.
마지막 줄을 읽은 후 awk
배열의 키와 값을 인쇄합니다.
답변2
/etc /usr /var; do (find $i -> %u:%g\n" 2> /dev/null) |
산출:
2 /etc -> root:dip 1 /etc -> root:fuse 7 /etc -> root:lp 2441 /etc -> root:root 2 /etc -> root:shadow ...
원하는 디렉토리(/etc, /usr 및 var)를 반복합니다. find 명령을 사용하여 디렉토리의 모든 파일을 찾고 printf를 사용하여 디렉토리와 사용자 및 그룹을 표시하고 오류를 /dev/null로 리디렉션했습니다. 결과를 정렬한 다음 고유한 카운트를 수행하여 숫자와 고유한 문자열을 출력합니다.