Rocky Linux 명령어, 서버 3대 운영하며 매일 쓰는 것만 골랐다.

Rocky Linux 서버 3대를 운영하며 매일 사용하는 핵심 명령어만 정리했습니다. dnf 패키지 관리, systemctl 서비스 제어, firewalld 방화벽, SELinux 보안 설정까지 실전 경험 기반으로 다룹니다.

Rocky Linux 서버를 처음 세팅하면 터미널 앞에서 멍해지는 순간이 옵니다. CentOS에서 넘어왔는데 미묘하게 다른 부분들, 특히 dnf 패키지 관리와 SELinux 정책 때문에 한동안 고생했거든요. 3대 서버를 직접 운영하면서 진짜 자주 쓰는 명령어만 추렸습니다.

2024년 6월에 CentOS 7 지원이 완전히 끝나면서, 주변에서 Rocky Linux로 마이그레이션하는 분들이 확 늘었거든요. 저도 그때 넘어왔는데, 솔직히 처음 한 달은 명령어 하나 칠 때마다 구글링을 했습니다. yum이 dnf로 바뀐 건 알았지만, firewall-cmd 옵션이라든가 systemctl 세부 플래그 같은 건 직접 부딪혀봐야 감이 오더라고요.

지금은 Rocky Linux 9.x 시리즈를 메인으로 쓰고 있고, 2025년 6월에 나온 Rocky Linux 10 "Red Quartz"도 테스트 서버에 올려둔 상태예요. 이 글에서는 버전 상관없이 공통으로 쓸 수 있는 핵심 명령어를 경험 기반으로 정리합니다.

Rocky Linux 터미널 화면
Rocky Linux 터미널 화면

Rocky Linux, 왜 이걸 쓰게 됐나

CentOS가 Stream으로 방향을 틀었을 때, 현업에서는 꽤 혼란스러웠습니다. RHEL(Red Hat Enterprise Linux)의 다운스트림 클론이 필요한 상황이었는데, 선택지가 갑자기 두 갈래로 나뉜 거예요. AlmaLinux와 Rocky Linux. 저는 Rocky Linux를 골랐는데, CentOS 창립자인 Gregory Kurtzer가 직접 만든 프로젝트라는 점이 결정적이었습니다.

실제로 써보니 RHEL과의 호환성은 거의 완벽했어요. rpm 패키지가 그대로 돌아가고, 기존 CentOS 7에서 쓰던 셸 스크립트도 경로 몇 개만 수정하면 바로 작동했거든요. 다만 명령어 체계가 미묘하게 달라진 부분이 있어서, 처음 넘어오는 분들은 아래 정리를 꼭 한 번 훑어보시길 권합니다.

Rocky Linux는 10년 장기 지원을 제공하는데, Rocky 9의 경우 2032년까지, Rocky 10은 2035년까지 보안 업데이트를 받을 수 있습니다. 서버 OS로 쓰기에 이만한 안정성이 없더라고요.

파일·디렉토리 명령어 — 매일 손이 가는 기본기

리눅스 명령어의 80%는 파일과 디렉토리를 다루는 거라고 해도 과언이 아닙니다. Rocky Linux도 당연히 같은데, 제가 매일 반복적으로 치는 명령어를 빈도순으로 나열해 볼게요.

ls -alh는 진짜 하루에 수십 번 칩니다. 숨김 파일까지 전부 보여주고, 파일 크기를 사람이 읽기 편한 단위(KB, MB, GB)로 변환해 주거든요. 처음에는 ls만 쳤었는데, 로그 파일이 몇 기가인지 파악이 안 돼서 디스크가 꽉 찬 적이 있었어요. 그 뒤로는 무조건 -alh 옵션을 붙입니다.

디렉토리 이동은 cd, 현재 경로 확인은 pwd. 여기까지는 다들 아시죠. 근데 의외로 모르는 분이 많은 게 cd -예요. 바로 직전에 있던 디렉토리로 돌아가는 명령어인데, /etc/nginx와 /var/log/nginx 사이를 왔다 갔다 할 때 정말 편합니다.

