소소한 컴퓨터 이야기

내가 보려고 만든 Ubuntu 서버 세팅 명령어

by Cori

서버 작업하면서 참고하려고 작성한 포스트이기 때문에, 설명이 친절하지 않을 수 있음 

※ 가끔가다 업데이트 진행 (최종 업데이트: 2022.10.31)

 

2023.01.28  - Jupyter Notebook 관련 설정 업데이트


0. 초기 설정

1) 패키지 업데이트

$ sudo apt update 

$ sudo apt upgrade -y 

$ sudo reboot 

 

2) 기본 패키지 설치

$ sudo apt install tree -y 

$ sudo apt install unzip -y 

$ sudo apt-get install vim 

$ sudo apt-get install gcc 

$ sudo apt install net-tools 

$ sudo apt-get install build-essential

$ sudo apt-get install python3-pip

$ sudo apt install ufw 

 

3) ssh 서버 설정

$ sudo apt-get install ssh 

$ sudo vi /etc/ssh/sshd_config 

    PermitRootLogin yes  (기존 구문 주석 처리, 파일 종료)

$ sudo service ssh status 

$ ps -ef | grep sshd 

$ ifconfig 

 

* local server에서 host key verification failed error 발생하는 경우

$ ssh-keygen -R 192.168.0.4

 

1. 간단하지만 유용한 명령어

$ nvidia-smi  - NVIDIA 정보 조회 

$ history  - 명령어 로그 조회    # echo $HISTFILE 명령어를 통해 파일 위치 확인 후 조회할 수도 있음

$ clear  - 화면 정리 

$ cat /etc/issue  - ubuntu 버전 조회 

$ whereis [패키지]  - 찾고자 하는 패키지 위치 조회 

$ top - 스레드 현황 조회   # top -b -n 1 | grep zombie  - 숫자만 간략히

$ ps -ef | grep defunct | grep -v grep - 좀비스레드 조회

$ sudo kill -9 / -15 [PID] - 좀비쓰레드 죽이기    # 9: 일반 종료, 15: 강제 종료 

$ df -h  - ubuntu 남은 용량 확인 

$ sudo du -sh [파일 경로]  - 디렉토리 파일 별 용량 조회

$ last  - 시스템 접속 기록 조회 (로그인 & 로그아웃)

$ uname -n   - 호스트 이름 출력 

$ grep [사용자이름] /etc/passwd  - 기본 셀 정보 확인

 

2. 사용자 추가 및 관리

1) 사용자

$ cat /etc/passwd  - 전체 사용자 조회

$ sudo useradd [사용자이름]  - 추가 세팅을 직접해야 함 

$ sudo adduser [사용자이름]  - 경로 생성부터 비밀번호 설정까지 편하게 할 수 있음

$ sudo deluser [사용자이름]  - 사용자 삭제 (사용자가 접속중인 경우 삭제 불가) 

$ sudo usermod -aG sudo [사용자이름]  - 해당 사용자에 관리자 권한 부여 (not in sudoers 오류 해결) 

$ sudo whoami  - 내가 관리자 권한을 가지고 있는지 알 수 있음

$ vi /etc/group에서 sudo 그룹 사용자 삭제

$ ps -aux | grep -i pts/3   - 접속을 해제시킬 사용자 id 조회  (pts/3 옆 id 값)

$  kill -9 {사용자id}

 

2) 그룹

$ cat /etc/group  - 현재 등록된 그룹 조회

$ groupadd (-g GID) [그룹 이름]  - 그룹 추가하기    # -g: 원하는 그룹 번호 지정

$ groupmod -n group-2 group-1  - group-1 -> group-2로 변경

$ sudo usermod -a -G [그룹 이름] [사용자 이름]  - 그룹에 사용자 추가 

$ sudo usermod -g / -G [그룹 이름] [사용자 이름]  - 사용자 그룹 변경    # -g: 기본 그룹 변경, -G: 추가 그룹 변경

$ sudo usermod -L  [사용자이름] - 사용자 패스워드에 Lock을 걸어 로그인을 제한

$ sudo usermod -U [사용자이름]  - 사용자에 걸린 Lock을 해제

$ sudo usermod -d [사용자이름]  - 홈디렉토리 변경

$ sudo gpasswd -A [사용자이름] [그룹이름]  - 사용자에 그룹의 관리자 권한 부여   

 

