개발/코딩자율학습단

[코딩자율학습단 13기] 3일차, 리눅스 셸

codesparkling 2025. 3. 15. 18:47

커리큘럼

터미널과 셸

터미널

터미널은 컴퓨터와 사용자 사이에 상호작용을 할 수 있도록 연결하는 장치이다. 이 때, 사용자가 컴퓨터에 명령을 전달하는 장치를 입력 장치, 컴퓨터가 사용자에게 결과를 보여주는 장치를 출력 장치라고 한다.

지금 이야기하는 것은 1960~70년대, 터미널이 실제 물리적인 하드웨어 장치였던 역사를 말하는 것이다. 연산은 터미널과 연결된 대형 컴퓨터에서 진행하고, 그 대형 컴퓨터는 여러 명이 공유해서 사용하는 형태였다. 그래서 각 사용자가 컴퓨터와 상호작용 할 수 있도록 도와주던 장치가 하드웨어 터미널이다. 현대에는 대부분 소프트웨어 형태의 터미널 에뮬레이터를 사용한다.

셸은 CLI 프로그램이다. 사용자는 셸을 통해서 명령을 내리고 결과를 확인할 수 있다. 터미널이 컴퓨터오라 사용자 사이를 연결해주는 하드웨어고, 셸은 OS와 사용자 사이의 상호작용을 지원하는 소프트웨어이다.

터미널과 셸

네트워크로 원격 운영체제의 터미널에 연결해서 셸을 사용할 수도 있다. 과거에는 텔넷을 사용했지만, 이제는 데이터가 암호화되는 SSH(Secure Shell) 프로토콜을 사용해서 통신한다.

셸 스크립트

셸에서 동작할 수 있는 명령을 모아놓은 파일을 셸 스크립트라고 한다. 여러 명령을 한 파일에 모아서 실행하는 방식이라, 여러 명령을 자동화할 수 있다. 예를 들어, 일정 주기로 로그를 삭제하는 동작을 자동으로 등록하고 싶다면 셸 스크립트로 로그 파일을 삭제하는 코드를 작성한 뒤, crontab에 등록하면 된다.

실습: 셸 스크립트 작성하기**

  1. SSH를 사용하여 라즈베리파이에 원격으로 접속했다.

  1. ‘echo “Message”’를 입력해보자.

  1. 스크립트를 작성해보자. 먼저 hello.sh를 생성하면서 vim으로 파일을 열어준다.

  1. 사진과 같이 스크립트를 작성한다.

  1. 스크립트의 실행권한을 추가한다.

 

  1. 마지막으로 실행 시켜보자.

shabang

shabang(셔뱅)은 스크립트 파일임을 알려주는 문자열이다.

위 사진의 #!/bin/bash 라고 적혀 있는 것이 셔뱅이며 어떤 인터프리터를 사용할지 지정하는 역할을 한다. 우리는 bash로 실행시키기 때문에 bash를 지정해주고 있다.

기본 명령어

명령어 형식

기본 명령어 형식은 다음과 같다. $ 명령어 [옵션] [인자]

man man [옵션] [섹션] 페이지

manual의 약자로 각종 명령어나 개념에 대한 매뉴얼인 맨 페이지를 호출하는 명령어다. 잘 모르는 명령어에 대해 자세히 알고 싶으면 man을 사용할 수 있다.

페이지는 조회할 대상을 의미하며, 개념일 수도 있고 명령어일 수도 있다. 섹션은 각 페이지를 기준에 맞게 분류해서 번호를 붙인 것이다.

섹션 번호 의미
1 실행 프로그램이나 셸 명령어
2 시스템 콜(System call)
3 라이브러리에 정의된 함수
4 특수 파일
5 파일 포맷과 컨벤션
6 게임
7 기타 내용
8 시스템 관리 명령
9 커널 루틴(비표준)

맨 페이지 내에서 텍스트를 검색하려면 / 을 누르고 검색어를 입력한다. 여러 개가 검색된다면 n을 눌러서 다음 검색어 위치로 이동할 수 있다. q를 누르면 페이지를 닫는다.

man ls를 명령하면 다음과 같이 ls에 대한 메뉴얼을 확인할 수 있다.

ls ls [옵션] [파일]

ls는 list의 약자로, 파일 목록을 화면에 출력한다. 리눅스는 디렉토리도 파일로 취급하므로, 디렉토리도 함께 출력이 되며 특수 파일도 조회할 수 있다.

ls의 주요 옵션은 다음과 같다.

옵션 설명
-a 모든 파일 출력
-l 파일의 여러 속성을 포함해 길게 출력
-t 생성된 순서로 파일 출력(오래된 파일이 가장 뒤로)
-R 하위 모든 디렉터리 순회
-h 사람이 읽기 좋은 크기(KB, MB, GB)로 파일 출력

루트 디렉토리를 확인해보았다.

cd cd [디렉토리]

cd는 change directory의 약자로 현재 작업 디렉토리(CWD, current working directory)의 위치를 이동하는 명령어다.


홈 디렉토리로 이동 후 파일 확인


루트 디렉토리로 이동 후 파일 확인

pwd

pwd는 print working directory의 약자로, 현재 작업 디렉토리를 절대 경로로 조회하는 명령어이다. 상대 경로는 현재 작업 디렉토리(cwd)를 기준으로 파일 경로를 나타내고, 절대 경로는 루트 디렉토리를 기준으로 나타낸다.

cat cat [옵션] [파일]

cat은 파일의 내용을 연결하거나 조회한다. concatenate 혹은 catenate에서 cat이 유래되었다. cat에서는 여러 옵션을 사용할 수 있지만, 파일 내용과 함께 줄 번호를 출력하는 -n을 주로 사용한다. 파일 부분에 파일 이름을 입력하면 파일 내용이 화면에 출력된다. 두 개 이상의 파일 이름을 입력하면 각 파일의 내용이 연결되어 화면에 출력된다.

exit exit [종료 코드]

exit은 현재 실행 중인 셸을 종료한다.

nano nano [파일]

nano는 텍스트 편집기이다. nano로 파일을 생성하거나 파일을 열어서 수정할 수 있다. 작성자 본인은 nano 보다는 vim을 사용하는데, 둘 다 잘 사용하지는 못한다. 그래도 vim을 사용하는 비율이 더 높아서 굳이 이 내용을 깊게 읽어보진 않았다.