LFCS 문제 해석과 막혔을 때 찾는 순서
문제 요구사항을 최종 상태로 번역하고 man page와 로그로 해결 경로를 찾는 방법
막혔을 때 무작정 명령을 바꾸지 않는다. 먼저 문제를 모르나, 명령을 모르나, 설정했는데 실패하나를 구분하면 탐색 범위가 줄어든다.
작성·검증 상태: AI가 구조화와 초안 작성을 보조했다. 시험 중 허용 자료의 경계는 2026-08-13 공식 지침을 기준으로 하며, 자세한 영문 표현과 탐색법은 영문 요구사항과 로컬 문서에서 이어진다.
1. 문제를 여섯 칸으로 분해한다
문장에서 다음 항목을 먼저 뽑는다.
호스트: 어느 시스템에서 수행하는가?
대상: 무엇을 바꾸는가?
동작: 생성·설정·복구·허용 중 무엇인가?
조건: 사용자·권한·주소·크기·시간은 무엇인가?
지속성: 지금만 필요한가, 재부팅 후에도 남아야 하는가?
검증: 최종적으로 어떤 출력이나 동작이 보여야 하는가?
예시:
health-check.service를 만들고 lfcsuser로 실행한다.
실패하면 다시 시작하며 부팅 시 자동으로 시작해야 한다.
| 요구사항 | 필요한 상태 |
|---|---|
| 대상 host | 현재 terminal과 hostname 재확인 |
| 서비스 생성 | .service unit |
| 지정 사용자 | User=lfcsuser |
| 실행 프로그램 | ExecStart= |
| 실패 시 재시작 | Restart=on-failure |
| 현재 실행 | start 또는 enable --now |
| 부팅 시 실행 | [Install]과 enable |
| 완료 검증 | unit 문법, active·enabled, journal, 실제 process |
문장의 단어를 명령으로 바로 바꾸기보다 요구된 최종 상태로 먼저 번역한다.
2. 현재 막힘을 분류한다
| 막힘 | 대표 증상 | 다음 행동 |
|---|---|---|
| 문제 뜻을 모름 | 무엇을 만들어야 할지 모름 | 여섯 칸으로 분해하고 관련 개념을 찾음 |
| 명령 이름을 모름 | 어떤 도구가 담당하는지 모름 | man -k, apropos |
| 옵션을 모름 | 명령은 알지만 인자가 기억나지 않음 | --help, man 내부 검색 |
| 설정 형식을 모름 | 파일 위치·지시어를 모름 | 기존 설정, section별 man page, /usr/share/doc |
| 실행이 실패함 | 명령·서비스가 오류를 반환 | 문법 → 상태 → 로그 → 권한 → 포트 → 보안 |
| 완료 여부를 모름 | 설정은 했지만 정답인지 불확실 | 상태·동작·지속성·부수 효과 검증 |
3. 명령 이름을 모를 때
키워드로 설명과 man page를 찾는다.
man -k 'logical volume'
man -k 'access control list'
apropos -s 8 firewall
apropos -s 8 filesystem
관련 명령을 찾은 뒤 범위를 좁힌다.
command --help
man command
설치 여부 때문에 man -k 결과가 부족할 수 있다. 이미 설치된 패키지와 /usr/share/doc도 함께 본다.
rpm -ql nginx | grep -E 'conf|example|README'
find /usr/share/doc -maxdepth 2 -iname '*nginx*' -print
Debian 계열에서는 dpkg -L로 패키지 파일 목록을 본다.
4. 옵션을 모를 때
man page 전체를 처음부터 읽기보다 요구 키워드로 좁힌다.
usermod --help | grep -i group
lvextend --help | grep -i size
nmcli connection modify --help
man 내부에서는 /로 검색한다.
/append
/resizefs
/permanent
다음 결과는 n, 이전 결과는 N으로 이동한다. 예제만 복사하지 말고 현재 대상, 단위와 기본값을 확인한다.
5. 설정 파일 형식을 모를 때
순서는 다음과 같다.
현재 effective 설정
→ 비슷한 기존 설정
→ 설정 파일 man page
→ 배포판 설치 문서
→ 문법 검사
systemd 예:
systemctl cat sshd.service
man 5 systemd.service
man 5 systemd.unit
man 5 systemd.exec
man 7 systemd.directives
systemd-analyze verify /etc/systemd/system/example.service
어느 man page에 지시어가 있는지 모르겠다면 systemd.directives에서 이름을 검색한다.
웹 서버·SSH처럼 전용 문법 검사 명령이 있으면 reload 전에 사용한다.
sshd -t
nginx -t
haproxy -c -f /etc/haproxy/haproxy.cfg
6. 설정했는데 작동하지 않을 때
공통 진단 순서:
1. 설정 문법
2. 서비스와 프로세스 상태
3. 같은 시간대의 로그
4. 파일·상위 디렉터리 권한
5. listening socket과 실제 요청
6. SELinux·방화벽
7. 영구 설정과 재적용
대표 명령:
systemctl status example.service --no-pager -l
journalctl -u example.service -b --no-pager
systemctl cat example.service
namei -l /path/to/file
ss -lntup
getenforce
ausearch -m AVC -ts recent -i
firewall-cmd --list-all
Permission denied를 만나도 곧바로 chmod 777을 사용하지 않는다. 어느 사용자로 실행되는지, 경로의 각 디렉터리에 진입 권한이 있는지, SELinux가 거부했는지 나눈다.
7. 영역별 최소 진단 흐름
네트워크
link → address → route → DNS → socket → application
ip -br link
ip -br address
ip route
ip route get 192.0.2.10
getent hosts example.com
ss -lntup
curl -v http://127.0.0.1:8080
스토리지
device → partition/LVM → filesystem → mount → capacity/inode → application path
lsblk -f
pvs; vgs; lvs
blkid
findmnt
df -hT
df -i
사용자·권한
account → group → owner/mode → ACL → SELinux → 실제 사용자 동작
getent passwd lfcsuser
id lfcsuser
namei -l /srv/project/file
getfacl /srv/project/file
ls -lZ /srv/project/file
runuser -u lfcsuser -- test -r /srv/project/file
systemd
systemd-analyze verify /etc/systemd/system/example.service
systemctl daemon-reload
systemctl enable --now example.service
systemctl is-enabled example.service
systemctl is-active example.service
journalctl -u example.service -b --no-pager
daemon-reload는 unit을 다시 읽지만 서비스를 자동 재시작하지 않는다. enable과 start도 서로 다른 상태다.
8. 완료 검증 네 층
| 층 | 확인 질문 | 예시 |
|---|---|---|
| 상태 | 설정값·소유권·주소가 요구와 같은가? | stat, getent, ip, findmnt |
| 동작 | 실제 사용자·클라이언트가 사용할 수 있는가? | runuser, curl, 파일 생성 |
| 지속성 | 새 session·재적용·부팅 뒤에도 남는가? | profile 새 login, fstab, enabled 상태 |
| 부수 효과 | 기존 그룹·route·서비스를 망가뜨리지 않았는가? | 변경 전후 diff와 기준 상태 비교 |
모든 문제에 네 층이 전부 필요한 것은 아니지만, 문제의 지속적으로, 부팅 시, 실제로 접근, 기존 설정 유지 같은 표현이 어떤 검증을 요구하는지 확인한다.
9. 시간 제한을 두는 방법
연습할 때 다음 제한을 사용한다.
1분: host·대상·동작·조건·지속성·검증 분해
2분: --help, man -k, 기존 설정에서 출발점 찾기
4분: 시작 방법도 못 찾으면 표시하고 다음 문제로 이동
8~12분: 설정과 검증 완료
한 문제에서 문서 전체를 읽지 않는다. 해결하지 못한 문제는 넘어간 뒤 어느 층에서 막혔는지 기록하고 다시 푼다.
시험장용 압축판
문제 뜻 모름 → host·대상·동작·조건·지속성·검증
명령 이름 모름 → man -k, apropos
옵션 모름 → command --help, man 내부 /검색
설정 형식 모름 → 기존 설정, man 5, /usr/share/doc, 문법 검사
실행 실패 → 상태, 로그, 권한, 포트, SELinux·방화벽
완료 여부 → 상태 + 실제 동작 + 필요한 영속성 + 부수 효과
4분간 시작 못 함 → 표시하고 다음 문제