Linux find 명령어: 파일 검색하기

LinuxBeginner
지금 연습하기

소개

이 실습에서 여러분은 디지털 탐정이 되어 Linux 의 강력한 find 명령어를 사용하는 여정을 시작하게 됩니다. find 명령어는 다양한 조건에 따라 파일과 디렉터리의 위치를 찾는 데 필수적인 도구입니다. 이 모험을 마칠 때쯤이면 여러분은 아무리 복잡한 파일 시스템이라도 손쉽게 탐색할 수 있는 기술을 갖추게 될 것입니다. 이 실습은 초보자를 위해 설계되었으므로 Linux 가 처음이라도 걱정하지 마세요. 각 단계를 차근차근 안내해 드립니다.

이 실습은 학습과 연습을 돕기 위해 단계별 지침을 제공하는 가이드형 실습 (Guided Lab) 입니다. 각 단계를 완료하고 실무 경험을 쌓으려면 지침을 주의 깊게 따르십시오. 과거 데이터에 따르면 이 실습은 완료율 95%초급 수준 실습입니다. 학습자들로부터 100%의 긍정적인 평가를 받았습니다.

find 명령어 기초 다지기

디지털 범죄 현장에서 결정적인 증거를 찾는다고 상상하며 탐정 업무를 시작해 봅시다. 먼저 find 명령어의 기본적인 사용법을 이해해야 합니다.

첫 번째로, 수사 본부로 이동하겠습니다. Linux 에서는 cd 명령어를 사용하여 디렉터리를 변경합니다. 다음 명령어를 입력하고 Enter 키를 누르세요.

cd /home/labex/project

이 명령어는 이번 실습의 작업 디렉터리가 될 /home/labex/project로 이동시켜 줍니다. 현재 위치가 궁금할 때는 언제든지 pwd 명령어를 사용하여 현재 작업 디렉터리를 확인할 수 있습니다.

이제 find 명령어를 사용하여 "clue.txt"라는 이름의 파일을 찾아보겠습니다.

find . -name "clue.txt"

이 명령어의 구성을 살펴봅시다.

  • find: 우리가 사용하는 명령어입니다.
  • .: 현재 디렉터리부터 검색을 시작하라는 의미입니다.
  • -name "clue.txt": 정확히 "clue.txt"라는 이름을 가진 파일을 찾으라는 조건입니다.

명령어를 실행하면 다음과 같은 결과가 나타날 것입니다.

./evidence/clue.txt

이 결과는 현재 위치의 "evidence" 하위 디렉터리에서 "clue.txt" 파일을 찾았음을 알려줍니다. 경로 시작 부분의 ./는 "현재 디렉터리부터 시작함"을 의미합니다.

만약 아무런 출력 결과가 나오지 않더라도 걱정하지 마세요! 그것은 현재 디렉터리나 그 하위 디렉터리에 해당 파일이 없다는 뜻일 뿐입니다. 실제 수사라면 다른 곳에서 단서를 찾아야 한다는 신호겠죠. 다른 디렉터리에서 검색을 시도하거나 파일 이름을 정확히 입력했는지 확인해 볼 수 있습니다.

여러 유형의 파일 검색하기

수사가 깊어짐에 따라 여러 종류의 증거 파일을 찾아야 할 때가 있습니다. 이번 단계에서는 와일드카드를 사용하여 서로 다른 확장자를 가진 파일들을 한꺼번에 검색하는 방법을 배워보겠습니다.

find 명령어를 사용하여 .txt 와 .log 확장자를 모두 가진 파일들을 찾아봅시다.

find . -name "*.txt" -o -name "*.log"

조금 더 복잡해진 이 명령어를 분석해 보겠습니다.

  • find .: 이전과 동일하게 현재 디렉터리부터 검색을 시작합니다.
  • -name "*.txt": .txt 로 끝나는 모든 파일을 찾습니다.
  • -o: find 명령어 구문에서 "또는 (OR)"을 의미합니다.
  • -name "*.log": .log 로 끝나는 모든 파일을 찾습니다.

