컴퓨터를 실행시키기 위한 OS(오퍼레이팅 시스템)의 일종이다
(Windows, MacOs, Linux, Unix...)
리눅스는 유닉스를 토대로 설계된 OS로 리누즈 토발즈에 의해 만들어졌다.
현존하는 가장 큰 오픈소스 소프트웨어로서 가장 많은 개발자가 참여중이며
오픈소스 개발에 있어 제일 대표적인 표본이기도 하다.
리눅스의 토대인 유닉스는 멀티 유저와 멀티 태스킹을 지원하도록 설계되었는데
이를 모태로 한 리눅스 역시 유닉스의 특징을 그대로 따르고 있다.
멀티 유저 : 여러 사용자가 동시에 하나의 시스템에 접근 가능
(Window는 기본적으로 싱글 유저를 대상으로 발전해온 OS)
멀티 태스킹 : 여러개의 작업을 동시에 실행하고,
교대로 컴퓨터의 자원을 사용하는 기능
OS
컴퓨터의 하드웨어를 관리하는 것을 목적으로 하는 소프트웨어.
하드웨어와 소프트웨어 사이의 인터페이스(매개체) 역할을 한다.
예를 들어 키보드, 마우스 등의 하드웨어(입력장치)에서
입력신호를 소프트웨어(OS)에 전달하면,
소프트웨어는 이를 사용자가 눈으로 볼 수 있게끔 데이터를 가공해서
다시 하드웨어(모니터)로 보내 출력하는 과정을 거친다.
리눅스의 구조는 응용 프로그램의 구동 방식을 토대로 설명할 수 있다
응용프로그램에서 사용자가 명령을 내리면 Shell
은 이 명령을 해석하고
(Shell
은 명령 해석기라고 이해하자)
Shell
은 해석된 사용자의 입력 명령어를 Kernel
(커널)에 전달한다
그리고 커널이 하드웨어에 입력신호를 전달하면 프로그램이 실행된다
(커널은 하드웨어와 응용 프로그램 사이에서 인터페이스를 제공하는 역할을 한다)
(이 이 전달구조의 중추가 되는 것은
kernel
)
응용 프로그램 (Application)
사용자가 컴퓨터를 사용하여 어떠한 일을 하려고 할 때
사용되는 모든 프로그램을 말한다.
(작업관리자를 켰을 때 보이는 사용자가 사용중인
모든 프로세스들이 바로 응용 프로그램)
시스템 프로그램을 이용 및 응용해서 특정 기능만 하도록
새로 만들어낸 프로그램이기에 '응용' 프로그램이라 부르는 것
우분투는 리눅스를 기반으로 한 여러 OS 중 하나로
현재까지 가장 널리 쓰이고 있다
CLI & GUI
CLI (Command Line Interface)
글자의 입출력을 통해 사용자와 컴퓨터가 소통하는 방식
(CLI 환경은 마우스가 없음을 전제로 한다)
GUI (Graphical User Interface)
눈에 보이는 그래픽 요소를 통해 소통하는 방식
대부분의 사용자는 이미 윈도우나 맥OS를 사용하고 있기 때문에
리눅스를 다룰 때는 GUI보단 CLI 환경에서 작업을 하게 된다
어째서 CLI를 사용하냐고?
cd
: 디렉토리 이동
cd ~/Desktop
: Desktop 디렉토리로 이동
cd ~
: 사용자의 홈 디렉토리로 이동
cd /
: 루트(최상위) 디렉토리로 이동 (절대경로)
cd ./
: 현재 위치에서 시작. (상대경로)
cd ..
: 상위 디렉토리로 이동
pwd
: 현재 디렉토리 위치를 출력
ls
: 현재 디렉토리 안의 파일목록을 조회
ls ..
: 상위 디렉토리 안의 내용물 출력
ls -al
:ls -l
+ls -a
ls -l
: 파일들의 상세정보를 출력ls -a
: 숨김 파일을 표시 (.파일명
: 숨겨진 파일)
l
: 링크
dr
: 디렉토리
mkdir
: 디렉토리 생성
만약 사용자의 문서 디렉토리에 workspace라는 디렉토리를 만든다면cd / cd home cd 유저명 cd Documents mkdir workspace
아니면 아래처럼 축약할 수도 있다
mkdir cd ~/Documents/workspace
vi
: 에디터 열기(파일 열기)
vi
파일명 : 만약 해당하는 파일명이 없으면
새로운 파일 생성이 되며 에디터가 열린다.
- 모드
- 명령 모드 : 에디터 진입시의 기본 모드
- 입력 모드 : 소문자
i
입력 (파일 내용을 수정할 수 있게 된다)
명령모드로 되돌아가려면esc
입력- 종료옵션
:
:q
: 종료:q!
: 강제 종료 (!는 강제의 의미):w
: 저장(write) (w!는 강제저장):wq!
: 저장 후 강제종료
mv
: 파일이동 명령어
mv
[현재 위치/파일명][ ][이동할 위치/파일명]mv ./blockchain8/hello.txt ./sample/hello.txt
(hello.txt가 blockchain8 디렉토리에서 sample 디렉토리 안으로 이동)
+) 파일명을 바꿀 때도mv
명령어를 사용한다!mv ./hello.txt ./hello2.txt
(파일명이 hello2.txt로 변경된다)
cp
: 파일복사 명령어
cp
[현재 위치/파일명][ ][이동할 위치/파일명]
cat
파일 내용이 출력된다
cat
+ 파일명. (에디터를 열지 않고 내용을 확인할 때 사용)
pwd
: 현재 디렉토리를 출력
who
,whoami
: 현재 로그인된 사용자명 출력
env
: 환경변수를 출력
(지금 사용중인 Linux 컴퓨터에서 사용하고 있는 변수를 출력)
echo $HOME
$
+변수명, $는 변수를 불러올 때 사용한다.
(해당 변수가 담고있던 값을 출력함)
grep
: 파일에서 지정한 문자열이나 정규표현식을 포함한 행을 출력한다
grep
[찾을 단어][ ][파일 위치]grep host ./development.js "host" : "127.0.0.1"
|
(Pipe line) :
env -> PATH
(env 결과를 가지고 PATH라는 내용을 가진 것들만 보고 싶을 때)
env | grep HOME
HOME=/Users/kimjh
env | grep PWD
PWD=/Users/kimjh/Documents/blockchain8
OLDPWD=/Users/kimjh/Documents
ps
(Process Status) : 리눅스에서 사용중인
프로세스의 상태를 보여주는 명령어
ps -ef
-e
: 현재 수행하고 있는 프로세스에 관한 정보-f
: 프로세스 ID와 모 프로세스 ID를 포함한 전체 리스트 출력
프로세스는 실행할 때마다 고유번호(PID
)가 생긴다
만약 노드로 실행중인 프로세스만 확인하려면?
ps -ef | grep node
이런 식으로 찾고자 하는 PID를 확인할 수 있다
kill
: 실행중인 프로세스를 끄는 명령어
kill -9
[PID]
graph
A("/") --> /bin
A --> /boot
A --> /dev
A --> /etc
A --> /home
A --> /lib
A --> /usr
A --> /media
A --> /mnt
A --> /var
/
: 최상위 디렉토리. /
도 디렉토리를 의미한다.
(cd /
: 루트(최상위) 디렉토리로 이동)
ls
로 루트 디렉토리를 확인하면 그 안에서
/bin
을 포함한 각종 디렉토리를 발견할 수 있다
기본적인 명령어가 담겨져있는 디렉토리
(리눅스 시스템 사용에 있어서 가장 기본적인 명령어들이 저정된 공간)
ls
, cd
...
ex)cat, chmod,chown,cp,echo,kill,ls,mkdir,mv,ps,pwd,rm,su,vi...
리눅스의 부트로더(boot leader)
가 존재하는 디렉토리
각종 디바이스 파일들이 저장되는 공간
블록 디바이스
와 캐릭터 디바이스
시스템의 거의 모든 설정파일이 존재하는 디렉토리
etc/sysconfig
: 시스템 제어판용 설정파일
ext/password
: 사용자 관리 설정파일
/etc/ssh : SSH 서비스 각종 설정파일이 담겨있는 디렉토리
/etc/hosts : 도메인의 IP를 찾을 때 컴퓨터가 가장 먼저 조사하는 파일
wihdow는
C:\windows\system32\drivers\etc\hosts
cd /etc
> vi hosts
에서 ip를 확인할 수 있다
(:q!
로 빠져나오기)
/etc/skel : 계정 사용자 생성시 초기화 파일이 저장된 디렉토리(adduser
)에서 사용함
사용자의 홈 디렉토리, adduser
명령어로 새로운 사용자를 생성하면
대부분 사용자의 id
와 동일한 이름의 디렉토리가 자동으로 생성된다
cd /home/사용자명
= cd ~
홈디렉토리 경로 찾아가기는 cd ~
로 축약 가능
cd /home
> ls -al
커널 모듈과 라이브러리 파일이 담겨있음
DVD, USB, CD 등을 마운트 시
/media와 유사한 용도 (맥OS에는 없다)
(WSL2 사용시 window 파일이 담겨져있는 공간)
어플리케이션 실행중에 데이터를 일시적으로 저장하거나
로그파일들을 저장하는 디렉토리
(= console.log...)
/var/log
: 로그를 저장하고 싶을 때는 이 디렉토리 안에 담는다
(다른 디렉토리에 넣더라도 동작은 한다)