전공과목 정리/리눅스시스템 + 시스템프로그래밍

[리눅스시스템🐧] 8장 파일 유틸리티

최연재 2024. 1. 5. 03:47

교재 : 리눅스 시스템 원리와 실제 (창병모, 생능출판)

 

8.1 파일 속성으로 파일 찾기 :  find 명령어

- 파일 이름이나 속성을 이용하여 해당하는 파일을 찾는다

- 사용법 : 옵션의 검색 조건에 따라 지정된 디렉터리 아래에서 해당되는 파일들을 모두 찾아 출력한다.

$ find 디렉터리 [-옵션]

- 검색 조건 : 여러 검색 옵션을 조합해서 사용 가능

검색 조건 및 처리 방법 설명
-name 파일명 파일명으로 찾는다.
-atime +n 접근 시간이 n일 이전인 파일을 찾는다.
-atime -n 접근 시간이 n일 이내인 파일을 찾는다.
-atime n 접근 시간이 n일 전인 파일을 찾는다.
-mtime +n n일 이전(이상 전)에 수정된 파일을 찾는다.
-mtime -n n일 이내에 수정된 파일을 찾는다.
-mtime n n일 전에 수정된 파일을 찾는다.
-perm nnn 접근 권한이 nnn인 파일을 찾는다.
-type x *파일 종류가 x인 파일들을 찾는다.
-size n 크기가 n 블록(512바이트)인 파일들을 찾는다.
-links n 링크 개수가 n인 파일들을 찾는다. 
-user 사용자명 파일의 소유자가 사용자명인 파일을 찾는다.
-group 그룹명 그룹명을 갖는 그룹에 속한 파일을 찾는다.
-print 찾은 파일의 절대 경로명을 화면에 출력한다.
-ls 찾은 파일에 대해 ls -dils 명령어 실행 결과를 출력한다.
-exec cmd {} 찾은 파일들에 대해 cmd 명령어를 실행한다.
ex) $ find . -name "*.c" -atime +30 -exec ls -l {} \;

 

* 파일 종류

  • d : 디렉터리
  • f : 일반 파일
  • l : 심볼릭 링크
  • b : 블록 장치 파일
  • c : 문자 장치 파일
  • s : 소켓 파일

 

8.2 파일 필터링 : grep 명령어

- 사용법 : 파일(들)을 대상으로 지정된 패턴의 문자열을 검색하고, 해당 문자열을 포함하는 줄들을 출력한다.

$ grep 패턴 파일*

- 옵션 사용 가능

옵션 기능
-i 대소문자를 무시하고 검색한다.
-l 해당 패턴이 들어있는 파일 이름을 출력한다.
-n 각 줄의 줄번호도 함께 출력한다.
-v 명시된 패턴을 포함하지 않는 줄을 출력한다.
-c 패턴과 일치하는 줄 수를 출력한다.
-w 패턴이 하나의 단어로 된 것만 검색한다.

- 정규식

문자 의미
. 임의의 한 문자를 의미한다. 'a...b' : a로 시작해서 b로 끝나는 다섯 글자 문자열
* 바로 앞의 것을 0번 이상의 반복 'a*b'는 b, ab, aab, ... 등의 문자열
[] [과 ] 사이의 문자 중 하나를 의미
(- 기호 : 문자의 범위 지정)
'[ab]c'는 ac, bc
[a-z]는 알파벳 소문자
[^...] [^과 ] 사이의 문자를 제외한 나머지 문자 중 하나. '[^abc]d' 는 ed, fd 등의 문자열
[^a-z]는 알파벳 소문자가 아닌 모든 문자
^, $ 각각 줄의 시작, 끝을 의미. '^문자열'은 문자열로 시작하는 줄, '문자열$'는 문자열로 끝나는 줄

- 파이프와 함께 grep 명령어 사용

: 어떤 명령어을 실행하고 그 실행 결과 중에서 원하는 단어 혹은 문자열 패턴을 찾고자 할 때 사용함.

 

