TIL 16 | Linux & Terminal

임종성·2021년 7월 14일
0

TIL

목록 보기
6/22
post-thumbnail

개발에 대해 공부하면서, 우리가 사용하게 되는 여러가지 용어들에 대해 접하게 된다. 운영체제, 프로그래밍 언어, 프레임워크, 라이브러리, 터미널, 데이터베이스 등등.. Linux나 Django, MySQL 등을 공부하게 되지만 단순히 우리가 사용하기 때문에 배우는 것보다 이 Tool의 개념이 무엇이고, 왜 배우는 것이고, 어떻게 다른 개념과 접목되는지, 개발에 대한 전체적인 틀을 명확히 이해하는 것이 중요한 것 같다.

운영체제

운영체제는 Operation System의 약자로, 사용자가 컴퓨터를 좀 더 쉽게 다룰 수 있게 해주는 "인터페이스" 개념이다. 하드웨어와 소프트웨어를 모두 관리하는 소프트웨어 개념이라고 볼 수 있고, 일반적으로 컴퓨터에서 사용하면서 실행한 모든 프로그램은 운영체제에서 관리하고 제어한다.

대표적인 운영체제는 Windows, Linux, Mac OSX, iOS 등이 있다.

운영체제를 사용하는 가장 주된 목적은 컴퓨터의 하드웨어를 관리하는 것이다. 컴퓨터에는 수 많은 하드웨어가 존재한다. CPU, 메모리, 디스크, 키보드, 마우스, 모니터, 네트워크 등이 있으며 이를 잘 관리해주어야 컴퓨터를 효율적으로 사용할 수 있다. 운영체제의 성능이 좋을수록 컴퓨터의 성능 역시 좋아진다고 할 수 있다.

운영체제는 사용자에게 편의를 제공하는 목적도 가지고 있다. 운영체제가 없다면 위에서 말한 하드웨어에 관한 모든 관리를 사용자가 해야한다는 점과 같이 컴퓨터를 사용하는데 매우 불편함을 겪을 것이다. 하지만 현재 많은 발전을 거쳐온 운영체제가 설치된 컴퓨터는 사용하기에 매우 편리하다는 것을 느낄 수 있다. 대표적으로 스마트폰이 있다. 스마트폰 역시 컴퓨터의 일종이고 운영체제가 설치되어 있다. 그리고 스마트폰은 남녀노소 누구나 할 것 없이 사용법을 빠르게 익힐 수 있다.

정리하면 운영체제는 컴퓨터의 성능을 높이고(performance), 사용자에게 편의성 제공(Convenience)을 목적으로 하는 컴퓨터 하드웨어 관리하는 프로그램이다.

Linux

Linux는 리누스 토발즈(Linus Benedict Torvalds, 69년생)가 개발한 Unix 기반 운영체제로, 오픈소스 기반 운영체제이며 누구나 코드를 볼 수 있다.

Linux는 IT 산업 전반에서 사용하는 운영체제로, 휴대폰, 클라우드 서버, 네트워크 장비, 전기자동차 및 IoT 디바이스까지 리눅스를 채택하고 있다. 게다가 안정적이고, 오픈소스 기반으로 소스코드를 비교적 쉽게 바꿀 수 있기에 유연하고, 무료이기에 활성화가 원활하다. 그렇기에 직접적으로 서버를 개발, 구축하는 백엔드 개발자에게는 특히 리눅스를 공부하는 것이 중요하다.

Linux File System Hierarchy(FHS)

Linux의 파일 구조는 다음과 같은 Tree 형태로 되어있다.

  • root directory(/) //cd /
    FHS의 가장 위에는 root directory(/)가 존재해 FHS의 뿌리 역할을 한다. 각 Directory는 Windows의 Folder와 동일한 개념으로, 디렉토리마다 하위 디렉토리를 가질 수 있고 /로 구분한다.

  • /home(~) // cd ~
    User의 공간으로 가장 빈번하게 사용되는 경로이다. Linux의 운영과 관리에 필요한 파일들이 존재하는 곳으로, ~로 접근할 수 있다.

  • 이외에 /bin, /usr, /boot, /dev 등 다양한 디렉토리가 존재한다.

Configs

Linux는 설정을 주로 파일, 즉 Config file을 통해 한다. 다양한 설정 파일이 존재하고, 그 중 중요한 것은 Shell 설정 파일이다. 각 Shell은 고유의 설정 파일을 가지고 있는데, Bash는 .bashrc를 사용하고 zsh는 .zshrc를 사용한다.

