참고자료 ) 클라우드 서비스 개발자를 위한 AWS로 구현하는 CI/CD 배포 입문
clear
터미널 화면을 비우는 명령어
pwd
현재 위치를 알려주는 명령어
디폴트 위치는 /home/사용자명 이다.

cd
- cd /
최상위 경로/h인 /로 이동

~ = 자기 홈 폴더 있으면

- cd ..

- cd 경로

ls
현재 폴더에 있는 모든 폴더와 파일을 보여주는 명령어

—help
명령어의 옵션과 사용법을 알려주는 옵션
- -약어
- —풀네임



d붙어있으면 디렉토리
l붙어있으면 바로가기 파일 (soft link)
- ls -l
- 상세 정보 보기

- ls -a
- 숨김 파일도 표시


vi
파일을 텍스트 에디터로 여는 명령어


cat
파일 안에 있는 내용 화면에 출력하는 명령어 (미리보기)

# = 주석
.bashrc 파일 = 사용자가 ubuntu 아이디로 로그인해서 접속할 때(보통 껐다가 켜면) 실행되는 파일 → 내가 로그인할 때마다 실행하고 싶은 일을 써놓으면 되는 곳 (로그인할 때 자동실행되는 스크립트)
mkdir
폴더 생성 명령어
그래픽이 없는 인터페이스인 CLI(Command Line Interface)에서는 응답이 없으면 성공을 의미한다.

touch
파일 생성 명령어

rm
폴더/파일 삭제 명령어
- -f : 강제 삭제 옵션
- -r : 폴더 내부의 파일까지 함께 삭제 (recursive = 재귀적)

rm 명령어는 기본적으로 파일만 삭제를 하는데 옵션에 의해 폴더 또한 삭제할 수 있게 된 것이다.
따라서 폴더의 경우 내부의 파일 존재 여부와 상관없이 rm이나 rm -f로 삭제되지 않는다. 따라서 -r 옵션을 통해 내부의 파일까지 함께 삭제하도록 해야한다.

Ctrl + c
명령어 입력시 프로그램이 멈춘다거나 명령어를 인식하지 못해 대기 중일 때 ctrl + c를 통해 명령어 취소가 가능하다. 이를 interrupt라고 한다.
cp (copy)
파일을 복사하는 명령어
cp [복사할 파일명] [생성할 파일명]
a.txt 파일을 생성하고 내부에 다음과 같이 내용을 작성하였다.

그리고 a.txt를 복사하여 b.txt라는 파일을 만든다.

b.txt를 열어보면 복사한 a.txt와 같은 내용이 복사되어 있는 것을 알 수 있다.

mv (move)
파일의 위치 이동시키는 명령어
mv [이동시킬 파일명] [이동시킬 위치]
명령어에 의해 b.txt 파일이 user라는 폴더로 이동한 것을 확인할 수 있다.

파일을 이동시킬 때 이름을 변경해서 이동시킬 수 있다.
mv [이동시킬 파일명] [이동시킬 위치]/[변경할 파일명]

위치를 변경하지 않고 이름만 변경하는 것도 mv 명령어로 가능하다.
mv [기존 파일명] [변경할 파일명]

ln (link)
참조(바로가기) 파일을 만드는 명령어

바로가기(soft link) 파일 생성
ls -s [원본 파일명] [바로가기 파일명]
ln -s를 통해 새로운 파일이 생겼고 ls - l을 통해 상세보기를 하니 b.txt와는 달리 맨 앞에 l이 붙어있고 b-link.txt → b.txt라고 되어있다. b-link.txt가 b.txt를 참조하고 있다는 의미이다. 이를 통해 b-link.txt 파일이 b.txt로 연결되는 바로가기 파일임을 알 수 있다.

