MIT:Missing Semester - 1주차

seanlion·2021년 1월 4일
1
post-thumbnail

Intro

몇 달 전 페이스북에서 우연히 "Missing Semster of Your CS Education"이라는 아래의 사이트를 알게 되었다. MIT에서 가르치는 정식 커리큘럼에다가 CS 교과과정에서 다루진 않지만 중요한 걸 가르쳐 준다는 취지에 혹해서 들어가보았고, 꽤나 매력적인 개념들을 가르쳐주길래 '언젠가 꼭 들어야지'라고 막연히 생각만 하고 있었다.

그후 CS 학부 과정을 들으면서 리눅스에 대해 더 관심을 가지게 되기도 하고, SW 사관학교 정글에 와서 본격적으로 웹서버 혹은 운영체제 같이 '대개의 응용 프로그램 보다는 low-level'스러운 걸 만드려고 하다보니 터미널을 잘 다뤄야겠다는 생각이 들면서 지금이 저걸 들어야 할 타이밍이겠구나 라는 생각이 들어 바로 공부를 시작했다.

링크 : 여러분의 CS 교육에서 누락된 학기

코스 설명

코스는 2주 정도 되는 분량이다. 총 11개의 비디오로 이루어져있다.

1주차 부터 순서대로,

  • 코스 소개, shell 소개
  • Shell tool, Shell Script
  • Vim
  • Data Wrangling
  • Command Line Environment
  • Version Control
  • Debugging and Profiling
  • MetaProgramming
  • Security and Cryptography
  • Potpourri(프로그래밍용 용어는 아닌듯하고, mixture 했다는 원 단어의 의미를 차용해 여러가지 개념을 알려주는 수업.)
  • Q&A

조금은 아는 Shell 부터 처음 들어보는 Metaprogramming 까지 다양한 개념들이 많다. 각 주차마다 연습문제도 있어서 개념 공부를 다잡기도 좋다. 첫 주차부터 차근차근 들어보면서 다른 사람들도 알면 좋을 개념 혹은 문제들을 간간히 올려보려고 한다.

