AI TECH

Linux, Shell

prefer_all 2022. 11. 10. 09:28
<목차>
1. Linux
2. Shell

 

Linux란

Unix 운영체제

 

Linux의 장점

- 서버에서 자주 사용하는 OS이다.

- Mac, Window도 서버로 활용은 가능하나 유료인 반편,

   Linux는 무료이고, 오픈소스가 여러 버전 존재해서 나만의 버전을 만들 수 있다.

- 안정성, 신뢰성 (Stability, Reliability)이 높다.

- 쉘 커맨드, 쉘 스크립트를 사용할 수 있다.

 

CLI(Comand Line Inference) VS GUI(Graphic User Interface) 

CLI는 명령어의 입력을 통해서만 작동한다

 

Linux의 배포판 

1. Debian - 온라인 커뮤니티에서 제작해 배포

2. Ubuntu - 영국의 캐노니컬이라는 회사에서 만든 배포판으로 쉽고 편한 설치. 초보자들이 쉽게 접근할 수 있도록 만듦

3. Redhat - 레드햇이라는 회사에서 배포한 리눅스

4. CentOS - Red Hat이 공개한 버전을 가져와서 브랜드와 로고를 제거하고 배포한 버전


Shell이란

사용자가 문자를 입력해 컴퓨터에 명령할 수 있도록 하는 프로그램

shell의 UX: username@hostname:current_folder

hostname은 컴퓨터 네트워크에 접속된 장치에 할당된 이름이다. IP 대신 기억하기 쉬운 글자로 저장하는 것이다.

 

터미널/콘솔이란

쉘을 실행하기 위해 문자 입력을 받아 컴퓨터에 전달한다.

즉, 프로그램의 출력을 화면에 작성한다.

 

Shell의 종류

1. sh - 최초의 쉘

2. bash - Linux 표준 쉘

3. zsh - Mac 카탈리나 OS 기본 쉘

 

Jupyter Notebook의 Cell에서 앞에 !를 붙이면 쉘 커맨드로 동작한다.
터미널에서 python3, jupyter notebook 도 쉘 커맨드이다.

 

기본 Shell Command(명령어)

mkdir

cd

ls

echo

vi

pwd : 현재 폴더 경로 절대 경로로 보여줌

mv

cp

man : 매뉴얼 보고 싶을 때 

clear : 터미널 창 깨끗하게

wget : 웹에서 파일 다운로드 도와줌

head, tail      ex) head -n 3 test.sh

sort                 ex) cat test.sh | sort -r (default: 오름차순 정렬 / -r: 내림차순 정렬 / -n: Numeric 정렬)

uniq : 중복된 행 연속으로 있으면 중복 제거     

<옵션>
-c: 중복 행의 개수 출력

ex) cat fruits.txt | uniq
      cat fruits.txt | sort | uniq 
      cat fruits.txt | uniq | wc -l
      cat fruits.txt | sort | uniq | wc -l

wc -l
을 쓰면 라인 수를 구할 수 있다.
cat

1. 여러 파일을 인자로 주면 합쳐서(CONCAT) 출력
cat vi-test2.sh vi-test3.sh

2. 파일에 저장하고(OVERWRITE) 싶은 경우
cat vi-test2.sh vi-test3.sh > new_test.sh

3. 파일에 추가(APPEND) 싶은 경우 cat vi-test2.sh vi-test3.sh >> new_test.sh
find

파일 및 디렉토리를 검색할 때 사용
find . -name “File” : 현재 폴더에서 File이란 이름을 가지는 파일 및 디렉토리 검색
history 

최근에 입력한 쉘 커맨드 History 출력
History 결과에서 느낌표를 붙이고 숫자 입력시 그 커맨드를 다시 활용할 수 있음
bash

bash로 쉘 스크립트 실행
esx) bash vi-test.sh
export

export로 환경 변수 설정


단, export로 환경 변수 설정한 경우, 터미널이 꺼지면 사라지게 됨
매번 쉘을 실행할 때마다 환경변수를 저장하고 싶으면 .bashrc, .zshrc에 저장하면 됨

(Linux) vi ~/.bashrc 또는 vi ~/.zshrc (자신이 사용하는 쉘에 따라 다름)
-> 제일 하단에 export water=”물"을 저장하고 나옴(ESC :wq)
-> 그 후 source ~/.bashrc 또는 source ~/.zshrc Linux 환경 설정을 재로그인하지 않고 즉시 적용하고 싶은 경우 source 사용
alias

터미널에서 alias라고 치면 현재 별칭으로 설정된 것을 볼 수 있음
alias는 기본 명령어를 간단히 줄일 수 있는 것
ex) ll는 ls -l로 별칭이 지정( alias ll2=’ls -l’ )   
     -> ll2를 입력하면 ls -l이 동작됨
