리눅스 (feat.터미널 명령어)

리눅스가 대체 뭐야????

이야기는 많이 들어봤는데..리눅스가 그래서 무엇인지 몰랐다.
macOS, windows와 같은 운영체제라는 것은 알고 있었지만 그래서 이것이 개발자에게 왜 필요한 것인지, 왜 언급이 되는 것인지는 알지 못했다.

그래서 따로 찾아보며 하나씩 정리해보기로 했다.



👑 리눅스란?

Linux는 오픈소스 운영체제이다.

운영체제?

OS라고도 부르는 운영체제는, 시스템의 하드웨어와 리소스를 관리하는 소프트웨어이다.
앱과 하드웨어 사이에서 모든 소프트웨어와 작업을 수행하는 물리적 리소스를 연결한다.
예를들어, 자동차 엔진을 변속기와 차축,바퀴에 연결해 엔진이 차를 움직일 수 있도록 해주는 것이다.

흠.... 어떤 과정을 거쳐서 하드웨어를 조작하는 걸까?


쉘 (Shell)

사용자와 운영체제간에 대화를 가능하게 해주는 명령어 해석기
우리가 명령어를 입력하면 컴퓨터 내부에서는 Shell이 이것을 받아들이고 명령어를 해석한다.

조금 더 자세한 과정은 다음과 같다.

1. 사용자가 명령어 입력
2. 쉘이 명령어를 해석
3. 커널을 통해 명령을 수행 후 결과 전송
4. 쉘이 전송결과를 해석
5. 사용자가 해석된 결과를 확인

커널 (Kernel)

운영체제의 핵심으로, 소프트웨어와 하드웨어간의 커뮤니케이션을 관리하는 프로그램이다.

  • 소프트웨어에서 입력받은 요청을 컴퓨터의 하드웨어(CPU, 메모리 등)가 처리할 수 있도록 요청을 변환한다.
  • 하드웨어를 관리하고 시스템 자원을 분배/제어한다.

쉘에서 사용자가 입력한 명령어를 해석하였다면, 명령을 수행하기 위해 하드웨어를 조작해야 한다.
이때 커널을 사용한다. 즉, 해석한 명령어를 바탕으로 커널을 통해 하드웨어를 조작하는 것이다.



💎 리눅스 왜 써?

우선 리눅스를 사용한다는 것의 의미부터 짚고 넘어가자.

나는 맥북 유저인데, macOS를 버리고 Linux를 새로 깔아서 써야 하는 거야?

아니었다. (다행..) 개발을 하면서 리눅스 관련작업을 한다는 것 뿐이다.

즉, 개발자가 개발한 프로그램이 배포되고 동작하게 되는 환경이 Linux OS가 설치된 서버이다.


1. 개발자 친화적

윈도우,맥OS,android등은 사용자 엔드유저를 위해 만든 운영체제이다.
따라서 사용만 하면 되도록 초점을 맞추어 만들어져 있다.
일반 사용자는 배우기 쉽고 사용하기 편리하다는 장점이 있다.

하지만 프로그래머들에게는 제한적인 부분들이 많다.
사용자가 쉽게 사용할 수 있도록 GUI (Graphic User Interface)로 다 구성해두었는데, 실제로 개발자들에게는 CLI(Commaind Line Interface)로 할 수 있는 작업이 훨씬 많다.

더 쉽게 비유하자면, 다른 OS들은 바로 사용할 수 있는 완제품이라면, 리눅스는 직접 만져보고 개조해 원하는 대로 만들어낼 수 있는 조립식 제품이라고 할 수 있다.


2. 멀티 스레드

자바스크립트는 싱글 스레드 언어이지만, 리눅스는 멀티스레드이기 때문에 동시에 여러가지 일을 처리할 수 있다.


3. 오픈소스 운영체제

설계된 코드도 마음껏 들여다 볼 수 있고 개조도 자유롭게 할 수 있다.
따라서 여러 버전들이 자유롭게 만들어져있다.

