Linux(1)
목차 |
1. 리눅스(Linux)란? |
2. 리눅스(Linux) 구조 |
3. 리눅스(Linux) 특징 |
4. 우분투(Ubuntu) 4.1 가상머신(Virtual Machine) 4.2 WSL(Windows Subsystem for Linux) |
5. 디렉토리 구조 5. 1 최상위 디렉토리 Root 5. 2 그 외 디렉토리들 |
6. 명령어 |
1. 리눅스(Linux)란?
리눅스란 windows 같은 OS(운영체제) 중 하나이며, 소프트웨어에 속한다.
리눅스는 `리누즈 토발즈`가 또 다른 유료 운영체제인 Unix를 기반으로 만든 OS로 `오픈소스` 개발에 가장 유명한 표본이다. `오픈소스`란 코드를 공유했다는 의미이며, 이로인해 여러 개발자들이 참여해서 지속적으로 업그레이드 중이다.
2. 리눅스(Linux)의 구조
- 컴퓨터에서 실행프로그램을 응용프로그램이라고 한다.
- 이러한 응용프로그램에서 사용자가 명령을 내리면 `Shell`은 이 명령을 해석한다.
- `Shell`은 `명령 해석기`라고도 한다.
- 해석된 사용자 입력 명령어를 `Kernel`에게 전달한다.
- `Kernel`은 받은 명령어로 하드웨어에게 신호를 보내 실행시킨다.
3. 리눅스(Linux)의 특징
- 리눅스(Linux)는 `유닉스(Unix)`를 기반으로 하고있다.
- 리눅스(Linux)는 뛰어난 안전성과 보안성, 높은 신뢰성과 성능이 특징이다.
- 시스템 자원을 효율적으로 관리 및 사용할 수 있다.
- 멀티유저와 멀티태스킹을 지원한다.
- 멀티유저 : 여러 사용자가 동시에 하나의 시스템에 접근하는 것.
- 멀티태스킹 : 여러개의 작업을 동시에 실행하고, 교대로 컴퓨터의 자원을 사용하는 기능.
- CLI와 GUI를 지원한다.
- 리눅스(Linux)도 GUI를 지원한다.
- CLI를 다루기 위해선 명령어를 많이 알아야한다.
- 낮은 사양에서도 컴퓨터가 작동한다. 즉, 컴퓨터의 성능이 낮아도 되며 비용절감 측면에서도 강점이 있다.
- 오픈소스이므로 발전 및 업그레이드가 빠르게 진행되고있다.
4. 우분투(Ubuntu)
리눅스(Linux)라는 OS안에 여러 제품군이 있는데, 그 중 우분투(Ubuntu)라는 제품군을 사용할 것이다.
Windows에서는 리눅스(Linux)를 사용하기가 까다롭다. WIndows 위에 리눅스(Linux)를 설치할 수 없기 때문이다. 이로인해 가상머신이라는 개념을 사용해야한다.
4.1 가상머신(Virtual Machine)
"컴퓨터 안에 컴퓨터를 돌린다" 라는 개념으로 컴퓨터에서 자원을 나눠서 OS를 두 개 설치하는 행위를 말한다.
가상머신의 단점은 컴퓨터 사양은 높아도 그 기능이 반으로 줄어든다는 점, 컴퓨터 자원을 효과적으로 사용할 수 없다.
그래서 MicroSoft는 Wsl이라는 제품을 만들고, 개발환경을 보다 쉽고 간단하게 구추할 수 있도록 도와주었다.
4.2 WSL(Windows Subsystem for Linux)
WSL은 WIndows에서도 Linux를 보다 쉽게 사용하는 것을 도와주는 제품이다. 그러나 초기에는 Windows와 Linux를 같이 돌리게되면 서로 충돌이 일어나 문제가 발생했다. 하지만 이는 WSL2를 출시하면서 해결되었다. 그러니 본인이 사용하는 제품이 WSL인지 WSL2인지는 알고 사용하도록하자.
(WSL도 가상머신이다.)
5. 디렉토리 구조
다음은 디렉토리 구조에 대해 알아보자, 최상위 디렉토리 아래에 여러 하위 디렉토리들이 존재한다.
5. 1 최상위 디렉토리 Root
Root
- 최상위 디렉토리
- 루트 디렉토리 : /
5. 2 그 외 디렉토리들
/ bin
- 기본적인 명령어가 저장된 디렉토리, 리눅스 시스템 사용에 있어서 가장 기본적인 명령어들이 저장되어 있는 곳
- ls, cd, cat, chmod, chown, cp, echo, kill, ls, mkdir, mv, ps, pwd, rm, su, vi, ...
/ boot
- 리눅스 부트로더(boot loader)가 존재하는 디렉토리
/ dev
- 각종 디바이스(블록 디바이스, 캐릭터 디바이스) 파일들이 저장되는 공간
- 블록 디바이스
- HDD와 같은 주변장치를 말한다.
- 데이터를 블록단위로 읽고 쓰여지며 랜덤하게 엑세스함.
- 캐릭터 디바이스
- 입출력이 한 바이트 단위로 이루어지며 데이터가 순차적으로 읽고 쓰여짐.
- 블록 디바이스
/ etc
- 시스템에 거의 모든 설정 파일이 존재하는 디렉토리
- /etc/sysconfig 시스템 제어판용 설정파일
- /etc/passwd 사용자 관리 설정파일
- /etc/ssh ssh 서비스가 담겨있는 디렉토리
- /etc/hosts 도메인의 IP를 찾을 때 컴퓨터가 맨 처음 조사하는 파일이다
- /etc/skel 계정 사용자 생성시의 초기화 파일이 저장된 디렉토리("adduser")에서 사용한다.
/ home
- 사용자의 홈 디렉토리, adduser 명령어로 새로운 사용자를 생성하면 대부분 사용자의 id와 동일한 이름의 디렉토리가 자동으로 생성된다.
- 계정이 많아지면 계정별로 디렉토리가 나누어진다.
- 계정, 설치할 때 적었던 이름
/ lib
- 커널 모듈과 라이브러리 파일
/ media
- DVD, USB 마운트
/ mnt
- /media 디렉토리와 비슷한 용도이다.
- WSL2를 사용하는 사람에겐 window파일이 담겨져있는 공간이다.
/ var
- 애플리케이션 실행중에 데이터를 일시적으로 저장하거나, 로그파일들을 저장하는 디렉토리
6. 명령어
ls
- 현재 위치의 파일 목록을 조회하는 명령어
- ls -[옵션]
- ls -l 파일들의 상세 정보를 나타낸다.
- ls -a 숨김 파일을 표시합니다.
- 리눅스에 .은 숨김파일이라는 뜻이다.
- ls -al 파일들의 상세 정보를 확실하게 나타낸다.
$ ls
$ ls -a
$ ls -l
$ ls -al
cd(change directory)
- 디렉토리를 이동할 때 쓰는 명령어
- cd /... 절대경로
- cd ./... 상대경로 ( 현재 위치부터 시작)
$ cd [이동할 디렉토리 경로]
mkdir
- 디렉토리를 생성하는 명령어
$ mkdir [디렉토리를 생성시킬 경로]
$ ex) mkdir /home/user/workspace
vi
- 에디터 열기(파일 열기)
- 두 가지 모드가 존재한다.
- 입력모드 : i를 눌러 들어간다.
- 명령모드 : 입력모드 상태에서 esc를 눌러 되돌아간다.
- 종료옵션
- 해당 파일이 열린상태에서의 명령어이며, 콜론(:)으로 시작한다.
- : q 종료
- : q! 강제 종료
- : w 저장
- : w! 강제 저장
- : wq! 저장하고 종료 (강제)
mv
- 파일을 이동시키는 명령어
- 파일명을 바꿀때에도 사용한다.
- 덮어쓰기로 파일명을 변경한다.
$ mv [현재 위치/ 현재 파일명] [이동할 위치/파일명]
- 현재 위치의 hello.txt 파일을 현재 위치의 sample 디렉토리 안으로 옮긴다.
$ mv ./hello.txt ./sample/hello.txt
cp
- 파일을 복사하는 명령어
- mv와 사용방법이 흡사하다.
$ cp [현재 위치/복사할 파일명] [이동할 위치/ 만들 파일명]
cat
- 파일 이름을 인자로 받는다.
- 내용을 출력해준다.
$ cat [파일명]
$ cat hello.txt
# hello.txt 내용 출력
pwd
- point working directory
- 현재 디렉토리 위치를 출력한다.
$ pwd
env
- 환경변수
- 지금 사용하고 있는 Linux 컴퓨터에서 사용하고 있는 변수를 출력해준다.
$ env
grep
$ grep [찾을단어] [파일위치]
# hello.txt 파일에서 host가 들어간 줄을 출력한다.
$ grep host ./hello.txt
| (pipe line)
- CLI는 기본적으로 명령어를 입력하면 출력이 된다. |(pipe line)은 이 출력값을 가지고 다시 한번 조작할 수 있다.
- ex) env 결과를 가지고 PATH라는 내용을 가진애들만 보고싶다.
# env로 출력된 값에서 MAIL이라는 단어를 가진 줄을 출력한다.
$ env | grep MAIL
ps
- 프로세스의 상태를 보는 명령어
- 현재 가지고 있는 프로세스
- 프로세스를 실행할 때마다 고유번호가 생긴다. (PID)
- [옵션]
- ps -e 현재 수행하고 있는 프로세스에 관한 정보
- ps -f 프로세스 ID와 母프로세스 ID를 포함한 전체리스트를 보여줍니다.
$ ps -e
$ ps -f
$ ps -ef
- 대표적인 사용예시
- ps -ef 값을 가지고 node를 사용한 프로그램만 보고싶을때 pipe line을 이용해 찾을 수 있다.
$ PS -ef | grep node
kill
- 프로세스를 종료한다.
$ kill -9 [프로세스 아이디]
$ ex) kill -9 1060