[공통] 파일 명령어

HYEONAH SONG·2023년 5월 15일
0

Linux Command

목록 보기
1/2
post-thumbnail

1. 파일 관리 명령

파일 정보 출력 (ls)

# 파일의 상세 정보 출력
$ ls -al 

# 파일들을 생성 시간 순(가장 오래된 파일 부터)으로 출력
$ ls -ltr 

# 파일들을 용량 순(가장 가벼운 파일 부터)으로 출력
$ ls -lhr 

파일/디렉토리 복사 (cp)

# 파일을 복사하여 새로운 파일 생성
$ cp [복사대상] [새파일명]

# 파일을 디렉토리 안에 동일한 파일명으로 복사
$ cp [복사대상] [디렉토리명]

# 디렉토리를 복사하여 새로운 디렉토리 생성
$ cp -r [복사대상 디렉토리명] [새 디렉토리명]

파일/디렉토리 삭제 (rm)

rmdir 명령어와 다르게 디렉토리 삭제 시 안에 파일이 존재해도 삭제 가능합니다.

# 파일 삭제
$ rm [삭제대상 파일명]

# 디렉토리 삭제
$ rm -r [삭제대상 디렉토리명]

# 모든 파일 삭제
$ rm *

파일/디렉토리 이동 (mv)

기본적으로 mv는 파일/디렉토리를 이동하는데 사용하는 명령어입니다.

# 파일을 특정 디렉토리로 이동
$ mv [이동대상 파일명] [디렉토리명]

파일/디렉토리 이름 변경 (mv)

단, 같은 디렉토리 내에서 파일 이동 시 이름 변경 효과가 있습니다.

# 파일 이름 변경
$ mv [변경대상 파일명] [새로운 파일명]

# 디렉토리 이름 변경
$ mv [변경대상 디렉토리명] [새로운 디렉토리명]

2. 파일/디렉토리 정보 조회

빈 파일 생성 & 수정 날짜 변경 (touch)

기본적으로 날짜 변경할 때 쓰이는 명령어로, 최종 수정 기간이 변경됩니다.
단, 존재하지 않는 파일이면, 파일 크기가 0인 빈 새 파일이 생성됩니다.

$ touch [option] filename 
# -a : atime만 변경
# -m : mtime만 변경
# -t : 지정한 타임스탬프 설정
# -r, --reference : 현재시간이 아닌 지정한 파일의 타임스탬프로 변경
# -c, --no-create : 파일은 생성하지 않음.

# filename의 파일을 생성
$ touch filename 

# filename의 시간을 현재시간으로 갱신
$ touch -c filename 

# filename의 시간을 날짜 정보(YYYYMMDDhhmm)로 갱신 
$ touch -t 202110291608 filename

# newfile의 날짜 정보를 oldfile의 날짜 정보와 동일하게 변경
$ touch -r oldfile newfile 

파일/디렉토리 검색 (find)

$ find [경로] [옵션] [표현식]
$ find [PATH] [OPTION] [EXPRESSION]

  [OPTION]
    -P        : 심볼릭 링크를 따라가지 않고, 심볼릭 링크 자체 정보 사용.
    -L        : 심볼릭 링크에 연결된 파일 정보 사용.
    -H        : 심볼릭 링크를 따라가지 않으나, Command Line Argument를 처리할 땐 예외.
    -D        : 디버그 메시지 출력.

  [EXPRESSION]
    -name     : 지정된 문자열 패턴에 해당하는 파일 검색.
    -empty    : 빈 디렉토리 또는 크기가 0인 파일 검색.
    -delete   : 검색된 파일 또는 디렉토리 삭제.
    -exec     : 검색된 파일에 대해 지정된 명령 실행.
    -path     : 지정된 문자열 패턴에 해당하는 경로에서 검색.
    -print    : 검색 결과를 출력. 검색 항목은 newline으로 구분. (기본 값)
    -print0   : 검색 결과를 출력. 검색 항목은 null로 구분.
    -size     : 파일 크기를 사용하여 파일 검색.
    -type     : 지정된 파일 타입에 해당하는 파일 검색.
    -mindepth : 검색을 시작할 하위 디렉토리 최소 깊이 지정.
    -maxdepth : 검색할 하위 디렉토리의 최대 깊이 지정.
    -atime    : 파일 접근(access) 시각을 기준으로 파일 검색.
    -ctime    : 파일 내용 및 속성 변경(change) 시각을 기준으로 파일 검색.
    -mtime    : 파일의 데이터 수정(modify) 시각을 기준으로 파일 검색.

