본문 바로가기

CentOS/Study

[Study14]Linux에서 파일 내용을 조작하고 보기 위한 유용한 명령 - cat / more

반응형

cat 명령어

cat 명령어는 텍스트 파일을 읽고, 결합하고 표준 출력으로 내보내는 명령어입니다.

이 명령어를 사용하면 파일의 내용을 화면으로 출력할 수 있습니다.

또한, 여러 파일의 내용을 함께 출력할 수 있습니다.

그러나, 파일이 화면을 초과하는 경우 내용이 지나치게 빠르게 지나가버릴 수 있습니다.

이러한 경우에는 파이프(Pipe Line)를 사용하여 more 명령어와 연결하여 파일의 내용을 더 자세히 확인할 수 있습니다.

cat 명령어는 출력 결과를 파일로 저장할 수도 있습니다.

이 경우, 출력 결과를 저장할 파일명을 지정하여 '>' 기호를 사용합니다.

이 방법을 사용하면 나중에 출력 결과를 다시 확인할 수 있습니다.

 

[명령어 형식]

# cat file1                  /* file1 파일 내용을 출력 */
# cat file1 file2            /* file1, file2 파일 내용을 출력 */
# cat -n file1               /* file1 파일내용을 줄번호와 함께 출력 */
# cat file1 file2 > file3    /* file1, file2 출력 결과를 file3에 저장 */

따라서, cat 명령어는 여러 가지 방법으로 활용할 수 있는 유용한 명령어입니다.

파일의 내용을 확인하거나, 여러 파일의 내용을 비교하는 등 다양한 용도로 사용할 수 있습니다.

 

[명령어 옵션]

옵션 설명
-e 제어 문자를 ^ 형태로 출력하며 끝에 $를 추가합니다.
-n 줄번호를 공백을 포함하여 화면 왼쪽에 나타냅니다.
-s 중복되고 겹치는 빈 행은 하나의 빈 행으로 처리합니다.
-v 행바꿈 문자, tab를 제외한 제어문자를 ^ 형태로 출력합니다.
-E 각 행 끝에 $ 문자를 출력합니다.
-T tab 문자를 출력합니다.
-A -vET 옵션과 동일합니다.

 

/etc/passwd 파일 출력

# cat /etc/passwd
-> 출력내용 생략

출력된 결과는 리눅스 시스템에서 사용되는 계정 정보가 담긴 파일입니다.

이 파일에는 사용자 이름, UID, GID, 홈 디렉터리, 로그인 셸 등이 기록되어 있습니다.

이 중에서 특정 사용자 정보를 찾기 위해서는 명령어 뒤에 검색어를 입력하는 것으로 가능합니다.

 

# cat -n /etc/passwd | more (# nl /etc/passwd | more)
     1  root:x:0:0:root:/root:/bin/bash
     2  bin:x:1:1:bin:/bin:/sbin/nologin
     3  daemon:x:2:2:daemon:/sbin:/sbin/nologin
     4  adm:x:3:4:adm:/var/adm:/sbin/nologin
     5  lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
     6  sync:x:5:0:sync:/sbin:/bin/sync
     7  shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
     8  halt:x:7:0:halt:/sbin:/sbin/halt

위 명령어는 출력된 결과 앞에 라인 번호를 붙여서 출력합니다.

이를 통해 사용자 정보를 더 쉽게 찾을 수 있습니다.

 

# cat /etc/passwd | grep fedora
fedora:x:1001:1001::/home/fedora:/bin/bash
# cat -n /etc/passwd | grep fedora
48	fedora:x:1001:1001::/home/fedora:/bin/bash

위 명령어는 cat 명령어로 출력된 결과에서 fedora 사용자에 대한 정보를 검색합니다.

마찬가지로 cat -n 명령어로 출력된 결과에서도 fedora 사용자 정보를 검색할 수 있습니다.

하지만 라인번호와 UID, GID는 차이가 있을 수 있으므로 주의해야 합니다.

 

