}

블로그 소개


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

프로필

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

팔로어

다른 페이지로 이동


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

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


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

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

2021년 4월 10일 토요일

리눅스 man 매우 자세히!

안녕하세요 마무입니다! 오늘은 진정한 리눅스마스터가 되기 위해 알고 있어야 하는 좋은 명령어 "리눅스 man" 명령어에 대해서 자세히 알아보려 합니다.

다들 기본적으로 'man(manual)'이란 명령어는 리눅스 초반에 다 배워서, 어떤 명령어나 파일에 대한 설명이 적힌 문서를 보여주는 명령어라는 것을 알고 있으실 겁니다.

하지만! 사실 그것은 man이 가진 기능의 일부였으니! 오늘은 그런 'man'명령어의 모든 기능들을 알아볼 것입니다. 굳이 man 기능을 다 알아야 하나? 

그것은 여러분들이 패키지 파일들을 하나하나 다루거나, 쉘 프로그래밍할 정도의 수준의 리눅스마스터 1급 수준이 되려면 이 'man'을 잘 활용할 줄 알아야 하기 때문입니다!

정확히는 활용할 줄 알아야 한다기보단, 활용할 줄 알면 좋기 때문이죠!

그럼 자 어렵게 생각마시고 포스트를 시작하겠습니다!


-----목차------

1. 리눅스 명령어 man이란?

2. man 명령어 형식

i) man -k를 썼을 때 nothing appropriate 라 뜰 경우 해결법

ii) man 옵션

3. man 섹션 9개

i) man 섹션 1

ii) man 섹션 2

iii) man 섹션 3

iv) man 섹션 4

v) man 섹션 5

vi) man 섹션 6

vii) man 섹션 7

viii) man 섹션 8

ix) man 섹션 9

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

여기서 못 찾은 정보는 

리눅스 독학 페이지 : https://mamu2830.blogspot.com/p/blog-page_13.html

에서 찾아보세요!



1. 리눅스 명령어 man이란?


리눅스에는 "man(manual)"이란 명령어가 있습니다. "man [명령어 or 파일]"이런식으로 치면 뒤에 적은 명령어나 파일에 대한 정보들, 말 그대로 메뉴얼을 보여주는 명령어죠.

"메뉴얼"이란 말 때문에 초보자들이 리눅스를 배울 때만 애용하는거 아닌가? 싶겠지만, 

리눅스에 있는 수~~많은 명령어들과 그 명령어의 옵션들을 사람이 하나하나 다 외울 수 없고, 이 "man"명령어엔 정말 대부분의 모든 파일이나 명령어에 대한 정보가 있기에, "man"이란 명령어는 초보 고수 구분을 떠나 모두 애용하는 명령어 입니다.

웬만한 유명한 프로그램, 명령어들은 다 이 'man'페이지가 있다고 보시면 되며, 유명하지 않은 누군가가 만든 프로그램인 경우에도 다른 사람들을 위해 'man'페이지를 만들어 놓기도 합니다.

갑작스럽지만, 여러분들 평소 이런 의문이 들지 않습니까? 

'man'이란 명령어가 명령어나, 파일을 읽는거라면, 같은 이름의 명령어나 파일이 있으면 어떡하지? 예를 들어 '/etc/passwd'파일과  패스워드를 바꾸는 'passwd'명령어 같은 경우 말야

그렇습니다. 여러분들의 의문대로, 단순히 "man passwd"라고 칠 경우, 이 passwd가 /etc/passwd 파일을 의미하는지, usr/bin/passwd를 의미하는지 쉘(명령어를 해석해주는 프로그램)은 정확히 알 수가 없죠.

그래서 리눅스에선 헷갈리지 않게 메뉴얼 파일들(리눅스는 모든 걸 다 파일로 다루니까) 어떤 기준으로 총 9개의 섹션(특정 장소를 나눠놓은 것)을 통해 분류해 놓았습니다.

그래서 원하는 섹션 번호를 입력해서, 같은 이름의 파일이라 해도 다른 메뉴얼을 볼 수 있게끔 말이죠!

이건 유닉스/리눅스 계열이면 다 비슷합니다. 물론 리눅스는 총 9개의 섹션으로 메뉴얼 페이지를 나눠놨고, 유닉스는 8개라는 점이 다르지만 말이죠!

