▪️学習のきっかけ
Linuxは誕生から30年が経過した今も、時間の経過とともに衰退するどころか、ますます重要なオペレーティングシステムとしての地位を確固たるものにしている。
これまでLinuxを体系的に深く掘り下げることはせず、実務上の経験則のみで凌いできた。問題が発生すればその都度コマンドをググってコピー&ペーストし、当座の動作が確認できれば「解決した」として済ませてきた時間があった。しかし、年次を重ね、担当する業務が増えるにつれて、この手法の限界を痛感している。
単にコマンドを入力するだけなら、それはエンジニアではなくタイピストである。これからは、なぜこの設定が必要なのか、カーネル内部ではどのようなプロセスで動作しているのか、そしてなぜこのような構造で設計されたのかという「根本」を理解しなければならない。断片化された知識では、複雑な障害を前にした際に論理的な推論が不可能である。基礎が揺らげば、その上に積み上げたDevOpsの技術も、土台の脆さゆえに長くは持ち堪えられないであろう。今はツールの使用法ではなく、システムの本質を正しく掘り下げるべき時であると考える。
学習は、自身が所属している「コンテナ基盤チーム」のリーダーさんが推薦してくれた書籍を用いて進める予定である。歩みは遅くとも正確に、少しずつ学習を継続していく所存である。
https://www.oreilly.co.jp/books/9784814400218/
入門 モダンLinux
Linuxはサーバ、組み込み機器、スーパーコンピュータなどにおいて存在感を示してきました。近年では、オンプレミスのシステムだけではなく、クラウドサービスでも広く使われています。
www.oreilly.co.jp
1-1. モダン(現代的)環境とは何か
モダンが実際に意味する所は何であろうか。モダンとは、クラウドコンピューティングからラズベリーパイに至るまで、あらゆるものを意味し得る。
- モバイルデバイス
- クラウドコンピューティング
- モノのインターネット(IoT)
- プロセッサアーキテクチャの多様性 上記のようなあらゆる状況を総称して「モダン環境」と定義することができる。すべてではないにせよ、大部分はLinux上で実行されているか、何らかの形でLinuxを使用している。
1-2. これまでのLinux
2021年、Linuxは30歳の誕生日を迎えた。数十億人のユーザーと数千人の開発者を擁するLinuxプロジェクトは、疑いようもなく世界的な(オープンソース分野における)成功事例である。
1-3. オペレーティングシステム(OS)はなぜ必要なのか
オペレーティングシステムが全く存在しないか、何らかの理由で使用不能になったと仮定する。その場合、メモリ管理、割り込み処理、I/Oデバイスとの通信、ファイル管理、ネットワークスタックの構成および管理など、ほぼすべての作業を直接処理しなければならない。このように、すべての重い作業を遂行して多様なハードウェア構成要素を抽象化し、Linuxカーネルのような設計されたAPIを提供する。 一般的には、OSが公開するAPIを指して「システムコール(System Call)」と呼ぶ。Go、Rust、Python、Javaなどの高級プログラミング言語は、これらのシステムコールの上にビルドされ、システムコールをラップしたライブラリが提供される。
- API (Application Programming Interface) APIは「規格化された窓口」である。内部実装がどのようになされているかを知らなくとも、定められた規則に従って要求すれば結果を返す約束事である。 例:レストランのメニュー。厨房でどのように調理するかを知らなくとも、メニューに記載された通りに注文すれば料理が出てくるのと同様である。
- システムコール (System Call) システムコールは「OSに対する公式な要請書」である。プログラムがハードウェア(ディスク、ネットワーク、メモリ等)を直接操作することは危険であるため、オペレーティングシステム(カーネル)に「これを代わりにやってほしい」と依頼する唯一の通路である。 例:一般人が銀行の金庫に直接入ることはできないため、銀行の窓口担当者に「お金を出金してください」と依頼する行為である。
- システムコールの上にビル드(構築)される (Abstraction) 高級言語が複雑な手順をあらかじめすべて処理しているという意味である。Linuxでファイルを一つ保存するには、数十種類のシステムコールと複雑な手順を経なければならないが、PythonやJavaはこれをわずか一行の関数であらかじめ作成している。 例:
- システムコールレベル:「A区域の3番ディスクセクタを開き、書き込み権限を確認し、バイナリデータを入力せよ」
- 高級言語(Python):file.write("Hello") — 内部的に上記の複雑な過程(システムコール)を自動的に実行する。
1-4. Linuxディストリビューション
カーネルと関連する構成要素の全体的なバンドルを意味し、これにはパッケージ管理、ファイルシステムレイアウト、initシステム、ユーザーがあらかじめ選択したシェルが含まれる。
1-5. リソースの可視性
Linuxは基本的にリソースの「グローバルビュー(전역보기)」をサポートする。 グローバルビューとは、オペレーティングシステムが管理するすべてのリソース(CPU、メモリ、プロセス、ファイル等)を、一つの巨大なシステム観点からすべて見ることができる権限と状態を意味する。 リソースとは、ソフトウェアの実行を支援するために使用可能なすべてのものとみなす。ここにはハードウェアとその抽象化(例:CPU、RAM、ファイル等)、ファイルシステム、HDD、SSD、プロセス、デバイスやルーティングテーブルのようなネットワーキング関連の項目、ユーザーを表す資格情報が含まれる。
1-5-1. PID
同一のPIDを持つプロセスがLinux内に複数存在し得るか。答えは「然り」である。ネームスペースと呼ばれる異なるコンテキストには、同一のPIDを持つ複数のプロセスが存在し得る。 すべてのプロセスはPID 1が特別であるとみなす。伝統的な設定において、PID 1はユーザー空間のプロセスツリーのルート用に予約されている。
- PID 1の特殊性:「すべてのプロセスの祖先」 Linuxが起動すると、カーネルが最初に実行するユーザープロセスがPID 1である。すべてのプロセスは親が子を生む構造であるが、その系譜を遡れば最後に1番がある。したがって、1番はシステム全体を管理するルート(Root)の役割を果たす。
- グローバルビュー (Global View) vs 仮想化されたビュー (Local View)
- グローバルビュー (Global):サーバに接続したAとBが同じく /var/log フォルダを見、同じプロセスリストを見る状態である。「私たちは同じコンピュータを使っている」という事実を全員が知っている状態を指す。
- 仮想化されたビュー (Local):実際には同じコンピュータにあるが、カーネルが細工をして「この部屋には自分一人だけだ」と信じ込ませる状態である(これがコンテナの核心原理である)。
- 「Linuxのすべては基本的にグローバルか?否」の意味 Linuxカーネルは、以前はすべてのものを「グローバル」として見せていた。しかし、現代のLinuxは「ネームスペース(Namespace)」という技術を通じて、これを選択的に分離できるように設計されている。
- デフォルト値:何も設定しなければグローバル(Global)に見える。
- 実際:しかし、カーネル内部的には、すべてのリソース(プロセス番号、ネットワーク、ファイルシステム)を「グループ別に個別に見せることができる機能」を既に備えている。 結論:「Linuxは無条件にグローバルである」と断定できない理由は、カーネルがユーザーごと、あるいはプロセスごとに「異なる世界(仮想化されたビュー)」を見せる能力を持っているためである。
▪️학습계기
리눅스는 탄생한지 30년이 지났음에도 시간이 지날수록 쇠퇴하기는커녕 점점 더욱 중요한 운영체제로 자리를 확고히 다지고 있다.
그동안 리눅스를 제대로 파지 않고 실무 깡다구로만 버텼다. 문제가 터지면 그때그때 명령어 구글링해서 복붙하고, 당장 돌아가면 "해결했다"라며 넘어갔던 시간들. 하지만 연차가 쌓이고 담당하는 업무가 많아질수록 이 방식의 한계를 뼈저리게 느낀다.
단순히 명령어를 입력하는 건 엔지니어가 아니라 타이피스트다. 이제는 이 설정이 왜 필요한지, 커널 내부에서는 어떤 프로세스로 동작하는지, 그리고 왜 이런 구조로 설계되었는지 그 '근본'을 알아야만 한다. 파편화된 지식으로는 복잡한 장애 앞에서 논리적인 추론이 불가능하다. 기초가 흔들리면 그 위에 쌓은 데브옵스 기술들도 기초가 약해 오래 견디지 못 할 것이다. 이제는 툴 사용법이 아니라 시스템의 본질을 제대로 파고들어야 할 때라고 생각한다.
학습은 내가 소속되어 있는 컨테이너팀의 리더상이 추천해준 책으로 학습할 예정이고, 조금 느려도 정확하게 조금씩 학습해 나아갈 생각이다.
https://www.oreilly.co.jp/books/9784814400218/
入門 モダンLinux
Linuxはサーバ、組み込み機器、スーパーコンピュータなどにおいて存在感を示してきました。近年では、オンプレミスのシステムだけではなく、クラウドサービスでも広く使われています。
www.oreilly.co.jp
리눅스는 모바일 디바이스부터 클라우드에 이르기까지 모든 분야에서 가장 널리 사용되는 운영체제이다.
일반적으로 운영체제의 역할이 무엇이며 리눅스가 어떻게 역할을 수행하는지를 학습 해 나아가겠다.
1-1.모던(현대적인)환경이란 무엇인가
모던이 실제로 의미하는 바는 무엇일까? 모던이란 클라우드 컴퓨팅부터 라즈베리 파이에 이르는 모든 것을 의미할 수 있다.
- 모바일 디바이스
- 클라우드 컴퓨팅
- 사물인터넷
- 프로세서 아키텍처의 다양성
위와같은 모든 상황을 일컬어 모던 환경이라 정의할 수 있다. 전부는 아니더라도 대부분은 리눅스에서 실행되거나 어떤 형태로든 리눅스를 사용한다.
1-2.지금까지의 리눅스
2021년 리눅스는 30번째 생일을 맞았다. 수십억 명의 사용자와 수천 명의 개발자를 거느린 리눅스 프로젝트는 의심할 여지 없이 전 세계적인(오픈소스 분야의)성공 사례다.
1-3.운영체제(OS)는 왜 필요한가
운영체제가 아예 없거나 무슨 이유인지 사용할 수 없게 됐다고 가정해 보자. 그러면 메모리 관리, 인터럽트 처리,I/O 디바이스와의 통신, 파일 관리, 네트워크 스택 구성과 관리 등 거의 모든 작업을 직접 처리 해야 한다. 이처럼 모든 무거운 작업을 수행해 다양한 하드웨어 구성 요소를 추상화하고 리눅스 커널 같은 설계된 API를 제공한다.
일반적으로는 OS가 공개하는 API를 일컬어 System Call이라고 부른다. 고, 러스트, 파이썬, 자바 등의 고급 프로그래밍 언어는 이러한 System Call위에 빌드되며 시스템 콜을 래핑한 라이브러리가 제공된다.
1. API (Application Programming Interface)
API는 '규격화된 창구'입니다. 내부 구현이 어떻게 되어 있는지 몰라도, 정해진 규칙대로 요청하면 결과값을 돌려주는 약속입니다.
- 예시: 식당의 메뉴판. 주방에서 요리를 어떻게 하는지 몰라도, 메뉴판에 적힌 대로 주문하면 음식이 나오는 것과 같습니다.
2. 시스템 콜 (System Call)
시스템 콜은 'OS에게 보내는 공식 요청서'입니다. 프로그램이 하드웨어(디스크, 네트워크, 메모리 등)를 직접 건드리는 것은 위험하므로, 운영체제(Kernel)에게 "이것 좀 대신 해줘"라고 부탁하는 유일한 통로입니다.
- 예시: 일반인이 은행 금고에 직접 들어갈 수 없으므로, 은행 창구 직원에게 "돈 좀 인출해 주세요"라고 요청하는 행위입니다.
3. 시스템 콜 위에 빌드된다 (Abstraction)
고급 언어가 복잡한 절차를 미리 다 처리해 두었다는 뜻입니다. 리눅스에서 파일을 하나 저장하려면 수십 가지의 시스템 콜과 복잡한 절차를 거쳐야 하지만, 파이썬이나 자바는 이를 단 한 줄의 함수로 미리 만들어 두었습니다.
- 예시: * 시스템 콜 레벨: "A 구역 3번 디스크 섹터를 열고, 쓰기 권한을 확인하고, 바이너리 데이터를 입력해."
- 고급 언어(Python): file.write("Hello") — 내부적으로 위 복잡한 과정(시스템 콜)을 자동으로 실행합니다.
1-4.리눅스 배포판
커널과 관련 구성 요소의 전체 번들을 의미하며, 여기에는 패키지 관리, 파일시스템 레이아웃,init시스템,사용자가 미리 선택한 셸이 포함된다.
1-5.리소스 가시성
리눅스는 기본적으로 리소스의 전역보기를 지원한다.
전역보기(Global View)란, 운영체제가 관리하는 모든 자원(CPU, 메모리, 프로세스, 파일 등)을 하나의 커다란 시스템 관점에서 전부 다 볼 수 있는 권한과 상태를 의미한다.
리소스란 소프트웨어 실행을 지원하는 데 사용할 수 있는 모든 것으로 간주한다. 여기에는 하드웨어와 그 추상화(예:CPU,RAM,파일 등), 파일시스템, HDD,SSD,프로세스,디바이스나 라우팅 테이블 같은 네트워킹 관련 항목, 사용자를 나타내는 자격증명이 포함된다.
1-5-1.PID
동일한 PID를 가진 프로세스가 리눅스에 여러 개 있을 수 있을까? 대답은 "그렇다"이다. 네임스페이스라고 하는 서로 다른 컨텍스트에는 동일한 PID를 가진 여러 프로세스가 있을 수 있다.
모든 프로세스는 PID 1이 특별하다고 여긴다. 전통적인 설정에서 PID 1은 사용자 공간 프로세스 트리의 루트용으로 예약되어 있다.
1. PID 1의 특별함: "모든 프로세스의 조상"
리눅스가 켜지면 커널이 가장 먼저 실행하는 사용자 프로세스가 PID(Process ID) 1번입니다.
- 모든 프로세스는 부모가 자식을 낳는 구조인데, 그 계보를 거슬러 올라가면 끝에 1번이 있습니다.
- 그래서 1번은 시스템 전체를 관리하는 루트(Root) 역할을 합니다.
2. 전역보기(Global View) vs 가상화된 보기(Local View)
- 전역보기 (Global): 서버에 접속한 A와 B가 똑같이 /var/log 폴더를 보고, 똑같은 프로세스 목록을 보는 상태입니다. "우리는 같은 컴퓨터를 쓰고 있다"는 사실을 모두가 아는 것이죠.
- 가상화된 보기 (Local): 실제로는 같은 컴퓨터에 있지만, 커널이 속임수를 써서 **"너는 이 방에 너 혼자뿐이야"**라고 믿게 만드는 상태입니다. (이것이 컨테이너의 핵심 원리입니다.)
3. "리눅스의 모든 것은 기본적으로 전역일까? 아니다"의 의미
리눅스 커널은 예전에는 모든 것을 '전역'으로 보여줬습니다. 하지만 현대의 리눅스는 **네임스페이스(Namespace)**라는 기술을 통해 이를 선택적으로 분리할 수 있게 설계되었습니다.
- 기본값: 아무 설정을 안 하면 전역(Global)으로 보입니다.
- 실제: 하지만 커널 내부적으로는 모든 자원(프로세스 번호, 네트워크, 파일 시스템)을 **"그룹별로 따로 보여줄 수 있는 기능"**을 이미 가지고 있습니다.
- 결론: "리눅스는 무조건 전역이다"라고 단정 지을 수 없는 이유는, 커널이 사용자마다 혹은 프로세스마다 **서로 다른 세상(가상화된 보기)**을 보여줄 능력이 있기 때문입니다.
'Linux > モダーンリナックス' 카테고리의 다른 글
| 접근제어 (0) | 2026.05.17 |
|---|---|
| シェルおよびスクリプト (0) | 2026.05.16 |
| 2.Linux Kernel (5) | 2026.04.25 |