alt

1012\

2026년 10월 26일 공유

리눅스 텍스트 처리와 파일 관리 기초

개요

  • 콘텐츠 유형: 강의
  • 리눅스 서버 관리에서는 설정과 상태 정보가 텍스트 파일에 많이 저장된다. 여러 서버를 관리하거나 보안 점검을 자동화할 때는 명령어와 스크립트를 활용해 파일을 일괄적으로 확인한다.
  • 강의에서는 텍스트 파일 조회·검색·정렬 명령과 파일 시간 정보, 셸의 특수문자 및 인용부호를 다뤘다.

핵심 개념

  • 파일 조회: cat, head, tail, less
  • 패턴 검색: grep 및 정규표현식
  • 파일 정보 확인: touch, stat
  • 텍스트 집계와 정렬: wc, sort
  • 셸 특수문자: 와일드카드, 따옴표, 변수 확장, 명령 치환

상세 노트

1. 텍스트 파일 조회

  • cat: 파일 전체를 출력한다.
  • head: 파일 앞부분을 출력한다.
  • tail: 파일 뒷부분을 출력한다.
  • less: 파일을 한 화면씩 살펴본다.
head -n 10 file.txt # 처음 10줄
tail -n 10 file.txt # 마지막 10줄
tail -n +11 file.txt # 11번째 줄부터 끝까지
head와 tail은 줄 범위를 지정해 필요한 부분만 확인할 수 있다. 실무에서는 로그나 설정 파일의 일부를 확인할 때 자주 사용한다.

2. grep 검색과 옵션

grep은 파일에서 지정한 패턴이 포함된 줄을 찾아 출력한다. 기본적으로 줄 단위로 검색한다.
grep 'Linux' file.txt
주요 옵션:
  • -c: 패턴이 일치하는 줄 수를 출력한다. 한 줄에 패턴이 여러 번 있어도 한 줄로 센다.
  • -v: 패턴이 없는 줄을 출력한다.
  • -i: 대소문자를 구분하지 않는다.
  • -n: 결과에 줄 번호를 표시한다.
  • -A N: 일치한 줄과 그 뒤의 N개 줄을 함께 출력한다.
  • -h: 여러 파일 검색 결과에서 파일명 표시를 생략한다.
  • -E: 확장 정규표현식을 사용한다.
grep -c 'Linux' file.txt
grep -v '^#' config.txt # 주석으로 시작하지 않는 줄 확인
grep -i 'money' file.txt
grep -n 'Linux' file.txt
grep -A 3 'coffee' file.txt
grep -h 'Linux' *.txt
grep -E 'good|coffee' a.txt
grep -c는 패턴이 등장한 횟수가 아니라 일치하는 줄의 개수를 센다. 패턴이 포함된 실제 항목 수를 세려는 경우에는 목적에 맞는 별도 처리가 필요하다.

3. 정규표현식 기초

정규표현식은 검색 조건을 세밀하게 표현하는 방법이다.
  • [abc]: a, b, c 중 한 문자가 있는 경우
  • [0-9]: 숫자 한 자리
  • [^abc]: a, b, c가 아닌 문자 한 자리
  • ^pattern: 줄의 시작에 있는 패턴
  • pattern$: 줄의 끝에 있는 패턴
  • .: 임의의 한 문자
  • *: 바로 앞 표현이 0회 이상 반복되는 경우
  • -E와 |: 여러 패턴 중 하나와 일치시킨다.
grep '[0-9]' file.txt
grep -E 'good|coffee' a.txt
와일드카드와 정규표현식의 기호는 맥락에 따라 의미가 다르다. 예를 들어 셸의 *는 파일명 패턴에 사용되지만, grep의 정규표현식에서 *는 앞 표현의 반복을 뜻한다.

4. 파일 시간과 touch

  • touch file: 파일이 있으면 수정 시간(mtime)을 현재 시각으로 갱신하고, 없으면 빈 파일을 만든다.
  • stat file: 접근 시간(access time), 수정 시간(mtime), 상태 변경 시간(ctime) 등 파일 정보를 확인한다.
  • mtime은 파일 내용의 수정 시각이며, touch 등으로 변경할 수 있다.
  • ctime은 파일 내용 자체가 아니라 권한·소유자 등 메타데이터의 변경 시각을 나타낸다. 임의로 과거 시각으로 설정할 수 없으며, 보안 점검에서 중요한 단서가 될 수 있다.
따라서 파일의 mtime만으로 변경 여부를 단정하지 말고, 점검 목적에 따라 ctime 등 다른 정보도 함께 확인해야 한다.

5. 셸의 와일드카드와 인용부호

  • 셸에서 ?는 문자 하나, *는 임의의 문자열을 나타내는 파일명 와일드카드다.
  • 작은따옴표('...')는 내부 내용을 대부분 그대로 전달해 변수·명령 치환을 막는다.
  • 큰따옴표("...")는 공백을 묶으면서도 변수와 명령 치환을 허용한다.
  • 백슬래시(\)는 뒤따르는 특수문자의 기능을 제한할 때 사용한다.
ls A? # A 다음에 문자 하나가 오는 이름
ls A* # A로 시작하는 이름
echo '$USER' # $USER를 문자 그대로 출력
echo "$USER" # 변수 USER의 값 출력

6. 변수와 명령 치환

  • 셸 변수는 name=value 형식으로 설정한다. 등호 앞뒤에는 공백을 두지 않는다.
  • $name은 변수의 값을 참조한다.
  • echo는 뒤에 전달된 내용을 출력한다.
  • 명령 치환은 명령의 실행 결과를 다른 명령의 인수처럼 사용할 때 쓴다. 현대적인 표기는 $(...)이다.
user="example"
echo "$user"
ls -l "$(which passwd)"

7. wc: 줄·단어·문자 수 집계

wc는 파일의 줄 수, 단어 수, 문자 또는 바이트 수를 집계한다.
wc file.txt
wc -l file.txt # 줄 수
명령 결과를 파이프로 전달해 항목 수를 세는 방식도 활용할 수 있다.
some-command | wc -l

8. sort: 줄 정렬

sort는 기본적으로 파일 내용을 정렬해 출력하며, 별도 저장하지 않으면 원본 파일은 바뀌지 않는다.
  • -r: 역순 정렬
  • -n: 숫자값 기준 정렬
  • -k N: N번째 필드 기준 정렬
  • -t '문자': 필드 구분자 지정
sort file.txt
sort -r file.txt
sort -n numbers.txt
sort -t ':' -k 3 -n /etc/passwd
숫자를 기본 문자 순서로 정렬하면 100이 99보다 먼저 나올 수 있으므로 숫자값 기준 정렬에는 -n을 사용한다. /etc/passwd처럼 콜론으로 필드를 구분하는 파일은 -t ':'로 구분자를 지정할 수 있다.
보안 점검에서는 /etc/passwd의 UID 필드를 숫자 기준으로 정렬해 UID가 0인 계정이 있는지 확인할 수 있다. UID 0은 슈퍼유저 권한을 의미하므로, 예상치 않은 UID 0 계정은 점검 대상이다.
공개 노트 모두 보기