/* 테스트 1 버전 - 성능 최적화 적용 */ 마무: 리눅스 강의

블로그 소개


*여러분들의 따듯한 댓글은 5%, 팔로우는 10% 블로그 포스팅 속도와 퀄리티를 높여줍니다.*

프로필

팔로우 해주시면 포스트할 때 큰 힘이 됩니다!!! 사실 저도 이 팔로우가 무슨 기능이 있는지는 모르겠습니다만, 팔로우 수가 늘면 '날 응원해주는 사람들이 있구나' 생각이 들어서 큰 힘이 됩니다.

팔로어

다른 페이지로 이동


리눅스 독학 페이지 운영체제 독학 페이지 네트워크 독학 페이지 시스템 해킹 하드웨어 독학 페이지 프로그래밍 독학 페이지 보안 페이지

오스 페이지 다이어트 정보 페이지 게임 정보 페이지 인생 꿀팁


****사진을 클릭하시면 페이지로 이동할 수 있습니다!****

<===***===↓↓↓You can use translate using chrome ↓↓↓===***===>

레이블이 리눅스 강의인 게시물을 표시합니다. 모든 게시물 표시
레이블이 리눅스 강의인 게시물을 표시합니다. 모든 게시물 표시

2020년 2월 7일 금요일

yum 자세히!

안녕하세요 마무입니다~ 이번 포스트에서 다룰 내용은 RPM의 상위호환이라 볼 수 있는 "리눅스 yum"으로,  "yum install",  "yum update" ,"yum"등등 많은 옵션들을 배울겁니다.

오늘 이 글을 다 읽으시면

리눅스 yum 

에 대해서 잘 외우고 실제로 잘 사용하실 수 있으실 겁니다!

자고로 "yum"은 리눅스를 사용하려면 필수적으로 알아야 하는 프로그램 입니다.

"RPM과 패키지 개념"을 먼저 알고 있으셔야 하니, 못 보신 분들은 꼭 보고 오세요!
RPM, 패키지란 : https://mamu2830.blogspot.com/2020/01/rpm-rpm.html


이 포스트를 다 보실시 이제 레드햇 계열 리눅스를 사용하는데에 있어서, 원하는 패키지를 마음대로 다운 및 관리할 수 있으실 거고, 리눅스마스터 yum 시험문제도 걱정 없으실 겁니다!

--목차--


1. 리눅스 YUM(Yellowdog Updater Modified)이란?
i) 왜 YUM이 더 좋은데 RPM을 배워야 하는가?

2. yum 명령어 및 옵션
i) yum [옵션] [명령] [패키지]
ii) yum 옵션(-y, -v, -h)
iii) yum (install, remove, search, update, check-update, info) 그리고 appstream과baseOS


---------

입니다.

여기서 못 찾은 내용은
리눅스 독학페이지 : https://mamu2830.blogspot.com/p/blog-page_13.html 에서 찾아보시면 있을 수 있습니다!!




1. yum 이란


YUM(Yellowdog Updater Modified)는 듀크대학교에서 개발된 RPM기반의,
레드햇 계열 리눅스의 패키지 관리 프로그램입니다.

여기서 맨 앞의 "Yellowdog"가 뭔지 궁금하실 분들이 참 많으실텐데
원래는 겁쟁이, 야비한 놈, 노조에 가입하지 않는 노동자등등 약간 비속어입니다만

왜 이런 저속한 단어를 리눅스 이름으로 정했는지는 아무리 찾아봐도 모르겠습니다.

누구는 "Yellowdog linux(리눅스의 배포판중 하나)"패키지 관리 프로그램이 "YUP(Yellow UPdater)"이며, "YUM"는 그 "YUP"의 업데이트 버젼이기에 
"Yellowdog"란 단어를 그대로 써서 "Yellowdog Updataer Modified"라고 그러던데.. (그래서 yellowdog 리눅스는 왜 Yellowdog라는 말을 썼냐고!!!!!!!)

몇 시간동안 찾아본 결과, 왜 "yellowdog"라는 말을 썼는지 찾는 건 의미가 없는 것
같습니다.

좀 쓸데없는 말이 길어졌는데 이 "YUM"이란 프로그램은 그냥 전 포스트에서 배운
RPM의 상위호환 프로그램이라고 생각하시면 됩니다.

기존의 패키지관리 프로그램인 "RPM"의 단점들 
1. 패키지를 설치하려면 패키지 파일이 있어야하고

2. 인터넷을 통해 다운하려면 정확한 URL이 필요했었던 것


3. 의존성이 있는 패키지들은 삭제가 안되고 패키지를 따로따로 한개씩 설치해야함


을 보완한 것이 "YUM"입니다!

다시 말해서 이 "YUM" 원하는 패키지를 하나 다운받으면 자동으로 의존성 있는
패키지들도 같이 다운해주며, 삭제를 할 때도 마찬가지로 의존성이 있는 패키지를 같이
삭제해줍니다.

또한 기존의 "RPM"은 패키지가 있어야지 설치가 가능했던 것에 비해, 이 "YUM"인터넷을 통해 패키지를 다운하고 바로 설치합니다.

그래서 인터넷만 되면(요즘 인터넷이 안되는 게 이상하죠?) 패키지를 설치 및 삭제할 때는
"RPM"보단 "YUM"을 훨씬 많이 쓰며, 쓰게 될 겁니다.

그럼 의문이 드는게 있죠?

i) 왜 YUM이 더 좋은데 RPM을 배워야 하는가? 


라는 의문이 말예요. 그 이유는 "YUM""RPM"에 비해 기능이 매우 적기 때문입니다.

당연히 설치 및 삭제 같은 경우 "YUM"이 압도적으로 편리합니다만 저희가 지난 시간에
배운, "RPM"수 많은 기능과 옵션들이 "YUM"에는 없다는 것이죠.

그렇기에 보통, 패키지를 설치 및 삭제할 때는 "YUM"을 쓰고, 패키지가 설치됐는지의 유무나, 패키지내 각각의 파일들의 정보 및 수정, 삭제, 확인 및 검사 같은 세부적인 기능 사용할 땐 "RPM"을 쓰는 것이죠.





2. yum 명령어 및 옵션


이야 바로 위에서 언급한 것처럼 "YUM"은 매우 편리하지만 기능이 매우 적습니다.

기능이 매우 적다는 것은 옵션 및 명령어도 매우 적다는 것이죠~ 그래서 "RPM"에 비하면
ㄹㅇ 껌입니다. 그러니 RPM과 비교해서 정말 가벼운 마음으로 한번 해보셔도 됩니다.

아 물론 제일 중요한 것! "YUM"은 인터넷이 되야 하니 꼭 인터넷이 되는지 확인할 것!






오른쪽 상단 "전원"버튼을 누르신 후 "유선 네트워크 설정"을  클릭하신다음






이렇게 "IPv4"를 누르시고 "자동(DHCP)"를 체크해줍니다.
DNS와 IPv4는 리눅스 마스터 1급 과정에서 배울 것이고, 라우팅은 CCNA에서 배울 지식이라 그냥 자동을 체크해주세요

그리고




자세히 보기를 누르신다음 "자동으로 연결(A)"를 체크해주세요, 이걸 체크하면 리눅스를
킬 때 자동으로 인터넷이 연결이 됩니다.

그리고 오른쪽 상단 파란색 "적용(A)"를 눌러주고




위 파란색 "켬" 단추를 마우스로 클릭해 한번 껏다 켜줍니다.

이러면 95%는 다 인터넷이 잘 되실거예요~


i) yum [옵션] [명령] [패키지] 



YUM 명령어 형식은
yum [옵션] [명령] [패키지] 
입니다만
yum의 옵션은 순서가 중요하지 않기에
"yum [명령] [옵션] [패키지]" 이렇게 해도 되고
"yum [명령] [패키지] [옵션]" 이렇게 사용해도 됩니다~

ii) yum 옵션(-y, -v, -h) 


제가 말했듯이, "RPM"과 같은 필수 옵션을 제외하면 보통 옵션이란 말 그대로 
있어도 그만 없어도 그만입니다.


-y(yes) : 그냥 yes, 네! 입니다. 이거 왜 쓰냐고요? 원래 yum의 작동원리가 예로들어
"yum install mariadb" 이렇게 칠 경우 


-y옵션을 안 붙일경우



위 사진처럼 되는데요. 저희가 "-y"옵션을 붙여서 "yum install -y mariadb"이렇게 쓰면
4번 5번과정이 생략이 되는 겁니다 

말 그대로 바로 패키지가 다운되죠, 이렇듯 "-y"옵션은 확인을 묻는 과정 없이 바로 
yum 명령어를 실행하라는 옵션입니다.


-v(verbose) : 아~ 이거 수 많은 명령어를 하면서 계속 나와 외웠죠? 과정을 좀더 자세하게 보여달라는 옵션입니다 


-h(help) : 그냥 yum 명령어를 어떻게 쓰는지, 옵션 종류들 등등 말 그대로 도와달라는 옵션입니다, yum -h 이렇게 쓰셔도 되고 yum install -h 이렇게 쓰셔도 다 똑같은 결과가 나옵니다.


iii) yum 옵션 명령어(install, remove, search, update, check-update, info) 



"yum [옵션] [명령] [패키지]" 이 형식에서 본격적으로 [명령]들을 배워볼 겁니다

yum은 특이하게 "명령"이라고 해서 "-"가 붙지 않은 형태의 단어가 추가로 사용되는데요
그냥 "yum install", "yum remove" 이렇게 통째로 하나의 명령어라고 생각하시면 편합니다.

yum install [패키지] : install, 설치하겠다는 영어단어죠? 뒤에 적은 패키지를 설치하겠다는
뜻입니다.





"yum install mariadb"라고 치니 설치할 패키지와 의존성있는 패키지 목록들을 쫙 보여주며, "Is this ok [y/N]" 이렇게 yes or no를 붙습니다.

여기서 "y"를 치면 이제 다운이 되겠죠. 하지만 애초 아까 배운 옵션 "-y"를 명령어 "yum intall mariadb"와 같이 칠 경우




이렇게 묻지도 않고 바로 다운하는 것을 볼 수 있습니다.

참고로 "mariadb"는 리눅스마스터 1급 과정에서 DB(database)를 사용할 때 쓸 프로그램
입니다

yum remove [패키지]: remove, 제거한다는 뜻이죠? 패키지를 삭제하겠다는 겁니다. 
초반에 말했듯이 "yum"은 의존성 있는 패키지들까지 한꺼번에 삭제해준다는 것~





네 설치했던 "mariadb"를 이번엔 "remove"로 제거해본 겁니다.
마지막에 yes or no를 묻죠? 이것도 "-y"옵션을 붙여서 "yum remove -y mariadb"이렇게
쳤으면 묻지 않고 바로 삭제합니다.


