프로그래밍에 입문하면 (특히 서버 관련 직군이라면) Linux를 다룰 일들이 많다.
CLI: Terminal
명령어 기반
GUI: Desktop
https://www.reddit.com/r/linuxmasterrace/comments/7diwwi/linux_distro_timelin
보통 Ubuntu, Debian, CentOs를 많이 사용한다.
username@hostname:current_folder
hostname: 컴퓨터 네트워크에 접속된 장치에 할당된 이름. IP 대신 기억하기 쉬운 글자로 저장.
쉘 커맨드의 매뉴얼 문서를 보고 싶은 경우
man python
man == manual
종료: :q 입력
폴더 생성하기: Make Directory
mkdir test
현재 접근한 폴더의 폴더, 파일 확인: List Segments
ls 뒤에 아무것도 작성하지 않으면 현재 폴더 기준으로 실행.
폴더를 작성하면 그 폴더 기준에서 실행
옵션
-a: .으로 시작하는 파일, 폴더를 포함해 전체 파일 출력
-l: 퍼미션, 소유자, 만든 날짜, 용량까지 출력
-h: 용량을 사람이 읽기 쉽도록 GB, MB 등 표현. -l과 같이 사용
ls ~
ls
ls -al
ls -lh
현재 폴더 경로를 절대 경로로 보여준다: Print Working Directory
pwd
폴더 변경하기, 폴더로 이동하기: Change Directory
cd test
Python의 print처럼 터미널에 텍스트 출력
echo "hi"
echo `쉘 커맨드` 입력 시 쉘 커맨드의 결과를 출력 ( ` : backtick)
echo `pwd`
vim 편집기로 파일 생성
INSERT 모드에서만 수정할 수 있다.
vi vi_test.sh
새로운 창이 뜨면 i를 눌러서 INSERT 모드로 변경
그 후, echo "hi" 작성
ESC를 누른 후, :wq: 저장하고 나가기, write and quit
ESC :wq!: 강제 저장하고 나오기
ESC :q: 그냥 나가기
vi 편집기의 Mode
vi 실행 시 기본 모드
방향키를 통해 커서 이동 가능
dd: 현재 위치한 한 줄 삭제i: INSERT 모드로 변경x: 커서가 위치한 곳의 글자 1개 삭제(5x: 문자 5개 삭제)yy: 현재 줄을 복사p: 현재 커서가 있는 줄 바로 아래에 붙여넣기k: 커서 위로j: 커서 아래로l: 커서 오른쪽으로h: 커서 왼쪽으로파일을 수정할 수 있는 Mode
Command Mode로 다시 이동하고 싶으면 ESC 입력
ESC를 누른 후 콜론(:)을 누르면 나오는 Mode
w: 현재 파일명으로 저장q: vi 종료(저장x)q!: vi 강제 종료(!:강제)wq: 저장 후 종료/문자: 문자 탐색n을 누르면 계속 탐색 실행set nu: vi 라인 번호 출력bash로 쉘 스크립트 실행
bash vi-test.sh
터미널에서 Tab을 누르면 자동완성(지원하지 않는 쉘도 존재)
관리자 권한으로 실행하고 싶은 경우 커맨드 앞에 sudo를 붙임
최고 권한을 가진 슈퍼 유저로 프로그램을 실행
"superuser do"에서 유래, 최근엔 "substitue user do" (다른 사용자의 권한으로 실행)의 줄임말로 해석
파일 또는 폴더 복사하기: Copy
cp vi-test.sh vi-test2.sh
-r: 디렉토리를 복사할 때 디렉토리 안에 파일이 있으면 재귀적(recursive)으로 모두 복사-f: 복사 강제로 실행파일, 폴더 이동하기(또는 이름 바꿀 때도 활용): Move
vi-test.sh에서 vi-test3.sh으로 파일명 변경
mv vi-test.sh vi-test3.sh
특정 파일 내용 출력: concatenate
cat vi-test.sh
여러 파일을 인자로 주면 합쳐서(CONCAT) 출력
cat vi-test2.sh vi-test3.sh
파일에 저장하고(OVERWRITE) 싶은 경우
cat vi-test2.sh vi-test3.sh > new_test.sh
파일에 추가(APPEND)하고 싶은 경우
cat vi-test2.sh vi-test3.sh >> new_test.sh
csv나 json 파일 간단하게 합치고 싶은 경우 사용 가능
터미널 창을 깨끗하게 해준다.
최근에 입력한 쉘 커맨드 History 출력
History 결과에서 느낌표를 붙이고 숫자 입력시 그 커맨드를 다시 활용할 수 있다.
!30

파일 및 디렉토리를 검색할 때 사용
find . -name "File": 현재 폴더에서 File이란 이름을 가지는 파일 및 디렉토리 검색
export로 환경 변수 설정
water="물" 붙여서 써야한다.
export water="물"
echo $water

export로 환경 변수 설정한 경우, 터미널이 꺼지면 사라지게 된다.
매번 쉘을 실행할 때마다 환경변수를 저장하고 싶으면 .bashrc, .zshrc에 저장하면 된다.
Linux vi ~/.bashrc
제일 하단에 export water="물"을 저장하고 나옴(ESC :wq)
그 후 source ~/.basrc
Linux 환경 설정을 재로그인하지 않고 즉시 적용하고 싶은 경우 source 사용
터미널에 alias를 치면 현재 별칭으로 설정된 것을 볼 수 있다.
기본 명령어를 간단히 줄일 수 있다.
예) ll은 ls -l로 별칭이 지정되어 있다.
alias ll2='ls -l'
ll2 입력하면 ls -l이 동작된다.
파일의 앞/뒤 n행 출력
head -n 3 vi-test.sh
행 단위 정렬
-r: 내림차순 정렬(Default 옵션: 오름차순)-n: Numeric Sortcat fruits.txt | sort
cat fruits.txt | sort -r
중복된 행이 연속으로 있는 경우 중복 제거
sort와 함께 사용 가능
-c: 중복 행의 개수 출력
cat fruits.txt | uniq
cat fruits.txt | sort | uniq
# wc -l: word count 라인 수 출력
cat fruits.txt | uniq | wc -l
cat fruits.txt | sort |uniq | wc -l
파일에 주어진 패턴 목록과 매칭되는 라인 검색
grep 옵션 패턴 파일명
옵션
-i: Insensitive하게, 대소문자 구분 없이 ㅊ자기-w: 정확이 그 단어만 찾기-v: 특정 패턴 제외한 결과 출력-E: 정규 표현식 사용정규 표현식 패턴
^단어: 단어로 시작하는 것 찾기단어$: 단어로 끝나는 것 찾기.: 하나의 문자 매칭파일에서 특정 필드 추출
-f: 잘라낼 필드 지정-d: 필드를 구분하는 구분자. Default는 \tvi cut_file
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
ESC :wq
cat cut_file | cut -d : -f 1,7
# 1번째, 7번째 값을 가져옴
데이터 전처리 시 사용할 수 있을 것
Unix에서 동작하는 프로그램은 커맨드 실행 시 3개의 Stream이 생성
stdin: 0으로 표현, 입력(비밀번호, 커맨드 등)
stdout: 1로 표현, 출력 값(터미널에 나오는 값)
stderr: 2로 표현, 디버깅 정보나 에러 출력

Redirection: 프로그램의 출력(stdout)을 다른 파일이나 스트림을 ㅗ전달
>: 덮어쓰기(Overwrite) 파일이 없으면 생성하고 저장>>: 맨 아래에 추가하기(Append)echo “hi” > vi-test3.sh
echo “hello” >> vi-test3.sh
cat vi-test3.sh
Pipe : 프로그램의 출력(stdout)을 다른 프로그램의 입력으로 사용하고 싶은 경우
A의 Output을 B의 Input으로 사용(다양한 커맨드를 조합)
현재 폴더에 있는 파일명 중 vi가 들어간 단어를 찾고 싶은 경우
ls | grep “vi”
grep “vi” : 특정 단어 찾기
ls | grep “vi”
위 결과를 다시 output.txt에 저장하고 싶은 경우
ls | grep “vi” > output.txt
최근 입력한 커맨드 중 echo가 들어간 명령어를 찾고 싶은 경우
history | grep “echo”
현재 실행되고 있는 프로세스 출력하기: Process Status
-e: 모든 프로세스
-f: Full Format으로 자세히 보여준다.
Command Line 기반의 Data Transfer 커맨드 : Client URL
Request를 테스트할 수 있는 명령어
웹 서버를 작성한 후 요청이 제대로 실행되는지 확인할 수 있음
curl -X localhost:5000/ {data}
Fast API 쓸 때 반환이 어떻게 되는지 확인 가능.
curl 외에 httpie 등도 있음(더 가독성 있게 출력)
현재 사용 중인 디스크 용량 확인 : Disk Free
-h : 사람이 읽기 쉬운 형태로 출력SSH을 이용해 네트워크로 연결된 호스트 간 파일을 주고 받는 명령어 : Secure Copy(Remote
file copy program)
-r : 재귀적으로 복사-P : ssh 포트 지정-i : SSH 설정을 활용해 실행local => remote
scp local_path user@ip:remote_directory
remote => local
scp user@ip:remote_directory local_path
remote => remote
scp user@ip:remote_directory user2@ip2:target_remote_directory
터미널 종료 후에도 계속 작업이 유지하도록 실행(백그라운드 실행)
nohup python3 app.py &
nohup으로 실행될 파일은 Permission이 755이어야 한다.
종료는 ps ef | grep app.py 한 후, pid(Process ID) 찾은 후 kill -9 pid 로 프로세스를 Kill.
로그는 nohup.out에 저장된다.
nohup 외에도 screen이란 도구도 있다.
파일의 권한을 변경하는 경우 사용 : Change Mode
유닉스에서 파일이나 디렉토리의 시스템 모드를 변경한다.
ls -al(혹은 ll)을 입력하면 다음과 같이 나온다.

Permission
예시) 755, 644로 퍼미션 주세요
rwx를 더하면 4+2+1 = 7

쉘 스크립트 == 쉘 커맨드의 조합
.sh 파일을 생성하고, 그 안에 쉘 커맨드를 추가.
파이썬처럼 if, while, case 문이 존재하며 작성시 bash name.sh로 실행 가능