file1, file2 두 개의 파일을 하나의 file3으로 합치기

# test 디렉토리로 이동
# cd /test

# test 디렉토리 내의 모든 내용 삭제
# rm -rf /test/*

# 두 개의 새 파일 생성 후 내용 추가
# echo 1111 > file1
# echo 2222 > file2

# 두 파일의 내용 확인
# cat file1 file2
1111
2222

# 두 파일의 내용을 세 번째 파일로 결합
# cat file1 file2 > file3

# 세 번째 파일의 내용 확인
# cat file3
1111
2222

이 스크립트에서는 사용자가 test 디렉토리로 이동하여 디렉토리의 모든 내용을 삭제합니다.

그런 다음 두 개의 새 파일, file1과 file2를 생성하고 내용을 추가합니다.

cat 명령어를 사용하여 두 파일의 내용을 확인합니다. file1과 file2의 내용을 > 연산자를 사용하여 file3로 결합합니다.

마지막으로 cat 명령어를 사용하여 file3의 내용을 확인합니다.

rm -rf 명령어는 하위 디렉토리와 파일을 포함하여 디렉토리의 모든 내용을 삭제합니다.

echo 명령어는 파일에 내용을 추가하는 데 사용됩니다.

cat 명령어는 파일의 내용을 확인하거나 여러 파일의 내용을 연결하는 데 사용됩니다.

cat file1 file2의 출력을 > 연산자를 사용하여 file3로 리디렉션함으로써 file1과 file2의 내용이 file3로 결합됩니다.

 

cat 명령어를 사용하여 바이너리 파일 확인 시

# man strings
NAME
       strings - print the strings of printable characters in files.

SYNOPSIS
       strings [-afov] [-min-len]
               [-n min-len] [--bytes=min-len]
               [-t radix] [--radix=radix]
               [-e encoding] [--encoding=encoding]
               [-] [--all] [--print-file-name]
               [-T bfdname] [--target=bfdname]
               [--help] [--version] file...

DESCRIPTION
       For  each  file  given,  GNU  strings  prints  the  printable character
       sequences that are at least 4 characters long (or the number given with
       the  options  below)  and are followed by an unprintable character.  By
       default, it only prints the strings from  the  initialized  and  loaded
       sections  of  object  files;  for  other  types of files, it prints the
       strings from the whole file.

       strings is mainly useful  for  determining  the  contents  of  non-text
       files.

OPTIONS
       -f
       --print-file-name
           Print the name of the file before each string.

바이너리 파일은 컴퓨터에서 실행되는 프로그램으로, 일반적으로 텍스트 에디터로 열 수 없습니다.

그러나 때때로 이러한 파일을 cat 명령어로 열어보려는 시도를 하게 됩니다.

이 경우 비프(beep)음이 계속해서 나오기 때문에 이를 해결하려면 터미널 창을 종료해야 합니다.

하지만, 이 파일의 내용을 확인하려는 경우가 많습니다. 이를 위해 strings 명령어를 사용할 수 있습니다.

strings 명령어는 파일 내의 인쇄 가능한 문자열을 출력합니다.

기본적으로, 4개 이상의 문자로 이루어진 인쇄 가능한 문자열을 출력하며 이후에 인쇄 불가능한 문자가 나타납니다.

이는 실행 파일을 분석하는 데 유용합니다.

이 명령어는 주어진 각 파일에서 인쇄 가능한 문자열 시퀀스를 출력합니다.

 

예를 들어, 문자열 출력을 위해 strings 명령어를 사용할 경우 다음과 같이 입력하면 됩니다.

# strings -f /bin/ls

 

strings 명령어는 실행 파일을 분석하는 데 유용합니다.

실행 파일 내의 문자열을 출력함으로써, 파일에 대한 정보를 얻을 수 있습니다.

그러나, 만약 파일이 실행 파일이 아니라면, strings 명령어는 파일의 전체 문자열을 출력합니다.

