개발/엘리스 AI 트랙

엘리스 AI 트랙 02주차 - 리눅스 기초 (12/30) 🔥

Max 2020. 12. 30. 21:12
반응형

✔ 02주차. Git을 사용한 버전관리 개요

<수강 목표>

  • Git 사용법을 익히고 나와 나의 팀이 작성한 코드의 버전을 관리할 수 있습니다.

  • Gitlab을 활용하여 프로젝트 버전 관리, 배포 및 CI/CD를 수행할 수 있습니다.

  • 컴퓨터 운영체제에 대해 학습하고 무료 운영체제인 리눅스의 기본 명령어를 익혀 설치하고 설정 및 관리할 수 있습니다.


[01 리눅스 파일 시스템]

1. 리눅스 파일 시스템
  - 파일 시스템 : 저장장치에서 데이터 읽고 쓰기위해 정한 약속 / 파일 저장 및 검색을 할 수 있도록 관리하는 방법 / 파일을 어떻게 관리할 것인가에 대한 정책

  - 디렉토리 + 파일 형태로 구성 -> 리눅스는 root 디렉토리 아래에 계층적으로 만들어짐

  - 파일 : 데이터의 집합

  - 디렉토리 : 파일과 하위 디렉토리들을 그룹으로 묶은 개념 

2. 디렉토리의 구조

  - 리눅스 파일 시스템의 디렉토리 구조는 트리구조 / tree 명령어로 확인도 가능

이미지 출처 : 엘리스 (https://elice.io/)

 

종류 
- FAT(파일 할당 테이블) : 메모리카드, 공간활용↓ 
- NTFS : 윈도 2000이후 윈도우에 포함, windowsNT, 기존 FAT 구조 대체, 시스템 보장과 파일 복구, 안정성↑, 보안성↑ 
- EXT : EXT2(2차확장 파일 시스템), EXT3 호환, EXT4 최대 16Tb 파일 지원, 64000개 하위 디렉토리 만들수있음

 

3. 소유권과 권한

 - 파일 권한 : r = read, 읽기 / w = write, 쓰기 / e = execute, 실행

소유자 그룹 그 외 사용자
r w - r - - r - -
4 2 0 4 0 0 4 0 0
6 4 4

 - 파일 권한 변경 : chmod [파일권한] [변경할 파일위치 or 이름] ☆777 권한은 모든 사용자/모든 권한

 - 소유권 변경: chown [소유할 유저]:[소유할 그룹] [ 소유권 변경 디렉토리/파일명] ☆root 권한 필요

 

4. 파일 명령어

 - 디렉토리 생성 : mkdir [현재 디렉토리에 생성할 디렉토리 이름] / mkdir [디렉토리 경로/디렉토리 이름]

 - 빈 파일 생성 : touch [파일 이름] / touch [파일 경로/파일 이름]

 - 디렉토리 삭제 : rmdir [삭제할 디렉토리 이름] ☆파일 있으면 삭제X

 - 파일/디렉토리 삭제 : rm [옵션] [삭제 파일 및 디렉토리 이름]

    [옵션] -r : 디렉토리&하부 파일까지 삭제 / -f : 삭제여부 확인X / -i : 삭제여부 확인 / -rf : 확인X 하부파일까지 삭제

 - 파일/디렉토리 복사 : cp [옵션] [대상위치or이름] [복사할 위치]

    [옵션] -r : 하위 디렉토리&파일 전체 복사 / -p : 소유주,그룹,권한,시간정보 그대로 복사

 - 파일/디렉토리 이동 : mv [대상위치/이름] [이동시킬 위치/이름] ☆이동할 위치에 같은 이름 없으면 이동O

 - 파일 내용 출력 : cat [옵션] [파일이름]

    [옵션] -n : 왼쪽에 줄번호 / > : 파일내용 덮어쓰기 / >> : 내용 있으면 뒤에 내용 추가

 - 파일 검색 : find [파일 경로] [-name] [파일 이름] [-type d(폴더)/f(파일)], [파일 경로]에서 [파일 이름] 검색

 - 명령어 함께 사용할 때 : | (ex.  cat test.txt | head -n10)

 - 사용자 변경 : su

 - 화면 단위 출력 : more

 - 시스템 종료 : shutdown

★그 외 명령어들은 여기서 볼 수 있음

 

5. nano editor

 - 나노 에디터 명령어

    Ctrl + O : 저장 / Ctrl + X : 종료 / Ctrl + W : 검색 / Alt + 6 : 복사 / Ctrl + U : 붙여넣기 / Ctrl + ^ : 여러 줄 선택


[02 알고 쓰는 리눅스 명령어]

1. 정규표현식

 - 정규표현식 (정규식) : 특정 규칙을 가진 문자열의 집합을 표현할 때 사용하는 형식, 문자열을 검색하거나 치환할때 사용

 - 정규표현식 문법 : 특정문자 - 특정 논리적 관계 / 나머지 - 일반 문자

메타문자 의미 메타문자 의미
^ 문자열의 시작 \d 숫자
$ 문자열의 끝 \D 숫자X
. 하나의 문자와 대응 \w 알파벳 대소,숫자,_
\s 공백문자 \W \w 해당하지 않는 글자
\S 공백문자가 아닌 것 \n 개행문자 (=enter)
\ 메타문자를 문자 그대로 \t 탭문자
\b 단어구분자 찾음    

 - 선택 패턴 : 사용자가 만든 규칙을 검색할 수 있는 기능

    | : A | B 패턴으로 매칭 가능 (둘 중 하나)

    [] : 대괄호 속 넣은 문자 중 하나 매칭 (^ = not), ex)[0-9] : 0~9까지 하나

 - 수량한정자

