안녕하세요, 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. 각 라인 번호 메기기
[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 명령어에 대해 알아보았습니다.
문의사항은 댓글을 남겨주시면 성심껏 답변을 드리도록 하겠습니다.
댓글
댓글 쓰기