본문 바로가기

Linux

Linux 기초 - 기본개념 및 directory, CLI

728x90
반응형

1) Linux

    1-1) Linux 구조
    1-2) Linux 특징
    1-3) Ubuntu

    1-4) directory 구조
    1-5) CLI

2) CLI 실습

 

 

 

 

1) Linux

1-1) Linux 구조

OS 종류는 크게 네 가지로 "Windows", "MacOS", "Linux", "Unix"가 있다!

(Mobile OS의 경우, Android와 iOS가 있다!)

 

 

하드웨어 : 눈으로 보고 만질 수 있는 것    →    ex) 마우스, 키보드 등
- 소프트웨어 : 사용자가 직접 못 보고 만질 수 없는 것    →    ex) OS, zoom, VSCode, LOL(게임) 등의 프로그램

 

하드웨어를 조작하는 소프트웨어를 "OS"라고 한다!
즉, 우리가 많이 사용하는 스마트폰, 데스크탑(PC)의 경우 하드웨어만 존재한다면

컴퓨터 전원을 켠 뒤 마우스를 클릭해서 폴더를 열고 파일을 실행하고
게임을 실행할수 있는 이유는 바로 이러한 OS 덕분이다!!
따라서 컴퓨터에서 하드웨어를 조작하거나 혹은 마우스나 키보드 같은 장치를 읽을수 있게 만들며,

화면에 출력할수 있으면 그건 바로 OS이다!!



리누즈 토발즈에 의해 개발된 것이 Linux(OS)로 오픈 소스에 해당하며 오픈 소스 개발에 가장 유명한 표본이다!!
Linux는 세계적으로 가장 큰 오픈 소스이며 가장 많은 개발자들이 참여하여 업그레이드를 진행 중인 OS이다!!
Linux는 Unix 기반으로 만들어졌는데 참고로 Unix는 유료이며, 굉장히 강력한 OS이다!!

응용 프로그램은 일종의 프로세스라 할 수 있다.
카카오톡, chrome 등과 같이 컴퓨터에서의 실행 프로그램을 응용 프로그램이라 한다.(응용 프로그램 === 실행 프로그램)
이러한 응용 프로그램에서 사용자(컴퓨터를 사용하는 사람들)가 명령을 내리면 "Shell"은 해당 명령을 해석한다!!

- Shell은 명령 해석기라고도 함!

해석된 사용자의 입력 명령어를 "Kernel"에 전달함!
이후 Kernel이 해당 명령어를 다시 하드웨어에 보내줌으로써 실행이 된다!
>> 실행 흐름 : 응용 프로그램    →    Shell    →    Kernel(Linux에서 핵심이라 말하는 부분)    →    하드웨어

응용 프로그램 실행 흐름

 

 

1-2) Linux 특징

Linux는 Unix 운영체제(OS : Operating System)를 기반으로 하고 있다!
Linux는 뛰어난 안정성과 보안성, 높은 신뢰성과 성능이 특징이다!

Linux의 특징
1. 시스템 자원을 효율적으로 관리 및 사용 가능하다!
2. 멀티유저 및 멀티 태스킹을 지원 가능하다!

  • 멀티유저 : 여러 사용자가 동시에 하나의 시스템에 접근 가능하다는 의미
  • 멀티 태스킹 : 여러 개의 작업을 동시에 실행하고, 교대로 컴퓨터의 자원을 사용하는 기능

 

Linux는 기본적으로 CLI, GUI를 모두 지원하고 있다!
Linux는 앞으로 내가 원격 접속 용도로 많이 사용할 예정!
Linux는 서버 컴퓨터 용으로 사용할 것이기 때문에 용량이 큰 GUI 환경을 사용할 필요가 없다!
Linux는 낮은 사양으로 서버를 돌릴 수 있다는 장점이 있다. 즉, 적은 비용으로 서버를 돌릴 수 있기 때문에 개발자 입장에서 Linux를 굉장히 좋아할 수밖에 없다!!

 

 

 

1-3) Ubuntu

 

Linux라는 큰 카테고리 안에 "우분투(Ubuntu)"라는 제품군이 있다고 보면 된다!
Linux는 오픈 소스이기에 우분투(Ubuntu)를 비롯하여 CentOS, RedHat 등 리눅스 계열의 OS가 굉장히 많다!

 


우분투(Ubuntu) 설치
Windows 사용자의 경우, Windows terminal을 사전에 설치할 것을 권장함!
Windows 안에 Linux를 설치하는 것이기 때문에 WSL 설치가 필요한데

여기서 WSL의 경우, VM(Virtual Machine = 가상머신)이 필요하다!!

 

 

WSL