* root 사용자가 특정 사용자에 그룹의 관리자 권한을 부여한 경우, 해당 사용자로 로그인 후 

$ gpasswd [그룹이름] [패스워드]   - 그룹의 패스워드 설정 

$ gpasswd -a [사용자이름] [그룹이름]  - 그룹에 사용자 추가 

 

3. 접근 권한 설정

$ sudo chown (-R) [소유자 이름]:[그룹 이름] [폴더 이름]  - 폴더의 소유자, 그룹 소유권 변경   # -R: 하위 파일에도 모두 적용

$ sudo chmod (-R) xxx [폴더 이름]  - 해당 폴더의 권한 변경   # xxx: 소유자, 그룹, 일반 사용자 순서 (000, 770, ...)

https://itworld.gmax8.com/25

4. Anaconda

0) 사이트

- https://www.anaconda.com/products/distribution

 

1) 서버에 이미 Anaconda가 설치되어 있는 경우  - 경로 설정

$ whereis conda

$ vi ~/.bashrc

    마지막 줄에 export PATH=[conda 경로]:$PATH 추가 후 :wq

    ex) export PATH=/home/ubuntu/anaconda3/bin/:$PATH

$ source ~/.bashrc    # 파일 업데이트 

$ conda --version    # 잘 동작하는지 확인 

 

2) 서버에 Anaconda가 없는 경우

0)의 사이트에서 관련 파일을 다운로드하고, 서버에 업로드

$ bash Anaconda~.sh    # sh 파일 실행하기 

 

3) 가상환경 관련

$ conda env list   - 가상환경 조회

$ conda create -n [가상환경이름] python=[버전]   - 가상환경 생성 

$ conda activate [가상환경이름]   - 가상환경 활성화 

$ conda deactivate  - 가상환경 비활성화

$ conda remove --name [가상환경이름] --all  - 가상환경 삭제

$ conda list --export > [경로/파일명.txt]  - 지정한 경로에 가상환경에 설치된 라이브러리들을 파일로 저장

$ conda env export -n [가상환경이름] > [가상환경이름.yml]  - 가상환경의 이름과 패키지들을 추출 

$ conda env create -f [가상환경이름.yml]  - 추출한 가상환경을 가지고 새로운 가상환경 생성 

$ conda create -n [새로운 가상환경이름] --clone [기존 가상환경이름]  - 가상환경 복제 

 

5. github

0) git 설치 및 초기 설정

$ sudo apt-get install git-core   # git 설치

$ git --version   # git 버전 확인

$ git config --global user.email [github 이메일주소]    # ex) A@naver.com

$ git config --global user.name [github 사용자이름]    # ex) A 

$ git config -l   # git config 정보 확인 

 

1) git 연동

$ cd [github와 연동할 디렉토리] 

$ git init   # 새로운 git 로컬 저장소로 지정 

 

2) git-lfs설치

$ sudo apt install curl

$ curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash

$ sudo apt-get -y install git-lfs

$ sudo apt update

$ sudo apt -y install git-lfs

 

6. Jupyter Notebook

0) Jupyter Notebook 설치 및 삭제

$ pip install jupyter notebook    

$ jupyter notebook --generate-config    # 환경파일 생성 

$ jupyter notebook password     # 비밀번호 설정 

 

$ pip install pip-autoremove

$ pip-autoremove jupyter -y

$ pip-autoremove jupyter-core -y 

$ pip freeze | grep jupyter

 

1) Config 파일 설정    - 2022.10.31 update

Ipython    # 파이썬 콘솔 창 실행

  from notebook.auth import passwd

 

  passwd()    # 해당 명령어로 나온 해시 값 복사

exit()

 

jupyter notebook --generate-config    # 경로 확인

vi [확인한경로/~config.py    # 환경 설정 파일

  c = get_config()

  c.NotebookApp.allow_origin = '*'

  c.NotebookApp.notebook_dir = '/home/~'

  c.NotebookApp.port = '8888'

  c.NotebookApp.password = u'위에서 복사한 해시 값'

:wq    # 변경 사항 저장

 

2) Jupyter Notebook 접속

$ jupyter notebook --ip=[ip주소] --port=[포트번호] --allow-root    # ip주소는 보통 0.0.0.0 입력해서 접속함 

 

3) Jupyter Notebook 경고 메시지 관련

import warnings

 

warnings.filterwarnings(action='ignore')   # 경고 메시지 무시 

