* 프롤로그? 어떤이의 꼬드김에 넘어가 리눅스를 깔고 썰렁한 login 프롬프트를 본지 벌써 반년이 넘는 시간이 흘러갔다. 하지만 아직까지 이 녀석에 대해 잘 안다고 말할 자신이 없다. 친구 같기도 하고 또는 나에게 두통을 선사하는 악동으로 바뀌기도 하는, 하지만 지금 나는 이 친구와 여행을 떠나자고 자신있게 말할 수는 있다. 두통약 몇알과 함께 여행을 떠나보자. 여행의 끝이 새로운 친구를 가지게 될는지 적과의 동침이 될는지 모르겠지만... + 리눅스라... 리눅스는 핀란드 대학생 리누스 토르발즈(Linus Benedict Torvalds)가 만든 GPL (Gnu Public License)를 따르는 공개 운영체제이다. 이거야 사전적인 이야기이고, 리눅스는 즐거움이라고 말하고 싶다. 스스로 무엇인가를 이루었을때 느끼는 성취, 항상 새로움을 느끼게 해주는, 그리고 항상 골머리를 썩게 하는 악동이라고... 리눅스를 사용함에 있어서 "Do It Yourself! - DIY" 라는 말을 많이 듣게 될것이다. "스스로 하라!"는 이 말, 어찌보면 참으로 무책임하게 들릴지도 모르겠지만, 다른 사람의 즐거움을 빼앗지 않기 위한 리눅서들의 배려가 아닐까? 아니라고 반박할지 모르지만 무언가 스스로 해나가는 즐거움보다 더한 즐거움은 없다고 말하고 싶다. 마지막으로 리눅스는 어렵지 않다. 다시 처음 만난 친구처럼 약간 어색할 뿐이다. 어렵다는 생각을 미리 하고 리눅스를 접하게 되면 정말로 어려워질것이다. 그냥 쉽게 생각했으면 한다. 좀 다른 환경일 뿐이라고... * 리눅스 탐험하기 + 로그인(Login) 리눅스를 사용하기 위해 가장 먼저 하는 일은 바로 로그인이다. (윽, 컴부터 켜야 하는건가?), LILO 에서 linux 라고 입력하고 엔터를 쳤다면 머리 아픈 영어 메세지 들과 함께 마지막에 이런 모습을 보게 될것이다. ---------------------------------------------------------------------------- Red Hat Linux - Alzza 4.2.x-kr (Nightmare Before Christmas) Kernel 2.0.32 on an i586 login: root Password: <- 패스워드를 적는 부분은 보이지 않는다. Last login: Thu Dec 11 21:43:54 from localhost [root@linux root]# ---------------------------------------------------------------------------- 통신망이나 쉘계정을 가지고 있다면 저러한 과정은 어색하지 않을것이다. 썰렁한 loing: 프롬프트에 아이디를 적고 비번을 적고, 덩그러니 커서가 깜빡이는 쉘 프롬프트가 뜰것이다. (비밀번호가 잘못되거나 없는 아이디로 로그인을 시도하면 "Login incorrect" 라는 메세지를 볼것이다.) 처음 로그인한후 파일 리스트 보는 명령이라고 어디서 들은적이 있는 "ls" 를 쳐봐도 아무것도 안 보이고 쉘 프롬프트만 다시 깜빡이기 시작하고, 왠지 막막할 거라는 생각이 든다. 커서는 깜빡이는데 아는 명령은 없고... 특히나 윈도우95 를 통해 컴퓨터를 접하게 되었다면 더욱 답답할 것이다. 하나씩 해가면서 익숙해 질수 있도록 해보자. + 사용자 계정 만들기 일단 리눅스를 처음 설치한 후에 존재하는 아이디는 오직 root 박에 없다. 슈퍼유저 또는 시스템 관리자라고 부르는데 이 아이디만이 시스템 전체 설정을 바꾸거나 사용자들이 쓸수 있는 프로그램을 깔수 있고 삭제 할수 있다. 그만큼 강력한 권한을 가지고 있는것이다. 하지만 그 강력한 권한 만큼이나 많은 위험을 가지고 있다. 어떠한 파일도 삭제할수 있기 때문에 작은 실수로도 리눅스를 다시 깔아야할 경우가 생길지도 모른다. (이전에 문서파일들을 지우려고 "rm -rf * .txt" 이라고 적은 덕에 이틀간 밤을 세워 시스템을 복구한 기억이 새롭다.) 되도록, 아니 절대로 일반적인 작업을 하기 위해서 root 아이디를 사용하지 말기 바란다. 지금 당장 root 외의 아이디가 없다면 만들어 보자. (사실 모두 root 란 아이디를 쓰면 개성이 없지 않은가?) ---------------------------------------------------------------------------- [root@linux /root]# adduser redhands <- redhands 아이디를 등록한다. Looking for first available UID... 500 Looking for first available GID... 500 Adding login: redhands...done. Creating home directory: /home/redhands...done. Creating mailbox: /var/spool/mail/redhands...done. Don't forget to set the password. <- 비밀번호 지정하는것을 잊지 말라는 경고? ---------------------------------------------------------------------------- "redhands" 라는 아이디를 만들어 보았다. 가장 밑에 한줄의 메세지를 눈여겨 보자. password 를 지정하는것을 잊지 마라고 전하고 있다. 그럼 만든 아이디의 비밀번호을 지정해 보자. ---------------------------------------------------------------------------- [root@linux /root]# passwd redhands New UNIX password: <- 로그인때와 같이 비번을 적는 부분은 Retype new UNIX password: 보이지 않는다. passwd: all authentication tokens updated successfully ---------------------------------------------------------------------------- root 의 경우 자신의 마음대로 모든것을 바꿀수 있다. 다른 사용자의 비밀번호를 바꿀수도 있는것이다. (다시 한번! root 는 일반 작업용 아이디가 아니다. 절대로 root 로 보통의 작업을 하지는 말자. 제발 T_T 필자도 더 이상 실수로 시스템이 날라갔어요. 어떻게 복구해야 하죠?라는 메일은 보고 싶지 않다. 흐윽~) 자 그럼 만들어진 아이디로 다시 로그인을 해보자. *주의* 언제나 리눅스를 사용하면서 나오는 메세지들을 그냥 넘기지 않았으면 한다. 문제를 해결하지 못하고 미궁에 빠질때 단 한줄의 메세지가 답이 될수도 있으니까... + 기본 명령어 - 파일 목록(list, 명령어: ls) 아까 지나가면서 "ls" 란 명령어를 소개했었다. "ls" 명령어는 도스의 "dir" 명령과 비슷한 파일 목록을 보여주는 것이다. 여러 옵션이 있는데 기본적인것 몇개를 알아 보도록 하자. 로그인후에 ls 를 쳐봤다면 아무것도 나오지 않고 프롬프트만 깜빡이는 경우를 겪었을 것이다. 아무것도 작업한것이 없다면 홈디렉토리에는 오직 기본 설정파일들 만이 존재하게 되는데 이 파일들은 모두 "." 으로 시작하는 (도트 파일이라고 부른 다.) 파일들이다. 사용자의 기본 설정들이 들어있는 중요한 파일이기 때문에 함부로 삭제하지 않게 하기 위해 숨겨 놓는것일런지? "ls -a" 그러니까 -a(ll) 옵션을 사용해서 확인할수 있다. ---------------------------------------------------------------------------- [redhadns@linux redhands]$ ls -a ./ .bash_profile .tcshrc ../ .bashrc .xmamerc .FVWM2-errors .cshrc ---------------------------------------------------------------------------- 여기서 한가지 알고 넘어가야 하는것이 있다. 방금의 화면을 보면 "." 와 ".." 가 있는데 이것이 무엇을 뜻하는지를 알기 바란다. "." 는 현재 디렉토리, ".." 는 상위 디렉토리를 뜻하는 것이다. 디렉토리를 이동하기 위한 명령어로 "cd" 가 있는데 "cd ../" 하면 바로 상위 디렉토리로 이동하는것이 되는것이다. 기억해두면 나중에 편할것이다. 아! 이것말고도 홈디렉토리를 나타내는 "~" 도 있다. *주의* 현재 디렉토리에 있는 명령을 실행하기 위해서는 꼭 "./명령어" 식으로 현재 디렉토리라는것을 명시해주어야 한다. 물론 지금 있는 디렉토리가 PATH 에 잡혀 있다면 모르겠지만 그렇지 않다면 "command not found" 라는 에러 메세지를 볼것이다. 그래도 그렇지 나의 홈디렉토리가 너무도 깨끗하다. 좀 사람 사는 맛이 나야 할 터인데, 작업 디렉토리도 만들고... 심심풀이 삼아 "mkdir ~/tmp" 라고 해보자. (~ 는 홈디렉토리를 나타낸다고 하였다.) 자신의 홈디렉토리에 tmp 라는 디렉토리 가 생성되었을 것이다. - 퍼미션(permition, 명령어: chmod) "ls" 명령어의 옵션을 하나 더 알아보자 "-l(ong)" 이라는 옵션인데 파일의 상태를 자세하게 표시해 준다. ---------------------------------------------------------------------------- [redhands@linux redhands]$ ls -l total 4 drwx------ 2 redhands redhands 1024 Dec 12 00:37 Mail/ drwxr-xr-x 7 redhands redhands 1024 Dec 11 21:45 tmp/ -rwxr-x--- 1 redhands redhands 633 Nov 14 02:53 bb* -rwxr-xr-x 1 redhands redhands 139 Jul 14 23:07 test* ---------------------------------------------------------------------------- 새로운 것을 하나 볼수 있는데 "drwxr-xr-x" 이런것은 별로 본적이 없을것이다. 파일의 사용권한(permition)을 나타내는 것인데 리눅스나 유닉스 같은 멀티 유저 시스템에서는 아주 중요한 것이다. 이 부분에 대해서 이해하고 제대로 사용하게 되면 파워 유저?의 반열에 들지도 모른다. 권한을 나타내는 부분은 4개로 구분되는데 한번 살펴 보도록 하자. ---------------------------------------------------------------------------- -rw-r--r-- 1 redhands redhands 833 Nov 14 04:21 linux.txt ---------------------------------------------------------------------------- 의 경우 권한을 설정하는 부분을 보면 첫번째 - 는 파일의 종류를 나타내는 것으로 디렉토리의 경우는 d 로 표시되고 일반 파일은 위와 같은 - 로 표시한다. 그리고 심볼릭링크의 경우는 l, 블럭장치는 b, 통신장치는 c 등으로 표시된다. 물론 다 기억해야할 필요는? 없다. 일반 파일과 디렉토리만 구분하면 된다. 그 다음부터 3 글자씩으로 끊어서 각각 파일의 소유자(User), 그룹(Group), 다른 사용자(Other)에 대한 권한을 나타낸다. 각각에 대하여 다른 권한을 줄수 있는것 이다. 퍼미션은 가장 많이 쓰이는것이 r(읽기), w(쓰기), x(실행) 가 있다. 그외 에도 setuid, setgid, sticky bit 가 있다. 앞의 세가지야 보시다시피 그 이상은 아니다. *참고* 리눅스를 쓰면서 가장 어색한 부분중 하나가 실행 파일에 대한 것인데 도스나 윈도우에서는 파일의 확장자로 모든것을 구분하지만 리눅스는 그렇 지가 않다. 그저 확장자는 달아도 그만 달지 않아도 그만이다. 도스에서 실행 파일엔 com, exe, bat 등의 확장자가 붙지만 리눅스에서는 x(실행) 퍼미션이 붙어서 그 파일이 실행 가능하다는것을 나타낸다. 똑같은 파일이라 하여도 x(실행) 퍼미션이 없으면 실행되지 않음을 기억 하였으면 한다. setuid 와 setgid 는 또 무엇이길레 골치를 아프게 하는것일까? 두 퍼미션의 기능 은 비슷하다. 앞의 것은 파일 소유권자의 권한으로 프로그램이 실행되는 것이고 뒤의 것은 파일 소유그룹의 권한으로 돌아가는 프로그램이다. 이것들이 왜 필요한 것인가? 대표적으로 하나 예를 들자면 passwd 프로그램 같은 것이다. 이 프로그램을 이용해서 일반 사용자도 자신의 비밀번호를 변경할수 있는 데 변경되는 비밀번호는 "/etc/passwd" 에 기록된다. ---------------------------------------------------------------------------- [redhands@linux redhands]$ ls -l /usr/bin/passwd /etc/passwd -rw-r--r-- 1 root root 1577 Dec 11 21:25 /etc/passwd -r-sr-xr-x 1 root bin 15796 Apr 24 1997 /usr/bin/passwd* ---------------------------------------------------------------------------- "/etc/passwd" 파일의 경우 오직 root 사용자만이 쓰기를 할수 있도록 되어 있다는 것을 볼수 있을것이다. 그러니 일반 유저가 실행한 파일은 그 파일을 변경할수 없을것 이라는건 쉽게 생각할수 있다. 이런때에 setuid 가 필요한데 "passwd" 명령어의 퍼미션 부분에 x(실행) 대신에 s(setuid) 가 붙어 있는것이 보이는지? (setuid 와 setgid 를 구분하는 방법은 간단하다. 그룹 퍼미션 부분에 s 가 붙어 있으면 그것은 setgid 이다.) 사용자가 "/usr/bin/passwd" 를 실행하면 이 프로그램 은 그 사용자의 권한이 아닌 root 아이디의 권한으로 돌아가게 된다. 그러므로 "/etc/passwd" 파일의 내용을 변경할수 있는것이다. *참고* "/etc/passwd" 파일의 퍼미션을 보면 변경은 불가능하지만 누구나 읽을수는 있다는것을 알수 있을것이다. 사용자의 비밀번호가 암호화 되어 이 파일에 저장되는데 누구나 읽을수 있게 때문에 다른 사용자가 이 파일을 가져가서 암호를 풀어내는 프로그램을 이용해서 시스템 관리자의 비밀번호를 알아낸 다면 문제가 생길것이다. 그래서 shadow 라는것을 쓰는데 사용자 비밀번호 부분만을 따로히 root 만이 읽을수 있는 파일로 저장하여서 비밀번호가 유출되지 않게 할수 있다. 아주 쉽게 전환이 가능하므로 꼭 shadow 시스템으로 바꾸기 바란다. 프롬프트에서 "pwconv5" 라고 입력하는것만으로도 자신의 시스템의 안정성 이 한단계 더 높아진다. 잘 모르겠더라도 우선 "pwconv5" 부터 치고 보자. setgid 역시 이러한 경우와 비슷한 때에 (어떤 그룹만이 변경할수 있는 파일을 변경해야 할때) 사용할수 있다. 메일 관련 프로그램들이 자주 사용한다. *주의* "setuid" 와 "setgid" 는 참 재미있는 퍼미션이지만, 아주 위험한 퍼미션이 될수도 있다. 보시다시피 특정 프로그램이 소유자(보통 root)의 권한으로 수행되기 때문에 만약 그 프로그램에 버그가 있다면 그것을 이용해서 시스템 을 파괴할수도 있기 때문이다. 보안에 신경을 쓰게 된다면 아마 상당히 거슬리는 퍼미션이 될것이다. sticky bit 는 어떠한 경우에 쓰이는것인지도 설명해야 형평성?에 맞을꺼 같다. "/tmp" 디렉토리는 관리자나 일반 사용자가 임시 작업 장소로 사용하는 디렉토리 인데 그렇다면 누구나 쓰기가 되어야만 하지 않겠는가? 그러나 누구나 쓰기가 가능 하게 되면 아무나 그 디렉토리 이하의 파일을 삭제할수도 변경할수도 있게 된다. 이럴때에 sticky bit 를 사용하는데 tmp 디레토리의 퍼미션을 보면 ---------------------------------------------------------------------------- drwxrwxrwt 4 root root 1024 Dec 12 03:53 tmp/ ---------------------------------------------------------------------------- 이렇게 되어 있다. 맨 앞의 "d" 는 디렉토리라는 것을 뜻하는것이고 특이한것은 모두 읽고 쓰고 실행이 가능하다고 되어 있는데 마지막에 w(쓰기) 대신에 "t" 라고 되어 있다. 이것이 sticky bit 퍼미션이다. 이 퍼미션이 설정이 되면 모두 쓰기가 가능한 대신 소유자가 자신이 아닌 경우엔 파일을 지우거나 변경하지 못하게 된다. 간단하지 않은가? (머리가 좀 아플지도 모르겠다. 사실 자주 헛갈 리는 부분이다. 흑~) *참고* 디렉토리의 퍼미션에 대한 부분은 처음 리눅스를 다룰때 이해하기 참 힘들었던 부분이다. 나름대로 이해한 부분을 설명해 보겠다. 간단하게, 디렉토리이던 파일이던 시스템에서 보면 하나의 파일일 뿐이다. 디렉토리 내의 파일들은 디렉토리란 파일의(말이 좀 이상하군) 내용이라고 생각하면 쉽게 해결될수 있다. 디렉토리 내의 내용을 보기 위해서는 읽기가 가능해야 하고 디렉토리 내에 파일을 생성 변경을 위해서는 쓰기가 가능해야 한다. 실행 퍼미션의 경우 약간 혼란이 오는 부분인데 디렉토리에 접근(access) 하기 위해서는 실행 퍼미션이 필요하다. 접근과 실행 먼가 일맥상통하는 점이 있을런지? 상당히 재미있는데 이런 경우를 한번 보자. --------------------------------------------------------------------- [redhands@linux test]$ ls -al total 0 drwxr-xr-x 2 redhands redhands 1024 Nov 18 11:53 ./ d--x--x--x 7 redhands redhands 1024 Dec 11 21:45 ../ [redhands@linux test]$ ls ../ ls: ../: Permission denied --------------------------------------------------------------------- 아까 ".." 과 "." 이 무엇을 뜻하는지 말했었다. 기억이 안난다면? 당장 다시 펼쳐 봐야지 말이 필요 없지 않은가? 두 디렉토리의 퍼미션을 한번 살펴 보자. 상위 디렉토리는 오직 x(실행) 퍼미션 박에 없다. 하지만 현재 디렉토리에는 읽기와 실행 퍼미션이 같이 있다. 실행이 있기 때문에 디렉토리를 지나올수는 있지만 읽기가 없어서 "ls" 로 파일 리스트를 보려고 하니 퍼미션 에러가 난다. 현재 디렉토리 의 경우는 읽기가 있기 때문에 리스트를 볼수 있다. (비록 파일이 아무것도 없지만...) 각각의 디렉토리는 별개의 관계지만 그 상위 디렉토리에서 접근이 불가능하게 막아 버린다면 그 디렉토리 하부로는 들어가지 못하게 되는것이다. (왜 더 혼란스럽게 만들꺼 같다는 생각이 드는지...) 중요한 문서나 야한그림?이 있는 디렉토리는 "chmod o-x 디렉토리" 이렇게 해보면 어떨까? 자신만이 접근할수 있는 디렉토리 재미있지 않은가? 열심히 퍼미션에 대한 설명을 했는데 어느 정도 익숙해졌을런지? 그럼 이 퍼미션 바꾸기 위해선 어떤 명령을 사용는지? "chmod" 라는 명령어를 이용해서 파일 또는 디렉토리(시스템 장치또한)의 퍼미션을 변경할수 있을것이다. 간단한 사용법을 알아보자. ---------------------------------------------------------------------------- -rw-rw-r-- 1 redhands redhands 1744896 Dec 12 05:32 일기장 ---------------------------------------------------------------------------- 일기장, 이걸 남에게 보여주고픈 사람은 별로 없을꺼라고 믿는다. 그런데 지금은 아무나 읽을수가 있다. 당장 남이 읽지 못하도록 바꾸어 버리자. ---------------------------------------------------------------------------- [redhands@linux redhands]$ chmod o-r 일기장 [redhands@linux redhands]$ ls -l 일기장 -rw-rw---- 1 redhands redhands 1744896 Dec 12 05:32 일기장 [redhands@linux redhands]$ ---------------------------------------------------------------------------- 저기서 "o" 는 다른 사용자(Other)을 나타내는 것이고 "-r" 읽기를 뺀다?라는 옵션 이다. 그러고보니 그룹에게도 읽기와 쓰기 권한이 있다. 이것도 없에버리자. ---------------------------------------------------------------------------- [redhands@linux redhands]$ chmod g-rw 일기장 [redhands@linux redhands]$ ls -l 일기장 -rw------- 1 redhands redhands 1744896 Dec 12 05:32 일기장 ---------------------------------------------------------------------------- 오직 나만이 읽고 쓸수 있는 일기장 파일이 만들어졌다. 권한을 더할려면 어떻게 해야 할까? "-" 의 반대는 "+" 니까 "chmod g+r" 이런식으로 사용할수 있지 않을까 ? 전혀 어려울것이 없다. 그러보니 setuid, setgid, sticky bit 를 부여 하는 방법에 대해선 설명을 하지 않았다. 아주 간단한데 setuid 는 "chmod u+s" 라고 하면 된다. 그럼, setgid 는 그럼 어떻게 줄수 있을까? 그룹에다가 부여 하는것이니 "chmod g+s" 라고 하면 간단하게 될것이다. stiky bit 는 어떻게 부여할수 있는것일까? stiky bit 의 경우 다른 사용자에게 적용되는 것이니까 "chmod o+t" 이렇게 해줄수 있을것이다. 어느 정도 "chmod" 라는 명령을 사용할수 있게 되었는지 모르겠다. 위에서 설명한 방법은 이미 정해진 퍼미션에 대해 가감을 하는 상대적인 방법이라고 볼수 있을 것이다. 이외에도 절대적으로 권한을 부여 하는 방법이 있다. 소유자에게 읽기,쓰기 그외엔 모두 읽기만을 부여한다면 아주 간단하게 이러한 방법을 사용할수 있다. ---------------------------------------------------------------------------- [redhands@linux redhands]$ ls -l MYCOM -r-------- 1 redhands redhands 806912 Dec 12 23:53 MYCOM [redhands@linux redhands]$ chmod 644 MYCOM [redhands@linux redhands]$ ls -l MYCOM -rw-r--r-- 1 redhands redhands 806912 Dec 12 23:53 MYCOM ---------------------------------------------------------------------------- 상당히 간단한데 r(읽기), w(쓰기), x(실행) 이 각각 4, 2, 1 로 표현되고 주고자 하는 퍼미션들의 값?을 더해서 설정해 주면 되는것이다. 만약 -rwxr-xr-x 같은 퍼미션을 주고자 한다면 소유자는 rwx -> 4+2+1 = 7 이 되고 나머지는 r-x -> 4+1 = 5, 간단하게 "chmod 755" 이렇게 사용할수 있을것이다. 이해가 잘 가지 않는 다면? 직접 해보라! 가장 빠르게 이해가 될것이다. 어째서 저런식의 숫자로 표현 되는가? 표를 그려야 할까? +------+-----+------+------+ |퍼미션|2진수|10진수| 권한 | +------+-----+------+------+ | r-- | 100 | 4 | 읽기 | | -w- | 010 | 2 | 쓰기 | | --x | 001 | 1 | 실행 | +------+-----+------+------+ 아주 간단하고 자주 사용하는 방법이니 익숙해지도록 하자. 아! 그러고보니 아까 열심히 설명한 setgid, setuid, sticky bit 는 이런식으로 어떻게 퍼미션을 부여 할수 있는지 말하지 않았다. 이것도 비슷하다 지금 말한 순서데로 4, 2, 1 값?을 가지고 "chmod" 를 사용할때 숫자 하나를 맨 앞에 추가 해주면 된다. ---------------------------------------------------------------------------- [redhands@linux redhands]$ ls -l MYCOM -rw-r--r-- 1 redhands redhands 806912 Dec 12 23:53 MYCOM [redhands@linux redhands]$ chmod 6755 MYCOM [redhands@linux redhands]$ ls -l MYCOM -rwsr-sr-x 1 redhands redhands 806912 Dec 12 23:53 MYCOM* ---------------------------------------------------------------------------- setuid(4) + setgid(2) = 6 이니까 "chmod 6755" 이런식으로 퍼미션을 부여했다. 어느 정도 굼긍증이 해소가 되었을까? 더 자세한 명령은 어떻게 알수 있을까? 이런 궁금증을 해결할수 있는것이 바로 매뉴얼(man page)이다. *참고* 명령어에 대한 간략한 사용법을 알기 위한 방법이 있다. 대부분의 명령어 들(거의 모두 GNU 프로그램들이다.) 일정한 규칙을 가지고 있다. 도움말을 출력하는 옵션은 "--help" 또는 "-help" 이다. "명령어 --help" 라고 지금 당장 쉘 프롬프트에서 입력해 보자. 간략한 도움말이 출력될것이다. 물론 대부분 영어겠지만 (가끔 한글도 있다. 가뭄에 콩나듯이...) 많은 도움이 될것이다. 더 자세한 도움말은 매뉴얼을 보는 수밖에... - 매뉴얼@(man page, 명령어: man@) 자주 사용할수록 실력에 보탬이 되는 명령어가 바로 "man" 이다. 왜냐면 말그대로 매뉴얼이니까! 사실 리눅스에는 수많은 명령어들이 있다. (지금 키를 두번 쳐보자. 몇개의 명령이 사용가능한지 나오고 그것을 다 볼것인지 말것인지 물어볼 것이다. 현재 필자의 경우 1366개의 실행 가능한 명령이 있다고 한다.) 그 모든 명령들의 옵션을 기억하고 또 어디에 사용하는지 기억할수 있는 사람이 과연 존재할까?(IQ 300이면 가능할지도 흠~) 자신이 자주 쓰는 명령어 외에는 기억할수 있는 사람은 거의 없을것이다. 이때 도움을 얻을수 있는것이 바로 매뉴얼 이다. 방금 옵션도 다 설명안하고 슬쩍 넘어간 "ls" 와 "chmod" 에 대하여 좀 더 자세한 옵션등을 알고자 하는 사람이 많을것이다. "chmod" 의 매뉴얼을 한번 보기로 하자. ---------------------------------------------------------------------------- [redhands@linux redhands]$ man chmod CHMOD(1) CHMOD(1) NAME chmod - 파일 접근 권한을 바꾼다. SYNOPSIS chmod [-Rcfv] [--recursive] [--changes] [--silent] [--quiet] [--verbose] [--help] [--version] mode file... ---------------------------------------------------------------------------- 이런식으로 아주 상세한 설명이 나온다. 또 연관이 있는 명령어들의 목록이 나오기도 한다. 매뉴얼 페이지를 잘 이용하면? 한단계 더 높은 수준의 리눅싱? (아이싱 같네...)을 즐길수 있다. *속보* 매뉴얼을 사용하면서 가끔씩 한글로 번역된것들을 볼수 있을것이다. 이것은 리눅스에 먼저 중독된 사람들의 노력에 의해 하나씩 번역되어 있는것으로 참으로 감사함을 느낀다. 시스템의 아주 기본이 되는 명령어 들은 대부분 번역되어 있으므로 많은 도움이 되지 않을까 한다. 가는정이 있으면 오는정도 있어야 한다는데 어느 정도 실력이 쌓이면 번역 작업에 동참해보면 어떨까? 아직도 많은 노력이 필요하기 때문에... http://free.xtel.com/~teodeul/ 에서 최신의 번역된 매뉴얼들을 살필수 있을것이다. 그외에도 볼거리가 많으니 한번 들려 보기 바란다. - 문서보기(명령어: less, more, cat...) 매뉴얼을 보다보면 리눅스에서 이러한 문서는 어떻게 보는것인지가 궁금할수도 있을것이다. (제발 궁금하다고 하기를...) 리눅스에서 어떠한 일반적인 텍스트 문서를 보기 위한 프로그램들은 아주 많다. less, more, cat... 또는 편집기를 이용해서 볼수도 있을것이다. 그중에도 가장 많이 쓰는것이 "less" 와 "more" 인데 좀 더 기능이 뛰어난 "less" 에 대해 설명 하고자 한다. 간단한것만 예기 할것이다. (문서 보는게 복잡하다구 하면 머리 아플께 분명하니까!) 사용법이야 아주 간단하다. "less 문서이름" 이다. 더 이상 머가 있겠는가? 단지 몇가지 유용한 기능을 소개 하자면 가장 처음으로 "less" 로 문서를 보는 중에 "h" 키를 치면 도움말을 볼수 있을것이다. 그리고 어떤 문서에서 문자열을 찾아야 한다면 "/문자열" 이렇게 할수 있다. 문서를 보는 중간에 편집을 하고 싶다면? "v" 키를 누르면 된다. 다만 악명 높은 "vi" 편집기가 뜬다는게 문제겠지 만... 종료키는? 예상한데로 "q" 이다. "more" 의 경우도 "less" 의 명령들과 거의 동일하다. *참고* 리눅스의 많은 명령어, 프로그램들을 사용하다 보면 한가지 느끼는것이 있다. 대부분의 옵션들이 일관성이 있다는것이다. 이것과 저것이 완전히 틀린게 아니라 쉽게 연관을 지을수 있고 비슷한 옵션도 많다는 것, 실제로 "less" 에서 검색 명령은 "vi" 편집기나 "more" 에서 그데로 쓰인다. 아까 설명한 "--help" 의 경우도 마찬가지이고, 덕분에 어느정도 익숙해 지면 모르던 프로그램도 간단하게 사용할수 있다는점을 말하고 싶다. 거기다 매뉴얼까지 확실하니까! "cat" 의 경우는 그냥 문서를 뿌려주기만 한다. 커다란 문서를 읽을때 "cat" 을 사용하는 실수는 하지 않기 바란다. 하루 종일 화면에 글이 올라갈지도 모르는 일이니까. 이 작은 프로그램 하나가 아주 유용하게 쓰일때가 있다는것을 언젠가 느낄수 있을것이다. (너무 일찍 바닦이 보이면 안되니...) 아차! 문서 보기를 설명했으니 놓칠수 없는것이 하나 있다. 바로 주옥같은 HOWTO@ 문서들이다. 많은 주제에 대하여 말그데로 "어찌하나" 를 다루고 있는데 대부분의 문제를 이 문서들만으로도 해결할수 있을 정도로 많은 양의 문서들이 준비되있다. (단, 대부분 영어라는게 필자를 슬프게 한다.) 지금 당장 "/usr/doc/HOWTO" 디렉 토리로 뛰기 바란다. 흠 어디 "pwd" 라고 치면 "/usr/doc/HOWTO" 라고 나오는지? (슬쩍 명령어 하나 더) 많은 문서들이 있다. ---------------------------------------------------------------------------- [redhands@linux HOWTO]$ ls AX25-HOWTO.gz Linux-HOWTOs.tar.gz Access-HOWTO.gz META-FAQ ~ ~ Installation-HOWTO.gz XFree86-HOWTO.gz Italian-HOWTO.gz mini/ Java-CGI-HOWTO.gz other-formats/ Kernel-HOWTO.gz translations/ Keyboard-and-Console-HOWTO.gz ---------------------------------------------------------------------------- 물론 이것또한 매뉴얼과 마찬가지로 노력과 땀의 결정체인 번역된 문서들이 있다. "/usr/doc/HOWTO/translations/ko" 디렉토리 밑에서 한글로 번역된 문서들을 볼 수 있을것이다. 한글로 번역된 하우투 중에서 "mini" 디렉토리 밑에 있는 "DOS2Linux" 문서는 한번 읽어보기 바란다. 많은 도움이 될것이다. *속보* 리눅스 문서들에 대한 번역 작업은 지금도 계속되고 있다. 아직도 너무나 모자란 점이 많기에 더욱더 많은 도움을 필요로 한다. http://kldp.linux-kr.org 에서 최근에 번역된 HOWTO와 문서들을 볼 수 있을것이다. 또한 아직 번역되지 않은 HOWTO들의 길다란 목록 또한... 여러분이 도와준다면? 더욱더 빠르게 새로히 시작하는 리눅서들에게 한글을 더욱 많이 맛보게 해줄수 있을것이다. 최신의 영문 HOWTO들은 http://sunsite.unc.edu/LDP (Linux Document Project) 에서 구할수 있을것이다. 꼭 가보기 바란다. 그러고보니 HOWTO 디렉토리 밑의 문서들은 대부분 "gzip" 이라는 압축도구를 이용해서 압축이 되어 있는 상태에다. root 를 사용한다면 그 자리에서 압축을 풀어 "less" 등으로 보면 될터인데 하지만 우리는 일반 유저이기 때문에 그럴수는 없다. (일반 유저를 사용한다고 믿는다.) "cp" 명령을 이용해서 자신의 홈디렉토리 로 복사한후 "gzip -d 파일이름" 으로 압축을 풀어 볼수도 있지만, 아주 간단한 명령을 하나 소개한다. "less" 의 앞에 "z" 자 하나를 더 붙여서 "zless" 란 명령 을 쓰면 "gzip" 으로 압축된 문서를 그냥 볼수 있다. 단지 "gzip" 으로 압축된 문서를 본다는것 외에는 "less" 와의 차이점은 없으니 잘 사용하기 바란다. - 압축?(compress, 명령: gzip, tar, compress, cpio) 압축된 문서예기도 나왔고, 리눅스에서 압축파일을 다룰줄 아는것은 중요하다. 어떤 프로그램을 받더라도 대부분 "gzip" 등으로 압축 되어 배포되고, 문서 파일도 저런식으로 배포되니 이건 압축을 풀줄 모르면 정말 답답해 지는것이다. 사실 도스에서도 압축이라면 신물이 나도록 해보았고 풀어 보았을것이다. 통신망 에서 구한 프로그램을 한번 사용할려고 해도 열심히 다운받아서 압축을 풀어야 했으니... 리눅스에서는 압축 도구로써 "gzip" 을 가장 많이 쓴다. 보통 파일을 묶는 "tar" 와 "gzip" 을 같이 사용하는데 이것에 대한 사용법 정도는 숙지 하고 넘어가야 할듯하다. 보통 "gzip" 으로 압축된 파일은 ".gz" 확장자가 붙는다. 또는 "tar + gz" 로 많은 파일을 한번에 압축한 경우 ".tgz" 라는 확장자를 쓰기도 한다. (tar.gz 도 많이 쓰인다.) 우선 간단하게 "gzip" 으로 압축된 파일을 풀어보자. ---------------------------------------------------------------------------- [redhands@linux paper]$ ls -l LINUX.gz -rw-rw-r-- 1 redhands redhands 9706 Dec 12 07:33 LINUX.gz [redhands@linux paper]$ gzip -d LINUX.gz [redhands@linux paper]$ ls -l LINUX -rw-rw-r-- 1 redhands redhands 20955 Dec 12 07:33 LINUX ---------------------------------------------------------------------------- "-d(ecompress)" 옵션으로 간단하게 압축을 풀수 있다. 압축할때는? 그냥 "gzip 파일이름" 이면 끝이다. 그럼 가장 많이 접하게 되는 "tgz" 또는 "tar.gz" 확장 자를 가진 압축파일은 어떻게 풀수 있을까? "gzip -d" 로 압축을 풀고 "tar xvf" 로 묶인 파일들을 풀어 낼수 있다. 한번에 할수는 없을까? "tar xvzf" 를 사용하면 된다. "z" 옵션이 추가되었음을 유념하기 바란다. 한가지 "tar + gz" 로 파일들을 묶을때 주의할점이 하나 있다. 명령어 입력에 주의하기 바란다. "tar cvzf 압축파일명 묶을파일들" 이렇게 사용한다. 그냥 압축파일명을 적지 않고 묶을 파일들만 적어 버리면 그 파일중에 맨 앞의 파일에 압축내용이 저장되어 그 파일의 내용을 복구 할수 없게 된다. 주의하라. 그외에도 zip, rar, lha 등의 많은 압축도구들을 제공한다. 각각의 사용법은 매뉴얼이나 도움말을 보고 익히기 바란다. (도스와 거의 같다.) - 백그라운드 & 포그라운드(background, foregroud, 명령: bg, fg, jobs, CTRL+Z) 언젠가 말했던가 리눅스 이 친구는 여러 작업을 동시에 할수 있다고? 방금 설명한 경우처럼 어떠한 파일을 압축할때나 풀때에 용량이 클 경우 시간이 오래걸린다는 것을 알고 있을것이다. 오래걸린다구 그냥 화면만 멍하니 쳐다볼수는 없는 노릇이 고 어떻게 할수 있을까? ---------------------------------------------------------------------------- [redhands@linux paper]$ gzip LINUX & [1] 18705 [redhands@linux paper]$ ---------------------------------------------------------------------------- 뒤의 "&" 가 보이는가? 어떠한 명령의 실행을 백그라운드로 실행하도록 하는것 이다. 명령을 백그라운드로 실행하면 그냥 포그라운드로 실행했던때처럼 화면히 가만히 멈춰서 아무것도 못하는것이 아니라 바로 프롬프트가 떨어지고 새로운 작업을 할 수 있게 된다. 우리가 딴작업을 하고 있는 동안에 방금 실행시킨 명령은 보이지 않는 곳에서 열심히 CPU 를 써가며 다른 작업을 하고 있을것이다. 상당히 재밌지 않은가? 그럼 처음에 "&" 를 붙여서 실행하지 않고 그냥 실행한 명령어를 백그라운드로 전환 하려면 어떻게 할수 있을까? ---------------------------------------------------------------------------- [redhands@linux paper]$ gzip LINUX <- CTRL+Z 를 누른다. [1]+ Stopped gzip LINUX [redhands@linux paper]$ bg [1]+ gzip LINUX & ---------------------------------------------------------------------------- 이렇듯이 CTRL+Z 키를 이용해서 프로그램의 수행을 잠시 중단 시킨후 "bg" 명령 으로 백그라운드로 돌아가게 할수 있다. 다시 포그라운드로 나오게 하려면 그냥 "fg" 명령을 쓰면 된다. 아주 간단하다. *참고* CTRL 키와 함께 쓰는 명령이 몇가지가 있다. CTRL+Z 는 현재 돌아가고 있는 프로그램의 수행을 잠시 멈추는 역할을 하고, CTRL+C 는 프로그램을 종료 시킨다. 어떠한 경우에도 CTRL+C 로 멈추지 않는 프로그램은 없을것이다. 그외에 CTRL+S 도 있는데 이건 화면의 출력을 멈추게 하는것이다. 이전에 필자는 이키를 잘못눌렀다가 컴이 다운된줄 알고 끈적도 있다. 전혀 키입력 을 받지 않을뿐더러 출력도 되지 않는다. 푸는 방법은 CTRL+Q 를 누르는 것이다. 다음번에 프로세서를 관리하는것에 대한 자세한 설명을 해보기로 하자. 아마 본격 적인 리눅스 사용의 시작이 될것이다. - 그외에... 이제껏 설명한 몇개 안되는 명령어들 말고도 부지기수로 많은 명령들이 리눅스에 존재한다. 하지만 천리길로 한걸음부터라고 하지 않는가? (첫술에 배부르랴인가?) 하나 하나 차근 차근 배워 가도록 하자. 설명했던 ls, man@, cd, cp, mkdir, passwd, chmod@... 외에도 스스로 한번 이런 명령어 들에 대하여 공부해보자. 즐겁게... 파일 관리에 필요한 cp@, rm@, mv, rmdir , 디스크를 사용하기 위해선 mount@, umount@, 시스템 관리를 위한 ps@, kill@, jobs@, top, free 그리고 su@, who, find, grep, date... 등등 매뉴얼을 활용한다면 쉽게 알수 있을것이다. 방금 말한것들은 지극히 기본적인 명령어들이다. 또한 굵은 글씨로 적힌 명령어 들은 필히 알아야 하는것들이라고 할수 있다. 꼭 매뉴얼을 보면서 사용법을 익히기 바란다. *참고* 가장 쉽게 리눅스와 가까워지는 방법이 무엇일까? 직접 뭐든지 해보는 것이다. 무엇이던지 직접 해결책을 찾고 키보드를 두드려보면 금세 익숙해 진 모습을 볼수 있을것이다. 해보지도 않고 하는 질문은 답변을 얻기도 힘들것이다. 다시 한번 "DIY@" 를 생각해보기 바란다. + 시스템 끄기 이제 그만 잠자리에 들시간이 아닌가 싶다. 해가 떠오르니까 평소 습관데로 잠에 빠져야 할꺼 같은 느낌이 든다. 이제 잠시 리눅스와 휴전을 하고 잠의 세계로 빠져 보자. 그래도 가는길에 마지막 할 말을 해야 할꺼 같으니 졸음을 참고... 리눅스같은 32비트 운영체제들은 그냥 컴퓨터의 전원을 내려버릴시에는 문제가 생길 확률이 높다. 메모리에 많은것을 저장했다가 컴퓨터를 끌시에 그것을 하드 디스크에 기록하는데 무작정 전원을 내려버리면 기록할 시간도 없이 작동을 멈추기 때문에 파일 시스템에 이상이 생길수 있다. 언제나 컴퓨터를 끄기 전에는 콘솔에서 CTRL+ALT+DEL 키나 reboot 명령을 입력하기 바란다. 이게 가장 간단한 방법이다. 그러면 reboot 어쩌고 하는 메세지와 함께 자동으로 리붓이 될것이다. 또는 완전히 꺼버리는 명령으로 "halt" 가 있다. (물론 root 만이 실행 가능하다.) "halt" 명령을 준후 "System Halted" 라는 메세지가 보이면 전원을 사정없이 내리면 될것이다. 또는, "shutdown" 명령을 사용할수도 있는데 리부팅을 위해선 "shutdown -r now" 완전히 시스템을 끌때에는 "shutdown -h now" 를 사용할수 있다. (shutdown 명령의 매뉴얼을 보다보면 -k 라는 옵션도 있다. kid 의 약자 상상이 가는지?) 그럼 잠시나마 리눅스와의 휴전을 선포하고 깊은 잠에 빠져들기 바란다. 날씨가 추우니 이불을 따뜻하게 덮고 자는거 잊지 말았으면... 감기라도 걸리면 리눅스 와 함께 나눌 시간이 줄어들테니까 말이다. 한달여를 꺼지지도 못하고 돌아가고 있는 필자의 컴이 쉴 시간이 있을련지... 언제나 리눅스와 함께 즐거운 전쟁이 되기를... - 잠못드는 올빼미 적수 - - redhands@linux.sarang.net - - www.linux.sarang.net -