본문 바로가기

자기개발/Linux

Linux 공부 3일차

오늘은 IO Redirection 마무리 부분에서부터 디렉토리의 구조까지 수강했습니다.

생각보다 블로그에 포스팅 정리하면서 공부하는게 시간을 좀 많이 잡아먹는 것 같긴하지만 도움은 많이 되는 것 같습니다.

그리고 조만간 노트북을 바꿀 수 있는 기회가 생길 것 같은데 지금은 13인치를 써서 매우 불편하지만 17인치로 갈 수 있을 것 같기 때문에 조금 기대가 되네요. 이제 각설하고 오늘 배운 내용 복습해보겠습니다.

우선 중요한 내용은 아니고!! 메일 보내는 방법에 대해서 배우고 시작을 했습니다.

메일을 보내는 방법은 mail abc@gmail.com <<eot라고 적고나면 내용을 기입할 수 있게 변합니다.

내용을 다 적은 이후 eot라고 적어 마무리하면 메일이 발송됩니다.

여기서 <<는 이쪽으로 보낸다는 의미를 가지고 있다고하고 eot는 내용기입을 끝마치는 단어라고 생각하면 됩니다 eot가 아니라 아무거나 적어도 괜찮습니다.

하지만 보내려고 하니 안보내집니다.

메일 커맨드를 찾을 수 없다고 뜨네요 하지만 설치 할 수 있다면서 친절하게도 명령어를 알려줍니다.

나온 그대로 입력합니다.

저는 sudo apt-get install mailutils를 해야할거라고 생각했는데 그냥도 되는걸 보니 -get은 굳이 안해도 되는건가봅니다.

검색해보니 apt-get과 apt의 차이점은 apt-get이 script를 작성할 경우에는 기능이 좀 더 많고 안정적이어서 좋다고합니다. 하지만 웬만한 경우에는 apt를 사용해도 무방할 것 같고 오히려 편하기까지 하다고 합니다. apt가 출력되는 화면이 더 화려하기도 해서 저는 apt를 자주 사용할 것 같습니다.

이어서 저렇게 메시지를 입력하면 이런 화면이 뜹니다.

내용을 간단하게 요약하자면 메일 서버 유형에 대한 설명이고 골라야한다는 뜻입니다.

구성없음=현재 구성을 변경하지 않도록 하는 것(?) 아마 그냥 지금 설정된대로 한다는 의미 같네요.

인터넷 사이트=SMTP를 사용하여 메일을 직접 주고 받음 (인터넷에서 메일을 주고 받기 위한 전송규약 및 프로토콜입니다.)

위성 시스템:스마트 호스트라고 하는 다른 컴퓨터를 통해서 전송된다는데 무슨 뜻이지..?

로컬 전용: 이건 로컬사용자들끼리 로컬 망 안에서 메일을 보내는 것을 의미하는 것 같습니다.

 

저는 그냥 제 네이버 메일로 보낼거기 때문에 SMTP를 이용하는 Internet Site를 골랐습니다.

 

여기는 이제 시스템 메일 네임 아마도 보내는 이의 이름을 정하는 것 같습니다.

저는 어나니머스라는 이름을 써봤습니다.

내용도 조금 무시무시하게 딥웹에 들어가면 제 컴을 박살낸다고 협박의 편지를 썼습니다.

아쉽게도 네이버로 보낸 메일은 도착을 안하더군요 ㅠㅠ 왜인지 모르겠습니다.

그래서 G메일로 다시 보내니깐 스팸함으로 들어갔더군요 네이버는 스팸으로도 오지 않았습니다.

아무튼 이렇게 메일 보내는 법은 익혔습니다. 좀 더 자세히 스팸으로 걸리지 않고 보내는 방법에 대해서도 알아봐야겠군요 그리고 anonymous로 보내진 것도 아니었습니다.

다음은 또 명령어입니다. 오늘은 개념적인 수업이 비중을 좀 많이 차지해서 중간중간 수업에 나오는 명령어 같은 것들을 기록하겠습니다. 

이렇게 ls -al 을 /dev/null로 출력을 시키면 아무것도 나오지 않습니다. 원래 파일로 입력을 하게되면 그렇긴 하지만 여기서 사용된 /dev/null은 리눅스의 쓰레기통 같은 역할이라고 하네요. 그냥 /dev/null이라는 쓰레기통 역할이라는 것만 기억하면 될 것 같습니다.

이미지 출처 : https://badstorage.tistory.com/21

이제는 커널과 쉘 개념을 정리해봅시다.

Kernel=알맹이,코어 라는 뜻을 가지고 있습니다.

하드웨어를 직접적으로 제어하는 운영체제에서 가장 코어가 되는 것이 커널입니다.

Shell=껍데기,주변이라는 뜻을 가지고 있습니다.