이 경우, 출력 결과가 너무 많아질 수 있으므로, 옵션을 사용하여 출력을 제한할 수 있습니다.

옵션 중에는, 출력 문자열의 최소 길이를 지정하는 -n 옵션이 있습니다. 이를 사용하여, 최소 길이 이하의 문자열은 출력되지 않도록 할 수 있습니다.

# strings -n 5 /home/user/file.txt

위의 명령어는 파일 내의 5개 이상의 문자로 이루어진 인쇄 가능한 문자열만 출력합니다.

 

strings 명령어는 다음과 같은 옵션을 가지고 있습니다.

OPTIONS
       -a
           출력할 문자열이 하나라도 존재하는 모든 부분에서 문자열을 검색합니다.

       -f
       --print-file-name
           출력되는 문자열 앞에 파일 이름을 표시합니다.

출력 결과에 파일 이름을 표시하려면 -f 옵션을 사용하면 됩니다.

이 옵션을 사용하면, 출력 문자열 앞에 파일 이름이 표시됩니다.

그리고 -a 옵션을 사용하면, 문자열 검색을 파일 내의 모든 부분에서 수행합니다.

 

마지막으로, strings 명령어는 비슷한 명령어인 grep 명령어와 함께 사용할 수 있습니다.

# strings file.txt | grep search_term

위의 명령어는 파일 내의 문자열 중에서, 특정 문자열을 포함하는 문자열만 검색합니다.

따라서, 바이너리 파일에 대한 정보를 얻기 위해서는 strings 명령어를 사용하면 유용합니다.

이 명령어를 사용하면, 파일 내의 문자열을 출력함으로써 파일에 대한 정보를 얻을 수 있습니다.

확실하지 않은 파일의 경우는 파일의 형식을 확인해본다.

# cd /
# ls –F
bin@  boot/  data1/  data2/  data3/  data4/  dev/  etc/  home/  lib@  lib64@  media/  mnt/  opt/  proc/  restore/  root/  run/  sbin@  srv/  sys/  test/  tmp/  usr/  var/

# file *
bin:     symbolic link to `usr/bin'
boot:    directory
data1:   directory
data2:   directory
data3:   directory
data4:   directory
dev:     directory
etc:     directory
home:    directory
lib:     symbolic link to `usr/lib'
lib64:   symbolic link to `usr/lib64'
media:   directory
mnt:     directory
opt:     directory
proc:    directory
restore: directory
root:    directory
run:     directory
sbin:    symbolic link to `usr/sbin'
srv:     directory
sys:     directory
test:    directory
tmp:     sticky directory
usr:     directory
var:     directory

유닉스 기반 시스템에서 작업할 때는 시스템의 파일 구조에 대한 기본적인 이해가 중요합니다.

유닉스 기반 시스템의 파일 구조는 계층적이며, 디렉토리가 나무 구조처럼 배열됩니다.

트리의 맨 위에는 루트 디렉토리가 있으며, 슬래시 (/) 문자로 표시됩니다.

시스템의 다른 디렉토리는 모두 루트 디렉토리의 하위 디렉토리입니다.

시스템은 여러 개의 디렉토리로 구성되어 있으며, 각각의 디렉토리에는 파일과 하위 디렉토리가 있습니다.

이러한 디렉토리는 각각 다른 목적으로 사용됩니다.

예를 들어 'bin' 디렉토리에는 실행 파일이 포함되어 있고, 'lib' 디렉토리에는 라이브러리가 포함되어 있습니다.

'etc' 디렉토리에는 구성 파일이 포함되어 있고, 'usr' 디렉토리에는 사용자 프로그램과 라이브러리가 포함되어 있습니다.

각각의 디렉토리는 각각의 중요성을 가지고 있으며, 함께 전체 시스템을 구성합니다.

'boot' 디렉토리에는 시스템 부팅에 필요한 파일이 포함되어 있고, 'home' 디렉토리에는 사용자의 홈 디렉토리가 포함되어 있습니다.

