비트교육센터/리눅스

[비트교육센터][리눅스] 1일차 리눅스 설치, 명령어, SSH

달의요정루나 2023. 8. 19. 17:46

1. 리눅스

- OS: 사용자와 기계가 쉽게 소통할 수 있도록 기계를 관리해주는 시스템

- 리눅스: 컴퓨터 OS커널의 일종으로 리눅스 커널을 사용하는 OS를 가리킨다.

[1] GNU/LINUX 타임라인

https://upload.wikimedia.org/wikipedia/commons/9/9a/Gldt1009.svg

- 리눅스 운영체제의 역사를 알 수 있다.

 

[2] Distrowatch

https://distrowatch.com/

 

DistroWatch.com: Put the fun back into computing. Use Linux, BSD.

2023-08-17 NEW • Distribution Release: siduction 2023.1.0 Rate this project Ferdinand Thommes has announced the release of siduction 2023.1.0, the new stable version of the project's distribution based on Debian "Sid" (the "unstable" branch) and featurin

distrowatch.com

- 디스트로워치는 리눅스나 다른 자유소프트웨어/오픈소스 소프트웨어 운영 체제인 오픈솔라리스와 BSD에 대한 소식과 인기순위사이트이다.

 

[3] virtualbox

1) virtualbox, 확장팩 다운로드 받기

[1] virtualbox사이트로 들어간다.

https://www.virtualbox.org/

 

Oracle VM VirtualBox

Welcome to VirtualBox.org! News Flash New July 18th, 2023VirtualBox 7.0.10 released! Oracle today released a 7.0 maintenance release which improves stability and fixes regressions. See the Changelog for details. New July 18th, 2023VirtualBox 6.1.46 release

www.virtualbox.org

[2] 다운로드를 누른다.
[3] Windows hosts를 클릭해 윈도우용 플랫폼 패키지를 다운로드한다.
[4] 아래로 스크롤 해서 All supported platforms를 클릭해 확장팩을 설치한다.
[5] 다운로드 된것을 확인할 수 있다.
[6] virtualbox를 띄운다.
[7] 다운로드 받은 확장팩을 더블클릭한다.
[8] 설치누르고 약관동의하면 된다.

 

[9] 그러면 도구의 메뉴창에 확장을 누른다.
[10] 확장팩이 설치된 것을 볼 수 있다.

[4] Ubuntu

[1] ubuntu 사이트에 들어간다.

https://ubuntu.com/download

 

Get Ubuntu | Download | Ubuntu

Download Ubuntu desktop, Ubuntu Server, Ubuntu for Raspberry Pi and IoT devices, Ubuntu Core and all the Ubuntu flavours. Ubuntu is an open-source software platform that runs everywhere from the PC to the server and the cloud.

ubuntu.com

[2] Download Ubuntu Desktop을 클릭한다.
[3] 최신버전을 다운로드한다.
[4] 다운로드 된 것을 볼 수 있다.

[5] virtualbox에 우분투 환경 설치

1) 작업폴더 설정하기

[1] 환경설정을 들어간다.
[2] 기본 머신 폴더를 클릭한다.
[3] 기타를 누른다.
[4] 작업경로를 설정한다. 필자는 OracleVM를 작업경로로 설정했다.
[5] 확인을 누른다.

2) 우분투 운영체제 설치하기

[1] 새로 만들기를 누른다.
[2] 가상 머신 만들기 창이 띄어진다.
[3] 이름을 설정한다.(Ubuntu22로 설정했다. 그러면 자동으로 종류와 버전을 설정해줄 것이다.)
[4] ISO Image를 클릭하고 기타를 누른다.
[5] 다운로드 받은 iso파일을 연다.
[6] iso경로 뜬것을 확인할 수 있다.
[7] Skip Unattended Installation을 클릭하고 다음을 누른다.
[8] 기본메모리와 프로세서 용량을 설정한다.
[9] 기본메모리는 8gb, 프로세서는 2개로 설정하고(본인의 컴퓨터 사항에 맞추는 것이 좋다.) 다음으로 넘어간다.
[10] 하드디스크 용량을 설정한다.
[11] 용량은 50gb로 설정했다.(본인의 컴퓨터 사항에 맞추어 설정하는 것이 좋다.)
[12] Finish를 누른다.
[13] 이렇게 뜨면 성공이다.