어쨌든 그래서 사실 man명령어 형식은

"man [명령어 or 파일]"이 아니라

man [옵션] [섹션] [명령어 or 파일]입니다.

물론 보통 'man [파일]'이렇게 아무런 섹션을 안 치면 메뉴얼페이지가 있는 가장 낮는 섹션을 보여줍니다. 'passwd'를 쳤다고 치면 가장 낮은 섹션 1번, 즉 명령어로서의 passwd 메뉴얼을 보여줍니다.

자 그럼 이런 섹션 번호를 외워야하나? 아닙니다! 여러분들은 9개의 영역 번호를 외우는게 아니라, 각 섹션(영역)에 어떤 것들이 저장돼 있는지와 "man -k(keyword)"란 옵션만 아시면 됩니다!

왜냐면 이 '-k'옵션을 쓰면 뒤에 적은 이름이 들어가는 모든 man 페이지와 섹션을 보여주거든요! 

일단 그래도 man의 9개 섹션(영역)이 어떤 기준으로 나눠졌는지는 알아봐야죠!



2. man의 9개 영역


일단 이 대부분의 man페이지들은

"/usr/share/man/" 안에 man1, man2 이런식으로 섹션별로 나뉜 디렉토리 안에 있습니다.



이렇게 말이죠.

여기서 man1, man2, man3.. 이렇게 뒤에 붙은 숫자가 바로 man의 섹션들입니다.

그리고 "man -k [명령어]" 이렇게 쳤을 때



이런식으로 'passwd'키워드가 들어간 모든 man 페이지들을 보여주는데 옆에 '괄호()'안에 숫자가 적혀있죠? 그 숫자들이 바로 위에서 말한 man[숫자]이며, 섹션번호를 말하는 것입니다!


i) man -k를 썼을 때 nothing appropriate 라 뜰 경우 해결법 


물론 여기서 "man -k [명령어]"를 쳤을 때



이렇게 "nothing appropriate(상황에 맞는것이 아무것도 없다)"뜨며 실행이 안되는 경우가 있는데요, 이 경우는 manual 페이지들을 순서를 정리하고(인덱스화) 빠르게 찾게 해주는 'mandb'라는 것이 초기화가 안됐거나, 업데이트가 안되서 생기는 문제입니다.

이 경우 root로 로그인 하신다음, man페이지를 초기화하거나 업데이트해주는 'mandb'란 명령어를 쓰면 해결이 되지만, 



이렇게 뜨며 안되는 경우가 있습니다. 

이 경우엔 명령어가 들어있는 디렉토리 '/usr/bin/'가 read-only, 즉 'w'권한이 없어서 그런데요. root에서 "chmod 755 /usr/bin" 이렇게 w권한을 주신다음 

"mandb"라 치시면


뭔가 주르르륵 뜨면서, 새로운 13364개의 man 페이지가 추가됐다고 뜹니다.

이렇게 되시면 이제 "man -k [명령어]"를 쳤을 때 




이렇게 성공적으로 결과가 나오실 겁니다!


ii) man 옵션 


"man"의 쓸만한 옵션에는 

-k(keyword) : 뒤에 적은 글(키워드)가 포함된 모든 메뉴얼들을 보여준다.

-f              : 적은 키워드와 정확하게 일치하는 man만 보여준다.

-w(where)            : 적은 퀴워드의 man파일 위치를 알려준다. 

가 있습니다.




3. man 섹션 9 

 

자 그럼 한번 man의 9개의 섹션들이 각각 어떤 기준으로 파일들을 나눴는지 봐볼까요?

"man man"이렇게 쳐서 메뉴얼을 읽어봅시다.


i) man 섹션 1 


'섹션 1번'은 리눅스 모든 유저가 사용할 수 있는 "명령어(shell commands)"'실행 가능한 프로그램('Executable programs)"대한 메뉴얼들이 들어있다고 합니다.

실제로 저희가 아는 대부분의 명령어들을 단순히 "man [명령어]"라고 쳤을 때 나오는 페이지는 



이렇게 1번입니다.


ii) man 섹션 2 


'섹션 2번'은 애플리케이션이 운영체제가 관리하는 자원에 접근을 할 때 쓰는 'system call'에 대한 메뉴얼들이 있습니다. 여기서 시스템콜이 뭐지? 하시는 분들은 

