리눅스 명령어·권한·서비스 정리
파일 권한, 프로세스, 패키지와 네트워크 명령을 실제 운영 흐름으로 정리합니다.
파일과 권한
읽기·쓰기·실행 권한은 소유자·그룹·기타 사용자 순서로 관리합니다. 디렉터리의 실행 권한은 내부 항목 접근과 관련되므로 파일 권한과 같은 의미로 해석하면 안 됩니다.
- chmod는 권한, chown은 소유자·그룹을 바꾼다.
- umask는 새 객체에서 제거할 기본 권한 비트다.
- inode는 메타데이터와 블록 위치를 저장하지만 파일명은 디렉터리 엔트리에 있다.
프로세스와 서비스
ps는 시점의 프로세스 정보를, top은 자원 사용량을 지속적으로 보여줍니다. systemd 환경에서는 systemctl로 서비스 상태와 시작 설정을 관리합니다.
- kill은 프로세스에 시그널을 보낸다.
- nice 값이 낮을수록 일반적으로 우선순위가 높다.
- cron은 정해진 시각이나 주기에 작업을 실행한다.
네트워크와 로그
ss는 소켓과 포트 상태, ip는 주소·링크·경로, journalctl은 systemd 저널을 확인할 때 사용합니다. 장애 분석에서는 설정 변경 전에 상태와 로그를 보존하는 습관이 중요합니다.
- SSH는 암호화된 원격 접속을 제공한다.
- DNS 문제와 IP 연결 문제를 분리해 진단한다.
- 방화벽 규칙은 방향·프로토콜·포트를 함께 확인한다.
권한 문제를 사용자·객체·동작으로 분해하기
리눅스 권한은 명령을 실행한 사용자가 누구인지, 대상이 파일인지 디렉터리인지, 읽기·쓰기·탐색 중 어떤 동작인지로 나눠 판단합니다. 숫자 권한은 r=4, w=2, x=1을 더하고 특수 권한은 실행 비트 위치의 s·t 표시까지 확인합니다.
- 디렉터리 r은 이름 목록 조회, x는 경로를 따라 내부 항목에 접근하는 권한이다.
- setuid·setgid는 실행 시 유효 사용자·그룹 권한과 관련되고 sticky bit는 공유 디렉터리 삭제를 제한한다.
- 서비스 장애는 status→journal 로그→포트→방화벽 순으로 범위를 좁히면 효율적이다.
셸 입출력·파일 탐색·패키지 관리
셸 문제는 표준입력 0, 표준출력 1, 표준오류 2의 흐름과 파이프·리다이렉션 대상을 구분해야 합니다. 파일 검색은 이름·속성·내용 검색 명령을 나누고, 패키지 도구는 저장소 메타데이터와 실제 설치 상태를 함께 관리합니다.
- >는 덮어쓰기, >>는 이어쓰기이며 2>는 표준오류를 별도로 보낸다.
- 파이프는 앞 명령의 표준출력을 뒤 명령의 표준입력으로 연결한다.
- find는 파일 속성과 경로, grep은 파일 안의 문자열 검색에 주로 사용한다.
- 하드 링크는 inode를 공유하고 심볼릭 링크는 대상 경로를 가리킨다.
부팅·파일시스템·프로세스·네트워크 관리
리눅스 시스템 문제는 부팅과 서비스, 저장장치와 마운트, 프로세스와 작업 제어, 네트워크 설정의 네 흐름으로 정리합니다. 명령 이름만 보지 말고 조회·일시 변경·영구 설정 중 어느 효과를 내는지 구분합니다.
- 파티션이나 논리 볼륨에 파일시스템을 만든 뒤 마운트 지점에 연결하며 /etc/fstab은 부팅 시 마운트 설정에 사용된다.
- systemd의 unit은 service·socket·target 등 종류가 있고 enable은 부팅 연동, start는 현재 실행을 뜻한다.
- ps는 특정 시점, top은 지속적인 자원 상태를 보여주며 nice·renice는 일반 스케줄링 우선순위 힌트를 조정한다.
- ip addr·ip link·ip route는 주소·링크·경로를, ss는 소켓을, DNS 도구는 이름 해석을 확인한다.
- 로그는 시간·호스트·프로세스·심각도와 최근 변경을 연결하고 원본을 보존한 뒤 필터링한다.
직접 풀어보는 예제와 단계별 해설
권한 숫자와 명령어 이름만 암기하면 비트 제거와 출력 연결 순서에서 틀리기 쉽습니다. 파일 생성 권한과 표준출력·표준오류를 각각 추적해 봅니다.
umask는 왜 단순 뺄셈이 아닐까?
상위 디렉터리에 기본 ACL이 없고 생성 뒤 chmod도 하지 않습니다. 프로그램이 일반 파일에는 0666, 디렉터리에는 0777 권한을 요청할 때 umask 0027과 0013의 결과를 비교하세요. 숫자는 모두 8진수입니다.
Python 3
for mask in (0o027, 0o013):
file_mode = 0o666 & (~mask & 0o777)
directory_mode = 0o777 & (~mask & 0o777)
print(f'{mask:03o} {file_mode:03o} {directory_mode:03o}')| umask | 일반 파일 | 디렉터리 |
|---|---|---|
| 027 | 640 / rw-r----- | 750 / rwxr-x--- |
| 013 | 664 / rw-rw-r-- | 764 / rwxrw-r-- |
풀이 순서
- 새 권한은 요청 권한 AND (NOT umask)로 계산합니다. umask 027은 소유자는 그대로 두고, 그룹의 쓰기 비트와 기타 사용자의 모든 비트를 제거합니다.
- umask 013에서 일반 파일의 그룹 권한은 6(110)입니다. 실행 비트 1(001)을 제거해도 6 그대로입니다. 기타 권한은 6(110)에서 3(011)의 비트를 제거하므로 4(100)입니다. 단순히 666−013을 하면 잘못된 653이 나옵니다.
- umask는 없던 실행 권한을 추가하지 않습니다. 프로그램이 처음부터 0600만 요청했다면 더 넓은 결과가 나오지 않습니다. 기존 파일의 권한도 umask 변경만으로 바뀌지 않습니다.
- 764 디렉터리에서 그룹은 이름 목록을 읽을 수 있지만 x가 없어 그 경로를 통과할 수 없습니다. 이름을 안다고 내부 파일을 열 수 있는 것은 아닙니다. 실제 접근에는 상위 경로 권한과 ACL 등도 영향을 줍니다.
확인 결과
027 640 750
013 664 764틀리기 쉬운 지점: 디렉터리의 r은 이름 목록, x는 경로 탐색 권한입니다. 일반 파일의 내용 읽기·프로그램 실행과 같은 뜻으로 계산하지 마세요.
2>&1의 위치만 바꿨는데 오류 메시지가 파일에 안 남는 이유
Bash에서 emit 함수는 표준출력에 OUT, 표준오류에 ERR을 한 줄씩 씁니다. 아래 코드를 비어 있는 연습 디렉터리에서 실행하면 화면과 두 파일에 각각 무엇이 남을까요? all.log와 out.log가 이미 있으면 덮어쓰므로 기존 자료가 있는 곳에서는 실행하지 마세요.
Bash
emit() {
printf 'OUT\n'
printf 'ERR\n' >&2
}
emit > all.log 2>&1
emit 2>&1 > out.log넓은 표는 좌우로 밀어 나머지 열을 볼 수 있습니다.
| 명령 | 화면 | 파일 내용 |
|---|---|---|
| emit > all.log 2>&1 | 없음 | all.log: OUT 다음 줄 ERR |
| emit 2>&1 > out.log | ERR | out.log: OUT |
| 시점 | 표준출력 1 | 표준오류 2 |
|---|---|---|
| 처음 | 화면 | 화면 |
| 2>&1 적용 뒤 | 화면 | 현재 1의 목적지인 화면 |
| > out.log 적용 뒤 | out.log | 화면 유지 |
풀이 순서
- 첫 명령은 1번을 all.log에 연결한 다음 2번도 그 목적지에 연결합니다. OUT과 ERR이 모두 같은 파일에 순서대로 기록됩니다.
- 두 번째 명령은 2번을 당시 1번의 목적지인 화면에 연결합니다. 이후 1번만 out.log로 바뀌므로 ERR은 화면에 남습니다. 2>&1은 앞으로의 1번 변경을 따라가는 지속적인 연결이 아닙니다.
- 두 번째 경우 ERR은 터미널에 보이지만 셸이 물려준 표준출력 경로로 갑니다. 상위 프로그램에서 stdout과 stderr를 따로 수집할 때도 이 차이가 나타납니다. 위 확인 결과는 전체 스크립트가 화면에 출력한 한 줄입니다.
확인 결과
ERR틀리기 쉬운 지점: 2>&1과 > 파일은 순서를 바꿔도 같은 옵션 묶음이 아닙니다. 셸이 왼쪽부터 파일 디스크립터 연결을 바꾼다는 점을 먼저 적용하세요.
검증 방법과 참고 문서
권한은 Python 비트 계산과 각 r/w/x 비트의 독립 대조로 확인했습니다. 리다이렉션 코드는 격리된 임시 디렉터리에서 Bash로 실행해 stdout·stderr·두 파일 내용을 비교했습니다. Linux 서비스나 실제 사용자 파일의 권한을 바꾸는 실험은 하지 않았습니다.
예제·데이터·풀이표: 정처LAB 자체 설계 · AI 보조 작성 및 로컬 검증 · 예제 수정일 2026-09-27
혼동하기 쉬운 지점
- 디렉터리의 읽기와 실행 권한 의미 혼동
- SIGKILL을 정상 종료 요청으로 판단
- 패키지 설치 도구와 패키지 파일 형식을 혼동
개념을 확인했다면 관련 문제에 적용해보세요.
첫 관련 문제 풀기