sysctl 명령어 사용법

실행 중인 커널의 파라미터를 조회하고 변경하는 명령어입니다.

시스템 설정·셸연결 실습 문제 2개Rocky Linux 8 기준 · 실행 결과는 실습 컨테이너에서 확인

기본 문법

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 · 내용에 오류가 있으면 문제 페이지의 질문 기능으로 알려 주세요.