Linux 파일 비교: comm 명령어 사용법

LinuxBeginner
지금 연습하기

소개

Linux 환경에서 파일 비교는 시스템 관리자 및 개발자에게 흔한 작업입니다. comm 명령어는 사용자가 정렬된 두 개의 텍스트 파일을 줄 단위로 비교하고, 두 파일 간의 고유한 줄과 공통된 줄을 식별할 수 있는 강력한 도구입니다.

이 랩에서는 comm 명령어를 사용하여 텍스트 파일을 분석하는 방법을 안내합니다. 테스트 파일을 생성하고, 내용을 비교하며, 비교 결과에서 특정 정보를 추출하는 방법을 배우게 됩니다. 이 랩을 마치면 Linux 에서 파일 비교 작업에 이 다재다능한 명령어를 사용하는 방법에 대한 확실한 이해를 갖게 될 것입니다.

이것은 가이드 실험입니다. 학습과 실습을 돕기 위한 단계별 지침을 제공합니다.각 단계를 완료하고 실무 경험을 쌓기 위해 지침을 주의 깊게 따르세요. 과거 데이터에 따르면, 이것은 초급 레벨의 실험이며 완료율은 100%입니다.학습자들로부터 100%의 긍정적인 리뷰율을 받았습니다.

텍스트 파일 준비

comm 명령어를 사용하기 전에, 작업할 샘플 텍스트 파일을 몇 개 생성해야 합니다. 이 단계에서는 일반적인 Linux 명령어 목록을 포함하는 두 개의 텍스트 파일을 생성합니다.

먼저, 파일을 정리할 작업 디렉토리를 생성해 보겠습니다.

mkdir -p ~/project/comm-lab
cd ~/project/comm-lab

이제, Linux 명령어 목록이 포함된 commands1.txt라는 첫 번째 텍스트 파일을 생성해 보겠습니다.

echo -e "ls\ncd\npwd\nmkdir\ntouch\ncomm\nsed\nawk" | sort > commands1.txt

이 명령어는 다음을 수행합니다.

  • echo -e는 백슬래시 이스케이프를 해석하여 텍스트를 출력합니다 (\n은 새 줄을 생성합니다).
  • 명령어 목록은 sort 명령어로 파이프 (|) 되어 항목을 알파벳순으로 정렬합니다.
  • 정렬된 출력은 commands1.txt라는 파일로 리디렉션 (>) 됩니다.

commands2.txt라는 두 번째 텍스트 파일을 약간 다른 명령어 목록으로 생성해 보겠습니다.

echo -e "ls\ncd\npwd\ncomm\ngrep\nfind\nsed" | sort > commands2.txt

파일이 올바르게 생성되었는지 확인하기 위해 cat 명령어를 사용하여 내용을 볼 수 있습니다.

cat commands1.txt

다음 출력이 표시되어야 합니다.

awk
cd
comm
ls
mkdir
pwd
sed
touch

이제 두 번째 파일의 내용을 확인해 보겠습니다.

cat commands2.txt

다음이 표시되어야 합니다.

cd
comm
find
grep
ls
pwd
sed

cd, ls, pwd, comm, sed와 같이 일부 명령어는 두 파일 모두에 나타나고, 다른 명령어는 각 파일에 고유하게 존재합니다. 이 설정은 다음 단계에서 comm 명령어의 다양한 기능을 시연할 수 있도록 해줍니다.

기본 comm 명령어 사용

이제 정렬된 텍스트 파일이 준비되었으므로, comm 명령어의 기본 사용법을 살펴볼 수 있습니다. comm 명령어는 정렬된 두 파일을 줄 단위로 비교하고 세 개의 열을 출력합니다.

  1. 첫 번째 파일에만 있는 줄
  2. 두 번째 파일에만 있는 줄
  3. 두 파일 모두에 공통으로 있는 줄

두 파일을 비교하기 위해 기본 comm 명령어를 실행해 보겠습니다.

cd ~/project/comm-lab
comm commands1.txt commands2.txt

다음과 유사한 출력이 표시되어야 합니다.

awk
  cd
  comm
 find
 grep
  ls
