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