파일 복사·이동·삭제는 cp, mv, rm인데 여기서 주의할 점이 있어요. Rocky Linux에서는 rm이 기본적으로 rm -i로 alias 되어 있어서 삭제 전에 확인을 묻습니다. 다른 배포판에서 넘어온 분들은 이걸 모르고 "왜 자꾸 물어보지?" 하는 경우가 있더라고요. 반대로 스크립트에서 rm -f를 쓸 때는 이 alias가 무시되니까, 실수로 중요 파일을 날릴 수 있습니다.

find 명령어도 빼놓을 수 없어요. 특히 find /var/log -name "*.log" -mtime +30 -delete는 30일 지난 로그 파일을 자동 삭제하는 건데, cron에 걸어두면 디스크 관리가 한결 편해집니다. 처음에 이걸 안 해두고 3개월 지났더니 /var/log 파티션이 98%까지 찼던 적이 있어요.

📊 실제 데이터

Rocky Linux 공식 문서에 따르면, 기본 설치 시 약 1,500개 이상의 명령어가 포함됩니다. 하지만 일상 서버 관리에서 실제로 쓰는 명령어는 40~50개 수준이에요. 나머지는 man 페이지에서 필요할 때 찾아보는 게 현실적인 접근입니다.

dnf 패키지 관리 — yum 쓰던 분들 여기 보세요

CentOS 7까지는 yum이 패키지 관리의 전부였죠. Rocky Linux에서는 dnf(Dandified Yum)가 기본 패키지 관리자입니다. RHEL 8부터 도입된 건데, yum 명령어를 쳐도 내부적으로 dnf가 실행되긴 해요. 그래도 새 문법에 익숙해지는 게 좋습니다.

제가 가장 자주 쓰는 dnf 명령어 패턴은 이렇습니다. dnf update로 전체 시스템 패키지를 최신 상태로 올리고, dnf install 패키지명으로 새 패키지를 설치하고, dnf remove 패키지명으로 필요 없는 걸 지우는 거예요. 단순하죠? 근데 실전에서는 이것보다 훨씬 다양한 상황이 생깁니다.

예를 들어, 특정 패키지의 이전 버전이 필요할 때가 있거든요. 그럴 때는 dnf downgrade 패키지명을 씁니다. 한번은 nginx를 업데이트했더니 설정 파일 호환이 깨져서 서비스가 죽었어요. 바로 dnf downgrade nginx로 이전 버전으로 복구했는데, 이걸 몰랐으면 설정 파일을 처음부터 다시 만들어야 했을 겁니다.

dnf history도 은근 유용합니다. 최근에 뭘 설치하고 지웠는지 이력이 전부 남거든요. dnf history undo 번호를 치면 해당 작업을 되돌릴 수도 있어요. 서버에서 뭔가 꼬였을 때 "최근에 뭘 건드렸지?" 싶으면 바로 이 명령어를 칩니다.

모듈 관리도 Rocky Linux에서 중요해졌어요. dnf module list를 치면 사용 가능한 모듈 스트림이 나옵니다. PHP나 Node.js처럼 여러 버전을 선택해야 하는 패키지에서 특히 필요하죠. dnf module enable php:8.2 이런 식으로 원하는 버전 스트림을 활성화한 뒤 설치하면 됩니다.

Rocky Linux dnf 패키지 설치 및 업데이트
Rocky Linux dnf 패키지 설치 및 업데이트

systemctl 서비스 관리로 서버 길들이기

서버를 운영하면 서비스를 시작하고, 멈추고, 재시작하는 일이 일상입니다. Rocky Linux는 systemd 기반이라 모든 서비스 관리가 systemctl 하나로 통합돼요.

기본 패턴은 심플합니다. systemctl start 서비스명, systemctl stop 서비스명, systemctl restart 서비스명. 근데 실무에서 진짜 중요한 건 systemctl enable 서비스명이에요. 이걸 안 해두면 서버 재부팅 후에 서비스가 자동 시작되지 않거든요. 한번은 DB 서버를 재부팅했는데 MariaDB가 안 올라와서 새벽에 긴급 대응한 적이 있습니다. enable을 깜빡한 거였어요.

