[OS] 리눅스 개요
Docker에 대해 공부하다보니, Docker가 리눅스 운영체제를 기반으로 돌아가기도 하고, 각각의 docker image들에도 리눅스에서 정해진 디렉터리 구조를 따라 파일들을 저장하다보니, 아무래도 리눅스 운영체제에 대한 기본적인 지식이라도 알아두는 게 좋을 것이란 생각이 들었다. 이로 인해 저번 시간에는 [OS] 운영체제의 구조에 대해 알아보았다면, 이번 시간에는 그 중 리눅스 운영체제에 대해 간단히 알아보고자 한다.
리눅스 개요
리눅스 개발자 리누스 토발즈(Linus Torvalds)에 의해 개발된 운영체제로, 기존의 UNIX라는 운영체제를 기반으로 개발되었다고 한다. 오픈소스로 무료이며, 누구나 수정할 수 있어 다양한 배포판이 존재한다는 것이 특징이다.
리눅스는 주로 서버 컴퓨터에서 자주 사용된다. 사용자가 직접 마우스, 키보드 등으로 조작하여 직접 컴퓨터를 사용하는 개인 데스크톱 방식에서는 사용자 편의성, 직관성을 위해 GUI가 필요하겠지만, 서버에서는 주로 클라이언트에게 정적 파일 또는 데이터를 제공하는 역할을 하기도 하고 성능도 중요하기에 성능에 영향을 줄 수 있는 그래픽 유저 인터페이스 방식 대신 CLI 방식을 택하여 사용하곤 한다. 그래서 필자 개인적으로도 리눅스 하면 까만 터미널 창 이미지를 떠올리곤 했다. 하지만 그렇다고 해서 리눅스가 CLI 방식으로만 사용 가능한 것은 아니다. 리눅스는 서버용으로뿐만 아니라 데스크톱용으로도 나오기에 GUI 방식으로 컴퓨터를 이용할 수 있다. 뿐만 아니라 리눅스는 모바일 운영체제 중 하나인 안드로이드의 밑바탕이 되는 커널로도 사용되며, 그 외에 임베디드 시스템에서도 사용되어 리눅스는 생각보다 광범위하게 활용된다고 볼 수 있다.
왜 리눅스일까?
사실 일반인들에게 유명한 운영체제라 하면 윈도우, macOS, 모바일에서는 안드로이드, iOS 등이 있겠다. 그럼에도 IT, 소프트웨어 쪽으로 들어가보면 리눅스에 대한 언급이 많다.
왜 리눅스를 사용하는지에 앞서 우선 리눅스가 주로 어느 분야에서 어느 정도로 많이 사용되는지를 살펴보겠다. 그래야 왜 리눅스를 사용하는지, 좀 더 정확히는 리눅스는 어느 분야에서 왜 많이 쓰이는지에 대한 대략적인 이유를 파악할 수 있을 것이라 보기 때문이다.
“Linux Statistics 2026: Desktop, Server, Cloud & Community” 에 따르면, 2024년도에 전 세계 서버 시장에서 리눅스가 44.8%를 차지했다고 한다. AWS, Azure와 같은 클라우드 시장에서도 90% 가량이 리눅스를 사용한다고 한다. 웹 서버용으로도 2026년 5월 기준 전체 시장의 61.3%가 리눅스로 운영된다고 한다. 일반인들이 데스크톱에서의 운영체제라 하면 윈도우를 떠올리듯, 서버 및 클라우드하면 리눅스가 압도적이라고 볼 수 있다.
한 편, 데스크톱에서는 2026년 4월 기준 윈도우가 63.66%, macOS가 4.37%, Linux가 그 뒤를 이은 2.99%의 점유율을 가지고 있다. 데스크톱 시장에서는 리눅스 점유율이 매우 적다고 볼 수 있다. 데스크톱과 연관되어 있는 Steam 게임 시장에서의 점유율에서도 4~5%을 기록하고 있다. 다만 이 기록은 최근 와서 상승하여 정점을 찍은 수치라고 한다. 그 배경에는 리눅스 GUI 환경도 사용할만 해졌고, 스팀 게임과의 호환성도 좋아진 것도 있으며, 지금까지의 윈도우 운영체제에 대한 비판도 한 몫 했다고 보인다. 윈도우 11부터 사용자 동의 없이 강제로 AI 기능을 넣은 것, 그로 인해 윈도우 11에서는 더 성능 좋은 데스크톱을 요구하기 때문에 구형 데스크톱 보유자들은 업그레이드 할 수 없다는 점, 지속되는 업데이트1에도 잦은 버그 및 오류 발생 등의 안 좋은 점들이 윈도우에서 꾸준히 나온 지점에서, 사용자에게 어떤 기능을 강요하지 않고 성능도 좋은 리눅스가 대안이 된 것이다. 이를 보면 운영체제 선택 기준에는 사용자 경험성도 무시할 수 없다2.
한 편, 모바일 시장에서는 안드로이드가 리눅스 커널을 기반으로 만들어졌는데, 이 안드로이드가 2026년 4월 기준 전세계 모바일 시장에서 67.35%의 점유율을 차지하고 있다고 한다.
뿐만 아니라 리눅스는 임베디드 기기에서도 사용된다고 한다.
이를 통해 알 수 있는 건, 데스크톱에서는 윈도우가 강세이며, 그 외 나머지 서버, 모바일 시장에서는 리눅스가 많이 사용된다는 것을 알 수 있다.
웹 앱을 서버에 올려 배포하는 개발자, 운영자 관점에서 궁금할 수 있는 점은 데스크톱에서는 윈도우인데, 왜 서버에서는 리눅스를 많이 사용할까, 라는 점이다. 여기에는 여러 가지 이유가 있다.
- 비용적인 문제: 사실 윈도우에도 서버용으로 특화된 Windows server란 것이 있다고 한다. 다만 그럼에도 서버 시장에서는 리눅스 점유율이 높은데, 그 중 하나가 바로 비용 때문이다. 리눅스의 경우 오픈소스이며 무료이기 때문에 라이센스 비용이 없기도 하고, 필요하다면 돈을 지불하여 기업용으로 유상 지원을 하는 Ret Hat Enterprise Linux (RHEL)와 같은 배포판으로 바꿀 수도 있어 유연하다는 장점이 있다. 반면 Windows server의 경우 라이센스 비용이 기본적으로 발생3하며, 그마저도 사용자 수에 따라 늘어난다고 한다. 대신 그만큼 윈도우 측에서 기술 지원도 하기는 하지만, 애초에 큰 규모의 엔터프라이즈급 서버가 아닌 토이 프로젝트용, 스타트업 등이 사용할 중소 규모 서버에서 사용하기에는 강제로 내야하는 그 비용도 부담스러울 것이다.
- 사실 이러한 이유 때문인지 Github Actions에서 사용하는 runner라는 기기 내에서 사용할 운영체제에 따른 요금도 서로 다르다4. 리눅스의 경우 1분당 0.002~0.005 달러 요금이 발생하는 반면, 윈도우 운영체제를 사용할 경우 0.010 달러 요금이 발생하여 약 2~5배 정도의 요금 차이를 보여준다. 윈도우만의 라이센스 비용, 그리고 리눅스에 비해 컴퓨팅 자원을 좀 더 많이 소모한다는 측면에서 이렇게 요금 차이가 발생한 게 아닐까 싶다.
- 인프라적인 환경 요소: 앞서 데스크톱과 PC 게임 시장에서는 윈도우가 압도적인 것을 확인했는데, 그 이유가 무엇일까? 대부분의 게임들과 프로그램들이 윈도우 운영체제에 맞게 제작되었기 때문일 것이다. 하나의 운영체제에 맞게끔 컴파일된 프로그램은 기본적으로 다른 운영체제에서는 컴파일되거나 실행되지 않는다고 한다. 이로 인해 데스크톱 환경에서는 윈도우 사용자가 많을 수 밖에 없다. 이러한 논리는 서버 분야에서도 마찬가지이다. 서버에서는 프로그램 간의 환경 격리, 환경 변수 등의 의존성 자동 구성 등의 이유로 Docker를 자주 사용하는데, 이 Docker 자체가 리눅스에서만 사용할 수 있도록 만들어진 컨테이너 엔진이다. 그로 인해 여러 유명한 소프트웨어들도 Docker image로 제공된다. 서버에 웹 사이트를 올려 배포할 개발자, 운영자 입장에서는 너무나도 편한 도구일 것이다. 즉, 서버 구축에 있어서는 리눅스가 어느 정도 생태계를 이루고 있다고도 볼 수 있기에 개발자 및 운영자 입장에서는 서버 배포 및 운용에 있어 리눅스를 많이 사용하는 것이라 보인다(물론 리눅스를 사용하는 이유가 Docker 때문만은 아닐 것이다).
- 컴퓨팅 자원 소모: 컴퓨팅 자원 소모 측면에서 보았을 때 윈도우보다는 리눅스가 자원을 덜 잡아먹어 성능이 좋다고 한다. 데스크톱의 경우, 기존 윈도우 운영체제에서 리눅스 기반 운영체제로 바꿨더니 기존보다 좀 더 속도가 빨라졌다는 반응이 많았다5. 이는 서버에서도 마찬가지이다. 특히나 사용자에게 안정적이고 빠른 서비스를 제공해야하는 서버 입장에서는 컴퓨팅 자원 하나하나가 불필요하게 낭비되어서는 더더욱 안될 것이다. 이런 측면에서 보았을 때에도 리눅스가 우위에 있다. 컴퓨팅 자원 소모량을 줄이는 게 중요한 또 다른 이유는 바로 금전적 비용으로도 이어지기 때문이다. 불필요한 수준으로 컴퓨팅 자원을 소모한다면 그에 따른 상당한 전력량이 필요해져 이는 전기료로 이어질 것이며, AWS와 같은 클라우드 서비스를 사용할 때에도 같은 원리로 그만큼 더 많은 비용이 나올 것이다. 당장 최근의 AI 분야만 하더라도 AI가 이미지 한 장, 텍스트 몇 줄 내뱉기 위해 필요한 전력량과 이로 인해 발생하는 열을 식힐 물의 양이 어마어마하게 필요하다는 사실을 비추어 보면 알 수 있다.
이 외에도 서버 운영자가 원하는대로 리눅스 서버를 설정할 수 있다는 장점도 있다. 다만 리눅스라고 해서 모든 분야에서 장점만 있는 것은 아니다. 원하는대로 커스텀이 가능하다는 것은, 반대로 말하자면 원하는 바를 이루기 위해선 직접 설정해야할 것들이 많다는 뜻이기도 하다. Windows server에서는 이러한 설정들을 기본으로 제공하지만 리눅스의 경우 일일이 직접 설정해야해서 번거롭기도 하고 그만큼의 리눅스 관련 지식들도 필요하다. 또한 서버로서의 성능을 조금이라도 살리기 위해 보통 GUI 대신 CLI 방식을 사용하는데, 텍스트로 명령을 내리는 방식이라 이에 생소한 사람에게는 진입장벽이 있다는 것도 흠이다.
그럼에도 리눅스의 장점들 덕분에 앞서 살펴본 것처럼 서버 시장에서만큼은 리눅스를 많이 사용한다. 그렇기에 서버를 이용하여 웹 사이트를 배포하고 운영하고자 하는 개발자 및 운영자의 입장에서는 리눅스를 기본적으로는 알아야할 수밖에 없다.
다음 챕터에서부터는 리눅스에 대한 기본적인 지식, 개념들에 대해 살펴보고자 한다. 이 글에서는 정말 기본적인 것에 대해서만 살펴볼 것이기에, 리눅스 관련 명령어나 그 외 세부적인 지식들은 추후에 필요할 때마다 다른 글에서 정리할 예정이다.
리눅스 관련 개념 및 지식들
리눅스 배포판 계열
리눅스는 오픈소스로, 누구나 수정할 수 있기에 각 기업 또는 단체에서 이를 토대로 커스텀하여 각자 다른 형태로 배포한다. 이를 배포판(Distribution)이라 한다. 이 배포판에도 여러 종류들이 있으며, 크게는 Debian 계열, RedHat 계열, slackware 계열로 나뉜다.
- Debian 계열 배포판: Ubuntu 등
- slackware 계열 배포판: openSUSE
- RedHat 계열 배포판: RHEL, Fedora, CentOS
이 외에도 여러 다양한 배포판들이 있으며, 오픈 소스이기에 개인이나 단체가 직접 커스텀하여 사용할 수도 있어 잘 알려지지 않은 배포판들도 많이 존재할 것이다6.
리눅스 배포판에도 기업 주도로 개발하는 배포판도 있고, 커뮤니티 주도로 개발되는 배포판도 있다.
리눅스 기본 디렉터리 구조 및 역할
윈도우에서 폴더를 이용하여 여러 파일들을 특정 카테고리에 따라 구분지어 분류하고 구분하듯, 리눅스에서도 디렉터리(Directory)를 통해 파일들을 분류, 보관한다7. 그러나 윈도우와는 다르게 리눅스에서는 기본 디렉터리 구조가 매우 다르다. 리눅스에서는 하나의 루트 디렉터리가 있고, 그 아래로 여러 디렉터리들이 트리 구조로 구성되어 있다. 또한 리눅스에서는 몇몇 이름과 그 역할이 정해진 디렉터리들이 제공된다. 다음은 리눅스 디렉터리 기본 구조 및 각 디렉터리별 역할 설명이다.
| 디렉터리 | 역할 | 이름 유래 |
|---|---|---|
| / | 최상위 루트 디렉터리. 이 디렉터리 내부에 다음에 소개할 디렉터리들이 포함된다. | |
| /bin | 모든 사용자들이 사용 가능한 명령어 바이너리 파일들을 담는 곳. CLI 방식의 터미널 창에서 입력 가능한 cat , ls 등의 명령어들이 파일 형태로 담겨져 있다. |
binary |
| /boot | 부트 로더 파일들이 담겨져 있는 디렉터리. 리눅스 부팅 시 필요한 파일들이 있다. | |
| /dev | 장치(디바이스) 관련 파일들이 있다. 디스크, CD-ROM, 마우스, 키보드 등의 여러 장치들에 대한 파일들이 있다. | device |
| /etc | 설정 파일들을 담는 곳. 여기서의 설정 파일이라 함은, 프로그램 작동을 통제할 때 사용될 로컬 파일을 의미한다. FHS에 따르면 이 디렉터리에 담길 설정 파일들은 실행 가능한 파일이어선 안되며, /etc 디렉터리 안에 직접 파일을 넣기 보다는 그 안에 서브 디렉터리를 만들어 넣는 것을 권고하고 있다. | |
| /home | 사용자별 홈디렉터리들이 있는 곳. 예를 들어 하나의 리눅스 컴퓨터에 Kimquel이란 유저와 Javas라는 유저가 등록되어 있다면 각각 /home/Kimquel/ , /home/Javas/ 와 같이 사용자별 홈디렉터리가 마련된다. |
|
| /lib | 시스템 상에서 필요한 공유 파일 및 커널에서 필요로 하는 라이브러리들을 모아놓은 곳. | library |
| /media | USB, CD-ROM과 같은 외부 장치와 연결할 마운트 지점(mount point)을 제공. | |
| /mnt | 임시로 마운트된 파일 시스템을 담는 곳. /media 는 OS에서 자동으로 외부 장치들을 마운트하는 곳이고, /mnt 는 사용자가 직접 외부 파일 시스템을 마운트하는 곳으로 사용된다. |
mount |
| /opt | 추가 가능한 응용 프로그램 패키지 설치 장소. 패키지 매니저가 자동으로 설치 및 삭제를 실행한다. | option |
| /proc | 커널 및 현재 실행 중인 프로세스 상태 정보를 파일 형태로 저장하는 가상파일 시스템. | process |
| /root | / 과는 다른 디렉터리로, 관리자 계정인 root 사용자의 홈 디렉터리이다. |
|
| /sbin | 시스템에서 필수로 사용되는 바이너리 파일들을 모아둔 곳. 리눅스 시스템의 부팅, 복원, 복구 등의 작업에 필요한 바이너리 파일들이 보관된다. | system binary |
| /usr | 일반 사용자의 읽기 전용 데이터 및 애플리케이션 관련 파일들이 있는 곳. | user 가 아니라 Unix System Resources 의 약자라고 한다. |
| /var | 가변형 데이터 파일들을 모아둔 곳. 임시 파일이나 로그 파일, 캐시 파일 등 파일 자체가 언제든지 생성, 삭제될 수 있거나 또는 파일 내용이 자주 변경될 여지가 있는 파일들이 보관된다. | Variable data files |
| /tmp | 프로그램이 임시로 사용하는 파일들을 보관하는 곳. 여기에 담긴 파일들은 임시 파일이므로 영구적으로 보관할 용도의 파일을 넣어선 안된다. 시스템이 부팅될 때마다 이 디렉터리 내부의 임시 파일들이 삭제되도록 권고하고 있다. | temporary files |
앞서 보았듯, 리눅스는 오픈 소스이다보니 여러 다양한 기업 및 단체들이 저마다의 목적으로 여러 종류의 배포판으로 배포하는데, 그럼에도 각 배포판 사이의 디렉터리 구조 및 역할이 다르면 서로 호환되기 어려울 것이다. 이로 인해, 리눅스에서의 주 디렉터리들을 정의하는 파일 시스템 계층 구조 표준(Filesystem Hierachy Standard, FHS)이 존재하며, 대부분의 리눅스 배포판들은 이 표준을 따른다고 한다. 위에서 소개한 각 디렉터리들의 정의들도 이 FHS에 의한 정의이다.
이러한 리눅스에서의 디렉터리 구조와 각 디렉터리별 역할을 알고 있으면 추후에 리눅스 기반 프로그램 개발 또는 서버 운영 시 어떤 파일을 어떤 디렉터리에 위치시킬 것인지 판단할 때 도움이 될 것이다.
위에서 소개한 것 이외에도 몇몇 디렉터리들이 더 있으며, 앞서 소개한 /usr , /var 디렉터리 내에 FHS에서 정의한 여러 하위 디렉터리들이 존재한다. 이에 대한 상세한 정보는 https://specifications.freedesktop.org/fhs/latest/ 이 사이트를 참고.
참고로, 윈도우에서 리눅스를 가상으로 돌릴 수 있는 WSL이란 기능이 있는데, 이 리눅스에서 윈도우에 있는 파일, 폴더들에 접근하여 가져다 사용하고자 할 때에는 리눅스에서 /mnt 디렉터리를 통해 접근한다. 예를 들어 만약 윈도우에서 C 드라이브와 D 드라이브가 있다면 리눅스에서는 /mnt/c/ 와 /mnt/d/ 디렉터리가 자동으로 생성된다. 이를 통해 리눅스에서도 윈도우 시스템에 있는 파일들을 그대로 가져와 실행할 수 있다.
파일
파일 유형
리눅스에서는 모든 것을 파일로 다룬다. 리눅스에서는 파일 종류가 다음과 같이 존재한다.
- 일반 파일
- 텍스트 파일: 소스 코드, 환경 파일 등 사람이 읽을 수 있는 텍스트 파일.
- 바이너리 파일: 기계어로 구성되어 있으며, 실행 가능한 파일.
- 리눅스에서 일반 파일은
-로 표기한다.
- 디렉터리 파일
- 윈도우의 폴더처럼 다른 파일이나 디렉터리를 포함할 수 있는 파일이다. 윈도우에서의 폴더는 파일들을 담을 수 있는 논리적으로 구분된 영역이라 볼 수 있는데, 리눅스에서는 디렉터리 자체도 파일로 취급하여 다룬다.
- 리눅스에서는 디렉터리 파일을
d로 표기한다.
- 링크 파일
- 다른 파일이나 디렉터리에 쉽게 접근할 수 있는 파일로, 심볼릭 링크와 하드 링크 파일로 구분된다.
- 리눅스에서는 링크 파일을
l(소문자 L)로 표기한다.
- 장치 파일
- 하드웨어 장치에 접근할 수 있는 인터페이스를 제공하는 파일.
- 문자 장치 파일: 키보드, 마우스, 터미널처럼 문자 단위로 작은 데이터 전송 시 사용되는 파일.
- 블록 장치 파일: 디스크, USB 드라이버와 같이 대규모 데이터 처리에 사용되는 파일.
- 문자 장치 파일은
c, 블록 장치 파일은b로 표기한다.
- 통신 파일
- 네트워크 또는 프로세스 간 통신에 사용되는 파일. 소켓 파일과 명명된 파이프 파일로 구분된다.
- 리눅스에서는 소켓 파일은
s, 명명된 파이프 파일은p로 표기된다.
실제로 리눅스 쉘에서 특정 디렉터리에서 ls -l 명령어를 입력해보면 해당 디렉터리 안에 어떤 파일들이 있는지 그 종류와 함께 알 수 있다.