yum search [패키지] : search, 검색한다는 의미대로 적은 패키지들을 yum 패키지 저장소에서 찾고, 찾은 정보를 보여줍니다.






자 'search' 뜻대로 mariadb란 이름이 붙은 패키지들을 모두 검색하여서 그 기능들에 대한 설명과 함께 목록을 보여줍니다.


yum check-update : check-update란 뜻대로 업데이트할만한 패키지들이 있는지
체크하는 명령어입니다.






이렇게 뒤에 패키지를 적지 않으면 시스템 내 모든 패키지의 업데이트 가능 유무를 검사하고, 패키지를 적으면 그 패키지만 검사합니다.

사진을 보시면 "firefox.x86_64" 즉 파이어폭스 브라우저 같은 경우 오른쪽에 "Appstream"
이라고 적혀있죠? "Appstream"이란 리눅스 시스템에서 사용하는 다른 회사의 프로그램
이라고 생각하시면 됩니다.

반면에 "kernel.x86_64"와 같은 리눅스 시스템의 가장 중요한 커널같은 경우 오른쪽에
"BaseOS"라고 써있죠? 이건 말그대로 OS(운영체제)에 속한 기본 프로그램이라는 뜻 입니다.


yum update [패키지] : 자 이것도 말 그대로 패키지를 업데이트 하는 겁니다.
위에서 "check-update"로 찾은 패키지들중 하나를 업데이트 해보겠습니다.






"kernel"이라고만 쳐도 의존성 있는 패키지들도 함께 업데이트 하게 해주죠?

물론 커널을 업데이트 할거면 "yum update kernel*" 이렇게 별을 붙여서 전부 업데이트 해주는게 좋습니다(커널은 다운하는데 오래 걸리니 꼭 안하셔도 됩니다.)

참고로 "yum update"이렇게만 명령어를 치면, 모든 패키지를 업데이트 합니다. 그래서 이건 더욱 시간이 오래 걸리니 시간이 있을 때 하세요~(사실 공부할 땐 꼭 안해도 됨)

yum info(information) [패키지] : 딱봐도 패키지의 정보를 물어보는 명령인걸 알 수 있습니다.






이렇게 mariadb란 패키지의 정보들과 짧은 정리글 등등 정보를 보여주죠?



자 여기까지 오늘도 제 포스트를 보시느라 고생하셨고, 봐주셔서 감사합니다!

도움이 되셨다면 좋아요, 따뜻한 댓글, 팔로우 부탁드립니다! 정말
큰 힘이 되어 포스트의 퀄리티를 높여줍니다!!

그럼 다음에 더 좋은 포스트로 찾아뵙겠습니다!


2020년 1월 26일 일요일

this host supports amd-v, but amd-v is disabled라 뜰 때 MSI BIOS 가상화 키는 법


안녕하세요~ 마무입니다. 이번 포스트는 VMware를 처음 사용하실 때 "AMD-V is disabled"라 뜨는 경우 어떻게 해야할지 알려주는 포스트입니다.

VMware와 같은 가상머신을 사용하기 위해선 CPU의 가상화(Virtualization)기능을 사용해야 하는데, 보통은 이 기능이 꺼져있거든요

이 기능이 꺼져있으면 VMware에서 "This host supports AMD-V, but AMD-V is disabled"와 같이 에러가 뜨며 사용하지 못합니다.

그래서 BIOS에 들어가 이 "가상화"기능을 켜줘야 하는데, 이상하게 "MSI의 BIOS"같은 경우
가상화 기능을 꽁꽁 숨겨놨더라구요, 그래서 찾기가 생각보다 힘듭니다.

그래서 오늘은 "MSI의 BIOS에서" 가상화(Virtualization)기능을 키는 법을 알려드리려
합니다.







VMware를 실행하려 할 때 위와 같은 짤이 나올경우 저희는
"BIOS"에서 CPU가 가상화기술(Virtualization)을 사용하게(enable) 만들어야 합니다.

window 10이 아니신 경우, 컴퓨터를 부팅하실 때 "F2"나 "F10"을 클릭하여 BIOS에 진입합니다.

window 10이신 경우, 






이렇게 왼쪽 하단 검색창에 "복구 옵션"을 검색하여
누르시고






하던 작업들 전부 저장하고 끄신다음, "지금 다시 시작"을 눌러주세요







그 다음 "문제 해결"을 눌러주시고






"고급 옵션"을 눌러주신다음






"UEFI 펌웨어 설정"을 눌러주세요~








그리고 "다시 시작"을 눌러주시면 재부팅이 됩니다.
그리고 BIOS화면이 뜹니다


BIOS화면이 뜨시면





화살표를 표시한 "Advanced"를 누르시고





왼쪽 하단쯤에 있는 "OC"를 눌러주신다음






맨 밑에 있는 "CPU features"를 눌러주세요
누르시면 이제 여러 용어들이 나오는데





그 중 "SVM mode"라는 것을 눌러서 Enabled 해주세요

"SVM mode"는 "AMD" CPU에서 사용하는 가상화 기술 이름입니다.
그냥 이름만 다른거예요~

enabled로 바꿔주신다음





왼쪽의 "SETTINGS"눌러주신다음 "Save and Exit"를 눌러주세요 그러면
설정 해놓은 걸 저장만 할거냐, 저장하고 끌거냐, 저장 안하고 끌거냐 , 디폴트 세팅으로
바꿀거냐 등등 여러가지 물어보는데






그냥 "Save changes and reboot"를 눌러주세요

누르면 변경되는 사항들을 보여주며 리부트할거냐 물어보는데, 이제 리부트 한다고 누르면
끝납니다~

여기까지 끝냈으면 이제 자동으로 재부팅이 되며, 이후 VMware나 가상화 프로그램을
사용하실 수 있으실 겁니다!


도움이 됐길 바라고! 도움이 되셨다면 따뜻한 댓글, 팔로우 부탁드립니다!
저에게 정말 큰 힘이되어 포스트의 퀄리티를 향상시킵니다!

그럼 다음에 더 좋은 포스트로 찾아 뵙겠습니다!

블로그 홈페이지로 가기 :  https://mamu2830.blogspot.com/p/blog-page_23.html


2020년 1월 11일 토요일

리눅스 독학

리눅스 독학, 리눅스마스터 독학을 위한 페이지 입니다.


------리눅스마스터 2급단계----------

저는 포스트 하나 쓰는데 풀 집중하는 시간만 따져도 최소 10시간 이상 소요됩니다 ㅠㅠ   
도움이 되셨다면 광고 한 개만 클릭하셔서 5초정도만 봐주시면 정말 큰 힘이 됩니다!
(팔로우나 도움이 됐다는 댓글을 달아주시는 것도 큰 힘이 됩니다!)

공부할 때 별 문제가 없으시면 "1. xxxx"  , "2. xxxx" 이런 식으로 순서를 적은대로
보시면서 독학하시면 됩니다!

--리눅스 설치 및 기본세팅--

리눅스를 설치하고, 사용하기에 있어서 가장 기본적인 세팅과 알아야할 개념들이 있는 
구간입니다.




--리눅스의 파일에 관련된 개념과 명령어들--

리눅스를 사용할 때 필요한 최소한의 개념들이 있는 구간입니다.



3. 리눅스 이동 관련 명령어 + 기호들의 뜻



4. 리눅스 기본명령어2(파일관련)

5. 리눅스 vi, vim, gedit

6. 상위 디렉토리들의 이름과 용도


--리눅스 보안의 가장 기본인 "유저, 그룹, 권한 개념들"--

사실 리눅스를 쓰는 주 이유는 "서버"용이기 때문에 우리는 보안을 철저히 해야하죠?
보안의 가장 기초라 할 수 있는 개념들을 다룬 구간입니다.


7. 리눅스 유저관리,/etc/shadow



9. 리눅스 소유자 변경, chown, chgrp

10. 리눅스 권한 rwx 그리고 권한이 디렉터리 안 파일까지 적용

11. 리눅스 특수권한 SetUID, SetGID, Sticky Bit 그리고 명령어 "wall"


--리눅스를 제대로 사용하기 위한 명령어와 개념들--

리눅스를 본격적으로 사용하기에 필요한, 리눅스 운영체제의 특징이 드러나는 기능과
명령어들을 배우는 구간입니다. 


12. 리눅스 find 명령어, 와일드카드, 중괄호, 대괄호, 세미콜론

13. 리눅스 RPM, 패키지란, RPM database

14. 리눅스 yum이란?(appstream과baseOS 차이)


--리눅스의 저장장치에 관련된 개념들--

저장장치에 관련된 개념과 명령어들이 있는 구간입니다.  
서버를 관리하는 데 있어서 정말 꼭 필요한 개념입니다.


15. 리눅스 마운트,디스크 추가,fdisk, 파티션, df, mkfs, blkid

16. 리눅스 LVM에 대한 모든 것 그리고 xfs파일시스템 확장

17. RAID에 대한 모든 것과 해밍코드, 패리티비트란(linear, 0, 1, 2, 3, 4 ,5, 6, 10, 01, 15)

18. 리눅스 소프트웨어 RAID에 대한 모든 것(mdadm,0,1,5,10,오류,백업)








--리눅스 쉘과 프로그래밍--

리눅스의 명령어들을 해석하는 쉘과, 리눅스에서의 프로그래밍을 배우는 구간입니다.
여길 제대로 공부해야 진정하게 리눅스를 마스터 할 수 있습니다. 서버관리인이든
보안전문가든 일류가 될려면 프로그래밍을 할 줄 알아야 합니다.

19. 리눅스 쉘과 /etc/profile, /etc/bashrc, .bashrc




--리눅스의 역사와 라이센스--

리눅스와 유닉스의 역사 및 라이센스 정리












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

RAID (0, 1, 2, 3, 4, 5, 6, 10, 15) 기술 자세하고 쉽게!

안녕하세요~ 마무입니다. 오늘은 모든 RAID 기술들, "소프트웨어 RAID와 하드웨어 RAID", "RAID 패리티란", "RAID 개념과 뜻", "RAID 0, 1", "RAID 2, 3, 4", "RAID 5, 6" "RAID 10, 15"에 대해서 배워볼 겁니다.

주로 서버에서 사용하는 "디스크 백업 + 속도향상" 목적의 기술이지만, 저희들도 사용하고 싶다면 사용할 수 있는 그런 기술입니다.

특히 저희 리눅스마스터 1급을 준비하시는 분들은 서버를 운영하는 능력을 증명하기 위해
공부를 하는 것이므로 주의깊게 보시면 더욱 좋습니다~

자 오늘의 목차입니다!

