필수 커맨드라인 툴(command line tool)

Chooooo·2025년 2월 9일
0

리눅스 정리

목록 보기
8/10

command line tool

Command Line Tool은 GUI없이 텍스트 명령어만으로 시스템을 제어할 수 있게 해주는 프로그램. 즉, 쉘로 리눅스를 다룰 때 사용하는 도구이다.

가장 기본적이고 필수적인 Command Line Tool을 목적과 기능에 따라 분류해서 공부하자.

검색과 분석 도구 : grep과 find

grepfind리눅스에서 강력한 검색 도구.
grep은 파일 내용에서 특정 패턴을 찾고, find는 파일 시스템에서 파일을 찾는다.

grep(Global Regular Expression Print)은 정규 표현식을 지원하여 복잡한 텍스트 패턴도 찾을 수 있으며, 또한 파일 내부의 특정 문자열을 찾거나 다른 명령어의 출력에서 특정 줄을 필터링하는 데 사용할 수 있다.

grep

기본 형식 : grep [옵션] 검색패턴 [파일명]
파일명 부분을 입력하지 않으면 표준 입력으로 받은 데이터를 검색한다. 그래서 파이프라인과 결합해 자주 사용한다.

ex : cat 파일 | grep [옵션] 검색패턴
cat 명령어의 출력 결과를 grep으로 검색하는 형식

주요 사용 옵션

옵션설명
-i대소문자를 구분하지 않고 검색
-v패턴과 일치하지 않는 행을 출력
-n검색 결과와 함께 행 번호를 출력
-l패턴이 포함된 파일의 이름만 출력
-c패턴이 일치하는 행의 개수만 출력
-r하위 디렉토리를 포함한 모든 파일에서 검색
-w단어 단위로 패턴을 검색
-A n일치하는 행과 그 이후 n개의 행을 출력
-B n일치하는 행과 그 이전 n개의 행을 출력
-C n일치하는 행과 그 전후 n개의 행을 출력

실습

  1. 기본 검색
# example.txt 파일에서 "error" 문자열 검색
grep "error" example.txt

# 현재 디렉토리의 모든 .log 파일에서 "error" 검색
grep "error" *.log
  1. 대소문자 무시 검색
# "Error", "ERROR", "error" 모두 검색
grep -i "error" example.txt
  1. 행 번호와 함께 표시
# 각 검색 결과의 행 번호도 함께 출력
grep -n "error" example.txt
  1. 재귀적 검색
# 현재 디렉토리와 하위 모든 디렉토리에서 "error" 검색
grep -r "error" .
  1. 전후 컨텍스트 표시
# 에러 발생 행과 그 전후 2줄씩 함께 출력
grep -C 2 "error" example.txt
  1. 여러 조건 조합
# 대소문자 무시하고, 행 번호와 함께, 에러 관련 내용이 아닌 행 검색
grep -inv "error" example.txt

grep은 정규 표현식도 지원하므로, 더 복잡한 패턴 검색도 가능

# 숫자로 시작하는 행 검색
grep "^[0-9]" example.txt

# 이메일 주소 형식 검색
grep "[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}" example.txt

실제 작업에서는 파이프라인과 함께 자주 사용된다.
파이프라인(|)은 첫번째 명령어의 출력을 두 번째 명령어의 입력으로 전달한다.
-> grep과 함께 사용할 때 특정 명령어의 출력 결과에서 관심있는 부분만 필터링할 수 있게 해준다.

# 프로세스 목록에서 특정 프로세스 찾기
ps aux | grep "nginx"

# 이 명령어는 다음과 같이 작동:
# 1. ps aux가 모든 실행 중인 프로세스 목록을 출력
# 2. 이 출력이 grep "nginx"로 전달됨
# 3. grep이 전달받은 목록에서 "nginx"가 포함된 행만 찾아서 출력

다른 예시들

# 네트워크 연결 상태에서 특정 포트 찾기
netstat -an | grep ":80"

# 시스템 로그에서 에러 메시지만 찾기
dmesg | grep "error"

