|
|
😎 하이퍼바이저(hypervisor)는 가상 머신(VM)을 생성하고 실행하는 프로세스로 메모리 및 처리와 같은 단일 호스트 컴퓨터의 리소스를 가상으로 공유하여 호스트 컴퓨터가 여러 게스트 가상 머신을 지원할 수 있도록 한다.
대표적인 프로그램 : VMware, VirtualBox
| VMware : https://www.vmware.com/kr.html | VirtualBox : https://www.virtualbox.org/ |
😎 WSL(Windows Subsystem for Linux)은 윈도우의 가상화 기능을 활용해서 윈도우 위에서 리눅스를 사용할 수 있게 해wns다. 이제 가상머신을 따로 구성하지 않고도, 윈도우에서 리눅스를 사용할 수 있다. 게다가 단순히 가상머신으로 리눅스를 사용할 수 있는 것이 아니라, 윈도우 시스템과 통합되어 마치 하나의 머신처럼 자연스럽게 리눅스를 활용하는 것이 가능해 졌다.
윈도우 10과 윈도우 11을 지원하며 윈도우 모든 에디션에서 사용할 수 있다.
| * Windows 10/11 Professional / Education / Enterprise 에디션 - WSL2 기반 Docker Engine 사용 가능 - Hyper-V 기반 Docker Engine 사용 가능 * Windows 10/11 Home 에디션 - WSL2 기반 Docker Engine 사용 가능 참고로 Home 에디션의 경우 Docker를 사용하려면 WSL2가 필수이며, Pro 사용자의 경우 WSL2를 사용하지 않더라도 Hyper-V 기반 가상화를 사용해 Docker Engine을 사용하는 것이 가능하다. |
😎 Linux 설치 프로그램
1) ubuntu : https://ubuntu.com/download
Ubuntu에서 자바 실습 환경 구축 https://cafe.daum.net/flowlife/9A8Q/206
2) centos : https://www.centos.org/
vmware에 centos 설치 하기 https://jhnyang.tistory.com/280
참고 : centos8버전의 공식 지원은 종료 되었으며, centos7버전은 2024년까지만 공식 지원이 된다고 알려 졌다.
😎 우분투 명령어 정리
1. Debian
데비안 프로젝트에서 만들어 배포하는 공개 운영 체제. 용도 : 고급서버용
★ 장점 : 현존하는 안정적인 최고의 리눅스 배포판으로 포함하고 있는 프로그램의 규모가 방대함.
1-1. Ubuntu
우분투는 Debian 리눅스를 기반으로 제작된 리눅스. 용도 : 데스크탑용, 서버용, 개발용
★ 장점 : 리눅스를 처음 접해도 설치가 간단. 파티션을 설정하는 것만 신경쓰면 클릭 몇 번으로 설치가 가능.
Unity라는 독자적인 데스크톱 환경을 제공한다. 별다른 설정이 필요없을 정도로 간결한 데스크탑 환경.
1-2. Linux Mint
리눅스민트는 우분투를 기반으로 제작된 리눅스. 용도 : 데스크탑용
★ 장점 : 우분투에 비해 여러 데스크탑 환경을 제공함으로써 조금 더 화려한 효과.
사용자 편의를 위한 소소한 기능들이 많이 있다. 우분투의 장점을 가지나 유니티는 존재하지 않음.
2. Redhat 상용으로 서버의 안전성과 7년 간의 지속적인 업데이트를 해주는 리눅스. 문제가 생기면 컴플레인이나, 금전적인 손실이 발생하는 기업의 경우, 또는 관리자가 리눅스에 익숙하지 않아 일정한 도움을 받아야 하는 경우 등에서 많이 사용한다.
용도 : 기업 서버용, 데스크탑용
★ 장점 : 안정성이 뛰어난 기업용 시스템.
2-1. CentOS 유료 리눅스인 레드햇 엔터프라이즈를 그대로 빌드하여 상표권만 제거한 리눅스. 안정적이며 레드햇의 기술을 무료로 사용할 수 있다.
용도 : 일반 서버용, 기업 서버용, 개발용
2-2. Fedora 페도라는 레드햇의 선행 프로젝트 리눅스. 유료로 판매되는 레드햇에 들어갈 기능을 테스트하는 성격이 강함.
용도 : 개발용, 연구용
★ 장점 : 레드햇에서 개발되는 기술이 제일 먼저 탑재되므로 최신 기술을 체험할 수 있다.
Cgroup : 리눅스에서 컨테이너를 구성하는 3가지 주요 기술 중 하나로, 프로세스들이 사용하는 시스템 자원의 사용정보를 수집 및 제한 시키는 커널의 기능이다. 다시말해 cgroup은 단일 또는 태스크 단위의 프로세스 그룹에 대한 자원 할당을 제어하는 커널 모듈이다. Cgroup은 Control group으로 처음 개발되었을 때는 group이 아니라 container란 용어를 사용했었으나, container란 용어는 너무 많은 의미를 내포하고 있다고 판단하여 지금의 group이만 이름으로 변경되었다.
cgroup 사용 가능한 서브시스템 :
| CPU | 스케줄러를 이용해 cgroup에 속한 프로세스의 CPU 사용시간을 제어 |
| Memory | cgroup에 속한 프로세스의 메모리 사용량 제어 |
| freezer | cgroup의 작업을 일시 중지하거나 다시 시작 |
| blkio | cgroup에 블록 장치에 대한 I/O 제한을 설정 |
| net_cls | 트래픽 컨트롤러(tc)가 특정 cgroup 적업에서 발생하는 패킷을 식별하게 하는 네트워크 패킷 태그를 지정 |
| cpuacct | cgoup이 사용한 CPU자원 보고서 생성 |
| cpuset | 개별 CPU 메모리 노드를 cgroup에 할당 |
| ns | namespace 서브시스템 |
| devices | cgroup의 작업 단위로, 장치에 대한 엑세스를 허용하거나 거부 |
리눅스 기본 편집기 vi/vim 명령어
https://inpages.tistory.com/124
하나 더 nano : 권장
| 참고 : Windows(호스트) ↔ VMware Ubuntu(게스트) 사이에서 텍스트 복사/붙여넣기를 하려면 핵심은 Ubuntu에 open-vm-tools-desktop 설치 + VMware의 Copy/Paste 허용입니다. 1. Ubuntu에 VMware Tools 설치 Ubuntu 터미널에서 실행합니다. sudo apt update sudo apt install -y open-vm-tools open-vm-tools-desktop 설치 후 재부팅합니다. sudo reboot 2. VMware에서 복붙 기능 활성화 Ubuntu VM을 완전히 종료한 다음 VMware Workstation에서: VM → Settings → Options → Guest Isolation 에서 다음을 체크합니다. ☑ Enable copy and paste ☑ Enable drag and drop 그리고 Ubuntu를 다시 실행합니다. 이제 복붙이 가능해집니다. |
---- 리눅스에서 사용되는 기본 명령어 ----
~$ uname -a 커널 정보 모두 보기
~$ ls : 디렉토리 내의 파일이나 디렉토리 리스트를 보여준다
>>사용법 : ls (옵션)
option
-a : .(마침표)로 시작되는 파일을 숨기지 않음(숨긴 파일을 보여줌)
-c : 수정된 날짜의 정렬로 보여줌
-l : 길게 열거된 형식으로 사용함
-o : group 정보를 제외한 리스트 형식을 보여줌
-r : 정렬된 역순으로 보여줌
-s : 블록 형태로 각 파일의 크기를 보여줌
-S(대문자) : 파일 사이즈 순서로 정렬함
-t : 수정된 날짜 순서로 정렬함
ls -al : 숨겨진 파일을 포함하여 길게 + 길게 열거된 형식으로 사용
~$ whoami : 현재 접속한 계정명 출력.
~$ pwd : 현재 경로 보기.
~$ mkdir : 디렉토리를 만든다
>>사용법 : mkdir (옵션)[디렉토리]
option
-m : 퍼미션 설정을 함께함.
-v : 작업된 내용을 보여준다.
~$ cd : 디렉토리 이동(DOS의 CD와 같음) 사용할 때는 cd 다음에 스페이스를 넣어주자.
1) cd (root로 이동)
2) cd ..(상위 디렉토리로 이동)
3) cd /mnt/hgfs/shared (원하는 디렉토리로 이동)
~$ cp : 파일을 복사 한다.
>>사용법 : cp (옵션) [복사할 파일명 혹은 디렉토리] [대상파일]
1) cp main.c /mnt/hgfs/shared 대상 파일을 대상 디렉토리로
2) cp /mnt/hgfs/shared main.c 대상 디렉토리의 파일을 현재 디렉토리 대상으로
option
-a : -dpR의 기능을 합한 것
-d : 연결을 보존함
-p : 속성을 보존함
-l : 복사를 하는 대신 연결함
-s : 복사하는 대신 특정 링크를 만든다
-u : 새롭게 갱신된 파일만 복사
-v : 작업된 내용을 보여줌
~$ rm : 파일을 삭제한다.
>>사용법 : rm (옵션) [삭제할 파일명 혹은 디렉토리]
option
-f : 무조건 지움. 아무런 메시지가 나타나지 않음.
-i : 어떤 작업을 하기 전에 무조건 메시지를 묻는다.
-r : 파일을 포함하고 있는 디렉토리도 삭제한다 / 물어본다.
-v : 작업된 내용을 보여준다.
~$ mv : 파일 혹은 디렉토리를 이동하거나 이름을 변경한다.
>>사용법 : mv [소스 디렉토리 혹은 파일] [신규 디렉토리 혹은 파일]
mv file1 ~ 이렇게 하면 현재 머물고 있는 디렉토리 내의 file1을 내 홈 디렉토리로 옮긴다. 물결 표시는 로그인한 유저의 홈 디렉토리를 의미한다. 옮길 목적지 디렉토리가 없다면 디렉토리를 만들어서 옮긴다.
~$ du : 파일 혹은 디렉토리의 크기를 보여줌
>>사용법 : du (옵션) [소스 디렉토리 혹은 파일]
option
-a : 디렉토리가 아닌 파일의 쓰여진 줄 수를 출력.
-b : bytes의 크기로 출력.
-c : 각 파일 및 디렉토리 내부의 파일 각각의 크기를 출력.
-l : 파일 혹은 디렉토리의 셀 수 있는 크기를 출력.
-s : 합계를 출력.
~$ find : 파일이나 디렉토리를 찾는 데 사용하는 명령어.
* 기본 구조 : find [탐색 경로] [조건] [실행할 작업]
예)
- 현재 디렉토리에서 모든 파일 찾기 : find .
- 이름으로 파일 찾기 : find . -name "파일이름"
# 예: find . -name "hello.txt"
- 대소문자 구분 없이 이름 찾기 : find . -iname "hello.txt"
- 특정 확장자 파일 찾기 : find . -name "*.log"
- 디렉토리만 찾기 : find . -type d
- 파일만 찾기 : find . -type f
- 크기 기준으로 찾기 :
find . -size +10M # 10MB보다 큰 파일
find . -size -100k # 100KB보다 작은 파일
~$ grep : 입력으로 전달된 파일의 내용에서 특정 문자열을 찾고자할 때 사용하는 명령어
$ grep [OPTION] [PATTERN] [FILE]
예)
$ cat test.txt
PATTERNS is one or patterns separated by newline characters.
And grep prints each line that matches a pattern.
$ grep "patterns" test.txt
PATTERNS is one or patterns separated by newline characters.
And grep prints each line that matches a pattern.
$ grep -n step[0-9] test.txt 정규표현식을 사용할 수 있다.
$ grep . /etc/*-release 리눅스 종류 및 버전 확인
IP정보를 확인하는 방법 3가지
1) $ ifconfig : 일반적으로 쓰이는 방식
$ sudo apt install net-tools : 위 명령이 안 먹으면 먼저 설치
2) $ ip addr : 네트워크 인터페이스와 IP주소의 바인딩 상태를 알 수 있다.
3) $ hostname -i : 현 host 기기가 사용하고 있는 ip 주소만 나온다.
~$ whereis : 어떤 프로그램이 인스톨되어 있는지를 쉽게 알아보는 명령어다. 예를 들어 자바가 설치되어 있는지 알고 싶다면, whereis java 라고 하면 java 의 위치를 알려 준다. 아무 것도 안 나오면 인스톨이 안 되어 있는 것이다. 비슷한 명령으로 which가 있다. which java 처럼 사용한다.
~$ chmod : Linux/Unix에서 파일이나 디렉토리의 권한(퍼미션)을 설정하는 명령어.
사용법 : >> chmod (옵션) [디렉토리 혹은 파일]
option
-c : 퍼미션 설정 시 작업하는 내용을 출력함.
-v : 작업된 내용을 보여줌.
* 참고 ls -al의 명령어를 사용하면 -rwxr--r--와 같이 파일 앞에 속성값이 출력된다.
* 파일 권한 3가지
권한 의미 기호
-읽기 읽을 수 있음 r (read)
-쓰기 수정/삭제 가능 w (write)
-실행 실행 가능 (스크립트/프로그램) x (execute)
* 사용자 그룹 3가지
u : owner (파일 소유자) 첫 번째
g : group (같은 그룹 사용자) 두 번째
o : others (기타 사용자) 세 번째
a : all (모든 사용자) 전체
*사용 방법 예1
> chmod u+x script.sh # 소유자에게 실행 권한 추가
> chmod g-w file.txt # 그룹 사용자에게 쓰기 권한 제거
> chmod o=r file.txt # 기타 사용자에게 읽기 권한만 부여
> chmod a+x runme # 모두에게 실행 권한 추가
* 사용 방법 예2 : 숫자 모드 (더 자주 사용) ==> r : 4, w : 2, x :1
숫자를 더해서 사용: 예) rw- → 4+2=6
예) chmod 755 hello.sh
→ 권한 해석: 7 → rwx (소유자: 읽기, 쓰기, 실행)
5 → r-x (그룹: 읽기, 실행)
5 → r-x (기타: 읽기, 실행)
퍼미션 (Permission)
퍼미션은 이름처럼 '허가'를 뜻한다. 파일이나 디렉토리를 누가 볼 수 있으며 누가 새로운 내용을 기록할 수 있으며 또 실행할 수 있는지 설정하는 것이다. 유닉스(리눅스)에서는 개별 파일 별로 퍼미션을 설정할 수 있다. 퍼미션은 총 10개의 알파벳으로 이뤄져 있다. 맨 첫 번째 자리는 파일인지, 디렉토리인지를 나타내는 것으로 퍼미션과 직접적인 관계가 없다. 첫 번째 자리는 파일인 경우 -, 디렉토리인 경우 d로 표시되어 있다. 그 다음부터 나오는 9개의 알파벳이 해당 파일 또는 디렉토리의 퍼미션을 나타낸다.
퍼미션에는 크게 세 종류가 있다. r은 "read"를 뜻하고, w는 "write", x는 "execute"을 뜻한다. 읽기 허가, 쓰기 허가, 실행 허가다. 퍼미션을 나타내는 9개의 알파벳은 3개씩 끊어서 각각 "user", "group", "others"의 퍼미션을 나타낸다.
~$ passwd : 자신의 패스워드 바꾸기
>>사용법 : passwd
다음과 같이 진행된다
~$ passwd
~$ Changing password for user Your_ID
~$ (current) UNIX password : (현재 사용중인 비밀번호)
~$ New UNIX password : (새로 갱신할 비밀번호)
~$ Retype new UNIX password : (확인을 위한 재입력)
* 주의 사항 : 새로 비밀번호를 입력하는 것은 특수부호가 포함된 8자 이상의 어려운 비밀번호이어야 함.
~$ echo : 텍스트의 라인을 보여 줌.
>>사용법 : echo (옵션) [텍스트]
option
-d : 새로운 라인의 끝을 출력하지 않는다.
-e : 아래의 option(\문자)의 내용을 가능하게 한다.
\b : backspace
\\ : 백슬래쉬를 사용 할 수 있도록 한다.
~$ su : 수퍼유저, 즉 root 권한으로 진행하는 명령어다. 일반 유저로 로그인했다가 root로 작업해야 할 필요가 있을 때 사용한다. 이 명령어를 치면 password: 라는 메시지가 뜨면서 root의 암호를 묻는다. 반대로, 현재 root로 있는 상태인데 다른 유저로 돌아가고 싶다면 su 유저명 하면 된다.
우분투에서 사용자 계정 목록 확인 https://overcode.tistory.com/entry/%EB%A6%AC%EB%88%85%EC%8A%A4-%EC%82%AC%EC%9A%A9%EC%9E%90-%EB%AA%A9%EB%A1%9D-%ED%99%95%EC%9D%B8-Linux-User-List
참고 : tab 키, CTRL-u, CTRL - w
굳이 명령어를 모두 타이핑하지 않아도 명령어를 자동완성(auto completion)하는 방법이 있다. 명령어의 처음 몇 자를 친 다음 [tab키]를 누르면 된다.
명령어를 타이핑하다가 다 지우고 다시 시작하려면 백 스페이스 키를 여러 번 누를 필요 없이 [CTRL-u]를 누르면 된다. 비슷한 것으로 한 단어만 다시 지우고 싶을 때에는 [CTRL- w]입니다. "u"는 "undo", "w"는 "word"라고 생각하면 쉽게 외울 수 있다.
압축, 해제 관련 : CentOS와 Ubuntu에서 압축 파일을 처리하는 명령어는 대부분 비슷하지만, 일부 명령어는 패키지가 기본적으로 설치되어 있지 않을 수 있고, 설치 방법이 조금 다를 수 있다. 두 시스템 모두 다양한 압축 포맷을 지원하며, 기본적으로 제공되는 도구들은 아래와 같다.
* CentOS와 Ubuntu에서 사용하는 주요 압축/해제 명령어 *
tar: tar 아카이브 생성 및 해제 (gzip, bzip2, xz와 함께 사용 가능)
| # tar.gz 압축 파일 생성 (gzip 사용) tar -czvf archive.tar.gz directory/ # tar.gz 압축 해제 tar -xzvf archive.tar.gz | # tar.bz2 압축 파일 생성 (bzip2 사용) tar -cjvf archive.tar.bz2 directory/ # tar.bz2 압축 해제 tar -xjvf archive.tar.bz2 | # tar.xz 압축 파일 생성 (xz 사용) tar -cJvf archive.tar.xz directory/ # tar.xz 압축 해제 tar -xJvf archive.tar.xz gzip/gunzip: 파일을 gzip 형식으로 압축/해제 |
| # 파일 압축 gzip filename # 파일 압축 해제 gunzip filename.gz bzip2/bunzip2: 파일을 bzip2 형식으로 압축/해제 | # 파일 압축 bzip2 filename # 파일 압축 해제 bunzip2 filename.bz2 xz/unxz: 파일을 xz 형식으로 압축/해제 | # 파일 압축 zip archive.zip file1 file2 # 디렉토리 압축 zip -r archive.zip directory/ |
| # 압축 해제 unzip archive.zip 패키지 설치: 기본적으로 설치되어 있지 않을 수 있습니다. - CentOS: sudo yum install zip unzip - Ubuntu: sudo apt install zip unzip rar/unrar: RAR 형식으로 파일 압축/해제 (RAR은 기본 설치되지 않음) | # 파일 압축 (rar 사용) rar a archive.rar file1 file2 # 압축 해제 (unrar 사용) unrar x archive.rar 패키지 설치: - CentOS: sudo yum install epel-release && sudo yum install rar unrar - Ubuntu: sudo apt install rar unrar |
주요 차이점:
- 패키지 관리: 두 배포판 모두 압축 관련 도구들이 기본적으로 설치된 경우가 많지만, 특정 도구는 패키지 관리자를 통해 설치해야 할 수도 있다. 예를 들어, zip과 unzip 명령어는 CentOS나 Ubuntu에 기본적으로 설치되지 않을 수 있다.
- 패키지 설치 명령어: CentOS에서는 yum(또는 dnf), Ubuntu에서는 apt 명령어를 사용하여 필요한 도구를 설치한다.
- 기본 설치된 도구: Ubuntu는 일반적으로 더 많은 도구가 기본 설치되어 있지만, CentOS에서는 필요한 도구를 추가로 설치해야 할 가능성이 있다.
😎 셸(shell) 이란?
운영체제를 위한 명령 해석 프로그램으로, 사용자에게 키보드로 명령을 받아 OS가 해당 명령을 수행하도록 하는 프로그램이다. 즉, 터미널에 입력한 명령을 해석하고 관리하는 프로그램을 셸(shell)이라고 한다.
shell의 종류
| Shell 이름 | 실행 명령 | 설 명 |
| Bourne Shell | sh | 벨 연구소의 스티브 본 (Stephen Bourne)이 개발, 많은 셸 스크립트의 기반이 되는 shell |
| C Shell | csh | C언어 구문과 유사, Bourne Shell 을 확장하여 히스토리, 작업제어, 엘리어스 등 기능을 추가하여 개발자들에게 유용한 기능들을 제공한다. |
| TC Schell | tcsh | C Shell 에 명령 행 완성 과 명령 행 편집 기능을 추가 |
| Korn Shell | ksh | Bourne Shell 가 호환되며 C Shell 의 많은 기능을 포함, Unix 계열에서 많이 사용된다. |
| Bourne Again Shell (bash) | bash | 리눅스에서 가장 많이 사용되는 Shell로 Bourne Shell을 토대로 C Shell과 Korn Shell 의 기능들을 통합시켜 개발되었다. |
Shell 확인 : env | grep SHELL 또는 echo $SHELL