--목차--

1. RAID(Redundant Array of Inexpensive/Independent Disk) 기술이란?

2. 하드웨어 RAID와 소프트웨어 RAID
i)하드웨어 RAID를 만들 때 필요한 RAID controller card
ii)소프트웨어 RAID 

3. Linear RAID 

4. RAID 0(Striping 방식)

5. RAID 1(Mirroring 방식)

6. RAID 2, 3, 4를 잘 안쓰는 이유, 그리고 레이드 기술은 복합적으로
사용가능(10, 01, 15등등) 

i)RAID 2, 해밍코드란
ii)RAID 3, Parity(패리티)란?, RAID 4
iii)RAID는 복합적으로 사용가능하여 RAID 01, 10와 같이 구성 가능

7. RAID 5
i)RAID 15

8. RAID 6

--------

여기서 못 찾은 정보는
리눅스 독학 페이지https://mamu2830.blogspot.com/p/blog-page_13.html
운영체제 독학 페이지https://mamu2830.blogspot.com/p/blog-page_14.html
에서 찾아보세요!



1. RAID(Redundant Array of Inexpensive/Independent Disk) 기술이란?


컴퓨터 공학에서 사용되는 대부분의 용어들은 영어를 해석하면 쉽게 무슨 역할의
기술인지를 알 수 있습니다. 이 "RAID"도 마찬가지이죠.

"RAID""Redundant Array of Inexpensive/Independent Disk"란 영어의 줄임말
입니다.

Redundant(중복돼 필요없는) Array of(배열한 것) Inexpensive(싼 가격의) Disk(디스크들을)

또는

Redundant(중복돼 필요없는) Array of(배열한 것) Independent(혼자서 쓰이는) Disk(디스크들을)

이런 의미입니다. 글로만으론 살짝 이해가 잘 안되죠? "중복돼 필요없는" 이라니..
여기서 "중복돼 필요없는"라는 뜻은 약간 "데이터 복원용의" 라고 의역하여 이해하면 좋을 것 같습니다.

실제로 이 "RAID"라는 기술은 중복되는 데이터를 만들어 추가로 디스크에 저장한 뒤, 
이를 이용해 특정 디스크의 데이터가 손실됐을 때 데이터 복원이 가능하게 만들거든요 

"RAID"서버에서 주로 사용하는 기술이라 "성능 향상"보단 데이터 복원용으로서
비중이 더 크기에,  Redundant(중복돼 필요없는)이라는 단어를 쓰지 않았나 싶습니다.

그래서 "non-redundant disk"라는 건 "데이터 복원기능 없이 사용하는 디스크"
의미합니다.

Array of(배열한 것)이라는 건 뜻 그대로 관리하기 쉽게 순서대로 정리하는 것
의미하는데요.




이렇게 "실제로 하드디스크들을 배열한 걸" 의미할 수도 있지만





여기선 컴퓨터 데이터들을 분리해서 차례대로 디스크에 정리하는 것"배열"의 의미가
좀 더 강한 것 같습니다.

컴퓨터 프로그래밍에서의 배열과 같은 느낌이라 생각하시면 됩니다.

Inexpensive(가격이 싼)이란 단어가 쓰인 건, 이 "RAID"기술이 옛날에 비교적 싼 하드디스크들을 합쳐서 큰 용량으로 만들어 사용할때 쓰이던 기술이라 "I"Inexpensive였던 것이고,

요즘은 하드디스크 가격이 비싸지 않기에 그냥
Independent(독립적인{말이 어려운데, 그냥 디스크})들로 만든다의 "I"
쓰입니다.

자 다시 정리하자면 "RAID" 기술은
"복원을 위해 중복되는 데이터를 만들고, 전체 데이터들을 나누어 각 독립적인 디스크들에 배열하는 기술"
이라 할 수 있겠네요~

물론! 이 "RAID"는 하드디스크 뿐만 아니라 "다른 디스크(SSD 등등)" 들에도 사용할 수 
있는 기술이란 것을 잊지마세요! (SSD로 서버를 구성하면 가격이 어마어마 하겠지만..)

하지만 같은 종류의 하드디스크끼리나 SSD으로만 RAID를 구성할 수 있어요!
(하드디스크 + SSD)나 (서로 다른 종류 하드디스크 + 하드디스크) 이렇게는 못합니다!

참고로 이 "RAID"란 기술은 크게 하드웨어적으로 구성하는 "하드웨어 RAID"
소프트웨어로 구성하는 "소프트웨어 RAID"로 나뉘어 집니다.



2. 하드웨어 RAID와 소프트웨어 RAID




"RAID"개념이 또 두개로 나뉘어지니 복잡하죠? 하지만 그렇게 복잡할 건 없습니다.
둘의 차이점은 말 그대로 "하드웨어로 구성하냐" "소프트웨어로 구성하냐" 차이거든요
나머지 개념들은 모두 같습니다.

하지만 실제 상황에선 "소프트웨어 RAID"를 쓸 일이 거의 없다는 것(뭐 쓰고 싶으면
쓰겠지만...)

왜 실제 상황에서 "소프트웨어 RAID"를 잘 안쓰는지는 바로 "하드웨어 RAID"에 대해서
배우시면 그 이후 자동으로 깨달으실겁니다.


i)하드웨어 RAID를 만들 때 필요한 RAID controller card




하드웨어 RAID는 말 그대로 "실제적으로 RAID"를 구성한 것을 말합니다.
어떻게 실제적으로 RAID를 구성한다는 것일까요?

하드웨어 RAID는 "RAID Controller card"라는 것을 통해 각 디스크들을 실제적으로
연결하여 "RAID"를 구성하는데요 "레이드 컨트롤러", "레이드 카드" 등등 취향에
맞게 부릅니다




