grep ( 및 sed awk 등등 ) 을 사용한 정규표현식은

문자 및 데이터를 가공하는 시작과, 마지막 끝이라고 봐도 됩니다.

기초과정에서 복잡하게 생각할 필요는 없고

RHCSA 에서는 간단하게 Apache Log 가공하는 형식 정도만 짚고 넘어가도록 하겠습니다. 


[ AWK ] Apache access Log 에서 접속 IP 숫자별로 정렬하기

1) 해당 Log 출력

root@Web1:~# cat /usr/local/apache2/logs/access_log 

210.90.168.131 - - [14/Mar/2019:00:09:21 +0900] "GET / HTTP/1.1" 200 44

210.90.168.131 - - [14/Mar/2019:00:09:21 +0900] "GET /favicon.ico HTTP/1.1" 404 209

210.90.168.131 - - [14/Mar/2019:00:09:32 +0900] "GET /apm_ver.php HTTP/1.1" 200 20

14/Mar/2019:16:07:42 +0900] "GET /favicon.ico HTTP/1.1" 404 209

211.115.203.215 - - [14/Mar/2019:16:07:45 +0900] "GET /php_ver.php HTTP/1.1" 404 209

.
.

2) 첫번째 줄에 있는 IP 만 추출하기 

파이프로 awk '{ print $1 }' 추가

root@Web1:~# cat /usr/local/apache2/logs/access_log | awk '{ print $1 }' 

210.90.168.131

210.90.168.131

211.115.203.215

211.115.203.215

.
.

3) 동일 IP들의 수량으로 출력하기
 
파이프로 uniq -c 입력하여 동일패턴의 갯수화 및 높은 수량대로 정렬 sort -rn 

root@Web1:~# cat /usr/local/apache2/logs/access_log | awk '{ print $1 }' | uniq -c | sort -rn | head -n 5
    470 115.159.107.118
    468 111.230.52.108
    452 182.253.72.44
    452 124.156.176.170
    451 148.70.140.176

access.log 에 가장 많이 보이는 IP 5개가 수량으로 추출.


[grep] 

-i  : 대소문자 가리지 않음

-e : 확장된 정규 표현식 ( extended regex ) 사용 

-v : 매칭된 문자를 제외하고.


ex) /etc/passwd

root@Web1:~# grep "nologin" /etc/passwd

"nologin" 이 포함된 라인만 출력. 

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

mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

operator:x:11:0:operator:/root:/sbin/nologin

games:x:12:100:games:/usr/games:/sbin/nologin

ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

nobody:x:99:99:Nobody:/:/sbin/nologin

systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin

dbus:x:81:81:System message bus:/:/sbin/nologin

polkitd:x:999:998:User for polkitd:/:/sbin/nologin

sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

postfix:x:89:89::/var/spool/postfix:/sbin/nologin

chrony:x:998:996::/var/lib/chrony:/sbin/nologin

tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin

apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin


root@Web1:~# grep -v "nologin" /etc/passwd

nologin 이 없는 라인만 출력.

root:x:0:0:root:/root:/bin/bash

sync:x:5:0:sync:/sbin:/bin/sync

shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

halt:x:7:0:halt:/sbin:/sbin/halt

myungin.baek:x:1000:1000::/home/myungin.baek:/bin/bash

mysql:x:1001:1001::/home/mysql:/bin/false

guest:x:1002:1002::/home/guest:/bin/bash



root@Web1:~# cat /usr/local/apache2/conf/httpd.conf | grep -v "#" | grep -v "^$"

# 들어가는 주석 라인 및 ^$ (시작과 끝이 같은 행. 즉 빈줄 ) 제거 출력.

ServerRoot "/usr/local/apache2"
Listen 80
LoadModule authn_file_module modules/mod_authn_file.so
.
.



블로그 이미지

늙은M군

