Ubuntu Linux 🐧/[컴퓨터시스템관리] 실습일지

컴퓨터시스템관리) 2주차 실습일지

Go_nii 2020. 3. 29. 05:15

Linux 실습일지

2주차에서는 컴퓨터 시스템 구조를 배우고, 리눅스 명령어 기본에 대해 학습하였다. 그리고 직접 Server에서 이를 실습해보는 시간을 가졌다.

 

-새로 배운 내용 

 

컴퓨터 시스템의 기본 구조

1. 입력장치 / 네트워크 어뎁터로부터 처리 요청

2. 메모리에 있는 명령을 읽어 CPU에서 처리, 결과값은 메모리에 기록

3. 메모리에 기록된 데이터를 저장장치에 기록, 또는 네트워크 어뎁터를 이용하여 전송, 또는 출력장치인 모니터를 통해 출력

 

응용소프트웨어 Application : 사용자가 직접 사용하는 프로그램. 오피스, 앱 등

 

미들웨어 Middleware (응용소프트웨어와 운영체제 사이에서 중간 매개 역할)

: 여러 응용소프트웨어가 공통으로 사용하는 처리를 묶어서 응용프로그램을 도와주는 프로그램. 웹서버, 데이터베이스 등

 

운영체제 Operating system : 응용S/W 또는 미들웨어의 실행에 필요한 기능 제공. 하드웨어를 (제어하도록                                        / 제어하기위해 필요한 기능을 제공)하는 프로그램.윈도우, 맥OS, 리눅스 등

 

프로세스 : 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램. OS에서 처리하는 실행 처리 단위

 

프로세스가 디바이스에 직접 접근시, 해킹 위험성이 높다!

-> User Mode와 Kernel Mode로 분리해서 관리

 

User Mode에서는 장치 제어를 '요청'만 가능. 이를 System Call이라고 부른다.

 

커널 Kernel : 커널 모드에서 동작하는, OS의 핵심부분이 되는 처리를 모아 담당하는 프로그램.

                 프로세스 스케줄러, 메모리 자원 관리 역할을 한다.

---------------------------------------------------------------------------------------------------------------------

운영체제 종료시, 터미널과 콘솔에서 시스템 종료 명령 실행 

                       : poweroff, shutdown -P now, halt -p, init 0

                                                  : shutdown 명령어 옵션 중 now 부분에 시간을 지정하면 설정한 시간에 시스템

                                                   종료 ex) shutdown -P +10 :: 10분 후에 종료

 

우분투 재부팅시, reboot, shutdown -r now, init 6 명령 사용 가능

 

우분투의 자동완성 기능 : 파일 이름의 일부만 입력하고 Tab을 눌러 나머지 파일(또는 디렉터리)의 이름을 자동으로 완성해줌.

+) 이전에 썼던 명령어 확인 시 : 키보드 화살표 ↑ ↓로 확인 가능.

                             조회 : 터미널에 history 입력. (지우고 싶으면 history -c)

 

명령어 도움말

명령어 --help 

도움말 출력을 디스플레이 말고 파일로 바꾸기 가능! (리디렉션 이용) > < 

 

vi 에디터

기본은 '명령모드', i 나 a 키 누를 경우 '끼워넣기(입력모드)'로 전환. 다시 명령모드로 전환시 <esc>

명령어 : w = 저장 : q = 나가기 :wq = 저장 후 나가기 dd = 한줄 삭제 yy = 한줄 복사 p = 붙여넣기

ex) ls -l *.txt : 확장자가 .txt인 모든 파일을 보여줘

 

데이터 압축시

윈도우 : 파일을 압축한다 = 파일을 (묶고) 압축한다.

리눅스 : 직접 파일을 묶고, 압축해야 한다.

**tar 를 이용해 파일 묶기와 압축을 모두 사용 가능

 

@@@@@@실습

 

mkdir tmp // tmp라는 폴더 생성

touch a.txt b.txt // a.txt , b.txt 가 없다면 생성, 있다면 마지막 수정 시간을 현재 시각으로 변경

----------------------------------------------------------------------------------------------------------

파일 묶기)

tar -cvf text.tar a.txt b.txt // a.txt와 b.txt를 text.tar란 파일로 묶겠다.

추가시 ) 

tar -rvf text.tar c.txt // text.tar 파일에 c.txt도 함께 묶겠다.

 

파일 풀기)

tar -xvf text.tar

-----------------------------------------------------------------------------------------------------------

파일 압축하기)

tar -zcvf text.tar.gz a.txt b.txt c.txt // a.txt b.txt c.txt를 text.tar.gz란 파일로 압축

 

파일 압축풀기) 이때 특정 경로를 지정해줄 수 있다.

tar -zxvf text.tar.gz

 이때 특정 경로를 지정해줄 수 있다.

tar -zxvf text.tar.gz -C /root/tmp3 // /root/tmp3 위치에 text.tar.gz 파일 압축을 풀어줘

 

 

-실습 도중 문제 발생 

2주차에서는 수업 후에 스스로 Server에서 파일 압축과 관련된 실습을 다음과 같은 순서로 진행해보았다.

 