https://mamu2830.blogspot.com/2021/01/whatIsSystemCall.html 여기서 보고오시길 바랍니다.


iii) man 섹션 3 


'섹션 3번'c언어의 라이브러리 함수(코드들)에 대한 메뉴얼 페이지를 모아둔 곳입니다.

이게 무슨 소리냐면, 우리가 쉘에서 쓰는 명령어들도 당연히 사실은 코드로 이루어진 프로그램이란 건 다들아시죠? 그럴 때, 그 명령어(프로그램)이 쓰는 특정 함수에 대한 메뉴얼들을 모아두었다는 것입니다. 

백문이 불여일견 한번 디렉토리를 만드는 'mkdir'이란 명령어를 예시로 한번 봐봅시다.


이렇게 'man -k'로 3 섹션을 확인하고

"man 3 mkdir"이렇게 열어봅니다.



자 PROLOG(프롤로그)를 보시면, This manual page is part of the POSIX Programmer's Manual(이 메뉴얼 페이지는 POSIX 프로그래머의 메뉴얼 일부다)라고 나오며

The Linux implementation of this interface may differ(이 인터페이스 사용법은 다를 수도 있다)

그리고 밑에 SYNOPSIS(시놉시스, 짧은 설명)을 보시면

#include <sys/stat.h>

int mkdir(const char *path, mode_t mode);

이렇게 헤더파일과 함수이름, 매개변수 구조를 보여주며

밑에 DESCRIPTION(설명)으로 mkdir 함수의 기능과, 매개변수인 path, mode에 대한 설명 등등이 적혀있습니다. 쓰라고 만든 것이죠!

말 그대로 프로그래머가 프로그래밍 할 때 읽고 쓰라고 써놓은 메뉴얼입니다.

그러니 섹션 2, 3은 프로그래밍할 때 쓰는 메뉴얼들이라고 보시면 됩니다.


iv) man 섹션 4 


'섹션 4번'장치나 특수파일, 드라이브에 대한 메뉴얼들을 모아놓은 곳입니다.

일단 리눅스는 모든 것(장치, 특수파일, 모듈, 드라이브등등)을 파일로 표현하는 것을 아시죠?

그 중 '/dev/'안에 있는 장치들에 대한 것도 man 4번 섹션에 모아놓았다는 것입니다.

한번 확인해보죠!

데이터를 넣기만 하면 다 없어지는 블랙홀 같은 용도인 '/dev/null'을 한번 "man 4 null"로 봐봅시다!



이렇게 말이죠! 위에 보면 4번 섹션으로 분류돼 있죠? 그리고 자세한 정보들도 적혀 있습니다.


v) man 섹션 5   


'섹션 5번'은 /etc/passwd, shadow와 같은 환경설정 파일들에 대한 메뉴얼들이 모여있는 곳입니다.

사실 저희들이 가장 많이 사용하게 될 섹션은 1번과 5번, 8번인데요, 주로 사용하는 방법은 이렇습니다. 

처음부터 예시를 들었던 /etc/passwd인 경우, '/etc/passwd'이란 설정파일이 어떻게 작동하는지, 각 필드가 뭘 의미하는지 궁금하잖아요?(/etc/passwd는 유명해서 다들 많이 배우니 알겠지만..) 

이럴 때 바로 'man 5'을 사용하는 겁니다!

"man 5 passwd"를 쳐보시면




이렇게 5번 섹션과 이 '/etc/passwd'란 설정파일이 어떤 역할을 하며, 많은 프로그램들이 유저의 정보를 확인할 때 참조하는 파일이고, w권한은 오직 슈퍼유저만 가능하다 등의 설명과 각 필드의 내용들들이 적혀있습니다. 

뿐만 아니라 과거엔 문제가 없었지만, 하드웨어의 발전으로 패스워드 무작위 대입공격들이 가능해지자, 패스워드만 따로 암호화 한다음 /etc/shadow에 저장한다는등의 역사적 스토리까지 모두 써놓았습니다.  

말 그대로 메뉴얼이죠~


vi) man 섹션 6 


'섹션 6번'은 게임과 같은 프로그램들에 대한 메뉴얼



아쉽게도 현재 제 리눅스 7에는 메뉴얼6번에 해당되는 것이 없더군요 ㅠ 

