1. clear
- 화면 비우기
clear

2. pwd
- 내 현재 위치 확인
- default location : /home/사용자명
pwd

3. cd
- 폴더 이동
- cd .. : 상위 폴더 이동
- cd ‘path’ : 절대 경로/상대 경로(path)로 이동
- cd / : 최상위 폴더로 이동
cd ..
cd /home
cd /

4. ls
- 현재 위치의 모든 폴더 및 파일 표시
- ls -l : 자세히 보기
- ls -a : 숨김 파일도 모두 표시
ls
ls -l
ls -a

파일 정보
- d : directory
- l : link (soft link)
- r : read
- w : write
- x : execute
5. 절대 경로 vs 상대 경로
- 절대 경로
- 정확한 디렉토리 경로를 작성해야 함
- 최상위 폴더에서 사용자 폴더로 이동하려면 : cd /home/사용자명
cd /home/ubuntu

- 상대 경로
- 현재 폴더 내부에서 찾아갈 수 있는 경로 또는 path로 지정된 경로
- home 폴더 내부에서는 / 없이 사용자명 폴더로 이동 가능
cd ubuntu

cd ~

6. help
- 명령어의 사용 방법 (options) 표시
- -a, -l 등 하이픈이 1개이면 약어, —help, —version, —all 등 하이픈이 2개면 전체 이름 작성
- Convention이므로 명령어마다 다를 수 있음

7. -a / —all
- 폴더 내부의 숨김 파일도 표시
- 폴더의 -l 명령어와 함께 자주 사용
- 옵션끼리 붙여서 사용할 수 있음

8. mkdir
- 새 폴더 생성
mkdir '새 폴더명'

- 이미 폴더가 존재하면 생성 불가

9. touch
- 새 파일 생성
- 만들어진 파일은 내용이 비어있는 상태 : 에디터 등을 활용해서 내용을 작성해야 함
touch '파일명'

- 파일이 이미 존재하면 동작하지 않음
- 내용 작성 후 새로 생성해도 파일명이 동일하면 생성 / 덮어쓰기 되지 않음

10. rm
- 폴더 또는 파일 삭제
- w 권한이 있는 폴더 및 파일만 삭제 가능
- -f : 강제 삭제 (확인 없이 바로 삭제 : Shift + Delete)
rm -f '파일명'

- -d : 빈 폴더 삭제
rm -d '폴더명'

- -r : 자식 파일도 함께 삭제
rm -r '폴더명'

- 주의 : root 및 시스템 폴더도 삭제 가능함
- 다른 사용자가 만든 파일이라 하더라도, 해당 사용자가 권한을 가진 폴더 내부에서 작성한 경우는 해당 권한이 우선적으로 처리

11. Ctrl + C
- 인터럽트 키
- 동작중이거나 명령어 입력 중 대기 상태일 경우 취소
^C
12. cp
- 파일 복사
cp '복사할 파일명' '새 파일명'

13. mv
- 파일 위치 이동
- 권한이 있는 폴더로만 이동 가능
mv '파일명' '폴더명'

- 파일 이름 변경
- 폴더 이동 시 이름을 바꿔서 이동시킬 수 있음
- 파일명만 입력 시 이름만 바뀜
mv '파일명' '폴더명/새파일명'
mv '파일명' '새파일명'


14. ln (link)
- 바로가기 링크 생성
- 하드 링크 vs 소프트 링크
- 하드 링크 vs 파일 복사


ln '파일명' '링크명' # hard link
ln -s '파일명' '링크명' # symbolic(soft) link

15. Ubuntu Repository
- 윈도우와 다르게 리눅스는 GUI가 없기 때문에 명령어로 직접 설치 필요
- 설치를 도와주는 Installation Manager가 있으면 편하게 설치할 수 있지만, 없다면 명령어 및 환경 변수 등록, 방화벽 포트 개방 등 여러 절차를 거쳐야 함
- 리눅스의 설치 매니저는 apt / yum
- 직접 설치할 경우
- wget ‘사이트 내 파일 링크’
- tar로 압축 풀기 or .deb 파일 실행
- 추가 환경 설정 (path 등록, 방화벽 설정 등)
- 이 절차를 생략하기 위해 설치 매니저인 apt를 사용함
- Ubuntu Repository : Ubuntu Linux에서 사용 가능한 프로그램들이 모여있는 리포지토리
- 프로그램은 Ubuntu Repository 측에서 자동으로 등록해줌
- apt update / apt install 등의 명령어를 사용하여 내 Ubuntu에서 사용 가능한 프로그램을 다운로드 및 명령어 업데이트
- /etc/apt/sources.list.d/ubuntu.sources : ubuntu repository 주소

