본문 바로가기
모의해킹 침해대응 과정/Linux 기초

리눅스 기초때기 2일차. / CAT, MORE, HEAD,TAIL

by 알거음슴 2021. 3. 31.

 

cat

파일의 내용을 화면에 출력

 

1. 형식

 [cat] [OPTIONS] [file]

 

2. 옵션

 cat -n : 파일의 내용에 줄번호를 부여해서 출력함

 cat file1 file2 > file3 : file1,2 를 합쳐서 file3으로 합침

 

3. 실습

 1) cat 을 활용해서 etc/passwd 의 파일을 화면에 출력해보자

[root@server1 /test]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
 ..... 중략 .....

 2) cat -n 을 활용해서 etc/passwd 의 파일을 화면에 출력해보자

[root@server1 /test]# nl /etc/passwd
     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

 ..... 중략 .....

 * 줄번호가 부여됨을 확인할 수 있다. (CMD nl 과 같은기능)

 3) cat을 활용하여 file1,2 를 합쳐서 file 3을 만들어보자

[root@server1 /test]# echo 1111
1111
[root@server1 /test]# echo 1111 > file1
[root@server1 /test]# echo 2222
2222
[root@server1 /test]# echo 2222 > file2
[root@server1 /test]# ls
.  ..  file1  file2
[root@server1 /test]# 
[root@server1 /test]# cat file1 file2
1111
2222
[root@server1 /test]# cat file1 file2 > file3
[root@server1 /test]# ls
.  ..  file1  file2  file3

[root@server1 /test]# cat file3
1111
2222

 * file1과 2을 순서대로 입력 시 내용이 합쳐 출력되나 파일생성되진않음 '>' 의 기호를 활용시 파일을 만들고 또한 내용을 합쳐진다는걸 확인 할 수 있다.

 * 파일을 쪼개고 싶다면 split 라는 명령어 활용시 쪼갤 수 있다.

 

[참고] 바이너리 파일의 경우 cat 으로 열지 않는다.

 바이너리 파일 : 순수 0과 1로 이루어진 파일로 글자의 경우 조합으로 이루어 져야하나 해당 해석을 할 수 없기에 cat으로 출력시 파일의 내용이 깨져서 보여진다. 해당사항에는 strings -f CMD를 활용하여야만 출력가능. 즉 cat는 바이너리 파일을 열 수 없다. (열어도 해독이 안됨)

 

 

more

파일의 양이 많을경우 활용, 페이지단위로 끊어서 화면에 내용을 출력함.

 

1. 형식

 [more] [file]

 

2. 실습

 1) /etc/services 를 cat 과 more 를 비교하여 열어보자.

 * 내용이 너무 많아 커맨드 입력창은 생략, 직접 입력해보면 안다. cat 경우 환경의 사양에 따라서 모든 내용을 출력할 수 없다, 그럴경우 나눠서 출력하는 more 를 활용하면 된다.

 

[참조] more 의 주요 활용처 (출력량이 많은 CMD 혹은 file)

 1) ps -ef | more

 2) cat /etc/services | more

 3) rpm -qa | more

 4) systemctl list-unit-files = | more 의 기능이 내장되어있음.

 5) netstat -antup | more

 * 실제 작업중 cat 으로 파일을 열었을 경우 | (파이프기호) 와 more 를 활용해서 나눠보는 기능으로 자주 사용된다.

 * | (파이프기호) : CMD1 | CMD2 의 경우 CMD1 의 내용을 기반으로 CMD2로 실행한다는 의미임. 즉 CMD1 | more 의 경우 [more] [file] 의 형식을 띄어야 하나, 앞 CMD1 의 내용이 [file]으로 활용되어 추가적인 [file]의 내용을 입력하지 않아도 된다.

 

 

 

head

지정된 파일의 상단 10줄을 표기함 (defult)

 

1. 형식

 [head] [OPTIONS] [file]

 

2. 옵션

 head -n : n(출력량) 을 원하는 값으로 지정할 수 있다 기본은 10줄이지만 5 입력시 5줄만 출력

 

