특정 디렉터리에서 파일을 소유한 각 사용자와 그들이 소유한 파일 및 디렉터리 수의 목록을 만듭니다.

특정 디렉터리에서 파일을 소유한 각 사용자와 그들이 소유한 파일 및 디렉터리 수의 목록을 만듭니다.

코드를 이해할 수 없습니다: ls -l /projects/ghosttrail | tail -n +2 | sed 's/\s\s*/ /g' | cut -d ' ' -f 3 | sort | uniq -c. 각 단계에서 무슨 일이 일어나고 있는지 자세히 설명해 줄 수 있는 사람이 있나요? 각 명령을 하나씩 추가하여 직접 수행할 수 있다는 것을 알고 있지만 코드가 작동하지 않으며 후행 +2 매개변수의 의미나 sed 명령을 전달하는 방법 및 수행하지 않는 이유와 같은 몇 가지 사항을 이해할 수 없습니다. 't take cut 명령의 네 번째 열입니다.

원천:https://ryanstutorials.net/linuxtutorial/piping.php

답변1

이전 명령의 출력이 다음 명령의 입력으로 사용되는 파이프라인 단계:

  1. ls -l /projects/ghosttrail디렉터리 내용(점으로 시작하지 않음)과 세부 정보를 나열합니다.

  2. tail -n +2출력은 라인 2에서 시작됩니다(첫 번째 라인 제거). 아니요 +,tail마지막 두 줄(줄 수로 지정 -n, 기본값은 10)이 표시됩니다.

  3. sed 's/\s\s*/ /g'여러 개의 연속 공백을 단일 공백으로 바꿉니다.

  4. cut -d ' ' -f 3세 번째 필드(사용자 이름)를 가져옵니다.

  5. sort | uniq -c고유한 행을 정렬하고 계산합니다. 이는 에 설명된 대로 인접하지 않으면 중복 행이 감지되지 않기 sort때문에 사용됩니다.uniqman uniq.

GNU를 사용하여 동일한 결과를 얻는 또 다른 방법find:

find . -maxdepth 1 -not -name '.*' -printf '%u\n' | sort | uniq

find-printf '%u\n'작업 디렉터리에 사용자 이름을 나열합니다(옵션). -maxdepth 1하위 디렉터리 검색을 방지합니다. -not -name '.*'도트 파일은 포함되지 않습니다. sort | uniq원래 예제와 동일한 목적으로 사용됩니다.

관련 정보