클라우드 서비스 개발자를 위한 AWS로 구현하는 CI/CD 배포 입문을 읽으며 학습한 내용을 정리한다.
터미널 화면을 비울 때 사용하는 명령어
현재 내가 위치한 경로를 알려주는 명령어
폴더 간의 이동할 때 사용하는 명령어
cd 경로
: 해당 폴더로 이동
cd ..
: 한칸 상위 폴더로 이동
cd /
: 최상위 경로로 한 번에 이동
현재 폴더에 있는 모든 파일과 폴더의 상태를 확인하는 명령어
ls -l
: 폴더와 파일들의 상태를 자세히 확인
색이 파란색이면 폴더이고 하얀색이면 파일이다.
또한 앞이 d 가 아닌 - 가 붙으면 파일이다.
-l : long format, 파일 및 디렉토리의 자세한 정보를 리스트 형태로 출력한다. 이 옵션을 사용시 파일의 소유자, 그룹, 크기, 수정 날짜 및 권한 등의 정보를 얻을 수 있다.
ls -a
: 숨김 폴더 및 파일까지 확인
-a : all, 숨겨진 파일 및 디렉토리를 포함하여 모든 파일과 디렉토리를 나열
숨겨진 파일 및 디렉토리는 이름이 마침표 . 로 시작한다.
지금까지 cd desktop
으로 이동하던 것은 상대 경로
로 이동하는 방식이다.
절대 경로
로 이동시 최상위 폴더 /
로부터 이동한다.
명령어의 사용법을 알려준다.
macOS 에선 --help 로 동작하지 않고 대신 man [명령어] 로 사용법을 확인할 수 있다.
man
: manual, 원하는 명령어의 매뉴얼 확인 가능
폴더를 생성
파일을 생성
폴더나 파일을 삭제
-f
: 삭제가 안될 때 강제 삭제 옵션
-r
: 폴더를 삭제할 때 폴더 내부에 파일이 있다면 그것까지 함께 삭제하는 옵션
존재하지 않는걸 삭제하려고 하면 없다고 알려준다.
ctrl + c
: 인터럽트, 프로그램이 작동을 멈추거나 명령어를 인식하지 못해 대기하는 경우 명령을 취소
파일을 복사할 때 사용하는 명령어
파일의 위치를 이동시킬 때 사용하는 명령어
파일 이동시 파일명을 변경할 수 있다.
현재 경로 그대로 파일명을 변경할 수 있다.
ls -s a.txt a-link.txt
보라색 파일
ls-l
을 보면 권한에서 l
로 시작하는 것을 볼 수 있는데 이 파일은 실제 존재하는 파일이 아닌 바로가기 파일이다.
사실 ec2 에서 linux2 AMI를 선택했는데 이는 apt 가 아닌 yum 을 지원한다고 하여 sudo yum update
라고 이해하면 된다.
AMI (Amazon Machine Image)
: 가상 머신(인스턴스)을 생성할 때 사용되는 템플릿으로 운영체제 (OS)와 사전 설치된 소프트웨어, 설정 등의정보를 포함한다.
처음 yum 목록에 아무런 메뉴가 없기에 메뉴판을 갱신하기 위해 yum update 를 한다.
처음 yum update 시 권한이 없다고 뜨며 이때 sudo
를 앞에 붙여줘서 슈퍼 유저의 권한을 위임받아 실행할 수 있다.
whoami
위의 명령어로 현재 어떤 사용자로 사용중인지 확인할 수 있다.
참고중인 서적 클라우드 서비스 개발자를 위한 AWS로 구현하는 CI/CD 배포 입문
은 ubuntu 기반으로 설명이 되어 있으나 나는 ec2 에서 linux 2 를 선택했기에 Linux/Unix Power Tools
사이트를 참고하여 비교하였다.
apt-cache search tomcat
과 동일
tomcat 이라는 프로그램이 메뉴판에 있는지 검색한다.
존재한다.
|
검색 결과를 걸러서 다시 검색할 수 있게 한다.
파일 내용을 빠짐없이 확인해서 찾는 문자열이 포함되었는지 조사한다.
grep -r [찾고 싶은 내용] [찾을 파일이 있는 폴더 경로(검색 시작점)]
-r
: 서브 폴더까지 검색하도록 지정
grep
: global regular expression pring, 파일 전체에서 정규 표현식과 일치하는 위치를 출력하라.
정규 표현식
: 특수한 기호를 써서 검색하고 싶은 내용을 유연하게 표현하는 서식
기호 | 의미 |
---|---|
() | 그룹화 |
| | 좌우 중 하나 |
? | 직전 표현이 0회 또는 1회 등장 |
* | 직전 표현이 0회 이상 연속해서 등장 |
+ | 직전 표현이 1회 이상 연속해서 등장 |
. | 임의의 한 문자 |
^ | 줄 머리 |
$ | 줄 끝 |
예시
(야메노|yameno|YAMENO) ? (타로|tarou|TAROU)
? 는 스페이스가 0회 또는 1회 등장을 의미
grep -r -i -E "(야메노|yameno|YAMENO) ? (타로|tarou|TAROU)" [디렉토리 경로]
-E
: 정규 표현식 사용시 -E 옵션 사용
-i
: ignore case, 알파벳 대문자 소문자 차이를 무시하고 검색하는 옵션
다시 돌아와서 설치된 패키지중 tomcat 을 검색하여 tomcat 이라는 이름을 포함하는 파일을 찾는다.
애초에 설치되어 있는 패키지는 모두 tomcat 이 이름에 포함되어 있어서 일치되는 부분이 표시된다.
yum list | grep tomcat
설치 가능한 모든 패키지중 tomcat 과 관련된 패키지를 검색한 결과이다.
포트 확인
netstat -nlpt
netstat -nlpt
: 네트워크 상태를 확인하기 위한 명령어
n
: IP 주소와 포트 번호를 숫자 형식으로 표시
l
: 리스닝 상태인 포트만 표시, 즉 현재 시스템에서 대기 중인 연결을 나타낸다.
p
: 프로세스 ID와 함께 포트를 소유한 프로세스를 나타낸다.
t
: TCP 연결만 표시한다.
침고로 패키지 목록은
yum
명령어 실행시 자동으로 갱신된다. 이는apt update
와 같은 동작을 한다.
지금 실행중인 프로세스의 목록 확인
화면에 출력하기 위한 명령어이다. ps -ef 의 결과를 사용하여 명령어 치환을 하려면 백틱 ` 을 사용한다.
(백틱은 legacy syntax로 문제를 일으킬 수 있으니 $()를 사용하는 것을 권장한다고 한다.)
kill `ps -ef | grep tomcat8 | grep -v grep | awk '{print $2}'`
UID
: 프로세스의 주인
PID
: 프로세스의 아이디
C
: 프로세스의 CPU 사용량
STIME
: 프로세스가 시작된 시간
TTY
: 프로세스가 연결된 터미널 장치
CMD
: 프로세스가 실행 중인 명령어 또는 프로그램의 이름
-ef
: 모든 프로세스를 상세하게 표시, PID, PPID(부모 프로세스 ID), CPU 사용량, 시작 시간 등의 정보를 포함하여 프로세스에 대한 상세한 정보를 표시한다.
kill -l
: 종료하는 방법에 대한 옵션들을 볼 수 있다.
이중 9번이 눈에 띈다.
kill -9 [PID]
port 8080 was already in-use
이런 식으로 오류가 뜰때 이미 8080포트를 사용중인 PID 를 강제 종료할때 많이 사용했다.
프로세스를 안전하게 종료하려면 15번 옵션인 SIGTERM
을 사용한다.
프로세스를 종료할 권한이 없다면 sudo 를 붙인다.
특정 프로세스를 종료하려면 미리 ps-ef 와 grep 을 통해 검색할 수 있다.
위의 자료를 보면 ps-ef 로 검색한 것조차 리스트에 나온다. 즉, 내가 입력했던 명령어 조차도 프로세스가 되어 목록에 나타난다는 의미이다.
명령을 제외하기 위해 grep 명령어의 -v 속성으로 제외시킬 수 있다.
ps -ef | grep ec2-user | grep -v grep
메모장과 같은 에디터
vi [파일명]
으로 파일을 열고 수정할 수 있는데 없는 파일일 경우 현재 디렉토리에서 해당 파일명으로 파일을 생성해서 수정한다.
단축키 | 기능 |
---|---|
마우스 우클릭 | 외부 코드 붙여넣기 |
shift + v | 블록 지정 |
x | 현재 커서의 문자 삭제 |
dd | 현재 행 삭제 |
yy | 현재 행 복사 |
p | 붙여 넣기 |
home | 행의 맨 처음으로 이동 |
$ | 행의 맨 끝으로 이동 |
ctrl + b | 위로 한 화면 스크롤 |
ctrl + f | 아래로 한 화면 스크롤 |
매번 editor 창이 뜰때 마우스 드래그로 복사도 못하고 여러 칸 이동이 불가능해서 화살표로 한칸씩 문자를 이동하던게 정말 불편했는데 이걸 이제라도 알게되어 다행이다.
shift + v
: ctrl 을 누르고 있는 상태와 같아서 화살표를 통해 처음 shift + v
를 하여 선택한 블록을 시작으로 여러 줄을 드래그할 수 있다. 그 상태에서 복사, 삭제, 붙여넣기 등이 가능하다.
단축키 | 기능 |
---|---|
i | insert mode 로 변경 (현재 커서 위치에 내용 추가) |
a | append mode 로 변경 (현재 커서 위치 한칸 뒤에 내용 추가) |
o | open line mode 로 변경 (현재 커서 한라인 아래에 내용 추가) |
esc | normal mode 로 변경 |
:w | 저장 |
:q | 에디터 종료 |
:q! | 강제 에디터 종료 |
:wq | 저장 후 종료 |
:wq! | 강제로 덮어쓰고 종료 |
h,jㅏl | 커서 좌, 하, 상, 우 |
-rw-r--r--
제일 앞의 기호가 -
이면 파일이고 d
이면 디렉토리다.
권한에는r
파일읽기, w
파일 쓰기, x
파일 실행이 있고 각각 4, 2, 1로 계산하여 숫자로 나타낼 수 있다.
위의 경우는 4+2 / 4 / 4 로 권한이 644 이다.
만일 누구나 파일을 수정하고 싶다면 세 번째 묶음에 w 권한을 부여해야 해서 권한이 646 으로 바뀌어야 한다. 이때 필요한 명령어가 chmod
이다.
모두에게 전체 권한을 부여한다면 777 권한을 부여한다.
chmod [권한(숫자 또는 문자로 표시)][타겟]
chmod 646 test.txt
ls -l
을 볼때 맨 앞에 나오는 부분을 통해 해당 디렉토리, 파일의 권한을 계산할 수 있다.
파일의 가장 끝 부분의 10줄을 출력해주는 명령어이다.
-f
: 실시간으로 남는 로그를 보여준다.
spring boot 프로젝트에 gitlab을 통한 CI/CD 를 해보고 싶다. 그런데 전에 deploy.sh 파일 자체는 써봤어도 다른 사람이 다 짜준걸 활용해봤을 뿐이었다. 그 내부를 봤었을때 처음 보는 규칙으로 이루어진 문자들이 나열되어 있었는데 CI/CD 를 하기 위해 이 셸 스크립트를 짜야 한다는 것을 알게 되었다. 그럼에도 불구하고 GitLab 의 셸 스크립트 샘플들을 봤을때 이해가 잘 되지 않았다. 그래서 리눅스 명령어부터 먼저 학습하고 셸 스크립트를 짜고자 했다.
어느정도 이해가 되었다. 이제 진짜 CI/CD 를 구현해보자. 지금까지 test - push - pull request - merge - ec2 deploy - ec2 build, test ... 의 과정을 끝내고 push 만으로 이 일련의 과정을 자동화해보자. 더 나은 개발자가 될 수 있도록 조금씩 나아가고자 한다.
클라우드 서비스 개발자를 위한 AWS로 구현하는 CI/CD 배포 입문
Linux/Unix Power Tools
만화로 배우는 리눅스 시스템 관리 1권