'dev' 디렉토리에는 하드웨어 장치와 통신하는 데 사용되는 장치 파일이 포함되어 있습니다.

'media' 디렉토리에는 이동식 미디어와 관련된 파일이 포함되어 있으며, 'mnt' 디렉토리는 파일 시스템을 일시적으로 마운트하는 데 사용됩니다.

'opt' 디렉토리는 선택적 소프트웨어 패키지를 위해 사용되며, 'proc' 디렉토리는 시스템에서 실행되는 프로세스에 대한 정보가 포함된 가상 파일 시스템입니다.

'restore' 디렉토리에는 백업 데이터가 포함되어 있고, 'root' 디렉토리는 root 사용자의 홈 디렉토리입니다.

'run' 디렉토리에는 런타임 파일이 포함되어 있으며, 'sbin' 디렉토리에는 시스템 실행 파일이 포함되어 있습니다.

'srv' 디렉토리에는 시스템에서 제공하는 서비스에 대한 데이터가 포함되어 있으며, 'sys' 디렉토리는 시스템 자체에 대한 정보가 포함된 가상 파일 시스템입니다.

'tmp' 디렉토리는 임시 파일을 위해 사용되는 스티커 디렉토리이고, 'var' 디렉토리에는 변수 데이터 파일이 포함되어 있습니다.

유닉스 기반 시스템의 디렉토리와 파일은 대소문자를 구분합니다.

이는 'bin'과 'Bin'이 두 개의 다른 디렉토리이며, 'file.txt'와 'FILE.TXT'가 두 개의 다른 파일이라는 것을 의미합니다.

유닉스 기반 시스템의 파일 구조를 탐색하려면 'cd' 명령을 사용하여 디렉토리를 변경하고, 'ls' 명령을 사용하여 디렉토리의 내용을 나열할 수 있습니다.

'pwd' 명령을 사용하여 현재 작업 디렉토리를 출력할 수 있습니다.

전반적으로, 유닉스 기반 시스템의 파일 구조에 대한 기본적인 이해는 시스템을 효과적으로 작업하는 데 중요합니다.

각 디렉토리와 그 내용의 목적을 이해함으로써 사용자는 시스템을 쉽게 탐색하고 작업을 효율적으로 수행할 수 있습니다.

 

more 명령어

큰 파일을 출력할 때 화면 크기 페이지 단위로 출력하며 하단에 "--More--(20%)"는 현재 내용을 20% 보았고 80% 남았다고 표현합니다.

이는 파일이 매우 크고 페이지 단위로 출력할 필요가 있는 상황에서 매우 유용합니다.

또한 화면에서 엔터(Enter)키를 누르면 한 개의 라인(line) 단위로 넘어가고, 스페이스(space) 키를 누르면 한 페이지 단위로 넘어갈 수 있습니다.

이 명령은 less 명령과 함께 사용하면 더욱 효율적입니다.

 

[명령어 형식]

# more file1      /* file1 파일을 출력 */
# more -c file1   /* file1 파일을 한행씩 지우면서 출력 (more와 같은 형태로 출력~) */

more 명령어를 이용하면, 매우 큰 파일도 페이지 단위로 출력할 수 있으며, 화면에서 스페이스바나 엔터키를 이용해 페이지를 이동할 수 있습니다.

이 명령어는 less 명령어와 함께 사용하면 더욱 효율적으로 파일을 관리할 수 있습니다.

하지만, 이 명령어를 사용할 때는 페이지 단위로 출력하기 때문에, 파일의 내용을 전체적으로 파악하기 어려운 단점이 있습니다.

따라서, 파일 내용을 자세히 살펴볼 때는 less 명령어를 사용하는 것이 더욱 효율적일 수 있습니다.

 

[명령어 옵션]