사진 1-1. / 디렉터리 대상으로 ls -l 명령어를 입력한 결과. 맨 왼쪽 열에 있는 각 행의 텍스트 데이터들을 보면 맨 앞에 d, l - 등이 보이는데 이것이 바로 해당 파일이 어떤 유형인지를 알려주는 기호이다.
한 편, 리눅스 터미널 창에서 자주 사용하는 여러 명령어들(ls , mkdir 등)은 사실 해당 이름을 갖는 파일을 불러와 해당 파일을 실행하는 원리이다. 각 명령어들의 파일이 어디있는지 확인하고자 한다면 which 명령어를 사용하면 알 수 있다.
$ which ls
/usr/bin/ls
$ which uptime
/usr/bin/uptime
$ which exit
$
코드 1-1.
ls 와 uptime 명령 파일은 각각 /usr/bin 폴더에 있는 것을 확인할 수 있다. 다만 exit 명령어의 경우 그 경로를 확인할 수 없는데, 이는 쉘 자체에 내장된 명령어라는 뜻이다.
파일 접근 권한
한 편, 위 사진의 맨 왼쪽 열에서 볼 수 있듯, r , w, x , - 로 이루어진 문자열들이 보일 것이다. 리눅스에서는 각 파일마다 사용자 범위마다 읽기, 쓰기, 실행 권한을 별도로 부여할 수 있다.
리눅스에서는 세 가지 사용자 그룹이 있다.
- User: 파일을 소유하고 있는 사용자.
- Group: User가 포함된 사용자 그룹.
- Other: User, Group이 아닌 그 외 사용자.
그리고 예를 들어 rwxr-xr-x 형식으로 파일 권한이 주어졌다고 해보자. 이것은 앞에서부터 3글자씩 User, Group, Other 사용자로 나뉘며, 각 3글자는 차례대로 읽기 권한(r), 쓰기 권한(w), 실행 권한(x) 문자들의 자리로 구성되어 있다. 위 문자열은 결국 User에게는 rwx 권한을, Group과 Other에게는 각각 r-x 권한이 부여된 상태라는 의미이다. 여기서 - 은 해당 권한이 주어지지 않았다는 뜻으로, Group, Other에게는 쓰기 권한이 없다는 뜻이다. 반면 User에게는 rwx 모두 표기되어 있으므로 해당 파일은 User에게 있어 읽기, 쓰기, 실행 권한 모두 부여되어 있다는 뜻이다.
파일 권한을 변경할 수도 있다. 리눅스에서 간단한 텍스트 파일을 만들어 테스트해보자.
리눅스에서 기본으로 제공되는 텍스트 에디터인 vi을 이용하여 간단하게 텍스트 파일을 만들어보겠다. 명령어로 vi sample.txt 라 쳐보자. 그러면 다음과 같은 화면을 볼 것이다.
사진 2-1. vi 텍스트 에디터로 sample.txt 를 만들어 해당 텍스트 파일 내용을 보여주고 있는 화면.
현재는 아무것도 없는 새 파일이라 위 화면과 같이 아무것도 써져있지 않다. 이 화면에서 “편집 모드”로 전환하기 위해 영어 소문자 i를 키보드에서 입력한다. 그러면 맨 아래 왼쪽에 이전에는 파일명이 있다가 -- INSERT -- 문구로 변경될 것이다. 이 상태에서는 텍스트 파일에 텍스트를 입력할 수 있게 된다.
사진 2-2. 편집 모드에서 임의의 텍스트를 입력한 모습.
저장하고 빠져나오고자 한다면 우선 키보드에서 ESC 를 누른 다음, :wq 를 입력한다. 그리고 엔터 키를 누른다. 그러면 원래 터미널 창으로 빠져나오게 된다. 이 상태에서 ls -l 명령어를 입력해보면 다음과 같은 결과를 얻는다.

