目次

1. はじめに
2. Linuxとは
3. ディレクトリ構造
4. 基本的なコマンド
5. パーミッションとアカウント管理
6. プロセス管理とパッケージ管理
7. さいごに

1. はじめに

初めまして!26卒の中田陸です。
最近健康のために筋トレを始め、筋肉痛に苦しめられています。

本記事では、5/12~5/13に行われたLinuxの基礎研修の内容をまとめています。
Linuxの基本的なことをできるだけわかりやすく書いたつもりですので、初学者の方の参考になれば幸いです。

2. Linuxとは

Linuxとは、一言でいうとOSの一種です。WindowsやMacの仲間だと思えばイメージしやすいかもしれません。
OSを理解する上で外せないのが、カーネルシェルという2つの存在です。

核心部分である「カーネル」と、受付役の「シェル」

  • カーネル(Kernel)

OSの本体です。画面の表示やメモリの管理など、コンピュータのハードウェアを直接動かす最も重要な役割を持っています。ただし、ユーザが直接カーネルを操作するのは困難です。

  • シェル(Shell)

ユーザがカーネルに命令を出すためのインターフェースです。CLIシェルでは、ユーザの命令をコマンドとしてカーネルに伝えてくれます。これによりユーザはコマンドでコンピュータを操作できます。

ディストリビューション

Linuxの特徴は、ソースコードが無料ですべて公開されているOSS(オープンソースソフトウェア)である点です。
世界中の天才たちが改良を重ねた結果、様々な派生 OS が誕生しました。この派生版たちのことを「ディストリビューション」と呼びます。
よく使われる代表的なものは、大きく分けて以下の2つの系統があります。

  • Red Hat系(ビジネス・サーバー向け):企業でよく使われる信頼性の高い系統。 Rocky Linux や、かつて主流だった CentOS などがこれに当たります。
  • Debian系(幅広い用途・開発向け):初心者からサーバー環境まで幅広く使われる系統。Ubuntu などが有名です。

このように、用途に合わせてディストリビューションを選べる自由度の高さも、Linuxが世界中で使用されている理由の一つです。
ちなみにLinuxの開発者であるリーナス・トーバルズ氏はバージョン管理システムであるGitの開発者でもあります。

3. ディレクトリ構造

Linuxのファイルシステムは、Windowsの「Cドライブ」「Dドライブ」のような独立した区切りがありません。
すべてのディレクトリ(フォルダ)が、/ 」(ルートディレクトリ) を頂点とした、階層構造になっています。

すべての根っこ「ルートディレクトリ」

もっとも上の階層にある「 / 」は、すべての出発点です。システムを構成するあらゆるデータや設定ファイルが、このルートディレクトリの下に枝分かれしてぶら下がっています。

 / (ルート)
 ├── home/  (一般ユーザのホーム)
 ├── root/  (最高管理者のホーム)
 ├── etc/   (設定ファイル)
 ├── var/   (ログなど変更されるデータ)
 └── bin/   (基本コマンド)

場所の指定方法:「絶対パス」と「相対パス」

Linuxでファイルやディレクトリの場所を指し示す方法には、「絶対パス」と「相対パス」の2種類があります。

絶対パス

ルートディレクトリ/ を基準にして、省略せずに最初からすべての住所を書き出す方法です。

  • 例: /home/riku/list.txt(どこにいても必ず同じファイルを指します)

相対パス

自分が今いる場所(カレントディレクトリ)を基準にして、そこからの目的地への行き方を表す方法です。
そして、この相対パスを使うときに欠かせない、現在の位置を表す特別な記号が以下の2つです。

  • . カレントディレクトリ(今いる場所)を表します。
  • .. 親ディレクトリ(1つ上の階層)を表します。

なんか点がいっぱいあって混乱しますね。

各ディレクトリの役割

ルートディレクトリの直下には、役割ごとに整理された標準的なディレクトリが配置されています。特によく触れる重要なものを下記にまとめました。

  • /home

一般ユーザごとに用意される個人専用のスペースです。例えば「riku」というユーザなら /home/riku というディレクトリになり、自分のファイルは基本的にこの中で管理します。

  • /etc

OSやインストールしたアプリケーションの設定ファイルが格納されています。システムの挙動を変えたいときは、この中にあるファイルを編集します。

  • /var

