見出し画像

『ゼロからわかるLinuxコマンド200本ノック』を読んだまとめ


読んだ背景

Linuxとはなにか、OSはどのような立ち位置なのか、どのような役割を担っているのか、周辺知識としてどのようなものがあるか、などを理解するために読もうと思った。
OSの周りの知識はないに等しいので深い理解というよりも、ざっくりと概要を掴むことができることを期待して手に取った。

新しいLinuxの教科書[試して理解]Linuxのしくみ ―実験と図解で学ぶOS、仮想マシン、コンテナの基礎知識も手にとって検討したが、多少知識ある人向け、深堀りすぎていると感じたので最初の一冊としては選ばなかった。
Amazonを見るとLinux+コマンド入門 ——シェルとコマンドライン、基本の力 WEB+DB PRESS plusとかさわって学ぶ Linux入門テキストも気になったけど本屋になかったので諦めた…。

有益だった情報

以下自分が勉強になったと思った点をまとめる。

🏋️OSはコンピュータを動作させる土台となるソフトウェア群

OSはOperating Systemの略称。
OSとは「コンピュータを動作させるための土台となる基本的なソフトウェアの集まり」で、Lineやインスタなどのネイティブアプリや、Google Chromeなどのブラウザアプリは全てOSを土台として動作している。
OSにはAndroidやiOS,MacOS,LinuxOSなど様々なOSがあるが、OSごとに使えるアプリは異なる。

例えば、僕は最近英語を勉強しているからAstueigoさんのDistinction Appというアプリを使いたかったが、iOSで使用できるアプリだったので、Androidユーザーの僕は使えなかった…。
LineとかインスタはiPhone(iOS)やmacbook(macOS)、Galaxy(Android)など異なるOSで使えるが、OSごとにそれぞれで別々に開発を行っている。

OSごとに使えるアプリは異なる、と書いたがそれはなぜなのか。
そもそもアプリ、つまりアプリケーション(application)は日本語で「応用」という意味。
一昔前はOSを「基本ソフトウェア」、基本ソフトウェア上で動作するソフトウェアを「"応用"ソフトウェア」と呼んでいたからアプリケーションと呼ばれるようになった。
OS(基本)があるからこそアプリ(応用)が使用できるので、OSが異なればその上で動作するアプリが異なるのも当然と言える。

ソフトウェアは、コンピュータ上で動作するプログラムやデータの総称です。プログラムは、コンピュータに特定のタスクや機能を実行させる命令の集まりであり、データはプログラムによって処理される情報です。ソフトウェアには、アプリケーションソフトウェア(WordやExcelなどのアプリ)やシステムソフトウェア(OSやドライバなど)などがあります。

ChatGPT

OSはアプリを動かすだけではなく、コンピュータにあって当たり前の必須機能を提供している。例えば以下のような機能を提供している。

  • デスクトップ環境…マウスでアイコンをクリックする操作を出来るようにする

  • ファイルシステム…フォルダでファイルを管理できるようにする

  • ネットワーク通信…インターネットを利用可能にする

  • プロセス管理…ブラウザを開きながらマウス移動などマルチタスクをできるようにする

  • メモリ管理…コンピュータのリソースを効率的に使いながら、プログラムの実行を可能にする

  • デバイス管理…キーボードやディスプレイをカスタマイズ可能にする

  • シェル

  • コマンド

🖥️OSにはカーネルというソフトウェアが存在している

カーネル(kernel)とは「中核」という意味で、OSの中核になっているソフトウェアのこと。
カーネルには主に以下のような役割がある。

  • プロセス管理

  • メモリ管理

  • デバイス管理

ちなみにカーネル(ソフトウェアの1つ)とその他のソフトウェアをパッケージにしてOSとしてすぐに使えるようにしたものをディストリビューション(distribution)という。

もう少し詳細を知りたいのでこちらを読もうと思う。

🪄仮想マシンは物理マシンをソフトウェアで実現したもの

物理マシンとは通常のコンピュータのことで、パソコンもサーバーなどが物理マシンである。
(コンピュータには主な機能として入力、出力、記憶、制御、演算があり、これらは5大機能と呼ばれている)