*는 와일드카드 문자로, 글자 수에 상관없이 모든 문자와 일치합니다. 따라서 *.txt는 파일 이름이 무엇이든 .txt 로 끝나기만 하면 모두 찾아냅니다. 정확한 파일 이름은 모르지만 확장자를 알고 있을 때 매우 유용합니다.

명령어를 실행하면 다음과 유사한 결과가 출력됩니다.

./evidence/clue.txt
./evidence/new_lead.txt
./logs/system.log
./logs/recent_activity.log
./notes/interview.txt

이 출력은 현재 디렉터리와 하위 디렉터리에 있는 모든 .txt 및 .log 파일을 보여줍니다. 각 줄은 검색 조건에 부합하는 파일의 경로입니다.

출력되는 파일 목록이 위와 조금 다르더라도 괜찮습니다. 중요한 점은 결과에 .txt 와 .log 파일이 모두 포함되어 있다는 것입니다. 실제 파일 목록은 환경 설정에 따라 다를 수 있습니다.

파일 크기로 검색하기

다음 단계에서는 중요한 데이터를 포함하고 있을 가능성이 높은 대용량 파일을 찾아보겠습니다. 수사 과정에서 대용량 파일은 데이터베이스, 압축 파일 또는 실질적인 증거 덩어리일 수 있습니다.

1MB(메가바이트) 보다 큰 모든 파일을 찾아봅시다.

find . -type f -size +1M

명령어의 의미는 다음과 같습니다.

  • find .: 익숙한 시작 지점입니다.
  • -type f: 디렉터리나 특수 파일이 아닌 '일반 파일'만 찾도록 지정합니다.
  • -size +1M: 크기가 1MB 보다 큰 파일을 찾도록 지정합니다.

1M 앞의 +는 "~보다 큰"을 의미합니다. 정확히 1MB 인 파일을 찾으려면 1M을, 1MB 보다 작은 파일을 찾으려면 -1M을 사용합니다. 또한 킬로바이트는 k, 기가바이트는 G와 같은 단위도 사용할 수 있습니다.

실행 결과는 다음과 같이 나타날 수 있습니다.

./evidence/large_file.dat

이 결과는 수사 디렉터리에 1MB 보다 큰 파일이 하나 있음을 보여줍니다. .dat 확장자는 종종 데이터 파일을 의미하며, 우리 수사에서 중요한 단서가 될 수 있습니다.

결과가 나오지 않아도 당황하지 마세요. 현재 디렉터리 범위 내에 1MB 를 초과하는 파일이 없다는 뜻입니다. 실제 상황이라면 크기 파라미터를 조정하거나 다른 디렉터리를 조사해야 할 것입니다.

최근에 수정된 파일 찾기

탐정으로서 우리는 종종 최근의 활동에 주목합니다. 이번 단계에서는 최근에 수정된 파일을 찾는 방법을 배워보겠습니다. 이는 사건의 최신 진행 상황에 대한 단서를 제공할 수 있습니다.

최근 24 시간 이내에 수정된 파일을 찾아봅시다.

find . -type f -mtime -1

명령어 분석:

  • find .-type f는 이미 배운 내용입니다.
  • -mtime -1: 새로운 옵션입니다. 수정된 지 1 일 (24 시간) 미만인 파일을 찾으라는 의미입니다.

-mtime 옵션은 24 시간 단위로 시간을 측정합니다. -1은 "1 일 이내"를 의미합니다. 정확히 1 일 전에 수정된 파일은 -mtime 1, 1 일보다 더 오래전에 수정된 파일은 -mtime +1을 사용합니다.

실행하면 다음과 같은 결과가 보일 것입니다.

./evidence/clue.txt
./evidence/large_file.dat
./evidence/new_lead.txt
./logs/system.log
./logs/recent_activity.log
./notes/interview.txt

