[TIL] 리눅스

Narastro·2021년 7월 20일
0

TIL

목록 보기
2/16
post-thumbnail

🎈 리눅스에 대해 알아보자

다양한 쉘 종류

  • bash ( Bourne-Again Shell )

프롬프트 : #

실행파일은 /bin/bash

Bourne again shell은 최초로 개발된 쉘인 Bourne shell의 변종이라 할 수 있다.
리눅스에서 가장 많이 사용되는 IEEE POSIX 호환이며 Borune shell과 호환되는 쉘로서
GNU 프로젝트에 의해 만들어지고 배포되고 있다. 명령행 편집 기능을 제공한다.

  • sh ( Bourne Shell )

프롬프트 : $

본 쉘 보다는 개발된 C쉘이나 콘 쉘과 기능적인 면을 비교해 보면 본 쉘에 미흡한 점이 있다. 그 중 가장 큰 단점은 상호 대화형(Interactive)

방식을 취하고 있지 않다는 점이다. 이러한 상호 대화형 방식을 사용하고자 한다면 다른 쉘로 작업하는 것이 좋을 것이다.

  • csh ( C 프로그램 스타일의 Shell )

프롬프트 : %

버클리 캘리포니아 대학에서 개발된 프로그래머들에게 적합한 shell이다. ( csh는 C쉘이며 sh는 본 쉘이다 )
대화형 사용법에서는 Bourne shell과 대부분 호환되지만 전혀 다른 프로그래밍 인터페이스를 가지고 있고, 히스토리 대체라는 복잡한 기능으로 대신하고 있지만 명령행 편집 기능은 제공하지 않는다.

  • ksh ( Korn Shell )

프롬프트 : $

일반적으로 유닉스에서 가장 많이 사용되고 있는 shell이며 Bourne shell에 처음으로 현대적 인 shell 기능(C shell로부터 차용한 것이다.)을 도입한 shell 이다. Bourne shell과 호환되고, 명령행 편집 기능을 제공한다.

  • zsh

프롬프트 : %

Korn Shell과 매우 유사한 셸이지만 Korn Shell보다 더 많고 유용한 기능 등을 추가하여 개선시킨 것이다.

  • tc Shell

프롬프트 : >

코넬 대학에서 C Shell 수정본에 Korn Shell의 기능을 포함하여 개발된 셸이다. 95%의 C Shell과 5%의 새로운 기능이 추가되어 만들어졌다.

출처: https://unabated.tistory.com/entry/LinuxUnix쉘-Shell-의-정의와-종류 [랄라라]

리눅스 터미널 명령어들

  • cd : 작업 디렉토리 변경 (ex. cd .. : 상위 디렉토리로 이동)
  • mv : 파일 이동 (ex. mv filename1 dir/filename2 : dir에 filename2이름을 갖는 파일로 이동)
  • mkdir : 디렉토리 생성
  • rm : 파일 삭제
  • rmdir : 디렉토리 삭제
  • cp : 파일 복사 (ex. cp filename dir : filename을 갖는 file을 dir로 복사)

Ubuntu란?

리눅스 배경지식

리눅스는 유닉스(Unix)를 기반으로 개발된 운영체제이다. 1990년대 초 GNU 프로젝트는 운영체제에 필요한 라이브러리, 컴파일러, 텍스트 편집기, 유닉스 쉘 등을 만들어냈다. 그러나 장치 드라이버, 커널 등이 완성되지 않았는데 1991년 핀란드의 리누스 토발즈(Linus Torvalds)가 리눅스 커널을 발표하게 됨으로써 통합되어 GNU/Linux라는 완전한 운영체제가 탄생하게 되었다.

리눅스의 특징

  • 유닉스 기반
    기존의 유닉스는 높은 하드웨어 스펙을 기반으로 복잡하고 큰 네트워크 시스템을 위해 만들어졌다. 여기에 리눅스는 커널과 명령어 체계를 바꾸어 일반인들이 사용하기 쉽게 만들었다.

  • 다중 사용자와 멀티 태스킹을 지원
    리눅스는 다중 사용자와 멀티 태스킹을 지원한다. 이 때문에 보안성에 따라 파일을 관리하기 용이하므로 서버에서 많이 쓰인다.

  • 자유 소프트웨어
    리눅스는 오픈소스 기반이다. 이것이 다른 운영체제와 가장 큰 차이점이며 이러한 리눅스 커널과 소프트웨어 등을 모아서 패키지 관리 프로그램으로 구성한 것을 리눅스 배포판이라 한다.

