コンテンツにスキップ

UNIXコマンド入門

❓ なぜUNIXコマンドを学ぶのか

私達がこれから開発するシステムの多くは、開発する環境がWindowsであれ、Macであれ、最終的にはサーバ上で稼働する場面が圧倒的に多いです。 これは大学の研究でも、会社でのシステム開発でも同じことです。 私達が慣れ親しんでいるスマホのゲームも、SNSサービスも、私達のスマホやパソコンが(アプリやブラウザを介して)サーバと情報のやり取りをしています。 そしてそれらのサーバは、UbuntuのようなLinuxベースのOSを使うのが一般的です。 私達が普段パソコンを操作するとき、グラフィカルな画面を見ながらマウスを使って操作しているのとは対象的に、 Linuxベースのサーバでは、CUIを介して操作するのが一般的ですし、(慣れていれば)効率的です。 CUIからの操作は、ターミナルからUNIXコマンドを入力することで行います。 UNIXコマンドによる操作は、1000個のファイルを連番で作るといった操作の自動化や、複雑な操作をコマンドとしてファイルに書き出して保存しておくことで、再現性の担保がしやすいといったメリットがあります。 ここでは、基本的なUNIXコマンドを学ぶことで、私達の書いたプログラムを最終的にLinuxシステム上で動作させるための準備をします。

terminal

比較的身近なLinuxサーバの例として次のようなものが挙げられます。

スパコンシステム

京都大学情報学環境機構の提供するスパコンシステムは、Linuxサーバです。実際、マニュアルにはUNIXコマンドの簡単なチュートリアルがあります。

スーパーコンピュータシステムの使い方 | 京都大学学術情報メディアセンター

ソーシャルゲーム会社のサーバ構成事情

DeNAのような民間企業では、自社でオンプレミスにサーバを用意したり、AWSのようなクラウドサービスを利用することで、サーバを通じてユーザにサービスを提供しています。これらのサーバも基本的にLinuxサーバです。こうしたサーバをどう構成するかという問題も、ビジネス上重要な課題となることがあります。

オンプレミスに強みをもつDeNAはなぜクラウド化を決めたのか? その舞台裏と今後の展望

💻 事前準備(環境設定)

Macにデフォルトで入っているターミナル (Terminal) アプリを開きましょう。 Spotlightから検索することで起動できます。

spot-terminal

Windows Subsystem for Linux (WSL) を利用することで、Windows上でUbuntu20.04を使いましょう。 下記リンクのガイダンスに従って、WSLをインストールして下さい。

Windows 10 用 Windows Subsystem for Linux のインストール ガイド

wsl

📙 学習教材

どちらか一つコースを選択してUNIXコマンドの基本的な操作方法を学んでみましょう。

  1. UNIXコマンド入門 | ドットインストール(有料)
  2. はじめてのUNIXコマンド入門講座 | TechAcademy

UNIXコマンド入門 (ドットインストール) の注意点

動画で扱っているOSがAlpineなので少しMacやUbuntuと勝手が違う点があるので注意してください。例えば、 ashbashと読み替えて下さい。

✅ 習熟度チェック

絶対パスと相対パス

絶対パスと相対パスの違いを説明できるか確認してみましょう。

ルートディレクトリとホームディレクトリ

ルートディレクトリとホームディレクトリが何かを説明できるか確認してみましょう。

"パスを通す"

"パスを通す"という言葉の意味を理解できているか確認してみましょう。

Pathを通すとは、環境変数とは | Qiita

使用頻度の高いコマンド

学習教材で説明されているような、基本的かつ使用頻度の高いコマンドの使い方が分かるか確認してみましょう。 例えば、この文章の著者 (@sotetsuk) の使用頻度の高いコマンドは次の表のようなものでした。 下記表の git, python, docker 以外のコマンドがどんなコマンドか分かるか確認しましょう。

history | awk '{print $2}' | sort | uniq -c | sort -rn | head -n 10
順位 コマンド 用途
1 git Gitを起動する
2 ls ファイルやディレクトリを表示する (list)
3 cd ディレクトリを移る (change directory)
4 vi vimエディタを起動する
5 cat ファイルを表示したり、結合したりする (catenate)
6 rm ファイルやディレクトリを削除する (remove)
7 cp ファイルやディレクトリをコピーする (copy)
8 python Pythonを起動する
9 docker Dockerを起動する
10 less ファイルの内容をスクロール可能な形で表示する

"使用頻度の高いコマンドを求めるコマンド"

上記の使用頻度の高いコマンドを求める操作自体も、コマンドをパイプで繋げることで実現しています。それぞれのコマンドがどんなコマンドか確認してみましょう。また、パイプの使用方法を確認してみましょう。

その他の使用頻度上位のコマンド

その他、@sotetsukの使用頻度上位のコマンドには次のようなものがありました。知らないコマンドがあったら、どんなコマンドか調べてみましょう。今は使い方を完璧に知らなくても、こんなコマンドがあったな、と覚えていれば必要に応じて使い方を調べて活用することができます。

その他の使用頻度が高かったコマンドリスト

コマンド 用途
mkdir ディレクトリを作る (make directory)
pwd 現在いるディレクトリの絶対パスを表示する (print working directory)
mv ファイルやディレクトリを移す (move)
head ファイルや入力の最初の方の行を表示する
tail ファイルや入力の最後の方の行を表示する
split ファイルや入力を行毎で小さなファイルに分割する
cut ファイルや入力の各行の一部分を切り取る
which コマンドの実行プログラムのパスを調べる
find ファイルやディレクトリを探す
grep ファイルや入力から一致する表現を検索・出力する
touch 空ファイルを作ったり、最終変更時刻を更新する
ssh 安全に遠隔マシンに接続する (secure shell)
ping 遠隔マシンとネットワークが疎通しているか確認する
curl データ転送・APIの利用に使われる
awk ファイルや入力を柔軟に加工をする
sed ファイルや入力に特定の変更を加える (stream editor)

📝 演習

✅ 次の演習問題1から5を解いてみましょう。

使用するテキストエディタ

Linuxでは、CUIを通してテキストファイルを編集するために vimemacsnano といったテキストエディタが使われることが多いです。どれでも好きなものを使い方を調べて使いましょう。

✅ 「言語処理100本ノック」第2章の問題を解いてみましょう。これらの問題は、特定のUNIXコマンドと同等の動作をするプログラムを実装するのが課題となっていますが、ここではUNIXコマンドを使ってみるだけで十分です。

この演習では、テキストファイルのダウンロードが必要です。 curl コマンドの使い方を調べてダウンロードしてみましょう。 あるいは、Cドライブなら /mnt/c 経由でWindowsファイルシステムへアクセスすることも可能なので、Windowsでテキストファイルをダウンロードして、それをコピーしてくるという選択肢もあります。

🎁 付録

興味のある方は、さらにこれらのレッスンを学習してみてください。