by 엠넷 듈라니
리눅스 전문가 협회(LPI)에서는 3 Level로 구성된 인증을 제공하는데, 각각의 Level에는 2개의 시험이 있으며 모두 통과해야 한다. 인증은 VUE에서만 관할하고 있다. Level 2와 Level 3은 아직 개발중이지만, Level 1은 현재 응시 가능하며 101과 102 시험으로 나뉘어진다. 여기에 나오는 50가지 팁은 Coriolis Group에서 2001년 3월에 출간한 LPI General Linux 1 Exam Cram (Exam 101)에서 발췌한 것으로, 101 시험의 5가지 소주제로 정리해 놓았다.
GNU와 유닉스 명령어
1. 셸은 운영체제의 명령어를 사용자에게 해석해 준다. 리눅스에는 사용 가능한 셸이 여러 개여서, 사용자들은 대부분 자신에게 맞는 셸을 선택하여 사용한다. 리눅스에서 자주 사용되는 셸은 다음과 같다:
- bash- Bourne Again Shell(시험에서 가장 자주 사용됨)
- tcsh- Tom"s C Shell
2. 텍스트 파일 전체를 가장 손쉽게 보려면 cat 명령어를 이용한다.(반대로 명령하려면 tac를 사용한다). 페이지의 상단만 보고 싶다면 head 명령어를, 하단만 보고 싶다면 tail 명령어를 사용하면 된다.
3. cut 명령어는 파일에서 항목을 불러내서 paste나 join 명령어로 항목을 결합시킬 수 있다. join이 paste보다 더 많은 특성을 제공하는데, 적절히 paste나 join을 사용하면 된다.
4. expand 명령어는 탭(tab)을 빈 공간으로 바꿀 수 있다. 이에 반해 fmt 명령어는 텍스트의 행을 문자에 맞춰서 정렬해 주며, pr 명령어는 페이지의 길이를 정렬해 준다. nl 명령어는 순차적으로 행을 보여주며, sort는 -n 매개변수를 사용하여 알파벳순이나 숫자순으로 항목을 정렬해 준다.
5. od 명령어는 텍스트가 아닌 파일을 8진 덤프(octal dump)로 나타낸다. tr은 특수 문자를 다른 문자로 변환하며, wc는 파일 내의 행, 단어, 문자의 수를 센다.
6. cp는 파일을 복사하라는 명령어이고, mv는 파일을 옮기라는 명령어이다. rm은 삭제할 때 사용하는데, mkdir로 생성된 디렉토리를 삭제할 경우에는 rmdir 명령어를 사용한다. 이러한 명령어를 사용할 때는 절대 주소지정이나 상대 주소지정, 그리고 와일드카드를 이용해 타겟이나 소스 항목을 명확히 해 줘야 한다. 디렉토리를 변경하려면 cd 명령어를 사용하고(단, 매개 변수를 지정해 주지 않으면, 홈 디렉토리로 이동하게 된다), 현재 작업 중인 디렉토리를 확인하려면 pwd(present working directory: 현재 작업중인 디렉토리) 명령어를 사용한다.
7. 일반적으로 표준 입력(stdin)은 키보드에서, 그리고 표준 출력(stdout)은 모니터에서 읽는다. stdin과 stdout은 표준 에러(stderr)와 마찬가지로 리다이렉트(방향 재지정)할 수 있다. 리다이렉션할 때에는 >, >>, <, | 와 같은 심볼을 사용한다. 출력을 여러 곳으로 보낼 때에는 tee 명령어를 사용하면 된다.
8. 명령어와 명령행은 세미콜론(;)으로 연결하는데, 각 명령은 서로 독립적으로 작용한다. 명령어에는 히스토리 기능이 있어서 한번 입력한 명령어는 재입력할 필요가 없으며, 이전에 편집해 놓은 것을 실행할 수 있다. 모든 명령어는 실행할 때 최소 하나의 프로세스를 거치는데, 이러한 프로세스는 ps나 top 명령어(계속해서 디스플레이를 업데이트한다)로 볼 수 있다.
9. 작업을 포그라운드(foreground)에서 다시 실행하려면 ^Z(Ctrl+Z)를 눌러 작업을 중지하면 된다. 작업을 백그라운드(background)로 돌리려면 bg 명령어를, 백그라운드에서 실행되고 있는 작업을 포그라운드로 올리려면 fg 명령어를 이용한다. 진행중인 작업은 jobs 명령어로 그 목록을 볼 수 있으며, 프로세스를 죽일 때에는 kill 명령어를 이용한다.
10. 우선순위(priority)가 있는 작업을 시작하기 전에 nice 명령어를 이용하면, 낮은 우선순위의 백그라운드 프로세스를 실행할 수 있다. 하지만 작업이 시작되었다면 renice 명령어만이 우선순위를 변경할 수 있다.
11. sed 편집기는 정의된 매개 변수를 사용해서 텍스트를 디스플레이한다. grep 유틸리티(grep과 유사한 기능을 하는 egrep, fgrep도 마찬가지로)는 파일 내에서 특정 문자열을 찾는다.
장치, 리눅스 파일 시스템, 파일시스템 계층 표준
12. fdisk 명령어는 파티션(partition)에 사용하는데, 파티션 후엔 mkfs를 사용해서 포맷할 수도 있다. mkfs 유틸리티는 msdos를 비롯해 수많은 파일시스템 형식을 포맷할 수 있게 해 준다.
13. 파일시스템은 저장된 모든 엔티티에 대한 inode(아이노드: 고유 엔트리)를 가진다. 이 inode(ls -i 명령어로 번호를 볼 수 있다)는 생성/접근/수정(이는 touch 명령어로 변경할 수 있다)에 대한 허가, 소유자, 멤버, 그리고 관련 날짜 등의 엔티티에 관한 정보를 담고 있다.
14. du 명령어는 디스크가 얼마나 사용되었는지를 보여주는 명령어이고, df 명령어는 빈 공간이 얼마나 남았는지를 보여주는 명령어이다. 디스크와 관련된 문제를 가장 잘 해결 할 수 있는 명령어는 fsck로, inode를 포함한 파일시스템을 검사한다.
15. 루트 파일시스템은 항상 장착돼 있어야 하지만, 원격 파일시스템은 mount 명령어로 장착하거나, unmount 명령어로 철거될 수 있다. 부팅시 자동으로 장착시키려면 엔트리를 /etc/fstab에 덧붙이면 된다.
16. quatas는 사용자나 그룹이 이용할 수 있는 디스크의 여유공간을 제한한다. quatas는 quata 명령어로 초기 설정되며, quotaon과 quotaoff로 조절할 수 있다. quotaon과 quotaoff는 edquota로 변경/수정되며, 리포트는 repquota로 생성된다.
17. 파일 퍼미션은 심볼이나 숫자 모드로 표현한다. 처음 파일을 생성했을 때, 디폴트 퍼미션은 666에서 umask 값을 뺀 수치다. 디렉토리에 대한 디폴트 퍼미션은 777에서 umask 값을 빼면 된다. 수치에 대한 퍼미션을 계산하면 읽기는 4, 쓰기는 2, 그리고 실행은 1의 값에 해당한다.
18. 파일 및 디렉토리 퍼미션은 chmod 명령어로 바꿀 수 있다(chmod는 숫자 모드나 심볼을 이용한다). 모드 1000은 "스티키 비트"를 설정하고, 모드 2000은 SGID 퍼미션을, 4000은 SUID 퍼미션을 설정한다.
19. chown 명령어는 그룹의 소유자를 변경하며, chgrp 명령어는 파일의 소속 그룹을 변경한다.
20. 링크는 ln 명령어로 생성한다. "하드" 링크는 파일에 대한 앨리어스(alias)로, 모든 앨리어스는 공통 inode를 공유한다. 심볼릭(소프트) 링크는 ln-s로 생성하는데, 자신의 inode가 있는 실제 파일(아주 크기가 작음)이다. 심볼릭 링크는 원 파일에 대한 포인터를 가지고 있으며, (하드 링크와 달리) 파일시스템에 관계없이 작동한다.
21. 리눅스를 설치하는 과정에서 디폴트값에 의해 수많은 디렉토리가 생성된다. 이 때 생성되는 디렉토리에는 다음과 같은 것이 있다:
- /bin - 모든 사용자가 접근할 수 있는 2진(실행가능)파일이 포함된 디렉토리
- /dev - 디바이스 정의가 포함된 디렉토리
- /etc - 컴퓨터에 따라 달라지는 파일(설정 파일)을 포함한 디렉토리
- /home - 사용자의 홈 디렉토리가 포함된 디렉토리
- /mnt - mount 포인트가 포함된 디렉토리
- /root - 루트 사용자에 대한 홈 디렉토리
- /tmp - 재부팅시 필요 없는 임시 파일을 포함한 디렉토리
- /usr - 자주 바뀌지 않는 문서나 다른 엔트리를 포함한 디렉토리. 하위디렉토리에는 실행 가능한 엔트리가 들어 있다.
- /var - 로그 파일이나 스풀처럼 변경된 자료가 보존되는 디렉토리
22. find 명령어는 기준에 달하는 파일/디렉토리에 대한 시스템을 검색하는데 사용한다. 시스템을 발견하면, xargs 명령어가(grep과 마찬가지로) 다른 값에 대한 엔티티 내에서 더 자세하게 검색한다.
23. which 명령어는 주어진 이름으로, 경로 지정을 통해 움직이는 첫 번째 실행가능 파일을 찾는다. locate 명령어는 locatedb 데이터베이스에서 엔트리를 찾으며, 사용자의 시스템에 있는 파일을 찾게 해 준다. 이 데이터베이스는 updatedb 명령어로 업데이트하면 된다(updatedb는 /etc/updatedb.conf 파일을 통해 자동으로 설정된다).
부트, 초기설정, 셧다운, 실행 레벨
24. 리눅스 로더(lilo)는 시스템을 부팅할 때 사용하며, 어떤 운영체제로 부팅할 것인가 선택할 수 있다. /etc/lilo.conf 파일로 lilo를 설정하며, /etc/conf.modules 나 /etc/modules.conf 과 같은 부가적인 모듈을 로드할 수 있다.
25. "시스템" 로그 파일은 /var/log/messages이며, 이 파일에 시스템 로그 데몬(syslogd)으로 대부분의 이벤트가 남겨진다. 특히 lilo와 관련된 메시지는 dmesg 명령어로 볼 수 있다.
26. 초기 데몬은 특정 실행레벨의 데몬을 알맞게 운영한다. 이 시스템은 부팅시 /etc/inittab 파일의 디폴트로 지정된 실행레벨로 맞추려고 한다.
27. 실행레벨은 init과 shutdown(halt라고도 한다)으로 변경한다. 유효한 표준 실행레벨은 다음과 같다:
- 0 - 시스템을 중단한다.
- 1 - 시스템을 단일 사용자 모드로 전환한다.
- 2 - 네트워킹이 지원되지 않는 다중 사용자 모드
- 3 - 네트워킹이 지원되는 다중 사용자 모드
- 5 - X 윈도우 환경
- 6 - 시스템을 재부팅한다.
문서화
28. 매뉴얼 파일은 대부분 표준 유틸리티용이며, man 명령어로 읽는다. more나 less, 혹은 PAGER 변수로 정의된 비슷한 유틸리티를 이용해서, 한번에 스크린에 볼 수 있는 페이지를 조절한다.
29. /usr/man 하위에는 많은 서브디렉토리가 있는데, 이러한 /usr/man에는 매뉴얼 페이지가 있다. 가장 중요한 것들은 다음과 같다:
- /man1 - 셸 유틸리티와 사용자 명령어를 정의해 놓았다.
- /man2 - 시스템 호출에 대한 페이지가 있다.
- /man3 - libc 호출
- /man4 - 디바이스 설명
- /man5 - /etc 하위에 있는 파일을 비롯한 설정 파일 설명
- /man6 - 게임에 대한 매뉴얼 페이지
- /man7 - 리눅스 시스템 파일과 관습
- /man8 - 관리 유틸리티 정의
30. 첫 번째 디렉토리가 아닌 다른 디렉토리에서 매뉴얼 페이지를 보려면, man 명령어 뒤에 서브디렉토리의 숫자를 입력해 주면 된다. 예를 들면 man 2 nice 처럼 하면 된다.
31. 다른 소프트웨어는 /user/doc 디렉토리에 문서를 작성해야 한다. 유틸리티의 이름으로 하위 디렉토리를 만들어, 하이픈과 버전 넘버를 표시한다.
32. whatis 명령어로 엔트리에서 사용 가능한 매뉴얼 페이지를 볼 수 있으며, whereis 명령어는 매뉴얼 페이지를 비롯하여 파일의 위치와 모든 관련 파일을 볼 수 있다.
33. 표준 유틸리티에서는 실행가능한 파일 이름 뒤에 "--help"를 입력해서 구문에 대한 정보만을 볼 수 있다. info 명령어로 /usr/info 하위에 있는 help 파일을 볼 수 있다.
34. 인터넷 사이트 Linux Documentation Project나 다른 개인적인 벤더 사이트에서 관련 문서를 많이 찾을 수 있다. 뉴스 그룹이나 메일링 리스트를 구독함으로써 문제를 해결하는 데에 도움을 받을 수도 있다.
35. 시스템과 문서에 대한 모든 변경 사항과 모든 사용자가 이용 가능한 지원 형식을 기록해야 한다.
관리상의 업무
36. 사용자가 시스템에 접근하려면 사용자명과 패스워드가 필요하다. 사용자명은 /etc/passwd/ 파일에 첫 번째 필드로 저장되어 있다. 이 파일의 다른 필드는 다음과 같다:
- second - /etc/shadow로 옮겨 놓지 않았다면, 이곳에는 사용자의 패스워드가 있다.
- third - 사용자의 고유한 ID이다. 루트 유저(root user)는 항상 0번이고, 시스템 계정은 전형적으로 번호가 작다. 표준 사용자는 대개 500에서 시작한다.
- fourth - 그룹 ID이다. 루트 그룹(root gruop)은 0번이고, 시스템 그룹(system group)은 번호가 작다.
- fifth - finger 명령어나 다른 유사한 유틸리티에서 반환되는 사용자 정보가 있다.
- sixth - 사용자의 홈 디렉토리
- seventh - 사용자의 셸. 이 디렉토리에 아무 것도 없으면, 디폴트 셸이 적용된다.
37. 패스워드는 보안을 더 철저히 하기 위해 /etc/shadow 파일로 옮기는 것이 낫다(이 때, pwconv 유틸리티를 사용하며, 반대로 하려면 pwunconv를 사용한다). 실행되면 /etc/passwd 파일의 두 번째 필드에 "x"가 나타난다. passwd로 패스워드를 변경한다.
38. 수동으로 설정 파일을 편집하거나 useradd 명령어로 사용자들 추가할 수 있다(userdel로 사용자를 삭제한다). 사용자를 추가하면, 홈 디렉토리를 생성해서 여기에 /user/skel에 있는 임시 파일을 복사하게 된다.
39. 그룹 정의는 /etc/group 파일에 있다. 패스워드는 그룹 정의와 함께 /etc/group에 있거나, 보안을 위해 /etc/gshadow에 옮길 수 있다(이 때 grpconv 유틸리티를 사용한다. 반대로 하려면 grpunconv를 사용한다). groupadd 유틸리티는 수동으로 설정 파일을 편집하지 않고도 그룹을 만들 수 있다. groupdel은 그룹을 지우는 데 사용한다. 그룹을 수정하려면 groupmod를, 사용자를 다른 그룹으로 옮기려면 newgrp 명령어를 사용한다.
40. /etc/profile 파일에는 모든 사용자에 적용하려는 변수가 있다. 사용자 로그인 파일은 홈 디렉토리 하위의 개인적인 .profiles 파일로 가기 전에 작동되어 환경을 설정한다. 개별 사용자가 시스템에 마지막으로 로그인한 시간을 보려면 lastlog 명령어를 사용하면 되는데, 이 명령어는 lastlog 파일에서 데이터를 뽑아낸다. last 명령어로 가장 최근에 누가 로그인 했는지 알 수 있고, who 명령어로는 마지막 접속자가 지금도 로그인 상태인지 알 수 있다.
41. 시스템 로그 데몬(syslogd)은 로그 파일에 대부분의 이벤트를 로그하는데, 이 때 /var/log/messages라는 메인 파일을 생성한다. logrotate 명령어는 자동으로 이러한 로그를 저장하도록 설정하며, /etc/syslog.conf 파일에 설정된 유지보수를 수행한다. 로그 파일에 수동으로 엔트리를 작성하려면, logger 명령어를 사용한다.
42. 작업을 한 번만 부재 모드(unattended mode)로 구동하도록 예약하려면 at 명령어를 사용한다. 설정한 작업을 보려면 atq 명령어를, 이전에 실행한 작업을 지우려면 atrm 명령어를 사용한다.
43. at.allow 파일을 생성하여 유효한 사용자만 입력하여 at 서비스(atd)를 사용할 수 있는 사람을 제한할 수 있다. at.deny 파일을 생성하여 서비스를 사용할 수 없는 사용자만 입력하면 반대로 된다. 즉 파일에 이름이 있는 사용자를 제외하고 모두 그 서비스를 사용할 수 있다.
44. 부재 작업(unattended job)을 예약해서 일정한 간격으로 프로그램을 구동하려면, crontab(cron table) 엔트리를 만든다. crontab 파일은 cron service로 읽는데, cron service는 어떤 작업이 구동되어야 하는지 항상 감시한다.
45. cron.allow 파일을 만들어 유효한 사용자를 입력하여 크론(cron)을 사용할 수 있는 사람을 제한할 수 있다. cron.deny 파일을 만들어 서비스를 사용할 수 없는 사용자명만 입력하면 dlh아 반대로 된다. 즉 파일에 이름이 있는 사용자를 제외하고 모두 그 서비스를 사용할 수 있다.
46. 크론 테이블의 각각의 엔트리에는 여섯 필드가 있다:
- 몇 분에 작업을 실행하는가 (0-59)
- 몇 시에 작업을 실행하는가(0-23)
- 일(1-31)
- 달 (1-12)
- 주(0-6, 0은 일요일)
- 실행할 작업의 경로
47. 데이터가 손상될 경우를 대비하여 데이터는 백업(backup)되어야 한다. 백업은 tar 명령어(여러 개의 파일을 하나의 아카이브에 결합시킴)나, 파일을 매체 사이에서 복사하는 cpio 명령어를 사용한다.
48. compress(반대는 uncompress), gzip(반대는 gunzip), pack(반대는 unpack) 명령어로 파일을 압축할 수도 있다.
49. 전부가 아니라 일부분만 백업할 수도 있다. 만약 일부분만 백업한다면, 그것은 점증적 백업(incremental backup)(마지막으로 전부를 백업하거나 점증적으로 백업을 한 이후의 모든 파일)이거나 차동 백업(differential backup)(마지막으로 전부를 백업한 이후의 모든 것)이 될 것이다. 차동 백업과 점증적 백업을 같이 사용할 수는 없으므로, 둘 중 한 가지만 선택적으로 사용해야 한다.
50. 레귤러(regular) 기반으로 저장되는지 확인하는 것도 백업만큼 중요하다. 백업의 특성과 저장 절차를 테스트해야만, 위급한 상황이 발생했을 경우에 대처할 수 있다.
LPIC 관련서적