이 글은 최주호님의 개발자를 위한 AWS DevOps 입문 [CI/CD 무중단 배포]를 통해 학습한 내용을 정리하여 작성합니다.
리눅스 명령어
Ubuntu Repository
리눅스 CLI 환경에서 특정 프로그램을 설치하고 싶을 때 해당 프로그램 사이트에서 다운 받는 것은 번거로운 일이다.
Ubuntu Repository를 사용하면 프로그램을 쉽게 설치할 수 있다.
예외
하지만 최근에 출시된 K라는 프로그램이 아직 Ubuntu Repository에 등록되지 않았을 수도 있다.
이때 K프로그램을 직접 설치하거나 PPA 저장소(개인 저장소)를 이용할 수 있다.
보통 PPA 저장소에는 해당 프로그램들이 빠르게 동기화 되어 있다.
PPA 저장소를 이용하기 위해서는 /etc/apt/sources.list.d 에 주소를 등록해주면 된다.
apt
apt-cache search tomcat
- apt-cache: APT 캐시를 관리하는 도구로, 패키지 정보를 검색하고 캐시에 저장한다.
- search: 패키지 목록에서 주어진 검색어와 일치하는 패키지를 찾는다.
- 따라서 apt-cache search tomcat 명령은 APT 패키지 목록에서 "tomcat"과 관련된 패키지를 검색하여 출력한다.
이렇게 검색된 패키지는 나중에 apt-get install 또는 apt install 등의 명령을 사용하여 설치할 수 있다.
파이프라인 사용
apt update -> 권한 없음
whoami
- 최상위 관리자(root)가 아니므로 저장소 목록을 갱신할 권한이 없다.
sudo apt update
- 관리자에게 권한을 부여받아 apt 리스트를 갱신한다.
sudo apt install -y tomcat9
포트 활성화 확인
netstat -nlpt
8080포트 상태가 LISTEN인 것을 확인할 수 있다.
8080포트 접속
현재 8080포트는 방화벽에 의해 막혀있기 때문에 접근하지 못한다.
인바운드 규칙 편집
8080 포트로 접속할 수 있도록 인바운드 규칙을 편집해야 한다.
TCP 방식으로 8080 포트에 누구나(Anywhere-IPv4) 접속할 수 있도록 규칙을 추가한다.
그 후 다시 8080포트에 접속하면 결과는 다음과 같다.
이전에 톰캣이 정상적으로 설치되어 동작하고 있는 것을 확인할 수 있다.
PPA(Personal Package Archive)
sudo apt search tomcat
현재 설치되어 있는 tomcat 버전은 9이다.
tomcat9을 삭제하고 tomcat8을 설치하는 과정에 대해 알아본다.
삭제
sudo apt remove tomcat9
- 설정 파일은 지우지 않는다.
sudo apt --purge remove tomcat9
- 설정 파일까지 모두 삭제한다.
그 후 동작 중인 포트를 확인해보면 8080 포트가 동작하지 않는 것을 확인할 수 있다. (톰캣이 정상적으로 삭제되었다)
설치
sudo apt install tomcat8
tomcat8이 패키지로 목록에 존재하지 않아 설치할 수 없다.
Personal Package Archives for Ubuntu
https://launchpad.net/ubuntu/+ppas
APT 저장소에 없는 것들은 위 사이트에서 찾으면 된다.
tomcat8을 검색한다.
우리 시스템에 추가하는 명령어가 제공된다.
잘못된 ppa 저장소 삭제
sudo add-apt-repository --remove ppa:rivergod/tomcat8.5
sudo apt-cache search tomcat
tomcat8이 새로 추가된 것을 확인할 수 있다.
sudo apt install tomcat8
tomcat이 정상적으로 설치된 것을 확인할 수 있다.
우분투 버전과 코드명 확인
lsb_release -a
프로세스
- cpu 1개 - 일하는 노동자 1명
- 프로세스 1개 - tomcat8 (서버 - 데몬) → 계속 실행 중! (while)
- 노동자 1명이 이 tomcat8 프로세스를 관리한다면?
- 카카오톡이라는 프로그램을 띄워봤자 사용 못 함 노동자가 1명이기 때문이다.
- 따라서 노동자 1명이 thread를 만든다.
- thread: 실, 수명
- 문맥 → 흐름
- 예를 들어 책을 20페이지를 읽다가 잠들면(sleep) 다음 부터는 21페이지를 읽어야 한다.(문맥, context)
- context는 전후사정을 의미한다.
Context Switching 시 주의할 점
Context switching(컨텍스트 스위칭)은 컴퓨터 시스템의 운영체제가 실행 중인 하나의 프로세스나 스레드의 상태를 저장하고 다른 프로세스 또는 스레드의 상태로 전환하는 과정을 말한다. 이 과정은 CPU가 여러 작업을 동시에 처리하는 멀티태스킹 환경에서 발생하며, 시스템 성능과 동작에 영향을 미치는 중요한 개념이다.
프로세스와 서비스
apt 명령어 설치(서비스 등록)를 진행하면 실행 파일을 직접 찾아서 실행할 필요가 없다.
- service 명령어 사용하지 말자
- systemctl 서비스 제어 명령
- service 명령어는 systemctl의 wrapper script이다.
- 데몬(while) 프로세스
- ps -ef: 지금 실행 중인 프로세스 확인
- 종료가 안될 경우 생길 수 있음 - 직접 강제 종료
- ex) 서비스 등록이 안 되어 있는 프로세스
- kill -9 PID(강제 종료)
- sigkill (강제종료): 프로세스 입장에서는 찝찝하게 종료됨
- 프로세스 안전하게 종료시키려면 위와 같이 sigkill을 통한 종료는 가급적 사용하지 말아야 한다.
- sigint (ctrl+c) == kill -2 pid
- kill pid
- sudo kill (-15) pid
- sigterm은 안전한 종료
- systemctl 입장에서는 exit된 것이고 안전한 종료 후 restart로만 실행됨
- 왜냐하면 systemctl 입장에서는 종료가 아님 중지 상태가 됨
- sigterm은 안전한 종료
- sudo kill PID로 프로세스를 강제종료 하면 active(exited) 상태가 됨 systemctl 입장에서 일시정지
- sudo systemctl start tomcat8로는 재시작 안 됨
- sudo systemctl restart tomcat8로 다시 시작할 수 있음
- sudo systemctl stop — + sudo systemctl start —
- 서비스에 등록이 안 되어 있으면 /etc/init.d/tomcat8을 실행시켜야 함
- 스크립트 짜서 사용 가능함
- grep -v 지정된 패턴과 일치하는 항목들 제외
- awk 레코드(행)을 공백 문자로 분리해 $1 첫 번째 필드, $2 두 번째 필드 이런 식으로 분리해서 처리할 수 있게 해줌
- “백틱은 치환 명령어”으로 감싼 부분을 실행 결과로 치환
- sudo kill `ps -ef | grep tomcat8 | grep -v grep | awk '{print $2}'
VI 에디터 사용법
- touch: 파일 생성
- vi(m) a.txt
명령행 모드
- :w 저장
- :q 에디터종료
- :q! 강제 에디터종료
- :wq 저장 후 종료
일반 모드
- 마우스 우클릭 외부 코드 붙여넣기
- shift+v 블럭지정
- x 현재 커서의 문자 삭제
- dd 현재 행 삭제
- yy 현재 행 복사
- p 붙여넣기
- u undo 기능
- ctrl + r redo 기능
- home 행의 맨 처음으로 이동
- $ 행의 맨 끝으로 이동
- ctrl + b 위로 한 화면 스크롤
- ctrl + f 아래로 한 화면 스크롤
[출처] 8. 리눅스 명령어 vim 사용법 (에디터)|작성자 metacoding
권한 설정
루트 비밀번호 설정
sudo passwd root
test1.txt 파일의 소유자가 root이다.
- 644 권한
- r: 4
- w: 2
- -: 0
chmod
- 권한을 변경하는 명령어
- ubuntu는 권한이 없다.ㅌ
chown
- 그룹의 소유자를 변경하는 명령어
파일 찾기
현재 tomcat이 설치되어 있다.
설치된 tomcat이 어디에 위치해 있는지 찾아본다.
sudo find / -name tomcat8
/etc/tomcat8
- server.xml, web.xml 파일이 존재한다.
/etc/default/tomcat8
- /etc/default/tomcat8은 파일이다.
/var/lib/tomcat8
- /var/lib/tomcat8 디렉토리 아래에는 webapps 디렉토리가 존재하고 내부에 root가 소유자인 index.html 파일이 존재한다.
권한 변경
- u+x
- "u"는 현재 사용자 (owner)를 의미하며, "+x"는 실행 권한을 추가한다는 의미이다.
- 따라서, 현재 사용자에게 실행 권한을 추가한다.
- g+wx
- "g"는 그룹을 의미하며, "+wx"는 쓰기와 실행 권한을 추가한다는 의미이다.
- 따라서, 파일이 속한 그룹에게 쓰기와 실행 권한을 추가한다.
- o+x
- "o"는 기타 사용자 (others)를 의미하며, "+x"는 실행 권한을 추가한다는 의미이다.
- 따라서, 다른 사용자에게 실행 권한을 추가한다.
하지만 이렇게 변경했다 해서 index.html 파일을 수정할 수는 없다.
왜냐하면 현재 나는 ubuntu이며 root 그룹에 소속되어 있지 않아, 기타 사용자(others)의 쓰기 권한이 필요하기 때문이다.
- 여기서 o=rw는 기타 사용자(others)의 권한을 읽기와 쓰기로 덮어쓴다는 의미이다.
그러면 이제 ubuntu도 index.html 파일을 수정할 권한을 얻었다.
index.html 파일 수정
그 후 8080 포트로 이동하면 다음과 같이 변경된 것을 확인할 수 있다.
포트 변경
- /var/lib/tomcat8/conf 디렉토리 아래 server.xml 파일이 존재한다.
- server.xml 파일 또한 ubuntu 권한으로 수정할 수 없다.
- 이번에는 sudo vi server.xml 명령어를 사용해 내용을 변경해본다.
- 8080 포트를 8000 포트로 변경하였다.
- 8000 포트에 접속이 되지 않는다.
주의!
설정 파일을 수정한 뒤에는 '재시작'해야 한다.
- 하지만 여전히 8000 포트로 접근할 수 없다.
- 이유는 aws의 방화벽 때문이다.
보안 그룹의 인바운드 규칙에 8000 포트를 추가해준다.
8000 포트로 접근하면 수정한 내용이 모두 반영된 것을 확인할 수 있다.
표준 입출력
로그
catalina.out
"catalina.out" 파일은 Tomcat 서버에서 발생하는 로그 메시지를 기록하는 로그 파일이다.
이 파일은 Tomcat 프로세스가 실행되는 동안에 계속해서 증가하며, 주로 다음과 같은 정보를 기록합니다:
- 에러 메시지: 예외, 오류 및 기타 문제로 인해 발생하는 오류 메시지가 기록됩니다.
- 접근 로그: 웹 애플리케이션에 대한 접근 기록이 기록됩니다. 클라이언트 IP 주소, 요청한 URL, HTTP 상태 코드 등이 포함될 수 있습니다.
- 디버그 정보: 개발 또는 디버깅 시 유용한 정보가 포함될 수 있습니다.
- 배치 작업 로그: 스케줄링된 작업 또는 배치 프로세스에 대한 로그 메시지가 포함될 수 있습니다.
"catalina.out" 파일은 주로 개발과 디버깅 단계에서 문제를 해결하기 위해 사용되며, 운영 환경에서는 주로 다른 로그 파일로 로그를 분리하여 관리하는 것이 일반적이다.
따라서 중요한 로그 정보를 분실하지 않도록 적기에 로그를 관리하는 것이 중요하다.
- tail
- "tail"은 파일의 끝 부분을 보여주는 명령어이다.
- 기본적으로 파일의 끝 10줄을 출력합니다.
- -f
- "-f" 옵션은 파일의 끝을 보여주는 것이 아니라, 실시간으로 파일의 변화를 모니터링하는 옵션이다.
- 즉, 파일에 새로운 내용이 추가될 때마다 실시간으로 보여준다.
터미널을 하나 더 열고 tomcat8을 재시작하면 실시간으로 변하는 파일을 모니터링 할 수 있다.
tail -f 명령어를 통해 특정 파일의 실시간 변경 내용을 모니터링 할 수 있다.
리눅스 표준 입출력
표준 입출력
- 표준 입력 스트림 stdin (Standard Input Stream)
- 표준 출력 스트림 stdout (Standard Output Stream)
- 오류 출력 스트림 stderr (Standard Error Stream)
표준 스트림
파일디스크립터 | 설 명 |
0 | 표준 입력 (standard input) |
1 | 표준 출력 (standard output) |
2 | 표준 에러 (standard error) |
sudo tail -f catalina.out 명령어를 통해 출력한 내용은 표준 출력 (standard output)이다.
표준 출력 변경
모니터에 표준 출력하던 내용을 특정 파일에 로그를 기록하도록 변경한다.
mylog.out 이라는 로그를 기록할 새로운 파일을 생성한다.
chmod 명령어로 mylog.out 파일의 권한을 변경하고 표준 출력을 변경한다.
sudo tail -f catalina.out > mylog.out
- >
- ">" 기호는 리다이렉션을 나타내며, 명령의 출력을 파일로 리다이렉션하는 데 사용된다.
그리고 다른 터미널로 mylog.out 파일 내용을 확인해보면 다음과 같다.
'AWS > AWS 배포' 카테고리의 다른 글
RSA 인증 (0) | 2023.07.04 |
---|---|
EC2서버 방화벽 (0) | 2023.07.04 |
EC2서버 맥(MAC) 접속 (0) | 2023.07.04 |
EC2 서버 임대 (0) | 2023.07.04 |
전산실 구축시 고려사항 (0) | 2023.07.02 |