システムが動く中で頻繁に変更されるデータが置かれます。エラーが発生した原因を調べるためのログファイル(/var/log)などがここに保存されるため、トラブルシューティングの際に開く場所です。

  • /bin

Linuxを操作するための基本コマンド(実行ファイル)が格納されています。 lscat などのコマンドの実体は、実はこの中に置いてあります。

  • /root

最高管理者である「rootユーザ」専用のホームディレクトリです。一般ユーザの /home とは完全に区別された特別な場所にあります。

このように、Linuxは「どこに何が置いてあるか」のルールが決まっているため、役割を頭に入れておくと「あの設定を変えたいから /etc を見よう」「エラーが出たから /var のログを確認しよう」と、迷わず動けるようになります!

4. 基本的なコマンド

Linuxの操作は、黒い画面(ターミナル)に「コマンド」と呼ばれる命令を入力して実行するのが基本です。

コマンドは基本的に、以下のような組み合わせで構成されています。
[コマンド] -[オプション] [引数(対象のファイルやフォルダ)]

例:ls -l /home(意味:/home ディレクトリの中身を、詳細な一覧形式(-l)で表示)

Linuxには無数のコマンドやオプションが存在します。すべてを暗記する必要はありませんが、まずは研修でもよく使った基本的なコマンドをご紹介します。

※オプションや詳しい使い方は膨大になってしまうため、本記事では割愛します。気になる方は各自で調べてみてください!

ファイル・ディレクトリ操作

  • cd (Change Directory)

作業するディレクトリ(フォルダ)を移動します。cd /etc のように移動先を指定して使います。これが無いとどこにも行けない、すべての基本となるコマンドです。

  • ls (List)

現在いるディレクトリの中身(ファイルやフォルダの一覧)を表示します。とりあえず移動したら叩くコマンドです。個人的に最も使う頻度の高いコマンドです。ファイルを実行しようとした時に、指定した場所にファイルが存在しないことがよくあり確認のために使います。

  • pwd (Print Working Directory)

現在自分が作業しているディレクトリの絶対パスを表示します。ターミナルで迷子になったらこのコマンドを叩いて現在地を確認しましょう。

  • cp (Copy)

ファイルやディレクトリをコピーします。
cp [コピー元] [コピー先] のように指定します。

  • mv (Move)

ファイルやディレクトリを移動させたり、名前を変更したりするときに使います。

  • rm (Remove)

ファイルやディレクトリを削除します。LinuxにはWindowsの「ゴミ箱」のような救済措置がないため、実行する際は少し緊張感が必要なコマンドです。ちなみに私は学生時代に数日間作業したファイルを消したことがあります。

実際のターミナル画面で見る「cd」の動き

移動前 移動後
befor_cd.png after_cd.png
pwdカレントディレクトリを確認します。カレントディレクトリは/home/ec2-userです。

実は[ec2-user@host001 ~]でもカレントディレクトリが確認できます。[(ユーザ名)@(サーバ名) (カレントディレクトリ)]となっており~はログインしたユーザのホームディレクトリ/home/ec2-userを表す特殊な記号です。

cd を実行したことでカレントディレクトリが/etcになりました!

コマンドの作業は上記の画像のよう真っ黒い画面と文字しかないので、はっきり言ってめちゃくちゃ分かりにくいです。ただ、ハッカーみたいでかっこいいためモチベは保ちやすいはずです。

テキスト操作

  • cat (Concatenate)

ファイルの中身(テキスト)をターミナル上にサクッと表示して確認するときに使います。

  • grep (Global Regular Expression Print)

ファイル内や出力結果の中から、特定の文字列が含まれる行だけを検索して抽出するコマンドです。ログファイルからエラーを探すときなどに活躍します。

  • vi / vim (Visual Editor)

ターミナル上でファイルを編集するためのテキストエディタを起動します。Windowsのメモ帳のようなものですが、文字を入力する「インサートモード」と、保存や終了を行う「コマンドモード」を切り替える必要があり、慣れるまでは少し癖があります。
コマンドモードに気づかないまま文字を入力しようとして、パソコンが壊れたと焦るのは誰もが通る道だと思います。

コマンドを組み合わせる便利機能(リダイレクト・パイプ)

コマンドの出力結果を別の場所に流し込む便利な機能です。コマンドを組み合わせることで複雑な処理が可能になります。