(출처 : https://1boon.kakao.com/kbench/5a618447ed94d20001c5b291)


이런 8bay(8칸으로 나뉘어져 있단 뜻임)케이스 같은 곳에 RAID를 구성할 하드 디스크를 
여러개를 꽂은 다음케이스와





(출처 : https://www.amazon.com/Dell-Controller-Standard-Profile-J9MR2/dp/B01J4744L0)


보통 이렇게 생긴 "RAID controller card"주황색으로 표시한 곳을 "RAID 케이블"
연결을 합니다.

이렇게 하드디스크들과 RAID 컨트롤러를 연결했으면저 RAID 컨트롤러, 혹은 RAID 카드를 컴퓨터의 PCI버스(다른 장치들을 컴퓨터와 연결하는 통로)슬롯에 꽂는 것이죠.




(출처 : https://techterms.com/definition/pci)

이렇게 빨간 원으로 표시한 곳이 "PCI 버스 슬롯"입니다. 컴퓨터를 직접 조립해보셨거나
다른 부품을 갈아끼우실 때 종종 보셨을 겁니다.

이렇듯 "하드웨어 RAID"실제적으로 연결하여 RAID를 구성하는데요

하드웨어 RAID를 구성할 때 "케이스"는 꼭 필요하진 않습니다.
요즘 메인보드엔 여러 하드디스크를 꽂을 수 있기 때문이죠.(물론 서버와 같이 큰 용량을
필요로 하면 케이스가 있어야겠죠?)

하지만 이 "RAID Controller"하드웨어 RAID에 있어서 필수적으로 있어야 합니다.
왜냐하면 이 "레이드 컨트롤러"가 이름 그대로 "RAID 기술"을 "컨트롤(계산해주고 구성)
해주는 부품"이기 때문입니다.

또한 "RAID Controller"계산을 해야하기 때문에 자체적으로 CPU메모리를 갖고 
있습니다. 

이거 없이 구성하면 "소프트웨어 레이드"가 되는 것이죠

아 이런 벌써 "소프트웨어 레이드"가 뭔지 감이 오시나요?
그래도 좀 더 제대로 알고 가보죠!


ii)소프트웨어 RAID 




네 위에서 대충 감이 오셨겠지만 말 그대로 "RAID Controller 없이" RAID를 
구성하는 것을 "소프트웨어 RAID"라고 합니다.

실제로 RAID계산을 해주는 부품인 레이드 컨트롤러가 없으니까RAID계산을
현재 우리가 사용하고 있는 "CPU""프로그램"이 하게 되죠.

그래서 "소프트웨어 RAID"라고 하는 것이고, 소프트웨어적으로 RAID 구성하는 것 만큼
컴퓨터 전체 성능을 떨어뜨리며 실제로 기대했던 성능만큼 RAID기술 성능이 나오지 
않습니다

그래서 당연히 실제에선 사용을 잘 안하는 것이죠.

하지만 당연하게도 대부분의 운영체제에선 이런 소프트웨어 RAID를 지원을 합니다.
(그래서 개인이 만들고 싶으면 만들 수 있습니다.)

윈도우나 지금 제가 포스트를 주로 하고 있는 리눅스에서도 말이죠.
안 그래도 이 포스트를 쓰는 이유도 리눅스에서 소프트웨어 RAID를 구성하기 위해서라는..

소프트웨어 RAID를 구성하는 것은 다음의 리눅스 포스트에서 다루도록 하겠습니다.
참고로 리눅스마스터 시험에는 소프트웨어 RAID개념과 구성 하는 법이 나오니 알아두세요!




3. Linear RAID




이야 이제야 본격적으로 RAID 종류에 대해서 알아보게 됐네요~
제일 먼저 알아보는 RAID 기술은 "Linear(직선 형태로 구성하는) RAID"입니다.

이름 그대로 "직선 형태처럼 구성하는 RAID"인데요 그냥 데이터를 디스크에
직선 형태처럼 차례대로 차곡차곡 저장하는 걸 말합니다.






딱 이 그림과 같이 차례대로 데이터를 저장한다고 보시면 되겠습니다.

굳이 장점을 하나 꼽자면 "LVM"처럼 여러 디스크를 하나인 양 쓸 수 있다는 것
이라고 할 수 있겠네요 하지만, 이건 말 그대로 여러 디스크를 합치는 것 뿐이라
데이터 복원 기능도, 성능 향상도 없습니

다른 디스크의 파티션들을 합치고 또한 볼륨 확장까지 가능한 "LVM"에 비하면
"Linear RAID"는 구대기.. 안 좋죠 ㅎㅎ 그래서 쓸 일은 거의 없습니다.

그냥 "디스크 데이터 저장방식"에 "Linear"라는 단어가 붙으면 데이터를 차곡차곡 저장한다는 방식이라는 것만 알아두시면 될 것 같습니다~




4. RAID 0(Striping 방식)




드디어 본격적으로 "RAID"라 할 기술이 나왔습니다~
바로 "RAID 0"라는 기술인데요 이 "RAID 0"의 특징은 바로 "데이터를 여러디스크에 분산 
저장하고 동시에 여러개를 읽어들이는 기술"이라는 겁니다.

데이터를 여러 디스크에 분산 저장하고, 동시에 여러개를 읽어들인다라..
뭔가 감이 안 잡히시죠? 그림을 보시면 바로 이해하실겁니다!





이렇게 "I am man"이란 문장이 있을 때, 디스크가 RAID 0으로 되어 있다면
위 그림처럼 차례대로 분산저장이 된다는 겁니다.

각 디스크는 독립적으로 "스핀들"이나 "액츄에이터"를 갖고 있기에, 동시에 데이터를 
저장하는 것이 가능하겠죠? 이 말이 이해가 안 되신다면 "하드디스크 구동 원리"를
모르시는거니  https://mamu2830.blogspot.com/2019/10/blog-post_14.html
를 꼭 보고오시면 좋겠습니다.

계속하여, 동시에 데이터를 저장할 수 있기 때문에, "RAID 0을 맺는 디스크의 수" 만큼
"데이터의 저장 속도가 빨라진다"고 볼 수 있습니다. 위 그림처럼 3개의 디스크로
RAID 0을 맺었으면 3배로 데이터를 저장하는게 빨라진다는 것이죠.

자 말했다시피 각 디스크는 독립적으로 구동하니, 저장한 데이터를 여러개 읽는 것도
동시에 가능하겠죠? 





이렇게 말이죠~ 결국 데이터를 저장하는 것처럼, 3개의 디스크를 RAID 0을 맺으면
데이터를 읽는 속도도 3배로 빨라진다는 겁니다.

정리해서 "RAID 0"의 특징은 바로 "디스크 n개로 만들면 데이터를 읽고 쓰는 속도가
 n배가 된다는 것"

자 그런데 궁금한 게 있죠? 바로 "Striping 방식"이라는 것, 여기서 분명
'아니 내가 아는 striping은 줄무늬를 말하는데?? 디스크에서 줄무늬라니 무슨 소리지..?'
로 생각하며 이해가 잘 안되시는 분들이 있을 겁니다.

사실 그 줄무늬가 맞습니다. 여러분이 생각하는 그 줄무늬요. 이해를 돕기 위해
윗 그림을 한번 바꿔볼게요~





자 바꿨습니다. 뭔가 "줄무늬"라는 것이 느낌이 팍 오지않나요?
그렇습니다 윗 그림처럼, 데이터를 분산 저장할 경우 그림처럼 줄무늬같이 데이터들이
나눠 저장돼서 "Striping 방식"라고 하는 겁니다.  

처음에 배웠던 "Linear 방식"과 반대 개념이라고 생각하시면 됩니다.
그래서 "Linear/striped" 이런식으로 디스크공간에 어떻게 데이터가 저장됐는 지를
구분합니다.


하지만 데이터를 분산저장하기 때문에 RAID 0을 이루는 디스크중 하나라도 고장나면
전체 데이터가 못쓰게 된다는 것이 치명적인 단점입니다~(당연하죠?)





5. RAID 1(Mirroring 방식)




이야 RAID 0과 마찬가지로 중요한 기술중 하나인 "RAID 1"입니다!
RAID 1부터가 사실상 진정한 "Redundant"란 단어가 어울리는 기술인데요

"RAID 1"은 바로 각 디스크에 똑같은 데이터들을 저장하는 겁니다.
"Redundant"라는 영어 뜻대로 중복된 데이터들을 저장하는 것이죠.

그림을 보시죠!




위 그림처럼 "RAID 1"을 맺은 디스크들에게는 똑같은 데이터가 저장이 됩니다.

당연히 RAID 1을 맺은 디스크들 각각에 똑같은 데이터들을 저장하니
실제로 사용할 수 있는 공간은 그만큼 줄어듭니다. 

2개의 디스크로 RAID 1을 맺었으면 총 50%공간만 사용하는 것이고
3개의 디스크로 RAID 1을 맺었으면 총 33.33...% 공간만 사용하는 것이겠죠

당연히 똑같은 데이터를 저장하는 이유는 "데이터 복원"을 위해서겠죠?
다른 한 디스크의 데이터가 손실이 되어도, 다른 하나의 디스크의 데이터를 이용해
복원하면 되는 거니깐요~

정리해서 "RAID 1"의 특징은 바로 "n개의 디스크로 RAID 1을 만들면 각 디스크에 똑같은
데이터들이 저장되고, 실질적으로 사용하는 공간은 1/n이 된다" 입니다.

자 그럼 궁금한 거 또 나와야죠~ 바로 "Mirroring 방식"이란 무엇이냐~

영어 뜻 그대로 입니다~ 거울마냥 똑같은 데이터를 저장하는 것이고 우리가 아는 쉬운 단어로 바꾸자면 "복사"라고 말할 수 있겠네요

RAID 1은 각 디스크들에 똑같은 데이터를 저장했었죠? 그래서 "mirroring 방식"~


자 여기서 RAID 0과 RAID 1이 상당히 헷갈리실텐데요~(뭐가 복원용인지, 뭐가 분산저장
인지)

제가 외웠던 방법을 알려드릴게요~ 바로 제가 설명했던 것처럼
"RAID"라는 이름의 "R(Redundant)""중복돼 필요없는"이라는 뜻이랬잖아요?

말그대로 중복되는 데이터가 있어야 RAID인데, "RAID 0"과 "Linear RAID"는 
중복되는 데이터가 없죠~ , 중복되는 데이터가 없다고 해서  숫자 "0"...!! 

그리고 "Linear RAID"는 사용할 만한 장점이 아무것도 없기에 아무런 숫자도 없다~

그럼 자연스럽게 "똑같은 데이터를 저장하는 장점의 RAID"는 남은 숫자 "RAID 1"이죠?

또한 이 이후로 나오는 RAID 2, 3, 4, 5, 6 ... 이렇게 0이 아닌 RAID 기술들은 모두
복원기능이 있다고 보시면 됩니다.




6. RAID 2, 3, 4를 잘 안쓰는 이유, 그리고 레이드 기술은 복합적으로 사용가능(10, 01, 15등등) 




뭔가 우리는 규칙을 발견했습니다. RAID 뒤에 있는 숫자가 0 1 ... 이렇게 증가하는 것을요
그럼 당연히 생각이 나죠! 바로 "RAID 2, 3, 4"도 있겠구나! 

네! 맞아요! 있습니다!

네!

하지만 2, 3, 4는 대충 설명하고 넘어갈 겁니다. 왜냐면 현재 거의 쓰이지 않으며
또 이해하려면 다른 컴퓨터 지식들이 많이 필요하기에 포스트만 길어지기 저만 힘들기
때문이죠~


i)RAID 2, 해밍코드(Hamming code)란?




RAID 2는 ECC(Error Correcting Code, 에러 고치기위한 코드)라고도 불리는 해밍코드를 사용하여 사용할 디스크들와 복구용 디스크를 구분하고, 이 때 사용할 디스크들은 RAID 0처럼 striping(데이터 분배)방식으로 데이터들을 저장 및 읽어들여 사용한다는 게 특징입니다.

왜 이렇게 '데이터 디스크'와 '복구용 디스크'가 구분이 되냐면, 해밍코드의 특징 때문입니다.

"해밍코드"라는 개념을 모르는 분들이 꽤 있으실 겁니다.

해밍코드는 "데이터 통신" 수업을 들은 적이 없거나, 비전공자들은 모르는 개념으로
매우 간단히 설명하고 자세하게는 다른 포스트에서 다루도록 하겠습니다.

'해밍코드'기존 데이터에 패리티 데이터들을 추가하여, 기존 데이터에 오류가 발생했을 때 에러가 발생된 코드를 원래 코드로 수정하기 위해 사용하는 기술입니다. 

비단 데이터 송수신 뿐만 아니라, 모든 컴퓨터 영역에서 사용되는 데이터 복구 기술에서 'ECC'라는 이름으로 사용되고 있죠!

이 때 모든 기존 데이터에서 오류를 수정하기 위해 필요한 최소 패리티 비트 수
아래 해밍코드 공식으로 구할 수 있습니다.(^는 승을 의미, ex)2^4 = 16)

해밍코드 : 2^p(parity 비트 수) >=  d(data bit수) + p(parity 비트 수) + 1

예를 들어 80 bits 데이터가 있을시 에러 수정 기능을 넣기 위해선 
ex) 2^6(64) >= 80 + 6 + 1(만족 안됨)
ex) 2^7 >= 80 + 7 + 1(만족 됨)
최소 7bit의 패리티 비트가 필요하다는 것이죠.

다시 돌아와서 

RAID 2는 해밍코드 기술을 사용하기에 기존 디스크에 저장되는 데이터가 있으면 오류 수정에 필요한 만큼 추가 데이터(패리티 비트들)이 생기며, 이 때 추가된 패리티 비트들은 분리해 따로 복구용 디스크에 저장합니다.

그리고 이 때 RAID 2를 이루는 디스크는, 데이터를 저장하기 위한 디스크 수복구용 디스크의 수같게 한다고 하네요.

즉, RAID 2 RAID 0 방식 + 복구용 디스크가 있는데, 그 복구용 디스크는 해밍코드 때 필요한 패리티 정보들이 들어있다라 할 수 있습니다.

이러한 RAID 2는 현대에서 거~~의 사용이 안되는데요. 그러한 이유는 이러합니다.

1. 데이터 처리 단위가 비트 수준입니다.
--> 현대에서 데이터 단위는 섹터만으로도 부족해, 블록단위를 만들어 사용하고 있는데, 비트단위로 데이터를 저장 및 사용한다는 건 정말 엄청 뒷처친 기술이죠.

2. 각 디스크들의 동기화를 해주는 비싼 드라이브가 추가로 필요하다.
--> 패리티 데이터들은 따로 복구용 디스크에 저장하고, 데이터를 읽기할 때는 모든 디스크에서 striping(RAID 1) 방식으로 하기 때문에 RAID 2를 이루고 있는 디스크들 동기화를 해주는 특별한 장치가 추가로 필요하며, 그것도 안 쓰이는 이유 중 하나입니다.

3. 위에서 말한 동기화 과정과 추가적인 해밍코드 생성등 복잡한 작동 매커니즘 때문에 시스템 속도가 다운된다.
--> 데이터 복구라는 장점에 비교해서 성능 하락이 너무 심하며, 성능 면에서 더욱 월등한 RAID 3이상 기술 등장요즘 하드 디스크는 자체적으로 ECC기능을 갖춘 경우가 많기에 더더욱 RAID 2를 쓸 이유가 없어졌다고 합니다.

--지식 출처-- 
https://www.open-e.com/blog/raid-2-raid-3-raid-4-what-it-is-how-it-works-the-history-lesson/
https://www.geeksforgeeks.org/hamming-code-in-computer-network/



