첫 날에는 Ubuntu 개념에 대한 교육 학습이 이루어졌다. 이 과정의 Overview 를 보고 보고싶다면 여기를 클릭

Linux


  • OS : Operating System
  • 사용자가 컴퓨터를 쉽게 다룰 수 있도록 해주는 인터페이스로, 하드웨어를 관리한다.
  • 처리능력의 향상, 응답시간의 초소화, 사용 가능도의 향상, 신뢰도의 향상에 대한 이야기를 해 주셨다.
  • OS의 기능에 대해 … (생략)

OS에 대한 내용을 정리하고

  • Linux : Linux Is Not UniX의 줄임말.
  • 토르발즈가 개발한 커널에 컴파일러, 쉘, 기타 응용 프로그램을 조합. 현재도 개발이 활발하고, Linux 기반의 많은 배포판이 존재한다. 이 중, Ubuntu와 Redhat, Suse, Debian 등이 존재한다.

이 때, 정확한 개념을 정립할 수 있었다.
Linux 기반의 배포판중 하나인 Ubuntu.
이걸 몰랐다면 Ubuntu는 ‘Linux와 유사한 존재’ 정도라고 생각했을 것이다.

  • Kernel : 운영체제의 핵심으로 다른 부분에 기본적 서비스 제공
  • Kernel은 부팅될 때 메모리로 로딩되며, 하드웨어와 다양한 프로세스와 메모리 등을 관리하며 시스템을 제어하는 역할을 한다.
    기본 커널을 사용자가 직접 최신 커널로 업그레이드를 할 수 있다.
  • : 운영체제 상에서 다양한 운영체제 기능과 서비스를 구현하는 인터페이스 제공 프로그램
  • 사용자가 커널, 하드웨어와 커뮤니케이션을 돕는다.
    명령어를 해석하여 커널로 보내주는 역할을 수행하는 것이 ‘쉘’의 역할이다.

여기까지의 내용을 읽는다면 드디어 우리가 사용하는 우분투의 기본적인 원리을 이해할 수 있게 된다.

유저 을 통해 명령을 전달한다.
은 받은 명령을 커널 에 전달한다.
커널 은 받은 명령어를 통해 하드웨어를 사용한다.

간단하게 생각하면, 유저 -> 쉘 -> 커널 의 순서대로 명령이 전달된다는 것이다.
그러므로 우리가 쉘을 사용하는 이유도, 이 커널이 무엇인지에 대해서도 자세히 알 수 있게 되었다.

다음으로는 단축키에 대해서 배웠다.

단축기 설명
Ctrl + Alt + T 터미널 실행
Ctrl + Shift + C 복사하기
Ctrl + Shift + V 붙여넣기
Ctrl + Shift + T 새로운 터미널 탭 생성
Ctrl + PageUp/PageDown 이전/다음 터미널 탭으로 이동
Ctrl + C 현재 실행 중인 프로그램 중지
Tab 자동 완성

단축키는 위와 같고, 더 있수 수도 있지만 우리가 가장 많이 사용하는 단축키들을 모아놓은 것 같다.
이 중에서 터미널 실행새로운 터미널 탭 생성 의 차이점에 대해 잘 모르는 사람들이 있다.
‘굳이 새로운 터미널 탭 생성’을 사용해야 하는 이유가 있나?

이는 일 분리를 위해서 반드시 구분을 지어놔야 한다. Tmux를 사용하지 않는 사람들에게는 특히 더 필요한데, 필자를 포함한 개발자들은 앞으로 ROS를 구동하기 위해선 최소 세 개 이상의 터미널 을 이용해야 할 것이다. (별도의 Launch File을 제작하지 않는 한) 이 때, 자신이 원격으로 접속한 것과 실행한 것, 하고 있는 프로젝트 등 다양하게 구분해야 할 때에는 결국 필요하게 될 것이다.

어렵다면, 그냥 납득해라. “아하! 많이 필요하구나.” 많은 작업이 필요하므로, 같은 작업끼리는 동일 터미널 내 왔다갔다 하는 것이 정신 사나움을 해결하는 데 도움이 된다.

Ubuntu


우분투에 관해서는 위에서도 살짝 언급을 했다.
어원은 남아프리카 어느 부족의 언어로, “네가 있으니 나도 있다.” 라는 의미를 담고 있다.
자유로운 소프트웨어로 재수정 및 재배포가 가능하다.

Ubuntu는 2년 단위로 LTS (Long Term Support)버전이 출시되며, LTS 버전은 짝수 년 4월마다 배포되며, 최대 5년까지 업데이트 및 지원을 해준다.

LTS가 아닌 정식 버전 은 6개월마다 배포되며, 배포일 기준 9개월까지 업데이트 및 지원을 해준다.

그리고 ROS는 LTS 버전만 지원 한다. 이건 엄청나게 중요한 내용이다.