8.3 파일 정렬 : sort 명령어

- 사용법 : 텍스트 파일(들)의 내용을 줄 단위로 정렬한다. 옵션에 따라 다양한 형태로 정렬한다.

$ sort [-옵션] 파일*

- 정렬 방법

  • 정렬 필드를 기준으로 줄 단위로 오름차순 정렬
  • 기본적으로 각 줄의 첫 번째 필드가 정렬 필드로 사용됨. 
  • -r 옵션을 사용하여 내림차순으로 정렬 가능.

- 정렬 필드 지정

필드 지정 기능
-k 필드 번호 필드번호에 해당하는 필드를 기준으로 정렬한다. 이 옵션에서 필드번호는 1부터 시작된다.
+시작필드 -종료필드 시작필드부터 종료필드-1까지의 필드들을 기준으로 정렬한다. 이때 필드 번호는 0부터 시작된다.

- sort 명령어의 옵션

옵션 기능
-b 앞에 붙는 공백을 무시한다. 
-c 정렬되지 않는 상태로 출력한다.
-d 숫자, 문자, 공백만 비교하여 사전식 순서로 정렬한다.
-f 대소문자를 구분하지 않고 정렬한다.
-n 숫자 문자열의 숫자 값에 따라 비교하여 정렬한다.
-r 역순(내림차순)으로 정렬한다.
-t문자 지정한 문자를 필드 구분자로 사용한다.
ex) sort -t: -k 3 -n 파일
-o  정렬된 내용을 지정된 파일에 저장할 수 있다. 
ex) $ sort -o sort.txt test.txt

 

8.4 파일 비교

1) cmp 명령어

- 사용법 : 파일1과 파일2가 같은지 비교한다. 

$ cmp 파일1 파일2

- 출력

  • 두 파일이 같으면 아무 것도 출력하지 않음.
  • 두 파일이 서로 다르면 서로 달라지지 위치 출력

 

2) diff 명령어

- 사용법 : 파일1과 파일2를 줄 단이로 비교하여 그 차이점을 출력한다. (-i 옵션은 대소문자를 무시하여 비교)

$ diff [-i] 파일1 파일2

 - 출력 :첫 번째 파일을 두 번째 파일 내용과 같도록 바꿀 수 있는 편집 명령어 형태

  • 추가(a) : 첫 번째 파일의 줄 n1 이후에 두 번째 파일의 n3부터 n4까지의 줄들을 추가하면 두파일은 서로 같다. 
  • ex) n1an2,n3
  • 삭제(d) : 첫 번째 파일의 n1부터 n2까지의 줄들을 삭제하면 두 번째 파일의 줄 n3 이후와 서로 같다.
  • ex)n1,n2dn3
  • 변경(c) : 첫 번째 파일의 n1부터 n2까지의 줄들을 두 번째 파일의 n3부터 n4까지의 줄들로 대치하면 두 파일은 서로 같다.
  • ex)n1,n2cn3,n4

 

8.5 기타 파일 조작

1) 파일 분할 : split

- 사용법

$ split [-l n] 입력파일 [출력파일]

 

  • 하나의 입력파일을 일정한 크기의 여러 개 작은 파일들로 분할한다.
  • 1000줄씩 분할하여 xaa, xab, ... 형태의 파일명으로 저장한다.
  • -l n 옵션을 이용하여 분할할 줄 수를 지정할 수 있다.

 

2) 파일 합병 : cat

- 파일 합병

$ cat 파일1 파일2 > 파일3

: 파일1과 파일2의 내용을 붙여서 새로운 파일 3을 만들어준다.

 

3) 파일 합병 : paste

- 줄 단위 파일 합병

$ paste [-s] [-d구분문자] 파일*

: 여러 파일들을 줄 단위로 합벼하여 하나의 파일을 만들어준다. (-s : 한 파일 끝에 다른 파일 내용을 덧붙인다.)