흠... 좋다는 건 알겠는데, 막연하다.
그래서 개발과는 어떤 직접적인 연관이 있다는 걸까?

윈도우는 유료이고,맥OS맥에서만 사용할 수 있다.
리눅스는 무료에 마음대로 개조해 사용할 수 있는데, 예를 들어 안드로이드 역시 리눅스를 모바일환경에서 사용할 수 있도록 개조한 버전이다.


드디어 알았다... 우분투!!

리눅스의 가장 대표적인 배포 버전이 우분투 이다.



💎 어떻게 사용하지?

리눅스를 직접깔아서 사용할 수 없다면, 다음과 같은 방법들이 있다.
1. 가상머신 소프트웨어

  • virtual box
  1. 온라인 IDE/터미널
  • goormide: 구름 ide서버에 가상 우분투 환경이 만들어지고 브라우저에 바로 적용할 수 있다.
  1. 윈도우 10의 WSL
  • 윈도우에서 우분투를 바로 사용할 수 있다.

왜 맥을 개발자들이 선호할까

맥OS가 리눅스와 호환성이 좋기 때문이다.
맥OS는 유닉스 운영체제에 기반한 OS이기 때문에 명령어도 같은 유닉스 계열인 리눅스의 명령어와 동일하다.



👑 터미널 명령어

앞서 개발한 프로그램이 배포되고 동작하는 환경이 Linux OS 서버라고 했다.
이 Linux 서버가 원하는 동작을 하도록 하려면 명령을 내려야 하는데, 이 명령어를 전달하는 수단이 바로 terminal이다.

zsh

z shell은 bash shell보다 각종 플러그인을 많이 지원하며, macOS기본 터미널과 리눅스를 대체한다.

리눅스의 기본 구조와 명령어에 대해 알아보자.



💎 파일 구조 FHS

FHS : FIlesystem Hierarchy Standard
리눅스의 기본 파일구조는 트리 구조이다.

  1. root (/): 루트폴더
    • 최상위 경로로, /로 접근할 수 있다.
  2. /home (~): 홈 디렉토리
    • home directory 이외의 다른 디렉토리들은 주로 system directory라고 한다.
  3. /bin & /sbin: OS의 최소한의 구동을 위해 필요한 프로그램이 들어있는 폴더
    • Binary의 약자
    • cat, chmod, chown, cp, date, echo, kill, ln, ls, mkdir, etx와 같은 기초적인 프로그램들을 포함한다.
    • sbin 폴더는 bin과 유사하지만 루트유저 전용 프로그램을 포함한다.
  4. /usr: 각 유저 이름에 해당하는 폴더이름 존재
    • 각 폴더 마다 bin,shared같이 각 유저들이 사용할 수 있는 폴더가 생성되어 있다.
    • 각각 유저별로 다른 파티션으로 존재하기 때문에 다른 사용자들이 사용할 수 있도록 만들 수는 있지만 수정할 수는 없다.


💎 경로 Path

  • /: root directory
  • ~ home directory
  • 절대경로(Absolute path): 경로를 표현하는 방식이 root 디렉토리부터 시작한다.완전한 경로.
    - 예) /home/eun/bin
  • 상대경로(Relative path): 현재 자신의 위치를 기반으로 움직이는 경로
    - .: 현재경로
    • ..: 상위 경로

환경변수

OS도 프로그램이기 때문에 동작하기 위해 변수가 필요하다.

  • env: 이 명령어로 linux의 환경변수를 확인할 수 있다.

pwd

print working directory
현재 나의 위치를 절대경로로 알려준다.

cd

change directory

mkdir

make directory

touch

파일 생성, 날짜 정보 변경

rm

파일 삭제

cp

파일 복사

mv

파일 이동

cat

concatenate
터미널에 파일 내용 출력

chmod

change mode
파일/디렉토리 권한 설정

vi (파일명, 확장자)

파일을 편집할 수 있는 에디어 활성화



Reference

좋은 웹페이지 즐겨찾기