systemctl status 서비스명은 트러블슈팅의 시작점입니다. 서비스가 active(running)인지 failed인지 한눈에 보이고, 최근 로그 몇 줄도 같이 출력되거든요. 여기서 에러 힌트를 잡고 journalctl -u 서비스명으로 상세 로그를 추적하는 게 기본 루틴이에요.

가끔 설정 파일만 바꾸고 서비스 전체를 재시작하기 부담스러울 때가 있잖아요. 그럴 때는 systemctl reload 서비스명을 씁니다. nginx나 httpd처럼 reload를 지원하는 서비스에서만 동작하는데, 다운타임 없이 설정을 적용할 수 있어서 프로덕션 환경에서 아주 유용합니다.

💡 꿀팁

systemctl list-units --type=service --state=running을 치면 현재 실행 중인 모든 서비스 목록이 나옵니다. 서버를 처음 인수받았을 때 "이 서버에서 뭐가 돌고 있지?"를 파악하는 첫 번째 명령어예요. 여기에 --state=failed를 붙이면 죽어 있는 서비스도 바로 찾을 수 있고요.

firewalld와 SELinux — 보안 설정에서 삽질한 이야기

Rocky Linux에서 가장 많이 삽질하는 영역이 바로 이 부분이에요. 특히 SELinux. 다른 배포판에서 넘어온 분들 중 상당수가 "안 되면 SELinux 끄면 되지"라고 생각하는데, 프로덕션 환경에서 그건 정말 위험한 선택입니다.

firewalld부터 얘기하면, 기본 방화벽 관리 도구입니다. iptables를 직접 만지던 시절보다 훨씬 직관적이에요. firewall-cmd --list-all로 현재 방화벽 상태를 확인하고, firewall-cmd --add-port=8080/tcp --permanent로 포트를 열고, firewall-cmd --reload로 적용합니다.

여기서 가장 많이 실수하는 게 --permanent 옵션을 빼먹는 거예요. 이 옵션 없이 포트를 열면 즉시 적용은 되지만 서버 재부팅하면 날아갑니다. 저도 초반에 이걸 몰라서 "분명 포트 열었는데 왜 또 막혔지?" 하며 30분을 허비한 적이 있어요.

SELinux는 좀 더 복잡합니다. getenforce로 현재 모드를 확인하고, Enforcing(강제 적용), Permissive(경고만), Disabled(비활성) 세 가지 상태가 있어요. 웹 서버에서 특정 디렉토리에 접근이 안 될 때, 대부분 SELinux 컨텍스트 문제거든요. ls -Z로 파일의 SELinux 컨텍스트를 확인하고, chcon이나 semanage fcontext로 올바른 컨텍스트를 설정하면 됩니다.

실전에서 제일 많이 쓰는 패턴 하나 알려드릴게요. nginx에서 리버스 프록시를 설정했는데 502 에러가 뜨면, 십중팔구 setsebool -P httpd_can_network_connect on을 안 한 겁니다. SELinux가 HTTP 데몬의 외부 네트워크 연결을 기본적으로 막거든요. 이걸 몰라서 하루 종일 nginx 설정 파일만 들여다본 적이 있습니다.

명령어 기능 사용 빈도
firewall-cmd --list-all 방화벽 규칙 전체 확인 매일
firewall-cmd --add-service=http --permanent 서비스 단위로 포트 오픈 설정 시
getenforce / sestatus SELinux 상태 확인 트러블슈팅 시
ausearch -m avc -ts recent SELinux 차단 로그 확인 주 1~2회
setsebool -P 불리언명 on SELinux 불리언 영구 설정 설정 시
방화벽 포트를 개방하는 터미널 출력 화면
방화벽 포트를 개방하는 터미널 출력 화면

사용자·권한 관리 명령어 실전 정리

서버에 여러 사람이 접속하는 환경이라면 사용자 관리는 피할 수 없습니다. useradd로 사용자를 만들고, passwd로 비밀번호를 설정하고, userdel로 삭제하는 게 기본 흐름이에요.

근데 실전에서는 이렇게 단순하지 않거든요. 개발팀 신입이 들어올 때마다 저는 이런 패턴을 씁니다. useradd -m -G wheel,developers 사용자명으로 홈 디렉토리를 자동 생성하면서 wheel 그룹(sudo 권한)과 개발자 그룹에 동시에 추가해요. -m 옵션을 빼먹으면 홈 디렉토리가 안 만들어져서 로그인 후 "이게 뭐지?" 하는 상황이 벌어집니다.