개인 저장공간입니다. 해당 일부 과정들을 공인 인터넷 환경에서 악성적으로 응용할 시 피해가 발생할 수 있으며, 그에 대해 책임은 사용자에게 있습니다!! 주의해주세요.

,


역시 시험 실기문제로 나오는 것이 아닌,

리눅스의 기본 사용법이므로 아주 간략하게만 정리 하겠습니다.


입출력 리다이렉션은 표준 출력(모니터) 가 아닌, 

다른 방향으로도(파일, 명령어의 뒷부분, 휴지통 등.. )가리킬 수 있는 지정형식입니다.


ex 1 )   >            전방에 기입한 명령어의 결과를 뒤에 기입한 파일로 보낸다. 

기존의 파일이 존재할 시,  덮어쓰는 점 유의. 

[root@TEST1 ~]# df -Th > df.txt          

화면에 df -Th 를 출력하지 않고, 바로 df.txt 라는 파일로 보냄 

[root@TEST1 ~]# cat df.txt

Filesystem                     Type      Size  Used Avail Use% Mounted on

/dev/sda3                      xfs       6.7G  4.4G  2.4G  66% /

devtmpfs                       devtmpfs  486M     0  486M   0% /dev

tmpfs                          tmpfs     496M     0  496M   0% /dev/shm

tmpfs                          tmpfs     496M   20M  476M   5% /run

tmpfs                          tmpfs     496M     0  496M   0% /sys/fs/cgroup

/dev/mapper/datastore-database xfs       2.4G   33M  2.4G   2% /database

/dev/sda1                      xfs       297M  146M  152M  49% /boot

tmpfs                          tmpfs     100M   36K  100M   1% /run/user/0

/dev/sr0                       iso9660   918M  918M     0 100% /run/media/root/CentOS 7 x86_64



ex 2 )   >>   전방에 기입한 명령어의 결과를 후반의 파일에 추가. 

[root@TEST1 ~]# uname -a >> df.txt      

df.txt 내용뒤에 명령어 결과를 추가

[root@TEST1 ~]# cat df.txt

Filesystem                     Type      Size  Used Avail Use% Mounted on

/dev/sda3                      xfs       6.7G  4.4G  2.4G  66% /

devtmpfs                       devtmpfs  486M     0  486M   0% /dev

tmpfs                          tmpfs     496M     0  496M   0% /dev/shm

tmpfs                          tmpfs     496M   20M  476M   5% /run

tmpfs                          tmpfs     496M     0  496M   0% /sys/fs/cgroup

/dev/mapper/datastore-database xfs       2.4G   33M  2.4G   2% /database

/dev/sda1                      xfs       297M  146M  152M  49% /boot

tmpfs                          tmpfs     100M   36K  100M   1% /run/user/0

/dev/sr0                       iso9660   918M  918M     0 100% /run/media/root/CentOS 7 x86_64

Linux TEST1 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux                 uname -a 결과값이 df.txt 파일 뒤에 추가됌. 

 


ex 3 ) <  전방의 명령어에 후반의 내용을 추가.

[root@TEST1 ~]# cat < df.txt                 

df.txt 의 내용을 cat 명령어 뒤에 기입한 것과 같은 효과

Filesystem                     Type      Size  Used Avail Use% Mounted on

/dev/sda3                      xfs       6.7G  4.4G  2.4G  66% /

devtmpfs                       devtmpfs  486M     0  486M   0% /dev

tmpfs                          tmpfs     496M     0  496M   0% /dev/shm

tmpfs                          tmpfs     496M   20M  476M   5% /run

tmpfs                          tmpfs     496M     0  496M   0% /sys/fs/cgroup

/dev/mapper/datastore-database xfs       2.4G   33M  2.4G   2% /database

/dev/sda1                      xfs       297M  146M  152M  49% /boot

tmpfs                          tmpfs     100M   36K  100M   1% /run/user/0

/dev/sr0                       iso9660   918M  918M     0 100% /run/media/root/CentOS 7 x86_64

Linux TEST1 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

 

 


