| 작업 | 명령 |
|---|
| 사용자 추가 | useradd -m -s /bin/bash 이름 |
| 비밀번호 설정 | passwd 이름 |
| 사용자 수정 | usermod -G 그룹 이름 |
| 사용자 삭제 | userdel -r 이름(홈까지) |
| 그룹 추가 | groupadd 그룹 |
| 권한 변경 | chmod 755 파일 |
| 소유자 변경 | chown user:group 파일 |
| 특수권한 | chmod u+s(SetUID) |
실기 포인트: useradd의 -m(홈 생성), -s(셸 지정), -G(보조 그룹), -u(UID)를 정확히. userdel -r의 -r은 홈 디렉터리·메일까지 삭제.
find, grep, awk, sed는 실기 작업형의 핵심 도구다.
| 명령 | 용도 | 예시 |
|---|
find | 파일 검색 | find / -name "*.log" -type f |
grep | 패턴 검색 | grep -rn "error" /var/log |
awk | 필드 처리 | awk '{print $1}' file |
sed | 스트림 편집 | sed 's/old/new/g' file |
sort/uniq | 정렬·중복 | `sort file |
wc | 개수 세기 | wc -l file |
find 옵션 집중: -name(이름), -type f/d(파일/디렉터리), -mtime +7(7일 초과 수정), -size +100M(크기), -perm(권한), -exec ... {} \;(실행). 실기에서 -exec rm {} \; 형태를 쓴다.
- 디스크 추가 → 파티션 → 포맷 → 마운트 → fstab 등록의 흐름을 통째로 묻는다.
fdisk /dev/sdb # 파티션 생성
mkfs.ext4 /dev/sdb1 # 파일시스템 생성
mkdir /data # 마운트 포인트
mount /dev/sdb1 /data # 임시 마운트
# /etc/fstab에 영구 등록:
# /dev/sdb1 /data ext4 defaults 0 0
⚠️ 실기 함정: 임시 마운트(mount)는 재부팅 시 사라진다. 영구 마운트는 반드시 /etc/fstab 등록. fstab 6필드(장치·마운트점·타입·옵션·dump·fsck순서)를 정확히 써야 감점이 없다.
| 작업 | 명령/형식 |
|---|
| 주기 작업 등록 | crontab -e |
| cron 형식 | 분 시 일 월 요일 명령 |
| 일회성 예약 | at 시간 |
| 프로세스 확인 | `ps -ef |
| 강제 종료 | kill -9 PID |
| 이름으로 종료 | killall 프로세스명 |
- cron 필드 예:
0 3 * * 1 /backup.sh = 매주 월요일 03:00 실행.
cron 필드 순서: 분(0-59) 시(0-23) 일(1-31) 월(1-12) 요일(0-7, 0·7=일). *는 매번, */10은 10단위, 1-5는 범위, 1,15는 목록.
- 서비스 설정 파일의 핵심 항목을 직접 쓰게 한다.
| 서비스 | 설정 파일 | 핵심 항목 |
|---|
| 네트워크 | /etc/sysconfig/network-scripts/ifcfg-* | IPADDR, NETMASK, GATEWAY |
| DNS 클라이언트 | /etc/resolv.conf | nameserver |
| 호스트명 | /etc/hostname | 호스트명 |
| SSH | /etc/ssh/sshd_config | Port, PermitRootLogin |
| 방화벽 | firewall-cmd | --add-port, --permanent |
방화벽 실기: 포트 영구 개방은 firewall-cmd --permanent --add-port=80/tcp 후 firewall-cmd --reload. --permanent 없이는 재부팅 시 사라진다.
- systemd 서비스 제어 명령은 실기 필수다.
| 작업 | 명령 |
|---|
| 시작 | systemctl start 서비스 |
| 중지 | systemctl stop 서비스 |
| 재시작 | systemctl restart 서비스 |
| 설정 재로드 | systemctl reload 서비스 |
| 부팅 시 활성화 | systemctl enable 서비스 |
| 상태 확인 | systemctl status 서비스 |
⚠️ enable vs start 구분: start는 지금 시작, enable은 부팅 시 자동 시작. 둘은 별개라 둘 다 필요하면 systemctl enable --now 서비스.
- 장애 진단 시 로그를 읽고 원인을 찾는 작업도 실기에 나온다.
| 로그 | 경로 | 용도 |
|---|
| 시스템 일반 | /var/log/messages | 커널·서비스 일반 |
| 인증·보안 | /var/log/secure | 로그인·sudo 기록 |
| 부팅 | /var/log/boot.log | 부팅 메시지 |
| 메일 | /var/log/maillog | 메일 송수신 |
- 실시간 모니터링은
tail -f /var/log/messages, 특정 패턴 추출은 grep "Failed" /var/log/secure.
journalctl 실기: systemd 환경에선 journalctl -u 서비스명(특정 서비스 로그), journalctl -b(이번 부팅), journalctl -f(실시간)도 쓴다.
- 간단한 스크립트 작성·해석이 작업형으로 나올 수 있다.
| 요소 | 문법 |
|---|
| 셔뱅 | #!/bin/bash |
| 변수 | VAR=값 (공백 금지) |
| 조건문 | if [ 조건 ]; then ... fi |
| 반복문 | for i in 목록; do ... done |
| 인자 | $1 $2 ... $#(개수) $@(전체) |
테스트 연산자: -f(파일 존재), -d(디렉터리), -z(빈 문자열), -eq/-ne/-lt/-gt(숫자 비교). [ ] 안 양옆 공백은 필수다.
변수 대입 함정: VAR = 값처럼 = 양옆에 공백을 넣으면 에러. 반드시 VAR=값으로 붙여 쓴다. 참조는 $VAR 또는 ${VAR}.
- 복합 권한 문제는 chmod 숫자 계산을 직접 해야 한다.
| 요구 | 숫자 | 명령 |
|---|
| 소유자 전체, 그룹·기타 읽기·실행 | 755 | chmod 755 |
| 소유자 읽기·쓰기, 나머지 읽기 | 644 | chmod 644 |
| SetUID + 755 | 4755 | chmod 4755 |
| Sticky + 777 | 1777 | chmod 1777 |
계산 한 줄: rwx=7, rw-=6, r-x=5, r--=4. 특수권한은 맨 앞 4자리(SetUID 4·SetGID 2·Sticky 1)에 더한다. /tmp의 권한은 1777(Sticky+777).
- 실기에선 설정 파일의 특정 라인을 직접 채우게 한다.
- 단편 명령을 손에 익힌다.
- NFS 공유(
/etc/exports)
/srv/share 192.168.1.0/24(rw,sync,no_subtree_check)
- Samba 공유(
/etc/samba/smb.conf)
[data]
path = /srv/data
writable = yes
valid users = @staff
30 2 * * * /usr/local/bin/backup.sh
exports 공백 함정: 클라이언트(옵션) 사이에 공백을 넣으면 안 된다. 192.168.1.0/24 (rw)처럼 띄우면 모든 호스트에 rw가 열린다. 실기 감점 1순위.
- 작업형은 단일 명령보다 파이프·리다이렉션 조합을 자주 요구한다.
| 기호 | 의미 |
|---|
| ` | ` |
> | 출력 덮어쓰기 |
>> | 출력 이어붙이기 |
2> | 표준 에러 리다이렉트 |
&& | 앞 성공 시 뒤 실행 |
; | 순차 실행(성패 무관) |
- 예:
ps -ef | grep nginx | grep -v grep | awk '{print $2}' — nginx의 PID만 추출한다.
조합 예: du -sh * | sort -rh | head(용량 큰 순), cat access.log | grep 404 | wc -l(404 개수). 파이프로 필터를 이어 붙이는 사고가 실기의 핵심.
- 장애 복구는 고난도 작업형이다. 핵심 상황을 정리한다.
| 상황 | 대응 |
|---|
| root 비밀번호 분실 | GRUB에서 rescue/single 모드 진입 후 passwd |
| fstab 오류로 부팅 실패 | 응급 모드에서 fstab 수정 |
| 서비스 시작 실패 | systemctl status·journalctl -xe로 원인 추적 |
| 디스크 꽉 참 | du로 큰 파일 찾아 정리, 로그 로테이트 |
단일 사용자 모드: GRUB 메뉴에서 커널 라인에 single 또는 rd.break를 추가해 진입하면 root 권한으로 복구 작업이 가능하다. 비밀번호 복구의 표준 절차.
철자와 옵션을 손으로 반복 연습해야 한다. 아래 모의로 점검한다.
- 단답형 / 작업형 : 명령·옵션·경로를 짧게 써내는 유형 / 시나리오를 명령 절차로 풀어내는 유형.
useradd -m -s : 홈 디렉터리를 만들고(-m) 로그인 셸을 지정해(-s) 계정을 만드는 옵션 조합.
userdel -r : 계정과 함께 홈 디렉터리·메일함까지 지우는 옵션.
-exec {} \; : find가 찾은 파일마다 명령을 실행하는 구문. {}가 파일 이름 자리다.
- 영구 마운트 :
/etc/fstab에 등록해 재부팅 후에도 유지되는 마운트. mount만 하면 임시다.
- fstab 6필드 : 장치 · 마운트점 · 타입 · 옵션 · dump · fsck 순서.
enable vs start : 부팅 시 자동 시작 등록 / 지금 즉시 기동. 둘 다 필요하면 enable --now.
--permanent + --reload : firewalld 설정을 영구 저장하고 현재 세션에 반영하는 두 단계.
- journalctl : systemd가 모은 로그를 보는 명령.
-u(서비스), -b(이번 부팅), -f(실시간).
- 특수 권한 자리 : chmod 네 자리 중 맨 앞. SetUID 4, SetGID 2, Sticky 1을 더해 쓴다(
/tmp는 1777).
- exports 공백 함정 : 클라이언트와 괄호 사이를 띄우면 모든 호스트에 권한이 열리는 NFS 문법 함정.
- 파이프(
|) : 앞 명령의 출력을 뒤 명령의 입력으로 넘기는 연결. 필터를 이어 붙이는 사고가 실기의 핵심이다.
- 단일 사용자 모드 : GRUB에서
single·rd.break로 진입하는 복구 모드. root 비밀번호 재설정의 표준 절차다.
📝 연습 문제
선택지를 클릭하면 정답·해설이 펼쳐집니다.
사용자 'kim'을 홈 디렉터리와 함께 생성하고 로그인 셸을 bash로 지정하는 명령으로 옳은 것은?
/var/log 아래에서 "error" 문자열을 줄 번호와 함께 재귀적으로 검색하는 명령은?
추가한 디스크 파티션 /dev/sdb1을 재부팅 후에도 /data에 자동 마운트되도록 등록해야 하는 파일은?
매주 월요일 오전 3시에 /backup.sh를 실행하는 crontab 항목으로 옳은 것은?
firewalld에서 80/tcp 포트를 재부팅 후에도 유지되도록 영구 개방하는 절차로 옳은 것은?
httpd 서비스를 지금 시작하고 부팅 시에도 자동 실행되도록 한 번에 설정하는 명령은?
find로 /tmp 아래에서 7일을 초과해 수정되지 않은 파일을 찾아 삭제하는 명령은?
텍스트 파일에서 모든 "old"를 "new"로 치환해 출력하는 sed 명령은?
실행 중인 프로세스 'nginx'를 이름으로 한꺼번에 종료하는 명령은?
파일 report.sh에 SetUID 권한을 추가하는 명령으로 옳은 것은?