ii)RAID 3, 패리티비트(parity bit)란?, RAID 4





RAID 3은 RAID 0처럼 striping(데이터를 분산하는)방식으로 저장하는데, 하나의 디스크는
"패리티(parity)"용으로 만드는 것이 특징입니다.

자자 모르는 단어가 나와버렸네요! 바로 패리티(Parity)! 이건 해밍코드와 달리
앞으로 자주 보게될 정도로 알고 있어야할 지식이기 때문에 좀 자세히 설명하고
넘어가겠습니다

"Parity(패리티)""동등한 상태"란 뜻 단어인데요, 주로 봉급이나, 지위에서의
동등함을 표현하기 위해 쓰이는 단어입니다.

그럼 "컴퓨터 공학"에서 쓰이는 "패리티(Parity)란 무슨 의미일까요?"
바로 기존의 정보랑 동등한(똑같은) 상태인지 확인할 때 쓰이는, 즉 오류가 났는지
검사하기 위해 추가한 것을 의미합니다.

자 그럼 "패리티 비트(Parity bit)"란 무엇일까요? 그렇죠 바로
"기존의 데이터랑 똑같은지 확인하기 위해 추가하는(Parity) 비트(bit)"를 말하는 겁니다.

컴퓨터 공학에서는 이렇듯 오류를 검출하기 위해 패리티 비트를 추가하는 방식을
자주 사용하는데요

패리티 비트는 "홀수 패리티 비트" 또는 "짝수 패리티 비트" 이렇게 있습니다.
"짝수 패리티 비트"란 말 그대로 0과 1중, 1이 짝수가 되게끔 비트를 추가하는 것이고

"홀수 패리티 비트"란 말 그대로 0과 1중, 1이 홀수가 되게끔 비트를 추가하는 겁니다.

1이 홀수, 짝수로 되게끔 비트를 추가한다는 게 뭔소리인가 싶죠?
예시를 통해 설명해볼게요~

"3비트의 데이터"와 "1비트의 패리티 비트"가 있다고 쳐봅시다. 그리고 "짝수 패리티 방식"
구성 해볼게요

데이터 3비트가 "101" 이렇게 있다고 칩시다 현재 "1"의 개수가 2개로 이미 짝수죠?
그러므로 패리티 비트짝수를 유지하기 위해 "0"으로 정해져서 들어가는 겁니다.
그러면 "1010" 이렇게 되겠죠

여기서 데이터 비트 "101"중 가운데 "0""1" 변질됐다고 쳐봅시다
그럼 총 데이터가 "1110" 이렇게 되겠죠? 그럼 원래 "짝수 패리티 비트 방식"을 썼기에
분명 "1"의 수가 짝수여야 하는데, 3개로 홀수가 됐으니 1개 비트가 바뀌었구나!'
이렇게 알 수 있는 겁니다.

즉, "패리티 비트"를 쓰면 '정보가 변질됐구나!' 와 같이 오류가 생겼다는 것을 
검출할 수 있는 것이죠.

원래는 시리얼(serial, 직렬) 데이터 통신같은 데이터 전송 때 쓰이는 패리티 비트(parity bit)는 "오류 검사용"으로만 쓰이지만"RAID"에서의 패리티 기술은 1개의 디스크의 오류를
복구할 수 있습니다.

하지만 여기서 의문이 듭니다. 위 설명은 바로 "인간인 우리"가 봤을 때 아는거지
기계는 정보가 변질됐는지 어떻게 계산할까? 라는 의문이 말이죠

다시 말하자면, 기계"1"이 짝수인지 아닌지(짝수 패리티비트니까) 어떻게
계산하냐 이거죠

바로 여기서 쓰이는 기계가 패리티 비트 검출 때 쓰는 논리연산이 바로 
"XOR(Exclusive OR)"입니다.

"XOR"는 서로 다르면 "1", 같으면 "0"인데요
그냥 데이터 비트들을 차례대로 XOR연산을 하면 마지막에 나오는 수가
"짝수 패리티비트"입니다

위에서 예시를 들었던 "101" 데이터비트인 경우 짝수 패리티비트를 구하는 방법은






이렇게 됩니다. 주황색부터 시작해서
1과 0은 다르기에 XOR 연산을 하면 1이 나옵니다.
그 다음 나온 "1"을 다음 1과 XOR연산을 하면 "같기 때문에" "0"이 나옵니다.
그래서 최종적으로 남은 "0"이 바로 "짝수 패리티 비트"인 것이죠 이제 이 "0"을 데이터
비트 뒤에 추가만 해주면 되는 겁니다.

초반에 알려준 것처럼, 짝수 패리티비트기에 "1"의수가 이미 짝수라 "0"을 준 것과 결과가
똑같죠?

그럼 "홀수 패리티비트"는 어떻게 계산을 하느냐? 바로 위 계산에서 나온 
"짝수 패리티비트"를 "NOT"처리를 하면 됩니다. 다시 말해서 "짝수 패리티 값"으로 나온 걸
"반대 값"으로 바꿔주면 된다는 것이죠






위 사진처럼 XOR계산을 해서 나온 값이 "0"인 경우 그냥 NOT처리를 하여
1로 바꿔서 " 1을 홀수 패리티비트"라고 넣으면 되는겁니다.

XOR한 값을 NOT한 것을 패리티 비트라고 넣어주니, 1의 수를 홀수로 맞추던 방식과
똑같이 됐죠?

여기까지, 눈으로 1의 짝수, 홀수를 계산하는 방법외에도 XOR을 이용하는 방식이 있고,
컴퓨터는 이렇게 계산을 한다는 것을 알려드린겁니다.

현재 제가 패리티비트가 1개일 때를 예시로 설명했었는데, "RAID 3"에선
"바이트 단위로" 데이터가 나뉘어져 각 디스크들에게 저장되고,
"바이트 단위의 패리티 데이터"들이 패리티 디스크에 저장이 됩니다.

와,, 저흰 1개의 패리티비트만 계산했었는데 바이트 단위로는 어떻게 패리티비트를
계산을 할까요?

보통 RAID 3는 1024Byte로 나눠서 저장한다고 하는데... 이걸 제가 계산을 다 할 순 없고..

"2개의 데이터용 디스크""1개의 패리티 디스크"총 3개의 디스크가 있고
각 디스크에 "1바이트"씩 저장하며, 패리티비트는 짝수형이라 치고 같은 원리를 사용해
설명해 볼게요




이렇게 총 16비트의 데이터가 있고 원래대로면 RAID 0처럼 스트라이핑 방식으로,
사용하는 디스크에 1바이트(8비트)씩 나눠져 들어갈 겁니다.

여기서





1번처럼 10101011과 0101011을 XOR해서 나온 "11111100"이 바로 짝수 패리티비트
인 겁니다 이걸 패리티 디스크에 저장을 하는 것이죠.

만약 "홀수 패리티 비트 방식"이라면 저걸 NOT처리해서 "11111100 --> 00000011"해서
패리티 디스크에 넣으면 되는 것이죠

위 방식처럼 패리티 디스크를 만들어서 저장할 경우





이렇게 데이터용 디스크 하나의 정보가 손실되어도
남은 디스크와 패리티 디스크의 정보를 이용해 복구할 수 있는겁니다.

하지만 XOR계산을 사용하기 때문에 오직 하나의 디스크만 복구할 수 있습니다.
2개이상 고장나면 어쩔 수 없죠. 

최소 3개이상의 디스크로 구성해야 합니다. 왜냐고요? 2개만 쓸거면 사용할 디스크
1개, 패리티 디스크 1개인데 이런식이면 결국 RAID 1과 다를게 없기 때문이죠

이제 저는 예시를 1바이트로 잡았지만 실제에선 1024바이트 x 디스크 수들을
XOR 계산을 한 다음 나온 최종 값을 패리티 디스크에 넣겠죠.. (우욱)

자! 바로 "RAID 4"도 설명할게요. 아주 쉽습니다
그냥 "RAID 3"와 거의 똑같습니다

유일하게 다른 점은 바로 "RAID 3"는 "바이트 단위"로 디스크에 저장하지만
"RAID 4"는 "블록 단위"로 디스크에 저장한다는 점이 다릅니다.

블록이 뭐지...? 하시는 분들은
https://mamu2830.blogspot.com/2019/10/chs-lba.html
이 파일시스템 포스트를 읽고 오시길 바랍니다.

여기서 중요한 점.. 제가 시작할 때 RAID 3과 RAID 4도 현재 거의 안쓰인다고 했었죠?
왜 그럴까요?

그렇습니다... 바로 하나의 디스크에 만든 패리티 정보를 저장해야 하기 때문에 이 과정에서
병목현상(시스템 성능 저하)이 생기며, 또 데이터를 읽어들일 때는 패리티 디스크는 제외해야하기 때문에 속도가 약간 감소한다고 합니다. 

그리고 이후 이러한 단점들이 커버된 'RAID 5'발명됐기 때문에, 하위호환인 RAID3와 RAID4를 지금은 사용을 안하는 겁니다!

자 대충 설명한다고 했는데 또 제 성격상 쓸데없이 자세하게 설명한 것 같네요..(에효)

긴 글 읽느라 몽롱해졌을테니 정리하고 다음으로 넘어가겠습니다!


RAID 2 : 해밍코드를 이용하여 구성하며, 데이터 저장 방식은 RAID 0과 같이 striping 방식

RAID 3 : 패리티 디스크 하나를 두어 바이트 단위로 저장함, 데이터 저장방식은 striping

RAID 4 : RAID 3와 똑같은데, 블록 단위로 저장한다는게 다르다




iii)RAID는 복합적으로 사용가능하여 RAID 01, 10와 같이 구성 가능




RAID를 보다보면 가끔 "RAID 10", "RAID 15"막 이런 숫자를 보기도 하는데요.
RAID를 잘 모르시는 분들은 이걸 보고 '세상에! 벌써 RAID 15까지 기술이 발전한
건가...!? 어떡하지.. 15까지 언제 공부해...' 이렇게 지레겁을 먹으실 겁니다.

하지만 그럴 걱정 전혀~~ 없습니다. 왜냐면
그 "RAID 10, 15"는 진짜 숫자 10과 15가 아닌 "RAID 1과 RAID 0의 조합" 그리고
"RAID 1과 RAID 5의 조합"이기 때문입니다.

RAID란 기술은 복합적으로 사용할 수 있기 때문에 생긴 숫자라고 볼 수 있죠 ㅎㅎ

속도가 배가 되지만 복구 기능이 없고 위험 부담이 커지는 "RAID 0"과
안정성은 배가 되지만 사용 용량이 배로 줄어드는 "RAID 1"을
복합적으로 조합하여 구성을 하여 효율을 늘리는 겁니다.






