게임 서버 개발자로서 알아야할 리눅스 사용에 대한 글이다.
기본 사용
관리자 권한 얻기
개인 로컬은 root 로 로그인하는 경우가 많아 관리자 권한을 따로 얻지 않아도 됩니다.
상용 및 테스트 서버를 제공받는 경우 시스템 엔지니어가 관리자 권한을 제공해주며, 위 명령어를 쳐서 배쉬에 root@localhost 가 뜨는 것을 확인합니다.
현재 작업중인 디렉토리 체크
현재 작업중인 폴더의 위치를 보여줍니다.
보여지는 경로는 절대 경로이며, 리눅스의 절대경로와 상대경로에 대해서 공부하면 아래의 명령어들이 한결 쉬워집니다.
파일, 디렉토리 목록과 정보 출력
현재 작업 중인 폴더안에 있는 디렉토리와 파일 리스트를 보여줍니다.
많은 옵션들이 있으니 ls --help 명령어로 확인한 뒤 필요한 옵션을 줘서 출력할 수 있습니다.
List 의 약어
ls option
- ls -f: 디스크에 저장된 순서로 출력
- ls -a: 숨겨진 파일 포함한 모든 내용을 출력
- ls -l: 상세한 내용 포함한 출력
- ls -m: 가로로 출력
- ls -c: 최근 변경된 파일부터 정렬하여 출력
두 개 이상의 옵션을 줄 때 ls -al 과 같이 묶어서 사용할 수 있음!
대소문자별로 옵션이 다르니 구글 참고!
ll
ls -l 과 동일한 명령어로 상세한 내용을 포함하여 폴더와 파일 리스트를 출력해줍니다.
가장 왼쪽은 접근권한을 의미하며 아래와같이 해석하면됩니다!
디렉토리 다루기
폴더 만들때 사용하는 명령어
mkdir -p /game/public_html 으로 명령할 경우 부모 디렉토리가 없다면 같이 생성
8진수를 사용하여 폴더 또는 파일의 권한을 변경합니다.
chmod_8
권한 변경 시 소유자, 그룹권한, 전체권한을 합쳐서 3자리 모두 바꿔줘야합니다.
예시: chmod 777 index.php ->해석: index.php 파일의 소유자와 소유그룹과 모든 계정의 읽기, 쓰기, 실행을 허용
chown 소유자.그룹 대상
chown
소유자 변경하는 명령어
주로 파일이나 경로가 맞는데 access 가 되지 않는다면 권한문제일 확률이 높습니다.
소유자 or 권한 중 1개만 변경도 가능합니다.
TIP!
OPTION 중 '-R' 은 하위 레벨도 전체 변경이라는 옵션이며 다른 폴더 관련 명령에도 동일하게 사용 됨!
VI 편집기
vi 파일명
vi 와 vim의 차이는 vim 이 조금 더 향상된 편집기 입니다. (문법 강조와 같은 기능을 제공해줌)
vi 로 파일을 열거나 새로 생성 할 수 있습니다.
vi i
파일에서 편집모드로 바꾸기 위해선 i 를 눌러 편집모드로 변경합니다.
이외의 단어 검색, 줄 지움 복사등과 같은 편집 기능은 각자 찾아 학습합니다.
파일 다루기
cp '파일명'
파일복사 할때 사용하는 명령어
cp '복사 할 파일' '복사될 경로와 새로운 파일명'
cp -a 옵션은 소유권자와 소유그룹을 동일하게 복사할 수 있습니다.
mv '파일명'
mv '옮길 파일' '옮겨질 경로' 윈도우의 잘라내기 기능이라고 보면 됩니다.
권한과 소유자 그대로 새로운 위치에 파일을 옮깁니다.
cat
cat파일 내용을 그대로 읽어들여 출력합니다.
상용 서버에서 용량이 큰 파일을 vi 편집기로 열어서 내용을 확인할 경우 메모리 과부하로 서버가 다운될 수 있으며 그경우 cat 을 사용하여 파일을 열람합니다.
파이프 라인(|) 으로 grep 명령을 이용하여 특정 단어를 포함하는 내용을 출력 할 수 있습니다. (로그검색시 유용!)
cat grep
예시: cat smon_baidu_debug_debug_00000 |grep "2018-03-05"
->해석: smon_baidu_debug_debug_00000 파일에서 2018-03-05 문자열이 들어간 line 을 출력.
-> more 명령은 창크기에 맞춰서 자동으로 내용을 문단으로 짤라서 보여줌 (다음페이지는 스페이스바)
grep 명령에는 정규표현식을 사용하도록 하면 좀더 다양한 형태로 검색할 수 있습니다.
tail
vi 편집기로 열기 어려울 때 파일의 끝부분만 확인할 수 있는 명령어입니다.
-f 옵션을 주면 실시간으로 들어오는 line 을 볼 수 있어 디버깅할 때 유용하게 사용 할 수 있습니다.
과거 명령어 기록 보기
과거에 사용했던 명령어를 출력하는 명령어 입니다.
검색해서 사용했던 명령어가 기억나지 않을 때 사용하면 유용해요!
프로세스 상태 확인
파일 이름/내용 검색
HTTP Client CLI
시스템 데몬(서비스) 제어하기
systemctl status nginx systemctl start nginx systemctl restart nginx systemctl enable nginx |
레드햇 계열 패키지 매니저
yum list yum info yum install yum remove |
스케줄러 등록
연습하기
- 패키지 매니저를 통해 nginx 웹서버 설치 후 서비스로 실행하기
- nginx 웹서버 실행 중 http://localhost 웹 요청하기
- 현재 프로세스 목록에서 nginx 내용만 출력하기
- 위 내용을 /tmp/mylog/{오늘날짜}.log 파일로 저장하기
- 스케줄러를 통해 /tmp/mylog/* 파일 중 생성된지 10분이 지난 파일을 주기적으로 삭제하기
명령어와 예시가 가장 쉽게 볼 수 있는건 제타위키 입니다.
실습 - 원격제어
학습할 것
목적
- SSH Key 를 생성하는 방법을 학습합니다.
- SSH 원격 접속과 원격 접속에 필요한 설정을 학습합니다.
- SCP 를 이용해 파일을 전송하는 방법을 학습합니다.
실습
해당 실습은 window 환경에서 진행되며 wsl2 설치가 필요합니다.
wsl 설치가 되지 않았을 경우 windows10 + wsl2 환경 docker 데몬 설치 에 wsl2 설치를 참고해주세요.
( wsl 설치 시에 설정한 user의 비밀번호를 꼭 기억해주세요! )
wsl에 원격 접속하는 이유는 local 환경에서 원격 서버로 접속하는 방식을 따라 해보기 위함이니 필요할 때는 바로 접속하시면 됩니다.
wsl 로 접속하여 사전에 설정 해야 하는 부분이 있습니다.
sudo vim /etc/ssh/sshd_config
* * 수정 * * ... AuthorizedKeysFile .ssh/authorized_keys # 주석 해제 ... PasswordAuthentication yes # no -> yes ... * * * * * * *
# ssh service 재시작 sudo service ssh restart
# 부팅 시, ssh 시작 설정 sudo update-rc.d ssh enable # ubuntu
# wsl의 ip 확인 ifconfig # eth0 의 inet 뒤에 ip 를 기억해주세요.( *부팅할 때 마다 ip 는 변경됩니다. ) |
ssh 프로토콜을 이용해 linux 서버에 접속할 때는 2 가지 방법이 사용됩니다.
- pem 키를 이용한 접속
- password 를 이용한 접속
wsl 을 이용해 2 가지 방법에 대해 실습 해보도록 하겠습니다.
SSH 접속
1. pem 키를 이용한 접속
# 실행 위치: C:\Users\user\.ssh ( 다른 위치에서 실행 시, key 위치를 절대 경로나 상대 경로로 수정해야 합니다.) # key 생성 ssh-keygen -t rsa -b 2048 -m pem -f com2us.pem # C:\Users\user\.ssh 아래에 private key인 com2us.pem 와 public key인 com2us.pem.pub 생성 됩니다.
# pem key 권한 변경 com2us.pem > 속성 > 일반 > 읽기전용 선택 > 적용, 확인
# 원격 서버로 public key 전달 ssh-copy-id -i com2us.pem <wsl_유저>@<wsl_ip> # 1회 비밀번호를 입력해주셔야 합니다. # 원격 서버의 /home/<wsl_유저>/.ssh/authorized_keys 안에 public key 가 입력됩니다.
ssh -i com2us.pem <wsl_유저>@<wsl_ip> # 앞으로 접속할 때, 따로 비밀번호를 입력할 필요가 없습니다. |
2. password 를 이용한 접속
ssh <wsl_유저>@<wsl_ip> # 비밀번호를 입력해주세요 |
SCP
scp 는 SSH 기반의 Secure Copy Protocol 프로토콜을 사용하는 호스트 간 파일 복사 프로그램입니다.
1. pem 키를 이용한 접속
# 실행 위치: C:\Users\user\.ssh ( 다른 위치에서 실행 시, key 위치를 절대 경로나 상대 경로로 수정해야 합니다.) # 전송할 파일 생성 type nul > test.txt # cmd touch test.txt # git bash
# local -> 원격 전송 scp -i com2us.pem test.txt <wsl_유저>@<wsl_ip>:~/.
# 원격 -> local 전송 scp -i com2us.pem <wsl_유저>@<wsl_ip>:~/test.txt return.txt
# 폴더 전송( -r 옵션 ) scp -r -i com2us.pem <Directory> <wsl_유저>@<wsl_ip>:~/<Remote_Directory> |
2. password 를 이용한 접속
# 실행 위치: C:\Users\user\.ssh ( 다른 위치에서 실행 시, key 위치를 절대 경로나 상대 경로로 수정해야 합니다.) # 전송할 파일 생성 type nul > test.txt # cmd touch test.txt # git bash
# local -> 원격 전송 scp test.txt <wsl_유저>@<wsl_ip>:~/. # 비밀번호를 입력해주세요
# 원격 -> local 전송 scp <wsl_유저>@<wsl_ip>:~/test.txt return.txt # 비밀번호를 입력해주세요
# 폴더 전송( -r 옵션 ) scp -r <Directory> <wsl_유저>@<wsl_ip>:~/<Remote_Directory> # 비밀번호를 입력해주세요 |
Tip
ssh config 설정하기
원격 서버에 대한 별칭을 만들어서 좀 더 쉽고 빠르게 원격 접속을 할 수 있습니다.
# 실행 위치: C:\Users\user\.ssh C:\Users\user\.ssh\config 생성 * * * 입력 * * * Host com HostName <wsl_ip> IdentityFile ~/.ssh/com2us.pem User <wsl_유저> * * * * * * * * *
# 원격 접속 ssh com
# local -> 원격 전송 scp test.txt com:~/. |
혹시 매번 바뀌는 wsl ip 를 고정하고 싶으시다면 다음 글을 참고해주세요
WSL2 활용도를 높여주는 고정 IP 설정
실습 - 사용자 및 그룹 관리
학습할 것
목적
- 사용자를 생성, 조회, 수정, 삭제하는 방법과 비밀번호를 설정하는 방법을 학습합니다.
- 그룹을 생성, 조회, 수정, 삭제하는 방법을 학습합니다.
과제
- wsl 로 직접 접속 후, com1us 유저를 생성하여 아래 방식으로 로컬에서 ssh 를 통해 wsl 로 접속이 가능한지 확인해 보세요.
- password 로그인
- pem key 로그인
- wsl 로 직접 접속 후, com2us 유저를 홈 디렉토리와 함께 생성한 뒤 pem key 를 이용해 ssh 접속해 보세요.
- com1us 유저로 접속 후, com2us 유저 계정의 비밀번호를 바꿀 수 있는지 확인해 보세요.
- com2us 유저 그룹에 sudo 그룹을 추가해 보세요.
- com2us 유저로 접속 후, com1us 유저의 비밀번호를 변경해 보세요.
- go2us 라는 그룹을 생성 해보세요.
- com2us 유저 그룹에 go2us 그룹을 추가해보세요.
- 모든 유저와 그룹을 조회해 보세요.
- com2us 유저가 속한 그룹을 조회해 보세요.
- go2us 그룹을 삭제해 보세요.
- com1us 유저를 삭제해 보세요.
실습 - 파일 다루기
학습할 것
- [LINUX] 📚 파일 관리 명령어 💯 정리
- [LINUX] 📚 디렉토리 명령어 💯 정리
- [리눅스, 유닉스]vi (vim) 편집기 기본 사용법, 명령어, 단축키, 동작법 & 문제
- Nano
- [LINUX] 📚 find 명령어 정복하기 [파일 검색]
- [LINUX] 📚 파일 & 디렉토리 권한 (소유권 / 허가권 / 특수권한) 💯 정리
- [기본] 리눅스의 퍼미션(권한)을 조정하기 (chmod, chown)
목적
- 파일과 디렉터리를 생성, 수정, 삭제하는 방법을 학습합니다.
- 파일과 디렉터리를 이동, 복사하는 방법을 학습합니다.
- 파일과 디렉터리를 검색하는 방법을 학습합니다.
- 파일에 부여된 권한에 대해 이해합니다.
- 파일 권한을 수정하는 방법을 학습합니다.
- 파일의 소유권을 수정하는 방법을 학습합니다.
과제
- 아무 내용이 없는 empty 파일을 생성해 보세요.
- secret 디렉터리를 생성해 보세요.
- empty 파일을 secret 디렉터리 안으로 이동시키고 파일명을 fake 로 변경해 보세요.
- vim 을 이용해 secret 디렉터리 안에 com1us.txt 파일을 만들고 내용에 '컴원어스'를 입력 후 저장해 보세요.
- nano 를 이용해 secret 디렉터리 안에 com2us.txt 파일을 만들고 내용에 '컴투어스'를 입력 후 저장해 보세요.
- com1us.txt 파일 이름을 com3us.txt 로 변경해 보세요.
- fake 파일을 삭제해 보세요.
- secret 디렉터리를 삭제해 보세요.
- /etc 디렉터리 아래에 있는 journald.conf 파일의 위치를 찾아보세요.
- /var 디렉터리 아래에 있는 log 파일을 모두 찾아보세요.
- hello.sh 라는 shell script 파일을 만들었습니다. 그런데 아무리 실행을 하려고 해도 실행이 되지 않습니다. 현재 상태에서 모든 유저가 hello.sh 파일을 실행 하기 위해서는 어떤 명령을 수행해야 하나요?
- 추가적인 요구사항으로 hello.sh 파일은 다른 user 들은 편집과 실행을 할 수 없어야 합니다. 다른 유저들이 편집과 실행할 수 없도록 하기 위한 명령은 무엇인가요?
- 상용 환경에서 애플리케이션 설정이 담긴 yaml 과 json 파일들이 config 디렉터리 아래에 있습니다. root 유저와 그룹을 제외하고 다른 유저들은 어떠한 권한도 없어야 합니다. 어떤 명령을 실행해야 하나요? ( user: root )
- com2us 유저로 바이너리 hello.tar.gz 파일 다운 받았습니다. 압축을 풀고 보니 hello 라는 파일의 소유자와 그룹이 com2us 로 되어 있습니다. 운영 환경에서 사용하기 위해서는 파일 소유를 root 로 변경해야 합니다. 어떤 명령을 실행해야 하나요? ( user: com2us )
실습 - 모니터링
학습할 것
목적
- CPU 상태와 사용량을 확인하는 방법을 학습합니다.
- Memory 상태와 사용량을 확인하는 방법을 학습합니다.
- Disk 상태와 파일 용량을 확인하는 방법을 학습합니다.
- Process 상태를 확인하는 방법을 학습합니다.
과제
- top 명령어의 디테일 영역에서 각각의 프로세스의 cpu, memory 사용률을 나타내는 열은 무엇인가요?
- top 명령어 실행 후, cpu 사용량, memory 사용량, 시간으로 한 번씩 정렬해보세요.
- top 명령어 실행 후, 현재 접속한 유저로 필터 해보세요.
- top 명령어로 top 프로세스를 중지 시켜보세요.
- 메모리 사용량을 조회했을 때, 단번에 이해할 수 있게 한번 확인해 보고 싶습니다. 무슨 명령을 수행해야 하나요?
- 리눅스 서버 안에서 실행 중인 Jenkins 로 배포할 컨테이너 이미지를 빌드하고 있었습니다. 그런데 어느 순간부터 'No space left on device' 라는 에러가 발생하면서 더 이상 빌드가 되지 않습니다.
- 가장 먼저 확인해 봐야 할 것은 무엇이며, 어떻게 확인해야 하나요?
- 현재 디스크의 입출력 상태가 궁금합니다. 무슨 명령어를 수행해야 하나요?
- /var 하위 디렉토리의 크기만 확인해보세요. (하위의 하위는 조회하지 않습니다.)
- /usr 디렉토리의 총 크기를 확인해보세요./var/log 하위 디렉토리의 크기를 오르차순, 내림차순으로 확인해 보세요. (하위의 하위는 조회하지 않습니다.)
- 시스템에서 동작 중인 모든 프로세스를 보고 싶을 때, 'ps aux', 'ps -ef' 라는 명령이 자주 쓰입니다. 앞서 언급한 명령으로 특정 조건에 해당하는 프로세스만 출력하고 싶습니다. 어떻게 해야 하나요?
- java 명령어로 실행된 프로세스
- 프로세스의 유저가 root 인 프로세스
실습 - 네트워크
학습할 것
목적
- 네트워크 인터페이스를 확인하는 방법을 학습합니다.
- 포트 상태를 확인하는 방법을 학습합니다.
- 특정 주소와 포트로 접근 가능 여부를 확인하는 방법을 학습합니다.
- DNS 의 아이피를 확인하는 방법을 학습합니다.
과제
- 현재 네트워크 인터페이스가 몇 개로 구성되어 있는지 확인해 보세요.
- 현재 사용 중인 네트워크 인터페이스의 IPv4, IPv6, Mac 주소를 확인해 보세요.
- 메일 알림 애플리케이션을 만들고 있습니다. 애플리케이션은 사내 SMTP 서버로 접근할 수 있어야 합니다. 접근 여부를 확인하기 위해 무슨 명령을 수행해야 하나요?( SMTP 서버 주소는 email.com2us.com 이고 포트는 25 번입니다. )
- 모든 소켓에 대해서 포트 번호를 숫자로 표시하고 PID와 함께 TCP 소켓만 각기 다른 명령어를 사용해서 2 가지 방법으로 조회해 보세요.
- 4번 과제의 각기 다른 명령어에서 22 번 포트의 정보만 출력해 보세요.
- com2us.com 의 아이피를 각기 다른 명령어를 사용해서 2 가지 방법으로 조회해 보세요.