AI_Tech부스트캠프 week6...[1]AI 개발기초(2) Linux, Shell script

Leejaegun·2024년 9월 12일
0

AI_tech_CV트랙 여정

목록 보기
7/74
post-thumbnail

1. Linux

???: 헤헤
(겁나 멍청해보임;)

1.1 이름 유래

창시자 이름 Linus + unix -> Linux라고 명명됨

1.2 CLI, GUI

CLI:Command Line Interface

GUI:Graphic User Interface

1.3 Linux 배포판

👉 대표적으로 Debian, Ubuntu, Redhat, CentOS 등이 있음.

1.4 Linux 학습 가이드

  • 자주 사용하는 쉘 커맨드, 쉘 스크립트 위주로 학습.

2. Shell Command

2.1 쉘의 종류

  • 쉘(shell) :
    사용자가 문자를 입력해 컴퓨터에 명령할 수 있도록 하는 프로그램
    (shell 은 껍데기라는 의미로 시스템의 핵심인 커널과 직접 상호작용하지 않고, 쉘을 통해 커널에 명령을 전달하고 받는 방식이어서 쉘이라고 함.)

  • 터미널/콘솔:
    쉘을 실행하기 위해 문자 입력을 받아 컴퓨터에 전달

  • sh(Bounrne Shell_창시자 이름):
    최조의 쉘

  • bash(Bounrne Again Shell_다시 태어났다는 말장난유래):
    Linux 표준 쉘

  • zsh(Z shell_그냥 친구이름 땃다고 함.):
    Mac 카탈리나 OS 기본 쉘

Shell UX

username@hostname: current folder형태로 되어있음.
hostname은 컴퓨터 네트워크에 접속된 장치의 이름으로 IP대신에 쓰는 이름.

2.2 기본 쉘 커맨드

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
  • 여러 파일을 인자로 주서 합쳐서(CONCAT)출력
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: 선택된 줄에 대해 수행할 동작.

2.3 Redirection & pipe (표준스트림)

  • stdin : 0으로 표현 -> 입력(input)
  • stdout : 1로 표현 -> 출력(output)
  • stderr : 2로 표현 ->> 디버깅 정보나 에러 출력

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

echo "hi" > vi-test3.sh # 덮어쓰기(overwrite) -> 파일이 없으면 생성하고 저장
echo "hello" >> vi-test3.sh # 맨 아래에 추가하기(append)
python train.py > log_file 2>&1 &
  • 2>&1 : 표준에러(stderr,2)를 표준출력(stdout,1)으로 Redirect
    -> 이렇게 하면 에러메세지도 log_file 에 같이 저장됨
    (&: 백그라운드에서 실행하도록 지시)

pipe : 프로그램의 출력(stdout)을 다른 프로그램의 입력으로 사용하고 싶은 경우

ls | grep "vi" > output.txt #"vi"라는 것이 있는거 찾고 이를 output.txt 파일로 저장.
history | grep "echo" # 최근 입력한 커맨드 중 echo 가 들어간 명령어를 찾고 싶은 경우.

2.4 서버에서 자주 사용하는 커맨드

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

profile
Lee_AA

0개의 댓글

관련 채용 정보