위 사진처럼 RAID 0을 먼저 구성한 다음 RAID 1을 구성하면
이걸 "RAID 0+1" 또는 "RAID 01" 이라고 부릅니다.

총 6개의 디스크가 RAID 0으로 맺어졌으니 6배 빠르겠지만
RAID 1로 절반을 묶었으니 실제로 사용하는 양은 2분의 1배가 되어

결론적으로 3배가 빠르고, RAID 0으로 맺어진 3개의 디스크중 하나가 고장나면
다른 RAID 0 디스크들을 통해 복구를 할 수 있죠


그럼 이번엔 RAID 1을 먼저 맺은 다음 RAID 0을 맺는 RAID 10 방식을 봐보겠습니다.





이처럼 RAID 1을 먼저 맺고 그 다음 RAID 0을 맺은 방식을
"RAID 1+0" 또는 "RAID 10"이라고 부릅니다.

이것또한 총 6개의 디스크가 2개씩 RAID 1을 맺어 총 용량이 2배 나눠져
총 3개의 디스크와 같지만, 그 3개의 RAID 1묶음에 RAID 0을 맺어
속도는 3배 증가한 모습을 볼 수 있습니다.

벌써 감이 오시다시피 "RAID 10"이 "RAID 01"보다 더 좋습니다.
RAID 10은 복구용 디스크가 3개라 볼 수 있고, 한 레이드에 엮인 디스크도 2개밖에 
안되는데,

RAID 01은 복구용 디스크가 2개라고 볼 수 있고, 한 레이드에 엮인 디스크는 3개나
되기 때문입니다!(읽기도 별로임 01이 뭐야 01이...)

그래서~~ 당연히 RAID 01보단 RAID 10을 더 자주 사용합니다~
그리고 앞서 설명한 것처럼 RAID 1의 장점을 이용하여 "RAID 5"와 결합한
RAID 15도 있다는 걸 알아두세요~





7. RAID 5





이야 중요한 RAID 5가 드디어 나왔습니다~  RAID 5는 현재 제일 많이 쓰이는
RAID 기술이며, 그만큼 유명해 들어본 사람들도 많으실 겁니다

하지만 RAID 5를 또 이해하려니 이미 많이 지치셨죠 ㅠㅠ..
그런데 저희는 RAID 3을 이해했기 때문에 RAID 5는 그냥~ 쉽게 이해하고 넘어갈 수
있습니다

RAID 5는 그냥 RAID 3, 4의 방식을 조금 변형했을 뿐이기 때문입니다!

어떻게 변형을 했냐면 바로 RAID 3과 4는 한 디스크에 패리티 정보를 몰빵했다면
RAID 5데이터 처리를 할 때마다  각 디스크들이 돌아가며 패리티 정보를 저장을 합니다.
당연히 RAID 5도 RAID 0처럼 striping 방식이구요~

어휴 말로는 뭔소리인가 싶죠? 그림을 보시죠!






이렇게 한 디스크에 8비트씩 데이터를 넣는다고 쳤을 때, RAID 3과 4처럼
패리티 비트들을 만든 다음, 패리티 비트를 번갈아가며 디스크들에게 저장하는 겁니다.

왜 이렇게 하느냐? 패리티정보를 한 디스크에 몰빵했던 RAID 3와 4같은 경우
패리티 디스크가 고장나면 복구가 불가능해지는 문제가 있지만

이렇게 패리티 정보를 분배하는 RAID 5방식을 사용하면 어떤 디스크가 고장나도
1개만 고장났다면 복구가 가능한 겁니다.

누가봐도 이것이 RAID 3과 4보다 안정성이 더욱 높죠?

RAID 3와 4와 마찬가지로 RAID 5도 패리티 비트 방식을 사용하기 때문에 최소 
디스크가 3개 이상이여야 합니다만 보통 5개 이상으로 구성합니다.

하지만 결국 돌아가면서 저장하는 패리티 정보들을 모두 모으면 한 디스크 분량만큼
용량을 차지하기에, 실제로 사용하는 디스크량은 "전체 디스크 수 - 1"이라는 걸 알아두세요~




i)RAID 15




RAID 5는 RAID 2, 3, 4에 비교하면 훨씬 안정적인 방식이지만 결국 
디스크 1개밖에 복구를 못한다는 단점이 있기에 안전하게
RAID 1과 복합적으로 구성을 하여 사용합니다.

RAID 01, 10때와 마찬가지로, RAID 15처럼 "1"로 시작을 한다는 건
먼저 RAID 1로 구성을 한 다음 RAID 5로 구성한다는 것을 이제 저희는 압니다.





이렇게 말이죠~ 이렇게 구성을 하면 디스크가 2개이상 고장나도 복구가 가능하겠죠?

물론 당연히 RAID 5+1도 있습니다~

다시 한번 정리를 하자면

RAID 3, 4, 5패리티 방식을 사용하기 때문에 최소 3개 이상의 디스크로 구성해야하며,
1개의 디스크만 복구할 수 있다

RAID 5도 당연히 RAID 1과 복합적으로 사용하는 RAID 15가 있다





8. RAID 6




사실 제 맘 같아선 6까지 하고 싶지 않았는데(저도 이해할 수 없는 영역이라...)
리눅스 마스터 시험에서 RAID 6이 시험에 나왔기에 결국 알려드리기로 마음을 먹었습니다.

물론 원리를 묻거나 하지 않습니다 그냥 RAID 6의 특징과 RAID 6을 사용할 시 
사용가능한 용량크기 비율정도? 그러니 그냥 가벼운 마음으로 보시면 되고
저도 자세히는 알려드릴 수가 없습니다... 노력은 해봤으나 현재 제 수준에서 이해할 수
있는 지식이 아니더군요...

RAID 6RAID 3,4,5와 마찬가지로 패리티 비트 방식입니다.
하지만 RAID 5에서 한 단계 더 나아가 패리티 데이터를 2중으로 만든다는 것에서
차이가 있습니다.

패리티 데이터를 2중으로 만든다는 게 무슨소리냐?






이런식으로 패리티 비트를 2중으로 만드는 겁니다.
이렇듯 RAID 6은 패리티 비트를 2중으로 만들었기 때문에, RAID 3,4,5와 달리
디스크 2개까지 복구 가능합니다.

그리고 RAID 6은 패리티 비트 2개를 쓰는 건 결과적으로 2개의 디스크 분량을 패리티로 
사용하는 것과 같기 때문에, 실제적으로 사용하는 용량은 "전체 디스크 - 2"입니다.

어떤 원리로 패리티 비트를 2중으로 만드는지, 또한 복구하는지는 저의 능력 밖이므로
정 궁금한 능력자가 계시다면...

https://en.wikipedia.org/wiki/Standard_RAID_levels#RAID_6

이곳에 가셔서 RAID 6 부분을 보시면 됩니다! 저는 도저히 못하겠어요 ㅠㅠ




자 진짜 이번에도 생각보다 길어져서 3일이 걸렸네요...
힘들지만 아주 가끔 따듯한 댓글과 팔로우, 광고 클릭을 해주시는 분들이 있기에
힘을 내어 리눅스 마스터 1급 독학을 위해 멈추지 않고 끝까지 마무리 해보겠습니다!

따듯한 댓글, 팔로우 저에게 정말 큰 힘이 되어 포스트의 퀄리티를
향상 시킵니다!

긴 글 읽느라 고생하셨습니다~



2019년 9월 25일 수요일

리눅스 vi, vim, gedit 차이점 매우 쉽게!

안녕하세요 마무입니다~
오늘은 누군가는 고대했을 "vi vim 차이", "gedit", "vi 명령모드", "vi 입력모드", "vi 마지막 행 모드, 라인 모드" 라는 것에 대해서 포스팅 하려합니다.

사실 리눅스에서 "vi"라는 것은 필수라고도 할 수 있는 명령어이자 프로그램 인데요.
리눅스를 배우는 입장에선 처음으로 부딪히는 난관이기도 합니다!

하지만 쓸데없는 옵션들을 외워야 한다는 강박때문에 어려운 것이지 필요한 내용만 보면 그리 어렵지 않으니!! 제가 쉽게 설명할테니 마음 가볍게 먹고 시작해보자구요!

**이 포스트를 이해하기 위해 필요한 지식**
CLI, TUI, GUI 차이 : https://mamu2830.blogspot.com/2019/07/vmware.html


--목차--

1. vi와 vim 그리고 gedit의 차이

2. "vi"의 명령 모드(command mode), 입력 모드(insert mode), 마지막 행 모드(Last line mode)란?

3. 중간 압축 정리

4. 이것만 알면 "vi"사용 가능!

5. 알아두면 좋은 "vi" 명령키와 명령어들

6. vim을 vi로 쓰는 법, vi 행번호 자동으로 출력되게 세팅하기

입니다.

--------





1. vi와 vim 그리고 gedit의 차이


vi(visual editor)는 파일의 내용을 보여줌과 동시에 파일의 내용을 편집할 수 있게 해주는 프로그램(텍스트 에디터)입니다.

vim(vi improved)이란 영어의 줄임말로 말 그대로 vi의 업그레이드 버젼입니다. 실제로 사용해보면 가장 많이 눈에 띄는 특징은 기존에 vi는 글자가 모두 같은 색인 것에 비해, "vim"은 설정파일의 특정 위치에 있는 단어나, 의미있는 특별한 단어 으로 표시해줘서 저희들이 더욱 보기 쉽게 해주는 것이라고 할 수 있습니다.

gedit(GNOME Editor) 은 현재 리눅스 GUI환경에서 사용하는 텍스트 에디터(글들을 수정할 때 쓰는 프로그램)입니다. 그냥 "윈도우의 메모장"과 같은 거에요.

그럼 "gedit"과 "vi"는 차이가 뭐냐? "vi,vim"TUI, GUI, CLI 환경 모두에서 사용이 가능한 것이고 이 "gedit"GUI환경에서만 사용이 가능한 프로그램입니다.

"vi, vim, gedit"에 대해서 말로만 들으면 별로 차이가 안느껴질테니 사진으로 보여드리며
설명해 드리겠습니다.

--vi--





이 /etc/named.conf라는 파일은 나중에 여러분들이 리눅스 마스터 1급 범위를 공부하실 때 초반에 배우실 DNS(Domain Name server)설정을 할 때 쓰이는 파일인데요 이 파일을
"vi"로 열어서 확인해보시면







이렇게 뭔가 전부 똑같은 검은색이라서 뭔가 특징적인게 눈에 안띄고 구분하기 힘들죠.. 또 눈에 확 안들어오구요.