一見すると、コマンドが長くなって複雑で難しいことをしているように見えるかもしれません。私自身、最初はこれが得意ではありませんでしたし、今でも複雑なものは少し身構えてしまいます。

しかし、長いコマンドも基本は左から順番に、一つずつ処理が流れていくだけです。
難しそうだと感じたときは、まずは記号( >| )のところでコマンドを区切って、分解して一つずつ理解してみてください。全体の流れが見えてくるようになります。

  • > / >> (リダイレクト)
    コマンドの実行結果を、画面ではなくファイルに書き込みたい(保存したい)ときに使います。
    • > :上書き保存(元の内容は消える)
    • >>:追記保存(元の内容の後ろに足される)

    例:ls > list.txt (一覧の結果を画面に出さず、list.txtというファイルに保存する)

  • | (パイプ)
    左側のコマンドの実行結果を、右側のコマンドの入力としてそのまま引き渡す機能です。複数のコマンドを数珠つなぎにできます。

    例:cat error.log | grep "Critical" (ログファイルの中身を開き、その中から “Critical” という文字が含まれる行だけを抽出する)


紹介したコマンドは本当に基本中の基本ですが、これらを組み合わせるだけでも大体のファイル操作ができるようになります。まずは手を動かして、それぞれの挙動に慣れていきましょう!

5. パーミッションとアカウント管理

Linuxは、複数のユーザが同時にログインして使うことを前提としたOSです。そのため、「誰がどのファイルを触っていいか」を厳しく管理する仕組みが備わっています。

所有権と権限(rwx)

Linuxのファイルやディレクトリには、必ず「所有者(ユーザ)」「所有グループ」が設定されています。そして、それぞれに対して以下の3つの権限(パーミッション)を割り当てます。

  • r (Read / 読込権限):ファイルの中身を見る、ディレクトリの一覧を見る権限
  • w (Write / 書込権限):ファイルの中身を書き換える、ディレクトリ内にファイルを作る権限
  • x (Execute / 実行権限):ディレクトリを通過したり、配下のファイルへアクセスしたりするために必要な権限

ls -l コマンドを叩いたときに画面の左側に -rwxr-xr-x のような謎の文字列が表示されたかと思います。
これは、「所有者」「グループ」「その他の人」の3人組に対して、それぞれ r w x のどの権限があるかを順番に示しているものです。

これによって、大切な設定ファイルを一般ユーザに勝手に書き換えられないように保護しています。

実際のターミナル画面で見るパーミッション
testdirdrwxr-xr-x. 2 ec2-user ec2-user と表示されています。これはディレクトリ(d)であり、所有者(ec2-user)には読み・書き・実行権限(rwx)が、グループ(ec2-user)とその他の人には読み・実行権限(r-x)が与えられていることを示しています。

また ls -alでは隠しファイルや隠しディレクトリも確認できます。

数字で表すパーミッション

実務では、権限を rwx ではなく 755644 といった3桁の数字 で表現することがよくあります。

これは、「権限がある=1」「権限がない=0」という2進数のフラグになっており、それを10進数に変換した数字が使われているからです。

仕組みはとてもシンプルで、r w x の順に2進数に対応しています。

権限 r (読込) w (書込) x (実行)
2進数の位置 「r」の位置 (1 0 0) 「w」の位置 (0 1 0) 「x」の位置 (0 0 1)
10進数の点数 4 2 1

例えば、読み書きはできるけど、実行はできない(rw-)という状態なら、2進数にすると 1 1 0 になります。これを10進数に変換(4 + 2 + 0)すると 6 になる、という仕組みです!

この計算を「所有者」「グループ」「その他の人」の3人分、それぞれ行って3桁の数字に並べます。

よく使う代表的なパターン

* 755 (rwxr-xr-x)
* 所有者:1 1 17 (フル権限)
* グループ:1 0 15 (読み込みと実行だけ)
* その他:1 0 15 (読み込みと実行だけ)
* 用途:プログラムの実行ファイルや、ディレクトリ(フォルダ)によく使われます。

* 644 (rw-r–r–)
* 所有者:1 1 06 (読み書き可能)
* グループ:1 0 04 (読み込みだけ)
* その他:1 0 04 (読み込みだけ)
* 用途:一般的なテキストファイルや設定ファイルによく使われます。

