Linux(리눅스)는 좁게는 운영체제의 핵심인 커널을, 넓게는 이 커널을 사용하는 운영체제 계열을 가리킨다. 커널은 CPU 실행 시간, 메모리, 장치와 네트워크를 관리한다. 사용자가 설치하는 Ubuntu·Debian 같은 배포판은 여기에 명령줄 도구, 라이브러리, 패키지 관리 체계와 응용 프로그램을 결합한 시스템이다.
커널·배포판·셸의 구분
Linux 커널과 배포판은 같은 범위의 이름이 아니다. 커널 버전이 같아도 배포판이 제공하는 패키지 버전과 기본 설정, 지원 기간은 다를 수 있다. 따라서 문제를 재현할 때에는 “Linux를 쓴다”는 설명보다 배포판과 버전, 커널, CPU 구조, 사용한 도구를 함께 기록하는 편이 정확하다.
Bash 같은 셸은 사용자의 명령을 해석하는 프로그램이다. 셸이 명령을 실행하면 해당 도구가 사용자 공간에서 동작하고 필요한 작업을 시스템 호출로 커널에 요청한다. 터미널은 셸의 입력과 출력을 보여 주는 창이며, 셸 자체나 커널과 구별된다. 그래픽 환경 없이도 Linux를 사용할 수 있고, 반대로 그래픽 데스크톱을 갖춘 배포판도 있다.
작동 원리와 주요 특징
파일을 읽는 프로그램을 생각하면 응용 코드가 라이브러리를 통해 읽기를 요청하고, 커널이 권한과 파일 상태를 확인한 뒤 파일 시스템 및 장치 계층을 거쳐 데이터를 전달한다. 프로그램마다 하드웨어 제어 방법을 직접 구현할 필요가 없는 이유다. 프로세스의 가상 메모리와 실행 스케줄링 역시 커널이 관리하는 핵심 기능이다.
서로 다른 프로그램을 독립적인 프로세스로 실행하고 파이프나 소켓으로 연결할 수 있다. 한 도구가 모든 처리를 맡기보다 입력을 읽고 결과를 출력하는 작은 도구를 조합하는 방식이 명령줄 작업에 자주 쓰인다. 다만 도구의 옵션과 서비스 관리 방식까지 모든 배포판에서 동일한 것은 아니다.
예시: 커널 정보 읽기
일반적인 Linux 터미널에서 아래 명령을 한 줄씩 실행한다. 관리자 권한은 필요하지 않으며 시스템 설정을 변경하지 않는다. 첫 줄은 커널 이름을 출력하므로 Linux가 표시된다. 둘째 줄은 커널 릴리스 문자열, 셋째 줄은 머신 구조 이름을 출력한다. 뒤의 두 값은 실행 환경마다 다르므로 특정 버전 숫자를 정답으로 외우지 않는다.
uname -r의 결과는 Ubuntu나 Debian의 배포판 버전이 아니다. 가상 머신이나 컨테이너 내부에서 실행했을 때도 명령이 보여 주는 실행 환경의 의미를 구분해야 한다. 배포판 자체의 정보는 해당 배포판의 시스템 정보 화면이나 배포판 문서에서 별도로 확인한다.
uname -s
uname -r
uname -m예시: 작은 도구를 연결해 개수 세기
아래는 파일을 만들지 않고 네 줄의 예제 데이터를 집계하는 셸 파이프라인이다. printf가 pear, apple, pear, banana를 각각 한 줄로 출력하고 sort가 같은 문자열을 모은 다음 uniq -c가 연속된 동일 줄의 개수를 센다. 예상 결과는 apple 1회, banana 1회, pear 2회이다. 출력의 앞쪽 공백은 구현에 따라 다를 수 있다.
중요한 것은 sort를 먼저 거친다는 점이다. uniq는 입력 전체에서 중복을 찾는 것이 아니라 인접한 같은 줄을 처리한다. 처음 입력처럼 pear가 떨어져 있을 때 uniq만 사용하면 두 pear를 하나로 집계하지 못한다. 이 예제는 쉘의 파이프로 앞 명령의 표준 출력을 다음 명령의 표준 입력에 전달하는 원리를 보여 준다.
printf '%s\n' pear apple pear banana | sort | uniq -c
# 예상 집계
# 1 apple
# 1 banana
# 2 pear활용과 선택 기준
서버와 개발 환경에서는 원격 명령 실행, 패키지 관리, 반복 작업의 스크립트화가 유용하다. 임베디드 장치에서는 필요한 구성만 선택하는 방식이 쓰인다. 처음 배포판을 고를 때에는 인지도뿐 아니라 사용하는 장치와 드라이버, 필요한 소프트웨어, 문서와 유지보수 체계를 확인해야 한다.
개발 PC와 배포 서버의 환경 차이는 기록으로 관리한다. 예를 들어 개발 환경에만 있는 명령이나 라이브러리에 의존하면 서버에서 실행되지 않을 수 있다. 동일한 소스 코드라도 CPU 구조와 라이브러리, 컴파일 옵션이 다르면 실행 파일을 그대로 옮길 수 없는 경우가 있다.
주의할 점
Linux 전체가 하나의 라이선스로 묶인 단일 프로그램은 아니다. 커널은 GPLv2로 배포되지만 배포판에 들어 있는 각 도구와 라이브러리의 조건은 따로 확인해야 한다.
오류가 난다고 모든 명령 앞에 sudo를 붙이거나 파일 권한을 무조건 넓히는 것은 원인 해결이 아니다. 경로, 파일 소유자, 실제 필요한 접근 권한과 오류 메시지를 먼저 확인한다. 명령을 복사할 때는 해당 명령이 단순 조회인지, 파일을 수정하거나 패키지를 설치하는 작업인지 구별한다. 이 문서의 두 예제는 조회와 메모리상의 텍스트 처리만 수행한다.