Ubuntu Repository
프로그램을 설치한다는 것은 다운로드 이외에 환경변수 등록, 링크파일 등록, 시작프로그램 등록, 방화벽 개방 등 추가적인 과정이 필요하다. 이를 위해 설치를 도와주는 매니저 프로그램을 사용하는 것이 좋다. 예시로 윈도우는 msi, 리눅스는 api, yum 등이 있다.
프로그램 사이트에서 프로그램을 다운로드하면 파일의 확장자가 윈도우에선 .zip이었지만 우분투에서는 .tar이다. 윈도우에서 .msi 설치 파일을 더블 클릭하면 바로 설치가 되지만 CLI 환경인 리눅스에서는 .deb 설치파일을 더블 클릭한다고 설치되지 않는다.
.deb를 설치하는 방법은 다음과 같다.
- wget 명령어로 사이트에서 다운받는다.
- .tar로 압축된 파일을 풀거나 .deb 설치 파일로 설치한다.
- 설치가 끝나면 추가 설정들을 한다.
Ubuntu Repository
Ubuntu Repository는 우분투에서 각각의 사이트에 올라와있는 프로그램들을 한 곳에서 설치할 수 있도록 하는 저장소이다. 우분투 레포 운영자 측에서 새로운 프로그램이 생기면 알아서 추가해준다.
Ubuntu Repository 등록
우분투에서 Ubuntu Repository에 접근하기 위해서는 /etc/apt/sources.list 파일에 Ubuntu Repository 주소를 등록해야 한다.
Ubuntu Repository 목록 가져오기
어떤 프로그램들을 가지고 있는지 확인하기 위한 apt에 대한 목록이 처음에는 비어있다. 따라서 프로그램들을 다운받는 것이 아니라 프로그램 목록을 갱신하기 위한 명령어는 다음과 같다.
apt udpate
프로그램 설치
아래의 명령어로 목록에 있는 프로그램을 설치할 수 있다. 즉 프로그램의 다운 및 설치가 가능하다.
apt install [프로그램명]
PPA 저장소
Ubuntu Repository는 패키지 하나당 한 버전을 제공하여 새로운 안정된 버전이 생기면 기존의 버전을 덮어쓰기하거나 삭제되는데 개인이 필요한 프로그램, 이전 버전의 프로그램 등은 PPA라는 개인 저장소에 올려둘 수 있다. 이 주소 또한 Ubuntu Repository와 마찬가지로 /etc/apt/sources.list 파일에 주소를 등록해두면 사용 가능하다.
sudo apt update
처음 apt 목록에는 아무 프로그램도 없으므로 갱신해줘야 한다. 이를 위해 apt update 명령어를 입력하면 다음과 같이 권한이 없다는 응답을 확인할 수 있다.

저장소 목록 갱신에 대한 권한은 최상위 관리자가 가지고 있기 때문에 현재 ubuntu 사용자로 접속한 나는 저장소 목록을 갱신할 수 없다.

그러나 최상위 관리자가 아니더라도 명령어 앞에 sudo를 붙이면 슈퍼 유저의 권한을 위임받아 명령어를 실행할 수 있다.
sudo apt update

apt-cache
갱신된 apt 목록을 조회하는 명령어

서브 명령어 (하위 명령어)
apt-cache 뒤에 서브 명령어를 붙여 apt 목록 조회 후 추가적으로 무엇을 할지 지정할 수 있다.
apt-cache [서브 명령어] [인자]
apt-cache search tomcat 명령어를 실행하니 tomcat 관련 프로그램들이 조회되는 것을 볼 수 있다.

파이프라인
하나의 명령어의 출력을 바로 다음 명령어의 입력으로 전달하는 방식으로 기호는 | 를 사용한다.
명령어1 | 명령어2 | 명령어3
grep (global reqular expression print)
문자열 검색 도구로 패턴을 찾아 일치하는 것을 출력하는 명령어
grep [옵션] "찾을문자열" 파일이름
apt 목록 중 search 서브 명령어를 통해 찾은 tomcat에 대한 것들을 전부를 다시 tomcat 이라는 문자를 가지고 있는 것들만 남도록 다시 필터링할 수 있다.
apt-cache search tomcat | grep tomcat

tomcat 설치
이제 톰캣을 설치할건데 중간에 저장공간 사용에 대한 질문을 한 번에 대답하도록 하는 -y까지 추가해서 apt install 명령어를 실행한다.
sudo apt install -y tomcat10
포트 확인
설치가 잘 되었는지는 포트 활성화 확인을 통해 알 수 있다. 톰캣은 웹 서버이므로 포트를 가지고 있고 웹 서버가 실행될 때 포트가 돌아간다.
먼저 netstat 명령어 패키지를 한다.
sudo apt install net-tools

다음의 명령어를 통해 8080번 포트가 돌아가고 있다는 것을 확인할 수 있다.
netstat -nlpt

그러나 EC2 IP주소:8080 주소로 접속하면 실패한다.

이는 EC2 서버의 inbound 규칙 중 8080 포트가 열려있지 않아서 해당 포트 번호로 들어갈 수 없기 때문에 접속에 실패한 것이다. 인바운드 규칙이란 클라이언트가 자신의 서버 데이터에 들어올 수 있는 규칙을 말한다.
아래의 사진을 통해 22 포트만 열려있는 것을 알 수 있다.

따라서 aws 사이트로 가서 해당 서버 인스턴스의 인바운드 규칙 중 8080 포트를 열어줘야 한다.

다시 인스턴스 인바운드 규칙을 확인하면 8080 포트가 열려있고 EC2 IP주소:8080 주소로 접속 가능하다. 즉, tomcat이 잘 설치되어서 실행되고 있다는 뜻이다.