warnings.filterwarnings(action='default')   # 경고 메시지 표시

 

4) 방화벽 관련

$ sudo ufw status  

$ ufw app list   # output: OpenSSH

$ ufw allow 8888

$ ufw enable   # - 미확인

 

7. ssh 접속 시간 설정

$ whereis ssh    - ssh 파일 위치 조회    # /etc/ssh

$ cd /etc/ssh

$ chown [사용자이름]:[그룹이름] sshd_config   - 해당 파일 접근을 위해 접근 권한 임시 변경 

$ vi sshd_config    - 파일 수정 

해당 파일에서

    ClientAliveInterval 주석 해제 후 값 전달 (600 -> 600s)

    ClientAliveCountMax 주석 해제 후 값 전달 (3 -> 3번 count)

    위처럼 설정할 경우 600s x 3 = 1800s (30 min) 동안 접속 유지됨. 이후 파일 빠져나오기

$ chown [root]:[root] sshd_config   - 접근 권한 원상 복구

$ sudo systemctl restart ssh    - ssh 재시작

 

8. KoBERT, KoELECTRA 실행환경 구축

$ pip install tensorflow-gpu

$ pip install environment_kernels 

$ pip install pandas 

$ pip install scikit-learn 

$ conda install pytorch==1.11.0 torchvision==0.12.0 torchaudio==0.11.0 cudatoolkit=11.3 -c pytorch -y

$ pip install transformers

$ pip install pymysql

$ pip install matplotlib

$ pip install seqeval

$ pip install fastprogress

$ pip install attrdict 

$ pip install torchmetrics

$ pip install git+https://git@github.com/SKTBrain/KoBERT.git@master

 

* CUDA Error: no kernel image error가 발생하는 경우

다음 사이트에서 Compute Capability 확인  -  https://developer.nvidia.com/cuda-gpus

$ export TORCH_CUDA_ARCH_LIST=compute capability     # export TORCH_CUDA_ARCH_LIST=8.0

$ conda uninstall torch    # 기존 torch 삭제 

$ conda install pytorch==1.11.0 torchvision==0.12.0 torchaudio==0.11.0 cudatoolkit=11.3 -c pytorch -y

 

* Tensorflow 설치 후 import tensorflow 해도 오류가 발생하고, import 되지 않는 경우

$ pip uninstall tensorflow-gpu==1.15.0

$ python -m pip install --upgrade pip

$ pip install tensorflow-gpu==1.15.0

 

9. MySQL

0) MySQL 설치

$ sudo apt install mysql-server -y    # mysql 설치 

$ sudo ufw allow mysql   # 외부 접속 기능 설정 (포트 3306 오픈)

$ sudo systemctl start mysql    # Mysql 실행

$ sudo systemctl enable mysql     # Mysql 접속 허용 

$ sudo service mysql stop    # MySQL 서버 중지  

$ sudo service mysql start    # MySQL 서버 실행 

 

1) 사용자, 테이블, 데이터베이스 조회 

$ sudo /usr/bin/mysql -u root -p  (or) sudo mysql -u root -p   # mysql 서버 접속 (비밀번호: ubuntu 접속 비밀번호) 

SHOW DATABASES;   # 데이터베이스 조회

SELECT DATABASE();   # 현재 사용중인 데이터베이스 조회

SELECT user, host from mysql.user;    # 사용자 조회 

USE [데이터베이스명];    # 사용중인 데이터베이스 변경 

SHOW TABLES;   # 데이터베이스에 추가되어 있는 테이블 조회 

DESC [테이블명];   # 테이블의 스키마 조회

SHOW PROCEDURE STATUS;   # 프로시저 조회

 

2) 데이터베이스, 테이블, 사용자 생성

# root@localhost 비밀번호 설정

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new-password';     

CREATE USER '[사용자이름]' identified by '[비밀번호]';   #  mysql 사용자 생성

    - '[사용자 이름]'@'%': 모든 원격지에서 접속 가능 

    - '[사용자 이름]'@'192.168.%': 특정 ip에서 접속 가능

ALTER USER '[사용자이름']@[server명] IDENTIFIED BY '[비밀번호]';   # 사용자 비밀번호 변경   

DROP USER [user명]@[server명];   # mysql 사용자 삭제 

 

3) 권한 관련

SHOW GRANTS FOR 'userId'@'192.168.xxx.xxx';   # 사용자 권한 조회