WSL은 Windows Subsystem for Linux 의 약자로
간단히 말해 Windows에서 Linux 명령어 및 작업을 도와주는 친절한 Tool로
Microsoft 사가 개발한 시스템이다.
실제로 예전에는 Windows에서 Linux를 실행하려면 가상머신(Virtual Machine, 일명 VM)을

설치하여, 컴퓨터 안에서 컴퓨터를 돌린다라는 개념으로
한 컴퓨터의 자원을 둘로 나눠 2개의 OS(Windows, Linux)를 돌려야 했다!

 

Virtual Machine(VM)

 

이 경우, 단점은 컴퓨터 사양이 높을지언정 그 성능이 절반으로 뚝 떨어진다는 사실이다.

즉, 컴퓨터 자원을 효과적으로 사용할 수 없는 치명적인 단점이 존재했다!
그래서 Microsoft 사는 WSL이라는 제품을 만들어 전보다 개발환경을 쉽고 간단하게 구축할 수 있게 지원하였다!
그럼에도 초기에는 WSL 또한 문제가 있었지만 지금은 어느 정도 보완한 상태이다.

 

WSL의 초기 아키텍처는 Windows와 Linux를 함께 돌리기에 무언가 중복되는 느낌이 있었다면
WSL2 아키텍처의 경우, Windows와 Linux를 각각 따로 돌림으로써 두 OS가 충돌하는 일은 적어졌다!
향후 우리는 WSL2를 통해 Docker도 설치하고, 사용해 볼 일이 있을지 모르겠지만 Windows 환경에서는
Docker를 설치할 시 WSL2는 선택이 아닌 필수이다!!
요컨대 결론은 Windows에서도 Linux를 쓸 수 있으며, 이를 위해 Linux를 쉽게 설치/사용할 수 있다는 사실이다!


MacOS 또한 유닉스 기반의 OS라 개발자들이 사용하길 좋아했다!
OS를 하나의 컴퓨터에 2개 설치한다는 것은 해당 컴퓨터의 자원을 쪼개서 사용한다는 의미이다!
>> 이렇게 되면 컴퓨터 자원을 절반으로 줄이기 때문에 전보다 성능이 떨어지게 된다!!

 

 

 

1-4) directory 구조

 

1-4-1) Root

최상위 directory(혹은 root directory) : 더 이상 이전으로 갈 수 없는, 즉 상위 directory가 없는 directory

최상위 directory는 "/"로 표현함!!
cd / : 이렇게 입력하면 root directory로 갈 수 있음!!

 

+) Desktop으로 한 번에 경로 설정하여 이동하는 방법 : cd ~/Desktop



1-4-2) /bin
기본적인 명령어가 저장된 directory로 Linux 시스템 사용에 있어서 가장 기본적인 명령어들이 저장되어 있는 곳
ls, cd ...
ex) cat, chmod, chown, cp, echo, kill, ls, mkdir, mv, ps, pwd, rm, su, vi, ...

 


1-4-3) /boot
Linux boot loader가 존재하는 directory

 


1-4-4) /dev
각종 디바이스 파일들이 저장되어 있는 공간
"블록 디바이스"와 "캐릭터 디바이스"로 구성됨

블록 디바이스
- HDD와 같은 주변 장치를 말함
- 데이터를 블록 단위로 읽고 쓰여지며 랜덤하게 엑세스함!

캐릭터 디바이스
- 입출력이 한 바이트 단위로 이루어지며 데이터가 순차적으로 읽고 쓰여짐!

 

 

1-4-5) /etc

시스템의 거의 모든 설정 파일(기본적으로 대부분 text 파일임!!)이 존재하는 directory

/etc/sysconfig(시스템 제어판용 설정파일)
/etc/password(사용자 관리 설정파일)

/etc/ssh : SSH 서비스 관련 내용이 담겨있는 directory
/etc/hosts : 도메인의 IP를 찾을 때 컴퓨터가 맨 처음 조사하는 파일임
- Windows는 C:\windows\System32\Driver\etc\hosts

 

/etc/skel : 계정 사용자 생성 시의 초기화 파일이 저장된 directory(adduser)에서 사용함

 


1-4-6) /home
사용자의 home directory, adduser 명령어로 새로운 사용자를 생성하면

대부분 사용자의 id와 동일한 이름의 directory가 자동으로 생성됨!

 

계정: 설치 시 적었던 이름


Ubuntu 설치 시 적었던 이름이 계정이다!
계정명을 입력해줘야 함!

MacOS의 경우, Windows처럼 home directory에서 작업을 하는 것이 아니라
"cd ~"로 이동한 후 여기서 pwd 명령을 통해 찾은 "/Users/계정명(ex. hwangsangbeom)"에 들어가
파일 작업을 진행함!!

 


1-4-7) /lib
커널 모듈과 라이브러리 파일

 