유일하게 있는 것이 바로 위 사진의 INTRO(인트로)이니..  위 페이지 DESCRIPTION(설명)을 읽어보면 "메뉴얼 섹션 6은 시스템에 사용가능한 모든 게임들과 재밌는 프로그램에 대한 것들을 설명해 놓은 곳이다"라고 적혀있네요.

만약에 윈도우의 지뢰찾기처럼, 기본 게임이 있는 리눅스 커널을 설치할 경우 이 섹션 6번에 몇개의 메뉴얼이 있을 것 같네요~ 


vii) man 섹션 7 


'섹션 7번'miscellaneous(여러가지 잡다한)이라 적혀있는데 보통 리눅스의 파일 표준이나 규칙, 프로토콜, 시그널에 대한 메뉴얼들들어있는 곳입니다. 

"cd /usr/share/man/man7"이렇게 이동해보시고 들어있는 파일들을 보시면



이렇게 arp 프로토콜이나





icmp, ip, ipv6, samba와 같은 프로토콜, 그리고 signal등의 메뉴얼들이 들어있는 것을 볼 수 있습니다.

아 참고로 저 확장자 '.gz'는 gzip이란 프로그램으로 압축파일을 만들 때 표현하는 확장자입니다.

한번 "man 7 signal" 해볼까요?


이렇게 제대로 섹션 7 시그널 메뉴얼이 나오며 좀 내려보면



이렇게 거의 모든 시그널에 대한 정보와 자세한 설명까지 모두 적혀있는 

말 그대로 메뉴얼을 볼 수 있습니다!


viii) man 섹션 8 


'섹션 8번'은 root, 즉 관리자들이 사용하는 명령어나 데몬에 대한 메뉴얼들이 있는 곳입니다.

만약 "데몬(daemon)"이 뭐지? 싶으신분들은!

https://mamu2830.blogspot.com/2020/04/blog-post_18.html

이 포스트를 보고오시길 바랍니다!



자 단순히 "man -k daemon"이라 쳤는데, 파일이름 끝에 d(daemon)이 붙은 데몬에 대한 메뉴얼들을 대부분 다 8번 섹션으로 나오는것을 볼 수 있습니다!

주로 서버 프로그램으로 많이 사용되는 데몬은 당연히 사용법을 잘 알아야 할 겁니다.

가끔 이게 무슨 역할을 하는 데몬이지? 싶을 때도 쓸 수 있고, 사용법을 까먹었을 때도 사용할 수 있는 아주 유용한 man 8이죠!


ix) man 섹션 9 


'섹션 9번'은 커널 루틴(프로그램 실행동안 계속 사용되는 코드들)과 커널 프로그래밍에 대한 메뉴얼들이 있다고 합니다. 

하지만.. 아쉽게도 대부분의 커널에선 이 man 9 섹션에 속한 메뉴얼이 없습니다.

인터넷에 검색을 해보니 'GNU의 C 라이브러리를 쓰는 freeBSD 계열 커널'이 아니면 보통 보기 힘들다고 합니다..




아 뭔가 섹션 9에 대해서 제대로 알아보지 못해 찜찜하네요 ㅠㅠ 

그래도 꼭 리눅스를 공부하는 사람들에게 도움이 됐으면 좋겠습니다!

도움이 되셨다면 팔로우와 따뜻한 댓글을 달아주시면 저에게 큰 힘이 돼, 포스트 퀄리티 향상에 도움을 줍니다!

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




댓글 2개:

  1. 안녕하세요. 혹시 현재 미국 유학중이신가요?

    답글삭제
    답글
    1. 아뇨 ㅎㅎ 한국에 거주중입니다! 물론 작년 여름에 사정이 있어서 한달간 미국에 가 있긴 했습니다.

      삭제

#1 여러분들이 소중한 시간을 투자해 달아주시는 따뜻한 댓글들은 저에게 정말 큰 힘이 됩니다!

#2 저의 각 포스트들은 엄청난 노력과 시간 투자를 통해 만들어진 포스트들로, 무단 복제나 모방하는 것을 금지합니다.

#3 저의 포스트에도 틀린 정보가 있을 수도 있습니다. 그럴 경우 친절한 말투로 근거와 함께 댓글로 달아주시면 정말 감사하겠습니다!