3) OS 내부환경 설정하기

[1] 위쪽 메뉴에서 시작 버튼을 누르고 해당창으로 뜨면 Try or Install Ubuntu에서 엔터를 친다.
[2] 해당 창이 뜨면 Install Ubuntu를 클릭한다.
[3] 기본설정은 영어로 되어 있을 것이다. 이상태로 Continue를 누른다.
[4] Continue를 누른다. 중간에 팝업창이 나타나면 continue를 누른다.
[5] Install Now를 클릭한다.
[6] 기본설정이 Seoul로 되어 있을 것이다. Continue를 누른다.
[7] 계정을 입력한다. 필자는 간단하게 하기위해 비밀번호를 1234로 했다.
[8] 설치를 진행한다.
[9] 해당창이 뜨면 재부팅을 한다.
[10] 재부팅하고 들어가면 해당창이 뜨겠지만 Skip을 눌러준다.
[11] 이상태로 Next를 누른다.
[12] 똑같이 Next를 누른다.
[13] 똑같이 Next를 누른다.
[14] Done을 누른다.
[15] 상단 메뉴에서 '장치->게스트 확장 CD 이미지 삽입'을 누른다.
[16] 그러면 옆 메뉴창에 CD모양이 뜰것이다. 들어가서 autorun.sh파일을 오른쪽 클릭한다.
[17] Run as a Program을 클릭한다.
[18] 비밀번호를 입력해 인증한다.
[19] 작업이 끝나면 CD모양 위에 오른쪽 마우스를 누르고 Eject를 클릭한다.
[20] 재부팅한다.

2. 리눅스 명령어

- Shell: 운영체제에서 커널과 이용자 사이에 끼어서 이용자의 명령을 해석하고 그 처리 결과를 뿌려주는 시스템 프로그램이다.

- bash: born again shell의 약자로 현재 가장 많이 쓰이는 shell이다.

[1] 터미널 열고 업데이트 하기

[1] 터미널을 연다.
[2] sudo apt update로 패키지의 새로운 버젼을 확인하고, sudo apt upgrade로 최신버젼으로 업그레이드 한다.
[3] sudo apt install build-essential을 입력해 GNU 디버거 및 소프트웨어 컴파일링에 필요한 기타 개발 라이브러리와 도구등을 다운받는다.
[4] 버추얼 박스->'설정'->'일반'->'고급'->'클립보드 공유'->양방향으로 바꾼다.
[5] sudo apt install net-tools를 입력해 network 관련 프로그램 설치한다.
[6] sudo apt install vim을 입력해 vim을 설치한다.

[2] 경로 관련 명령어

1) pwd

pwd: 현재 경로를 출력시켜준다.

2) ls

ls: 디렉토리에 있는 내용을 확인한다.
ls -l: 권한, 파일수, 소유자 등 자세한 내용을 출력한다.
ls -p: 디렉토리에 '/'를 추가한다.

3) cd

cd: 디렉토리 경로를 바꾸어준다.
cd-,  cd~: 홈 디렉토리로 돌아간디.

4) 절대경로, 상대경로

- 절대경로: root로부터 디렉토리

- 상대경로: 현재의 working directory로부터 상대적인 위치

. : current directory를 가리키는 메타심볼

.. : parent directory를 가리키는 메타심볼

5) mkdir

- mkdir: 디렉토리를 만든다. mkdir work라고 하면 현재 있는 경로에 work라는 디렉토리를 만드는 것이다.

[3] vi 명령어

1) vi

- vi: 파일편집기 명령어이다. vi명령어로 기존에 있는 파일을 편집할 수 있다. 만약 파일이 존재하지 않을경우 파일을 생성한다.