이 목록은 지난 24 시간 동안 변경된 파일들입니다. 수사에서 가장 따끈따끈한 단서가 될 수 있습니다! 각 파일에는 수사에 결정적인 최신 정보가 담겨 있을지도 모릅니다.

출력이 없다면 지난 24 시간 동안 수정된 파일이 없다는 뜻입니다. 실제 수사라면 활동이 없었던 기간이거나, 검색 범위를 더 넓혀야 함을 시사합니다.

찾은 파일에 명령어 실행하기

이제 탐정 기술과 포렌식 분석을 결합해 보겠습니다. find 명령어로 모든 .txt 파일을 찾은 다음, cat 명령어를 사용하여 그 내용을 즉시 확인해 보겠습니다. 이는 발견한 모든 문서의 내용을 빠르게 훑어보며 단서를 찾는 것과 같습니다.

사용할 명령어는 다음과 같습니다.

find . -name "*.txt" -exec cat {} \;

명령어가 복잡해 보이니 하나씩 뜯어봅시다.

  • find . -name "*.txt": 이미 배운 대로 모든 .txt 파일을 찾습니다.
  • -exec cat {} \;: 이 부분이 핵심입니다. 찾은 각 파일에 대해 cat 명령어를 실행하라는 의미입니다.
    • cat: 파일의 내용을 화면에 출력하는 명령어입니다.
    • {}: find가 찾아낸 파일 이름이 들어갈 자리 표시자 (placeholder) 입니다.
    • \;: -exec 옵션에 전달되는 명령어의 끝을 알리는 표시입니다.

명령어를 실행하면 모든 .txt 파일의 내용이 다음과 같이 연달아 출력될 것입니다.

The suspect was last seen wearing a red hat.
New lead: Check the security camera footage from the back alley.
Witness reported hearing a loud noise at approximately 10 PM.

보이는 각 텍스트 블록은 서로 다른 .txt 파일의 내용입니다. 이 명령어를 사용하면 파일을 하나하나 일일이 열어보지 않고도 모든 텍스트 파일의 내용을 신속하게 검토할 수 있습니다.

마지막에 \;를 사용하는 이유는 find에게 -exec로 실행할 명령이 어디서 끝나는지 알려주기 위해서입니다. 이것이 없으면 find는 뒤에 오는 다른 옵션들과 실행할 명령어를 구분하지 못합니다.

요약

축하합니다, 탐정님! 이번 실습을 통해 Linux 도구 상자의 강력한 도구인 find 명령어를 능숙하게 다룰 수 있게 되었습니다. 여러분이 배운 내용은 다음과 같습니다.

  1. 이름으로 파일 검색하기
  2. 와일드카드를 사용하여 여러 파일 유형 찾기
  3. 크기를 기준으로 파일 위치 찾기
  4. 최근에 수정된 파일 식별하기
  5. 찾은 파일에 대해 즉시 명령어 실행하기

이 기술들은 파일 관리, 시스템 문제 해결, 그리고 디지털 미스터리를 해결하는 데 큰 도움이 될 것입니다!

이번 실습에서 다루지 않았지만 유용한 find 명령어의 추가 옵션들은 다음과 같습니다.

  • -user: 특정 사용자가 소유한 파일 찾기
  • -group: 특정 그룹에 속한 파일 찾기
  • -perm: 특정 권한을 가진 파일 찾기
  • -maxdepth: 디렉터리 탐색 깊이 제한하기
  • -mindepth: 최소 탐색 깊이 지정하기
  • -empty: 비어 있는 파일이나 디렉터리 찾기
  • -newer: 특정 파일보다 더 최근에 생성/수정된 파일 찾기

기억하세요, 연습만이 살길입니다. 다양한 디렉터리에서 이 명령어들을 실험해 보며 익숙해지시기 바랍니다. find를 더 많이 사용할수록 복잡한 파일 시스템에서 원하는 것을 정확히 찾아내는 강력함과 유연함을 실감하게 될 것입니다.