파이프 ( | )  

[root@TEST1 ~]# cat df.txt  | grep -i G

df.txt 의 내용 중 "G"가 포함된 라인만을 출력. 

/dev/sda3                      xfs       6.7G  4.4G  2.4G  66% /

tmpfs                          tmpfs     496M     0  496M   0% /sys/fs/cgroup

/dev/mapper/datastore-database xfs       2.4G   33M  2.4G   2% /database

Linux TEST1 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux


 

 


파일 디스크립터 ( 2> ) 

0 : 키보드  1 : 모니터 표준 출력  2 : 모니터 표준 (에러) 출력 의 의미로 사용합니다. 

파일 리다이렉션에서 가령 df -Th > df.txt 로 하면, 파일 저장만 되고 아무 표시도 안 되는데 2>&1 구문을 추가하면 에러 발생시에도, 저장 및 모니터로 출력 하라는 표현이 됩니다.

다양한 방법이 가능하며 쉘 스크립팅에서 출력 용도로 유용하게 사용할 수 있습니다.  

[root@TEST1 ~]# dffa > dd.txt 2>&1

dffa 라는 명령어 실행 결과를 dd.txt 에 기록하라는 의미지만, 2>&1 없을시 

해당 출력이 error 일 경우 모니터에 출력만 하고 dd.txt에 아무 기록이 되지 않음. 

2>&1 일 경우 해당 에러값을 그대로 리다이렉션 합니다. 

[root@TEST1 ~]# cat dd.txt

bash: dffa: command not found


 


블로그 이미지

늙은M군

개인 저장공간입니다. 해당 일부 과정들을 공인 인터넷 환경에서 악성적으로 응용할 시 피해가 발생할 수 있으며, 그에 대해 책임은 사용자에게 있습니다!! 주의해주세요.

,


시험장에서는 VM 던져주니까 별도의 설명은 필요하지 않을 것 같습니다.

혹여 Shell 변경이 궁금하신 분은


chsh 명령어 하나 알면 되겠네요.

/etc/passwd 에서 유저의 shell 을 직접 수정해도 동일한 결과입니다.

root@TEST1:/# chsh -l           사용가능한 shell 종류 리스트 나열 

/bin/sh

/bin/bash

/usr/bin/sh

/usr/bin/bash 



root@TEST1:/# chsh test               test 유저의 기본 shell 변경

Changing shell for test.

New shell [/bin/bash]: /bin/sh

Shell changed.


root@TEST1:/# cat /etc/passwd | grep test

test:x:1000:1000:test:/home/test:/bin/sh


root@TEST1:/# su test                         test 유저로 로그인.

sh-4.2$ 



블로그 이미지

늙은M군

개인 저장공간입니다. 해당 일부 과정들을 공인 인터넷 환경에서 악성적으로 응용할 시 피해가 발생할 수 있으며, 그에 대해 책임은 사용자에게 있습니다!! 주의해주세요.

,

RHCSA는 RedHat 에서 주관하는 RHEL 초급 자격증에 해당합니다.


등록은 하기의 주소에서 하거나 ( 등록하면 보통 노브레이크에서 시험을 봅니다. ) 

솔XXX , ITXX 같은 공인 시험센터에서 교육+시험을 동시에 할 수 있습니다. 

(공식 시험일정과 다른 경우 있습니다 ) 