3. 파일 내용(텍스트) 관련 명령어

파일 내용 앞부분 출력 (head)

지정한 파일의 앞부분을 출력합니다.
옵션을 지정하지 않으면 Default 값으로 첫 10줄을 출력합니다 .

$ head [option] file 

# -n,--lines : 출력할 줄 수를 지정
# -c,--byte : 출력할 바이트수를 지정

# 파일의 첫 100 라인을 출력
$ head -n 100 vm_check.sh 

# 파일의 첫 100 바이트까지 출력
$ head -c 100 vm_check.sh 

파일 내용 뒷 부분 출력 (tail)

지정한 파일의 끝 부분을 출력합니다.
옵션을 지정하지 않으면 Default 값을 뒷 10줄을 출력합니다.

$ tail [option] file 

# -n,--lines : 파일의 마지막에서 지정한 줄만큼 출력
# -c,--bytes : 파일의 마지막에서 지정한 바이트 수만큼 출력
# -f,--follow : 새로운 데이터가 들어올때까지 모니터링

# 파일의 뒷 100 라인을 출력
$ tail -n 100 vm_check.sh 

# 파일의 뒷 100 바이트까지 출력
$ tail -c 100 vm_check.sh 

파일 내용 페이지 단위로 출력 (more)

파일의 내용을 페이지 단위로 화면에 출력하는 명령어 입니다.

  • 파일이 너무 길거나, 페이지마다 화면을 스크롤해야하는 경우
단축키설명
spacebar다음 페이지를 표시
enter다음 행을 표시
qmore 명령어를 종료

파일 패턴 검색 (grep)

텍스트 파일을 한 줄씩 읽어서 지정한 패턴과 일치하는 문자열을 보여주는 명령어 입니다.

$ grep [OPTION] PATTERN [FILE]
    -E        : PATTERN을 확장 정규 표현식(Extended RegEx)으로 해석.
    -F        : PATTERN을 정규 표현식(RegEx)이 아닌 일반 문자열로 해석.
    -G        : PATTERN을 기본 정규 표현식(Basic RegEx)으로 해석.
    -P        : PATTERN을 Perl 정규 표현식(Perl RegEx)으로 해석.
    -e        : 매칭을 위한 PATTERN 전달.
    -f        : 파일에 기록된 내용을 PATTERN으로 사용.
    -i        : 대/소문자 무시.
    -v        : 매칭되는 PATTERN이 존재하지 않는 라인 선택.
    -w        : 단어(word) 단위로 매칭.
    -x        : 라인(line) 단위로 매칭.
    -z        : 라인을 newline(\n)이 아닌 NULL(\0)로 구분.
    -m        : 최대 검색 결과 갯수 제한.
    -b        : 패턴이 매치된 각 라인(-o 사용 시 문자열)의 바이트 옵셋 출력.
    -n        : 검색 결과 출력 라인 앞에 라인 번호 출력.
    -H        : 검색 결과 출력 라인 앞에 파일 이름 표시.
    -h        : 검색 결과 출력 시, 파일 이름 무시.
    -o        : 매치되는 문자열만 표시.
    -q        : 검색 결과 출력하지 않음.
    -a        : 바이너리 파일을 텍스트 파일처럼 처리.
    -I        : 바이너리 파일은 검사하지 않음.
    -d        : 디렉토리 처리 방식 지정. (read, recurse, skip)
    -D        : 장치 파일 처리 방식 지정. (read, skip)
    -r        : 하위 디렉토리 탐색.
    -R        : 심볼릭 링크를 따라가며 모든 하위 디렉토리 탐색.
    -L        : PATTERN이 존재하지 않는 파일 이름만 표시.
    -l        : 패턴이 존재하는 파일 이름만 표시.
    -c        : 파일 당 패턴이 일치하는 라인의 갯수 출력.
