###### 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