[ Redhat 링크 바로가기



RHEL ( CentOS 로 해도 무방 합니다 ) 7.x 기준으로 트레이닝하면 됩니다.  

시험 도중에는 외부 인터넷이 되지 않으므로 man 명령을 적극 활용해야 합니다. 

과정이 필요한 부분은 별도의 링크 포스팅으로.

그외에는 필요 명령어 위주로 정리합니다. 

RHCSA 시험 대비를 위한 학습 포인트

Red Hat은 목표를 추가, 수정 또는 제거할 권리가 있습니다. 그러한 변경이 있을 경우, 이 문서의 개정을 통해 사전에 공지됩니다.

RHCSA 시험 응시자는 그 어떤 도움 없이 크게 세 가지 범주로 구분한 다음 사항을 수행할 수 있어야 합니다.

기본적인 툴 이해 및 사용 ( 시험에 안나옴 ㅡㅡ

참고: Red Hat은 응시자가 이 시험의 목표를 충족하는 능력을 보유하고 있는지를 평가하기 위한 목적으로 Red Hat Enterprise Linux에 포함되지 않은 애플리케이션을 이 시험에 사용할 수도 있습니다.

실행 시스템 운영 ( 여기부턴 중요합니다
  • 정상적으로 시스템 부팅, 재부팅 및 종료
  • 시스템을 다른 대상에서 직접 부팅
  • 시스템에 액세스하기 위해 부팅 프로세스 인터럽트
  • CPU/메모리 집약적인 프로세스를 파악하고 renice를 통해 프로세스 우선 순위를 수정하고 프로세스 종료
  • 시스템 로그 파일 및 저널 검색 및 해석
  • 가상 시스템의 콘솔에 액세스
  • 가상 시스템 시작 및 중지
  • 네트워크 서비스 시작, 종료 및 상태 점검
  • 시스템 간에 안전하게 파일 전송
로컬 스토리지 구성
파일 시스템 생성 및 구성
  • vfat, ext4 및 xfs 파일 시스템을 생성, 마운트, 마운트 해제 및 사용
  • CIFS와 NFS 네트워크 파일 시스템을 마운트 및 마운트 해제
  • 기존 논리 볼륨 확장
  • 협업을 지원하도록 set-GID 디렉터리를 생성 및 구성
  • ACL(Access Control List) 생성 및 관리
  • 파일 권한 문제를 진단 및 수정
시스템 배포, 구성 및 유지 관리
  • 네트워킹 및 호스트명 분석을 정적 또는 동적으로 구성
  • at 및 cron을 사용하여 작업 스케줄링
  • 서비스 시작 및 중지, 부팅 시 자동으로 시작되도록 서비스 구성
  • 특정 대상 내로 자동 부팅하도록 시스템 구성
  • Red Hat Enterprise Linux 시스템을 가상 게스트로 설치
  • 부팅 시 가상 시스템을 실행하도록 시스템 구성
  • 부팅 시 자동으로 시작하도록 네트워크 구성
  • 시간 서비스 사용이 가능하도록 시스템 구성
  • Red Hat Network, 원격 리포지토리 또는 로컬 파일 시스템의 소프트웨어 패키지를 설치 및 업데이트
  • 커널 패키지를 적절하게 업데이트하여 시스템을 항상 부팅 가능하도록 유지
  • 시스템 부트로더 수정
사용자와 그룹 관리
  • 로컬 사용자 계정 생성, 삭제 및 수정
  • 로컬 사용자 계정을 위한 비밀번호 변경 및 비밀번호 기한설정 수정
  • 로컬 그룹과 그룹 멤버십 생성, 삭제 및 수정
  • 사용자와 그룹 정보에 대한 기존 인증 서비스를 사용하도록 시스템 구성
보안 관리
  • firewall-config, firewall-cmd 또는 iptables를 사용하여 방화벽 설정 구성
  • SSH에 대한 키 기반 인증 구성
  • SELinux에 대한 강제(enforcing) 및 허용(permissive) 모드 설정
  • SELinux 파일 및 프로세스 컨텍스트 목록화 및 파악
  • 기본 파일 컨텍스트 복구
  • 부울 설정을 사용하여 시스템 SELinux 설정 수정
  • 일상적인 SELinux 정책 위반을 진단 및 해결




블로그 이미지

늙은M군

개인 저장공간입니다. 해당 일부 과정들을 공인 인터넷 환경에서 악성적으로 응용할 시 피해가 발생할 수 있으며, 그에 대해 책임은 사용자에게 있습니다!! 주의해주세요.

,