파일 권한은 chmodchown이 전부라고 생각하기 쉬운데, 실제로는 그렇지 않습니다. 웹 서버 디렉토리 권한 설정에서 자주 쓰는 게 chmod 755 디렉토리(소유자 읽기·쓰기·실행, 나머지 읽기·실행)와 chmod 644 파일(소유자 읽기·쓰기, 나머지 읽기)인데, 보안이 중요한 설정 파일은 chmod 600으로 소유자만 접근 가능하게 잠급니다.

한 가지 흔한 오해를 바로잡자면, chmod 777은 "모든 권한을 열어주는 만능키"가 아니라 "보안 사고의 지름길"입니다. 누구나 읽고 쓰고 실행할 수 있다는 뜻이거든요. 배포 디렉토리에 777을 건 게 발각되면 보안 감사에서 바로 지적받습니다. 실제로 제 동료가 이것 때문에 보안 점검에서 걸려서 시말서를 쓴 적이 있어요.

id 사용자명은 해당 사용자의 UID, GID, 소속 그룹을 한 줄로 보여주는 명령어인데, 권한 문제 디버깅할 때 첫 번째로 치는 명령어예요. 그리고 sudo visudo로 sudoers 파일을 편집할 때는 절대 vi로 직접 열지 마세요. visudo는 문법 오류를 저장 전에 잡아주거든요. 직접 편집하다 문법이 깨지면 sudo 자체가 안 돼서 서버 콘솔에 물리적으로 접속해야 하는 최악의 상황이 옵니다.

서버 모니터링과 트러블슈팅 명령어

서버 문제가 터지면 가장 먼저 확인하는 게 세 가지예요. CPU, 메모리, 디스크. top 명령어를 치면 실시간 프로세스 목록과 CPU·메모리 사용률이 나옵니다. 근데 저는 top보다 htop을 선호해요. 컬러풀한 인터페이스에 마우스 클릭까지 지원하거든요. 기본 설치는 안 돼 있으니 dnf install htop으로 먼저 넣어야 합니다.

디스크 관련은 df -hdu -sh * 조합이 정석입니다. df -h로 파티션별 전체 사용량을 확인하고, 용량이 많이 찬 파티션에 들어가서 du -sh *로 어떤 디렉토리가 공간을 잡아먹는지 추적하는 거예요. /var/log가 범인인 경우가 체감상 절반은 됩니다.

네트워크 쪽에서는 ss -tulnp가 netstat을 대체했어요. 어떤 포트가 열려 있고, 어떤 프로세스가 그 포트를 점유하고 있는지 한눈에 보입니다. 예전에 포트 충돌 때문에 서비스가 안 올라간 적이 있었는데, ss -tulnp | grep 8080을 쳐보니 다른 프로세스가 이미 점유하고 있더라고요. 5초 만에 원인을 잡았습니다.

⚠️ 주의

journalctl은 systemd 로그를 확인하는 핵심 도구인데, 기본 설정에서는 재부팅하면 이전 로그가 사라집니다. /etc/systemd/journald.conf에서 Storage=persistent로 바꿔줘야 부팅 이전 로그도 보존돼요. 이걸 안 해두면 "어제 새벽에 왜 서버가 죽었지?"를 추적할 방법이 없어집니다.

tail -f /var/log/messages도 여전히 자주 씁니다. 실시간으로 시스템 로그를 모니터링하는 건데, journalctl -f와 거의 같은 역할이에요. 오래된 습관 같은 건데, 두 개를 동시에 켜두고 비교하는 것도 나쁘지 않습니다. 가끔 journalctl에는 안 찍히는 로그가 /var/log/messages에 남아 있는 경우도 있거든요.

메모리 확인은 free -h가 제일 간단합니다. total, used, free, available 네 가지만 보면 되는데, 여기서 available이 실제로 사용 가능한 메모리예요. free 값이 아니라 available을 봐야 합니다. 리눅스는 남는 메모리를 캐시로 적극 활용하기 때문에, free가 낮다고 해서 메모리 부족인 건 아니거든요. 이걸 몰라서 "메모리가 부족하다"며 서버 증설을 요청했다가 시니어한테 핀잔 들은 적이 있습니다.

