コンテンツにスキップ

1-3. コマンドライン基礎

  • シェルとは何か
  • 基本的なコマンドでファイル操作ができる
  • パイプとリダイレクトの使い方
  • 環境変数とパスの概念

シェル(Shell) とは、OSに対してコマンド(命令)を入力するためのインタフェース。

ユーザー → シェル → OS(カーネル) → ハードウェア

GUIのファイルマネージャーを使ってファイルを操作するのと同じことを、文字で行う。エンジニアがCLIを使う理由は以下の通り。

  • 操作を自動化できる(スクリプト化)
  • リモートサーバーにはGUIがない場合が多い
  • GUIより高速に操作できる

この研修では、Windows 上でも Git Bash を標準シェルとして使う。

1-1 で学んだように、OS はファイルシステムやプロセスを管理している。
コマンドラインでは、その OS の機能を文字による命令として直接扱う。

シェル説明
Git BashWindows で bash 系コマンドを使うための、この研修の標準シェル
bashLinux で広く使われるシェル
zshmacOS でよく使われる高機能シェル
PowerShellWindows 標準の高機能シェル

ターミナルを開くと、シェルが起動してコマンドの入力を待っている状態になる。

student@PC MINGW64 ~
$ ← これがプロンプト(入力を促す表示)

上の例では MINGW64 が Git Bash 環境を表している。
プロンプトの表示はPCごとに異なるが、「ここにコマンドを入力する」という意味は同じ。


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

Section titled “2. ファイル・ディレクトリ操作”

ファイルはディレクトリ(フォルダ)を使って木構造で管理されている。

/(Git Bash から見たルート)
├── c/
│ └── Users/
│ └── student/
│ ├── Desktop/
│ ├── Documents/
│ └── practice/
│ └── demo/
└── usr/
  • /(スラッシュ)は Git Bash から見たルートディレクトリ(最上位)
  • ~(チルダ)はホームディレクトリ(ユーザーのディレクトリ)の省略記法
  • Windows の C:\Users\student\practice\demo は、Git Bash では /c/Users/student/practice/demo と表される
Terminal window
$ pwd
/c/Users/student/practice/demo

pwd(Print Working Directory):現在いるディレクトリのパスを表示。

ファイル・ディレクトリ一覧の表示

Section titled “ファイル・ディレクトリ一覧の表示”
Terminal window
$ ls
README.md src/
$ ls -l # 詳細表示
total 8
drwxr-xr-x 1 student 197121 0 Mar 20 10:00 src
-rw-r--r-- 1 student 197121 512 Mar 20 10:00 README.md
$ ls -la # 隠しファイルも含めて詳細表示
Terminal window
$ cd src # src に移動
$ cd .. # 1つ上のディレクトリに移動
$ cd ~ # ホームディレクトリに移動
$ cd /c/Users/student/Documents # 絶対パスで移動
Terminal window
$ mkdir new_dir # ディレクトリを作成
$ mkdir -p a/b/c # 中間ディレクトリも含めて作成
$ rmdir new_dir # 空のディレクトリを削除
$ rm -r new_dir # 中身ごと削除(注意:元に戻せない)
Terminal window
$ touch file.txt # 空のファイルを作成(または更新日時を更新)
$ cat file.txt # ファイルの内容を全部表示
$ less file.txt # ページャーで表示(qで終了)
$ head -n 10 file.txt # 先頭10行を表示
$ tail -n 10 file.txt # 末尾10行を表示
$ tail -f log.txt # ファイルの追記をリアルタイムで表示
$ rm file.txt # ファイルを削除

ファイルのコピー・移動・リネーム

Section titled “ファイルのコピー・移動・リネーム”
Terminal window
$ cp file.txt copy.txt # ファイルをコピー
$ cp -r dir1/ dir2/ # ディレクトリをコピー
$ mv file.txt moved.txt # ファイルを移動(またはリネーム)
$ mv file.txt ~/Documents/ # ホーム配下の Documents/ へ移動
種類説明
絶対パスルート(/)から始まる完全なパス/c/Users/student/practice/demo
相対パス現在地からの相対的なパス../../Documents./README.md
現在地: /c/Users/student/practice/demo
./README.md → /c/Users/student/practice/demo/README.md
../ → /c/Users/student/practice/
../../Documents → /c/Users/student/Documents

Terminal window
$ grep "pattern" file.txt # ファイル内を検索
$ grep -r "pattern" ./ # ディレクトリを再帰的に検索
$ grep -n "pattern" file.txt # 行番号付きで表示
$ find . -name "*.md" # 拡張子が .md のファイルを探す
$ find . -type d # ディレクトリのみを探す

コマンドの出力をファイルに保存する。

Terminal window
$ echo "Hello" # 画面に "Hello" と表示
$ echo "Hello" > hello.txt # "Hello" を hello.txt に書き込む(上書き)
$ echo "World" >> hello.txt # hello.txt に追記する

あるコマンドの出力を、次のコマンドの入力として渡す。

Terminal window
# ls の出力を grep に渡して "md" を含む行だけを表示
$ ls | grep "md"
# ファイルの内容を sort して上位10行を表示
$ cat access.log | sort | head -n 10
# ファイルの行数を数える
$ cat file.txt | wc -l

パイプはコマンドを組み合わせることで、複雑な処理を実現できる強力な機能。


OSが管理する変数。プログラムの設定やシステムの情報を格納する。

Terminal window
$ echo $HOME # ホームディレクトリのパス
/c/Users/student
$ echo $USER # 現在のユーザー名
student
# 環境変数を設定する
$ export MY_NAME="Alice"
$ echo $MY_NAME
Alice
# 全ての環境変数を表示
$ env

コマンドを入力すると、OSは PATH という環境変数に登録されたディレクトリを順番に探して実行する。

Terminal window
$ echo $PATH
/mingw64/bin:/usr/bin:/c/Program Files/nodejs:/c/Windows/System32
# git コマンドがどこにあるか調べる
$ which git
/mingw64/bin/git

PATH に含まれていないディレクトリのプログラムは、フルパスで指定しないと実行できない。

Terminal window
# PATH に追加する(一時的)
$ export PATH="$PATH:/c/Users/student/myapp/bin"
# 永続化するには ~/.bashrc に追記する

ショートカット動作
Ctrl + C実行中のコマンドを強制終了
Ctrl + Z実行中のコマンドを一時停止(バックグラウンドへ)
Tabコマンドやパスの補完
↑ / ↓コマンド履歴を辿る
Ctrl + Rコマンド履歴をキーワード検索
Ctrl + L画面をクリア(clear コマンドと同じ)

コマンド役割
pwd現在のディレクトリを表示
lsファイル一覧を表示
cdディレクトリを移動
mkdirディレクトリを作成
rmファイル・ディレクトリを削除
cpファイルをコピー
mvファイルを移動・リネーム
catファイルの内容を表示
grepファイル内のパターン検索
echo文字列を表示
``(パイプ)
>(リダイレクト)出力をファイルへ保存

演習問題 に取り組んで理解を確認しよう。

第1章の全セクションを終えたら、2-1. ネットワーク基礎 へ進もう。