grep 

파일에 주어진 패턴 목록과 매칭되는 라인 검색
grep 옵션 패턴 파일명

<옵션>
-i : Insensitively하게, 대소문자 구분 없이 찾기

-w : 정확히 그 단어만 찾기
-v: 특정 패턴 제외한 결과 출력
-E : 정규 표현식 사용

표준 Stream(Stream)

Unix에서 동작하는 프로그램은 커맨드 실행시 3개의 Stream이 생성된다

 

stdin : 0으로 표현, 입력(비밀번호, 커맨드 등)

stdout : 1로 표현, 출력 값(터미널에 나오는 값)

stderr : 2로 표현, 디버깅 정보나 에러 출력


Redirection & Pipe

Redirection은 프로그램의 출력(stdout)을 다른 파일이나 스트림으로 전달하는 것이다.

종류는 > 와 >> 두 가지가 있다.

> : 덮어쓰기(Overwrite) / 파일이 없으면 생성하고 저장

>> : 맨 아래에 추가하기(Append)

 

ex. echo “hi” > vi-test3.sh, echo “hello” >> vi-test3.sh

 

 

Pipe는 프로그램의 출력(stdout)을 다른 프로그램의 입력으로 사용하고 싶은 경우에 다양한 커맨드를 조합해서 사용한다.

즉, A의 Output을 B의 Input으로 사용하고 싶은 경우에 사용한다. 

 

ex. 현재 폴더에 있는 파일 명 중에 vi가 들어간 단어를 찾고 싶은 경우

     =>  ls | grep "vi"

ex2. 위의 결과를 output.txt에 저장하고 싶은 경우

     => ls | grep "vi" > output.txt

ex3. 최근 입력한 커맨드 echo가 들어간 명령어를 찾고 싶은 경우

     => history | grep "echo"


서버에서 사용하는 쉘 커맨드

 

ps

현재 실행되고 있는 프로세스 출력하기(Process Status)

<옵션>
-e : 모든 프로세스
-f : Full Format으로 자세히 보여줌
curl

Command Line 기반의 Data Transfer 커맨드(Client URL)
Request를 테스트할 수 있는 명령어 웹 서버를 작성한 후 요청이 제대로 실행되는지 확인할 수 있음
curl 외에 httpie 등도 있음(더 가독성있게 출력)

ex) curl -X localhost:5000/ {data}
df

현재 사용 중인 디스크 용량 확인(Disk Free)

<옵션>
-h : 사람이 읽기 쉬운 형태로 출력
scp

SSH을 이용해 네트워크로 연결된 호스트 간 파일을 주고 받는 명령어 (Secure Copy)(Remote file copy program)

<옵션>
-r : 재귀적으로 복사
-P : ssh 포트 지정
-i : SSH 설정을 활용해 실행

ex. local 에서 remote
    scp local_path user@ip:remote_directory
ex2. remote 에서 local로
    scp user@ip:remote_directory local_path
ex3. remote에서 remote
    scp user@ip:remote_directory user2@ip2:target_remote_directory
nohup

터미널 종료 후에도 계속 작업이 유지하도록 실행(백그라운드 실행) 
nohup으로 실행될 파일은 Permission이 755여야 함
nohup 외에도 screen이란 도구도 있음

ex. nohup python3 app.py &

종료는 ps ef | grep app.py 
=> pid(Process ID) 찾고
=> kill -9 pid 로 프로세스를 Kill
( 로그는 nohup.out에 저장됨 )

chmod

파일의 권한을 변경하는 경우 사용 (Change Mode)
유닉스에서 파일이나 디렉토리의 시스템 모드를 변경함


권한의 종류는 r, w, x, -, r-x가 있다.

r = Read(읽기), 4
w = Write(쓰기), 2
x = eXecute(실행하기), 1
- = Denied
r-x : 읽거나 실행할 수는 있지만 수정은 불가능

이는 ls -l 명령어를 통해 확인할 수 있다.

755, 644로 퍼미션을 요청하는 경우가 존재한다.
ex. chmod 755 vi-test2.sh

Shell Script

.sh 파일을 생성하고 그 안에 shell command를 추가한다.

즉, shell script는 shell command의 조합으로 이루어져있다.

 

 

 

'AI TECH' 카테고리의 다른 글

언어모델 실습  (1) 2022.11.24
Docker  (0) 2022.11.11
ML Ops  (0) 2022.11.07
N21, N2N, N2M  (0) 2022.10.25
S2S, PyTorch Lightning  (0) 2022.10.24