사용자가 쉘에게 명령어를 입력하면 쉘이 커널에게 명령을 전달해줍니다. 그리고 그 명령을 처리한 결과값이 커널에서 쉘을 통해서 우리에게 출력됩니다. 커널은 우리의 힘으로 제어하기 매우 힘들다고 합니다. 간단하게 제가 생각하기에는 프로그래밍 언어처럼 커널과 사용자간의 번역을 담당하는 느낌 같습니다.

그러면 다음은 지금 현재 사용하고 있는 shell 카테고리에 속해있는 구체적인 제품을 확인해보겠습니다.

echo라는 명령어를 사용할건데요

원래 echo는 이처럼 ""기호 안의 메시지를 다시 출력해주는 기능입니다.

하지만 echo $0을 입력하면

현재 사용하고 있는 쉘을 보여줍니다.

지금 제가 사용하고 있는 것은 bash인데 아마 대부분 저와 같은 bash를 기본적으로 사용하고 있으실겁니다.

다른 쉘로는 zsh 흔히 z쉘이라고 부르는 쉘인데 그냥 zsh만 입력하면 모드(?)가 바뀝니다.

하지만 저희는 설치가 안되어 있어서 또 친절하게 우분투에서 설치하는 명령어를 알려주네요.

설치를 마친 뒤 다시 zsh를 입력해줍니다. 그러면 이런 화면이 뜰텐데요

당황하지 말고 그냥 엔터를 눌러줍니다.

그럼 이렇게 인터페이스(?)가 조금 바뀐 것을 보실 수 있습니다. bash와는 다르게 밋밋한 느낌이 많이 듭니다.

혹시 모르니 맞게 바뀌었는지 확인하기 위해서 echo $0을 입력해줍니다.

네 zsh로 변경이 되어 zsh라고 출력이 되네요.

이쯤되면 왜 이런 다른 쉘이 있느냐 라는 생각을 하실 수 있습니다 .저도 그랬는데 이게 기능적인 면에서 조금 차이가 있어서 사용자마다 그 기능에 맞게끔 편하게 사용할 수 있는 쉘을 사용하기 때문입니다. 한마디로 쉘은 하나가 아니라는 얘기입니다. 일단 제가 강의에서 들은 차이점은 zsh가 bash에는 없는 추가적인 기능들을 좀 갖고 있어서 편리하다라는 평가를 받고 있다고 합니다.(zsh는 자동완성 기능 같은 편의성을 제공합니다.)

다음은 비슷한 파일을 한 번에 처리해야하는 부분에 있어서 꼭 알아야할 명령어라고 생각합니다.

와일드카드라고 불리우는 *입니다.

예를 들어서 가지고 있는 txt파일들을 전부 다른 폴더로 옮기고 싶다.하는 경우가 생기면 일일이 옮기기에는 많으면 많을수록 힘들죠 하지만 그걸 간단하게 해결하는 것이 이 와일드카드입니다. 예를 들어서 dir3 디렉토리로 모든 txt파일을 옮기고 싶다! 그러면 mv *.txt /dir3 이런식으로 옮길 디렉토리만 잘 설정해준다면 .txt로 끝나는 파일이 전부 옮겨집니다.

위에서부터 보자면 exmv를 만들고 전부 옮겼습니다.

이것들을 한 번에 하고 싶다면 어떻게 해야할까요? 물론 명령어를 사용해서 ;를 잘 쓴다면 금방 할수도 있습니다.

하지만 이런 일들을 주기적으로 반복해야한다면? 그럴 때 필요한 것이 스크립트입니다.

이번에는 스크립트를 사용해보겠습니다. 우선 디렉토리를 삭제하려고 하는데 디렉토리는 rm으로는 삭제되지 않기 때문에 rm -r(폴더 내용 및 폴더 삭제) rmdir(폴더만 삭제 파일이 있는 경우에는 삭제가 안됨)을 이용해서 삭제합니다.

저는 삭제하기 전에 exmv에 넣어두었던 txt파일들을 전부 다시 홈 디렉토리로 빼냈습니다.

바로 상위 폴더이니 mv *.txt ..을 하시면 상위 폴더인 홈디렉토리로 옮겨집니다. 아니면 /home 하셔도 될거고요

cd ~를 사용하면 현재 사용자의 홈 디렉토리로 바로 이동이 가능합니다. 그 뒤에 ~/디렉토리명 이처럼 응용도 가능합니다.

 

텍스트 편집기인 나노를 켜줍시다. 이름은 마음대로 하셔도 됩니다.(원래 없는 이름으로 실행을 하면 저 이름으로 파일이 생성됩니다.)

이렇게 작성해줍니다. #!/bin/bash의 경우는 이게 정해진 규약 같은데 아무튼 bash를 통해서 해석되어야한다는 사실을 명시한겁니다.

