터미널로 배우는 리눅스 운영체제를 알아보자. 키워드 중심으로 정리하였다.
- Ubuntu에서 CLI 환경으로 바꾸는 단축키 :
Ctrl + Alt + F2
- 셀과 커널
- 커널 : CPU, Memory, SDD등 각종 디바이스를 통합관리하면서 그 연산자원을 수많은 어플리케이션들에게 분배하는 자리에 있는 것.
- ❗커널 ≠ 운영체제
- 그렇지만 보안, 자원관리, 디바이스 인터페이스 추상화 등 운영체제의 핵심적인 구성요소
- 셀 : 운영체제의 껍데기. 사용자와 커널을 연결해주는 인터페이스.
- CLI 셀
- GUI 셀
ls -alrt
명령어- 운영체제의 자원 분배
- 메모리 관리 : OS는 프로세스가 컴퓨터의 전체 메모리 어디든지 쓸 수 있도록 하는 것이 아니라 가상 메모리(Virtual memory) 로써 일부만 떼어서 제공함. (프로레스 격리) 이때문에 프로세스들이 서로 소통하기 위해서는 별도로 허용된 프로세스간 통신(Inter-Process Communication, IPC) 기법들을 사용해야 한다.
- CPU 자원 관리 : CPU 연산의 경우 코어 단위로 프로세스에 제공. 프로세스는 스레드(thread) 라는 단위로 코어를 하나씩 사용할 수 있는데, 프로세스 하나가 시작되면 기본적으로 하나의 스레드를 가지고 시작하지만, 개발자는 프로그램이 더 많은 스레드를 사용하도록 설계하여 다중 CPU 코어의 이점을 극대화 함.
- 프로세스와 스레드
- 프로세스 : 현재 수행되고있는 작업.
- 스레드 : 프로세스의 실행 단위.
- 하나의 프로그램 안에서 여러개의 프로세스를 활용하는 것을 멀티프로세싱(multiprocessing) , 하나의 프로세스 안에서 여러개의 스레드를 활용하는 것을 멀티스레딩(Multithreading) 이라고 합니다.
- 터미널
- 개인용 컴퓨터가 등장하기 전 시절. 여러 대의 터미널을 한대의 메인프레임에 연결해 여러 사용자들끼리 나눠 사용했었다. 그때의 용어가 아직도 사용되는 중.
- 즉, 터미널이란 컴퓨터에 정보를 입력하고 출력하는 소프트웨어 및 하드웨어로써의 장치
- 프로세스 관리 명령어
ps
: 현재 터미널과 관련된 프로세스 목록 출력ps -ef
: 모든 터미널에서 현재 실행중인 프로세스 목록 및 부가정보를 출력kill -s KILL [프로세스번호]
: 현재 실행중인 해당 번호의 프로세스를 중단
- 시스템 콜(system call)
- 프로세스 관리는 커널의 고유 권한 → 커널의 approve가 있어야지 프로세스 관리가 가능. (프로세스 삭제, 실행 등)
- 이렇게 프로세스가 커널에게 요청을 전달하는 기능을 시스템콜(system call) 이라고 한다.
- 프로그램과 환경변수
which
: 명령어의 전체 경로 출력export
: 셀 변수나 함수를 현재 환경으로 내보냄env
: 명령어가 제공된다면 해당 명령어를 새로운 환경에서 실행. 명령어가 제공되지 않는 경우 현재 환경의 정보를 출력
- 패키지 관리자(package manager)
- 공인 저장소에서 프로그램과 다른 라이브러리를 패키지 단위로 설치하고 관리할 수 있도록 하는 프로그램.
apt-get
: APT(Advanced Packaging Tool) 패키지 관리자를 통해 공인 저장소에서 패키지를 가져다 설치하거나 제거하는 명령어
- 명령어 집합(Instruction Set)
- TPU(Tensor Processing Unit)
- ASIC(Application-Specific Integrated Circut, 어플리케이션 특화 집적회로)
- FPGA
- 저장장치
- RAM : 주기억장치.
- 비싸다. 휘발성
- HDD & SDD : 보조 기억장치.
- 저렴하다. 비휘발성
- RAM : 주기억장치.
- 클라우드와 가상화
- 가상화(virtualization) : 하나의 컴퓨터를 쪼개어 여러대의 컴퓨터가 있는 것처럼 사용하게 하는 기술
- 호스트(host) : 실제 물리적인 서버
- 게스트(guest) : 그 안에서 돌아가는 가상 서버
- 가상화의 종류
- 가상머신(Virtual Machine) : 게스트가 운영체제 있음
- 컨테이너(Container) : 게스트가 호스트의 운영체제 커널을 공유해서 사용
ex. 도커
- 가상화(virtualization) : 하나의 컴퓨터를 쪼개어 여러대의 컴퓨터가 있는 것처럼 사용하게 하는 기술
sudo apt install curl
및curl parrot.live
를 통해 춤추는 앵무새를 볼 수 있습니다.- 셀 스크립트
- 셀 스크립트 내용은 아래와 같이 작성.
#!/bin/bash
필수!
1
2
3
4#!/bin/bash echo "Hello" # 주석 echo "Bye"
- 실행하는 방법!
1
2$ chmod +x test.sh $ ./test.sh
- 파이썬도 이렇게 실행할 수 있다.
- 셀 스크립트 내용은 아래와 같이 작성.
명령어 모음
필수(❤️) 및 권장(👍) 명령어들은 한번씩 실행하거나, 사용법을 검색해 보는 것을 추천합니다.
- 셸 환경
- 👍
history
: 셸 명령어 이력을 출력합니다. - 👍
man
: 프로그램의 매뉴얼 페이지를 출력합니다. - 👌
which
: 명령어의 전체 경로를 출력합니다. - 👌
export
: 셸 변수나 함수를 현재 환경으로 내보냅니다. - 👌
env
: 명령어가 제공된다면 해당 명령어를 새로운 환경에서 >실행합니다. 명령어가 제공되지 않은 경우 현재 환경의 정보를 출력합니다.
- 👍
- 텍스트 처리
- ❤️
echo
: 뒤이어 입력한 내용을 출력합니다. - ❤️
cat
: 하나 이상의 텍스트 파일을 순서대로 출력합니다. - 👍
sort
: 입력된 텍스트를 줄 단위로 정렬합니다. - 👍
less
: 텍스트 파일의 내용을 자유롭게 조회하고 검색합니다. - 👍
head
: 텍스트 파일의 앞 몇 줄만 출력합니다. - 👍
tail
: 텍스트 파일의 마지막 몇 줄만 출력합니다. - 👍
cut
: 텍스트를 구분자(delimiter)에 따라 나눕니다. - 👍
uniq
: 텍스트 중 중복 값들을 제거합니다. - 👍
grep
: 정규식을 활용해 텍스트를 검색합니다. - 👍
wc
: 텍스트를 단어, 줄, 문자 등 단위로 셉니다. - 👌
comm
: 텍스트 파일을 비교합니다. - 👌
zcat
: 압축된 텍스트 파일을 출력합니다. - 👌
sed
: 정규식을 활용해 텍스트를 변형합니다. - 👌
awk
: 텍스트를 스캔하고 변형합니다.
- ❤️
- 파일 제어 및 이동
- ❤️
ls
: 현재 디렉토리 내의 파일 및 폴더들을 출력합니다. - ❤️
cd
: Change Directory의 약자로, 뒤에 따라오는 폴더로 >내가 있는 셸의 현재 위치를 이동시킵니다. - ❤️
cp
: 파일을 복사합니다. - ❤️
mv
: 파일을 이동합니다. - ❤️
rm
: 파일을 삭제합니다. 폴더를 삭제하기 위해서는-r
(recursive) 옵션을, 빈 폴더가 아니더라도 내부까지 삭제하려면-f
(force) 옵션을 함께 사용해야 합니다.
- ❤️
- 👍
chown
: 대상 파일의 소유 사용자와 그룹을 변경합니다.- 👍
chmod
: 대상 파일의 권한을 변경합니다. - 👍
find
: 파일을 찾습니다. - 👍
pwd
: Present Working Directory의 약자입니다. 현재 내가 >위치한 디렉토리 위치를 출력합니다. - 👌
ln
: 파일에 대한 링크를 생성합니다. - 👌
touch
: 파일 접근 및 수정 시간을 변경합니다. 빈 파일을 만드는데도 사용할 수 있습니다. - 👌
tar
: 파일 및 폴더를 하나의 아카이브 파일로 통합하고 압축합니다. - 👌
mount
: 새로운 저장장치를 파일시스템으로서 추가합니다. - 👌
rename
: 여러 파일들의 이름을 규칙에 따라 한번에 변경합니다. - 👌
df
: 파일시스템의 남은 용량을 표시합니다.
- 👍
- 시스템 및 프로세스 제어
- ❤️
sudo
: 이어지는 명령을 최고 관리자 권한으로 실행합니다. - ❤️
apt-get
: APT 패키지 관리자를 통해 공인 저장소에서 패 >키지를 가져다 설치하거나 제거합니다. - 👍
ps
: 현재 프로세스 목록을 출력합니다. - 👍
kill
: PID에 해당하는 프로세스에 시그널을 보냅니다. - 👌
fg
: 배경에서 실행되는 작업을 전경(foreground)으로 가져옵니다. - 👌
bg
: 작업을 배경(backgound)으로 보냅니다. - 👌
jobs
: 전경 및 배경 작업의 목록을 표시합니다.
- ❤️
- 기타
- ❤️
ssh
: 원격으로 셸에 접속합니다. - 👍
tmux
: 여러 개의 셸 세션을 관리하고, 터미널 접속이 끊어지더라도 셸 세션을 유지합니다. - 👍
watch
: 이어지는 명령을 주기적으로 실행하여 표시합니다. - 👍
curl
: 주어진 URL과 통신합니다. - 👍
wget
: 네트워크를 통해 파일을 다운로드합니다. - 👍
scp
: SSH를 통해 원격으로 파일을 전송합니다. - 👌
ssh-keygen
: SSH 공개키 비밀키 쌍을 생성합니다. - 👌
ssh-copy
: SSH 공개키를 해당 서버에 등록합니다. - 👌
rsync
: 원격으로 파일을 동기화합니다. - 👌
xarg
: 명령어를 구성하여 실행합니다. 이전 명령에서 인자를 넘겨받아 실행하거나, 다중 프로세스를 사용하여 명령을 병렬로 실행하는 등의 작업이 가능합니다. - 👌
cron
: 주기적으로 실행될 명령을 등록합니다. - 👌
htop
: 프로세스 목록 및 자원 사용량을 시각적으로 표시합니다.
- ❤️