ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • ./Missing Semester - 수업 개요 + shell
    컴퓨터 구조 2021. 1. 4. 00:43

    ./Missing Semester

     

    2021 - 01 - 04 를 시작으로 매일 강의 한 개씩 수강해 나갈 예정이다.

    1년 전 ROS, Autoware를 설치하고 사용해보며 처음 Linux, Shell을 접했는데, 이번 기회를 통해 기초를 탄탄히 해볼 계획이다.

    꾸준히 수강하자!

     


     

    연습문제

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

     

    • touch라는 프로그램을 관찰해보세요. man 프로그램이 도움이 될겁니다.

    Description:

       Update  the access and modification times of each FILE to the current time.

       A FILE argument that does not exist is created empty, unless -c or -h is supplied.

     

    touch ls.txt를 실행해보았다.

    ls.txt의 시간이 업데이트 된 것을 확인할 수 있다.

     

     

    • touch를 이용해서 semester라는 파일을 missing 안에 만들어 보세요.

     

     

    • 아래 주어진 것을 그 파일에 써보세요. 단, 한번에 한줄씩
    #!/bin/sh
    curl --head --silent https://missing.csail.mit.edu

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

     

    #!/bin/sh를 그대로 입력하면 semester에 아무것도 저장되지 않았다.

    작은 따옴표로 감싸주어 입력할 수 있었다.

    두 번재 줄을 입력할 때는 >>를 써주어 문서의 마지막 줄에 append해주었다.

    제대로 입력되었다.

    추가로 #!/bin/sh의 의미는 아래와 같다.

     

    #!/bin/sh – Execute the file using the Bourne shell, or a compatible shell, assumed to be in the /bin directory

    이를 shebang이라고 하며, 아래와 같은 명령어들을 사용할 수도 있다.

     

    #!/bin/sh – Execute the file using the Bourne shell, or a compatible shell, assumed to be in the /bin directory

    #!/bin/bash – Execute the file using the Bash shell

    #!/usr/bin/env python3 – Execute with a Python interpreter, using the program search path to find it

    #!/bin/false – Do nothing, but return a non-zero exit status, indicating failure. Used to prevent stand-alone execution of a script file intended for execution in a specific context, such as by the . command from sh/bash, source from csh/tcsh, or as a .profile, .cshrc, or .login file.

     

     

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

    cd ./semester명령어는 작동하지 않는다. 당연하게도 semester는 폴더가 아니라 파일이기 때문에 semester라는 directory로 접근할 수 없다.

    ls -l을 입력하면 파일과 폴더들의 정보를 더 자세하게 확인해볼 수 있다.

     

    첫 번째 단어가 d로 시작하는 것이 폴더를 나타내며, -는 파일을 나타낸다.

    semester는 -로 시작하는 파일이기 때문에 접근할 수 없다.

     

     

    • sh 인터프리터로 시작해 명령을 실행하고, semester 파일에 첫 인자로 주세요. (즉 sh semester 이렇게!). ./semester는 안되는데, 앞에 거는 왜 실행이 될까요?

     

    semester라는 파일을 직접 실행할 수 있는 권한이 없기 때문에, ./semester로는 실행이 되지 않는다.

    ./semester로 실행 가능하려면, 해당 폴더에 진입할 수 있어야 하고, 해당 파일을 실행할 수 있는 executable권한이 있어야 한다.

     

    touch로 생성한 semester파일에는 위의 캡쳐에서 볼수 있듯이 x권한이 없다.

     

    chmod 777 semester

    위의 명령어를 이용해 semester의 권한을 변경한 후에, ./semester를 실행해보자.

     

     

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

    위의 명령어가 실행되어 아래와 같이 출력된 것이다.

     

     

     

    • chmod 프로그램을 살펴보세요. (man chmod를 사용해보세요.)

     

     

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

    Shell은 semester파일 내의 #!/bin/sh를 통해 sh를 이용해 이 파일을 해석해야 한다는 것을 인지한다.

     

     

    파일을 읽을때 sh를 default로 사용하기 때문에 sh의 경우 shebang을 추가로 작성하지 않아도 실행된다.

     

     

    • |  >를 사용해 semester별 “last modified” 날짜 출력을 홈 디렉토리에 last-modified.txt라는 파일에 작성하세요.
    ls -l | tail -n1 | cut --delimiter=' ' -f6-9 | tee > ../last-modified.txt

     


     

    MEMO

     

    아래의 명령어로 save.txt.에 curl --head --silent google.com의 content-length정보를 저장할 수 있다.

     

    vi -b save.txt

    그런데 curl --head --silent google.com에서는 보이지 않았던 ^M이 들어있다.

    dos 형식의 파일에서의 새줄 문자와 Unix 형식에서의 새줄 문자가 달라 ^M을 명령으로 인식해서 생기는 문제입니다.

    ^M때문에 종종 문제가 발생한다고 한다.

     

    sed -i 's/^M//g' 파일명

     

    이때 ^M은 직접 입력하는 것이 아니라 ctr+v,ctr+m으로 입력해야 한다는 점에 유의하자.

     

    위의 명령어로 ^M을 제거할 수 있다.

     

    실습해보자.

     

     

    root user

     

    $표시는 현재 내가 root권한을 가지고 있지 않다는 뜻이다.

    sudo su를 입력하면 모든 명령어를 root권한으로 실행할 수 있으며, $가 #으로 변경된다!

     

     

    exit으로 다시 root권한을 가지지 않는 사용자로 돌아갈 수 있다.

     

     

    '컴퓨터 구조' 카테고리의 다른 글

    B-Tree - intro  (1) 2021.01.11
    단순 연결 리스트  (0) 2021.01.10
    C - Pointer  (0) 2021.01.08
    ./Missing Semester - 셸(Shell) 스크립팅  (0) 2021.01.05
    [컴퓨터 시스템] 1. 프로그램이 실행되는 과정  (0) 2020.12.29
Designed by Tistory.