mkdir
  pwd
  sed
touch

출력 결과가 처음에는 혼란스러울 수 있지만, 특정 형식을 따릅니다.

  • 열 1 (줄 시작 부분에 탭 없음): commands1.txt에만 있는 줄 (awk, mkdir, touch)
  • 열 2 (시작 부분에 탭 하나): commands2.txt에만 있는 줄 (find, grep)
  • 열 3 (시작 부분에 탭 두 개): 두 파일 모두에 공통으로 있는 줄 (cd, comm, ls, pwd, sed)

이 기본 출력은 모든 차이점과 유사점을 한 번에 볼 수 있게 해주지만, 탭 형식 때문에 읽기 어려울 수 있습니다. 다음 단계에서는 comm 명령어 옵션을 사용하여 이 출력을 더 유용하게 만드는 방법을 배우겠습니다.

comm 옵션을 사용하여 열 숨기기

comm 명령어의 기본 출력은 열 형식 때문에 읽기 어려울 수 있습니다. 다행히도, comm은 특정 열을 숨기는 옵션을 제공하여 필요한 정보만 쉽게 추출할 수 있도록 합니다.

옵션은 다음과 같습니다.

  • -1: 열 1 (첫 번째 파일에만 있는 줄) 숨기기
  • -2: 열 2 (두 번째 파일에만 있는 줄) 숨기기
  • -3: 열 3 (두 파일 모두에 공통으로 있는 줄) 숨기기

이러한 옵션은 원하는 데이터만 표시하기 위해 결합될 수 있습니다.

첫 번째 파일에만 있는 줄 찾기

첫 번째 파일 (commands1.txt) 에만 있는 줄을 표시하려면, 옵션 -2-3을 사용하여 열 2 와 3 을 숨깁니다.

cd ~/project/comm-lab
comm -23 commands1.txt commands2.txt

출력:

awk
mkdir
touch

이것들은 commands1.txt에만 나타나는 명령어입니다.

두 번째 파일에만 있는 줄 찾기

마찬가지로, 두 번째 파일 (commands2.txt) 에만 있는 줄을 표시하려면, 옵션 -1-3을 사용합니다.

comm -13 commands1.txt commands2.txt

출력:

find
grep

이것들은 commands2.txt에만 나타나는 명령어입니다.

공통 줄 찾기

두 파일 모두에 공통으로 있는 줄을 표시하려면, 옵션 -1-2를 사용합니다.

comm -12 commands1.txt commands2.txt

출력:

cd
comm
ls
pwd
sed

이것들은 두 파일 모두에 나타나는 명령어입니다.

결과를 파일에 저장하기

이러한 결과를 나중에 참조하거나 처리하기 위해 별도의 파일에 저장하는 것이 유용한 경우가 많습니다. 그렇게 해보겠습니다.

comm -23 commands1.txt commands2.txt > unique_to_file1.txt
comm -13 commands1.txt commands2.txt > unique_to_file2.txt
comm -12 commands1.txt commands2.txt > common_lines.txt

이 새로운 파일의 내용을 확인해 보겠습니다.

echo "Contents of unique_to_file1.txt:"
cat unique_to_file1.txt
echo "Contents of unique_to_file2.txt:"
cat unique_to_file2.txt
echo "Contents of common_lines.txt:"
cat common_lines.txt

출력은 이전 명령어에서 본 것처럼 각 파일에 고유한 줄과 공통 줄을 표시합니다.

이러한 기술은 구성 파일을 비교하거나, 파일 버전 간의 차이점을 찾거나, 데이터 세트 간의 공유 요소를 식별하는 데 유용합니다.

comm 명령어 실용 예제

comm 명령어의 기본 사용법을 이해했으므로, 실제 시나리오에서 유용성을 보여주는 몇 가지 실제 예시를 살펴보겠습니다.

예시 1: 새로운 항목 찾기

지난 주와 오늘 두 개의 사용자 목록이 있다고 가정해 보겠습니다. 어떤 사용자가 새로운 사용자인지 (지난 주 이후 추가됨) 식별하려고 합니다.

이 파일들을 만들어 보겠습니다.