우분투(Ubuntu)란?

우분투
우분투는 고유한 데스크탑 환경을 사용하는 리눅스 배포판 중에 하나이다.

우분투의 특징

  • 개인용, 데스크탑 환경에 최적화
    대부분의 리눅스 배포판들이 서버용으로 사용되고 있는 반면, 우분투는 개인 사용자와 데스크탑 환경에 최적화 되도록 사용자 편의적인 특징이 있다.

  • 자유 소프트웨어에 기반
    이 역시 오픈소스를 기반으로 하며 누구나 무료로 다운 및 사용이 가능하다.

🧀 VirtualBox란?

가상머신이란?

하드웨어를 소프트웨어적으로 구현해서 그 위에서 운영체제가 작동하도록하는 기술

가상머신을 사용하는 이유

  • 다른 운영체제를 사용해야 하는 경우(맥OS에서 윈도우, 윈도우에서 리눅스)
  • 독립된 작업공간이 필요한 경우 (바이러스 회피, 백업)
  • 하나의 머신에서 여러명에게 운영체제 환경을 제공하는 경우

VirtualBox란?

오라클에서 만든 오픈소스 가상머신 솔루션이다.

WSL이랑 차이는?

  • WSL 1
    Windows10 운영체제에서 리눅스 운영체제의 쉘,시스템을 사용할 수 있도록 지원해주는 기능이다. 개발,코딩,테스트등 가상화를 통해 리눅스를 만들어서 테스트하는 불편함을 줄여주는 좋은기능이다.

  • WSL 2
    WSL2는 1과 다르게 Hyper-V를 사용해서 경량 VM(가상머신)기술을 사용한다. 따라서 기존 가상머신처럼 100 % 리눅스 커널과 호환되며 커널은 마이크로소프트에서 직접 리눅스 4.19 버전의 커널을 제공한다. 그리고 가상머신처럼 메모리가 할당되고 WSL2부터는 가상 IP도 부여된다. 말 그대로 Windows 에서 Hyper-V 기능을 WSL에 적용했다고 보면 된다.

🍱 SSH란?

SSH란 Secure Shell Protocol, 즉 네트워크 프로토콜 중 하나로 컴퓨터와 컴퓨터가 인터넷과 같은 Public Network를 통해 서로 통신을 할 때 보안적으로 안전하게 통신을 하기 위해 사용하는 프로토콜이다.

대표적인 사용 예

  • 데이터 전송
    원격 저장소인 깃헙이 있을 수 있다. 소스 코드를 원격 저장소인 깃헙에 푸쉬할 때 SSH를 활용해 파일을 전송하게 된다.
  • 원격 제어
    우리는 AWS와 같은 클라우드 서비스의 인스턴스 서버에 접속하여 해당 머신에 명령을 내리기 위해서도 SSH를 통한 접속을 해야 한다.

사용하는 이유

물론 "보안"때문이다. 만일 예로 언급한 두 프로토콜을 통해 민감한 정보(예를 들어 로그인 정보)를 주고받는다면 정보를 직접 네트워크를 통해 넘기기 때문에 누구나 해당 정보를 열어볼 수 있어 보안에 상당히 취약하다. 반면 SSH는 먼저 보안적으로 훨씬 안전한 채널을 구성한 뒤 정보를 교환하기 때문에 보다 보안적인 면에서 훨씬 뛰어나다.

그렇다면 SSH는 어떤 방식으로 서로 다른 컴퓨터가 안전하게 통신하게끔 할까?

보안 방법

