📑

Linuxパーフェクトブック~超入門~

に公開

はじめに

プログラミング学習を始めると、「PC初心者にはWindowsよりMacがおすすめ」といった情報をよく目にします。
でも正直、僕はその理由にあまり納得感がありませんでした。

調べてみると「開発環境の構築がラク」とか「学習コストが低い」といった説明が出てきますが、どれも抽象的でピンとこない…。
そんな中、Macで何気なく使っていた ls や touch といったコマンドが、Windowsのコマンドプロンプトでは使えないと知り、ようやく違和感の正体に気づきました。
「もしかして、Macが推される理由はこの“コマンド”にあるのでは?」と思い、Linuxの学習を始めました。

今回の記事には、当時の自分が「最初にこれを知っていれば…!」と思った知識をたくさん詰め込みました。
最後まで読んでいただければ、「Linuxってこういうものなんだな」という全体像がつかめると思います。

ぜひ、読んでみてください!

歴史

  • OSの一種で、コンピュータを動かすための基本ソフト
    • 主なOS
      • Windows
      • Mac OS X
      • Linux
      • Android
  • Unixという小さなOSが誕生する
    • 始めは使うためにお金がかかっていた
    • 1985年
      • オープンソースと言う考えで開発されるようになる。
      • ソースコードが公開されていたため派生形のUnixが誕生
      • しかし、ライセンス縛りが厳しい状態
    • 1991年
      • 大学生のリーナス・トーバルズUnixをマネて1からOSを開発した(Linux)
      • 有料だった、UnixがLinuxという形で無料使用可能になった。

Linuxの特徴

メリット

  • オープンソースなのでだれでも使える
  • 世界的に使われているため信頼性が高い
  • 品質の高いソフトウェアが利用可
  • 自動化する仕組みがあり、サーバーの運用が行いやすい

デメリット

  • 商用アプリケーションがあまり存在しない
    • MicrosoftOfficeが動作しない
    • 画像、音楽、動画などのマルチメディア系ファイルを編集するのが苦手
  • 日本語対応されていなことが多い、基本的にドキュメントが英語

Linuxを学ぶ意味??

幅広い場所で使われている

  • サーバー用
  • 組み込み起用

web業界ではサーバーはほとんどがLinuxで構築されている

長年使える

  • 技術が枯れている(長年ユーザに検証されているため大きく変更する必要が無い)
    • 一度習得すれば何年経っても使える

Linuxディストリビューション・カーネル

カーネル:

  • OSの中核となるソフトウェア(カーネル単体では使いにくい)

ディストリビューション:

  • カーネルのいろいろなソフトウェアを組み合わせて使いやすくしたもの
  • 1000種類以上ある

一般的にLinuxとは、ディストリビューションを指している

ディストリビューションの種類

  • Red Hat系
    • Red Had Enterprise Linux
    • CentOS
    • Fedora
  • Debian系
    • Dibian GNU/Linux
    • Ubuntu

シェルってなに?

シェル:

  • LinuxのCLIを提供するソフトウェア
  • ユーザとLinuxカーネルの仲介役(カーネルのインターフェース)
    Linuxとシェルとユーザの関係.png

シェルの構造

//[ユーザ名@ホスト名] プロンプト
[keita@localhost ~] $

ユーザー名:
コンピュータにログインしているユーザーの名前

ホスト名:
コンピュータ等の機器を人間が識別しやすいようにつけた名前(コンピュータ名前・IPアドレス)

プロンプト:
ユーザーからのコマンド入力を待っている(待機状態)ユーザーはコマンドを入力できる状態

シェルの仕組み

  1. ユーザーがプロンプトにコマンドを打つ
  2. シェルが入力された名前のコマンドを探す
  3. Linuxカーネルが見つかったコマンドを実行する
  4. シェルが実行結果を画面に表示する

例:

$ date
//画面の出力
2025年 620日 金曜日 10:00:24 UTC

Linuxを操作する時はターミナルにコマンドを入力する

  • ターミナルは入出力画面を提供するソフトウェア。
  • シェルはコマンドを解釈するソフトウェア。

ターミナルとシェルは別物。注意!!

シェルの種類

  • sh
    • 最も古いシェル
    • 標準的なシェル
    • 機能は少ない
  • bash
    • shを基本として機能を拡張したシェル
    • Linux環境でデフォルトのログインシェル
  • zsh
    • bashを更に使いやすくし、独自の拡張も追加したシェル
    • 機能の豊富なシェル
    • M2のMacのターミナルのデフォルトのシェル

環境構築(仮想マシンの構築)

インストール手順

結論:Mac OS(M1,M2,M3,M4)を使用している場合はこの手順なくして、既存のターミナルを使ってLinuxのコマンドを使用することができます

初心者はMacで学習すること強くおすすめします

