---
# System prepended metadata

title: Day02 - 학습정리
tags: [2020 Boostcamp]

---

###### tags: `2020 Boostcamp`
# Day02 - 학습정리


## 스스로 확인할 사항

- **리눅스 역사와 유닉스와 차이를 학습하고 정리한다.**

  1. 유닉스(UNIX)

     * 1965년 MIT, AT&T 벨 연구소, General Electric에서는 Multics라는 실험적인 운영체제를 공동으로 개발하는 프로젝트를 진행 -> 망함
     * 켄 톰슨과 몇몇 연구원들은 프로그램에 관한 연구를 효과적으로 수행하기에 적합한 환경을 만들어보자는 의도에서 계속하여 운영체제 개발에 몰두 -> 초기 UNIX 탄생
     * 데니스 리치(Dennis Ritchie)가 C언어를 개발함으로써, 어셈블리 언어로 되어있던 UNIX는 C언어로 재작성 되어 다시 태어나게 되었음

  2. 리눅스(LINUX)

     * 1991년 핀란드 헬싱키 대학의 리누스 토발즈 라는 학생에 의해 만들어진 운영체제 -> gcc와 bash정도 실행
     * 1994년 네트워킹 기능이 추가되고 버전 1.0 발표
     * 1996년 여러 프로세서를 한번에 사용할 수 있는 버전 2.0 발표
     * 2003년 부터 현재까지 다양한 분야에 리눅스가 쓰이고 있으며, IBM과 SUN의 지원을 받고 있음

  3. 유닉스와 리눅스 차이

     |            |                            유닉스                            |                            리눅스                            |
     | :--------: | :----------------------------------------------------------: | :----------------------------------------------------------: |
     |   사용자   | 유닉스 운영체제는 주로 메인프로엠, 서버 그리고 모든 사람을 위해 설계된 OSX를 제외한 워크스테이션을 위해 개발됨 |         모든 사람. 집에서 사용하는 사용자부터 개발자         |
     |    가격    |           대부분 유료이다. 일부 무료(Solaris) 존재           | 리눅스는 무료. 유료버전의 리눅스도 있지만 대부분 윈도우보다 저렴함 |
     |   사용량   | 유닉스는 인터넷서버, 워크스테이션과 PC들에 사용됨.  다수의 금융인프라 그리고 많은 가용솔루션의 뼈대를 이루는 인프라에 사용됨 | 리눅스는 모바일폰, 태블릿 컴퓨터 그리고 비디오 게임 콘솔에서부터 메인프레임이나 슈퍼컴퓨터까지 다양한 컴퓨터 하드웨어에 설치가 가능함 |
     | 개발과배포 | 유닉스 시스템은 다양한 제조사로 나누어짐. 대부분 AT&T 그리고 다양한 상업적 판매사와 비영리 단체에 의해 개발됨 |                  리눅스는 오픈소스로 개발됨                  |
     |   shell    | 원래는 Bourne Shell. 현재는 BASH, Korn & C를 포함한 다른 많은 쉘들과 호환됨 | BASH (Bourne Again Shell)가 리눅스의 기본 쉘 BASH는 다수의 명령어를 지원한다. |
     |    예시    |                  OS X, Solaris, 모든 리눅스                  |    Ubunto, Fedora, Red Hat, Debian, Archlinux, Android 등    |

     

- **여러 가지 쉘 종류에 대해 학습하고 정리한다.**
  - shell
    - 명령어 처리기
    - 운영 체제 상에서 다양한 운영 체제 기능과 서비스를 구현하는 인터페이스를 제공하는 프로그램
    - 운영 체제 커널과 사용자를 이어줌
  - shell script
    - 텍스트 형식으로 저장되는 프로그램으로서 한줄씩 순차적으로 읽어 실행되도록 작성된 프로그램 
    - shell을 사용하여 컴퓨터에 시킬 명령을 텍스트로 작성하여 실행시킴
  - sh
    - 초기의 유닉스 쉘로 태어났다는 의미에서 Bourne shell의 줄임말
    - 상호 대화형 방식을 취하지 않음
    - 가장 오래 동안 모든 유닉스 시스템의 표준 구성 요소
    - 프롬프트: $
  - bash
    - Bourne-agin shell 줄여서, bash라고 부름
    - 1987년 브라이언 폭스에 의해 만들어짐
    - sh와 대부분 호환
    - 프롬프트: #
  - zsh
    - bash에서 발전한 shell
    - 자동완성, 재귀적 경로완성, 플러그인 및 테마 지원
    - 프롬프트: %



## 다같이 확인할 사항

- **셀 스크립트에 활용한 다양한 사례에 대해서 조사하고 정리한다.**

  - 서버 상태 감시 - 관리하는 서버 규모가 크지 않고 간단히 서버 작동여부만을 점검하고자 한다면 쉘 스크립트를 이용하는 것이 좋은 대안
  - 데몬 및 프로세스의 시작과 정지 - 여러 프로세스가 상호의존하면서 구동되는 프로그램이나 실행 시 많은 인자가 포함된 프로세스일 때 이를 자동화 처리
  - 로그 파일 로테이션 - 관리자가 주기적으로 로테이트(rotate)되도록 수작업으로 적용하는 번거로움을 덜어줌
  - 사용한 파일 자동 업로드 - 한 곳에서 지정된 파일을 정기적으로 수신

- **각자 컴퓨터 개발 환경에서 리눅스와 비슷한 터미널 환경을 설정하기 위한 방법을 학습하고 정리한다**

  - macOS는 기본적으로 zsh을 가지고 있음
  - Oh My Zsh
    - zsh의 환경설정을 다루는 프레임워크이며, 커뮤니티 활동이 매우 활발하여 120여 개의 테마와 120여 개의 플러그인이 준비되어 있음
    - 자동완성에 강력함
    - 기능적으로 획기적인 테마 사용 가능
    - alias는 긴 명령어를 짧게 사용할 수 있도록 별명 짓는데 많은 플러그인들이 미리 정의되어 있음
  - iTerm2
    -  맥의 기본 터미널기능을 확장하여 커스텀 단축키나 스크립트, 화면 나누기등 다양한 기능을 제공
    - iTerms-Color-Schma​ https://github.com/mbadolato/iTerm2-Color-Schemes