파일의 페이지를 밑으로 내리면 나오는 특징적 단어들도 어떠한 표시가 없습니다.

하지만

--vim--





vi와 vim 사용 방법은 동일합니다, vi의 업그레이드 버젼 "vim"으로 열면






vi와는 다르게 주석인 글들은 파란색으로 표시돼 쉽게 구분이 되고





이렇게 어떤 의미를 갖는 특정 위치의 글들은 로 표현해, 잘못된 위치에 글을 적거나 하면 바로 알 수 있게 해줍니다.

당연하게도 "vim"이 더 좋기 때문에 대부분 유저들은 "vim"을 사용합니다.  그런데 "vim"으로 쓰기보단 "alias" 명령어로 "etc/bashrc"나 ".bashrc""vi"로 등록해 사용하기 때문에, vim이든 vi든 걍 통틀어서 "vi"라고 부르곤 합니다.

--gedit--




"gedit"도 쓰는 방법은 vi와 동일하기 때문에 , 터미널에서 파일명을 적고 엔터를 누르면






이렇게 "vim"처럼 나옵니다.




밑으로 좀 내리면 vim보단 색이 좀 덜 다채롭습니다. "vim"이 좀 더 좋다는 걸 알 수 있죠.

여기서 "gedit""GUI환경용 프로그램"이라 vi처럼 esc를 누른 뒤 ":wq" 로 못 끄기에,
직접 마우스로 오른쪽 상단 X를 눌러줘서 꺼야합니다.(CLI, TUI환경에 익숙한 사람은 마우스를 움직여야 한다는게 너무 귀찮죠 으어.)

여기서 리눅스를 배운지 얼마 안되신 분들은 GUI환경에 익숙하기 때문에 분명
"에...그냥 GUI환경 gedit을 vi대신 쓰면 안되나? vi배우기 귀찮은데..." 이럴 분들
있을텐데... 그럼 안됩니다 ㅡ.ㅡ

왜냐하면 저희들이 배우는 "리눅스"는 주로 서버를 운영하기 위해 배우는 지식으로서
"서버"는 실제로 사용할 땐 자원을 많이 잡아먹는 "GUI환경"에서 사용하지 않고 "CLI", "TUI"환경에서 사용을 할 것이란 말이죠...

그리고 가장 큰 "gedit" 단점은 말했다시피 GUI환경용이라 "CLI환경"에서 작동이 안된다는 겁니다. 다시 말해서 원래 CLI 터미널 환경에서 사용을 못 한단 이야기죠.

"gedit" 외에도 GUI환경에서 작동되는 프로그램들은 CLI환경에서 전부 구동이 안되기 때문GUI환경에서 사용되는 명령어나 프로그램에 익숙해지면 안됩니다.(물론 알아두긴 해야겠죠?)

물론 현재 저희가 하는 방식인 리눅스 바탕화면에서 터미널을 켜서 하는 경우 이미 리눅스 자체가 부팅이 "GUI"환경으로 부팅이 되어 있기에 터미널에 "gedit 파일이름" 이렇게
사용이 가능합니다만





위 사진이 진짜 "CLI환경""ssh 원격접속"에서 "gedit"을 사용해보려한 흔적입니다. 위 사진을 보시면 경고가 뜨며 사용이 안되죠?  이처럼 GUI환경 프로그램CLI환경에서 저런 경고가 뜨며 실행이 안됩니다.

여기까지 내용을 간단히 정리하자면,  "vim"은 "vi"의 업그레이드 버젼, "gedit"은 윈도우의 메모장과 같은 "리눅스 GUI환경 메모장"이라고 알아두시면 됩니다.



2. "vi"의 명령 모드(command mode), 입력 모드(insert mode), 마지막 행 모드(Last line mode)란?


vi를 배울 때 사실 이 3가지 용어 때문에 더 어렵게 느껴지는 것 같습니다.
솔직히 알고나면 별 것도 아닌데 괜히 구분해서 더 헷갈리게 만들죠..

저는 솔직히 왜 "명령 모드""라인 모드"를 구분하는 지 모르겠습니다만... 시험에선
굳이 "마지막 라인 모드에서", "명령 모드에서" 이렇게 나오니 저도 그냥 그렇게 설명하겠습니다.

"명령모드(command mode)"말 그대로 저희들이 vi에서 키보드로 입력하는 것이 모두문자가 아닌, 어떤 기능을 가진 단축기로서 실행되는 모드라고 보시면 됩니다.

명령모드에선 키보드 "i" 를 눌렀을 때 실제 저희가 아는 문자 'i'가 적히는게 아니라 vi의 "입력모드로 바뀌는 단축키 i(inset mode)"가 실행된다는 거죠.

단축키를 사용해 입력모드로 갔을 때, 다시 명령모드로 돌아오는 방법은 키보드의 ESC(Escape)키를 누르면 명령모드로 돌아옵니다.

"입력모드(insert mode)" 저희들이 글을 insert, 즉 글을 적을 수 있는 "편집 모드"라고 보시면 됩니다.

이 때는 말 그대로 입력모드이기 때문에 저희가 어떤 문자가 있는 키보드 키를 눌러도 모두 글자로 취급됩니다. 물론 "ESC"키나 "Backspace ←"키 같이 문자의미가 없는 키는 빼고요

명령모드에서 키보드의 "insert" 키를 누르거나 "i(insert)"키를 누르면 입력모드가 됩니다.

"마지막 행 모드(Last line mode) 또는 ex 명령모드" 마지막 라인, 즉 CLI환경처럼 화면 맨 밑(마지막 행에) 명령어를 칠 수 있는 줄이 나오는 모드라고 보시면 됩니다.

기억 나실진 모르겠지만 제가 "리눅스 설치편"에서 GUI, TUI, CLI개념을 설명 드릴 때, "vi"키보드만 사용할 수 있는 "TUI"환경이라고 했었죠? 그래서 명령어를 칠 수 있는 공간이 애초에 없습니다.

그런데 문자가 아닌 명령어로 해석되는 명령모드에서 ":"를 누르면 화면 마지막인 맨 밑에 명령어를 칠 수 있는 줄이 나옵니다. 그래서 "마지막 행 모드(라인 모드)" 라고 부르는 겁니다.


3. 중간 압축 정리

어우.. 글이 너무 길어서 헷갈리시죠... 그냥 그림과 함께 다시 간단히 정리하자면






"명령모드" 저희가 어떤 키보드 키를 누르던 문자가 아닌 "어떤 의미를 가진 단축키"로 해석되는 모드이고, 왼쪽하단에 아무것도 없으면 명령모드 입니다.








위 사진은 "vi(vim)"을 쓴 모습입니다.
왼쪽 하단에 아무것도 없죠? 이런 모습이면 막 vi로 들어왔거나, ESC단축키를 눌러서 온
"명령모드"다~



"입력모드"는 저희가 누르는 "문자가 있는 모든 키보드 키가 문자로 인식되는 모드"이고, 왼쪽 하단에 --insert-- 또는 --끼워넣기-- 가 뜨면 입력모드 입니다.








자 이렇게 왼쪽 하단에 "INSERT" 또는 "끼워넣기"가 뜬다는 건
지금 저희가 명령모드에서 "i"또는 "insert"키를 눌러 "입력모드"에 왔다는 겁니다.


"마지막 행 모드" 또는 "라인 모드, ex 명령모드" CLI환경처럼 화면 맨 밑에(마지막에) 명령어를 칠 수 있는 라인이 하나 생기는 모드입니다.





이렇게 말이죠.






자 그림을 다시보고 각 모드의 상관관계를 보자면

저희가 "마지막 라인 모드" 로 가려면 ":"를 눌러야 하는데 "입력모드"에서 ':'를 누르면 
그냥 문자 ':' 로 인식이 되겠죠?

그래서 일반 문자가 아닌 "마지막 라인 모드"로 가는 ":"로 쓰기 위해 ESC를 눌러 명령모드로 간 뒤, ":"를 눌러서 마지막 라인 모드로 가는 겁니다.

그럼 "입력모드"로 갈 땐 어떨까요?  내용을 적어야 하는데 "마지막 라인 모드"에선
키보드 타이핑을 하면 마지막 라인, 즉 명령어 줄에 적힐 거 아닙니까?
그래서 "ESC"를 눌러 명령모드로 간 뒤insert키나 i를 눌러 입력모드로 바꾸고 파일의 내용을 적는 겁니다.


4. 이것만 알면 "vi"사용 가능!

"vi"를 사용할 땐 많이 알 필요가 없습니다. 학원 같은 곳을 가면 별의 별 옵션을 전부다 배워서 헷갈리고 안 외워지는데, 그런 시험용 잡다한 옵션 및 vi 명령어는 나중에 리눅스 실력이 좋아졌을 때 나중에 외우는게 더 잘 외워집니다.

그리고 그런 옵션들은 제가 독학 포스팅을 다 한뒤 시험에 초점을 둔 포스트로 따로 정리 할 겁니다.

1. "vi(vim) [옵션] [파일]" : 기존에 있는 파일이름이면 파일을 열고, 없는 파일이면 뒤에 적은 위치에 적은 이름으로 파일을 하나 생성하고 연다.
/*[옵션]은 거의 쓸 일이 없으므로 나중에 시험에 초점을 둔 포스트에 정리하겠습니다.*/

ex) vi /etc/named.conf(있는 파일) --> /etc/named.conf파일을 vi로 염
     vi /etc/akbb(없는 파일) --> /etc/에 akbb라는 파일을 만들고 vi로 염






/etc/akbb 라는 파일을 vi로 만든 모습(현재는 명령모드)


2. 키보드 방향키 "←↑↓→ " : 방향키 방향으로 커서가 움직입니다. (모든 모드에서 다 됨)

3. PgUp(Page Up) , PgDn(Page Down) 키를 누르면 한 페이지 위 또는 아래로 이동(라인모드 제외)

4.  명령모드에서 쓸만한 명령어 키


"insert" 또는 "i" : 명령 모드에서 현재 커서로 입력모드로 바뀌는 명령어 입니다.

 ":" : 명령모드에서 마지막 라인 모드(라인 모드)로 바뀌는 명령어 입니다.

어떤 모드에서든 ESC(Escape) 키를 누르면 오는 명령모드는




이렇게 왼쪽 하단에 아~무것도 없습니다. 왼쪽 하단에 아무것도 없으면 명령모드라고
생각하시면 돼요.



4. 입력모드에서 쓸만한 키

명령모드에서 "insert" 또는 "i" 키로 들어오는 입력모드는 정말 쉽습니다.
입력모드로 들어오면 왼쪽 하단에



이렇게 --INSERT--라고 뜨거나



이렇게 --끼워넣기--라고 뜹니다.