16. sudo, apt
- sudo : super user 권한을 받아서 명령어를 수행할 수 있는 접두어
- apt는 root 권한이 필요하므로 일반 사용자가 호출 시 접근 불가

- apt : 설치 매니저 호출
- update : apt 내부의 목록 갱신
sudo apt update

- search : 다운로드 받을 수 있는 리포지토리 검색
apt-cache search 'name'

- 정확하게 검색하기 위해서는 필터링이 필요
- 파이프라인 (Pipeline, |)을 사용하면 필터링 수행 가능
- grep : 해당 문자열이 포함된 결과만 표시
apt-cache search tomcat | grep tomcat

- apt list : 전체 apt 목록 확인
- grep을 이용해서 해당 문자열이 포함된 명령어만 찾을 수 있음
apt list | grep tomcat

- install : 리포지토리에서 설치
- 정확한 이름 작성 필요
- -y : 모든 사항에 동의 후 설치
sudo apt install 'name'
sudo apt install -y 'name'

- tomcat 설치 확인 : netstat 설치 후 네트워크 정보 확인
sudo apt install net-tools netstat -nlpt

- 방화벽 (Inbound) 설정 후 접속 시 접속 가능

17. Process & Thread & Context Switching
Process
- CPU는 메모리에 Load된 프로그램을 수행(연산)
- 메모리 (RAM)에 올라온 프로그램들을 Process라고 하며, 현재 실행 중인 프로그램들이 메모리에 올라오게 됨
Thread & Context Switching
- 메모리에 여러 프로그램이 올라온 상태에서, CPU가 일을 처리함
- A라는 프로그램이 데몬 (Daemon, 계속 실행되는) 프로그램일 경우, CPU는 계속 A 프로그램을 동작시켜야 함
- A 아래쪽에 Load된 프로그램들이 동작할 수 없게 됨
- 이 현상을 해결하기 위해 사용하는 것이 스레드 (Thread)
- CPU가 일정한 시간 동안만 프로그램에 관여하며, 다른 프로그램들도 함께 처리하는 것을 의미
- CPU가 동작하는 일정한 시간을 정하는 것을 Time-Slicing
- 일정한 시간동안 CPU가 여러 프로그램들을 순회하며 동작시키는 것을 Context Switching

Sleep
- CPU가 Context Switching을 수행하기 위해서는 작업 중간 중간에 쉬는 시간이 필요
- CPU의 자원을 100% 활용하게 되면 다른 작업 처리가 불가능
- 인터럽트 불가 → 다른 프로그램 처리 (Context Switching) 불가
- 이 쉬는 시간을 sleep이라고 함
18. service
- apt 설치 후 등록된 서비스 목록
- 서비스에 등록되면 직접 실행할 필요가 없음
- 서비스 목록 확인
- 실행 중인 경우 [ + ], 실행 중이 아닌 경우 [ - ]로 표시
service --status-all

- 서비스 종료
- sudo 권한 필요
sudo service '서비스명' stop
- 8080 포트가 사라진 것을 확인 가능


19. systemctl
- service가 지원되지 않는 경우 systemctl로 관리해야 함
- apt를 통해 설치한 모든 프로그램 확인 가능
- 현재 실행 중인 모든 시스템 확인
- Enter를 눌러 다음 페이지로 넘어가고, Ctrl + C 또는 q로 나올 수 있음
sudo systemctl list-unit-files

- 파이프라인을 사용하여 서비스 검색 가능
sudo systemctl list-unit-files | grep '서비스명'

- 서비스 상태 확인
sudo systemctl status '서비스명'

- 서비스 실행 / 종료
sudo systemctl start '서비스명'
sudo systemctl stop '서비스명'


20. ps
ps
- 현재 실행 중인 프로세스 목록 확인
ps -ef

- PID : 프로세스 ID (프로세스 고유 번호)
- UID : 프로세스 주인 ID
kill
- 프로세스를 systemctl로도 종료시킬 수 없을 때 (서비스 등록이 안되어 있을 때 등) 강제 종료
- 프로세스 종료 옵션 확인
kill -l

- 9 (SIGKILL) : 강제 종료
- 15 (SIGTERM) : 대기 후 종료 (default)
- 해당 프로세스 UID 확인
- 두 번째 탭에 있는 숫자가 UID : tomcat의 UID는 95204
ps -ef | grep '프로세스명'

- 각 프로세스는 UID의 주인만 종료(kill) 가능
- sudo 권한을 이용하여 종료
sudo kill PID
sudo kill -9 PID # SIGKILL (강제종료)
sudo kill -15 PID # SIGTERM (default, 대기 후 종료)
sudo kill -2 PID # SIGINT (인터럽트)

- kill 한 이후 서비스 재시작
- Active(exited) 상태일 경우 서비스는 시작된 상태이나 실제로 작동하지 않음
sudo systemctl restart '서비스명'