3. 실습

 1) head -n 과 | 를 활용하여 많은양의 출력량의 해드라인과 함깨 출력하자. 

[root@server1 /test]# ps -ef | head -1 ; ps -ef | grep rsyslogd
UID          PID    PPID  C STIME TTY          TIME CMD
root        1078       1  0 09:52 ?        00:00:01 /usr/sbin/rsyslogd -n
root        4228    2816  0 11:02 pts/0    00:00:00 grep --color=auto rsyslogd
 * 위의 내용은 너무 길다. 그래서 주로 활용되는 정보는 alies 를 활용한다.

 2) alies 로 위 출력 예제를 pps로 등록하여 출력해보자.

[root@server1 /test]# alias pps='ps -ef | head -1 ; ps -ef | grep $1'
[root@server1 /test]# pps rsyslogd
UID          PID    PPID  C STIME TTY          TIME CMD
root        1078       1  0 09:52 ?        00:00:01 /usr/sbin/rsyslogd -n
root        4295    2816  0 11:05 pts/0    00:00:00 grep --color=auto rsyslogd
 * alias 내 $1 같은경우 1의 환경변수가 아닌 정의된 pps CMD 의 바로 뒤에 오는 첫번재 인자값이라는 뜻으로 사용된다. 즉 alias 정의 후 pps rsyslogd 중 rsyslogd 라는 단어가 $1 의 1자리에 들어가게 된다.

 

 

tail

파일의 끝에 있는 10줄을 출력해준다 (defult)

 

1. 형식

 [tail] [OPTIONS] [file]

 

2. 옵션

 tail -n n1 : n1(출력값) 최하단 n 값만큼 출력함

 tail -n +n1 : n1(출력값) 최상단 n값 줄 부터 남은 전체를 출력함

 taul -f : 파일 내 추가정보가 들어올때 마다 화면에 출력함

 

3. 실습

 1) tail -n 을 활용하여 최하단 5줄과 최상단 2줄제외 나머지를 출력하는 경우를 보자.

 [root@server1 /test]# tail -n 5 /etc/passwd
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
rngd:x:975:974:Random Number Generator Daemon:/var/lib/rngd:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
fadora:x:1000:1000:fadora:/home/fadora:/bin/bash
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin

 

 [root@server1 /test]# tail -n +2 /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdow

 ..... 중략 .....

 

2) tail -f 를 활용하여 log 파일을 실시간 모니터링 해보자

* 선행 telnet 서비스를 open 해야한다

[root@server1 /test]# yum -y install telnet telnet-server

[root@server1 /test]# systemctl start telnet.socket

[root@server1 /test]# systemctl enable telnet.socket

-> 이후 텔넷으로 다른 사용자에 접속해보자.

[root@server1 /test]# telnet localhost

[fedora@server1 ~]$ id
uid=1000(fadora) gid=1000(fadora) groups=1000(fadora)

 -> 이제 실습을 진행해보자.

* tail -f 를 이용하여 /var/log/messages 에 추가되는 로그파일을 실시간으로 출력받아 보겠다.

TERM1 [root@server1 /test]# tail -f /var/log/messages

으로 실시간 모니터링을 준비하고

TERM2 에 새로운 user을 만들고 또한 telnet localhost 로 접속하고 TERM1 을 비교하며 진행해보자. 식시간으로 로그파일들이 정의되는걸 볼수 있을것이다.

 

[참조] 서버를 실시간적으로 모니터링

 top (# gnome-system-monitor) -> windows 의 작업관리자 같은곳.

 tail -f /var/log/messages (# gnome-logs) -> windows 로그뷰 같은곳.

 journalctl -f ( 서버 log 모니터링 )

* 특정 값만 지속적으로 모니터링 하는 방법.

  tail -f /var/log/messages | grep -i DHCP

  tail -f /var/log/messages | grep -i DNS

  tail -f /var/log/messages | grep oracle

  tail -f /var/log/messages | grep wasuser

  tail -f /var/log/messages | egrep -i '(warn|fail|error|crit|alert|emerg)'

 등등으로 다양하게 grep과 tail -f 를 활용하여 터미널로 모니터링이 가능하다.