그 밑은 if=만일 !=부정의뜻 [ -d bak ];=[]기호는 왜 쓰였는지 모르겠습니다. -d는 디렉토리를 의미하며 bak은 디렉토리명입니다. 세미콜론은 명령어를 여기서 끝내는거죠 if문을 끝내는겁니다. 그러니 뜻이 만약 bak디렉토리가 없다 여기서  then이 붙어있으니 그렇다면으로 이어가니 만일 bak디렉토리가 없다면 으로 이어집니다. 자 그럴 경우에는 어떻게 한다?밑에 mkdir bak이 되어있습니다. bak이라는 이름의 디렉토리를 생성시킵니다. 없다면 생성시키는 겁니다.

자 그 다음에 fi이건 if문을 종료하는겁니다.  조건문을 끝내는겁니다. 그리고 있다면 cp *.txt bak  

bak 디렉토리로 txt파일들을 전부 카피합니다.  그리고 완성이 된 백업을 실행합니다.

완성이 된 backup
backup 실행

./을 붙이는 이유는 현재 디렉토리에 들어 있는 백업을 사용하려고 하기 때문인 것 같습니다.

하지만 권한이 없어서 거부됐다는 메시지가 뜹니다.

그러니 권한을 부여합니다.

chmod +x backup을 입력해줍니다.

아무 반응도 없습니다. ls를 통해 상태를 확인합니다.

자세히 보면 앞에 있는 영어들이 바뀌어있고 색이 초록색으로 변했습니다.

저도 자세한 내용은 모르지만 x(excutable)가 실행할 수 있는이라는 의미이며 chmod +x는 말그대로 형식에 x를 추가해준다는 것 같습니다.

이제 해결되었으니 다시 실행해봅니다.

네 폴더가 생기고 안에 카피까지 전부 되었습니다. 이렇게 스크립트를 짤 수 있습니다.

조금은 어려울 수도 있겠지만 조금만 머리 굴려서 만들어낸다면 자주하는 작업일 경우에는 엄청난 효율을 뽑아낼 수 있을 거라고 생각이 되네요.

마지막은 리눅스 디렉토리 구조입니다.

 

이미지 출처 : https://www.thegeekstuff.com/2010/09/linux-file-system-structure/

이 밑으로는 출처에 있는 내용을 번역한 내용입니다. 오역이 있을 수 있습니다. 지적 감사히 받겠습니다.                      ()안에 초록색으로 기입된 내용은 제 생각입니다. 이 역시 지적 감사히 받겠습니다.

1. ROOT

◆모든 파일 및 디렉토리는 루트 디렉토리에서 시작됩니다.
루트 사용자만 이 디렉토리 아래에 쓰기 권한을 가집니다.
/root는 루트 사용자의 홈 디렉토리이며 /와 동일하지 않습니다. (루트 사용자는 일종의 슈퍼유저 모든 권한을 가진 유저라고 생각하시면 될 것 같습니다.)

2. /bin - User Binaries (실행할 수 있는 프로그램을 바이너리라고 합니다.)

이진법 실행 파일을 포함합니다.
단일 사용자 모드에서 사용해야 하는 일반 Linux 명령은 이 디렉토리 아래에 있습니다.
시스템의 모든 사용자가 사용하는 명령은 여기에 있습니다.
예를 들어 ps, ls, ping, grep, cp 등이 있습니다.

3. /sbin - System Binaries

/bin과 마찬가지로 /sbin도 이진법 실행 파일을 포함합니다.
하지만 이 디렉토리 아래에 있는 Linux 명령은 일반적으로 시스템 유지 관리를 위해 시스템 관리자가 사용합니다.
예: iptables, reboot, fdisk, ifconfig, swap on

4. /etc - Configuration Files

모든 프로그램에 필요한 구성 파일을 포함합니다.
여기에는 개별 프로그램을 시작/중지하는 데 사용되는 시작 및 종료 셸 스크립트도 포함됩니다.
예: /etc/resolv.conf, /etc/logrotate.conf

5. /dev - Device Files

장치 파일을 포함합니다.
여기에는 터미널 장치, usb 또는 시스템에 연결된 장치가 포함됩니다.
예: /dev/tty1, /dev/usbmon0

6. /proc - Process Information

시스템 프로세스에 대한 정보를 포함합니다.
이것은 실행 중인 프로세스에 대한 정보를 포함하는 유사 파일 시스템입니다. 예를 들어, /proc/{pid} 디렉토리에는 특정 pid를 사용하는 프로세스에 대한 정보가 포함되어 있습니다.
시스템 리소스에 대한 텍스트 정보가 있는 가상 파일 시스템입니다. 예: /proc/uptime