- vi편집기 창이다.

2) i

- i: insert, 현재 커서 위치에 삽입한다.(입력모드)

3) esc

- esc: 취소버튼이다. insert가 취소 되었음을 확인할 수 있다.

4) x

- x: 커서에 있는 문자를 지운다.

5) u

- u: undo, 방금한 명령을 취소한다.

6) Ctrl-R

- Ctrl-R: redo, 변경한 명령을 다시 시행한다.

7) ctrl+Z

아래 Stopped라고 떠 있는 것을 확인할 수 있다.

- ctrl+Z: 현 프로세스를 백그라운드로 밀어버린다.

 

8) fg

fg를 입력한다.
sample2로 이동한 것을 볼 수 있다.

- fg: 백그라운드에 있는 프로세스를 불러온다.

9) $

$를 누르면 라인의 맨끝으로 간 것을 볼 수 있다.

- $: 커서가 있는 라인의 맨 끝으로 이동한다.

10) A

커서가 있던 첫줄에서 맨끝에 있는 것을 볼 수 있다.

- A: 라인의 뒤부터 글작성한다.

11) r

소문자 r을 누른다.
r대신 i가 입력된다.

- r: 커서에 있는 문자를 하나를 바꾼다.

12) R

대문자 R을 누른다.
D문자를 변경한다.
D에서 d로 변경된 것을 알 수 있다. 이상태로 계속 덮어쓰기를 할 수 있다.

- R: 커서에 있는 문자를 계속 덮어쓴다.

13) :w

아래 written이라 뜨면서 글이 저장된다.

:w :작성된 글을 저장한다.

14) :q

:q :해당 글에서 나간다.

15) :q!

:q! : 해당 글에서 강제로 나간다.

16) swp 파일

sample2를 백그라운드로 보내고 ls -al을 입력하면 sample2에 대한 스왑파일이 생긴 것을 볼 수 있다.

- swp 파일: 스왑파일을 의미하며 작업중 사용자의 의도와 무관하게 예기치 않는 종료를 하여 파일이 손상, 유실되는 경우를 대비한 백업파일이다.

17) cw

변경하려는 단어의 첫글자에 커서를 위치한다.
cw를 누른다.
단어를 바꾼다.

- cw: 단어를 변경한다.

18) o

커서가 첫 줄에 위치해 있다.
소문자 o를 누르면 아래에 글을 쓸 수 있다.

- o: 커서가 있는 줄을 기준으로 다음 줄에 작성한다.

19) O

int no줄에 커서가 있다.
대문자 O를 누르면 위줄에 글을 입력할 수 있다.

- O: 커서가 있는 줄을 기준으로 이전 줄에 작성한다.

20) 숫자+yy, p

4yy: 커서가 있는 줄 부터 4줄을 복사하기로 했다.
커서를 가장 아래쪽에 위치시키고 p를 누르면 4줄이 복사된다.

- yy : 커서가 있는 라인(줄) 복사

- p: 커서가 있는 다음 라인에 붙여넣기

21) 숫자+dd

4dd를 입력해 커서가 있는 위치를 기준으로 4줄을 삭제한다.
4줄이 삭제가 된것을 확인할 수 있다.

- dd: 커서가 있는 기준으로 아래 n줄 지우기

22) 단어찾기

- /를 쓰고 특정단어를 입력하면 해당 파일에서 특정 단어를 찾을 수 있다.

23) n

n을 누르면 찾으려는 단어 다음으로 간다.

- n: 아래쪽에 /찾는단어를 입력해 엔터를 누른 후 n을 누르면 다음 단어로 넘어간다.

24) N

N을 누르면 찾으려는 단어 다음으로 간다.

- N: 아래쪽에 /찾는단어를 입력해 엔터를 누른 후 N을 누르면 이전 단어로 넘어간다.

25) :g/기존단어/s//바꿀단어/g