Private Key and Public Key를 이용한다. 기본적으로 SSH는 한 쌍의 Key를 통해 접속하려는 컴퓨터와 인증 과정을 거치게 되며 이 한 쌍의 Key는 다음과 같다.

  • Public Key
    Public Key는 단어 뜻 그대로 공개되어도 비교적 안전한 Key이다. 이 Public Key를 통해 메시지를 전송하기 전 암호화를 하게 되며. Public Key로는 암호화는 가능하지만 복호화는 불가능하다.

  • Private Key
    이와 쌍을 이루는 Private Key는 절대로 외부에 노출이 되어서는 안되는 Key로 본인의 컴퓨터 내부에 저장하게 되어있다. 이 Private Key를 통해 암호화된 메시지를 복호화 할 수 있다.

🍙 리눅스를 설치해보자 !

VirtualBox 설치하기

https://www.virtualbox.org/ 에서 설치를 완료한 후 실행한다.

설치

Ubuntu 20.04 설치하기

  1. 우분투 20.04를 설치한다.
    우분투다운로드

  2. VirtualBox에서 새로 만들기 클릭 후 다음과 같이 생성해준다.



  3. 생성이 완료되면 설정으로 들어가 준다.

  4. 저장소 탭에 들어가 아래 보이는 버튼 클릭 후, 아까 다운로드 받았던 Ubuntu.iso를 선택한다.

  5. 광학 드라이브가 추가된 것이 보인다.

  6. 이후 시작 버튼을 누르면 Ubuntu 설치가 시작된다.

  7. 우분투 설치가 끝나면 이름과 암호를 설정해준다.

  8. VirtualBox에 Ubuntu가 설치되었다!

SSH 설정하기

  1. 로컬 컴퓨터 터미널을 켜서 ipconfig후 VirtualBox Host-Only를 확인한다. 이 중에서 IPv4 주소를 기억한다.

  1. VirtualBox으로 돌아와, 설정-> 네트워크 탭에서 어댑터2를 다음과 같이 설정한다. (Ubuntu가 꺼져있어야 한다.)

  2. Ubuntu를 실행 후 터미널을 열어서 ifconfig를 입력해준다. net-tools가 설치되어 있지 않으므로 설 치하고 오류를 해결해준다.

  3. ifconfig 입력시 enp0s8에 아까 보았던 IPv4 주소가 들어와 있는 것을 알 수 있다.

  4. 우분투 오른쪽 상단의 화살표모양 클릭 후 이더넷 설정에 들어가서 이더넷 enp0s8의 설정에 들어가준다.

  5. 주소와 네트마스크 게이트웨이에 다음과 같이 입력해준다.

  6. 방화벽 설정을 위해 터미널로 가서 다음 명령어를 실행해준다. 상태가 비활성인 경우 sudo ufw enable을 입력하여 활성화 시켜준다.

  7. 패키지를 업데이트 및 업그레이드 해준 뒤 sudo apt-get install openssh-server를 입력해 ssh를 설치해주면 끝.

  8. 추가로 새로운 계정을 생성하기 위해 우분투 터미널에서 sudo useradd 계정이름 sudo passwd 계정이름 입력 후 계정을 생성하였다.

PuTTY로 원격 접속하기

  1. PuTTY를 다운받아 준다.

  2. PuTTY 실행 후 IP를 설정하고 Port를 22번으로 설정하고 열어준다.

  3. 생성했던 계정인 testastro 계정으로 로그인하였다.

  1. 우분투 터미널에서 backup디렉토리를 생성 후 764 권한을 부여하였으며 디렉토리 소유자를 testastro로 만듬으로써 testastro가 디렉토리를 생성한 것과 같게 만들어 주었다.
  1. testastro로 backup 디렉토리에 접근할 수 있는 모습이다.

가상환경 시간 설정

가상 환경 우분투에서 date 입력시 로컬상의 날짜 시간과 같게 출력되는 모습이다.

Node.js 14.x버전 설치

  1. 그냥 설치하면 위와 같이 버전이 낮으므로 높은 버전을 설치해야 한다. 그렇기 위해서 우선 클라이언트에서 커맨드 라인이나 소스코드로 손 쉽게 웹 브라우저 처럼 활동할 수 있도록 해주는 기술인 curl을 설치해준다.

  2. curl을 이용해 개인저장소인 PPA를 설치해준다.

  1. 그 후 sudo apt-get install nodejs 입력시 14.17.2 버전으로 잘 설치된 것을 볼 수 있다.

  2. Git도 버전업을 위해 개인 저장소를 이용했다. 자세한 건 지난 게시글에 있다.