옵션 설명
-n(숫자) 출력 행수를 지정
-c 위에서부터 한 행씩 지운 후 한 행씩 출력
-d 스페이스나 q를 누르라는 프롬프트를 출력
-f 보통은 긴 칼럼의 행은 화면에서 행 바꿈을 하여 새로운 행으로 계산되는데 -f 옵션은 새로운 행으로 계산 하지 않으며 화면이 행이 아닌 논리적인 행 수를 계산
-s 여러 개의 빈 공백행은 하나로 취급
-p 스크롤하지 않으며 화면을 지우고 출력
-u 밑줄 치기를 금지

 

cat & more CMD 차이점

# cat /etc/services
# more /etc/services

리눅스에서는 대부분의 정보를 명령어를 통해 확인할 수 있습니다. 이때 자주 사용하는 명령어 중 하나가 cat과 more입니다.

cat 명령어는 파일의 전체 내용을 한번에 출력하는 반면, more 명령어는 파일의 내용을 페이지 단위로 출력합니다.

결과적으로 more 명령어를 사용하면 모든 내용을 확인할 수 있습니다.

more 명령어에는 다양한 옵션이 있습니다.

-n 옵션을 사용하면 출력할 행 수를 지정할 수 있으며, -c 옵션을 사용하면 출력할 때 한 행씩 지우면서 출력합니다.

이 외에도 -d, -f, -s, -p, -u 등의 옵션을 사용할 수 있습니다.

more 명령어를 사용할 때 "--More--(20%)"와 같이 현재 확인한 내용의 비율을 보여주는데, 엔터키를 누르면 한 줄씩 넘어가고 스페이스바를 누르면 페이지 단위로 넘어갑니다.

또한, less 명령어와 함께 사용하면 더욱 효율적으로 정보를 확인할 수 있습니다.

따라서, 파일의 내용을 확인할 때는 more 명령어를 사용하는 것이 더욱 효율적입니다.

하지만, 파일의 크기가 작은 경우에는 cat 명령어를 사용하여 빠르게 정보를 확인할 수도 있습니다.

 

 "CMD | more" 형식 실습

# CMD        (EX: # help)               /* 쉘 내부(내장) 명령어의 목록 확인 */
# CMD | more (EX: # help | more)

# ps -ef | more
# cat /etc/services | more
# rpm -qa | more
# cat /etc/services | more / * 상단부터 출력한다 */
---------------------------------------------------
# /etc/services:
# $Id: services,v 1.42 2006/02/23 13:09:23 pknirsch Exp $
#
# Network services, Internet style
#
# Note that it is presently the policy of IANA to assign a single well-known
# port number for both TCP and UDP; hence, most entries here have two entries
# even if the protocol doesn't support UDP operations.
# Updated from RFC 1700, ``Assigned Numbers'' (October 1994).  Not all ports
# are included, only the more common ones.
--More--
---------------------------------------------------

# more /etc/services
---------------------------------------------------
# /etc/services:
# $Id: services,v 1.42 2006/02/23 13:09:23 pknirsch Exp $
#
# Network services, Internet style
#
# Note that it is presently the policy of IANA to assign a single well-known
# port number for both TCP and UDP; hence, most entries here have two entries
# even if the protocol doesn't support UDP operations.
# Updated from RFC 1700, ``Assigned Numbers'' (October 1994).  Not all ports
# are included, only the more common ones.
--More--(0%)                          /* 0% 확인 */
---------------------------------------------------

more 명령어는 긴 파일을 한 번에 한 화면씩 출력하면서 스크롤하지 않고도 텍스트를 읽을 수 있도록 도와줍니다.

이 명령은 스페이스바를 눌러 페이지 단위로 스크롤할 수 있어서 스크롤을 자주 하는 경우에 유용합니다.

예를 들어 ps -ef | more를 입력하면 실행 중인 프로세스 목록이 표시되고 스페이스 바를 누르면 페이지 단위로 스크롤할 수 있습니다.

또한 cat /etc/services | more를 입력하면 서비스 파일의 내용이 페이지 단위로 표시되며, more 명령은 본 파일의 확인된 비율을 표시합니다.