프로세스
프로세스
스레드
context-switching
sleep
service
apt 명령어로 프로그램을 설치하면 서비스에 등록이 되고 실행파일을 직접 찾아 실행할 필요가 없어지게 된다.
아래의 명령어로 서비스 목록을 조회할 수 있다.
service --status-all
실행 중인 서비스는 [ + ], 실행 중이지 않은 서비스는 [ - ]로 표시된다.

서비스 종료 명령어
sudo service [서비스명] stop
8080 포트가 비활성화되면서 tomcat이 종료되었음을 확인할 수 있다.

서비스 시작 명령어
sudo service [서비스명] start
8080 포트가 활성화되고 tomcat이 다시 실행되고 있는 것을 알 수 있다.

systemctl
위의 service 명령어는 systemctl의 wrapper script, 추상화로 보다 쉽게 사용할 수 있도록 나온 명령어이다. service로 제어되지 않는 서비스는 근본적인 서비스 관리 도구인 systemctl을 사용해야 한다.
sudo systemctl list-unit-files
apt 명령어에 의해 설치된 모든 시스템들을 조회 가능하다. q 혹은 ctrl+c로 인터럽트를 걸어 빠져나올 수 있다.

이 중에서 tomcat을 검색해보면 enabled 상태인 것을 확인 가능하다.

status 서브 명령어를 추가하면 추가적으로 상태를 확인할 수 있다. tomcat은 현재 active (running)으로 잘 실행되고 있다.
sudo systemctl status tomcat10

시스템을 종료시킨 뒤 다시 상태를 확인해보면 비활성 상태가 된 것을 볼 수 있다.
sudo systemctl stop tomcat10

포트로 접속해보니 제대로 종료되어있다.

다시 실행하였을 때 응답이 없고 포트로 접속이 되면 잘 실행되는 것이다.


ps
프로세스 명령어
-ef 옵션을 통해 실행 중인 프로세스 목록을 조회가능하다.
ps -ef
명령어 실행 결과 조회된 프로세스 목록을 보면 UID, PID, PPID 등이 있다.
- UID : 프로세스의 주인
- PID : 현재 프로세스 아이디
- PPID : 이 프로세스를 실행한 부모 프로세스의 PID
즉 3~17번까지의 프로세스들은 모두 2번 PID 프로세스를 부모로 가진다.

tomcat은 현재 실행중이며 PID가 116075이고, PID가 1인 프로세스를 부모로 가진다.

kill
프로세스 종료 명령어
systemctl stop으로 프로세스를 종료 가능하지만 불가능한 경우, 강제 종료를 시켜야 하는 경우 또는 서비스로 등록되어있지 않은 프로세스를 종료시킬 때 사용한다.
다양한 kill 옵션들이 존재하는데 번호를 사용하여 종료 가능하다.
자주 사용하는 것은 9번 SICKILL으로 강제 종료 옵션으로 이 경우 실행중이던 프로그램이 하던 일을 다 마치지 못하고 종료될 수 있다.
안전하게 종료하기 위해서 사용하는 것이 15번 SIGTERM인데 디폴트 옵션으로 옵션을 명시하지 않아도 15번 옵션이 적용된다.
2번 SIGINT 옵션은 ctrl+c과 같은 인터럽트(방해) 역할을 한다.
tomcat을 kill 명령어로 종료시켜보자.
tomcat 프로세스의 주인은 tomcat이고 PID는 116075이다.

나는 현재 ubuntu 사용자이므로 프로세스의 주인인 tomcat이 아니므로 권한이 없기 때문에 sudo 명령어를 사용하여 삭제한다.


포트를 확인해보면 8080이 종료된 것을 알 수 있다.

restart
systemctl 명령어로 종료시키지 않고 kill 명령어를 통해 프로세스가 종료되면 exited 되고 systemctl 입장에서의 비정상적인 종료는 start되지 않고 restart 명령어로만 재실행 가능하다. 그리고 stop 이후 start하면 restart와 같은 효과이다.
tomcat10 pid 찾는 스크립트 작성하기
스크립트란 시스템을 제어하기 위한 명령어를 여러 줄로 적어 시스템을 제어하는 대본을 의미한다.
ps -ef | grep tomcat10 명령어를 입력하면 tomcat과 내가 방금 입력한 명령어인 grep까지 결과로 나온다. 내가 방금 입력한 명령어도 프로세스가 되어 목록에 나온 것이다.

grep 명령어의 -v 속성으로 grep 명령어를 제외하고 출력되도록 할 수 있다.
ps -ef | grep tomcat10 | grep -v grep

검색 결과를 확인해보면 tab으로 나뉘어져 있는 것을 알 수 있다.

awk
awk 명령어를 사용하면 공백을 기준으로 토큰화시켜 배열로 만들 수 있다. awk 배열은 0이 아닌 1번지부터 시작한다. 2번지의 PID 값만 찾을 때는 ‘’를 사용하여 검색한다.
ps -ef | grep tomcat10 | grep -v grep | awk '{print $2}'

Share article