cd ~/project/comm-lab
echo -e "user1\nuser2\nuser3\nuser4\nuser5" | sort > users_last_week.txt
echo -e "user1\nuser3\nuser5\nuser6\nuser7\nuser8" | sort > users_today.txt

새로운 사용자 ( users_today.txt에 있지만 users_last_week.txt에는 없는 사용자) 를 찾으려면:

comm -13 users_last_week.txt users_today.txt

출력:

user6
user7
user8

예시 2: 제거된 항목 찾기

동일한 파일을 사용하여, 지난 주 이후 제거된 사용자를 찾아보겠습니다.

comm -23 users_last_week.txt users_today.txt

출력:

user2
user4

예시 3: comm 과 다른 명령어 결합

comm 명령어는 더 복잡한 작업을 위해 다른 명령어와 결합될 수 있습니다. 예를 들어, 원래 파일에 공통으로 있는 명령어가 몇 개인지 세고 싶다면:

comm -12 commands1.txt commands2.txt | wc -l

이것은 공통 줄을 wc -l 명령어에 파이프하여 줄 수를 계산합니다.

출력:

5

이는 두 파일 모두에 공통으로 있는 명령어가 5 개임을 나타냅니다.

예시 4: 정렬되지 않은 파일과 함께 comm 사용하기

comm 명령어는 정렬된 입력 파일을 필요로 합니다. 정렬되지 않은 파일과 함께 사용하려고 하면 잘못된 결과를 얻을 수 있습니다. 이를 시연해 보겠습니다.

echo -e "cat\nls\npwd\ncd" > unsorted1.txt
echo -e "ls\ncat\ngrep\npwd" > unsorted2.txt

comm을 직접 사용하려고 하면:

comm unsorted1.txt unsorted2.txt

파일이 정렬되지 않았기 때문에 출력 결과가 오해를 불러일으킬 수 있습니다. 올바른 접근 방식은 먼저 파일을 정렬하는 것입니다.

comm <(sort unsorted1.txt) <(sort unsorted2.txt)

이것은 프로세스 치환 (process substitution) 을 사용하여 파일을 비교하기 전에 즉석에서 정렬합니다. 올바른 열로 제대로 형식화된 결과를 볼 수 있습니다.

이러한 예시는 변경 사항 추적, 차이점 찾기, 데이터 필터링 등 다양한 시나리오에서 텍스트 파일을 비교하는 comm 명령어의 다재다능함을 보여줍니다.

요약

이 랩에서는 Linux 에서 comm 명령어를 사용하여 텍스트 파일을 비교하고 그 차이점을 식별하는 방법을 배웠습니다. 다음은 수행한 작업에 대한 요약입니다.

  1. 기본 Linux 명령어를 사용하여 비교할 정렬된 텍스트 파일을 생성했습니다.
  2. 기본 comm 명령어를 사용하여 두 파일을 비교하고 세 열 출력 형식을 이해했습니다.
  3. 열 숨김 옵션 (-1, -2, -3) 을 적용하여 특정 정보를 추출했습니다.
    • 첫 번째 파일에만 있는 줄
    • 두 번째 파일에만 있는 줄
    • 두 파일 모두에 공통으로 있는 줄
  4. 비교 결과를 나중에 참조할 수 있도록 별도의 파일에 저장했습니다.
  5. 실제 시나리오에서 comm을 사용하는 실제 예시를 탐구했습니다.
    • 업데이트된 목록에서 새로운 항목 찾기
    • 제거된 항목 식별
    • 더 복잡한 작업을 위해 comm을 다른 명령어와 결합
    • 정렬되지 않은 파일을 적절하게 처리

comm 명령어는 Linux 에서 텍스트 파일 비교를 위한 강력한 도구입니다. 시스템 관리자, 개발자 및 데이터 분석가가 파일 간의 차이점과 유사점을 효율적으로 식별할 수 있도록 하여 구성 관리, 버전 관리 및 데이터 분석과 같은 작업에 필수적입니다.

comm과 해당 옵션을 효과적으로 사용하는 방법을 이해하면 Linux 명령줄 환경에서 텍스트 파일로 작업할 때 생산성이 향상됩니다.