1-4-8) /media
DVD, USB 마운트

 


1-4-9) /mnt

/media directory와 비슷한 용도
WSL2를 사용하는 사람은 Window 파일이 담겨져있는 공간

 


1-4-10) /var
애플리케이션(실행 파일들 : 컴퓨터가 실행되는 것들) 실행 중에 데이터를 일시적으로 저장하거나 로그 파일들을 저장하는 directory
/var/log  →   여기 directory 안에 넣어주면 됨!!

 

 


명령어
ls : 현재 위치의 파일 목록을 조회하는 명령어

[옵션]

ls -[옵션내용]

 

  • l : 파일들의 상세 정보를 나타냄!
  • a : 숨김 파일을 표시함!
$ ls -a


Linux에서 "."은 숨김 파일이라는 뜻

$ ls -al

 


cd : change directory의 약자로 directory를 이동할 때 쓰는 명령어

형식 - cd 이동할 디렉토리

cd /
cd ./

 

 

mkdir

형식 - mkdir [경로]

cd /home
cd /sangbeom
mkdir workspace

mkdir /home/sangbeom/workspace

 


vi : 에디터 열기(파일 열기)
* 모드

  • 명령 모드
  • 입력 모드
  • 입력 모드에 들어가는 방법: i
  • 입력 모드에서 명령 모드로 돌아가는 방법 : esc 버튼 클릭

종료 옵션 : 기본적으로 ":"을 붙이고 시작해야 함!

  • :q => 저장하지 않고 그냥 종료하겠다는 의미
  • :q! => 강제종료
  • :w => 그냥 저장
  • :w! => 강제저장
  • :wq! => 저장하고 종료하는데 이를 강제로 진행함!!

 

 

mv

파일을 옮길 때는 아래와 같이 "mv"라는 명령어로 시작해야 하며, 이어서 뒤에 "[위치/현재파일] [이동할 위치/파일명]"이 붙여야 함!!

 

$ mv [위치/현재파일] [이동할 위치/파일명]

 

cd ~
vi hello.txt

cd ..
/home

mv ./hello.txt

mkdir sample
mv /home/sangbeom/hello.txt /home/sangbeom/sample/hello.txt

$ mv ./hello.txt ./hello2.txt => 이렇게 기존 파일명(hello.txt)을 새로운 파일명(hello2.txt)으로 변경할 때도 mv 명령어를 사용하여 변경함!!

 


cp : 기존 파일을 복사해서 새로운 파일을 생성해줌!!

$ cp [위치/현재파일] [이동할 위치/파일명]

 


cat : 파일 이름을 인자로 받음!!

$ cat 파일명
# result : hello world!(파일 안의 내용이 출력됨. 마치 console.log 같음!!)

 

 

pwd : 현재 directory를 출력해 줌

 

 

who, whoami : 로그인한 정보를 보여 줌

 

 

env

"환경변수"라고 함!

지금 사용하고 있는 Linux 컴퓨터에서 사용하고 있는 변수를 출력해 줌

echo $HOME
# 해당변수가 담고있던 값이 출력됨!

 

 

grep

$ grep [찾을 단어] [파일위치]
$ pwd
# Users/hwangsangbeom/Desktop/blockchain8
# hello.txt

$ grep host ./hello.txt

 


| (pipe line)
명령어를 쓰면 출력

env -> PATH
>> env 결과를 가지고 "PATH"에 해당하는 내용들만 보고 싶다는 의미!!

env | grep MAIL >> env 중 MAIL에 해당하는 내용만 보여주는 명령

 


ps(Process Status) : 현재 프로세스의 상태를 보여주는 명령어
< process option >

  • "-e" : 현재 수행하고 있는 프로세스의 정보를 보여줌
  • "-f" : 프로세스 ID와 모 프로세스 ID를 포함한 전체 리스트를 보여줌

 

프로세스를 실행할 때마다 고유번호인 "PID"가 생성됨!!

대부분 많이 쓰이는 것이 아래의 명령어임!

$ ps -ef | grep node

 

 

kill

kill -9 [프로세스 아이디(= PID)]

 


code .
>> 해당 경로 상에 있는 파일에 대해 VSCode를 열어줌!!

 

 

 

 

1-5) CLI(Command Line Interface)

CLI : 명령 줄 인터페이스라는 뜻으로, 컴퓨터에 텍스트로 명령어를 치면 그 결과를 텍스트로 반환해 주는 것을 말함

CLI의 반대개념으로 볼 수 있는 GUI에서는 아래와 같이

특정 폴더 내용을 확인하고자 할 경우, 폴더 및 파일 목록을 그래픽 요소로 확인한 뒤 그 중 열고자 하는 폴더를 더블 클릭하여