1) 아무 위치에 tmp 폴더 만들기
2) touch 명령어를 이용하여 다음의 파일 만들기 (a.txt b.txt c.txt d.c e.c f.c)
3) 모든 파일을 all.tar.gz 로 압축하기
4) tmp 폴더에 txt 폴더를 만들고, all.tar.gz 파일에서 모든 .txt 파일만 txt 폴더에 압축 풀기
5) tmp 폴더에 c 폴더를 만들고, 모든 .c 파일만 압축하여 source.tar.gz 를 만들고 C 폴더로 이동하기

 

이 실습을 진행하면서 4번을 어떻게 해야할 지 한참 고민했다.

tmp 폴더에 txt 폴더를 만드는 것은 성공했는데,

all.tar.gz 파일에서 모든 .txt 파일만 txt 폴더에 압축 푸는 과정이 막막했다.

나는 압축 파일을 특정 폴더에 푸는 것과 압축 파일에서 특정 파일만 압축 해제하는 것을 따로따로 알고 있었기에

이 정보를 합쳐서 해결해볼 수는 없을지 고민했다. 

 

먼저 적혀진 그대로 진행해보기로 했다.

1) all.tar.gz 파일에서 2) 모든 .txt 파일만 3) txt 폴더에 압축 풀기.

tar -zxvf all.tar.gz *.txt -C /root/tmp/txt

 

이렇게 입력했을 때, 압축이 잘 풀린 것만 같았다. 그러나 실제로 txt 파일로 이동하여 ls 명령어를 이용해 폴더 안에 파일들을 확인해보았다.

 

얼핏 보기엔 txt 폴더에 모든 .txt 파일들이 압축이 풀린 것처럼 보이지만.... 직접 txt 폴더 안 파일을 확인해보니 아무 것도 들어있지 않았다.

나는 이 과정에서 합계 자꾸 0이라고 나오는 것이 의아해 계속 고민했다.

그러다가 혹시 단어의 순서를 바꿔본다면 어떨까? 라는 생각이 들었고

저장 경로를 지정하는 -C /root/tmp/txt 와 *.txt의 순서를 바꿔 보았다.

 

그러자 명령어 밑에

a.txt

b.txt

c.txt가 나온 것은 똑같았고, 이번엔 txt 폴더에도 all.tar.gz의 모든 .txt 파일들이 담겨 있었다!!

 

압축 파일에서 특정 파일만 다른 경로에 압축을 풀 때는

특정 파일명(여기서는 *.txt)보다 경로 지정을 먼저 해줘야 된다는 것을 깨달았다!

 

이 과정에서 순서가 왜 중요한지? 그것이 궁금했지만 검색을 해도 나의 궁금증을 풀어줄 게시글이 없었다.

그것이 좀 아쉽지만.. 이 과정을 해결하기 위해 시행착오를 정말 많이 겪었다. 수많은 시행착오 뒤에 성공하니 즐거움이 배가 되는 기분이었다.

(이렇게 틀릴걸 예상하면서도 명확한 답을 몰라 한참을 헤맸었다..)

 

 

이번 실습에서 작성한 전체 코드는 다음과 같다.

20200328_2주차 과제 실습코드

 

-참고할 만한 내용 

 

검색을 하다 tar 명령어의 주요 옵션들을 설명해둔 블로그가 있어 링크를 첨부하겠다.

이를 참고하면 tar 명령어를 이해하는데 많은 도움이 될 것이다.

https://recipes4dev.tistory.com/146

 

리눅스 tar 명령어 사용법. (Linux tar command) - 파일 압축 및 해제

1. tar 명령어. (Tape ARchiver) tar는 여러 개의 파일을 하나의 파일로 묶거나 풀 때 사용하는 명령입니다. "테이프 아카이버(Tape ARchiver)"의 앞 글자들을 조합하여 "tar"라는 이름으로 명명됩니다. "테이프..

recipes4dev.tistory.com

 

-회고 

 

이번 주차에서는 리눅스 기본 명령에 대해 많은 것을 배웠다.

그리고 실습 전 컴퓨터 시스템 개요를 다루면서 운영체제에 대한 필요성을 깊게 알게 되었다.

운영 체제가 없다면 개발하는 개발자의 입장에서도, 컴퓨터의 입장에서도

일처리 과정이 매우 복잡하고 비용도 많이 들었을 것이다.

 

그리고 강의를 들으면서 나도 직접 명령어를 따라 쳐보니 훨씬 더 이해가 잘되었다.

vi에디터를 배울 땐 작년 수업시간에 다뤄본 것이 떠올랐다.

그때는 사실 실습을 많이 해보지 않고 눈으로 명령어들을 외우기가 급급했어서

막상 실습 문제를 만나면 명령어들이 손에 익숙지 않아 굉장히 어렵게 느껴졌었다.

 

이번 수업을 들으며 실습을 소홀히 하던 과거의 나를 되돌아 보는 시간을 가질 수 있었고, 앞으로는 실습을 혼자서도 자주 해보는 습관을 길러야겠다는 생각이 들었다. 꾸준한 실습만이 리눅스에 능숙해지는 지름길이다.

 

그리고 실습 과제를 통해서는 헷갈렸던 tar의 주요옵션이 각각 무슨 의미로 쓰이는지 공부할 수 있었다.

(- 'f'는 기본 옵션. 'c'는 파일 묶을 때 사용, 'x'는 파일 풀 때 사용 등..)

오랫동안 고민하다가 문제를 풀게 되니까 뿌듯함이 배가 되어 이제 어려운 문제도 쉽게 포기할 수 없을 것 같다.

점점 리눅스에 대한 재미가 늘어난다.