입력모드를 쓰는 법은 저희들이 윈도우에서 메모장을 쓰듯이 똑같이 쓰면 됩니다.
그냥 방향키 "←↑↓→"으로 원하는 장소로 이동한 다음 쓸 내용을 타이핑하거나 "backspace "로 지우거나 "스페이스바"로 띄어쓰기 하면 된다는 겁니다.

ESC(Escape) : 누르면 명령모드로 돌아가는 키보드 키입니다.



5. 마지막 라인 모드에서 쓸만한 키

":" : 명령모드에서 "라인 모드로 바뀌는 명령 단축기"로 누르면




이렇게 왼쪽 하단에 ":" 가 생기면서 그 옆으로 명령어를 적을 수 있는 공간(라인)이 생깁니다. 그러니 라인모드는 모두 ":"으로 시작하겠죠?





":w(write)"  : 내용을 저장하겠다는 뜻인데, 그냥 write 뜻대로 "나 다 썼어~" 이렇게 기억하시면 좋습니다.

원래는 파일을 바꿀 수 있는 "w"권한이 없을 경우 저장을 못하는 게 정상인데도 가끔 "읽기 전용 파일입니다. 강제로 저장하려면 !를 붙이세요" 와 같은 글이 나오면서 !를 붙여 파일을 강제로 바꿀 수 있는 경우가 있거든요? , 이건 파일이 속한 디렉토리에 "w"권한이 있어서 이렇게 할 수 있는 겁니다.  "파일의 권한 rwx" 부분에서 다뤘던 내용인데 자세히 모를 경우

https://mamu2830.blogspot.com/2019/09/rwx.html

이 곳을 다시 보고오시면 될 것 같습니다 ㅎㅎ






":q(quit)" : 나가겠다는 뜻의 quit의 "q"로 ":q"하고 엔터를 누르면 파일에서 나가집니다.
그러나 파일의 내용이 바뀌었으면







저장한 뒤 나가거나  "!"를 추가해 :q!하지 않으면 나가지 못 합니다.

":!" : "w"나 "q"와 함께 쓰이면 "강제로 하겠다" 는 뜻이고 , 단독으로 쓰이면 뒤에 적은 "터미널 명령"을 수행하라는 기호입니다.

":! [터미널 명령어]" 를 하면 현재 저희가 수행하던 "vi"를 백그라운드(눈에서 보이지 않게 실행되는 프로세스)로 넘겨버리고 터미널 명령어를 수행합니다 물론 명령을 수행한 뒤
"enter"나 아무 키를 누르면 다시 vi로 돌아옵니다

예로들어서 vi를 하던 중 ":! ls"나 ":!ls" 하면 현재 유저가 위치한 디렉토리 내 파일들을 보여주고 "enter"를 누르거나 아무 키나 누르면 다시 vi로 돌아오는 거죠

  


이렇게 ":! ls"를 하면






이렇게 되고 엔터나 아무 키를 누르면 다시 vi로 돌아옵니다.

라인모드 명령어는 ":" 하나만 쓰면 되고 그 옆에 나머지 명령어들은 붙여 쓸 수 있습니다. ":wq!" 이렇게 말이죠 


":set nu(set number)" : 행에 번호를 붙입니다 .




이렇게 치면




이렇게 행 번호가 생깁니다.


"set nonu(set no number)" : 행에 번호를 제거합니다.





이렇게 :set nonu하면



이렇게 다시 행 번호가 사라집니다.

솔직히 여기까지만 알아도 vi를 쓰는 데 전~~혀 문제가 없습니다.
바로 다음에 알아두면 좋은 명령모드의 단축키와 마지막 행 모드 명령어를 알려드릴 건데,
별로 쓰이진 않지만 시험에 나올 수 있는 옵션들은 나중에 리눅스 마스터 시험용 정리 포스트를 쓸 때 정리하겠습니다.

5. 알아두면 좋은 "vi" 단축키와 명령어들

--명령모드에서--

"yy(yank yank)" : 키보드 "y"키를 두번 누르는 것으로 현재 커서가 있는 한 줄을
복사(버퍼에 저장) 합니다.  yank의 뜻은 "a quick forceful pull of someting" 대로 "재빠르게 한 줄을 버퍼로 가져온다 = 복사" 라고 생각하시면 됩니다.

버퍼라는게 뭔지 궁금하신 분들을 위해 잠깐 설명을 하자면 버퍼란 "임시저장 공간"이라고
보시면 됩니다 .그래서 "yy"로 버퍼(임시저장 공간)에 한 줄의 내용을 저장한 뒤
붙여넣기를 하면 그 공간에 저장된 내용을 가져와서 붙이는거죠.

"p(paste)" : paste대로 커서 다음 줄에 "yy"로 복사한 내용을 "붙여"넣습니다.

"dd(delete delete)" : 키보드 "d"를 더블 누르는 것으로, 커서가 있는 한 줄을 제거합니다.

왜 d를 두번이나 누르냐고요? 그냥 "d" 하나에도 기능이 있기 때문에요. "d"를 누르고
"←→"를 누르면 그 방향의 글자를 하나 지우고 "↑↓"를 누르면 커서가 있는 현재 줄과
그 방향 한 줄을 지워버립니다. 솔직히 너무 헷갈리고 위험해서 "d"하나는 쓰지 않고
"dd"만 씁니다. "d"쓸 바엔 입력모드로 가서 Backspace로 하나하나 지우는게 낫죠

"u(undo)" : 전에 했던 행위를 복구합니다. 윈도우에서 "ctrl + z"라고 생각하시면 돼요~

"[번호] + shift + g" : 입력한 번호의 행 시작부분으로 커서가 이동합니다 , 만약 앞에 아무런 번호를 입력하지 않았으면 페이지 맨 끝 행으로 이동합니다.

--마지막 라인 모드에서--


"/[찾고 싶은 문자]" : 파일 내 찾고싶은 문자를 모두 찾아줍니다. "n"을 누르면 한 개씩 아래로 커서가, 찾은 문자로 이동합니다.

"?[찾고 싶은 문자]" : "/[문자]"와 기능이 동일한데 "n"을 눌렀을 때 "/"와 다르게 현재 커서 위로 한 개씩 이동합니다.


"입력모드"는 더 알 게 없습니다.



6. vim을 vi로 쓰는 법, vi 행번호 자동으로 출력되게 세팅하기


일단 당연하게도 vim을 치는 것보단 vi를 치는게 훨씬 편해서 다들 "alias"로 등록해둔다고
말했었죠?

이 "alias"를 설정하는 부분은
https://mamu2830.blogspot.com/2019/07/3.html#index%202 의
ii).bashrc에 있으므로 이 곳에서 보고 오시면 되겠습니다.

"vi"의 행 번호 자동 출력같은 경우, 나중에  저희가 리눅스 2(리눅스 마스터 1급 범위)를 다루면 여러 파일들의 설정파일을 엄청 다룰텐데 그 때마다 설정파일의 옵션위치를 행 번호를 통해 많이 참조하거든요.

그래서 파일을 vi로 열 때마다 행 번호를 알기 위해 ":set nu" 를 일일이 쳐야하는데 이게 너무 귀찮기 때문에 그냥 vi로 열자마자 ":set nu"가 되게 바꿀 겁니다.

어떻게 해야할 까요? 당연하게도 "vim"도 프로그램이기 때문에 설정파일이 있습니다.
바로 "vimrc(vim run commands)"라는 파일이죠 보통 파일 뒤에 "rc"가 붙은 파일은
run commands 라는 뜻대로 "그 파일이 실행될 때 자동으로 실행되는 명령어"들이 적혀있다고 보시면 됩니다.

같은 예시론 /etc/bashrc와 .bashrc등등이 있죠

자 그럼 "vim설정파일 vimrc"는 어디에 있을까요? 저희가 리눅스전체에서 쓰이는 프로그램의 설정파일은 어떤 디렉토리에 있다고 "상위 디렉토리" 포스트에서 다뤘었는데

기억이 안나신다면 한 번 보고오시는 것도 좋을 것 같습니다 ㅎㅎ
https://mamu2830.blogspot.com/search/label/%EC%83%81%EC%9C%84%20%EB%94%94%EB%A0%89%ED%86%A0%EB%A6%AC%20%EC%9D%B4%EB%A6%84%EA%B3%BC%20%EC%9A%A9%EB%8F%84


하지만 저 긴 포스트를 다 읽긴 귀찮으실테니 바로 정답을 알려드리자면,
리눅스 전체에서 쓰이는 프로그램의 설정파일은  /etc/에 있습니다.

그럼 cd로 /etc/에 이동하여 "vimrc"란 설정파일이 있나 볼까요?





네 저기에 vim 설정파일 "vimrc"와 vi 설정파일 "virc"가 보이네요

참고로 아까 말했다 싶이 /etc/에 있는 설정파일은 "모든 시스템에 쓰이는 프로그램 설정파일"이기 때문에, 여기에서 설정을 바꾸면 리눅스 전체시스템에 영향이 갑니다.
그래서 저희가 여기 "/etc/vimrc"에 ":set nu" 를 지정하면 root뿐만 아니라
모든 유저가 전부 자동으로 vim쓸 때마다 :set nu이 설정이 됩니다.




이렇게 /etc/로 이동한 다음 vim(vi)로 vimrc를 열어준 다음 보시면




뭐 이렇게 행 번호 없이 여러 기본 세팅 명령어들이 있습니다.
여기서 딴 거 건들지 마시고 "shift + g" 를 눌러 맨 끝으로 이동합니다. 그리고 "i"나 "insert"키로 입력모드로 바꾼 후 엔터를 눌러 다음 행으로 이동해




이렇게 ":set nu"라고 써주고, "ESC"를 눌러 입력모드를 나간 뒤(명령모드로 간 뒤)






":"를 눌러 라인모드로 들어가 ":wq(write and quit)"을 타이핑해서 저장하고 나가줍니다.








그리고 이제 적용이 됐나 확인하기 위해 다시 "vim"으로 아무 파일이나 열어봅니다.
전 귀찮으니 다시 "vim vimrc"하겠습니다.
그러면




이렇게 행 번호가 자동으로 세팅 돼 있는 걸 확인 할 수 있습니다~

이야 오늘도 화장실 가는 시간 제외하고 풀 집중해서 6시간 30분만에 포스팅을 끝냈네요..
꼭 도움이 됐으면 좋겠네요 ㅠㅠ

도움이 되셨으면 구글 블로그 팔로우, 네이버 블로그 공감 클릭 해주시면
정말 큰 도움이 됩니다!!

혹시나 오타나 잘못된 내용이 있으면 댓글로 알려주세요, 바로 수정하겠습니다.
이상 마무였습니다~