ここではMac OS(M1,M2,M3,M4)についての方法を記載します(僕のようにどーしても仮想環境を構築したいという方向け)
この手順は飛ばしていただいて構わない

  1. UTMをインストール

    • UTMというアプリをダウンロードする

    https://mac.getutm.app/

  2. CentOS系AMR(M1,M2,M3,M4)対応のイメージファイルをダウンロード

    ディストリビューション ダウンロードリンク
    AlmaLinux 9 ARM版 https://almalinux.org
    Rocky Linux 9 ARM版 https://rockylinux.org
    CentOS Stream 9 ARM版(テスト向け) https://www.centos.org/centos-stream/

    例: AlmaLinux → 「Download」→ 「aarch64 (ARM64)」→ DVD ISO を選択

  3. UTMで新規仮想マシンを作成

    1. UTMを起動
    2. 左下の「+」をクリック → 「仮想化」を選択(Apple Siliconなら Virtualize 推奨
    3. OSの種類で「Linux」を選択
  4. ISOファイルを選択してインストール準備

    1. 「起動ISOイメージ」でさきほどダウンロードした .iso ファイルを指定
    2. メモリ(例: 2048 MB)、CPUコア数(例: 4)を設定
    3. ストレージ(例: 20〜40GB)を追加
    4. OpenGLアクセラレーションについて(有効/無効どちらでも)
      • OpenGL(Open Graphics Library) は、3Dや2Dの描画に使われるグラフィックAPIのひとつです。アクセラレーションとは、「ソフトウェアではなくハードウェア(GPU)に処理を任せて高速化する」ことを意味する

        つまり:仮想マシンの画面描画(GUIやグラフィック)を速く・滑らかにしたいなら有効にするオプション

    5. 共有ディレクトリは特に必要なし
    6. 最後に任意で名前を決めて完了(デフォルトのままでもOK)
  5. インストールとセットアップ

    1. UTMを開いて、作成した仮想マシンを▶️で起動する
    2. Install AlmaLinux 10.0を選ぶreturnキーを押す
    3. GUIが開くので任意で設定する
      • インストール先は変更無し
      • rootアカウント(R)を設定する
      • 言語(任意)
      • 時刻と日付(T)(任意)
      • インストール開始
  6. LinuxOSGUI起動

    1. UTMを再起動する
      1. CD/DVDの項目を削除し空にする
      2. 再起動する
      3. フルネーム、(ユーザー名)を入力し次へ
      4. 任意のパスワードを設定してログイン
      5. ログイン完了

おめでとうございます!!
LinuxOS仮想マシンでを立ち上げることができました!!

上記にも書きましたが、Mac(M1,M2,M3,M4)をお使いの方はターミナルアプリを使えば仮想マシンの環境構築不要

シェルのショートカットキー

注意:
mac では通常の mac アプリと違って、ターミナルでは Command(⌘) ではなく Control(^) キーを使うつまり、ここでのmac の Control キーを指します。

カーソルの移動

キー操作 動作(意味)
Ctrl + F 1文字次へ移動
Ctrl + B 1文字前へ移動
Ctrl + A 行の先頭へ移動
Ctrl + E 行の末尾へ移動
esc + F 1単語次へ移動
esc + B 1単語前へ移動

文字列の編集

Ctrl + H カーソルの左を1文字削除
Ctrl + D カーソルの部分を1文字削除
Ctrl + W カーソルより前の単語を削除(カーソルの位置)
Ctrl + U カーソルより前を削除(行頭まで)
Ctrl + K カーソルより後を削除(行末まで)
Ctrl + Y 最後に削除した内容を貼り付け(ヤンク)

トラブル時の対応

Ctrl + L 画面をクリア。文字化けした時も使える(clear コマンドと同じ)
Ctrl + C コマンドの実行を強制終了
Ctrl + S 画面ロック(キーボードから入力受け付けない)
Ctrl + Q 画面ロック解除

補完

キー操作 動作(意味)
Tab コマンドやファイル名の補完(2回押すと候補表示)
↑ / ↓ コマンド履歴を上下にたどる
!! 直前のコマンドを再実行
!abc abc で始まる直近のコマンドを再実行
Ctrl + R コマンド履歴のインクリメンタル検索(超便利)

Ctrl + R実行時のショートカットキー

キー操作 動作(意味)
文字の入力 コマンド履歴から検索
Ctrl + R 1つ前の検索結果へ移動
Enter(return) 現在の検索結果へ移動
esc 現在の検索結果を表示したままコマンドラインに戻る
Ctrl + g 検索結果を破棄し、コマンドラインに戻る

Linuxディレクトリ

ディレクトリ:

ファイルが保存されている場所

ディレクトリ構造

  • ルートディレクトリ( / )を頂点とした階層構造になっている。「ディレクトリツリー」と呼ぶ
  • WindowsOSは複数ドライブから入れ子構造が始まる。(Dドライブ、Cドライブ等)Linuxは一つのディレクトリ(ルートディレクトリ)から始まる
  • ディレクトリ事に役割がある

主なファイルと役割

ディレクトリ 内容(何が入っているか)
/ ルートディレクトリ。全てのディレクトリの最上位
/bin 基本的なコマンド(ls, cp, mv, rm など)が格納されている実行ファイル
/dev デバイスファイル(HDD, USB, マウスなど)が配置される
/etc 設定ファイル群(passwd, hosts, fstab など)。システム全体の設定がここに。重要
/home 一般ユーザーのホームディレクトリ(例:/home/ユーザー名)。ユーザーは自由にファイルやディレクトリを作成できる
/lib 基本コマンドやカーネルが利用する共有ライブラリ。
/opt サードパーティ製ソフトウェアのインストール先。
/root rootユーザー専用のホームディレクトリ。
/sbin 管理者用のシステムコマンド(fsck, reboot, ifconfig など)
/tmp 一時ファイルの保存場所。再起動で削除されることが多い
/usr ユーザー向けアプリケーションやライブラリ
/usr/bin 一般ユーザー向けの実行ファイル。
/usr/sbin 管理者向けのシステムコマンド。
/usr/lib /usr/binのプログラムが使用するライブラリ。
/var 可変データ(ログ、スプール、キャッシュなど)。
/var/log 各種ログファイル(syslog, auth.log など)。

主なLinuxのコマンド

cd

cd [ディレクトリ]

用途:ディレクトリの移動
具体例:

$cd /home/yoshida/documents

特殊なディレクトリの指定:

ディレクトリ 意味(どこを指すか) 指定例(コマンド)
~ 自分のホームディレクトリ cd ~
. 現在のディレクトリ(カレントディレクトリ) cd .
.. 親ディレクトリ(1階層上) cd ..
../.. 2階層上の親ディレクトリ cd ../..
- 直前にいたディレクトリ cd -
/ ファイルシステムのルートディレクトリ cd /

pwd

pwd

用途: カレントディレクトリを表示するコマンド

具体例:

$ pwd /home/machida

現在どこのディレクトリで作業しているかを確認しながら作業する

ls

ls [オプション][ディレクトリ・ファイル名]

用途: ディレクトリの中身を確認する

具体例:

$ ls /
bin dev etc sbin ...
    
#複数のディレクトリを指定することも可能
$ ls / /home
/:
bin dev etc sbin ...
/home:
hoge hoge.text

パス名展開:

記号 意味
* 0文字以上の任意の文字列にマッチ
? 任意の1文字にマッチ
[abc] a または b または c の1文字にマッチ
[a-z] az の任意の1文字にマッチ(範囲指定)
[!abc] abc 以外の1文字にマッチ(否定)
[!a-z] az 以外の1文字にマッチ(否定の範囲指定)
{a,b,c} a または b または c を展開(ブレース展開
~ 自分のホームディレクトリに展開。/home/okada (ホームディレクトリ)を ~で指定可能
ls *.txt	
.txtで終わる全ファイルを表示
   
ls data??.csv
data12.csv や data13.csv など
daata112は除外される
    
ls report[1-3].md	
report1.md〜report3.mdを表示
    
ls {jan,feb}.log	
jan.logとfeb.logを表示
    
ls ~/Downloads	
/Users/keita/Downloads を表示

よく使うオプション

書き方 意味
-a ls -a 隠しファイルも表示
-l ls -l 詳細表示
-F ls -F ファイルの識別記号をつける

-F で表示される記号の意味

記号 意味
/ ディレクトリ(フォルダ) Documents/
* 実行可能ファイル script.sh*
@ シンボリックリンク(エイリアス) shortcut@
= ソケットファイル(特殊用途) myservice=
` ` 名前付きパイプ(FIFO)

例:

$ ls -F 
Documents/  hello.txt  run.sh*  shortcut@  mypipe|  socket=

mkdir

mkdir [オプション] <作成するディレクトリ名>

用途: ディレクトリを作る

具体例:

#componentsディレクトリを作成する
$ mkdir compoments

よく使うオプション:

オプション 意味 使用例 説明例
-p 親ディレクトリもまとめて作成 mkdir -p a/b/c a, b, c が順に無ければ全部作成する
-v 作成されたディレクトリを表示(verbose) mkdir -v newdir 「mkdir: ディレクトリ 'newdir' を作成しました」と表示

例:

$ mkdir -pv conponents/button 
mkdir:ディレクトリ 'components/button を作成しました

rmdir

rmdir <ディレクトリ名>

用途: 空のディレクトリを削除するコマンド(空でないディレクトリを消そうとするとエラーになる)

具体例:

$ rmdir components

cat

cat [オプション] <ファイル名>

用途: ファイルの中身を表示するコマンド

具体例:

$ cat /etc/fstab
#
#/etc/fstab
#Created by anaconda on Fri ....
UUID=....

よく使うオプション:

オプション 意味 使用例 説明例
-n 行番号を付けて表示 cat -n file.txt 各行の先頭に番号が表示される
-b 空行を除いて行番号を付ける cat -b file.txt 空行には番号を付けない

less

less [オプション] <ファイル名>

用途: ファイルの中身をスクロール表示する(長いファイルを見たい時に使う)

具体例:

$ less /etc/vimrc

スクロールの操作

操作キー 意味・動作内容
または j 1 行下にスクロール
または k 1 行上にスクロール
Space,f 1 画面分下にスクロール
b 1 画面分上にスクロール(back)
d 半画面分下にスクロール(down)
u 半画面分上にスクロール(up)
G ファイルの最後行へジャンプ
g ファイルの先頭行へジャンプ
数字 + g 指定した行番号へジャンプ(例:20g
/文字列 指定した文字列を下方向に検索
?文字列 指定した文字列を上方向に検索
n 前回の検索方向に再検索(next)
N 前回の検索と逆方向に再検索
h ヘルプ画面を表示
q 閲覧終了(quit)

tail / head

tail [オプション] [ファイル]
head [オプション] [ファイル]

用途:
tail:データの終わり部分を標準出力する(オプション-nを指定しない場合は10行を標準出力)

head:データの始まり部分を標準出力する(オプション-nを指定しない場合は10行を標準出力)

具体例:

# 末尾から10行を標準出力
$ tail output.txt
# 末尾から5行を標準出力
$ tail output.txt
    
# 初めから10行を標準出力
$ head output.txt
# 初めから5行を標準出力
$ head output.txt

よく使うオプション:

tail

オプション 意味 使用例 説明例
-n 表示する行数を指定 tail -n 10 file.txt ファイルの末尾から10行表示(デフォルト)
-c 表示するバイト数を指定 tail -c 50 file.txt ファイルの末尾から50バイト分だけ表示する
-f 追記をリアルタイム表示 tail -f /var/log/syslog ログファイルなどの追記をリアルタイムで監視表示する
--pid=PID 指定PIDのプロセス終了で停止 tail -f file --pid=1234 tail -fをプロセス終了と同時に自動終了させる
-q ヘッダーを表示しない tail -q file1 file2 複数ファイルの出力時にファイル名ヘッダーを非表示にする
-v 常にヘッダーを表示 tail -v file1 単一ファイルでもファイル名のヘッダーを表示する

head

オプション 意味 使用例 説明例
-n 表示する行数を指定 head -n 5 file.txt ファイルの先頭から5行だけ表示する
-c 表示するバイト数を指定 head -c 100 file.txt ファイルの先頭から100バイト分だけ表示する
-q ヘッダーを表示しない head -q file1 file2 複数ファイル指定時にファイル名のヘッダー表示を抑制する
-v 常にヘッダーを表示 head -v file1 file2 1ファイルだけでも必ずファイル名のヘッダーを表示する

touch

touch <新規ファイル名1> <新規ファイル名2> ...

用途: 空のファイルを作成するコマンド

具体例:

$ touch index.html

よく使うオプション:

オプション 意味 使用例 説明例
-c / --no-create ファイルがなければ作成しない touch -c sample.txt sample.txt が存在する場合のみタイムスタンプを更新、新規作成しない
-a アクセス時刻のみ更新 touch -a file.txt アクセス時刻(atime)のみ変更、修正時刻(mtime)はそのまま
-m 修正時刻のみ更新 touch -m file.txt 修正時刻(mtime)のみ変更、アクセス時刻はそのまま

rm

rm [オプション]<削除するファイル名1><削除するファイル名2>

用途: ファイル・ディレクトリを削除するコマンド

注意:

rmコマンドを使用して削除した場合、ゴミ箱に行くのではなく本当に削除される(復活不可)

具体例:

$ rm index.html

よく使うオプション:

オプション 意味 使用例 説明例
-i 削除前に確認メッセージを表示 rm -i file.txt file.txt を削除する前に「削除してよいか?」と尋ねられる
-f 確認なしで強制削除 rm -f file.txt 存在しないファイルでもエラーを出さず、存在する場合は強制的に削除
-r または -R ディレクトリと中身を再帰的に削除 rm -r myfolder myfolder ディレクトリとその中のすべてのファイル・フォルダを削除
-rf 強制的に再帰削除(確認なし) rm -rf myfolder 中身をすべて確認なしで削除。危険な操作のため注意が必要
-v 削除したファイル名を表示 rm -v file.txt 削除されたファイル名を標準出力に表示

mv

mv [オプション]<移動元>...<移動先>

用途: ファイルの移動、ファイルの名前を変更するコマンド

具体例:

#ファイル名の変更
$ mv file1 file01
    
#ファイルを移動
$ mv file01 dir/

よく使うオプション:

オプション 意味 使用例 説明例
-i 上書き時に確認メッセージを表示 mv -i old.txt new.txt new.txt が存在する場合、上書きする前に「上書きしてよいか?」と確認される
-f 上書き確認なしで強制的に移動 mv -f old.txt new.txt new.txt があっても確認せずに上書きして移動する
-n 既存ファイルがあれば上書きしない mv -n old.txt new.txt new.txt がすでに存在する場合、何もせずスキップする
-v 処理内容を表示(verbose) mv -v old.txt new.txt old.txt -> new.txt のように、何がどう移動されたかが表示される
-u 移動先より新しい場合のみ上書き mv -u updated.txt backup/ backup/ にある同名ファイルより updated.txt が新しい場合だけ上書き移動する

cp

cp [オプション] <コピー元>...<コピー元>

用途: ファイル・ディレクトリをコピーするコマンド

注意: コピー先のファイルがすでにあると上書きしてしまう

具体例:

#ファイルをコピー
$ cp file file2
    
#ファイルをディレクトリにコピー
$ cp file2 src

よく使うオプション:

オプション 意味 使用例 説明例
-i 上書き時に確認メッセージを表示 cp -i file.txt backup.txt backup.txt が存在する場合、上書きするかどうかを確認される
-f 強制的に上書きする(確認なし) cp -f file.txt backup.txt 存在する backup.txt を確認せずに上書きする
-n 既存ファイルがあればコピーしない cp -n file.txt backup.txt backup.txt が存在する場合、コピーされずスキップされる
-r ディレクトリを再帰的にコピーする cp -r mydir backup/ ディレクトリ mydir を中身ごと backup/ にコピーする

ln

ln [オプション] <リンク元リンク名> <リンク名>

用途: リンクを張るコマンド

注意: オプションをつけないとハードリンクになる

具体例:

#ハードリンクを張る
$ ln file1 file2

よく使うオプション:

オプション 意味 使用例 説明例
-s シンボリックリンクを作成 ln -s /path/to/original linkname 実体ファイルに対するショートカットのようなリンクを作成
-f 強制的に上書き ln -sf /new/path linkname すでに存在するリンクを強制的に置き換える
-n ディレクトリ上書き時にリンク先ではなくリンク自体を上書き ln -sn target link リンク先がディレクトリでもリンク自体を上書き
-v 処理内容を表示(verbose) ln -sv target link 何をリンクしたかを明示的に出力

ハードリンク: 同じinode番号
シンボリックリンク: パス情報を保持する別ファイル(ショートカット的)
inode番号(アイノード番号): LinuxやUnix系のファイルシステムでファイルやディレクトリを管理するために使われる、実体を識別する番号

find

find <検索開始ディレクトリ> <検索条件> <アクション>

用途:

ファイルを検索するコマンド

具体例:

$ find . -name index.html -print
# .:検索開始ディレクトリ
# -name index.html: 検索条件
# -prin: 検索アクション

よく使う検索条件:

オプション 意味 使用例 説明例
-name ファイル名で検索 find . -name "test.txt" カレントディレクトリ以下から test.txt を名前で検索
-iname 大文字小文字を無視して検索 find . -iname "TEST.txt" TEST.txttest.txt も一致
-type ファイル種別で検索 find . -type f 通常のファイル(f)、ディレクトリ(d)などを検索。詳細は後述
-size ファイルサイズで検索 find . -size +1M 1MBより大きいファイルを検索
-mtime 最終更新日時(日単位)で検索 find . -mtime -3 過去3日以内に更新されたファイルを検索
-atime 最終アクセス日時で検索 find . -atime +10 10日以上アクセスされていないファイルを検索
-newer 指定ファイルより新しいものを検索 find . -newer ref.txt ref.txt より更新日時が新しいファイルを検索
-user 所有者で検索 find /home -user keita ユーザー keita が所有するファイルを検索
-group グループで検索 find /home -group staff staff グループのファイルを検索
-perm パーミッションで検索 find . -perm 644 パーミッションが 644 のファイルを検索
-empty 空ファイルまたは空ディレクトリ find . -empty 空のファイルやディレクトリを検索
-maxdepth 探索の最大階層を制限 find . -maxdepth 1 -name "*.sh" カレントディレクトリ直下のみを対象に .sh ファイルを検索
-mindepth 探索の最小階層を指定 find . -mindepth 2 -name "*.log" 2階層目以降から .log ファイルを検索
`-type` で指定できる主なファイルタイプ
指定 意味 具体例 説明
f 通常ファイル find . -type f 通常のファイル(テキストや画像など)を検索
d ディレクトリ find . -type d ディレクトリ(フォルダ)を検索
l シンボリックリンク find . -type l シンボリックリンク(ショートカット)を検索
c キャラクタ型デバイスファイル find /dev -type c /dev 直下のキーボードやマウスなどのデバイス
b ブロック型デバイスファイル find /dev -type b ハードディスクやUSBなどのブロックデバイス
p 名前付きパイプ(FIFO) find . -type p 通信に使う特殊なファイル(mkfifo で作成)
s ソケットファイル find . -type s プロセス間通信用のソケットファイル

複数条件組み合わせオプション:

演算子 意味 使用例 説明
-a AND(かつ) find . -type f -a -name "*.txt" 通常ファイルかつ .txt という名前
-o OR(または) find . -name "*.txt" -o -name "*.md" .txt.md ファイル
() 条件のグループ化(優先順位) find . \( -name "*.txt" -o -name "*.md" \) -a -type f .txt または .md の通常ファイル
  • a は省略可能(find . -type f -name "*.txt" は AND の意味になる)
  • () を使うと、複雑な条件を整理してグループ化できる(※ バックスラッシュでエスケープが必要:\( \)

chmod

# 記号方式(シンボリックモード)
chmod [ugoa] [+-=] [rwx] <ファイル名>
    
# 数値(オクタルモード)
chmod <8進数の数値> <ファイル名>
    

用途: ファイルやディレクトリのパーミッションを設定する

具体例:

記号方式(シンボリックモード)

# 記号方式(シンボリックモード)
$ chmod u+r file
# fileの所有者(u)に書き込む(r)を追加(+)する

chmod 記号方式(シンボリックモード)

記号 意味 説明例
u 所有者(user) chmod u+x file 所有者に実行権限を追加する
g グループ(group) chmod g-w file グループの書き込み権限を削除する
o その他(others) chmod o+r file その他に読み取り権限を追加する
a 全員(all = u+g+o) chmod a-x file 全ユーザーから実行権限を削除する

操作記号

記号 意味 使用例 説明
+ 権限を追加 chmod u+x file 所有者に実行権限を追加
- 権限を削除 chmod g-w file グループの書き込み権限を削除
= 権限を指定 chmod o=r file その他を「読み取り専用」に設定

数値(オクタルモード)

# 数値(オクタルモード)
$ chmod 755 file
# fileの所有者(1桁目(7))には読み取り(r(4))・書き込み(w(2))・実行(x(1))を許可する(7=4+2+1)
# fileのグループ(2桁目(5))には読み取り(r(4))・実行(x(1))を許可する(5=4+1)
# 所有者・グループ以外の一般ユーザー(3桁目(5))グループ同様の権限を与える

ユーザーの種別(左から順):

対象 意味
1桁目 所有者(user)
2桁目 グループ(group)
3桁目 その他(others)

パーミッション表:

数値 記号(rwx) 意味 使用例(chmod
0 --- 何も許可しない chmod 000 ファイル名
1 --x 実行のみ許可 chmod 111 ファイル名
2 -w- 書き込みのみ許可 chmod 222 ファイル名
3 -wx 書き込み + 実行許可 chmod 311 ファイル名
4 r-- 読み取りのみ許可 chmod 444 ファイル名
5 r-x 読み取り + 実行許可 chmod 555 ファイル名
6 rw- 読み取り + 書き込み許可 chmod 644 ファイル名(よく使う)
7 rwx 読み取り + 書き込み + 実行すべて許可 chmod 755 ファイル名(よく使う)

よく使うパーミッション:

$ chmod 644 ファイル名
# 所有者は読み取り・書き込み、グループとその他のユーザーは読み取りのみを許可する
    
$ chmod 755 ファイル名
# 所有者は読み取り・書き込み・実行、グループとその他のユーザーは読み取り・書き込みのみ許可する

chown

chown [オプション] [ユーザー] [:[グループ]] ファイル

用途: 所有者やグループを変更するコマンド

具体例:

# 所有者の変更
$ sudo chown sato test.txt
# 所有者と所有グループを変更
$ sudo chown sato:Dev test.txt
# 所有グループを変更
$ sudo chown :Dev test.txt

注意:

作成したファイルの所有者または所有グループを変更するときには管理者権限(sudoをつけて)でコマンドを実行する必要がある

よく使うオプション:

オプション 意味 使用例 説明例
-R 再帰的に変更 chown -R user:group /var/www /var/www以下のすべてのファイルとフォルダの所有者を再帰的に変更
--from 指定の所有者/グループのものだけ変更 chown --from=olduser newuser file.txt 所有者が olduser のファイルに対してのみ、newuser に変更する
-c 変更があったファイルを表示 chown -c user file.txt 所有者が変わったファイルだけ表示される
-v すべての処理を表示 chown -v user file.txt 所有者変更の処理内容を詳細に表示(変更がなくても出力)
--no-dereference シンボリックリンク自体に適用 chown --no-dereference user link リンク先ではなく、リンクファイルそのものの所有者を変更する
--reference 参照ファイルと同じ所有者に設定 chown --reference=ref.txt target.txt ref.txtと同じ所有者・グループにtarget.txtを設定

ps

ps [オプション]

用途: 実行中のプロセスを表示するコマンド

具体例:

$ ps
  PID  TTY    TIME     CMD
  3418 pts/0  00:00:00 bash
  8863 pts/0  00:00:00 ps
# 一行ずつが一つのプロセス
# PIDにプロセスID
# CMDに実行中のコマンド

よく使うオプション:

オプション 意味 使用例 説明例
a 他ユーザーのプロセスも表示 ps a 自分以外のログインユーザーの端末付きプロセスも表示される
u ユーザー情報付き表示 ps u 実行ユーザーやCPU使用率、メモリ使用率などが表示される
x 端末なしプロセス表示 ps x デーモンなど端末に紐づかないバックグラウンドプロセスも表示
aux 全プロセス詳細表示 ps aux すべてのプロセスを詳細に表示。日常的によく使われる形式
e 環境変数も表示 ps e 実行中プロセスが保持している環境変数が表示される
f ツリー構造表示 ps f プロセスの親子関係がわかるツリー形式で表示
l ロング形式表示 ps l PIDやPPID、優先度(PRI)など詳細なシステム情報を表示
w 幅広表示 ps w コマンド名や引数が長いとき、切れずに広く表示できる

jobs

jobs

用途: 現在のジョブの一覧を表示するコマンド

具体例:

$ jobs
[1]+    実行中   sleep20 &
# ジョブID 実行状況 実行コマンド

$ <コマンド> &:
コマンドの後ろに半角スペース+&を追加することでバックグラウンドでコマンドを実行することが可能
コマンド実行中にCtrl + zでコマンドを停止状態にすることができる

fg

fg %<ジョブID>

用途: ジョブをフォアグラウンドにするコマンド

具体例:

$ fg %2
# ジョブ(上記例ではジョブID = 2)を対話的に操作したい場合に使う

bg

bg %<ジョブID>

用途: ジョブをバックグラウンドにするコマンド

具体例:

$ bg %1
# ジョブをバックグラウンドで実行する(コマンドの実行を待たずにコマンドを実行できる)

kill

kill [オプション] %<ジョブID>
kill [オプション] <プロセスID>

用途: ジョブやプロセスを終了させるコマンド(正確にはシグナルを送信するコマンド

具体例:

$ kill %2
$ kill 3418
# デフォルトでは -SIGTERM 3418のように「SIGTERM」というシグナルを送信している

シグナル種類:

シグナル名 番号 意味 使用例 説明
SIGTERM 15 通常終了要求 kill 1234 プロセスに終了を依頼する標準的なシグナル。通常はこのシグナルが使われる
SIGKILL 9 強制終了 kill -9 1234 プロセスを強制終了(拒否不可)。リソース解放が行われない可能性がある
SIGINT 2 割り込み kill -2 1234 Ctrl+C に相当。ユーザーによる中断指示
SIGHUP 1 ハングアップ kill -1 1234 設定ファイルの再読み込みなどに使われる(デーモン再起動など)
SIGQUIT 3 強制終了+ダンプ kill -3 1234 Ctrl+\ に相当。コアダンプを生成して終了
SIGSTOP 19 一時停止 kill -19 1234 プロセスを一時停止(再開不可)
SIGCONT 18 再開 kill -18 1234 停止中のプロセスを再開
SIGUSR1 10 ユーザー定義1 kill -10 1234 ユーザーが自由に使えるシグナル。アプリ固有の制御に使われることも
SIGUSR2 12 ユーザー定義2 kill -12 1234 SIGUSR1と同様、用途自由なユーザー定義用のシグナル
SIGALRM 14 タイマー通知 kill -14 1234 タイマーの通知に使われる。alarm() システムコールと連動

リダイレクト【>】

コマンド > ファイル名
  • 標準出力(stdout)をファイルに書き出す(上書き)
  • つまり、画面に表示する代わりに、ファイルに保存する

標準入力(stdin):キーボードなどからデータを受け取る通り道

例:cat 実行後に文字を打つと、入力が標準入力から渡される

標準出力(stdout)

→ 処理結果を**表示するための出力先。通常は画面(ターミナル)**に出る

例:echo "hello" の出力は標準出力

標準エラー出力(stderr)

→ エラー内容を表示するための出力先。これも画面に出るが、標準出力とは別ルート

例:ls nofile のエラーメッセージは標準エラー出力。

コマンド例 意味・説明
echo "Hello" > message.txt Hello という文字列を message.txt に出力(既存の内容は消える
ls > list.txt カレントディレクトリのファイル一覧を list.txt に保存(画面には表示されない)
date > now.txt 現在日時を now.txt に保存

リダイレクトの種類

記号 説明
> 標準出力を上書き
>> 標準出力を追記
2> 標準エラー出力(stderr)を上書き
&> 標準出力とエラー出力の両方を上書き

/dev/nullについて

コマンド例 説明
command > /dev/null 標準出力(stdout)を捨てる(画面に表示しない)
command 2> /dev/null 標準エラー出力(stderr)だけを捨てる
command > /dev/null 2>&1 標準出力もエラー出力もどちらも捨てる

/dev/null とは

  • ブラックホール」のようなもの
  • 送ったデータはすべて 消える
  • 読み込もうとしても 何も出てこない(空)

パイプライン

コマンド | コマンド

用途: コマンドを複数連携させる。コマンドの標準出力を別のコマンドの標準出力につなげる

具体例:

$ ls /bin | less
$ ls /bin | grep systemd | less

grepコマンド:
指定した文字列で検索して該当するものを表示するコマンドで、結果を絞るために使う

パーミッション

$ ls -l /bin/less
	-rwxr-xr-x. 1 root root 286424 10292024 /bin/less
# -: ファイルタイプ
# rwx: オーナーのパーミッション
# r-x: グループのパーミッション
# r-x: その他のユーザーのパーミッション

パーミッションの詳細

記号 意味 詳細説明
r read(読み取り) ファイルの内容を読める、ディレクトリ内を一覧できる
w write(書き込み) ファイルの内容を変更できる、ディレクトリ内で作成・削除ができる
x execute(実行) ファイルを実行できる、ディレクトリへ移動できる
- 権限なし その操作は許可されていない
  • 各ファイルやディレクトリには、「**所有者(user)」「グループ(group)」「その他(other)」」の3つに対してそれぞれ rwx のセットがある

  • 例:rwxr-xr--

    → 所有者:すべてOK、グループ:読み取り+実行のみ、その他:読み取りのみ

スーパーユーザー

sudo <コマンド>
## コマンドの前にsudoをつけて実行

用途: 管理者権限を持つ特別なユーザー(rootユーザー)

具体例:

$ sudo mkdir /componemts

オプションについて

コマンド [オプション] [引数]
  • オプション:動作をカスタマイズするための追加指定
  • 引数:ファイル名やパスなど、コマンドが処理する対象

オプション指定ルール

書き方 説明
-x 短い形式(1文字 ls -l(長い形式で表示)
-xyz 短いオプションを連結できる ls -alls -a -l と同じ
--xxxx 長い形式(ロングオプション) ls --allls -a と同じ意味
-x 値 値を取るオプション(短い形式) grep -e pattern file.txt
--xxx=値 値を取るオプション(長い形式) tar --file=backup.tar.gz --list

コマンドの使い方を調べる

—help

<コマンド> --help

用途: <コマンド>の使い方を調べる(公式ドキュメント)

具体例:

$ ls --helpe
使用方法:
ls [オプション]...[ファイル]...

使用方法:

コマンドの概要、使用可能なオプション一覧を調べられる。コマンドの概要を理解したい時に使う

man コマンド

man <調べたいコマンド名>

用途: <調べたいコマンド名>の使い方を—helpより詳しく説明している(公式ドキュメント)

具体例:

$ man ls
NAME 
ls - list directory contents
$ man -k move #キーワードからも検索できる

使用方法:

コマンドを使用方法が詳しく説明されているため、コマンドを正しく理解するために使う

最後に

最後まで読んでいただき、ありがとうございました。

ここまで読んでくださった方なら、もうお気づきかもしれませんが、Linuxを使うにはWindows PCでは環境構築が必要です。
さらに、Linuxの主要なコマンドの多くは、Windowsのコマンドプロンプトではそのまま使えません。

つまり、Macは最初からLinuxに近い環境が整っており、学習のハードルをグッと下げてくれます。
これだけでも、初心者がMacで学習を始めるのは、とても合理的な選択だと言えるのではないでしょうか。

実際、僕自身もMacを使って日々作業をしていますが、「これをWindows PCでやっていたら…」と想像するだけでゾッとします。
きっと、今より何倍も多く挫折していたでしょう。もしかしたら、エンジニアになることすら諦めていたかもしれません。

だからこそ、これから開発を始めるなら――
「開発PCには、ぜひMacを!」

参考教材

Discussion