728x90

[과제 2]

 

 

추가적인 파일 유틸리티 관련 명령어인 cmp, diff,sort, split, paste 등을 알아보자.

 

명령어들을 알아보기 앞서 유틸리티란? 

 

리눅스에는 윈도우에서 사용되는 대부분의 소프트웨어를 대체할 만큼의 많은 무료 소프트웨어들을 제공하는데,

이때 이 무료 소프트웨어를 유틸리티라한다.

 

1. 파일 비교 명령어

 

1-1) cmp

 

: 두 개의 파일을 바이트(문자) 단위로 비교하여 출력하는 명령어이다.

 

(+ 리눅스에서의 파일의 용량이 기본 바이트 단위로 잡히며, 바이트 단위는 c이다.)

 

cmp [옵션] 파일명1 파일명2

 

*옵션

-b : 두 파일 간의 다른 바이트를 출력한다. 

 

-l : 두 파일 간의 다른 문자 위치와 문자를 출력한다.

 

-s : 아무 것도 출력하지 않고 실행 결과 코드만 반환한다.

 

 

1-2) diff

 

: 두 개의 파일을 행 단위로 비교하여 다른 부분을 출력하는 명령어 / 

두 개의 파일명을 매개변수로 사용하여 화면에 차임점을 나열하는 명령어.

 

diff [옵션] 파일명1 파일명2 / diff [옵션] 디렉터리1 디렉터리2

 

*옵션

-b : 연속된 공백을 무시한다.

 

-r : 두 디렉터리의 차이점을 출력한다.

 

-i :  대소문자를 구분하지 않은다.

 

 

-s : 두 파일이 같은지 확인한다.

 

diff 명령어는 두 파일이 모두 일치할 때는 어떠한 값도 출력하지 않는다.

위에 있는 두 a ,b 파일은 모두 다르기 때문에 어떤 옵션을 넣더라도 같은 값이 출력된다.

 

 

2. 파일 정렬 명령어

 

2-1) sort

: 사용자가 지정한 파일의 내용을 정렬하거나 정렬된 파일의 내용을 병합할 때 사용한다.

 

sort 옵션 [파일명]

 

cat 명령어를 이용해서 a, b 텍스트 파일을 출력한다.

sort 명령어를 사용하면 오름차순으로 정령된다. 

 

sort 옵션 [파일명] 와 같이 파일 정령 명령어로 

cat a b | sort 로도 사용할 수 있다.

 

2-2) sort 옵션

 

(1) -r, --reverse : 역순으로 정렬한다.

(2) -f, --ignore-case : 대소문자를 구분하지 않고 정렬한다.

위에 sort 명령어를 입력했을 때와 달리 대문자 Y 가 소문자 y와 같은 취급을 했다는 점이 -f 옵션의 특징이라 할 수 있다.

 

 

(3) -k, --key=POS1: -k 옵션으로 해당 필드를 기준으로 정렬할 수 있다.

 

-k는 정렬할 열을 지정을 하는데 -k 2는 두 번째 필드를 기준으로 정렬하여 출력하겠다는 의미이고,

 

-k 4는 네 번째 필드를 기준으로 정렬하여 출력한다.

 

-k 옵션을 사용할 떄 유의할 점은 -k 뒤에 정렬 기준이 될 필드를 지정해주어야 한다는 점이다.

 

 

(4) -t, --field-separator=SEP : -t 옵션 뒤에 필드 구분자를 지정해서 정렬할 수 있으며, -k 옵션과 같이 사용할 수 있다.

 

sort -t, a b

 

-t 옵션을 사용해 콤마(,)를 구분자로 지정해서 정렬 후 출력한다.

-k 옵션과 같이 사용해서 정렬할 수 있다. 

아래 그림을 보면 -k 옵션에 따라 두 번째 필드 값으로 정렬되었다.

 

 

(5) -u, --unique : -u 옵션을 사용하게 되면 정렬한 후에 중복된 값이 제거가 된다.

추가적으로 uniq 명령어 사용시 연속적인 중복값만 제거된다. 

아래 그림에서는 a,b  두 텍스트 파일 간 중복된 값이 없어 제거가 되지 않았다.

 

 

 

3. 파일 분할 명령어

 

3-1) split 명령어

: 용량이 큰 데이터, 파일들을 적절한 용량으로 분할해서 처리한다.

로그가 계속 쌓여 커지는 환경에서 파일을 분리해주는 split 명령어는 유용하다.

 

split 명령어가 파일을 분할하는 명령어이니만큼, 대용량 파일이 준비가 되었는지  확인하는 명령어로 ls -tlr 명령어를 입력한다.

내 계정 속 가장 큰 대용량 파일로 크기가 4096인 파일이 있다. 

 

split [파일명] [새로운 파일명 지정]

기본적으로 1000줄 단위로 파일을 잘라서 나눠짖게 되는데, 원본 파일은 사라지지 않는다.

 

