리눅스 명령어 학습

Yunes·2023년 7월 8일
0

북스터디

목록 보기
3/8

📚 리눅스 명령어

클라우드 서비스 개발자를 위한 AWS로 구현하는 CI/CD 배포 입문을 읽으며 학습한 내용을 정리한다.

📘 clear

터미널 화면을 비울 때 사용하는 명령어

📘 pwd

현재 내가 위치한 경로를 알려주는 명령어

📘 cd

폴더 간의 이동할 때 사용하는 명령어
cd 경로 : 해당 폴더로 이동

cd .. : 한칸 상위 폴더로 이동

cd / : 최상위 경로로 한 번에 이동

📘 ls

현재 폴더에 있는 모든 파일과 폴더의 상태를 확인하는 명령어

ls -l : 폴더와 파일들의 상태를 자세히 확인

색이 파란색이면 폴더이고 하얀색이면 파일이다.
또한 앞이 d 가 아닌 - 가 붙으면 파일이다.
-l : long format, 파일 및 디렉토리의 자세한 정보를 리스트 형태로 출력한다. 이 옵션을 사용시 파일의 소유자, 그룹, 크기, 수정 날짜 및 권한 등의 정보를 얻을 수 있다.

ls -a : 숨김 폴더 및 파일까지 확인

-a : all, 숨겨진 파일 및 디렉토리를 포함하여 모든 파일과 디렉토리를 나열
숨겨진 파일 및 디렉토리는 이름이 마침표 . 로 시작한다.

📘 절대 경로 및 상대경로로 이동

지금까지 cd desktop 으로 이동하던 것은 상대 경로로 이동하는 방식이다.
절대 경로로 이동시 최상위 폴더 / 로부터 이동한다.

📘 --help / man

명령어의 사용법을 알려준다.
macOS 에선 --help 로 동작하지 않고 대신 man [명령어] 로 사용법을 확인할 수 있다.

man : manual, 원하는 명령어의 매뉴얼 확인 가능

📘 mkdir

폴더를 생성

📘 touch

파일을 생성

📘 rm

폴더나 파일을 삭제

-f : 삭제가 안될 때 강제 삭제 옵션
-r : 폴더를 삭제할 때 폴더 내부에 파일이 있다면 그것까지 함께 삭제하는 옵션

존재하지 않는걸 삭제하려고 하면 없다고 알려준다.

📘 ⌃ + c

ctrl + c : 인터럽트, 프로그램이 작동을 멈추거나 명령어를 인식하지 못해 대기하는 경우 명령을 취소

📘 cp [복사할 파일명][생성할 파일명]

파일을 복사할 때 사용하는 명령어

📘 mv [이동시킬 파일명][이동시킬 위치]

파일의 위치를 이동시킬 때 사용하는 명령어

파일 이동시 파일명을 변경할 수 있다.

현재 경로 그대로 파일명을 변경할 수 있다.

ls -s a.txt a-link.txt

보라색 파일
ls-l 을 보면 권한에서 l 로 시작하는 것을 볼 수 있는데 이 파일은 실제 존재하는 파일이 아닌 바로가기 파일이다.

📘 sudo apt update

사실 ec2 에서 linux2 AMI를 선택했는데 이는 apt 가 아닌 yum 을 지원한다고 하여 sudo yum update 라고 이해하면 된다.

AMI (Amazon Machine Image) : 가상 머신(인스턴스)을 생성할 때 사용되는 템플릿으로 운영체제 (OS)와 사전 설치된 소프트웨어, 설정 등의정보를 포함한다.

처음 yum 목록에 아무런 메뉴가 없기에 메뉴판을 갱신하기 위해 yum update 를 한다.

처음 yum update 시 권한이 없다고 뜨며 이때 sudo 를 앞에 붙여줘서 슈퍼 유저의 권한을 위임받아 실행할 수 있다.

whoami

위의 명령어로 현재 어떤 사용자로 사용중인지 확인할 수 있다.

📘 yum

참고중인 서적 클라우드 서비스 개발자를 위한 AWS로 구현하는 CI/CD 배포 입문 은 ubuntu 기반으로 설명이 되어 있으나 나는 ec2 에서 linux 2 를 선택했기에 Linux/Unix Power Tools 사이트를 참고하여 비교하였다.

