리눅스 uname 명령어 사용법 - 커널 버전과 아키텍처 확인
이 명령어를 언제 쓰는가
패키지를 받으려는데 x86_64용을 받아야 할지 aarch64(ARM)용을 받아야 할지 확인할 때, 커널 취약점 공지를 보고 우리 서버 커널 버전이 해당되는지 볼 때, 커널을 업데이트하고 재부팅했는데 실제로 새 커널로 떴는지 확인할 때 쓴다.
새 서버에 처음 접속해서 uname -a와 cat /etc/os-release를 치는 것은 거의 습관에 가깝다. 어떤 커널, 어떤 아키텍처인지 모르면 그다음 판단이 전부 어긋난다.
기본 형식
uname [옵션]
- 옵션 없이 실행하면
-s와 같아서Linux만 출력한다. - 실무에서는
-a(전부) 또는-r(커널 릴리스),-m(아키텍처)을 주로 쓴다. - root 권한이 필요 없다.
자주 쓰는 옵션
| 옵션 | 의미 | 출력 예 |
|---|---|---|
-a | 아래 항목 전부 | Linux web01 5.15.0-125-generic ... |
-s | 커널 이름(기본값) | Linux |
-n | 호스트명 | web01 |
-r | 커널 릴리스 — 가장 자주 쓴다 | 5.15.0-125-generic |
-v | 커널 빌드 버전과 빌드 시각 | #135-Ubuntu SMP ... |
-m | 머신 아키텍처 | x86_64 또는 aarch64 |
-p | 프로세서 종류(배포판에 따라 unknown) | x86_64 또는 unknown |
-o | 운영체제(GNU 확장) | GNU/Linux |
실전 예제
1. 서버에 처음 접속해서 기본 정보를 확인한다.
$ uname -a
Linux web01 5.15.0-125-generic #135-Ubuntu SMP Mon Oct 7 13:56:22 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
순서대로 커널 이름, 호스트명, 커널 릴리스, 빌드 버전, 머신·프로세서·플랫폼, 운영체제다.
2. 바이너리를 내려받기 전에 아키텍처를 확인한다. 클라우드에서 ARM 인스턴스를 쓰면서 x86_64 바이너리를 받아 Exec format error를 보는 일이 흔하다.
$ uname -m
x86_64
배포처마다 표기가 다르므로 매핑을 알아둔다. x86_64는 amd64, aarch64는 arm64와 같은 것을 가리킨다.
3. 커널 업데이트 후 실제로 새 커널로 부팅됐는지 확인한다. 패키지만 설치하고 재부팅을 안 하면 uname -r은 그대로 옛 버전이다.
$ uname -r
5.15.0-125-generic
$ ls /boot/vmlinuz-*
/boot/vmlinuz-5.15.0-119-generic /boot/vmlinuz-5.15.0-125-generic
설치된 커널 중 가장 높은 버전과 uname -r이 다르면 재부팅이 남아 있다는 뜻이다.
4. 스크립트에서 아키텍처별로 분기한다. 설치 스크립트를 쓸 때 표준 패턴이다.
#!/bin/bash
case "$(uname -m)" in
x86_64) ARCH=amd64 ;;
aarch64) ARCH=arm64 ;;
*) echo "지원하지 않는 아키텍처: $(uname -m)"; exit 1 ;;
esac
curl -fsSL "https://example.com/myapp-linux-${ARCH}.tar.gz" -o myapp.tar.gz
5. 커널 헤더가 필요한 모듈을 빌드할 때 현재 커널 버전을 넘긴다.
sudo apt install "linux-headers-$(uname -r)" # Ubuntu/Debian
sudo dnf install "kernel-devel-$(uname -r)" # RHEL/Rocky
함정과 주의점
- uname은 배포판 이름과 버전을 알려주지 않는다. "Ubuntu 22.04인지 Rocky 9인지"를 확인하려고
uname -a를 쳐도 답이 없다. 커널 빌드 문자열에Ubuntu가 섞여 나오는 것은 우연일 뿐이고 RHEL 계열에서는 안 나온다. 배포판 확인은 다음을 쓴다.cat /etc/os-release # 또는 hostnamectl - 컨테이너 안에서 본 값은 호스트의 커널이다. Docker 컨테이너는 호스트 커널을 공유하므로, Ubuntu 이미지 안에서
uname -r을 쳐도 호스트가 Rocky면 Rocky의 커널 버전이 나온다. 컨테이너의 "OS"를 확인하려면 반드시/etc/os-release를 봐야 한다. uname -p는 믿지 않는다. 배포판·빌드에 따라x86_64를 주기도 하고unknown을 주기도 해서 값이 일정하지 않다. 아키텍처 판별에는-m을 쓰고, macOS(BSD 계열)에서는-p가arm같은 다른 값을 주므로 이식성 있는 스크립트에서는uname -m으로 통일한다.- 커널이 64비트여도 사용자 공간이 32비트일 수 있다. 오래된 임베디드·레거시 환경에서
uname -m이x86_64인데 설치된 라이브러리는 32비트인 경우가 있다. 정확한 판단이 필요하면getconf LONG_BIT이나file /bin/bash로 교차 확인한다.
함께 보면 좋은 명령어
cat /etc/os-release— 배포판 이름과 버전. uname이 못 알려주는 부분이다.hostnamectl— 호스트명, OS, 커널, 가상화 여부를 한 화면에 보여준다.lscpu— CPU 코어 수, 모델, 가상화 지원 여부까지 상세히 본다.arch—uname -m과 같은 값을 출력하는 짧은 명령.