수량자 의미 수량자 의미
? 0개 or 1개 { n } n개
* 0개 이상 { n, m } n개 이상, m개 이하
+ 1개 이상 { n, } n개 이상

 - 그룹 패턴 : 괄호를 이용해 한번 사용한 패턴을 여러번 사용할 수 있게 해줌, 괄호로 표현식 만들고 -> \만들어진순서의번호 사용

    ex. (to)ma\1 = tomato

 - 정규표현식 사용방법 예) ^010(\D?\d{4}){2}

    - ^010 : 시작문자는 010

    - \D? : 숫자가 아닌 문자가 0개 이상

    - \d{4} : 숫자가 4개

    - (\D?\d{4}){2} : 앞의 그룹이 2개 존재

 

2. grep

 - 파일 내에서 지정한 패턴이나 문자열을 찾은 후에 그 패턴을 포함하고 있는 모든 행을 출력한다.

 - grep [옵션] [패턴] [찾을 파일명]

    [옵션] -i : 대소문자 구분X / -v : 패턴제외 / -c : 패턴일치 행의 갯수 / -w : 패턴과 단어단위로 매칭

 

3. File Redirection

 - 일반적인 표준 입/출력, 오류 사용하지 않고 다른 경로인 파일로 재지정 → 만약에 오류가 발생하면 그 오류를 원하는 파일에 따로 저장할 수 있음!

 - Standard Stream : 표준 스트림은 문자열로 콘솔에 출력되도록 설정 되어 있음

    > : 표준 출력 재지정

    < : 표준 입력 재지정

    >> : 파일 없으면 파일 생성, 있으면 이어서 작성

 - 파일 디스크립터 번호 : 0 표준 입력 / 1 표준 출력 / 2 표준 에러

 예) python minus.py < input.txt >> result.txt

    minus.py 파일 안에는 input을 받아서 -1 하는 코드[n = input() / print(int(n)-1) ]가 적혀있음 

    ② minus.py 이라는 파일을 파이썬으로 실행시킴 

    ③ minus.py 파일이 실행되면 콘솔로 입력받지 않고 input.txt 에 써있는 내용이 들어감

    ④ print 내용은 result.txt 파일에 저장됨

 

4. Piping commands

 - pipe : |, 둘 이상의 명령어를 묶어 출력 결과를 다른 명령으로 전환, | 기호를 사용해 명령어와 명령어를 연결

 

5. 마운트

 - 물리적인 저장장치를 디렉토리 (또는 폴더)에 연결

 - mount [옵션] [기기] [연결 위치] : 리눅스는 직접 연결 해야함  (윈도우는 PnP)

    [옵션] -a : /etc/fstab에 명시된 파일 시스템 마운트 / -t : 파일 시스템 유형 지정, 생략시 /etc/fstab 참조 / -o : 추가 설정

 - 저장장치 연결 해지 : remount [기기] [연결 위치]

 - 연결된 저장장치 정보 출력 : df


[03 프로세스와 네트워크]

 