# 설치된 패키지 목록에서 특정 패키지 찾기
dpkg -l | grep "python"

# 디렉토리 목록에서 특정 파일 찾기
ls -l | grep ".txt"

파이프라인 여러 번 연결도 가능

# 프로세스 목록에서 "python"을 찾고, 그 중에서 "error" 포함된 것을 찾기
ps aux | grep "python" | grep "error"

find

find 명령어는 파일 시스템에서 파일이나 디렉토리를 검색하는 도구.
grep이 파일 내용을 검색한다면 find는 파일 시스템을 탐색하여 파일이나 디렉토리 자체를 찾는다.

기본 형식 : find [검색 시작 위치] [검색 옵션] [동작]

주요 사용 옵션

옵션설명
-name파일 이름으로 검색 (대소문자 구분)
-iname파일 이름으로 검색 (대소문자 무시)
-type파일 유형으로 검색 (f:일반파일, d:디렉토리, l:심볼릭링크)
-size파일 크기로 검색 (+n:초과, -n:미만, n:정확히)
-mtime수정된 시간으로 검색 (일 단위)
-mmin수정된 시간으로 검색 (분 단위)
-perm파일 권한으로 검색
-user소유자로 검색
-empty빈 파일이나 디렉토리 검색
-maxdepth검색할 하위 디렉토리 깊이 제한

실세 사용 예시

  1. 기본적인 파일 검색
# 현재 디렉토리에서 test.txt 파일 찾기
find . -name "test.txt"

# 대소문자 구분 없이 .txt 파일 모두 찾기
find . -iname "*.txt"
  1. 파일 유형으로 검색
# 디렉토리만 찾기
find . -type d

# 일반 파일만 찾기
find . -type f

# 심볼릭 링크 찾기
find . -type l
  1. 파일 크기로 검색
# 100MB보다 큰 파일 찾기
find . -size +100M

# 1KB보다 작은 파일 찾기
find . -size -1k
  1. 시간 기반 검색
# 7일 이내에 수정된 파일 찾기
find . -mtime -7

# 24시간 이내에 수정된 파일 찾기
find . -mmin -1440

find는 검색 결과에 대해 추가 작업을 수행할 수 있는 -exec 옵션도 제공한다.

# 찾은 모든 .tmp 파일 삭제
find . -name "*.tmp" -exec rm {} \;

# 찾은 모든 .txt 파일의 권한 변경
find . -name "*.txt" -exec chmod 644 {} \;

find 명령어의 특별한 점은 정확한 파일의 위치나 이름을 모르더라도 파일의 특성(크기, 수정 시간, 권한 등) 으로 검색이 가능하다는 것.
-> 시스템 관리나 문제 해결 시 매우 유용한 도구이다.

파일과 시스템 정보 분석 : stat, wc, df, du

위 명령어들은 시스템과 파일의 상태를 분석하는 도구들. stat은 파일의 상세한 메타데이터를 보여주고, wc는 파일의 행 수, 단어 수, 바이트 수를 계산한다. df와 du는 디스크 사용량을 분석하는데, df는 전체 디스크 공간 사용현황을, du는 특정 디렉토리나 파일이 차지하는 공간을 보여준다.

stat

stat은 파일시스템의 상세한 정보를 보여주는 도구라고 했다. 파일 크기, 권한, 소유자, 수정 시간 등 모든 메타데이터를 확인할 수 있다.

기본 형식 : stat [옵션] 파일명

stat example.txt

# 출력 예시:
#   File: example.txt
#   Size: 1234      Blocks: 8          IO Block: 4096   regular file
# Access: (0644/-rw-r--r--)  Uid: ( 1000/    user)   Gid: ( 1000/    user)
# Access: 2025-02-09 10:00:00.000000000 +0900
# Modify: 2025-02-09 10:00:00.000000000 +0900
# Change: 2025-02-09 10:00:00.000000000 +0900

wc(word count)

파일의 줄 수, 단어 수, 바이트 수를 계산한다. 특히 테스트 처리나 로그 분석에서 매우 유용

