4. cat

안녕하세요, MJ 입니다.

cat 명령어는 일반 파일을 터미널상에 출력하는 명령어 입니다.

cat 명령어에 대해 알아보겠습니다.


 

cat 명령어의 도움말을 먼저 확인하고 자주 사용되는 옵션과  cat 명령어 사용법을 설명하겠습니다.

도움말

펼치기/접기

옵션 설명

-A: -vET 옵션과 같습니다.
-b: 빈줄에는 줄번호를 매기지 않습니다.
-e: -vE 옵션과 같습니다.
-E: 라인의 끝을 $ 문자로 표시합니다.
-n: 줄번호를 표시합니다.
-s: 반복적 인 빈 출력 라인을 억제합니다.
-t: -vT 옵션과 같습니다.
-T: 탭 문자를 ^T  로 대체하여 표시합니다.
-v: 엔터와 탭 문자를 보이도록 하지 않고, 라인의 끝에 윈도우의 줄바꿈문자(캐리지리턴:CR)
     를 보여줍니다.

캐리지 리턴 설명

키보드의 'Enter' 키에 그림을 보면,
아래로 가다가 왼쪽으로 꺾여있는 화살표가 그려져 있습니다.

엔터를 누르게 되면 아래로 가는 동작을 한 뒤에, 왼쪽으로 가는 동작을 한다는 뜻 입니다.
이는 윈도우에서의 동작으로 엔터 한번 입력에 두가지의 동작을 하게 됩니다.

하지만 리눅스에서는 엔터가 아래로 한번만 동작합니다.
리눅스 에서도 윈도우와 같이 아래로 간 다음 왼쪽으로 가면 문제가 없겠지만,
리눅스와 윈도우에서는 메모리에 데이터를 저장하는 방식이 달라, 윈도우와 리눅스는
그 순서가 바뀌게 됩니다. 리눅스에서는 왼쪽으로 먼저 간 다음, 아래로 가도록 동작하게 되어
내가 입력 한 모든 문자가 모두 지워지고 아래로 가게 됩니다.
(리눅스-리틀엔디안,윈도우-빅엔디안 차이)

그래서 텍스트 파일을 vi 로 열어보거나 하면 잘 보이긴 하지만, cat 이나, 스크립트 작성에서
파일을 실행 할때에는 작성자가 원하는대로 동작하지 못하게 되어, 리눅스에서는 이 줄바꿈 문자에 대해 신경을 쓰지 않을 수 없습니다.

그리하여 리눅스에서는 줄바꿈 문자를 LF (Line Feed)
윈도우에서의 줄바꿈문자는 CRLF 로 표현 합니다.
(Carriage Return)


모든 옵션에 대해 실습을 하지는 않지만, 다음 내용에 대해 실습을 하신다면 리눅스 엔지니어로 일 하시는 중에도 전혀 불편함 없이 사용 하실 수 있을것이라고 생각됩니다.

 

시작합니다.

 

1. 리눅스 파일 출력

cat 명령어 뒤에 파일 이름을 주면 파일의 내용을 출력할 수 있습니다.

[run-linux cat]$ ls -l
total 12
-rw-r--r-- 1 root root 18 Sep 24 15:11 A_file
-rw-r--r-- 1 root root 18 Sep 24 15:11 B_file
-rw-r--r-- 1 root root 18 Sep 24 15:11 C_file
[run-linux cat]$ cat A_file
A_file: testprint
[run-linux cat]$ cat A_file B_file
A_file: testprint
B_file: testprint
[run-linux cat]$ cat A_file B_file C_file
A_file: testprint
B_file: testprint
C_file: testprint
 
 

2. 각 라인 번호 메기기

    2-1) "-n" 옵션을 사용하여 라인 번호를 출력합니다.
[run-linux cat]$ cat A_file
line 1
line 2

line 5
line 6
[run-linux cat]$ cat -n A_file
     1  line 1
     2  line 2
     3
     4
     5  line 5
     6  line 6
 

    2-2) "-b" 옵션을 사용하여, 비어있는 라인에는 번호를 매기지 않습니다.

[run-linux cat]$ cat -b A_file
     1  line 1
     2  line 2

     3  line 5
     4  line 6

 
 

3. 파일 내용 출력 시 라인의 끝 확인

한 줄의 끝을 리눅스에서는 $ 기호로 표시합니다.
중요한 설정 파일을 작성할 때, 끝에 공백이 포함되면 안될 경우 이를 체크할 때에 용이합니다.
"-E" 옵션을 사용합니다.

[run-linux cat]$ cat A_file
username1: user_01
password1: pass01

username2:
user_02 password2: pass02
username3:
user_03 password3: pass03
username4:
user_04 password4: pass04 [run-linux cat]$ cat -E A_file username1: user_01$ password1: pass01$
username2: user_02$ password2: pass02 $
username3:
user_03$ password3: pass03$
username4:
user_04 $ password4: pass04$
: 극단적인 예로, 위 내용으로 계정이 설정되어있다면,
user_02 와 user_04 는 의도 한 공백 입력이 아니었다면, 로그인에 실패하게 될 것입니다.
 

 

4. 탭 대신 탭 기호를 출력
파일의 내용에 탭(TAB) 문자가 포함된 경우, 이것이 공백을 여러번 입력 한 것인지, 탭을 입력한것인지 알 수 없어 확인하기위해 탭 문자를 특수 기호로 표시되도록 할 수 있습니다.
: 탭 문자 대신 표시되는 특수기호는 컨트롤 i(대문자) 처럼 생겼습니다. →  ^I
대문자 T 옵션을 사용합니다.