3-2) split 옵션

 

(1) -b : 파일을 원하는 바이트 크기 단위로 분할하는 옵션

 

split -b [원하는 바이트 크기] [파일] [새로운 파일명]

 

파일을 줄 수가 아닌 특정 크기만큼 분할하고 싶은 경우, b 옵션을 사용하면 된다.

 

아래 그림을 보면 b 텍스트 파일을 20바이트 크기로 분할하고 싶다는 명령어이고,

 

실제로 ls -li 를 통해 크기 20바이트로 분할되었다는 것을 확인할 수 있다. 역시 원본 파일은 남아있게 된다.

 

4. 파일 입출력 정리 명령어

 

4-1) paste 

: 여러 텍스트 파일을 수평적으로 합치는 명령어 

 

paste [옵션] [파일명]

 

아래 그림을 보면 paste에 a,b 텍스트 파일을 사용하면 다음과 같이 출력된다.

 

4-2) paste 옵션

 

(1) -s : 한 파일의 내용을 먼저 연속적으로 수평으로 출력한 후 다음 파일을 덧붙여 출력한다.

 

(2) -d : 결합하는 라인의 구분자를 지정할 수 있다. 기본값은 탭문자로 아래 그림은 ','을 사용해 출력되었다.

 

아래 그림에서 사용된 \n 은 키보드로 앤터키로 수직적으로 텍스트 파일 값을 정렬할 수 있다.

-s ,-d 옵션은 개별적으로 사용이 가능하며, 함께 사용할 수도 있다.

 

 

(3) - < : 칼럼 수를 지정할 수 있다. 

- < 옵션은 하나의 열으로 텍스트 파일이 정렬되며, '-' 의 개수에 따라 열의 개수가 달라진다.

- - < 일 때 두 개의 열로 정렬되며, - - - < 일 때는 세 개의 열로 정렬된다.

 

(4) 표준 입력 사용하기

cat 명령어를 사용하여 a 텍스트 파일이 출력이 되고,

pipe 명령어를 통해 paste 명령어에 -d 옵션이 더해져 구분자 ':' 가 더해져 출력된 a 텍스트 파일 뒤에 구분자 ':' 다음 b 파일이 출력이 된다.

 

 

[ 과제3 ]

 

과제2 문서화 글 마지막에 알아본 5가지 명령어 중 하나 이상을 넣어 pipe 실습한 내용 추가

 

1. pipe 명령어 '|'

: 명령어의 출력과 명령어의 입력을 연결시켜주는 것으로,

어떠한 프로세스의 출력이 그 다음 프로세스의 입력이 되는 것을 말한다.

 

(1) cat - sort

 

cat 명령어를 이용해서 a 텍스트 파일을 출력하게 되면, 출력한 내용을 입력으로 받게 된다면,

입력된 내용을 정렬하고자 할 때에는 sort 명령어를 파이프로 이어주면 된다.

여기서 더 나아가 정령된 내용들 중에서 중복된 것들을 제거하고 싶을 때 또 한번 uniq명령어를 파이프로 연결시키면 된다.   cat 명령어로 출력된 값이 sort 명령어로 정렬이 되어, uniq 명령어로 인해 중복이 삭제되는 출력값이 파이프 연결로 인해 입력값이 될 수 있다.

 

 

(2) find - sort

 

먼저 find 명령어를 통해서 '..'라는 이름의 디렉토리만을 검색한 출력값을 파이프 명령어를 통해 sort 명령어로 입력시켜서 -k 2 두 번째 필드를 기준으로 정렬하는 것을 나타낸 것이다.

 

 

(3) ls - sort

 

ls -al 명령어로 현재 디렉토리에 있는 파일 목록 모두를 자세히 출력한다.

 

그 다음에, 이 결과값을 이용해서, 이름을 사전순으로 정렬하려 할 때, 파이프로 연결을 하면 된다.

ls -al 의 출력 결과를 sort 명령어의 입력으로 주게 된다. 

sort -k 9 은 9번째 필드, 즉 파일, 폴더 이름을 기준으로 오름차순으로 정렬하게된다.

 

ls -al |sort -k 9 에서 더 나아가 화면에 10개만 출력한다고 한다면 head 명령어를 이용해서 

ls -al |sort -k 9|head -n 10 이라는 명령어로 나타낼 수 있겠다.

그렇다면 위에 있는 그림에서는 .config까지만 출력이 될 것이다.

 

 

 

'자기개발 > Linux' 카테고리의 다른 글

[ Linux week4 ] 과제1,2  (0) 2021.05.16
[ Linux week3 ] 과제1  (0) 2021.05.04
[ Linux 2주차 ] 과제 재제출  (0) 2021.05.03
[ Linux 2주차 ] 과제4  (0) 2021.04.27
[ Linux 2주차 ] 과제3  (0) 2021.04.27

+ Recent posts