프로그래밍에 입문하면 (특히 서버 관련 직군이라면) 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는 \t
vi 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
로 실행 가능