Shell 설정 파일을 비롯한 많은 설정 파일이 대부분 Home 디렉토리에 존재한다. .bashrc, .zshrc와 같이 .으로 시작하는 디렉토리나 파일은 숨겨진 hidden file로서 자동으로 숨겨져 ls 만으로 보이지 않고 ls -al을 통해 볼 수 있다. 이런 파일들을 dot file 이라고 한다.

Useful Command

  • cd (change directory)
    디렉토리 이동. cd /, cd ~, cd ., ...
  • ls (list segment)
    디렉토리 내 파일 출력. ls, ls -al, ..
  • pwd (print working directory)
    현재 디렉토리 경로 출력.
  • mkdir/rmdir (make/remove directory)
    디렉토리 생성/제거
  • chmod (change mode)
    파일/디렉토리 권한 설정

Piping

일반적 명령어가 아닌 두 개의 명령어를 이어주는 역할을 한다.
history는 지금까지 입력한 명령어를 출력하는데, grep과 함께 사용하면 원하는 출력값을 필터링 할 수 있다.

history | grep ls

Terminal

터미널이란 컴퓨터와 사용자간의 서로 소통시켜주는 인터페이스(번역기와 같은)라고 할 수 있다. 인터페이스란 텍스트 기반과 그래픽 기반(GUI) 두가지를 기반을 포함하는 용어이지만 리눅스 터미널은 텍스트 기반을 말한다.

대부분의 백엔드 시스템은 Linux 기반 서버에서 운영되기 때문에, 백엔드 입문자들은 반드시 명령어 인터페이스(CLI, Command Line Interface)에 익숙해져야 한다. 물론 개발할 때 GUI(Graphic User Interface)나 여러가지 유용한 Tool을 지원받고 작업할 수 있다. 그러나 백엔드 시스템에서 터미널 상에서 작업을 하며 오류를 해결하는 경우가 많기에 CLI와 터미널 환경에 익숙해지는 것이 좋다.

Shell

Unix 계열의 운영체제는 보통 텍스트 모드의 터미널 화면을 통해 명령행에 명령어를 타이핑하여 사용한다. 이 명령어를 해석하는 프로그램이 쉘(Shell)이다. 쉘은 사용자의 명령어를 운영체제에 전달하여 실행물을 유저에게 전달하는 프로그램이라고 생각할 수 있다.

Terminal과 Shell은 다른 개념이다. Terminal은 Shell을 실행시키는 프로그램이고, Terminal을 통해 Bash, Zshell 등 다양한 쉘을 실행할 수 있다.

Package Manager

터미널을 개발자들이 자주 사용하면서 터미널에서만 사용가능한 Tool들이 많이 나오게 되었다. 이러한 Tool을 어떻게 터미널에 설치하고 관리할 수 있을까? 이런 환경설정 문제는 과거부터 굉장히 불편한 과정을 거치고 시간이 오래걸렸기 때문에 Package Manager 라는 프로그램이 등장하게 되었다.

Mac 에서는 homebrew 라는 package manager를 사용한다. homebrew를 다운 받은 후 원하는 package를 설치하는 것은 다음과 같다.

brew install name

name은 설치하고자 하는 package의 이름으로, git, vim, zsh등 원하는 package를 설치할 수 있다.

Shell Plugin

원하는 Shell을 설치하기 위해서는 homebrew package manager를 설치 후 brew install zsh 라는 명령어를 실행시켜 설치할 수 있다. zshell의 기본 기능도 많지만 plug-in을 통해 글 자동완성, syntax-highlighting 등 다양한 기능을 사용할 수 있다.

예를 들어 Syntax Highlight 기능을 추가하고 싶다면

  • brew install zsh syntax-highlighting 을 실행해 package를 설치하고

  • vi ~/.zshrc 를 입력해 zshell 설정 파일에 들어간다.

  • 설정파일에서 i를 눌러 Insert 모드로 변경 후 source /usr/local/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh를 입력해 plugin을 적용하고 esc :wq로 설정파일을 저장 후 나온다.

  • 그 후 source ~/.zshrc를 통해 리로드 하거나 터미널을 재시동하면 plugin이 적용되는 모습을 볼 수 있다.

  • 위와 같이 원하는 pluging을 설치한 후, .zshrc 설정파일에 저장하여 plugin을 적용하는 것으로 원하는 plugin을 사용할 수 있다.

.

profile
어디를 가든 마음을 다해 가자

0개의 댓글