1주차 수업 간단 정리

  • Shell에 대해 배움.(한글로는 '셸')

  • Command Line Interface로 명령을 수행.

  • 기본적으로 파이썬이나 자바같은 프로그래밍 환경이고, 변수, 조건문, 반복문 등을 사용해서 코딩할 수 있다.

  • 어떤 명령은 기본적으로 프로그램을 실행하는 것이다. 셸이 그 프로그램을 발견해서 실행 가능하다면 실행하는데, 실행 권한이 없으면 오류가 날 수 있다. 대개의 프로그램은 환경변수에 등록이 되어있어 실행가능하다.

  • Python을 터미널에서 실행할 때 python3 [app.py](http://app.py) 라고 입력하는 이유도 환경변수에 python3가 등록되어있기 때문에 가능하다. (물론 프로그램의 Full path를 입력하면 등록없이 가능 하다.)

  • 대부분의 유닉스 계열 시스템(Linux, Mac os 등)에는 Root 사용자라는 개념이 존재한다. 관리자 권한이라고 보면 된다. 이런 관리자 권한을 일반 사용자 레벨에서도 실행할 수 있는 명령어가 sudo 이다.(Super User Do)

연습문제 풀기

  1. /tmp에 missing이라는 새로운 경로를 만들어 보세요.

    • mkdir 같은 명령어로 디렉토리를 만들 수 있다. 디렉토리 = 폴더라고 생각하면 된다.
  2. touch라는 프로그램을 관찰해보세요. man 프로그램이 도움이 될겁니다.

    • man touch라고 입력하면 touch에 대한 설명이 쭈루룩 나온다.
    • 간단하게 touch 는 파일의 접근이나 타임스탬ㅍ를 변경하는데 사용되는 프로그램이다. 보통 새 파일을 만들 때 사용된다.
  3. touch를 이용해서 semester라는 파일을 missing 안에 만들어 보세요.

    • touch semester 라고 입력하면 된다.
  4. 아래 주어진 것을 그 파일에 써보세요. 단, 한번에 한줄씩.

    #!/bin/sh curl --head --silent https://missing.csail.mit.edu

    첫번째 줄을 작동시키는게 꽤 까다로울 것입니다. #으로 시작하는 것은 코멘트(comment)고, !는 큰 따옴표(")로 둘러쌓인 문자열 내에서도 특별한 의미를 가집니다. 배시(Bash)는 작은 따옴표' 문자열과 큰따옴표를 구분합니다. 이것은 매우 헷갈리는 케이스입니다. Bash 인용 관련 메뉴얼 페이지에 더 자세한 정보가 설명돼있습니다.

  • #!/bin/sh 라는 코드는 웬만한 셸 스크립트의 첫번째 줄에 적힌 코드이다. /bin/sh 를 확인해보면 다음과 같다.

    • 코드를 보면 dash로 링크를 걸어두고 있는 걸 볼 수 있다. dash도 셸이다. bash, zsh같은 셸이라는 의미이다. sh는 현재 설정된 system shell에 대한 symlink라고 한다. 쓰고 있는 shell을 사용하기 위한 링크 프로그램이라고 이해했다.
    • 그렇다면 왜 -> dash 라고 해놓는지? 에 대한 이유를 잘 설명해놓은 글이 있다. 요약하면, 리눅스 배포판에서는 bash 셸을 오랜 기간 디폴트로 써오고 있다. 그러나 데비안/우분투 쪽에서 특정 버전부터 bash 셸이 더 가볍다는 이유로 bash를 dash 셸로 교환했다고 한다.
    • 그렇지만 모든 부분에서 dash 셸을 쓰는건 아니고 로그인 할 때는 bash 셸을 사용한다고 한다.
    • #!/bin/sh는 셸 스크립트를 동작하기 위해 선언하는 코드라고 볼 수 있다.

참고 : [Ubuntu/Linux] #!/bin/sh에 대한 간단한 이야기
What is the difference between #!/bin/sh and #!/bin/bash?

  • curl 은 command line용 data transfer tool.
  • HTTP, HTTPS 지원한다. --head 는 header만 보여주는 아규먼트. --silent 는 response code만 가져올 때 보통 쓰는듯.

참고 : curl 설치 및 사용법 - HTTP GET/POST, REST API 연계등

  1. 파일을 실행해보세요. 예를 들어, (./semester)라는 경로를 셸에 입력해보세요. 이것이 왜 작동하지 않는지 ls를 이용해 파악해보세요. (힌트: 파일의 비트 권한을 확인해보세요.)

    • 권한이 없음. x 가 실행 권한인데 존재하지 않음.
    • 리눅스에서는 기본적으로 프로그램을 실행시킬 때 (적절한 경로라는 전제하에 ) 프로그램의 이름을 타이핑하면 된다.
  2. sh 인터프리터로 시작해 명령을 실행하고, semester 파일을 첫 인자로 주세요. (즉 sh semester 이렇게!). ./semester는 안되는데, 앞에 거는 왜 실행이 될까요?

    • sh는 인터프리터로서 스크립트를 실행하게 해주는 친구이다. 인터프리터가 코드 한줄한줄 읽고 빌드하는 과정을 거칠 것이다. 이 경우, 해당 파일의 실행권한이 없어도 인터프리터가 읽고 실행하기 때문에 실행이 된다.
  3. chmod 프로그램을 살펴보세요. (man chmod를 사용해보세요.)

    • 파일 mode bits를 바꾸는 프로그램. 파일의 읽기/쓰기/실행 권한을 변경할 수 있다.
    • 내가 습관처럼 썼던 chmod a+x ~~.py 는 aqll users에게 executable 한 권한을 주어라. 라는 뜻이었다.

참고 : What is the difference between "chmod +x" and "chmod 755"?

  1. **chmod를 활용해 sh semester 대신에 ./semester을 사용 가능하게 해보세요. sh을 이용해 이 파일을 해석해야 한다는 것을 셸이 어떻게 알까요? 이 페이지에서 셔뱅(shebang)에 대해서 더 알아보세요.**

    • chmod 755 ./semester 라고 할 수 있다.
    • 해당 파일을 그냥 실행시켜도 ``#!/bin/sh` 라고 우리가 선언해놓았기 때문에(셔뱅 사용) 스크립트가 이 셸 문법이구나 라고 인식할 수 있게 된다.
  2. | 와 >를 사용해 semester별 “last modified” 날짜 출력을 홈 디렉토리에 last-modified.txt라는 파일에 작성하세요.

  3. 노트북 배터리의 전원 레벨 또는 데스크탑 컴퓨터의 CPU 온도를 /sys에서 읽는 명령을 작성하십시오. 참고: 만약 macOS 사용자라면, 당신의 OS는 sysfs가 없기 때문에, 이 예제를 건너뛸 수 있습니다.

    • sys/class에 들어가서 이것저것 조회해본 것으로 해결.
profile
소프트웨어 엔지니어링을 연마하고자 합니다.

0개의 댓글