1. 프로세스

 - 프로세스 : 시스템에서 메모리에 적재되어 실행되고 있는 모든 프로그램, 실행되고 있는 프로그램 = 프로세스

 - 프로그램 : 코딩을 이용해 만든 코딩 명령어 집합체

 - 프로세스 특징

    ① 모든 프로그램은 실행시 하나 이상 프로세스 갖음

   병행 실행 가능

   부모(복사전 원본)/자식(복사본) 프로세스

   커널에 의해 관리

   소유자 있음

   식별을 위해 pid 있음 (순서대로 부여)

 - 프로세스의 번호 : 모든 프로세스는 고유번호를 가짐 / pid1은 init 프로세스, pid2는 kthread 프로세스임 / init 프로세스는 모든 시스템 프로세스의 부모 / thread 프로세스는 모슨 스레드의 부모)

 - 프로세스의 메모리 구성

    - 코드 영역 : 프로그램 코드 (가장 낮은 주소 ex. 0x00000000, 하위 메모리부터 할당)

    - 데이터 영역 : 전역 변수 & 정적 변수

    - BSS 영역 : 초기화 되지 않은 변수

    - Heap 영역 : 동적 메모리 할당 영역

    - Stack 영역 : 함수 매개변수, 복귀 주소, 지역 변수 같은 임시자료

 

이미지 출처 : https://gabrieletolomei.wordpress.com/miscellanea/operating-systems/in-memory-layout/

 

2. 프로세스 명령어

 - 프로세스 목록 : ps [옵션]

    [옵션] -e : 현재 실행중 모든 프로세스 정보 / -f : 모든 정보 확인 / -a : 실행중인 전체 사용자의 모든 프로세스 출력 (다른 계정들의 프로세스까지 보여줌) / -u : 프로세스 실행자와 시작시간 등 출력 / -x : 터미널에 프로세스 현황을 계속 보여줌

 - 프로세스 종료 : kill [옵션] [PID]

    [옵션] -l : 사용 가능한 시그널 목록 출력 (시그널 : -1(재실행), -9(강제종료), -15(정상 종료))

 

3. job

 - job 명령어 : 백그라운드로 실행되는 작업을 보여주는 명령어, 터미널에 의존적 (터미널 종료시 job과 프로세스도 종료)

 - 실행시키는 명령어 뒤에 & 붙이면 됨

 - jobs 입력하면 작업번호 확인 가능

 - kill 명령 사용 가능 : kill %작업번호

 - fg [작업번호] : foreground 로 프로세스 실행

 - bg [작업번호] : background 로 프로세스 실행

 

4. at 과 cron

 - at : at [옵션] [시간] [날짜] [+증가시간] / 1회성 예약작업 / 지정된 시간에 1회 실행되는 작업  예약 명령어, 수행후 작업 리스트에서 사라짐 

    [옵션] -m : 출력결과가 없어도 작업 완료시 사용자에게 메일 보냄 / -f : 스크립트 파일 실행시 사용 / -l : 예약된 작업 목록 출력 / -v : 작업이 수행될 시간 출력 / -d : 예약된 작업을 삭제

☆다시한번 읽어보기

 - cron : crontab [옵션] / 반복 예약작업 / 지정된 시간에 따라 주기적으로 실행

    [옵션] -l : 현재 계정의 설정된 crontab 정보 / -e : 현재 계정의 crontab 정보 수정 / -a : 현재 계정의 crontab 정보 모두 삭제 / -u : 특정 사용자의 crontab 정보를 다룰 때 사용 (root 권한 必)

☆다시한번 읽어보기

 

5. SSH

 - SSH : Sccure Shell. 네트워크로 다른 컴퓨터 접근&명령 실행하는 프로토콜  (★putty 다운로드)

 - telnet : SSH와 비슷하지만 보내는 데이터 암호화X

 - openssh : 우분투에서 사용해 ssh 구동 가능 (확인 명령어 : dpkg -l | grep openssh)

 - ssh 서버 실행 : sudo service ssh start (sudo 권한 필요)

 - ssh 포트 확인 : sudo netstat -antp

 - ssh 접속 : ssh [서버아이디]@[아이피 or 서버이름 or 도메인]

 


네트워크 문제때문에 같은 영상을 다섯번 봤더니 약간 외워벌임....🤣

 

 

※ 수업 자료의 출처는 K-Digital Training x 엘리스 인공지능 서비스 개발 기획 1기 (elice.io/) 입니다.

반응형