7. /var - Variable Files

var는 가변 파일을 나타냅니다.
확장될 것으로 예상되는 파일의 내용은 이 디렉토리에서 찾을 수 있습니다.(확장은 내용이 변한다는 것을 뜻합니다. 대충 유동적인 파일을 얘기함)
여기에는 시스템 로그 파일(/var/log), 패키지 및 데이터베이스 파일(/var/lib), 이메일(/var/mail), 인쇄 대기열(/var/spool), 잠금 파일(/var/lock), 재부팅 시 필요한 임시 파일(/var/tmp) 등이 포함됩니다.

8. /tmp - Temporary Files

시스템 및 사용자가 만든 임시 파일을 포함하는 디렉터리입니다.
시스템을 재부팅하면 이 디렉터리 아래의 파일이 삭제됩니다. (램처럼 휘발성이라고 생각하시면 됩니다.)

9. /usr - User Programs

이진법, 라이브러리, 설명서 및 2단계 프로그램의 소스 코드를 포함합니다.
/usr/bin에는 사용자 프로그램의 이진법 파일이 포함되어 있습니다. /bin 아래에서 사용자 이진법 파일을 찾을 수 없는 경우 /usr/bin 아래에서 확인하십시오. 예: at, awk, cc, less, scp
/usr/sbin에는 시스템 관리자를 위한 이진법 파일이 포함되어 있습니다. /sbin 아래에서 시스템 바이너리를 찾을 수 없는 경우 /usr/sbin 아래에서 찾아보십시오. 예: att, cron, sshd, user add, userdel
/usr/lib에 /usr/bin 및 /usr/sbin에 대한 라이브러리가 포함되어 있습니다.
/usr/local에는 원본에서 설치하는 사용자 프로그램이 포함되어 있습니다. 예를 들어 소스에서 apache를 설치하면 /usr/local/apache2 아래에 해당됩니다.

10. /home - Home Directories

모든 사용자가 개인 파일을 저장할 수 있는 홈 디렉토리입니다.
예: /home/john, /home/nikita

11. /boot - Boot Loader Files

부트 로더 관련 파일을 포함합니다.
커널 intrd, vmlinux, grub 파일이 /boot 아래에 있습니다. (커널도 쉘처럼 종류가 있는걸까요?)
예: initrd.img-2.6.32-24-generic, vmlinuz-2.6.32-24-generic

12. /lib - System Libraries

/bin 및 /sbin 아래에 있는 이진법 파일을 지원하는 라이브러리 파일 포함
라이브러리 파일 이름은 ld* 또는 lib*.so입니다.*
예: ld-2.11.1.so, libncurses.so.5.7

13. /opt - Optional add-on Applications

opt는 optional의 약자입니다.
개별 벤더의 추가 기능 응용 프로그램을 포함합니다.
추가 기능 응용 프로그램은 /opt/ 또는 /opt/ 하위 디렉터리 아래에 설치해야 합니다.

14. /mnt - Mount Directory

sysadmin(시스템관리자)이 파일 시스템을 마운트할 수 있는 임시 마운트 디렉터리.

15. /media - Removable Media Devices

이동식 장치의 임시 마운트 디렉터리입니다.
예를 들어 CD-ROM의 경우 /media/cdrom, 플로피 드라이브의 경우 /media/floppy, CD 기록기의 경우 /media/cdrecorder

16. /srv - Service Data

srv는 서비스를 의미합니다.
서버별 서비스 관련 데이터를 포함합니다.
예를 들어 /srv/cvs에는 CVS 관련 데이터가 포함됩니다.

오늘은 여기서 마무리하겠습니다.

아예 번역한 내용을 따로 포스팅할까도 생각해보았지만 제가 적은 내용들이 아니기 때문에 따로 포스팅은 하지 않고 여기에 전부 담았습니다. 오늘은 개념적인 부분들이 상당해서 양이 좀 많네요. 불필요하게 있는게 아닌가 하는 생각이 들면서도 이왕이면 공부한 내용을 전부 담고 싶었습니다. 포스팅하는데 들어가는 시간이 어째 공부하는 시간보다 더 오래걸리네요 ㅎㅎ...

혹시 보다가 제가 이해를 이상하게 했거나 부족한 부분이 있다면

꼭 코멘트 남겨서 제가 올바른 지식을 쌓을 수 있도록 도움을 주신다면 감사하겠습니다.

'자기개발 > Linux' 카테고리의 다른 글

TCP 3-Way HandShaking과 4-Way HandShaking  (0) 2021.03.31
Linux 공부 5일차  (0) 2021.01.30
Linux 공부 4일차  (0) 2021.01.24
Linux 공부 2일차  (0) 2021.01.22
Linux 공부 1일차  (0) 2021.01.21