more 명령어는 -n 옵션을 사용하여 출력할 행 수를 지정하고, -c 옵션을 사용하여 출력하는 동안 행을 제거하고, -d 옵션을 사용하여 스크롤 또는 종료를 표시하고, -f 옵션을 사용하여 긴 줄을 분할하지 않고, -s 옵션을 사용하여 여러 빈 줄을 하나로 취급하고, -p 옵션을 사용하여 출력하기 전에 화면을 지우고, -u 옵션을 사용하여 텍스트에 밑줄을 그리지 않을 수 있습니다.

cat 명령어는 한 번에 파일 전체를 출력합니다. 그러나 작은 파일의 경우 cat을 사용하면 더 빠르게 사용할 수 있습니다. more를 사용할 때는 다양한 키보드 키를 사용하여 출력을 탐색할 수 있습니다.

b를 입력하면 이전 화면으로 이동하고, n을 입력하면 검색어의 다음 발생을 찾습니다.

q를 입력하면 more 명령을 종료합니다.

총적으로 more 명령어를 사용하면 다른 명령과 함께 사용할 때 효율적으로 긴 파일을 볼 수 있습니다. 이 명령어는 터미널에서 파일을 읽을 때 매우 유용합니다.

 

more 안에서 사용할 수 있는 여러 가지 키보드 키 값

more화면 창에서 h 또는 ?를 치면 아래와 같은 화면이 나오며 여러 가지 기능을 확인 할 수 있다.

Star (*) indicates argument becomes new default.
-------------------------------------------------------------------------------
<space>                 Display next k lines of text [current screen size]
z                       Display next k lines of text [current screen size]*
<return>                Display next k lines of text [1]*
d or ctrl-D             Scroll k lines [current scroll size, initially 11]*
q or Q or <interrupt>   Exit from more
s                       Skip forward k lines of text [1]
f                       Skip forward k screenfuls of text [1]
b or ctrl-B             Skip backwards k screenfuls of text [1]
'                       Go to place where previous search started
=                       Display current line number
/<regular expression>   Search for kth occurrence of regular expression [1]
n                       Search for kth occurrence of last r.e [1]
!<cmd> or :!<cmd>       Execute <cmd> in a subshell
v                       Start up /usr/bin/vi at current line
ctrl-L                  Redraw screen
:n                      Go to kth next file [1]
:p                      Go to kth previous file [1]
:f                      Display current file name and line number
.                       Repeat previous command
-------------------------------------------------------------------------------

spacebar : 매뉴얼 페이지에서 한 화면 단위로 넘어 갈 때 사용
Enter : 매뉴얼 페이지에서 한 라인씩 넘어 갈 때 사용
b : Back Screen, 한 화면 전 화면으로 넘어갈 때 사용
/pattern : 특정한 패턴을 빨리 찾을 때 사용
n : Next, 특정한 패턴을 찾은 후 다음 번째 똑같은 문자열을 찾을 때 사용
h : help 매뉴얼 페이지 안에서 사용 할 수 있는 명령어 소개
q : quit, 빠져나옴

사용자 문서에는 매뉴얼 페이지를 탐색하는 방법에 대한 유용한 가이드가 있습니다.

이 가이드에서는 페이지를 이동하는 데 사용할 수 있는 다양한 명령 및 바로 가기 키가 설명되어 있습니다.

예를 들어, 다음 k 줄을 표시하려면 스페이스바를 누르거나 "z"를 입력할 수 있습니다.

k 줄을 스크롤하려면 "d" 또는 "ctrl-D"를 누를 수 있습니다. 대신 "s"를 눌러 앞으로 k 줄을 건너 뛸 수도 있습니다.

또한, 특정한 줄 번호로 이동하거나 패턴을 검색하거나 현재 줄에서 vi를 열 수 있는 기타 많은 유용한 명령이 있습니다.

이러한 명령을 사용하여 매뉴얼 페이지에서 빠르고 쉽게 원하는 정보를 찾을 수 있습니다.

반응형