(Linux)편집기
[카카오 클라우드 스쿨] VIM, SED 등의 편집기에 대해 학습한다.
- gedit
- runlevel 5에서 동작하는 애플리케이션
- 따라서 그래픽 환경이 없다면 작동하지 않음
- (runlevel 3 CLI 환경에서 작동하지 않음)
- 편집기능이 부족함
- 따라서 우리는 더 괜찮은 편집기를 사용해야 함
- 행단위 편집기
- 프롬프트 상에서 파일을 편집하고, 해당 내용을 파일로 전송하는 형태
- sed(자주 쓰임)
- 화면단위 편집기
- 직접 파일을 화면에 모드 열어두고 편집하는 형태
- emacs - 전문가용
- vi(m) - 일반적으로 널리 사용되는 편집기
1 . 행 단위 편집기 - SED
- 참고하면 좋다: https://reakwon.tistory.com/164
- 파일을 열지 않고 셸 상에서 특정 단어를 변경하는 등 수정이 가능하다
[root@srv7 0720]# sed -i 's/root/hello/g' anaconda-ks.cfg
- -i: inplace
- s: 바꾼다(치환)
- root -> hello 단어 치환한다
- globally: 모든 단어에 적용한다 (없을 경우 첫 번째 문자열만 변경)
1 . 특정 단어 하단에 내용 추가하기
- 대괄호 있을 경우 역슬래시 사용
[root@srv7 0721]# sed -n -e '/insert/a\inserted' -e '1,$p' hi.txt
[root@mainserver 0721]# sed -i -r -e "/\[database\]/a\5.5.5.5" a.txt
2 . 변수 사용해서 치환하기
- 큰 따옴표 사용해야 함
[root@srv7 0720]# edit=hi
[root@srv7 0720]# sed -i "s/hello/$edit/g" anaconda-ks.cfg
3 . httpd 포트 수정해 보기
- httpd의 기본포트 80을 수정해 보자
[root@srv7 0720]# grep Listen /etc/httpd/conf/httpd.conf
# Listen: Allows you to bind Apache to specific IP addresses and/or
# Change this to Listen on specific IP addresses as shown below to
#Listen 12.34.56.78:80
Listen 80
[root@srv7 0720]# sed -i 's/Listen 80/Listen 8888/' /etc/httpd/conf/httpd.conf
- 하지만 서비스 재실행 시 오류가 발생함
4 . SELinux 비활성하기
- /etc/selinux/config -> 들어가 보면 기본 포트밖에 못 쓰드록 되어 있음 (enforcing)
- 따라서 이를 disabled 로 바꾸어서 다른 포트(8888)를 사용할 수 있도록 해야 함
- 해당 파일 수정 후, 즉시 종료하도록 setenforce 0
[root@srv7 0720]# getenforce
Enforcing
[root@srv7 0720]# cat /etc/selinux/config
---
SELINUX=enforcing
---
[root@srv7 0720]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
[root@srv7 0720]# setenforce 0
[root@srv7 0720]# getenforce
Permissive
[root@srv7 0720]# systemctl restart httpd
리눅스에서의 보안
- firewalld
- 외부로 나가는 것(originate), 안으로 들어오는 것(terminate), 가로지르는 것(forwarded transit) 세 가지가 담당함
- SELinux
- 내부자원으로의 접근 관리를 담당한다
2 . 화면 단위 편집기 (VIM)
- VI의 업그레이드 버전 VIM
- 사실상 내부적으로 SED가 내장되어 있는 형태
- 배포판에는 VIM이 설치되어 있지 않은 경우가 많음
- 이 경우, VIM을 설치한 뒤, .bashrc에서 alias vi=’vim’ 을 설정해 두는 것이 좋음
- (vi 실행 시 vim이 실행되도록 한다, 재부팅 시에도 유지됨)
1. 명령 모드
- i, o: 입력 모드로 전환
- hjkl: 이동
- ^: home
- $: end
- gg: 맨 처음 행으로
- G: 맨 마지막 행으로
- 10G: 열 번째 행으로 이동
- dG: 현재부터 마지막까지 지우기
- dd: 한즐 제거
- 10dd: 열줄 제거
- yy: 복사하기
- 3yy: 세줄 복사
- p: 붙이기
- u: undo
2. 입력 모드
- esc: 명령 모드로 전환
- : 마지막 행 모드로 전환
3. 마지막 행 모드
- wq: 저장, 종료
- wq!: 강제 저장, 종료
- set nu: 번호 출력
- /[검색할 단어]: 단어 검색
- n: 다음 단어 검색
- N: 이전 단어 검색
- 실습
- httpd 메인 페이지 파일(index.html)이 없으면 다른 페이지 파일(main.html)으로 연결되게끔 함
- index를 main으로 바꾸어도 잘 접속되는 것을 확인함
[root@srv7 ~]# vi /etc/httpd/conf/httpd.conf
---
DirectoryIndex index.jsp index.html main.html
---
[root@srv7 ~]# mv /var/www/html/index.html /var/www/html/main.html
vim 실습 - 네트워크 인터페이스 수정
- vi 편집기를 이용하여 네트워크 인터페이스의 이름 변경하기
- CentOS7 버전 이후로 인터페이스의 이름은 다음의 과정을 통해 결정된다
- CentOS7 이전: eth0, eth1..(연결)
- CentOS7 이후: ens(slot) -> enp(port) -> eno(bios name)
- 그러나, 우리는 우리가 직접 입력한 인터페이스 이름을 사용하고 싶다
- eth0으로 변경해 보자!
1. bios 이름 및 if이름으로 설정하지 않겠다고 수정
[root@srv7 0721]# vi /etc/default/grub
---
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet net.ifnames=0 biosdevname=0"
2. 인터페이스명 변경
- ifcfg-ens32 이름을 ifcfg-eth0 로 수정
[root@srv7 0721]# cd /etc/sysconfig/network-scripts/
[root@srv7 network-scripts]# ls ifcfg-*
ifcfg-ens32 ifcfg-lo
[root@srv7 network-scripts]# mv ifcfg-ens32 ifcfg-eth0
[root@srv7 network-scripts]# vi ifcfg-eth0
---
TYPE=Ethernet
BOOTPROTO=none
NAME=eth0
DEVICE=eth0
ONBOOT=yes
DNS1=8.8.8.8
IPADDR=192.168.1.105
PREFIX=24
GATEWAY=192.168.1.1
- ETHERNET
- frame 처리가 가능한 포트 => L3 포트
- L3: Router Port (IP 패킷 해석이 가능)
- L2: IP가 들어가지 않음 (스위치 같은 친구들)
- BOOTPROTO: static (dhcp X)
- NAME, DEVICE: eth0으로 설정
3. grub 파일에 적용, 재부팅
[root@srv7 network-scripts]# grub2-mkconfig -o /boot/grub2/grub.cfg
[root@srv7 network-scripts]# reboot
4. 결과
- 반영이 잘 된것을 확인할 수 있다
- 물론 이름에 불과하므로 eth0 말고도 apple, hello 등으로 확인할 수 있다
[root@srv7 ~]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
[root@srv7 ~]# ping 8.8.8.8