ユーザ・グループの追加、編集

実際に新しくユーザを追加したり権限を変更したりする「アカウント管理」のコマンドも紹介します。

  • useradd / groupadd

新しいユーザやグループを作成します。

  • usermod

既存のユーザの設定(所属するグループの変更など)を編集します。

  • chmod (Change Mode)

ファイルやディレクトリの権限(rwx)を変更します。

注意:管理者権限(root)が必要
ユーザの追加やシステムの権限変更といった重要な操作は、一般ユーザ(rikuなど)のままでは実行できません。最高管理者である root ユーザに切り替えるか、コマンドの先頭に sudo (管理者権限)をつけて実行する必要があります。

6. プロセス管理とパッケージ管理

最後に、現在どんなプログラムが動いているかを把握すること(プロセス管理)と、必要なツールを導入すること(パッケージ管理)について説明します。

現在動いているプログラムを監視する「プロセス管理」

Linux上で行われるすべての処理(コマンドやアプリケーションの実行など)は、「プロセス」という単位で管理され、それぞれに「PID」という識別番号が割り振られます。

Windowsでいう「タスクマネージャー」を開いて、重いアプリを強制終了させるような操作を、Linuxでは以下のコマンドで行います。

  • ps (Process Status)

現在動いているプロセスの一覧を表示します。よく ps aux というオプションを組み合わせて、システム全体の動きを確認します。

  • top

リアルタイムでプロセスの動きや、CPU・メモリの変動を監視するコマンドです。サーバーの動作が重いときに、何が原因かを突き止めるために使います(q キーで終了します)。

  • & (バックグラウンド実行)

コマンドの末尾に & をつけて実行すると、その処理を画面の裏側(バックグラウンド)で実行させることができます。時間のかかる処理を裏側で走らせつつ、自分は手前の画面で別の作業を続けたいときに大活躍します。
* 例:sh script.sh &

  • jobs / fg (Foreground)

jobs は裏側で動いているタスクの一覧を表示します。
fg %[ジョブ番号] を使うと、裏側で動いていた処理を手前の画面(フォアグラウンド)に戻すことができます。

  • kill

暴走して止まらなくなったプログラムや、不要になったプロセスを強制終了(停止)させるコマンドです。
kill [PID(プロセスの識別番号)] のように指定して、裏で動いているプロセスを狙い撃ちで停止させます。

ツールを簡単に管理する「パッケージ管理」

Linuxで新しいアプリケーションや便利なツールを使いたいとき、ソースコードをダウンロードして一から組み立てるのは非常に大変です。
そこで、スマホの「App Store」や「Google Play」のように、安全な場所から簡単にソフトをインストール・管理できる仕組みが「パッケージ管理」です。

使うコマンドは、ディストリビューション(OSの系統)によって異なります。

  • yum / dnf (Red Hat系)

CentOSRocky Linux などで使われます。
* 例:sudo yum install [ツール名]

  • apt (Debian系)

個人開発などで人気の Ubuntu などで使われます。
* 例:sudo apt install [ツール名]

どちらも裏側でインターネット上の倉庫(リポジトリ)にアクセスし、指定したツールを自動でダウンロードして安全にインストールしてくれます。非常に強力なコマンドなので、ここでも先頭に sudo(管理者権限)をつけて実行するのが基本です。

7. さいごに

実は、私は大学の研究室で機械学習を扱っており、当時からLinuxサーバー自体は日常的に触っていました。そのため、今回の研修の内容も比較的スムーズに理解することができました。しかし、当時は必要な操作をその都度調べていただけだったため、今回のように基礎から体系的に学び直せたことは自分にとって非常に良い経験となりました。

Linuxは、本記事で紹介した内容以外にも本当にさまざまなことができます。だからこそ、すべてのコマンドや操作を暗記することは現実的ではありません。

大切なのは覚えることではなく、やりたいことができたときに「自分で調べながら形にする力」だと思います。

実務に出てからも、「〇〇したいけれど、そのためには△△する処理が必要だな。△△するコマンドがあるかな?」と仮説を立てて調べる力が求められるはずです。

今回の研修で強固になった基礎を土台に今後は自走力(調べる力)を磨き、実務でLinuxを活用していきたいと思います!
最後までお読みいただき、ありがとうございました!