GRANT ALL PRIVILEGES ON [데이터베이스 이름].* to [사용자이름]@[localhost]    # 사용자에 해당 데이터베이스의 모든 권한 부여

FLUSH PRIVILEGES;   # 계정 권한 업데이트 

REVOKE ALL PRIVILEGES ON devdb.* TO 'userId'@'192.168.xxx.xxx';   # 사용자 권한 회수 

 

4) python과 mysql 연동

$ conda install pymysql    # python에서 MySQL 접속을 위한 툴 설치

# python 파일 실행, MySQL 접속

$ conn = pymsql.connect(host='호스트명', user='사용자명', password='비밀번호', db='데이터베이스이름', charset='utf8')   

$ curs = conn.cursor()   # 커서 생성 

$ sql = 'sql 구문;'    # 실행할 SQL문 작성 

$ curs.execute(sql)     # SQL문 실행  

$ curs.fetchall()    # SQL 문이 SELECT, DELETE, INSERT 등인 경우 실행 

$ curs.close()

$ conn.commit()   # 이거를 해줘야 변경상황이 업데이트 됨 !

$ conn.close()   # 접속 종료 

jupyter notebook <-> MySQL

10. 방화벽

1) 서버 접속 방화벽

필요 정보: 출발지 IP Address, 목적지 IP Address, 포트 번호, 프로토콜(TCP/UDP)

* 출발지 IP Address는 사설 IP 주소가 아닌, 공인 IP 주소가 필요함  

2) 주피터 접속 방화벽

필요 정보: 출발지 IP Address, 목적지 IP Address, 포트 번호, 프로토콜 (TCP/UDP)

* 서버 내 가상환경에서 주피터 노트북 접속시에 설정하는 방화벽 정보도 포트 번호(8888)를 제외하면 서버 접속 방화벽과 동일

* 포트 번호를 여러 개 설정하여 각 계정별로 다른 포트로 접속하여 주피터 노트북 사용할 수 있음 

 

11.  NUMA(Non-Uniformed Memory Access) 

* tensorflow를 이용한 GPU 사용 도중, successful NUMA node read from SysFS had negative value (-1) 오류 발생 

1) 노드 확인 

$ lspci | grep -i nvidia   - NVIDIA GPU 번호 조회 (00:06.0)

2) NUMA 설정 값 확인 및 변경

$ cd /sys/bus/pci/devicecs/ 

$ ls    # NUMA 노드 조회  - 위에서 확인한 00:06.0이 보이며, 앞에 0000: 이 붙은 것을 볼 수 있음

$ cat /sys/bus/pci/devices/0000\:00\:06.0/numa_node   - -1: 연결 x, 0: 연결 o 

$ echo 0 | sudo tee -a /sys/bus/pci/devices/0000\:00\:06.0/numa_node   # NUMA 노드 연결하기 

$ cat /sys/bus/pci/devices/0000\:00\:06.0/numa_node   - 다시 조회

 

♣ 참고 자료

https://m.blog.naver.com/jesang1/221993846056

https://languagestory.tistory.com/m/135

https://kig6022.tistory.com/14

https://rueki.tistory.com/162

https://bluecolorsky.tistory.com/71

https://lapina.tistory.com/m/137

https://ngio.co.kr/9681

https://light-tree.tistory.com/111

https://somjang.tistory.com/entry/Ubuntu-%ED%98%84%EC%9E%AC-%EC%A0%91%EC%86%8D%ED%95%B4%EC%9E%88%EB%8A%94-%EC%82%AC%EC%9A%A9%EC%9E%90-%ED%99%95%EC%9D%B8-%EB%B0%8F-%EC%A0%91%EC%86%8D-%ED%95%B4%EC%A0%9C-%EC%8B%9C%ED%82%A4%EB%8A%94-%EB%B0%A9%EB%B2%95

'CS > Server' 카테고리의 다른 글

Amazon ec2 instance 기본 세팅하기  (0) 2024.03.11
EC2 Setting  (2) 2024.01.03
Window 딥러닝 서버 세팅 일지  (0) 2023.02.24
Ubuntu 딥러닝 서버 세팅 일지  (0) 2023.02.06
VSCode를 이용한 Ubuntu 원격 서버 접속  (0) 2022.10.04

블로그의 정보

코딩하는 오리

Cori

활동하기