해당 폴더를 연 후 그 안에 있는 내용을 확인한다!!

 

그럼 해당 폴더 안에는
"Ingoo.txt"라는 파일 안에 "Hello world!"라는 텍스트가 적혀 있다!!

 

이와 달리 CLI 환경에서는 아래와 같은 작업 순서대로 명령어를 입력해야 위의 GUI 환경과 동일한 결과물을 얻을 수 있다!!

1. 내가 보고 싶은 폴더까지 경로 확인

2. 내가 보고 싶은 폴더까지 이동

3. 내가 현재 위치하고 있는 폴더의 파일 리스트 보기

4. 파일 리스트 안에 있는 내용 확인

 

pwd 명령어를 통해 현 위치를 확인함!

- pwd : 본인의 현 directory 위치를 알려줌!

- Mac or Linux의 경우, "/ " 하나가 나오면 이것이 최상위 폴더를 가리키며, 이 이상의 상위 폴더는 존재하지 않음!

- Windows로 치면 "C:\"와 동일함!

 

폴더명은 영어로 할 것을 권장함!!

 

ls : 본인의 현 directory 및 파일 목록 출력하기
하지만 이렇게 봐서는 본인이 특정 파일이 어떤 파일인지 혹은 어떤 것이 directory인지 알 수 없음!!

따라서 구분값이 필요함!

 

ls -l : 본인의 현 directory 및 파일 목록 출력하기 + 상세내역 반환
위의 ls 명령어의 출력 내용을 비롯하여 용량, 날짜 등과 같은 관련 정보를 보다 디테일하게 반환해줌!!

 

여기서 위의 출력 결과 상 맨 앞에 내용에 유념해서 그 의미를 확인할 필요가 있음!!

  • d : directory 약자로 폴더를 뜻함
  • l : link 라는 약자로 지금은 그냥 바로가기 라고 보면 됨
  • - : "- "되어 있는 것은 파일이라는 의미

 

cd /Users/ingoo
# cd(change directory의 약자) : directory를 이동하기 위해 쓰는 명령어
ls -l
# (복습할 것!!) 현 directory의 directory 및 파일 상세보기

이렇게 하면 directory가 많이 나오는데

그 중에 Desktop이 바로 바탕화면임!

즉, /Users/ ingoo/Desktop이 바탕화면 경로에 해당.

위의 경로 중 "ingoo"라는 부분은 사용자 컴퓨터 명(계정명)에 해당.

우리가 사용하는 컴퓨터는 사용자 명에 따라 다르게 나옴!

 

cd ./Desktop
# pwd 명령어 입력 시 현 directory가 /Users/ingoo라서
# 현 directory에서부터 (./) Desktop으로 이동

 

안에 새 폴더를 확인했고, 이후 새 폴더 안으로 이동하여

안에 파일 목록을 보면

 

ingoo.txt 파일을 찾음.

앞에 보시면 "-"로 표현된 것을 확인할 수 있음.

이번엔 안에 있는 내용을 보려 하는데 더블 클릭이 안 됨.

이처럼 파일 볼 때 역시 명령어를 입력해야 하는데

간단한 명령어를 확인하면 아래와 같음.

cat ingoo.txt

 

안에 있는 내용을 출력해주는 명령어 cat [파일명.확장자]을 사용함

(마치 자바스크립트의 console.log() 명령어 같음!!)

 

이와 같이 ingoo.txt 파일을 열기 위해

GUI 환경에서는 간단히

마우스를 더블 클릭 두 번만 하면 되는 것을

CLI의 경우, typing을 굉장히 많이 함(비효율적인 작업)!

 

하지만 그럼에도 불구하고 우리는 편리한 GUI보다 CLI를 배워야 함!

이에 대한 이유는 여러 가지가 있지만 가장 큰 원인은 바로 배포 떄문임!!

배포를 하기 위해서는 서버 컴퓨터가 필요하고, 이 서버 컴퓨터는

대부분 Linux로 되어있어 GUI 환경을 지원하지 않음!

(물론 Linux는 CLI와 더불어 GUI 또한 지원하지만 서버 컴퓨터의 경우, 대부분 GUI를 지원하지 않음!)

 

 

CLI 작동 방법

CLI 작동 방법은 위의 작업과 같이
"입력"과 "출력"이다!!
사용자가 명령어를 쓰면(텍스트 입력)
그에 대한 결과(텍스트 출력)로
답변을 주는 방식이 바로 CLI이다!
즉, 이제부터 CLI 로
directory 이동,
파일 생성,
directory 목록 보기,
출력 보기 등 GUI 환경에서 수행했던 내용들을
이제는 CLI로 편안하게 실행할수 있도록 연습할 계획!

 

 

 

 

2) CLI 실습