# 특정 파일에서 'error' 문자열 찾기
$ grep 'error' 파일명

# 현재 디렉토리내에 있는 모든 파일에서 'error' 문자열 찾기
$ grep 'error' *

# 특정 확장자를 가진 모든 파일에서 'error' 문자열 찾기
$ grep 'error' *.log

# 특정 파일에서 a,b,c로 시작하는 단어를 모두 찾는다.
$ grep [a-c] 파일명

# 특정 파일에서 a나 b로 시작되는 모든 행을 찾는다.
$ grep '^[ab]' 파일명

# 특정 파일에서 여러개 문자열 
$ cat mylog.txt | grep 'Apple' | grep 'Banana'

:star: 실시간 로그 보기 (tail + grep)

$ tail -f mylog.log | grep 192.168.15.86

파일 내용 정보 출력 (wc)

파일이나 표준 입력으로부터 받은 텍스트의 행 수, 단어 수, 문자 수를 세는 데에 사용되는 명령어 입니다.

  • 텍스트 파일의 통계 정보를 확인하는 경우

$ wc [option] file

# -l,--lines : 행 수를 세어 출력
# -w,--words : 단어 수를 세어 출력
# -c,--bytes : 문자 수를 세어 출력
# -L,--max-line-length : 가장 긴 행의 길이를 출력

파일 내용 정렬 (sort)

파일이나 표준 입력으로부터 받은 텍스트를 정렬하는 데 사용되는 명령어 입니다.

  • 알파벳 또는 숫자로 구성된 텍스트를 오름차순/내림차순으로 정렬하는 경우
$ sort [option] file 

# -r : 내림차순으로 정렬 / 기본은 오름차순
# -f : 대소문자 구별안함
# -n : 숫자로 정렬
# -k[숫자] : k1 → 1번째 필드를 기준으로 정렬
# -u : 정렬 후 중복된 내용을 제거
# -b : 선행 공백 무시
# -R : 해시의 키값 기준, 랜덤 정렬
# -h : --human(2K, 1G)
# -c : 정렬되어 있는지 검사
# -m : 이미 정렬된 파일들을 병합
# -o : 파일 출력
# -t : 필드 구분자를 지정
# 오름차순으로 정렬
$ sort sort.txt

# -r 옵션으로 내림차순으로 정렬
$ sort -r sort.txt
$ cat sort.txt | sort -r

# -u 옵션으로 정렬 후 중복값 제거
$ sort -u sort.txt

# 파일이 정렬되어 있는지 검사
$ cat /etc/passwd | sort -c

# 정렬 후 파일로 저장
$ sort /etc/passwd -o output.txt

# ls -l 결과 출력 내용을 파이프를 통해 정렬하는데 2번째 필드를 기준으로 내림차순 정렬
$ ls -l | sort -k2 -r

파일 내용 자르기 (cut)

파일의 특정 부분을 추출하기 위해 사용되는 명령어 입니다.

  • 텍스트 파일에서 특정 구분자를 기준으로 필드(Col)를 분리하는 경우
  • 텍스트 파일에서 특정 문자열을 기준으로 필드(Col)를 분리하는 경우
$ cut [option] file 

# -c : 지정된 문자(Col) 리스트를 추출
# -f : 지정된 필드(Col) 리스트를 추출
# -d : 필드를 구분하는 구분자를 지정 / 기본 구분자는 탭('\t')
# :로 구분했을 때, 첫번째 필드를 출력
$ cut -d ":" -f 1 /etc/passwd

# 별도의 구분자 없이 문자열 필드 1에서 4까지 출력
$ cut -c 1-4 /etc/passed

파일 비교 (diff)

두 개의 텍스트 파일을 비교하여 차이점을 행 단위로 보고하는데 사용되는 명령어입니다.
이를 통해 파일 간의 변경 내용을 시각적으로 확인할 수 있습니다.

$ diff [option] file1 file2

# -i : 대소문자를 무시하고 비교
# -w : 공백 문자를 무시하고 비교 
# -

$ diff file1 file2
1c1
< This is a test file.
---
> This is a test file2.
3c3
< Enjoy your testing!
---
> Enjoy your test!

0개의 댓글