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