[run-linux cat]$ ls -l
total 4
-rw-r--r-- 1 root root 31 Sep 24 14:58 A_file
[run-linux cat]$ cat A_file
hello   World~!
Nice to meet you
[run-linux cat]$ cat -T A_file
hello^IWorld~!
Nice to^Imeet you

5. 연속된 빈 라인 출력 안함
빈 라인이 두 번 이상 연속될 때, 하나의 빈 라인만 출력되게 만들기 위해 "-s" 옵션을 사용합니다.
: 다음 예시에서는 빈 라인의 수를 쉽게 파악할 수 있도록 -n 옵션을 함께 사용하여 줄번호를 표시하였습니다.

[run-linux cat]$ ls -l
total 4
-rw-r--r-- 1 root root 58 Sep 24 14:54 A_file
[run-linux cat]$ cat -n A_file
     1  line number 1
     2  line number 2
     3
     4
     5  line number 5
     6  line number 6
[run-linux cat]$ cat -n -s A_file
     1  line number 1
     2  line number 2
     3
     4  line number 5
     5  line number 6 
 

6. 출력 리다이렉션(>)을 사용하여 파일의 내용을 복사하듯 저장

[run-linux cat]$ ls -l
total 4
-rw-r--r-- 1 root root 18 Sep 24 14:49 A_file
[run-linux cat]$ cat A_file
A_file: testprint
[run-linux cat]$ cat A_file > A_file_backup
[run-linux cat]$ ls -l
total 8
-rw-r--r-- 1 root root 18 Sep 24 14:49 A_file
-rw-r--r-- 1 root root 18 Sep 24 14:52 A_file_backup
[run-linux cat]$ cat A_file
A_file: testprint
[run-linux cat]$ cat A_file_backup
A_file: testprint


7. 여러 개의 파일을 리다이렉션을 이용하여 하나의 파일로 저장

[run-linux cat]$ ll
total 12
-rw-r--r-- 1 root root 18 Sep 24 14:49 A_file
-rw-r--r-- 1 root root 18 Sep 24 14:49 B_file
-rw-r--r-- 1 root root 18 Sep 24 14:49 C_file
[run-linux cat]$ cat A_file
A_file: testprint
[run-linux cat]$ cat B_file
B_file: testprint
[run-linux cat]$ cat C_file
C_file: testprint
[run-linux cat]$ cat A_file B_file C_file > result_file
[run-linux cat]$ cat result_file
A_file: testprint
B_file: testprint
C_file: testprint

8. 리다이렉션(>>) 두개를 사용하여 파일 뒤에 내용추가

[run-linux cat]$ ls -l
total 12
-rw-r--r-- 1 root root 18 Sep 24 14:45 A_file
-rw-r--r-- 1 root root 18 Sep 24 14:45 B_file
-rw-r--r-- 1 root root 18 Sep 24 14:45 C_file
[run-linux cat]$ cat A_file
A_file: testprint
[run-linux cat]$ cat B_file
B_file: testprint
[run-linux cat]$ cat C_file
C_file: testprint
[run-linux cat]$ cat A_file > result_file
[run-linux cat]$ cat B_file >> result_file
[run-linux cat]$ cat C_file >> result_file
[run-linux cat]$ cat result_file
A_file: testprint
B_file: testprint
C_file: testprint

 

 

9. 파일 사이에 내용 추가하기.

cat 명령 다음에 파일 이름 대신 하이픈(-) 을 사용하면 표준 입력을 통해 입력받은 내용을 출력할 수 있다고 설명했었습니다. 이 기능을 사용하면, 여러 파일을 합칠 때 파일 사이에 사용자가 원하는 임의의 내용을 추가할 수 있습니다.

[run-linux cat]# ls -l
total 16
-rw-r--r-- 1 root root 18 Sep 24 14:36 A_file
-rw-r--r-- 1 root root 18 Sep 24 14:36 B_file
-rw-r--r-- 1 root root 18 Sep 24 14:36 C_file
[run-linux cat]# cat A_file
A_file: testprint
[run-linux cat]# cat B_file
B_file: testprint
[run-linux cat]# cat C_file
C_file: testprint
[run-linux cat]# cat A_file B_file C_file - > result_file
##### THE END ##### -> 하이픈(-) 위치에 추가될 내용을 입력 '[Ctrl + D] 입력'
[run-linux cat]# ls -l
total 16
-rw-r--r-- 1 root root 18 Sep 24 14:36 A_file
-rw-r--r-- 1 root root 18 Sep 24 14:36 B_file
-rw-r--r-- 1 root root 18 Sep 24 14:36 C_file
-rw-r--r-- 1 root root 74 Sep 24 14:37 result_file
[run-linux cat]# cat result_file
A_file: testprint
B_file: testprint
C_file: testprint
##### THE END #####  <<-- 내가 입력 한 문자가 파일에 저장된 것을 확인.
[run-linux cat]#
 

cat 명령어에 대해 알아보았습니다.


문의사항은 댓글을 남겨주시면 성심껏 답변을 드리도록 하겠습니다.


감사합니다.

댓글 없음:

댓글 쓰기

내 리눅스 서버, 대체 뭐가 문제야?

내 리눅스 서버, 대체 뭐가 문제야? 안녕하세요. 오늘은 리눅스 서버가 버벅거릴 때, 원인을 파악하는 방법에 대해 알아보려고 해요. 서버의 성능 저하 원인을 찾는 것은 시스템 관리에서 매우 중요한 부분이에요. CPU, 메모리 사용량부터 수상한 프로...

가장 많이 본 글