???: 헤헤
(겁나 멍청해보임;)
창시자 이름 Linus + unix -> Linux라고 명명됨
CLI:Command Line Interface
GUI:Graphic User Interface
👉 대표적으로 Debian, Ubuntu, Redhat, CentOS 등이 있음.
쉘(shell) :
사용자가 문자를 입력해 컴퓨터에 명령할 수 있도록 하는 프로그램
(shell 은 껍데기라는 의미로 시스템의 핵심인 커널과 직접 상호작용하지 않고, 쉘을 통해 커널에 명령을 전달하고 받는 방식이어서 쉘이라고 함.)
터미널/콘솔:
쉘을 실행하기 위해 문자 입력을 받아 컴퓨터에 전달
sh(Bounrne Shell_창시자 이름):
최조의 쉘
bash(Bounrne Again Shell_다시 태어났다는 말장난유래):
Linux 표준 쉘
zsh(Z shell_그냥 친구이름 땃다고 함.):
Mac 카탈리나 OS 기본 쉘
Shell UX
username@hostname: current folder형태로 되어있음.
hostname은 컴퓨터 네트워크에 접속된 장치의 이름으로 IP대신에 쓰는 이름.
man
- 쉘 커맨드의 메뉴얼 문서를 보고 싶은 경우
man python3
mkdir
- make directory : 폴더 생성
mkdir linux-test
ls
- List Segments : 현재 접근한 폴더의 파일 확인
option
-a : 젠체파일(All)
-l : 퍼미션, 소유자,만든 날짜 (Long)
-h : 용량을 사람이 읽기 쉽도록 GB,MB 등 표현
pwd
- print working directory : 현재 폴더의 경로.
cd
- change directory : 폴더 변경,이동하기
echo
- python 의 print 같은것. -> 터미널에 텍스트 출력
ex) echo "hi"- echo
쉘커맨드
입력시 쉘 커맨드 입력 출력
ex)
input)
echo `pwd`
output)
현재 경로 출력.
cp
- copy: 복사
ex) cp [복사할 폴더][복사당할 폴더]
cp vi-test.sh vi-test.sh2
cp -r #재귀적으로(recursive)하게 모두 복사
cp -f # 강제로(force)모두 복사
vi
vim 편집기로 파일생성 -> INSERT 모드에서만 수정가능함.
(나중에 자세히 배우셈. 되게 편하데요.):wq -> 강제로 나가기, :q -> 나가기
bash
- bash 로 쉘 스크립트 실행
bash vi-test.sh
sudo
- superuser do : 최고 권한을 가진 슈퍼 유저로 프로그램을 실행.
(다들 sudo rm -rf 해보세요)
mv
- move : 파일폴더 이동하기
mv vi-test.sh
cat
- 특정 파일 내용 출력 : concatenate
- 그냥 파일 내용 출력
cat vi-test.sh
cat vi-test2.sh vi-test3.sh
cat vi-test2.sh >vi-test3.sh
cat vi-test2.sh >>vi-test3.sh
clear
- 커맨드 깨끗하게 해줌
history
- 최근에 입력한 쉘 커맨드 history출력함
느낌표 하고 인덱스 넣으면 , 그 커맨드를 다시 활용할 수 있음.
find
find -name "file"
-> 현재 폴더에서 "file"이란 이름을 가지는 파일 및 디렉토리 검색
export
- export 로 환경변수 설정
export water="물" #여기서 중요한 거는, 띄어쓰면 안됨. echo $water #출력으로 물이 나옴.
- export 로 환경 변수 설정한 경우, 터미널이 꺼지면 사라지게 됨.
- 매번 쉘을 실행할 때마다 환경변수를 저장하고 싶으면 .bashrc .zshrc
- 제일 하단에 export water="물" 저장하고 나옴
-> 그 후 source ~/.bashrc 또는 source ~/.zshrc 하면
환경설정 재로그인하지 않고 즉시 적용.
alias
- alias는 기본명령어를 줄일 수 있음.
alias ll2 = 'ls -l'
하면 ll2 하면 ls -l이 동작
tree
- 먼저 설치 필요
sudo apt-get install tree
- 폴더의 하위 ㄷ구조를 계층적으로 표현 -> 프로젝트 소개할 때 편함.
tree -L tree -L 2 #2단계까지 보여주기.
head
- 파일의 앞/뒤 n행 출력
head -n 3 vi-test.sh
sort
- 정렬 (디폴트는 오름차순)
cat fruits.txt | sort #오름차순 cat fruits.txt | sort -r #내림차순 cat fruits.txt | sort -n #Numerical sort
uniq
- 중복된 행이 연속으로 있는 경우 중복제거(sort)와 함께 사용.
cat fruis.txt | sort | uniq
grep
- global regural expression print의 약자로, 파일에서 주어진 패턴 목록과 매칭되는 라인 검색함.
cat example_file grep -i "ky" example_file #examplefile에 있는거 중에 ky 있는거 찾기 grep -i "^a" example_file #examplefile에 있는거 중에 a로 시작하는 단어 찾기 grep -i "a$" example_file #examplefile에 있는거 중에 a로 끝나는 단어 찾기
awk
- awk 는 그냥 개발자 3명이름 뭉친거임.
- 텍스트 처리 도구
awk 'pattern {action}' input_file
- pattern : 특정 패턴을 지정, action: 선택된 줄에 대해 수행할 동작.
Redirection : 프로그램의 출력(stdout)을 다른 파일이나 스트림으로 전달
echo "hi" > vi-test3.sh # 덮어쓰기(overwrite) -> 파일이 없으면 생성하고 저장
echo "hello" >> vi-test3.sh # 맨 아래에 추가하기(append)
python train.py > log_file 2>&1 &
pipe : 프로그램의 출력(stdout)을 다른 프로그램의 입력으로 사용하고 싶은 경우
ls | grep "vi" > output.txt #"vi"라는 것이 있는거 찾고 이를 output.txt 파일로 저장.
history | grep "echo" # 최근 입력한 커맨드 중 echo 가 들어간 명령어를 찾고 싶은 경우.
ps(process status)
- 현재 실행되고 있는 프로세스 보기
ps # 현재 실행되고 있는 PID(Process ID)보여줌 ps -e # 모든 프로세스 ps -f # full format 으로 자세히 보여줌
curl(Client URL)
- Data Transfer 커맨드, Request 를 테스트 할 수 있음
- 웹 서버를 작성한 후 요청이 제대로 실해오디는지 확인 가능
curl -X localhost:5000 /{data}
df(Disk Free)
- 현재 사용중인 디스크 용량확인
df # disk 확인 df -h # 사람이 읽기 쉬운 형태로 출력
ssh
- ssh: 안전하게(데이터가 모두 암호화) 원격으로 컴퓨터에 접속하고 명령을 실행할 수 있는 프로토콜
-> 보안, 원격접속, 터널링(포트포워딩) 때문에 ssh 사용함.ssh -i /path/to/private-key.pem username@hostname(IP) -p 포트번호
pem(Privacy-Enhanced Mail) 이란, 공개키에서 사용하는 인증키 방식
-> pem 키 (개인키) 와 같은 인증 방식으로 '누가' 이 원격서버에 접속했는지 정보를 전달해서 다른 서버에 원격으로 접속 가능함.
ssh 터널링
- 터널링 : 방화벽 등의 이슈로 직접 접근이 제한될 경우, 간접 터널(터널링)을 만들어서 우회
ssh -L 8080:localhost:30952 username@SSH_server
의미 : 명령어를 실행시킨 컴퓨터의 8080 포트 오픈 -> 8080포트로 오는 트래픽은 SSH커널을 통해-> SSH 서버 30952 포트로 전달
즉, 컴퓨터의 localhost 8080 에 접속하면 SSH 서버의 30952 포트에 연결함.
scp(Secure Copy)
- SSH를 이용해 네트워크로 연결된 호스트간 파일을 주고 받는 명령어
#local -> remote
scp local_path user@ip:remote_directory
scp -r # 재귀적으로 복사
scp -P # ssh 포트지정
scp -i # SSH 설정을 활용해 실행.
## remote -> local
scp user@ip:remote_directory local_path
## remote -> remote
scp user@ip:remote_directory user2@ip2:target_remote_directory
nohup
- 터미널 종료 후에도 계속 작업이 유지하도록 실행
nohup python3 app.py & #계속 실행할려면 &이거 줘야함
chmod(change mode)
- 유닉스에서 파일이나 디렉토리의 시스템 모드를 변경
- r = Read/4
- w = Write /2
- x = eXecute /1
- -: Denied
chmod 755 vi-test2.sh #소유자의권한(7)/그룹의권한(5)/기타사용자권한(5)
-> 소유자는 읽기,쓰기,실행 모두 가능/ 그룹과 기타사용자는 읽기, 실행 권한 가능.
shell script
- $1, $2, $3 등의 특별한 변수를 사용하여 각각 첫번째,두번째 ... N번째 변수 참조
- https://github.com/zzsza/shell-scripts/ 스크립트 연습한거 github