기본 문법
sysctl [옵션] [변수[=값]]...
sysctl은 리눅스 커널이 동작 중에 참조하는 설정값(커널 파라미터)을 읽고 바꾸는 명령입니다. 이 값들은 /proc/sys 디렉터리 아래에 파일 형태로 존재하며, net.ipv4.ip_forward처럼 점으로 구분된 이름이 /proc/sys/net/ipv4/ip_forward 경로와 일대일로 대응합니다.
sysctl -w로 바꾼 값은 메모리에만 적용되어 재부팅하면 사라집니다. 값을 영구히 유지하려면 /etc/sysctl.d/ 아래에 .conf 파일을 만들어 '키 = 값' 형식으로 적어 둡니다. 부팅 시 systemd-sysctl.service가 이 파일들을 읽어 적용하고, 수동으로는 sysctl --system 또는 sysctl -p 파일명으로 즉시 반영합니다.
주로 라우팅 활성화, 스왑 사용 성향(vm.swappiness) 조정, ICMP 응답 차단 같은 서버 튜닝과 보안 설정에 사용합니다. 값을 바꾸려면 root 권한이 필요하며, 컨테이너 안에서는 /proc/sys 대부분이 읽기 전용이라 조회만 가능한 경우가 많습니다.
자주 쓰는 옵션
| 옵션 | 의미 | 예 |
|---|---|---|
-a | 현재 읽을 수 있는 모든 커널 파라미터와 값을 출력(일부는 읽기 전용) | sysctl -a |
-n | 키 이름을 빼고 값만 출력 | sysctl -n vm.swappiness |
-w | 파라미터 값을 즉시 변경(root 권한 필요, 재부팅 시 사라짐) | sysctl -w net.ipv4.ip_forward=1 |
-p [파일] | 지정한 파일의 설정을 읽어 적용(파일을 생략하면 /etc/sysctl.conf) | sysctl -p /etc/sysctl.d/99-learnix.conf |
--system | /run/sysctl.d, /etc/sysctl.d, /usr/lib/sysctl.d, /etc/sysctl.conf 등 표준 경로의 설정 파일을 파일명 사전순으로 모두 적용 | sysctl --system |
-e | 존재하지 않는 키에 대한 오류 메시지를 출력하지 않고 건너뜀 | sysctl -e -p /tmp/demo/test.conf |
-N | 값 없이 파라미터 이름만 출력 | sysctl -N -a |
-q | 설정 적용 시 적용된 값을 표준 출력에 표시하지 않음 | sysctl -q -w vm.swappiness=10 |
-r 패턴 | 확장 정규식 패턴과 일치하는 파라미터만 조회·적용 대상으로 제한 | sysctl -a -r 'icmp' |
실무 예시
특정 파라미터 값 확인
$ sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1
IP 포워딩(라우팅) 설정의 현재 값을 확인합니다. 0은 비활성, 1은 활성이며, 아래 출력은 포워딩이 켜져 있는 환경의 결과입니다.
값만 출력하기
$ sysctl -n vm.swappiness
10
-n 옵션은 키 이름 없이 값만 출력하므로 스크립트에서 값을 변수로 받을 때 편리합니다. 기본값은 배포판·환경에 따라 다릅니다(아래는 10인 환경).
관련 파라미터 목록 검색
$ sysctl -a 2>/dev/null | grep icmp_echo
net.ipv4.icmp_echo_enable_probe = 0
net.ipv4.icmp_echo_ignore_all = 0
net.ipv4.icmp_echo_ignore_broadcasts = 1
-a로 전체 파라미터를 출력한 뒤 grep으로 ICMP 응답 관련 항목만 골라 이름을 확인합니다. 출력되는 항목은 커널 버전에 따라 달라집니다(icmp_echo_enable_probe는 비교적 최신 커널에서만 보입니다).
영구 설정 파일 작성 (사본 실습)
준비: mkdir -p /tmp/demo; printf 'net.ipv4.ip_forward = 1\nvm.swappiness = 10\n' > /tmp/demo/99-learnix.conf; chmod 644 /tmp/demo/99-learnix.conf
$ cat /tmp/demo/99-learnix.conf && sysctl -n net.ipv4.ip_forward vm.swappiness
net.ipv4.ip_forward = 1
vm.swappiness = 10
1
10
설정 파일에 적어 둔 내용과 현재 커널 값을 나란히 확인합니다. /tmp에 만든 파일은 표준 경로가 아니므로 sysctl --system 대상이 아니며, 파일을 만드는 것만으로는 커널 값이 바뀌지 않습니다. 아래 예시 환경은 커널 값이 이미 파일 내용과 같은 상태여서 두 값이 우연히 일치합니다. 실제 서버에 적용할 때는 /etc/sysctl.d/99-learnix.conf로 만든 뒤 sysctl -p 또는 sysctl --system을 실행하세요.
설정 파일의 키 이름만 뽑아 조회
준비: mkdir -p /tmp/demo; printf 'net.ipv4.icmp_echo_ignore_all = 1\n' > /tmp/demo/99-icmp-ignore.conf; chmod 644 /tmp/demo/99-icmp-ignore.conf
$ sysctl $(cut -d= -f1 /tmp/demo/99-icmp-ignore.conf | tr -d ' ')
net.ipv4.icmp_echo_ignore_all = 0
설정 파일에서 키 이름만 추출해 현재 값을 조회합니다. 설정 파일 적용 전후의 값을 비교해 검증할 때 쓰는 방식입니다.
주의할 점
- sysctl -w로 바꾼 값은 메모리에만 적용되어 재부팅하면 사라집니다. 영구 적용은 /etc/sysctl.d/*.conf 파일에 기록해야 합니다.
- /etc/sysctl.d에 파일만 만들어도 즉시 반영되지 않습니다. sysctl --system 또는 sysctl -p 파일명으로 적용해야 합니다.
- 파일 이름은 .conf로 끝나야 하며, 파일명 사전순으로 읽히므로 나중에 읽힌 파일의 설정이 앞 설정을 덮어씁니다. 같은 이름의 파일이 여러 경로에 있으면 /etc/sysctl.d가 /usr/lib/sysctl.d보다 우선합니다.
- 파라미터 이름에 오타가 있거나 해당 커널 모듈이 없으면 'cannot stat /proc/sys/...' 오류가 납니다. sysctl -a로 이름을 먼저 확인하세요.
- 값 변경에는 root 권한이 필요하고, 컨테이너 안에서는 /proc/sys가 읽기 전용으로 마운트되어 sysctl -w가 실패할 수 있습니다.
- net.ipv4.ip_forward나 ICMP 관련 값은 네트워크 동작과 보안에 직접 영향을 줍니다. 운영 중인 서버에서는 변경 전 현재 값을 기록해 두고, 되돌릴 방법을 확보한 뒤 적용하세요.
이 명령어로 풀 수 있는 실습 문제
브라우저 웹 터미널에서 바로 풀고 요구사항별로 자동 채점됩니다. 로그인 없이 5분 체험도 가능합니다.
관련 명령어
마지막 검수 2026-09-16 · 내용에 오류가 있으면 문제 페이지의 질문 기능으로 알려 주세요.