awk
- script를 이용하여 자동 실행 및 환경 설정이 가능
- 공백을 기준으로 토큰화하여 배열로 제작 : 파싱 가능
- 현재 실행 중인 ‘tomcat10’ 이라는 프로세스를 서비스 종료하는 스크립트
- 토큰 배열은 1번지부터 시작 : PID는 2번지에서 찾아야 함
- ps -ef 이후 명령어 입력 시 해당 명령어도 찾으므로 명령어는 제거 : grep -v
- 2번지 값을 반환 : awk ‘{print $2}’
sudo kill `ps -ef | grep tomcat10 | grep -v grep | awk '{print $2}'`

21. su
- root 계정 접속
- 비밀번호를 입력해야 접속 가능 : 비밀번호를 모름 → 생성 필요
su root

- 비밀번호 생성 / 변경
- 비밀번호는 입력해도 보이지 않음
sudo passwd root

- 변경한 비밀번호로 로그인 시 계정 변경

Permission
- 모든 파일과 폴더에는 권한이 존재

- 다음과 같이 root로 test1.txt 파일을 만들었을 때, 다음과 같은 표시 출력
-rw-r--r-- root root test1.txt
__________ ____ ____ __________
권한 사용자 그룹 파일명
- 권한을 세분화하여 표시
- 맨 앞 : 파일 구분
- d : directory
- l : link
- - : file
- 첫 3글자 : 사용자 권한
- 중간 3글자 : 그룹 권한
- 마지막 3글자 : 다른 사용자 권한
- r : 읽기 권한 (read)
- w : 쓰기 (수정) 권한 (write)
- x : 실행 권한 (execute)
- 각 권한을 총 3비트씩 쪼개어, 0 ~ 7까지 권한 설정 가능
- r : 4
- w : 2
- x : 1
- rw일 경우, 4 + 2 = 6, r일 경우 4이므로 이 파일의 권한은 644
- rw- r-- r--
_ ___ ___ ___
^ user group other
|
type
chmod
- 권한을 변경하는 명령어
- 해당 파일의 사용자 또는 root 등의 관리자 계정에서 권한 변경 가능
sudo chmod 646 test1.txt

chown
- 그룹을 변경하는 명령어

- test2.txt는 others인 ubuntu에게 수정 권한이 없음
- 파일의 그룹을 ubuntu로 옮겨 그룹 내 사용자만 파일 수정이 가능하도록 권한 설정 가능
- 파일 권한 설정 : user, group만 읽기, 수정 가능
sudo chmod 664 test2.txt

- test2.txt의 그룹을 ubuntu로 이동
sudo chown root:ubuntu test2.txt

- 정상적으로 수정 가능

22. find
- 파일 찾기
- Linux는 설치한 파일을 한 파일 내에 모아두지 않음
- 파일을 찾기 위해서는 명령어를 통해 직접 찾아야 함
sudo find / -name '파일명'

Changing Port Number
- tomcat의 포트 번호를 8080에서 8000으로 변경 → server.xml 파일을 찾아야 함
- /etc/tomcat10 폴더 내에서 server.xml 파일 검색
sudo find /etc/tomcat10 -name server.xml

- 해당 폴더 진입 후 권한 변경
- sudo chmod 660 server.xml
- sudo vi server.xml ← 관리자 권한으로 vi 에디터 실행 : 수정 후 저장 가능


- 수정 후에 포트를 확인해도 그대로 8080 포트 사용 : 서비스 재시작 필요
- sudo systemctl restart tomcat10

- 포트 번호 변경 시 보안 정책 변경 필요 : AWS 인바운드 규칙 수정

- 포트 변경 후 정상 진입 확인

23. Logging
tail
- 서버에서 사용자 접속, 요청 등에 대한 로그를 확인해야 함 → 디버깅
- catalina.out 파일 확인
- tail : 가장 끝의 10줄을 보여주는 명령어
- 로그가 계속 작성되기 때문에 tail로 보면서 관리해야 함
- -f : 실시간으로 확인 가능
cd /var/log/tomcat10
sudo tail -f catalina.out

- 서버 재 시작 시 실시간으로 로그가 남는 것을 확인 가능

Standard In/Out/Error
- stdin : 표준 입력 스트림
- 키보드 입력
- stdout : 표준 출력 스트림
- 터미널 및 콘솔 출력
- stderr : 에러 출력 스트림
- 기본적으로 출력 스트림과 동일
- ‘>’ 기호를 사용하여 출력 위치 변경 가능
- 2> : 에러만 저장
- 1> : 정상 출력만 저장
sudo tail -f catalina.out > log.txt # 모든 로그 저장
sudo tail -f catalina.out 2> error.txt 1> log.txt
# 에러는 error.txt, 정상 로그는 log.txt에 저장

Share article