사진 2-3. 앞서 생성한 sample.txt 파일의 정보.
해당 파일은 텍스트 파일로, 일반 파일이므로 - 표기가 되어 있다. 그리고 그 다음 문자부터 User, Group, Other에 대한 파일 접근 권한이 나열되어 있다. rw-r--r-- 로 되어 있으며, User에게는 해당 파일에 대해 읽기 및 쓰기 권한이 있고, 대신 실행 권한이 없음을 알 수 있다.
명령어 창에 cat sample.txt 라 입력하면 해당 파일 내용을 쉘에 출력하여 볼 수 있다.

사진 2-4.
이제 이 파일에 대한 접근 권한을 일부 바꿔보도록 하겠다. 해당 명령어는 chmod 를 사용한다. 파일 접근 권한을 변경하는 방법에는 기호를 이용하는 방법과 숫자를 이용하는 방법 이 두 개가 있는데, 먼저 다음은 기호를 이용한 방법이다.
$ chmod u-r sample.txt
코드 2-1. sample.txt 파일에 대해 User의 읽기 권한을 삭제하는 명령어.

사진 2-5. sample.txt 파일 접근 권한 변경 후의 모습.
이후 ls -l 명령어를 입력해보면 User 사용자에 대해 기존에는 rw- 이었던 반면 이번에는 -w- 인 모습을 확인할 수 있다. 읽기 권한이 삭제되었다는 것이다. 이 상태에서 cat sample.txt 명령어를 또 한 번 이용하여 해당 파일 내용을 읽어보려고 하면 위 사진과 같이 접근 권한이 막히게 된다.
앞선 chmod u-r 에서 u-r 은 User에게 읽기 권한을 삭제하라는 뜻이다. 사용 가능한 더 많은 옵션들은 다음과 같다.
- 대상
u: Userg: Groupo: Othera: All
- 연산자
+: 이 연산자 바로 뒤에 나오는 접근 권한을 추가한다.-: 접근 권한 삭제=: 접근 권한 지정
- 접근 권한
r: 읽기 권한w: 쓰기 권한x: 실행 권한
이번에는 해당 파일에 다시 User에 대한 읽기 권한을 부여해보자. 이번에는 숫자를 이용한 방법이다. 다음과 같이 명령어를 치면 된다.
$ chmod 644 sample.txt
코드 2-2.