📗 yum search tomcat

apt-cache search tomcat 과 동일
tomcat 이라는 프로그램이 메뉴판에 있는지 검색한다.

존재한다.

📗 파이프라인 |

검색 결과를 걸러서 다시 검색할 수 있게 한다.

📗 grep

파일 내용을 빠짐없이 확인해서 찾는 문자열이 포함되었는지 조사한다.

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

netstat -nlpt : 네트워크 상태를 확인하기 위한 명령어
n : IP 주소와 포트 번호를 숫자 형식으로 표시
l : 리스닝 상태인 포트만 표시, 즉 현재 시스템에서 대기 중인 연결을 나타낸다.
p : 프로세스 ID와 함께 포트를 소유한 프로세스를 나타낸다.
t : TCP 연결만 표시한다.

침고로 패키지 목록은 yum 명령어 실행시 자동으로 갱신된다. 이는 apt update 와 같은 동작을 한다.

📘 ps 프로세스 명령어

📗 ps -ef

지금 실행중인 프로세스의 목록 확인
화면에 출력하기 위한 명령어이다. 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

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

📘 vim

메모장과 같은 에디터

vi [파일명] 으로 파일을 열고 수정할 수 있는데 없는 파일일 경우 현재 디렉토리에서 해당 파일명으로 파일을 생성해서 수정한다.

📗 알고 쓰면 굉장히 편할 일반모드 단축키

단축키기능
마우스 우클릭외부 코드 붙여넣기
shift + v블록 지정
x현재 커서의 문자 삭제
dd현재 행 삭제
yy현재 행 복사
p붙여 넣기
home행의 맨 처음으로 이동
$행의 맨 끝으로 이동
ctrl + b위로 한 화면 스크롤
ctrl + f아래로 한 화면 스크롤

매번 editor 창이 뜰때 마우스 드래그로 복사도 못하고 여러 칸 이동이 불가능해서 화살표로 한칸씩 문자를 이동하던게 정말 불편했는데 이걸 이제라도 알게되어 다행이다.

shift + v : ctrl 을 누르고 있는 상태와 같아서 화살표를 통해 처음 shift + v 를 하여 선택한 블록을 시작으로 여러 줄을 드래그할 수 있다. 그 상태에서 복사, 삭제, 붙여넣기 등이 가능하다.

📗 명령모드 단축키

단축키기능
iinsert mode 로 변경 (현재 커서 위치에 내용 추가)
aappend mode 로 변경 (현재 커서 위치 한칸 뒤에 내용 추가)
oopen line mode 로 변경 (현재 커서 한라인 아래에 내용 추가)
escnormal mode 로 변경
:w저장
:q에디터 종료
:q!강제 에디터 종료
:wq저장 후 종료
:wq!강제로 덮어쓰고 종료
h,jㅏl커서 좌, 하, 상, 우

📘 권한

-rw-r--r--

제일 앞의 기호가 - 이면 파일이고 d 이면 디렉토리다.

  • 첫 번째 묶음 3개는 소유자 (root) 의 권한
  • 두 번째 묶음 3개는 그룹 (root) 의 권한
  • 세 번째 묶음 3개는 누구나 (anyone), 소유자나 그룹이 아닌 모든 사람의 권한이다.

권한에는r 파일읽기, w 파일 쓰기, x 파일 실행이 있고 각각 4, 2, 1로 계산하여 숫자로 나타낼 수 있다.
위의 경우는 4+2 / 4 / 4 로 권한이 644 이다.

만일 누구나 파일을 수정하고 싶다면 세 번째 묶음에 w 권한을 부여해야 해서 권한이 646 으로 바뀌어야 한다. 이때 필요한 명령어가 chmod 이다.

모두에게 전체 권한을 부여한다면 777 권한을 부여한다.

📗 권한 변경 chmod

chmod [권한(숫자 또는 문자로 표시)][타겟]
chmod 646 test.txt

ls -l 을 볼때 맨 앞에 나오는 부분을 통해 해당 디렉토리, 파일의 권한을 계산할 수 있다.

📘 tail

파일의 가장 끝 부분의 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권

profile
미래의 나를 만들어나가는 한 개발자의 블로그입니다.

0개의 댓글