어제 작성한 Javascript 파일 실행하기

  1. git clone을 통해 저장소를 backup 디렉토리에 복사해준다.
  2. git switch를 이용해 내 브랜치로 이동한다. index.js가 생긴 것을 볼 수 있다.
  3. node index.js입력하여 실행 결과가 출력됨을 알 수 있다.

🥠 쉘 스크립트 자동화하기!

쉘 스크립트를 이용한 다양한 사례들?

  • 디스크 상태 및 파일 시스템 점검
  • 사용자별 디스크 사용량 분석
  • 프로세스 개수 점검
  • 주요 설정 파일 권한 점검

bash 쉘 스크립트 작성하기

파일 압축하기

  • /backup으로 이동 후, nano backup.sh 입력하여 쉘 스크립트 편집기로 이동.

  • /var/log/dmesg와 /var/log/syslog 압축하기!

  • /var/log/dmesg : 시스템이 부팅할 때 생성한 로그를 기록

  • /var/log/syslog : syslog가 생성하는 공통 로그를 기록

backup.sh

#!/bin/bash

curdate=`date +%Y%m%d`	#20210720
curtime=`date +%H%M`	#시분 EX.1920
path="/var/log"
if ! [ -d $curdate ]; then		# 디렉토리 없는 경우에만 생성
	mkdir $curdate
fi

# 파일 압축
zip /backup/$curdate/log_$curdate-$curtime.zip $path/syslog $path/dmesg

파일 복사하기

backupCopy.sh

#!/bin/bash

if [ -f /var/log/syslog_1 ]; then	# syslog_1이 있는 경우 제거
	rm /var/log/syslog_1
fi

cp /var/log/syslog /var/log/syslog_1	# 복사

Crontap을 이용한 자동화

크론탭 등록

$ sudo crontab -e 입력 후

<크론탭 수정>
*/5 * * * * bash /backup/backup.sh		# 5분마다 실행
29,59 * * * * bash /backup/backupCopy.sh	# 매 29, 59분에 실행

크론탭 실행 및 상태 확인

  • service cron start # 가동
  • service cron restart # 재가동
  • service cron status # 실행상태

5분마다 형성된 zip파일

syslog_1 파일 생성

30분 지켜본 결과 크론탭 정상 작동 확인

로컬로 복사하기

  1. nano zipToLocal.sh

  2. 쉘 스크립트 작성

#!/bin/bash

curdate=`date +%Y%m%d`
scp -r narastro@192.168.56.2:/backup/$curdate /home/narastro

  1. 실행 결과, 모든 zip 파일들이 정상적으로 로컬에 복사됨.

🍧 ssh-keygen으로 자동로그인

  • ssh-keygen 후 엔터엔터엔터..
  • .ssh/에 공개키(자물쇠), 비밀키(열쇠)가 생김
  • id_rsa.pub를 서버에 집어넣어줄 것임.
  • ~/.ssh/로 이동 후, scp -P 포트번호 id_rsa.pub narastro@localhost:/home/narastro (우분투에 파일 복사)
  • home 디렉토리에서, mkdir .ssh
  • cat id_rsa.pub >> .ssh/authorized_keys (파일을 추가해주는 것)

이후 ssh narastro@localhost -p 22로 접속하면 패스워도 없이도 접속 가능!

😂 느낀점

WSL2를 쓰면서 리눅스를 쓸 줄 안다고 착각했던게 큰 화를 불렀다.. 백엔드를 위해서 리눅스도 숙달될 필요가 있다고 느꼈다.
추가로, 운영체제, 리눅스와 유닉스, 파일시스템, 컴퓨터 구조를 더 공부해야 겠다는 생각을 했다ㅠㅠ

출처

우분투란 무엇인가?
SSH란?
혼자만의세계
2013 마이크로소프트웨어 9월호

profile
Earn this, Earn it.

0개의 댓글