private이 public으로 바뀐 것을 볼 수 있다.

- :g/private/s//public/g: private을 public으로 전체 변경한다.

26) :g/삭제할 단어/s///g

public이 전부다 삭제된 것을 볼 수 있다.

- :g/public/s///g: public 단어를 전체 없앤다.

27) ctrl+g

ctrl+g를 누르면 하단에 현재 상황을 출력한다.

- ctrl+g: 현재 상황을 출력한다.

28) :se nu

- :se nu: 줄 번호 출력한다.

29) :se nonu

- :se nonu: 줄 번호를 지운다.

30) ctrl+f, ctrl+b

ctrl+f를 누르면 다음 페이지로 간다.
ctrl+b를 누르면 이전 페이지로 간다.

- ctrl+f: 다음 페이지로 간다.

- ctrl+b: 이전 페이지로 간다.

31) G

G를 누르니 파일의 끝으로 간 것을 볼 수 있다.

- G: 문장 끝으로 간다.

32) :줄번호, 줄번호d

첫번째줄부터 여섯번째 줄까지 삭제된 것을 알 수 있다.

- :1,6d: 1번줄 ~ 6번까지 줄을 삭제한다.

33) :줄번호,$d

9번째 줄부터 끝까지 삭제된 것을 볼 수 있다.

- :9,$d: 9번째 줄부터 끝까지 줄을 사제한다.

34) shift + ~

커서가 있는 곳부터 shift+~를 치니 소문자가 대문자로 바뀐다. 반대로 대문자는 소문자로 바뀐다.

- shift + ~ : 소문자를 대문자, 대문자를 소문자로 바꾼다.

35) shift + j

커서가 있는 곳에서 shift + j를 누르니 각 줄들이 한 줄로 붙는다.

- shift + j: 한줄로 붙인다.

36) :wq

- :wq: 저장하고 나간다.

 

3. 파일 권한

ls -al을 입력하면 다음처럼 파일에 대한 상세정보를 조회할 수 있다.

- : rw-rw-r-- : 1 : last : last : 52 : 8월 18 13:42 : sample1

- 위의 파일권한 형식은 {파일유형} : {파일권한} : {링크수} : {소유 계정} : {그룹명} : {파일크기} : {마지막 변경 일자} : {파일명}과 같다.

[1] 파일 유형

1) - : 일반파일을 의미한다.

2) d: 디렉토리 파일을 의미한다.

[2] 파일 권한

r w x r w x r w x
user user user group group group other other other

1) r: 읽기 허가로 파일 내용을 읽을 수 있는지 결정한다.2) w: 쓰기 허가로 파일을 작성하거나 지울 수 있는지 결정한다.3) x: 실행허가로 파일을 실행할 수 있는지 결정한다.4) user: 사용자 본인을 의미한다.5) group: 사용자 계정이 속한 그룹에 있는 계정을 의미한다.6) other: 본인과 그룹에 속한 계정이 아닌 계정을 의미한다.

ex) rw-rw-r--: 예시로 들면 본인은 읽기와 쓰기가 가능, 그룹에 속한 사람들은 읽기와 쓰기가 가능하고 다른 사람들은 읽기만 가능하는 것을 의미한다.

[3] 링크수

- 파일이나 디렉토리가 몇 개의 하드 링크 또는 심볼릭 링크와 연결되어 있는지를 나타낸다.

1) 하드링크

- 원본 파일과 동일한 내용을 가지는 새로운 파일 엔트리를 생성하는 방식이다.

- 원본 파일과 하드 링크 간에는 모든 내용이 공유되므로 링크 수가 증가하지 않는다.

2) 심볼릭링크

- 원본 파일이나 디렉토리를 가리키는 단순한 포인터이다.

- 링크 수는 원본 파일이나 디렉토리와 무관하게 항상 1이다.

 

4. SSH

- SSH: 사용-양자 간 통신 암호화이다. Telnet은 데이터를 그대로 써서 해킹을 당하면 정보가 그대로 유출되지만 SSH는 암호화 통신을 해서 안전하다.

