엘리스 AI 트랙 02주차 - 리눅스 기초 (12/30) 🔥
✔ 02주차. Git을 사용한 버전관리 개요
<수강 목표>
-
Git 사용법을 익히고 나와 나의 팀이 작성한 코드의 버전을 관리할 수 있습니다.
-
Gitlab을 활용하여 프로젝트 버전 관리, 배포 및 CI/CD를 수행할 수 있습니다.
-
컴퓨터 운영체제에 대해 학습하고 무료 운영체제인 리눅스의 기본 명령어를 익혀 설치하고 설정 및 관리할 수 있습니다.
[01 리눅스 파일 시스템]
1. 리눅스 파일 시스템
- 파일 시스템 : 저장장치에서 데이터 읽고 쓰기위해 정한 약속 / 파일 저장 및 검색을 할 수 있도록 관리하는 방법 / 파일을 어떻게 관리할 것인가에 대한 정책
- 디렉토리 + 파일 형태로 구성 -> 리눅스는 root 디렉토리 아래에 계층적으로 만들어짐
- 파일 : 데이터의 집합
- 디렉토리 : 파일과 하위 디렉토리들을 그룹으로 묶은 개념
2. 디렉토리의 구조
- 리눅스 파일 시스템의 디렉토리 구조는 트리구조 / tree 명령어로 확인도 가능
종류
- 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 영역 : 함수 매개변수, 복귀 주소, 지역 변수 같은 임시자료
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/) 입니다.