사진 2-6.
위 명령어를 입력하여 파일 권한을 다시 확인해보고, 해당 텍스트 파일을 출력해보니 내용을 볼 수 있게 되었다.
리눅스에서는 읽기, 쓰기, 실행 권한을 다음과 같이 숫자로도 표기하여 권한을 바꿀 수 있다.
| 권한 | 숫자 |
|---|---|
| r (읽기) | 4 |
| w (쓰기) | 2 |
| x (실행) | 1 |
즉, 예를 들어 읽기와 쓰기 권한만 부여하고자 한다면 4 + 2 = 6으로 표기하면 된다. 쓰기와 실행 권한만 부여하고자 한다면 2 + 1 = 3을 표기하면 된다. 이렇듯, 각 권한들을 모두 묶어 부여하고자 할 땐 각각의 권한에 부여된 고유 숫자들을 더해 부여하면 된다.
앞서 644 라 쓴 것은 차례대로 User: 6, Group: 4, Other: 4로 부여한 것이다. Group 및 Other 사용자에게는 접근 권한을 그대로 둔 채, User에 대해 쓰기 권한만 있던 상태에서 읽기 권한도 부여하고자 했기에 4 + 2 = 6을 표기한 것이다.
이와 같이 각 파일마다, 그리고 사용자마다 각각의 파일 접근 권한들을 다르게 할 수 있음을 살펴보았다.
파일 확장자
윈도우에서는 텍스트 파일인지 실행 가능한 파일인지, 이미지 파일인지 등을 구분하기 위해 sample.txt , myphoto.jpg 와 같이 점(.) 뒤에 정해진 파일 확장자로 표시한다. 기존 파일 확장자를 다르게 변경할 경우, 경우에 따라 파일이 정상적으로 실행되지 않을 수도 있다. 이처럼 윈도우에서는 파일명 뒤에 따라오는 확장자 표기가 중요함을 알 수 있다.
반면 리눅스에서는 사실 확장자가 굳이 없어도 된다. 앞서 ls 와 같은 명령어에 대한 파일명도 which 를 통해 알아보았을 때 ls 로만 표기되어 확장자가 없음을 보았다. 물론 리눅스에서도 사용자가 보기에 어떤 파일인지를 단번에 알 수 있도록 하기 위해 윈도우에서와 똑같은 방식으로 파일명 뒤에 . 점을 붙이고 확장자를 쓸 수도 있다. 다만 그렇다고 해서 그 확장자에 따라 파일 유형이 실제로 바뀌는 것은 아니다. 그저 텍스트로만 표기하는 것 뿐이라 보면 된다. 예를 들어 리눅스에서 sample.txt 를 sample.jpg 와 같이 바꾼다고 해서 해당 파일의 유형이 변형되거나 하진 않는다. 참고로 리눅스에서는 “확장자”라는 용어 대신 “서픽스(suffixes)”란 표현을 쓴다고 한다.
한 편 리눅스에서는 아예 파일명 맨 처음부터 . 점을 쓸 수도 있는데, 이를 보통 닷 파일 (dot file)이라 부른다. 실제로 .bashrc 와 같은 기본 파일들도 존재하는데, 이렇게 점으로 시작하는 파일들은 보통 환경 설정 등의 특수 용도로 사용되며, 일반적으로는 사용자 눈에 보이지 않게 설정되어 있다.
다음은 사용자 홈 디렉터리에서 ls 명령어를 입력하여 해당 디렉터리에 어떤 파일들이 있는지를 확인하는 모습이다.