そして物理マシンの機能をソフトウェアで実現したものを仮想マシンという。
仮想マシンは、仮想化ソフトウェア(UTM, VirtualBoxなど)というアプリケーション上に作成できる。

物理マシンと仮想マシンの違いはハードウェアかソフトウェアかの違いで、仮想マシンも物理マシンと同様にOSはのインストールが必要になる。

物理マシンと仮想マシンのOSはを区別するために以下のように呼び分けることもある。
物理マシンにインストールされているOSを「ホストOS」
仮想マシンにインストールされているOSを「ゲストOS」

例えば仮想マシンを使えば、「ホストOSのmacOSだが、仮想ソフトウェア上に仮想マシンを用意して、そこにLinuxOSやwindowsOSをインストールする」ということが実現可能になる。

引用: https://juku-jp.vmware.com/whatsvm/whatsvm02/

🧙‍♂️スーパーユーザーはあらゆる操作が可能な権限を持つユーザー

スーパーユーザー(rootユーザー)は、読み取り、書き込み、実行、あらゆる操作が可能な最も強い権限を持つユーザーのこと。
スーパーユーザーに対して通常の作業に利用するユーザーを一般ユーザーと呼ぶ。

スーパーユーザーはアプリのインストール、重要な設定ファイルの編集、ユーザーの追加などの操作を行うときに必要な権限。

sudo コマンド

というsudoコマンドでスーパーユーザーとしてコマンドを実行できる。
パスワードを求められるが、パスワードは現在作業している一般ユーザーのものを入力する。

LinuxOSやmacOSは「root」と呼ばれるユーザーがスーパーユーザーに該当する。ß

その他にも、そもそもパーミッションとはなにか、フールプルーフな設計、chmodコマンドでパーミッションを変更する方法に関しても知れた。

🔧パスを通すとは環境変数PATHに新しいパスを追加してファイル名だけで実行出来るようにすること

$ /bin/ls

というように、binディレクトリ内にあるlsファイルを実行するためには通常は絶対パスで指定する必要があるが、

$ ls

と実行出来るようにすることをパスを通すという。

シェルは変数という値を保持する機能があり、その中にPATHという環境変数が存在する。
これは printenvコマンド という環境変数一覧を表示するコマンドでみることが出来る。

$ printenv
...
SHELL=/bin/zsh
USER=username
PATH=/usr/local/bin:/usr/bin:/bin:...

シェルはこのPATHに記載されてあるディレクトリのパスからコマンドを探し出す
PATHは 「:」でパスが区切られている

上で例に挙げたlsファイルはbinディレクトリ内に存在するファイルだが、PATHを確認すると「/bin」記載があるので「ls」だけで実行できる。

$ echo $PATH
/usr/local/bin:/usr/bin:/bin:...

ちなみに新しいパスを追加するには「新しいPATH=今までのPATH:追加するPATH」で追加できる。
例えばもしbinディレクトリが追加されていなければ「PATH=$PATH:/bin」と書く。

改めてだが、環境変数PATHに新しいパスを追加して、ファイル名だけで実行できるようにすることを"パスを通す"という。

結論: OS周辺の登場人物がざっくりと理解できた

Linuxとはなにか、OSはどのような立ち位置なのか、どのような役割を担っているのか、周辺知識としてどのようなものがあるか

を理解するがこの本を読む目的だったが、これに関しては目的を達成することができたと言えると思う。

後半現在の僕にはあまり必要性を感じない内容だった(Vimの操作やテキスト処理のコマンドなどの章)が、読む前はそもそも今必要そうかどうか判断できなかった。Linuxについても

全然浅い知識だろうとは思うが、コンピュータにおいて全体像のどの立ち位置にいてどの役割をしているか、周辺知識としてどのようなものがあるか、基礎的な用語理解は今後さらに深堀るときや、自分にはどのあたりの知識が足りないのかを自分で把握するためにも必要だと思うので読んで良かったと思う。

もっとOSについて学びたくなったら『オペレーティングシステムの仕組み』を次に読んでみようかと思う。

この記事が気に入ったらサポートをしてみませんか?