CPU와 메모리 사용량을 모니터링하는 화면
CPU와 메모리 사용량을 모니터링하는 화면

❓ 자주 묻는 질문

Q. Rocky Linux에서 yum 명령어를 쳐도 되나요?

네, 사용 가능합니다. Rocky Linux에서 yum은 dnf로 심볼릭 링크되어 있어서 동일하게 동작해요. 다만 공식 문서와 커뮤니티에서는 dnf 사용을 권장하고, 향후 yum 호환이 제거될 가능성도 있으니 dnf에 익숙해지는 게 좋습니다.

Q. SELinux를 끄면 안 되나요?

개발 환경이라면 Permissive 모드로 바꾸는 정도는 괜찮지만, 프로덕션에서 Disabled로 완전히 끄는 건 권장하지 않습니다. SELinux는 취약점이 발생했을 때 피해 범위를 제한하는 마지막 방어선 역할을 하거든요.

Q. Rocky Linux와 AlmaLinux 중 어떤 걸 선택해야 하나요?

기능적으로는 거의 차이가 없습니다. 둘 다 RHEL 다운스트림 클론이에요. 커뮤니티 규모나 기업 후원 구조에서 약간의 차이가 있는데, Rocky는 CRG(CIQ, 커뮤니티 주도), AlmaLinux는 CloudLinux사 후원입니다. 기존 팀에서 어떤 걸 쓰고 있느냐가 실질적인 선택 기준이에요.

Q. Rocky Linux에서 EPEL 저장소는 어떻게 활성화하나요?

dnf install epel-release 한 줄이면 됩니다. EPEL(Extra Packages for Enterprise Linux)은 기본 저장소에 없는 패키지를 제공하는데, htop이나 certbot 같은 유용한 도구가 여기에 있어요. Rocky 9 기준으로 crb 저장소도 함께 활성화해야 일부 패키지가 정상 설치됩니다. dnf config-manager --set-enabled crb를 먼저 실행하세요.

Q. CentOS 7에서 Rocky Linux로 마이그레이션하는 가장 안전한 방법은?

클린 설치 후 데이터 이전이 가장 안전합니다. In-place 마이그레이션 도구도 존재하지만, CentOS 7(RHEL 7 기반)에서 Rocky 9(RHEL 9 기반)로 직접 점프는 공식 지원되지 않아요. CentOS 7 → Rocky 8 → Rocky 9 순서로 단계별 업그레이드하거나, 처음부터 새 서버를 세팅하고 서비스를 옮기는 방식이 현실적입니다.

본 포스팅은 개인 경험과 공개 자료를 바탕으로 작성되었으며, 전문적인 의료·법률·재무 조언을 대체하지 않습니다. 정확한 정보는 해당 분야 전문가 또는 공식 기관에 확인하시기 바랍니다.

👉 함께 읽으면 좋은 글: Rocky Linux 초기 서버 세팅 체크리스트

👉 함께 읽으면 좋은 글: nginx + Rocky Linux 웹서버 구축 실전 가이드

👉 함께 읽으면 좋은 글: 리눅스 서버 보안 강화 SSH 설정 방법

Rocky Linux 명령어는 결국 반복입니다. 처음에는 하나하나 검색하겠지만, 2~3주만 매일 터미널을 열면 손가락이 먼저 움직여요. 이 글에서 정리한 명령어는 제가 서버 3대를 1년 넘게 운영하면서 실제로 매주 쓰는 것들만 골랐으니, 북마크해두고 필요할 때 참고하시면 좋겠습니다.

CentOS에서 막 넘어온 분이라면 dnf와 systemctl 섹션부터 읽어보세요. 이미 리눅스 경험이 있는 분이라면 firewalld·SELinux 파트가 실질적으로 도움이 될 거예요.


혹시 본인만의 Rocky Linux 필수 명령어 조합이 있다면 댓글로 공유해 주세요. 서로의 실전 노하우가 가장 좋은 교재니까요. 이 글이 유용했다면 같은 고민을 하는 동료에게도 공유 부탁드립니다.