*리눅스의 마스코드인 펭귄이름은 턱스(Tux)입니다.
리눅스를 사용하는 이유 3가지
1. 오픈소스
리눅스는 오픈 소스 운영체제입니다. 즉, 일반적으로 사용되는 Windows와 Mac OS와 달리 리눅스는 개인이든 법인이든 누구나 리눅스를 무료로 설치하여 사용할 수 있습니다.
2. 커스터마이징
사실 리눅스는 엄밀히 말하면 리눅스 커널(Linux Kernel)을 의미합니다.
커널은 운영체제의 핵심적인 기능을 수행하는 운영체제의 한 부분입니다.
즉, 리눅스는 커널의 형태로 만들어져 있어 운영체체가 수행해야 하는 핵심 기능만 정의돼 있으며, 이외의 부분은 사용자가 자신의 용도에 맞게 커스터마이징하여 사용할 수 있습니다.
3. 안정적인 동작
현재까지도 리눅스는 오픈소스로 관리되고 있습니다. 이에 따라 넓은 사용 범위에서 다양한 사용자들의 검증을 실시간으로 거치고 있으며, 위협 사례나 버그가 발견되면 불특정 다수의 사용자들에 의해 버그가 수정되어 왔기 때문에 다른 운영체제들보다 상대적으로 더 안정적으로 동작할 수 있습니다.
리눅스는 크게 4가지로 분류할 수 있습니다.
리눅스는 유닉스(Unix)라는 운영체제를 기반으로 하고 있으며,
뛰어난 안정성과 보안성, 높은 신뢰성과 성능이 특징입니다.
시스템의 자원을 효율적으로 관리 및 사용할 수 있으며,
멀티 유저와 멀티 태스킹을 지원하고 있습니다.
멀티유저(multi-user) : 여러 사용자가 동시에 하나의 시스템에 접근할 수 있음
멀티 태스킹(multi-tasking) : 여러개의 task(작업)를 동시에 실행하고, 교대로 컴퓨터의 자원을 사용할 수 있는 기능
또한 대부분의 리눅스는 CLI(명령어창)와 GUI(그래픽)를 모두 지원하고 있으며, 다양하고 강력한 네트워킹 기능 덕분에 서버 OS로 적합합니다. PC서버에서도 엔터프라이즈 급의 성능을 제공하고, 성능이 낮은 PC에서도 작동합니다. 앞서 언급한 것과 같이 오픈소스 프로젝트이기 때문에 커널 소스코드 및 모든 관련 자료가 공개되어 빠른 발전을 지원하고 있습니다. 다양한 업무 환경을 만족시키는 다양한 배포판이 존재하고 풍부한 응용 프로그램을 제공하고 있습니다.
가장 유명하고 사용성이 좋은 우분투(UBUNTU)와
사용자 인터페이스가 잘 갖춰진 페도라(FEDORA),
라즈베리파이에서 자주쓰이는 라지비안,
우리에게 친숙한 안드로이드까지 모두 리눅스의 한 종류입니다.
패키지 형식 | 패키지 관리자 | 운영체제 |
---|---|---|
레드헷(.rmp) | yum | CentOS, 페도라 |
데비안 레드헷(.deb) | apt | 우분투, 리눅스 민트, 라즈비안 |
안드로이드(.apk) | Android Package Manager | 안드로이드 OS |
우분투는 리눅스 중에서도 가장 높은 인지도를 자랑합니다.
데비안 GNU / Linux를 기반으로 제작된 데스크탑 환경을 사용하는 리눅스 배포판입니다.
Ubuntu: 남아프리카의 반투어인 우분투라는 말에서 파생. 사람들간의 관계와 헌신에 중점을 둔 윤리사상 혹은 인본주의 사상으로 평화운동의 사상적 뿌리라는 철학을 가지고 있음. 마음이 열려 있고, 타인을 돕고 존중한다는 의미를 가지고 있음.
앞서, 대부분의 리눅스가 GUI와 CLI를 지원하고 있다고 말했는데, 각각은 그래픽창과 명령창을 의미합니다.
일반적인 사용자가 흔히 사용하는 인터페이스입니다. 사용자가 편리하게 사용할 수 있도록 기능을 아이콘, 이미지 등의 그래픽으로 나타낸 인터페이스입니다. 마우스 클릭이나 드래그앤드롭이 가능하고 수시로 확인이 가능하여 사용이 쉽습니다. 흔히 사용하는 Windows와 Mac 운영체제 모두 지원하고 있습니다.
문자로 사용자와 컴퓨터가 상호작용하여 동작하는 인터페이스입니다. Windows의 CMD, Mac의 Terminal에서 CLI를 사용할 수 있습니다.
Advanced Packaging Tool의 약자로, 데비안 리눅스(.dev) 또는 파생된 배포판(우분투)에서 소프트웨어를 설치, 제거, 업데이트할 때 사용합니다.
과거에는 설치, 제거, 업데이트에서 apt-get을 검색과 확인에서는 apt-cache를 따로 사용했습니다. 하지만 최근에는 모두 apt로 통일되었습니다.
다만, 높은 권한이 필요한 활동에 대해서는 apt 앞에 sudo를 함께 입력하여 권한을 획득해야 합니다.
패키지 설치와 같은 활동에서는
apt install~~을 입력했을때 permission denied라는 메시지와 함께 활동이 제한될 수 있습니다. 이 때, sudo를 입력함으로써 리눅스에서 모든 권한을 가지고 있는 최고 관리자 root의 권한을 획득할 수 있습니다. root는 운영체제의 모든것을 제어할 권리를 가집니다.
sudo apt install package
: sudo와 함께 입력함으로써 관리자 권한을 획득하고, 암호를 입력하면 관리자 권한으로 패키지 설치가 가능하빈다.
ls -al 명령어를 통해 모든 파일의 모든 속성을 확인할 수 있습니다.
파일의 속성은 다음과 같이 형성 됩니다.
- rw-r-r- 1 soryeongk elice 8980 9월 18일 11:52 soryeognk.txt
r(읽기,4) / w(쓰기,2) / x(실행,1)로 구성되는데,
소유자/그룹/그외 사용자 3개의 덩어리로 이루어집니다.
예를 들어, rw-r--r--의 경우 소유자는 읽기와 쓰기가 가능하고 그룹과 그외 사용자는 읽기만 가능하다는 뜻입니다.
같은 이야기를 숫자로 작성하기도 하며, - 하이픈은 0으로 합니다. 각 권한의 숫자를 더해서 나타내야 하므로 rw 읽기 쓰기 권한은 4+2인 6으로, rx 읽기 실행 권한은 4+1인 5로 나타냅니다. 읽기 쓰기 실행의 권한 4+2+1인 7이 됩니다.
권한을 변경하고 싶을 때에는 이 숫자를 사용해
"chmod [파일권한][파일 위치 또는 이름]"을 사용하면 됩니다.
가령 소유자는 읽기 쓰기 실행의 권한을, 그룹은 읽기 실행만을,
그외 사용자는 실행의 권한만을 가지게 한다고 하면 751를 입력하면 됩니다.
777은 모든 사용자가 모든 권한을 얻는다는 의미입니다.
-R을 추가하면 폴더내의 모든 파일, 폴더의 권한도 변경된다.
예 : "chmod -R 777 [폴더명]"
소유자를 변경할 때에는 "chown [소유할유저]:[소유할 그룹][파일 위치 또는 파일명]"
을 입력하면 되며, root 권한이 있어야 실행이 가능합니다.
먼저 파일이란 주기억장치나 디스크처럼 하드웨어 자장공간에 저장되는 데이터의 집합을 말합니다.
파일시스템이란, 저장 장치 내에서 데이터를 읽기(R), 쓰기(W), 삭제 등을 수행하기 위해 미리 정한 약속입니다. 하드디스크와 ssd는 데이터가 저장된 위치가 이 약속에 따라 달라집니다. 때문에 파일 저장 및 검색을 할 수 있도록 관리하는 방법도 파일시스템이라고 말합니다. 파일을 어떻게 관리할 것인가에 대한 정책이라고 생각하면 됩니다.
대부분의 파일 시스템은 디렉토리와 파일의 형태로 구성되어 있습니다.
리눅스의 파일시스템은 root 파일 아래에 계층적으로 모든 파일과 디렉토리가 만들어집니다.
운영체제별 파일시스템
Windows : FAT(12/16/32,exFAT), NTFS
Linux : ext(2/3/4)
MacOS : HFS, HFS+, APFS
Google : GFS 구글 사내에서 사용하기 위한 파일 시스템 (glusterfs와는 다름)
1.FAT : File Allocate Table
파일 할당 테이블이라고 말하며,
디지털 카메라등에 장착되는 대부분의 메모리 카드와
수많은 컴퓨터 시스템에 쓰이는 파일 시스템의 종류입니다.
하지만 너무 단순한 자료구조 탓에 작은파일이 여러개 있을경우 공간활용을 제대로 하지 못한다는 단점이 있습니다.
용량이 계속 커지고 있으며 높은 호환성을 갖습니다.
2.NTFS : New Technology File System
Windows NT 계열의 새로운 파일 시스템으로 기존의 FAT구조를 대체하기 위해 만들어졌습니다. 시스템 고장 및 손상 시 디스크 볼륨을 재구성하여 일관성있는 상태로 복구가 가능하여 안정성이 높고 보안성도 FAT보다 향상된 파일 시스템입니다.
3.EXT:EXTended file system
확장 파일 시스템의 준말로 리눅스의 기본 파일 시스템입니다.
리눅스 운영체제를 목표로 만들어진 첫 번째 파일 시스템
Remy Card가 MFS(MINIX FIle System)의 한계를 극복하기 위해 개발
1992년 4월에 구현되어 LInux 0.96c에 추가
성능을 향상시키면서 시리즈로 출시되고 있는데, 기본으로 사용되던 2차 확장 파일 시스템 EXT2를 완벽하게 호환하는 EXT와 EXT4가 있습니다.
EXT3부터 큰 규모의 디렉토리를 접근하기 위해 해쉬를 통해 접근하는 H-tree를 사용하여 데이터 검색이 보다 용이해졌고, EXT4는 지금까지 중 가장 큰 초대형 파일 시스템입니다.
- EXT2(Second Extended File System)
FSCK(File System Check)이라는 파일시스템 검사 및 복구 기능기원
최대 파일 크기를 2GB까지 지원하고 최대 파일 시스템 크기를 4TB까지 지원
서브디렉토리 개수 제한 32,768개
- EXT3(Extended File System 3)
저널링 기술을 도입하여 빠르고 안정적인 복구가 가능
최대 파일 크기를 2TB까지 지원하고 최대 파일 시스템 크기를 16TB까지 지원
EXT2와 호환 가능
- EXT4(Extended File System 4)
지연된 할당(Allocate-On-Flush) 기능을 제공
하위 호환성이 높다.
최대크기는 16TiB(테비바이트) 이며, 최대파일크기는 2TiB를 지원
4.APFS
애플에서 2016년 발표한 HFS+ 대체 파일 시스템입니다.
애플의 모든 플랫폼(아이폰 아이패드 애플tv, 애플워치)에서 작동합니다.
암호화에 중점을 두고 개발되었습니다.
디스크 전체를 한 개의 볼륨인 컨테이너 디스크로 포맷한 후 그 컨테이너 볼륨 안에 APFS 볼륨을 생성하는 방식입니다.
MacOS Mojave 부터는 HFS+로 포맷하더라도 APFS 볼륨으로 자동으롤 포맷되기 때문에 굳이 HFS를 선택할 필요가 없습니다.
모든 디렉토리는 최상위 디렉토리인 root가 하위로 만들어집니다.
🌱root
┣ 📦bin
┣ 📦home
┃ ┣ 📂soryeongk
┃ ┃ ┣ 📂바탕화면
┃ ┃ ┣ 📂어쩌구 폴더
┃ ┃ ┗ 📜index.html
┣ 📦lib
┣ 📦user
┣ 📦boot
┗ 📦etc
표준 스트림의 흐름을 바꾸어 일반적인 표준스트림(표준 입력및 출력 그리고 오류)를 사용하지 않고 다른 경로인 파일로 재지정하는 것을 뜻합니다.
< 과 > 을 이용하여 사용 가능합니다.
표준스트림
- stdin : 표준 입력 - 키보드 입력
- stdout : 표준 출력 - 화면 출력 (cat, ls)
- stderr : 표준 오류 출력
예시)
ls > exitedFilename.txt 을 입력하면,
ls명령 수행의 결과를 콘솔에 찍어주는 것 대신, exitedFilename.txt에 저장합니다. 기존의 내용을 대체하므로 주의해야합니다.
만약 존재하는 파일이 없는 경우에는 >대신 >>을 사용하여 ls >> newFilename.txt처럼 입력하면 됩니다. 만약 newFilename.txt가 이미 존재하는 파일이라면 기존의 내용은 지우지 않고, 마지막 줄에 이어서 작성합니다.
file redirection과 유사한 pipe는 |로 명령을 구분합니다.
여러가지 복잡한 명령어를 병렬로 작성할 수 있습니다.
가령, 이상에서 file redirection으로 작성한
python add_3.py < input_num.txt >> result.txt의 내용을
piping command로도 똑같이 수행할 수 있습니다.
수행의 과정은 다음과 같습니다.
정답: cat input_num.txt | python add_3.py >> result.txt
UNIX 호환 시스템에서 사용 가능한 가볍고 간단한 텍스트 에디터로, 손쉽게 파일 내용 수정이 가능합니다.
단축키 | 기능 | 단축키 | 기능 |
---|---|---|---|
ctrl + o | 저장 | Alt + 6 | 복사 |
ctrl + x | 종료 | ctrl + u | 붙여넣기 |
ctrl + w | 검색 | ctrl + ^ | 여러 줄 선택 |
물리적인 저장장치(보조기억장치)를 디렉토리(폴더)에 연결시켜주는 것을 말합니다. windows에서는 하드, USB 등의 보조기억장치를 연결하면 자동으로 디렉토리(폴더)에 연결됩니다. USB를 꽂자마자 사용할 수 있게 되며,
이것을 Plug and Play 즉, PnP라고 말합니다.
하지만 리눅스의 경우 PnP 기능이 작동하지 않습니다.
직접 연결을 위해 보조기억장치를 설치했을 때
mount 작업을 수행해야 합니다.
명령어 기본형태: mount [option][device] [directory]
device의 내용을 directory에 연결해줍니다.
device의 파일 시스템 명을 알아야하는데, 파일 시스템 명은 fdisk -l로 확인할 수 있습니다.
options
프로세스란, 시스템에서 메모리에 적재되어 실행되고 있는 모든 프로그램을 말합니다.
프로그램은 코딩을 통해 만든 코딩(명령어)의 집합체이고, 프로세스는 프로그램이 실행되는 과정 중에 현 상황을 말합니다. 즉, 실행되고 있는 프로그램이 곧 프로세스이며, RAM에 저장됩니다. 한 프로그램 내에서 여러 프로세스가 생성된다면 이를 멀티 프로세싱이라고 말합니다. 이들은 모두 운영체제에 의해 관리됩니다.
PID:
모든 프로세스는 고유한 PID를 가지고 있으며, 1번은 init 프로세스, 2번은 kthreadd(kernel thread demon) 프로세스가 실행됩니다.
init 프로세스는 나머지 모든 시스템 프로세스의 부모 프로세스로, kthreadd가 아닌 다른 모든 프로세스들은 모두 init 프로세스를 fork하여 생성된 것입니다. 또한, kthreadd는 이 후에 실행되는 모든 프로세스의 부모 프로세스입니다.
프로세스 메모리는 크게 커널 주소 공간(kernel space)와
사용자 주소 공간으로 분리할 수 있으며, 이때 kernel 부분은 사용자가 접근할 수 없습니다.
우리가 사용하는 공간은 stack, heap, data, text 4개의 영역으로 나뉘는데, argv, argc, env, etc 파일들 역시 stack의 일부입니다.
- 프로세스 목록 보기
ps [option]
- 프로세스 종료
kill [option][PID]
리눅스에서 터미널을 통해 작동하는 거의 모든 명령어는 foreground에서 작동합니다. 즉, 우리가 지금 보고 있는 화면에서 그대로 작동한다는 것입니다. 하지만, &명령을 통해 background를 사용하여 보이지 않는 곳에서도 돌아가게 할 수 있습니다.
job은 그 백그라운드로 실행되는 작업을 보여주고 효율적으로 사용할 수 있게 해주는 명령어입니다. job은 프로세스와 달리 터미널 명령을 통한 작업만을 의미하며, 각 터미널마다 job은 따로 존재합니다. 즉, 터미널이 종료되면 job도 함께 종료되는 의존적 형태입니다.
명령어 뒤에 &를 붙이면 백그라운드에서 실행이 되는데, 이때의 목록은 jobs를 통해 확인할 수 있습니다. 프로세스와 마찬가지로 ps 명령어로 해당 프로세스의 PID를 알아내어 종료하는 것도 가능하고, 옵션 없이 kill %[job 번호]를 통해서도 종료가 가능합니다.
예를 들어, 잠시 멈춤을 의미하는 sleep 명령어를 백그라운드에서 실행하고 종료하는 과정은 다음과 같습니다.
$ sleep 500 &
$ sleep 700 &
$ jobs
이때의 결과 화면은 다음과 같습니다.
[1] - 실행중 sleep 500 &
[2] + 실행중 sleep 700 &
이때 sleep 500 & 종료할 때는 kill %1을 입력하면 됩니다.
지정된 시간에 1회 실행되는 작업 예약 명령어로 시간이 되면 수행되고 작업 리스트에서 사라집니다.
at [option][time] [date][+증가시간]
-m: 출력 결과와 함께 작업이 완료될 때 사용자에게 메일을 보냄(결과가 없더라도 메일을 보냄)
-f: 특정 스크립트 파일 등을 실행할 때 사용
at now + 3 hours -f soryeongk.sh은 지금으로부터 3시간 뒤 soryeongk.sh를 실행하라는 의미
-l: 예약된 작업 목록을 출력하며, atq 명령어와 같은 동작을 수행
-v: 작업이 수행될 정확한 시간을 출력
-d: 예약된 작업을 삭제하며, atrm 명령어롸 같은 동작을 수행
crontab은 at과는 달리 주기적으로 예약을 실행할 수 있습니다. crontab을 사용한 개인 프로젝트에서 예시를 더 확인할 수 있습니다. 당시 리눅스를 공부하면서 정리한 내용이기에 미흡한 점이 많습니다. ಥ_ಥ
crontab [option][option에 맞는 text]
-l: 현재 계정의 설정된 crontab 정보를 보여줌
-e: 현재 계정의 crontab 정보를 수정
-r: 현재 계정의 crontab 정보를 모두 삭제
-u: 특정 사용자의 crontab 정보를 다루게 해주며 root 권한 필요해 sudo와 함께 사용
Secure SHell의 준말로 네트워크를 통해 다른 컴퓨터에 접근하거나 그 컴퓨터에서 명령을 실행할 수 있도록 해주는 프로토콜입니다. 즉, SSH를 통해 다른 컴퓨터에서 리눅스에 접속하여 명령어 및 프로그램을 실행할 수 있습니다.
(예시: [AWS] 아마존 가상 서버에서 Jupyter Notebook 사용하기)
Telnet: SSH 이전에 다른 컴퓨터에 접근하거나 명령을 실행하는 등을 할 수 있도록 해주는 프로토콜이었으나, 보안적으로 매우 치명적인 결함이 존재.
패킷 데이터가 암호화되어있지 않아서 도중에 탈취될 경우 비밀번호 등의 민감정보가 노출되는.. 치명적인..! 때문에 SSH에는 데이터가 암호화되어 있음.
우분투에서는 openssh라는 패키지를 통해 SSH를 구동할 수 있는데, 우분투 설치 후에는 기본적으로 openssh-client만이 설치되어 있습니다. 다른 컴퓨터에서 우분투에 접속하려면 openssh-server 패키지를 설치해야 합니다.
dpkg -l | grep openssh 명령어를 통해 openssh 설치 여부 확인이 가능합니다. 또한, sudo apt-get install open-ssh-server를 통해 설치가 가능합니다.
sudo service ssh start
service --status-all | grep +
종료 시에는 start 대신 stop을, 재시작에는 restart을 입력하면 됩니다.
이상의 명령어를 차례로 입력하면 리스팅이 되는데, ssh만 보고 싶은 경우에는 service --status-all | grep ssh를 입력하면 됩니다.
ssh를 사용하기 위해서는 다른 컴퓨터에서 해당 컴퓨터에 어떤 포트로 접속할지를 알아야 합니다. 이를 위해 sudo netstat -antp 명령어를 통해 실행하고 있는 ssh의 포트를 확인할 수 있습니다. PID와 함께 현재 실행중인 프로세스들과 포트를 확인할 수 있습니다.
ssh [서버 아이디] @[IP || 서버이름 || 도메인을 입력하면 해당 서버로의 접속이 가능합니다.