오늘 내가 배운 것
1. 리눅스란
2. 리눅스 구조
3. 리눅스 특징
4. Ubuntu
5. 디렉토리 구조
6. CLI
1. 리눅스란 ?
리눅스는 컴퓨터를 실행시키기 위한 하나의 OS이다.
리누스 토발스에 의해 만들어진 OS이고 '오픈소스' 개발에 가장 유명한 표본이다.
오픈소스여서 가장 많은 개발자가 참여해서 계속 업그레이드되고 있는 OS이다.
OS란?
Operating System의 약자로 운영체제를 말하는데 모든 하드웨어와 모든 소프트웨어를 관리하는 컴퓨터 시스템의 한 부분이다.
사용자가 스마트폰, 데스크탑(PC) 같은 하드웨어에서 컴퓨터 전원을 켜고 마우스를 클릭해서 폴더를 열고 파일을 실행하고 게임을 실행할 수 있게 해주는 것이 OS이다.
- Windows
- MacOS
- Linux
- Unix
- Android
- IOS
등등...
하드웨어와 소프트웨어
쉽게 정의하면
하드웨어는 손으로 만질 수 있는 것,
소프트웨어는 손으로 만질 수 없는 것이다.
하드웨어는 메인보드, RAM, 파워, 하드디스크, 마우스 , 키보드 , 태블릿 등이 있고,
소프트웨어는 OS, 응용프로그램( 카카오톡, Excel, Chrome )가 있다.
2. 리눅스의 구조
리눅스는 응용프로그램과 셸(shell)과 커널 3가지로 구성되어 있다.
- 응용프로그램 : 프로세스라고도 하고, VS Cord, Zoo, Chrome 등과 같이 흔히 알고 사용하는 실행하는 프로그램 자체가 응용프로그램이다. 이러한 응용프로그램에서 사용자가 명령을 내리면 'shell'은 이 명령을 해석한다.
- Shell(셸) : 명령 해석기라고도 하는 shell(셸)은 리눅스의 사용자 인터페이스로서 사용자와 커널 사이의 중간자 역할을 담당한다.
입력 명령어를 해석해서 커널에게 전달한다.
- Kernel(커널) : 셸에서 해석된 입력 명령어를 받아서 하드웨어에 전달하여 실행시킨다. 그래서 운영체제의 핵심인 부분이다.
그래서 커널은 OS마다 고유의 특성이 있다.
3. 리눅스 특징
리눅스는 뛰어난 안정성과 보안성, 높은 신뢰성과 성능이 특징이다.
리눅스 운영체제 소스코드를 무료로 배포해서(오픈소스) 다양한 리눅스 배포판이 생겼다.
리눅스의 많은 기능을 사용할 수 있으면 좋겠지만 현업에서 쓸 기본적으로 설치, 실행, 수정이라도 할 줄 알아야 한다.
리눅스는 시스템 자원을 효율적으로 관리 및 사용할 수 있다.
멀티 유저와, 멀티 태스킹을 지원한다.
- 멀티유저 : 여러 사용자가 동시에 하나의 시스템에 접근 가능 ( 여러 사용자가 이용은 가능하지만 관리자 계정이 제약을 걸 수 있다.)
- 멀티태스킹 : 여러 개의 작업을 동시에 실행하고, 교대로 컴퓨터의 자원을 사용하는 기능
-CLI, GUI : 쉽게 생각하면, CLI는 마우스로 움직일 수 없지만, GUI은 일반적인 컴퓨터처럼 마우스를 사용할 수 있다.
CLI를 사용하기 위해선 명령어를 알아야 한다.
4. Ubuntu (우분투)
리눅스 안에 여러 OS가 있다.
그중 가장 많이 쓰이는 것이 우분투(ubuntu)이다.
어떤 리눅스가 좋은가?
리눅스는 목적에 따라 사용하기 때문에 어떤 리눅스가 좋다고 할 수 없다. 사용자가 필요에 따라 개발해온 것이므로 목적에 따라 사용하고 싶은 리눅스를 사용하면 된다.
windows에서 리눅스를 실행하기 위해서 가상 머신을 이용했다.
가상 머신을 이용해서 설치하면 컴퓨터 안에서 컴퓨터를 사용한다는 개념으로 한 컴퓨터의 자원을 나눠서 OS를 두 개 설치하는 행위이기 때문에 자원(하드웨어)을 둘로 나눠서 사용하게 된다. 그래서 컴퓨터의 사양이 높더라도 자원을 나눠서 사용하니 컴퓨터의 기능이 떨어졌다.
그래서 마이크로소프트사에서 WSL이라는 제품을 만들고 개발환경을 쉽고 간단하게 구축할 수 있게 도와줬다.
WSL, WSL2 업그레이드가 된 건데, 1에서는 프로그램끼리 충돌이 있었는데, 2에서는 프로그램의 충돌을 효과적으로 줄였다.
5. 디렉토리 구조
대표적인 디렉토리 구조
폴더명 | 설명 |
/bin | 모든 사용자가 사용할 수 있는 기본적인 명령어가 저장된 디렉토리 (ls,cp,mkdir, mv, ....) |
/dev | 디바이스 파일이 존재하는 디렉토리 (블록 디바이스, 캐릭터 디바이스) |
/etc | 시스템의 거의 모든 파일들을 가지고 있는 디렉토리 |
/home | 로그인한 사용자 전용 홈 디렉토리, 사용자를 생성하면 대부분의 사용자의 id와 동일한 이름의 디렉토리가 자동 생성됨 |
/lib | 커널에서 사용하는 모듈과, 시스템에 설치 되어있는 라이브러리가 저장되어 있는 디렉토리 |
/media | CD_ROM이나 USB같은 외부 장치를 연결하는 디렉토리 |
/mnt | 다양한 디바이스를 마운트시 사용하는 임시 디렉터리(맥 사용자는 없음.) |
/var | 애플리케이션 실행중 임시로 생성되거나 삭제될 수 있는 데이터가 담긴 디렉토리 ( 로그, 스풀파일 등등...) |
dev
1. 블록 디바이스 - 하드디스크, CD/DVD 같은 주변 장치를 말함.(저장장치 파일들) 수바이트 크기의 블록 단위로 입출력을 수행한다.
2. 캐릭터 디바이스 - 입출력이 한 바이트 단위로 이루어지며, 데이터가 순차적으로 읽고 쓰인다. 입출력 성능을 향상하기 위해서는 응용프로그램에서의 조작이 필요함.
etc
/etc/sysconfig(시스템 제어판용 설정 파일)
/etc/password (사용자 관리 설정 파일)
/etc/ssh : SSH 서비스가 담겨있는 디렉토리
/etc/hosts : 도메인의 IP를 찾을 때 컴퓨터가 맨 처음 조사하는 파일
/etc/skel : 계정 사용자 생성 시의 초기화 파일이 저장된 디렉토리(adduser)에서 사용함.
var
오류가 발생하면 로그가 생성되는데 그 로그가 담긴 디렉토리
6. CLI
CLI ( Command Line Interface)란?
명령 줄 인터페이스라는 뜻으로 컴퓨터에게 텍스트로 명령어를 치면 결과를 텍스트로 주는 것을 말한다.
반대의 의미로 GUI가 있다.
바탕화면에 폴더가 있고 거기에 텍스트 파일이 있다면, 그걸 확인하는 과정을 GUI로는 바탕화면에서 폴더 클릭, text파일 클릭해서 텍스트 내용을 확인할 수 있지만
CLI에서는 내가 보고 싶은 폴더까지 경로 확인, 내가 text 파일이 있는 폴더까지 이동, 그 폴더 안에 있는 파일 확인, 그 파일의 내용 확인 순으로 명령어를 쳐야지만 GUI와 같은 결과물을 얻을 수 있다.
CLI 작동 방식
작동 방식은 입력과 출력이다. 내가 명령어를 쓰면 (입력) 그에 대한 답을 준다.(출력)
CLI 주요 명령어
명령어 | 사용법 | 설명 |
cd | cd .. cd Desktop |
디렉토리를 변경할 때 (이동할 때) 사용한다. |
ls | ls ls -a |
현재 디렉토리 안의 내용을 확인한다. ( -a : 숨김파일까지 확인한다.) |
mkdir | mkdir 경로+디렉토리 명 | 경로를 포함한 디렉토리 명을 적으면 경로에 디렉토리가 생성된다. 경로가 없으면 초기값으로 현재 폴더가 된다. ex) mkdir /home/user/new_folder |
vi | vi | 에디터 열기(파일 열기), 파일 내용을 추가, 수정 할 수 있는 모드 |
mv | mv [현재위치/파일명] [이동할 위치/파일명] | 파일 이동 할 때 쓰는 명령어, 이동할 위치에서 파일명을 다르게 적으면 파일 이름을 변경할 수 있다. |
cp | cp [현재위치/파일명] [복사할 위치/파일명] | 파일 복사 할 때 쓰는 명령어,이동할 위치에서 파일명을 다르게 적으면 파일 이름을 변경할 수 있다. |
cat | cat 파일명 | 파일 내용을 보일 때 사용하는 명령어, 에디터를 이용하지 않고 바로 내용을 보여준다. |
pwd | pwd | 내가 위치한 디렉토리 경로를 보여준다 |
who,whoami | who 또는 whoami | 로그인한 계정의 이름을 보여준다. |
env | env | 컴퓨터가 사용하고 있는 변수를 출력하여 준다. 변수 = 값 형태로 출력된다. |
echo | echo $변수 | 변수의 값이 출력된다. |
ps | ps -e ps -f |
- -e: 현재 수행하고 있는 프로세스에 관한 내용을 보여준다. - -f: 프로세스 ID와 부모 프로레스 ID를 포함한 전체리스트를 보여준다. |
kill | kill pid | 프로세스를 종료 시킴 |
grep | grep 문자열 | 원하는 문자나 문자열을 찾을 때 사용한다. |
vi
1. 명령 모드 : 초기에 진입하는 모드로 방향키를 이용해서 커서 이동 가능
2. 입력 모드 : 명령 모드에서 'i' 를 이용해서 입력 모드로 들어감 (입력 모드가 되면 하단에 insert)가 표시됨. 입력 모드에서 esc를 누르면 명령 모드로 돌아옴.
3. 콜론 모드 : 명령 모드에서 ' : ' 콜론을 사용하면 맨 마지막 줄에 입력 가능한 공간이 생긴다.
- :q > 일반 종료
- :q! > 강제 종료
- :w > 일반 저장
- :w! > 강제 저장
- :wq! > 강제로 저장하고 종료
ps
ps를 호출하면 pid가 있는데 프로세스를 실행할 때 생기는 고유번호이다.
ps를 종료할 때 pid를 이용하여 종료시킬 수 있다.
kill
kill -9 구현한 종료 함수가 호출되지 않고 즉시 프로세스가 종료되어 버리므로 데이터가 유실되거나 리소스가 제대로 안 닫히는 큰 문제가 발생할 수 있다.
옵션 | 기능 |
UID | 프로세스를 실행한 사람 (User ID) |
PID | 프로세스를 구분하기 위해 만들어진 프로세스 고유번호(ID) |
PPID | 부모 프로세스 고유번호 |
C | 스케줄링을 위한 CPU 사용량 |
STIME | 프로세스 시작시간 |
TTY | 해당 프로세스 입출력 담당 터미널 |
TIME | CPU 점유시간 |
CMD | 실행 명령어 |
'시작 > TIL(Today I Learned)' 카테고리의 다른 글
221123 Linux - Git(깃) commit(커밋)과 Git Branch(브랜치) (0) | 2022.11.24 |
---|---|
2211222 Linux - 사용자 계정과 그룹, 패키지 매니저 (0) | 2022.11.22 |
221118 실전예제 - CRUD 게시판 만들기 (2) (0) | 2022.11.19 |
221117 실전예제 - CRUD 게시판 만들기 (0) | 2022.11.18 |
221116 실전예제 - try_catch(), 데이터셋(dataset, data- ), CRUD 댓글창 만들기 (0) | 2022.11.17 |
댓글