기본 사용법 : wc [옵션] 파일명

# 주요 옵션:
-l : 줄 수만 출력
-w : 단어 수만 출력
-c : 바이트 수만 출력
-m : 문자 수만 출력

디스크 사용량을 분석하는 df, du

df(disk free)는 시스템의 전체 디스크 공간 사용 현황을 보여준다.

df [옵션]

# 가장 많이 사용되는 형태:
df -h  # 사람이 읽기 쉬운 형태로 출력 (GB, MB 등)

# 출력 예시:
# Filesystem      Size  Used  Avail Use% Mounted on
# /dev/sda1       100G   50G    50G  50% /

du(disk usage)는 특정 디렉토리나 파일이 사용하는 디스크 공간을 보여준다.

du [옵션] [경로]

# 자주 사용되는 옵션 조합:
du -sh *  # 현재 디렉토리의 각 항목별 총 사용량
du -h --max-depth=1  # 현재 디렉토리의 직계 하위 항목들의 사용량

위 도구들은 서로 보완적으로 사용. 예를 들어 시스템의 디스크 공간이 부족할 때의 일반적인 분석과정은

  1. df -h로 전체 디스크 사용량 확인
  2. du -sh *로 큰 공간을 차지하는 디렉토리 식별
  3. stat으로 의심되는 파일들의 상세 정보 확인
  4. wc로 로그 파일 등의 크기 분석

파일 처리와 변환 : tar, tr

tar와 tr은 파일을 처리하고 변환하는 도구이다. tar은 여러 파일을 하나의 아카이브로 묶거나 풀 수 있으며, 압축 기능도 지원하다. tr은 문자를 변환하거나 삭제하는 데 사용되며, 텍스트 데이터를 가공할 때 유용하다.

tar

tar은 여러 파일을 하나의 아카이브 파일로 묶거나 반대로 아카이브를 풀 때 사용하는 도구.

  • 다양한 압축 옵션과 함께 사용할 수 있으며, 대용량 데이터를 관리하거나 백업할 때 매우 유용하다. 특히 소스 코드를 .tar.gz등 압축 파일 형태로 공개하는 경우가 많아 반드시 사용법을 알고 있어야 함.

아카이브와 압축은 실제로 서로 다른 개념이다. 아카이브는 여러 파일과 디렉토리를 하나의 파일로 "묶는" 것이다. 이 과정에서는 실제로 파일 크기를 줄이지 않는다. tar명령어의 기본 기능이 바로 이것. 결과물로 .tar 확장자를 가진 파일이 생성된다.

압축은 파일의 실제 크기를 줄이는 과정이다. 데이터를 더 효율적인 형태로 변환하여 저장 공간을 절약하는 것인데, gzip, bzip2와 같은 도구들이 이 작업을 수행한다.

리눅스에서 자주 보는 .tar.gz파일은 이 두 가지 과정을 모두 거친 것.

기본 사용법 : tar [옵션들] [아카이브 파일명] [대상파일들 / 디렉토리들]
여기서 중요한 점은 -f 옵션을 사용할 때의 규칙. -f 옵션은 항상 아카이브 파일명 바로 앞에 위치해야 한다. 즉 옵션들의 마지막에 반드시 f가 와야함.

tar 명령어의 주요 옵션. tar의 옵션들은 크게 기본 동작을 지정하는 옵션과 부가적인 기능을 추가하는 옵션으로 나눌 수 있다.

기본 동작 지정하는 핵심 옵션들

| 옵션 | 설명 |
|------|------|
| -c | 새로운 아카이브 생성 (create) |
| -x | 아카이브에서 파일 추출 (extract) |
| -t | 아카이브 내용 확인 (list) |
| -f | 아카이브 파일 이름 지정 (file) - 거의 항상 사용됨 |

압축 관련 옵션들

| 옵션 | 설명 |
|------|------|
| -z | gzip 압축 사용 (.tar.gz 또는 .tgz) |
| -j | bzip2 압축 사용 (.tar.bz2) |
| -J | xz 압축 사용 (.tar.xz) |