[1] SSH Server 설치하기

[1] sudo apt install openssh-server를 입력해 SSH Server를 설치한다.
[2] ls -l /etc/ssh/를 입력해 ssh 밑 파일 중 sshd_config를 찾는다.
[3] sudo vi /etc/ssh/sshd_config로 sshd_config를 편집기로 연다.

- 여담으로 경로를 작성할 때 tab을 2번 치면 모르는 경로(혹은 파일명)를 알려주고, tab을 한 번치면 나머지 문장을 자동완성 해준다.

[4] sshd_config파일을 열었다.
[5] Port 22를 주석해제한다.
[6] PubkeyAuthentication, PasswordAuthentication을 주석해제하고 저장하고 나간다.
[7] sudo systemctl status ssh를 입력해 ssh의 상태를 보여준다. 설치되어져 있고 시작됐음을 알 수 있다.
[8] sudo systemctl restart ssh를 입력해 재시작을 하고 sudo systemctl status ssh를 입력해 몇초전에 다시 시작했는지 본다.
[9] sudo ufw allow ssh를 입력해 ssh접속을 허용한다.
[10] VirtualBox에서 '설정'들어간다.
[11] '네트워크'->Advanced로 가고 포트포워딩을 누른다.

 

[12] 오른쪽 위에 추가 버튼을 누른다.
[13] 다음처럼 입력한다.

- 192.168.56.1 아이피 주소로 2200포트로 요청이 들어오면 22번포트로 전달해준다.

- 호스트 포트는 윈도우포트이다.

- Port forwarding: 공유기의 포트를 통해 이 공유기와 연결된 기기들의 특정 포트에 진입할 수 있게 하는 기능이다.

[14] ssh last@localhost -p 2200을 입력해 2200포트로 신호를 보낸다.(여담으로 lastcoder는 오타이다.)
[15] 해당처럼 뜨면 yes를 누른다.

- firgerprint: 원격호스트가 접속할 때 서버가 맞는지 검사해 준다.

그러면 사용자의 .ssh폴더에 known_hosts가 생성된다.
[16] 나갔다가 다시 들어와서 ssh last@localhost -p 2200을 입력하고 리눅스 비밀번호 1234를 입력시 리눅스 터미널에 접속이 가능해진다.
[17] 외부에서도 리눅스 터미널을 사용할 수 있게된다.

- 서버를 끌때는 먼저 리눅스 터미널에서 sudo shutdown -h now로 끄는 것을 추천한다.

이렇게 입력한다.

5. 리눅스 터미널로 파일 전송하기

[1] 텍스트 파일 하나를 가져온다.
[2] 입력하기 편한 경로에 위치시킨다.
[3] E드라이브 경로로 바꾸어준다.(현재 다른 터미널을 띄어서 들어간것이다.)
[4] scp -P 2200 .\Eula.txt last@localhost:~/work를 입력하고 비번 1234를 입력해 work디렉토리로 Eula.txt파일을 전송한다.
[5] 파일이 전송된 것을 확인할 수 있다.
[6] 반면 리눅스 서버에서 가져올 수도 있다. scp -P 2200 last@localhost:~/work/Eula.txt . 를 입력해 work 디렉토리에 있는 txt파일을 E드라이브 경로로 가져온다.
[7] 파일이 온것을 확인할 수 있다.(여담으로 이전에 있던 Eula.txt파일은 삭제했다.)
[8] 연결된 리눅스 터미널로 rm Eula.txt를 입력해 삭제할 수 있다.

5. Zip

[1] 압축하기

[1] Pictures경로로 이동후 zip -r capture.zip Screenshots/ 를 입력해 Screenshots폴더를 catpure.zip로 압축한다.
[3] 압축된 것을 확인할 수 있다.
[4] 같은 방법으로 입력해 E드라이브로 capture.zip를 가져올 수 있다.
[5] 전송된 것을 확인할 수 있다.