(본 필자가 라즈베리파이 5 를 구매하고 22.04 LTS버전을 지원하지 않아 Docker 환경을 조성해서 활용하고 있다.)

이번에는 최상위 디렉토리와 홈 디렉토리에 대해 이야기를 해보고자 한다.
여러분들이 우분투를 사용해 봤다면, 처음 경험 시 보이는 ~ 에 대해 의구심을 가져봤을 수도 있다.

자신의 이름: ~$ <명령어 입력할 공간>

여기서 ~는 홈 디렉토리 를 나타낸다. (홈 디렉토리)
그리고, /는 최상위 디렉토리 를 나타낸다고 생각하면 편하다.

앞으로 우리들이 터미널에서 매우 자주 이용할 cd (Change Directory)에서는 아래와 같은 규칙을 담고 있다.



$ cd <경로> # 상대 경로를 의미, 현 위치에서 이동하기.  
$ cd /<경로> # /를 기준으로 한 경로. 즉, 최상위 디렉토리를 기준으로 함.  
$ cd ~/<경로> # ~를 기준으로 한 경로. 즉, 홈 디렉토리를 기준으로 함.  

그럼, 최상위 디렉토리 는 뭐고, 홈 디렉토리 는 뭘까?

  • 최상위 디렉토리 : 시스템 관리자, 기본 명령어, 리눅스 커널, 환경 설정 등에 관련된 중요 파일 매체.
    절대로 삭제해서는 안된다. 복구할 수 없다는 점을 반드시 명심하고 있어야 한다.

  • 홈 디렉토리 : 우리들이 설치하고 기본으로 설치되는 내용으로, 삭제하더라도 어디선가 잘 주워서 설치하면 큰 문제가 없다.

마지막으로 Ubuntu에서 사용하는 기본 명령어들에 대해 정리했다.



$ ls <<Directory>> # 특정 위치 파일 조회, 위치 입력하지 않을 경우 현 위치에서 조회.  
                   # 파일의 형태에 따라 색이 매겨짐. 유사 명령어로는 dir <<Directory>>가 있음.  

$ chmod <<options>> <<FILE_NAME>> # 파일 권한 수정  

$ cd <Change Directory> # 특정 폴더로 이동할 때 사용하는 명령어.  

$ rm <<option>> <<FILE_NAME>> # 파일을 삭제할 때 사용함. 폴더는 보통 삭제할 수 없는데, Option에 -r을 붙이면 가능함.  

$ mkdir <FILE_NAME> # 폴더를 생성하는 명령어.  

$ pwd # 현재 경로를 표현해주는 명령어.  

$ cp <<SOURCE_FILE>> <<DESTINATION_FILE>> # 파일 또는 폴더를 복사하는 명령어.  

$ mv <<SOURCE_FILE>> <<DESTINATION_FILE>> # 파일 또는 폴더를 이동하는 명령어. (cp보다 mv를 추천함.)  

NANO 편집기VI 편집기, VIM 편집기 에 대한 이야기를 해 주셨다.
그러나, 이 내용은 본인의 취향에 따라 바뀔수도 있으니 생략하도록 하겠다.
세 편집기는 각자 검색해서 찾아보면서 맘에 드는 편집기를 사용하면 된다.
(필자는 Nano 편집기를 제일 좋아한다.)

Vscode


우분투 환경에서 Coding을 진행하다보면, Vscode는 진짜 친숙한 친구가 될 수 있다.
사실, 지금도 md 파일을 작성해 Github Blog에 Posting 하는 과정 내에서도 Vscode를 이용하고 있다.

Vscode에서 제공해주는 여러 Extension들을 사용하면 코딩할때 매우 큰 도움이 된다.
사실, 우리는 처음부터 강사님께서 추천해주신 Extension들을 사용하고 있어서, 그렇게 효율적인지 모르겠다.
만약 나중에 다 밀고 새롭게 사용하는 순간이 온다면 차이점을 잘 리뷰해 주겠다.

Python3


파이썬은 상당히 중요한 수업이다. 네 시간 정도에 걸쳐 수업을 진행하셨는데, 기초 문법 을 한 시간씩 두 번 진행하셨다.
그리고, 가장 중요한 Class, Def에 대해서는 두 시간에 걸쳐 수업을 진행하셨다.

우리에게 강조하신 건, Launch File을 구성하게 될 우리에게 가장 중요한 OOP 5대 원칙과, 상속, 다형성, 캡슐화, 추상화에 대해서 배웠다.

Python Class에 대한 강의는 추후에 다루도록 하겠다.
(본 필자도 아직은 잘 못하기 떄문에..)

이렇게, 우리는 첫날 ROS를 위한 초석을 다졌다.
Python을 복습할 때, 우리가 백준에서 공부했던 기억이 새록새록 떠올라 (슬펐다.) 감회가 새로웠다.