부가 기능 옵션들

| 옵션 | 설명 |
|------|------|
| -v | 진행 상황 자세히 표시 (verbose) |
| -p | 파일 권한 유지 (preserve permissions) |
| -P | 절대 경로 허용 (absolute paths) |
| -r | 기존 아카이브에 파일 추가 (append) |
| -u | 더 새로운 파일만 추가 (update) |
| --exclude | 특정 파일/디렉토리 제외 |

이러한 옵션들은 보통 조합해서 사용한다. 가장 일반적인 사용 예시를 보면

# 가장 흔한 사용법: 파일들을 gzip으로 압축하여 아카이브 생성
tar -czf backup.tar.gz /path/to/files
-> 해당 명령어는 /path/to/files 경로에 있는 모든 파일과 디렉토리를 가져와서 backup.tar.gz라는 압축된 아카이브 파일을 생성한다. 이는 마치 여러 문서를 하나의 폴더에 넣고 그 폴더를 압축하는 것과 같다.

# 아카이브 내용 확인
tar -tvf backup.tar.gz
-> 이 명령어는 backup.tar.gz 파일의 내용을 확인한다. 실행하면 아카이브 안에 있는 모든 파일과 디렉토리의 목록이 표시된다. 파일의 권한,소유자,크기,수정 날짜 등 상세정보도 함께. 압축 파일을 실제로 풀지 않고도 내용을 미리 볼 수 있게 해준다.

# 아카이브 압축 해제
tar -xzf backup.tar.gz
-> backup.tar.gz 파일을 현재 디렉토리에 압축 해제한다. 아카이브 안의 모든 파일과 디렉토리가 원래의 구조대로 복원 

# 특정 디렉토리에 아카이브 압축 해제
tar -xzf backup.tar.gz -C /target/directory
-> 세번째 명령어와 비슷하지만. 압축을 해제할 위치를 직접 지정. -C 옵션 뒤에 오는 경로에 모든 파일이 압축 해제.

# 특정 파일/디렉토리를 제외하고 아카이브 생성
tar -czf backup.tar.gz --exclude='*.tmp' /path/to/files

tr(tanslate)

tr은 문자 단위의 변환과 삭제 수행
기본 형식 : tr [옵션] 집합1 [집합2]
여기서 집합1의 각 문자는 집합2의 대응하는 문자로 변환된다.

tr은 주로 파이프라인과 함께 사용되며, 표준 입력으로부터 데이터를 받아 처리한다.

주요 옵션들

| 옵션 | 설명 |
|------|------|
| -d | 집합1에 지정된 문자들을 삭제 |
| -s | 연속된 중복 문자를 하나로 압축 |
| -c | 집합1에 지정되지 않은 문자들을 처리 |

실제 사용

문자 변환의 기본적인 사용

# 소문자를 대문자로 변환
echo "hello world" | tr 'a-z' 'A-Z'
# 출력: HELLO WORLD

# 숫자를 별표로 변환
echo "phone: 123-456-7890" | tr '0-9' '*'
# 출력: phone: ***-***-****

특정 문자 삭제

# 모든 숫자 삭제
echo "hello123world456" | tr -d '0-9'
# 출력: helloworld

# 모든 공백 문자 삭제
echo "hello   world" | tr -d ' '
# 출력: helloworld

연속된 문자 압축

# 연속된 공백을 하나로 압축
echo "hello     world" | tr -s ' '
# 출력: hello world

# 연속된 줄바꿈을 하나로 압축
cat file.txt | tr -s '\n'

tr은 데이터 정제나 텍스트 형식 변환에서 특히 유용하다. 예를 들어, CSV 파일의 구분자를 변경하거나, 로그 파일에서 불필요한 문자를 제거하는 데 자주 사용된다.

# CSV 파일의 쉼표를 탭으로 변환
cat data.csv | tr ',' '\t' > data.tsv

# 파일에서 모든 제어 문자 제거
cat file.txt | tr -d '[:cntrl:]'
profile
back-end, 지속 성장 가능한 개발자를 향하여

0개의 댓글