각론 1강. 리눅스(Linux)
추천글 : 【운영체제】 운영체제 목차
1. 개요 [본문]
2. 설치 [본문]
3. 명령어 [본문]
a. 리눅스 서버
b. 리눅스 유용 함수 모음
1. 개요 [목차]
⑴ 맥OS, 우분투(ubuntu)는 리눅스 계열
⑵ 리눅스 환경에 익숙치 않을 시 Terminus 프로그램 이용 : 학생에게는 무료로 제공됨
2. 설치 [목차]
⑴ 방법 1. Ubuntu
① 우분투(Ubuntu) 등은 원래부터 리눅스를 운영체제로 하여 작동하므로 터미널을 켜면 리눅스를 조작할 수 있음
⑵ 방법 2. MacOS
① 2-1. 터미널로 ssh 명령어를 이용하면 리눅스 서버에 원격으로 접속할 수 있음
② 2-2. M1 MacBook에 Parallels로 Linux 설치
○ M1 맥북은 AMD64 desktop image를 사용하는 게 아니고 64-bit ARM desktop image를 사용해야 함
○ Ryzen 7은 AMD-V enabling을 지원하지 않음 : ARM desktop image를 사용해야 할 듯
⑶ 방법 3. Windows
① 3-1. 리눅스 서버에 접속하는 방법은 다음과 같음
○ mobaXterm
○ PowerShell
○ FireZilla
② 3-2. Windows에 VMware로 Linux 설치
○ virtual environment를 만들어서 Linux를 설치함
○ mobaXterm을 써서 파일 전송을 할 수 있음
○ AMD-V enable을 명시적으로 해야 할 수 있음 : GIGABYTE에서 AMD-V enable을 명시적으로 하는 방법은 아래 예시와 같음
○ 예시 1
○ 1st. PC 전원을 켠 뒤 바이오스 화면이 나올 때까지 Del 키를 빠르게 여러 번 누름
○ 2nd. 'M.I.T.' 탭으로 간 뒤 'Advanced 주파수 설정'으로 이동
○ 3rd. 'Advanced CPU 코어 설정'으로 이동
○ 4th. 'SVM Mode'에서 '사용 안 함'에서 '사용'으로 전환
○ 예시 2
○ 1st. 바이오스 화면으로 이동
○ 2nd. 'Tweaker' 탭으로 간 뒤 'Advanced CPU Settings'로 이동
○ 3rd. 'SVM Mode'에서 'Disabled'를 'Enabled'로 전환
3. 명령어 [목차]
※ 명령어를 기초부터 심화까지 순차적으로 정렬
○ ctrl + shift + v : 코드 붙여넣기
○ 리눅스 비상 탈출
○ ctrl + c : 코드 실행 강제 종료
○ ctrl + d
○ ctrl + \
○ ctrl + z : 코드 일시 중지
○ 리눅스 터미널 clear
○ ctrl + l : 완벽하게 clear 되지 않아 잘 안 쓰게 됨
○ clear
○ reset
○ echo -e '\033c'
○ tput reset
○ 변수
○ $변수명 : 해당 변수의 값
○ export $변수 : environment variable을 다른 process에 넘겨 주기 위해 사용
○ export -f $함수 : 함수를 다른 process에 넘겨 주기 위해 사용
○ string 변수 : 따옴표 없이 string 변수를 선언할 수 있고 $변수명도 붙일 수 있음
○ \ : 여러 줄에 걸쳐 하나의 명령어를 실행할 수 있음. 코드의 가독성을 높이기 위해 사용
○ 단, \ 뒤에 스페이스가 들어가면 escape로 해석됨
○ ; : 한 줄 안에 쓰여져 있는 여러 명령문을 구분해 주는 기호
○ | : 앞 프로세스의 출력 결과를 뒤 프로세스의 입력으로 연결
○ ls : 현재 디렉토리 내 파일 리스트를 보여줌
○ history : 과거 커멘트 히스토리
○ history | tail -20 : 과거 커멘드 히스토리 20개만 출력
○ ssh-keygen : RSA 공개키, 개인키 생성. 맥북의 경우 ~/.ssh 디렉토리에 id_rsa 및 id_rsa.pub 파일이 생성
○ chmod
○ change mode의 약자로 permission 관리
○ 사용자 종류 : user (u), group (g), others (o)
○ 권한 종류 : read (r; 4), write (w; 2), execute (e; 1), rw- (4+2=6), r-x (4+1=5), rwx (4+2+1=7)
○ 방법 1. symbolic mode
○ 예 1. chmod u+x filename : user에게 execute 권한 부여
○ 예 2. chmod g-w filename : group에게 write 권한 제거
○ 예 3. chmod o=r filename : others의 권한을 read only로 설정
○ 방법 2. numeric mode
○ 예 1. chmod 755 filename : user에게 7, group에게 5, others에게 5의 권한 설정
○ 응용 1. 디렉토리 전체의 permission 설정
○ 예 1. chmod -R 755 directory_name : directory_name 전체에 755 권한 설정
○ chown
○ change ownership의 약자
○ chown [user]:[user] [Directory]
○ 텍스트 에디터
○ open
○ nano : sudo apt-get install nano으로 설치 (ref)
○ vim
○ emacs
○ zsh
○ bash
○ 디렉토리 명령어
○ open [DIR_NAME] : 특정 디렉토리로 이동
○ cd : 홈 디렉토리로 이동
○ cd [DIR_NAME] : 특정 디렉토리로 이동
○ cd .. : 현재 디렉토리의 상위 디렉토리로 이동
○ ls -lh [FILE_NAME] : 특정 파일의 용량 확인
○ du -sh [DIR_NAME] : 디렉토리의 용량 확인
○ mkdir [DIR_NAME] : 특정 폴더 생성
○ mv [SOURCE] [DESTINATION] : 파일 이동, 파일 교체, 이름 변경 등에서 사용하는 명령어. mv는 move의 줄임말
○ cp [OPTION] [SOURCE] [DESTINATION] : 파일을 복사하여 붙여넣기
○ -r : 하위 디렉토리와 파일 전체를 복사
○ -p : 소유주, 그룹, 권한, 시간 정보를 보존하여 복사
○ rm [OPTION] [NAME] : 삭제
○ rm -d [DIR_NAME] : 빈 디렉토리 삭제
○ rm -r [DIR_NAME] : 비어있지 않은 디렉토리 삭제
○ 파일 압축 명령어
○ zip -r test.zip ./* : 특정 디렉토리에 모든 파일(./*)을 하위 폴더까지 포함하여 test.zip으로 압축
○ unzip FILE.zip : 현재 폴더에 FILE.zip 압축 해제
○ gzip [FILE_NAME] : gz로 압축하기
○ gzip -d [FILE_NAME].gz : gz 압축 파일을 압축 풀기
○ gunzip [FILE_NAME].gz : gz 압축 파일을 압축 풀기
○ tar [OPTION] [FILE.tar.gz]
○ [OPTION] : -f, -c, -x, -v, -z, -j, -t, -C, -A, -d, -r, -u, -k, -U, -w, -e 등이 있음
tar [OPTION...] [FILE]...
-f : 대상 tar 아카이브 지정. (기본 옵션)
-c : tar 아카이브 생성. 기존 아카이브 덮어 쓰기. (파일 묶을 때 사용)
-x : tar 아카이브에서 파일 추출. (파일 풀 때 사용)
-v : 처리되는 과정(파일 정보)을 자세하게 나열.
-z : gzip 압축 적용 옵션.
-j : bzip2 압축 적용 옵션.
-t : tar 아카이브에 포함된 내용 확인.
-C : 대상 디렉토리 경로 지정.
-A : 지정된 파일을 tar 아카이브에 추가.
-d : tar 아카이브와 파일 시스템 간 차이점 검색.
-r : tar 아카이브의 마지막에 파일들 추가.
-u : tar 아카이브의 마지막에 파일들 추가.
-k : tar 아카이브 추출 시, 기존 파일 유지.
-U : tar 아카이브 추출 전, 기존 파일 삭제.
-w : 모든 진행 과정에 대해 확인 요청. (interactive)
-e : 첫 번째 에러 발생 시 중지.
○ 예 1. 압축하기 : tar -zcvf archive.tar.gz ./MyFolder
○ 예 2. 압축 풀기 : tar -xzvf spaceranger-2.0.1.tar.gz
○ .tar.gz 파일뿐만 아니라 .tar 파일도 동일한 명령어를 적용할 수 있음 : 단, .tar에 적용하는 경우 -z를 해제해야 함
○ xz -z filename : 압축률은 상당히 좋지만 속도가 느림. LZMA, LZMA2 알고리즘 사용
○ xz -d filename.xz : .xz 파일 압축 풀기
○ 7z a outputfile.7z inputfile : 압축률은 상당히 좋지만 속도가 느림. LZMA 등 사용. Linux에서는 p7zip 패키지를 통해 사용 가능
○ 7z x outputfile.7z : .7z (7-Zip) 파일 압축 풀기
○ zstd filename : 압축률과 속도 간의 균형을 갖춘 느낌
○ zstd -d filename.zst : .zst 파일 압축 풀기
○ brotli -Z filename : Brotli를 이용한 압축
○ brotli -d filename.brotli : .brotli 파일 압축 풀기
○ pigz filename : PIGZ를 이용한 압축
○ unpigz filename.gz : .gz 파일 압축 풀기
○ echo
○ echo [STR] : 지정한 문자열을 출력하는 명령어
○ echo $(($(find . -type d -maxdepth 1 | wc -l) - 1)) : 특정 디렉토리 내 폴더 개수 출력
○ find
○ find . -type d -maxdepth 1 | wc -l : 특정 디렉토리 내 폴더 개수 출력
○ 폴더 동기화 (symbolic link, soft link)
○ ln -s [Source_Directory] [Target_Directory]
○ ln -sf [Source_Directory] [Target_Directory]
○ unlink [Target_Directory] : 동기화 해제
○ ifconfig : ip 주소 확인
○ traceroute [IP_ADDRESS] : 특정 ip 주소에 도달하는 데 있어 거쳐가는 ip 표시
○ 시스템 스펙 보기
○ lshw | less : CPU, RAM 등 시스템 스펙에 대한 정보를 알 수 있음
○ lshw -C display : GPU 정보를 알 수 있음
○ nvidia-smi : GPU 정보 및 GPU 사용 현황을 알 수 있음
○ watch -d -n 0.5 nvidia-smi : GPU 사용 모니터링
○ sudo : 리눅스 유저가 다른 유저의 권한으로 커멘드를 실행할 수 있도록 함
○ 유저별로 선택적으로 sudo 권한을 부여할 수 있음
○ su [User_ID] : 리눅스 유저가 다른 유저 계정으로 전환하는 명령어. sudo su와 같이 많이 씀
○ reboot : 재부팅
○ 상태창 명령어
○ free -h : 메모리(memory) 및 swap 확인
○ top : 명령 실행 및 thread 사용 현황 확인
○ htop : 설치해야 함. top의 상위 호환
○ df : 시스템 상태 보기 명령어
○ df -h : 시스템 용량 보기 명령어
○ 원격 데이터 이동 명령어
○ 방법 1. scp : 파일이 깨질 가능성이 낮음
○ scp -P ${port} ${srcFile} ${id}@${destIP}:${destPath}
○ ${port} : destination의 포트 번호
○ ${srcFile} : source에서 옮기고자 하는 파일의 경로. 예 : "~/Downloads/file.txt"
○ ${id} : destination에서 한 사용자의 ID
○ ${destIP} : destination의 ip 주소. 예 : #.#.#.# (IPv4)
○ ${destPath} : destination에서 파일을 저장할 디렉토리 주소. 예 : ~/DATA1/1.txt
○ 코드 자동생성기
○ 방법 2. rsync (remote sync) : 속도가 좀 더 빠름
○ rsync --rsh=’ssh -p ${port}’ -avzhP ${srcFile} ${id}@${destIP}:${destPath}
○ ${port} : destination의 포트 번호
○ ${srcFile} : source에서 옮기고자 하는 파일의 경로. 예 : "~/Downloads/file.txt"
○ ${id} : destination에서 한 사용자의 ID
○ ${destIP} : destination의 ip 주소. 예 : #.#.#.# (IPv4)
○ ${destPath} : destination에서 파일을 저장할 디렉토리 주소. 예 : ~/DATA1/1.txt
○ 코드 자동생성기
○ 방법 3. sftp
## Install NCFTP
sudo apt-get install ncftp
## Connect to the FTP Server
ncftp -u [username] [host address]
## Navigate and Manage Files
# List files and directories.
ls
# Change directory.
cd [directory]
lcd [directory]
# Download a file from the FTP server to your local machine.
get [filename]
# Upload a file from your local machine to the FTP server.
put [filename]
# Create a new directory on the FTP server.
mkdir [directory_name]
# Remove a directory on the FTP server.
rmdir [directory_name]
# Delete a file on the FTP server.
rm [filename]
# Exit NCFTP
quit
## Use the ncftpput Command
ncftpput -R -u [username] -p [password] [host] [remote-dir] [local-dir]
# Example
ncftpput -R -u username -p password ftp.example.com /remote/directory /local/directory
○ 방법 4. SFTP를 위한 클라이언트용 소프트웨어 : FileZilla, Cyberduck 등
○ 파일 실행 명령어
○ .sh 파일 : .sh 파일을 실행하려면 ./[My_File].sh, sh [My_File].sh, 혹은 bash [My_File].sh와 같이 할 수 있음
○ .py 파일 (ref)
○ ctrl + z → bg : 백그라운드 실행
○ [명령어] + & : 백그라운드 실행 (ref)
○ 이 방식은 세션이 종료되면 (예 : 터미널 종료) 프로세스가 같이 종료되는 문제점이 있음
○ nohup을 이용한 백그라운드 실행
○ step 1. .sh 파일 혹은 .py 파일 준비
○ step 2. 터미널 실행
○ step 3. 환경 구동 후 실행할 .sh 파일 혹은 .py (예 : app.py) 파일이 있는 경로로 이동
○ step 4. 권한 부여 : chmod 755 app.py
○ step 5. nohup python app.py \
○ step 6. 엔터를 한 번 더 쳐야 실행됨
○ step 7. (optional) 실행 확인 : ps -ef | grep app.py → nohup.out 확인. "app.py"라는 키워드 인식
○ step 8. (optional) 백그라운드 실행 강제 종료 : kill {ProcessID}
○ tmux를 이용한 백그라운드 실행
○ tmux → 리눅스 커멘드 → 터미널 창 / mobaxterm 끄기
○ 도커(docker) : 백그라운드 실행을 할 수 있음
○ while 명령어
○ while read
○ while ··· do ~ done
○ cat 명령어 : 파일 출력과 관련
○ cat FILE : 파일 내용 출력
○ cat > FILE : 파일 생성
○ cat -n FILE : 라인마다 번호 출력
○ cat -E FILE : 라인 끝에 $ 문자 출력
○ cat -T FILE : 탭을 ^I로 출력
○ cat -s FILE : 반복된 공백 라인 무시
○ cat FILE1 FILE2 > FILE_merge : FILE1, FILE2를 합쳐서 FILE_merge로 만들기
○ cat FILE1 - FILE2 : 파일 사이에 내용 추가
○ cat FILE | more : 파일 내용을 페이지 단위로 출력
○ cat FILE | grep "STR" : 파일 내용 필터링
○ cat * : 모든 파일 내용 출력
○ cat *.txt : 특정 확장자를 가진 파일 내용 출력
○ qsub [-OPTION STR] [SCRIPT] : 큐에 PBS job을 제출
○ [SCRIPT] : .sh 파일
○ .sh 파일 뒤에 .sh 파일에 입력할 argument를 기입
○ qsub [-e STR] [SCRIPT] : batch job의 표준 에러 스트림이 저장될 경로를 정의
○ qsub [-o STR] [SCRIPT] : batch job의 표준 출력 스트림이 저장될 경로를 정의
○ qsub [-N STR] [SCRIPT] : job의 이름을 정의
○ grep [STR] : 입력으로 전달된 파일의 내용에서 특정 문자열을 찾고자 할 때 사용
○ $ sudo 실행할 명령어
○ 이렇게 실행하면, root 권한을 가진 채 명령어를 실행하게 되어 오류가 발생하지 않음
○ md5sum
○ 파일 송신부와 파일 수신부 간의 파일 정합성을 확인하기 위한 코드를 생성
$ md5sum /home/parallels/Downloads/metadata.xlsx
○ 보안 관련 : MD5 collision pair를 쉽게 찾을 수 있지만 MD5에 second-preimage attack을 하는 방법이 알려져 있지 않음
○ sed
○ netcat
○ awk
○ ssh : 리눅스 서버에 원격 접속 시 사용하는 프로토콜
○ 트러블슈팅 1. ssh를 입력했을 때 command not found가 뜨면 맥북 터미널을 켠 뒤 다음 절차에 따라야 함
○ ssh가 설치됐을 때 보여지는 화면
○ 윈도우에서는 Windows 10부터 Windows powershell로 터미널을 활용할 수 있음 (ref)
○ 트러블슈팅 2. ssh: connect to host #.#.#.# port §: Connection refused
○ 단, #.#.#.#은 ip 주소
○ 원인 1. 맥북에서 원격 로그인 설정이 막혔기 때문
○ 해결 방법 : 시스템 환경설정 > 공유 > 원격로그인 > ON (ref)
○ 원인 2. openssh가 설치돼 있지 않기 때문 (ref)
○ 원인 3. host ip 주소가 바뀐 경우
○ 트러블슈팅 3. key_exchange_identification: read: Connection reset by peer Connection reset by #.#.#.# port §
○ 원인 : 서버의 일시적 오류
○ 해결방법 : 코드를 다시 입력
○ 트러블슈팅 4. 윈도우에서 VPN 접속을 하고자 하는 경우
○ 넷사랑에서 Xshell을 깔면 윈도우에서도 VPN 접속을 할 수 있음
○ 트러블슈팅 5. Can't operate. Failed to connect to bus: Host is down
○ ssh server에 적합하지 않은 경우
○ 혹시 ssh client를 설치하려고 한 건데 ssh server를 설치한 건 아닌지 검토
○ curl : 특정 url의 파일을 다운로드 받을 수 있음
curl -o my.sh "https://repo.anaconda.com/miniconda/Miniconda3-py38_23.3.1-0-Linux-x86_64.sh"
○ wget 명령어 : 거의 모든 다운로드를 가능하게 함
○ 예 : wget https://raw.githubusercontent.com/jdblischak/singleCellSeq/master/code/run-md5sum.sh
○ wget이 없다고 나오는 경우 : $ sudo apt-get install -y wget
○ 보통 명령어 전체를 다 받아옴 : $git clone https://github.com/jdblischak/singleCellSeq.git
○ sudo netstat -lntp : port 별 PID, protocol 등을 알 수 있음
○ GNU Parallel을 통한 병렬 처리
## install for Devian/Ubuntu
sudo apt-get update
sudo apt-get install parallel
## run
process() {
...
}
parallel process
입력: 2021.11.04 23:23
수정: 2023.06.02 14:21
'▶ 자연과학 > ▷ 운영체제' 카테고리의 다른 글
【리눅스】 리눅스 서버(Linux server) (0) | 2022.12.29 |
---|---|
【운영체제】 윈도우 서버에 원격으로 접속하는 방법 (0) | 2022.08.05 |
【맥북】 맥북 사용법 (0) | 2021.10.08 |
【운영체제】 운영체제 목차 (0) | 2019.11.09 |
【리눅스】 리눅스 주요 트러블슈팅 [01-20] (0) | 2019.10.15 |
최근댓글