사진 3-1.
현재는 앞서 만들었던 sample.txt 파일밖에 안 보인다. 이번에는 ls -a 을 입력해보자. 여기서의 -a 옵션은 숨겨진 파일들까지 보여주는 옵션이다.

사진 3-2.
앞서 언급한 .bashrc 등의 여러 닷 파일들이 같이 보이는 것을 확인할 수 있다.
패키지 매니저
Nodejs를 이용하여 애플리케이션 개발 시 필요한 의존성들은 보통 npm과 같은 패키지 매니저를 이용하여 다운로드 받아 사용했을 것이다. 하나의 의존성(dependency)에도 또 다른 의존성들을 필요로 하는 경우가 많아 원래라면 사용자가 일일이 이들을 구했어야 했을 것인데, npm과 같은 패키지 매니저가 이를 자동으로 알아서 다운로드해준다. 뿐만 아니라 각 의존성에 맞는 버전까지도 호환성 있게 받을 수 있다.
윈도우 데스크톱에서는 사용자가 원하는 프로그램이 있을 때에는 제 3자 사이트에서 다운로드받아 설치하곤 했을 것이다. 보통 해당 설치 파일 내에 프로그램을 구동할 때 필요한 라이브러리 및 의존성들이 이미 있을 것이다. 그래서 사용자는 별도의 추가적인 설치 없이도 해당 프로그램을 단 한 번만 데스크톱에 설치하여 구동시킬 수 있었다.
반면 리눅스에서는 프로그램을 설치할 때 기본적으로는 해당 프로그램만 설치될 뿐, 그 프로그램을 구동할 때 필요한 의존성 라이브러리들은 별도로 설치했어야 헀다고 한다. 이러한 불편함을 해결하기 위해 리눅스에서도 패키지 매니저라는 것이 존재한다.
리눅스에서는 다양한 배포판이 있듯, 배포판마다 서로 다른 패키지 매니저를 사용한다. Ubuntu 등의 Debian 계열에서는 주로 apt 시스템 패키지 매니저, deb 방식 등이 사용되며, RedHat 계열에서는 RPM을, CentOS에서는 dnf라는 패키지 매니저를 사용한다고 한다.
예를 들어, Ubuntu에서는 apt update 라는 명령어를 통해 패키지 매니저 자체를 업데이트 할 수 있다. 이 때 해당 명령어를 실행하려면 관리자 권한이 필요하기에 임시로 관리자 권한으로 명령어를 실행하기 위해 앞에 sudo 를 붙여 실행한다. 그래서 sudo apt update 라 치면 처음에는 현재 계정에 대한 인증을 위해 비밀번호를 입력하라고 뜬다. 이를 입력하고 엔터키를 입력하면 자동으로 apt 패키지 매니저를 새로 업데이트하는 과정을 거치게 된다.
이렇듯, 리눅스의 CLI 환경에서 인터넷을 통해 특정 프로그램들을 설치하고자 할 때 이러한 패키지 매니저를 통해 설치하곤 한다. 그러면 해당 프로그램을 구동할 때 필요한 또 다른 의존성까지 자동으로 다운로드받기에 매우 편리하다.
References
[2] 지은이: ANK Co., Ltd., “Linux가 보이는 그림책”, “(주)도서출판 성안당”, (2022)
[3] 파일시스템 계층구조 표준
[4] Filesystem Hierarchy Standard
[5] 참고 - 2026년 리눅스 데스크톱 점유율
리눅스는 이제 충분히 좋다, 2026년은 당신의 데스크톱에서 리눅스의 해로 만들자 | GeekNews
[6] Linux Statistics 2026: Desktop, Server, Cloud & Community
[7] 참고용 - Github Actions에서의 runner 운영체제별 요금제
GitHub Actions 비용 청구 - GitHub 문서
[8] windows VS Linux server
Linux vs. Microsoft Windows Servers, The Ultimate Showdown
[9] [OS] Windows Server vs Linux Server
[10] 나무위키 - Linux
[11] 01-5 리눅스 운영체제
[12] 리눅스
[13] [Linux 초보 탈출] 리눅스 파일 시스템에 대해 알아 봅시다.
[15] 윤영빈 외 3인, “수제비 2025 - 정보처리기사 실기 기본서 vol.2”, ch 11-1 “운영체제의 특징” 참고, 수제비
[16] 패키지 매니저 관련 내용
패키지 매니저(Package Manager) 그리고 ubuntu 기본 세팅
-
업데이트조차도 최대 5주 정도 미룰 수만 있지 그 후부터는 사용자의 선택권 없이 강제로 업데이트를 진행시킬 수밖에 없어 급한 일이 있을 때 그 시간 동안 데스크톱을 사용할 수 없다는 문제점도 있다. ↩
-
다만, 여전히 대부분의 사용자들은 데스크톱에서 윈도우에 익숙함을 느껴 낯설게 보이는 리눅스에 대해 어려움을 느끼며, 아직 리눅스에서도 윈도우에서 사용 가능한 프로그램들을 모두 사용 가능한 정도는 아니기에 이에 대해서는 리눅스가 풀어야 할 숙제로 남아있다. ↩
-
즉, Windows server는 애초에 상업용이다. ↩
-
참고 - “https://docs.github.com/en/billing/concepts/product-billing/github-actions#baseline-minute-costs” ↩
-
실제로 필자도 최근에 속도가 느려 몇 년이나 안 쓰던 Windows 10을 사용하던 구형 노트북을 Linux Mint로 바꿔보았더니 확실히 이전보다는 반응 속도가 개선되었음을 느꼈다. 물론 노트북 하드웨어 자체가 옛날 것이기도 하고 RAM 용량도 적고 CPU도 좋은 편은 아니라 운영체제 변경만으로는 그 이상의 성능 개선 체감을 할 수 없다는 한계가 있긴 하다. ↩
-
앞서 살펴본 통계 출처에 따르면, 서버 시장에서의 리눅스 점유율 중 알려지지 않은 리눅스 배포판 점유율이 무려 76.5%나 된다고 한다. 물론 이 중에는 Ubuntu 등 유명한 배포판들도 포함되어 있지만 어떠한 이유로 이를 인식할 수 없었거나, docker container로 사용하여 이를 인식할 수 없던 이유도 있을 것이다. 다만 상대적으로 잘 안알려진 리눅스 배포판들이 존재하기도 하기 때문에 이 수치는 전 세계적으로 꽤 다양한 리눅스 배포판들을 사용한다는 방증이 될 수 있다고 본다. ↩
-
폴더나 디렉터리나 여러 파일들을 담는 구조라는 점에서는 동일하지만 용어에 대해선 윈도우에서는 폴더, 리눅스에서는 디렉터리라는 용어로 사용한다. ↩
This content is licensed under
CC BY-NC 4.0
댓글남기기