2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Terminal】Macのターミナル操作に慣れてみよう

Posted at

はじめに

この記事は以下のターゲットを想定して書いてます。

  • Macのターミナルを触ったことがなく、よくわからない...
  • え...?シェルって何...?
  • え...?パスを通すって何...?サッカー?

という方へ 完全初心者向け の記事です。

したがって、基礎的な概念から雑多に記載してます。

ただ、初心者の方にはかなり分量があり、補足の中で複雑な内容まで踏み込んで説明しています。仕組みとかはどうでもいいや思う方は基本コマンドだけでも、覚えて帰ってください!

この記事を理解するのに役立つと思い、基礎的な概念の理解を助ける資料も付けておきました。難しい単語などにはリンクを付けておいたので、ぜひご活用ください → 補足資料

全て理解できれば、基礎はバッチリ固まるので、難しい記事も読めるようになるかも...!

目次

コマンドが実行される仕組み

シェルやコマンドに触れる前に、コマンドを入力して実行されるまでの仕組みを簡単に理解しておきましょう。

コマンドが実行される一連の流れは以下の通りです。

① キーボードからターミナルに入力された文字列を受け取る
② 受け取った文字列のコマンドを検索
③ コマンドが見つかった場合、そのコマンドを実行
④ 実行結果をターミナルに返す

このプロセスのうち、③はMacのOSの中核であるカーネルが行います。

ここで、シェルの役割は一言で言うならば「カーネルのインターフェース」です。つまり、シェルはユーザーとカーネルの仲介してくれているのです。

例えば、lsコマンド( ディレクトリの一覧を表示するコマンド. 詳しくは後述. )をターミナル上で実行するとします。この時の実行されるまでの流れは以下の通りです。

①シェルがキーボードから「ls」という入力を受け取る
②シェルが「ls」というコマンドをコマンドが格納されているフォルダの中から検索
③合致したコマンドをカーネルに実行依頼する
④シェルが出力結果をユーザーの画面に出力

といった具合です。
以下はコマンドが実行されるまでの概念図です。

DBE1AD66-4261-44A0-8727-3BBAB4E8C3EF.jpeg

補足

  • コマンドが格納されているフォルダとは?

説明の中で出てきた「コマンドが格納されているフォルダ」について補足します。

コマンドとは一般にファイルのことであり、皆様が普段使われているようなテキストファイルなどと同じような要領のものです( 厳密には異なるが... )

これらのコマンドファイルは「/bin」や「/usr/bin」というフォルダに格納されていることが多いです。(この「/」などのパスの話が難しい方は「パスについて」をご参照ください)

whichというコマンドで、そのコマンドがどこに格納されているのか確かめることできます。それではlsコマンドがどこに存在しているのか確かめてみましょう。

hoge@host ~ % which ls

#出力
/bin/ls

lsコマンドは/bin/というフォルダの中のlsファイルであることが確認できました。
気になる方は他のコマンドも確かめてみてください!

ターミナルとは

前節でシェルについて説明しましたが、ターミナルとシェルは別物であることに注意が必要です。
違いは以下の通りです。

  • シェル
    ユーザーとカーネル(OSの中核)とのインターフェースとして「コマンドの検索」,「カーネルに命令を出す」など様々なことを行う

     
  • ターミナル
    入力画面を提供するだけのソフトウェア

この二つの言葉を混同しないように注意しましょう!
ターミナルを入力装置として、ファイルの作成、削除、移動、圧縮など様々なことを行うことができます。使えるようになると色々便利ですよ!

ターミナルを起動してみよう

それでは、ここでようやくターミナルを起動してみましょう。
起動方法は、こちらのリンク(外部リンク)をご参照ください。

起動すると、以下のような画面が出ると思います。
53362F9D-43AF-4F0E-88F0-B0DF6BBDF9D5.jpeg

ここで表示されている内容は以下の通りです。

  • hogeの部分 -> ユーザー名
  • hostの部分 -> ホスト名
  • ~の部分 -> カレントディレクトリ

カレントディレクトリとは、シェルの操作により、現在自分が位置しているディレクトリのことです。現在は「~」というディレクトリにいることを示しています。
注意: ディレクトリとはフォルダと同義です。本記事では以後ディレクトリと呼びます。

補足

ここでは話し足りなかったことを三点補足します。

一点目は、pwdコマンドについてです。カレントディレクトリはpwdコマンドで確認することができます。このpwdは諸説ありますが、「Print Working Directory」の略です。(カレントディレクトリはワーキングディレクトリとも呼ばれる)

二点目は ~(チルダ) についてです。~とは ホームディレクトリのことであり、ユーザーごとに用意された、個人用のディレクトリです。一人で使う分にはそこまで意識しなくても良いです。作業をする上で元となるディレクトリだと認識しておけば問題ないです。

三点目はチルダ展開についてです。ホームディレクトリの中で、pwdを実行すると、ホームディレクトリのパスが帰ってきます。このホームディレクトリのパスが ~ と同じなのです。

以下のコマンドの実行結果をご覧ください。

hoge@host ~ % pwd
#出力
/Users/hoge

hoge@host ~ % echo ~
#出力
/Users/hoge

echoコマンドについてこちらのリンクをご参照ください。
ここで言いたいことは、「~とホームディレクトリのパスは同じように扱える」ということです。

例えば、「/Users/hoge/Downloads」の中身を見たい時には、以下のようなことができます。

hoge@host ~ % ls /Users/hoge/Downloads
#出力
Downloadsの中身.....

hoge@host ~ % ls ~/Downloads
#出力
Downloadsの中身.....

このように、~と入力することで、ホームディレクトリのパスとして展開することを、チルダ展開と言います。

ターミナルの基本操作

ターミナルは基本的に矢印キーでカーソルの操作を行います。
入力は通常通りキーボードから行い、削除もback spaceで行うことができます。

今までマウスでカーソル移動したり、まとめて選択して削除していた方は不便に感じるかもしれません。ここでは、そんな人のために私がよく使う便利なショートカットキーを幾つか紹介します!

  • 便利な移動方法
キー入力 内容
Ctrl+a 行頭に移動
Ctrl+e 行末に移動
option+矢印(右or左) 単語ごとに移動
  • 便利な削除方法
キー入力 内容
Ctrl+u 全削除
Ctrl+w 一つ前の単語を削除

他にも様々なキー操作がありますが、一旦はここまでにしておきます!

補足

ここでは、さらに便利なターミナルライフを過ごすための便利機能を紹介します。

  • コマンド履歴
    コマンド履歴とは、一度実行したコマンドをもう一度簡単に呼び出すことのできる機能です。コマンド履歴を呼び出す方法は二つあります。

    1つ目は、↑キーを入力することで一つずつ実行したコマンドを遡ることができます。
    この方法は簡単なキー操作で行えるため、私自身頻繁に用いることがあります。しかし、だいぶ前に実行したコマンドまで戻るのは大変です。そこで二つ目の方法があります。

    2つ目の方法は Ctrl + r と入力して検索を行うことができます。実行したコマンドの一部を入力することで検索にヒットしたコマンドが表示されます。複数件検索にヒットした場合、Ctrl + rを再度入力することで、ひとつ前のヒットコマンドに遡ることができます。そして、Escキーを入力することで、そのコマンドをコマンドラインへ乗せることができます。
キー入力 内容
ひとつ前の実行コマンド
Ctrl + r コマンド履歴の検索、複数件ヒットの場合前のヒットコマンドへ移動
Esc ヒットしたコマンドをコマンドラインへ移動

  • 補完機能
    補完機能は、途中まで入力をすれば残りは自動で入力してくれる機能です。非常に便利なのでぜひ覚えておきましょう。
    補完機能はTabキーを入力することで用いることができます。

    例えば、カレントディレクトリにDownloadsというフォルダがあるとしましょう。この中身を確認するためには
    ls Downloads
    というコマンドを実行しなければなりません。いちいちDownl...と入力するのは大変ですよね。そこで補完機能の登場です。
    Dowまで入力した後に、Tabキーを押すとあら不思議、自動でDownloadsと補完してくれます。要するに、「途中まで打ってTabを押すと自動で残りを入力してくれる」のです。
キー入力 内容
Tab 途中まで入力した内容を補完

基本コマンド

ここでは、ターミナルを使う上で必ず覚えておきたいコマンドを紹介します。ぜひ以下のコマンドだけでも覚えてください!

コマンドを実行する前にコマンドオプションコマンドライン引数について紹介しておきます。

E321F818-AE77-42B3-94E3-69FCB78694C2.jpeg

コマンドを実行するにあたり、オプションやコマンドライン引数を設定することで動作を細かく指定できます。

まず、オプションとは、コマンドごとに用意されており、これを指定することで様々な動作を指定することができます。例えば、lsコマンドには-lオプションが存在しており、このオプションを指定することで、名前だけではなく様々な情報を確認できるようになります。

注意
コマンドごとに多くのなオプションがあるので、一気に覚えようとせずに、必要に応じてその都度調べましょう。何度も使ってくうちに必要なものは覚えていきます。

次に、コマンドライン引数とは、コマンドの動作対象を指定する引数です。プログラミングを学んだ人には関数の引数のようなものと思ってもらえれば問題ないです。
上のコマンドの例では、中身を見たいディレクトリを指定しています。このように、コマンドの動作対象を指定するのがコマンドライン引数です。


それでは、先ほど起動したターミナルを用いてコマンドを一つずつ実行していきましょう。

lsコマンド

lsコマンドとはディレクトリの中身を表示するコマンドです。

hoge@host ~ % ls

#出力 → カレントディレクトリ(今回は~)の中身
Applications			Downloads			Movies				Public...

コマンドライン引数を指定しないと、カレントディレクトリの中身が表示されます。
引数を指定することで、指定したディレクトリの中身を見ることができます。

hoge@host ~ % ls 対象ディレクトリ

#出力 → 対象ディレクトリの中身
Dir1			Dir2....

また知っておきたいオプションについても紹介します。

オプション 内容
-l ファイルの情報を詳細に表示する
-A 全てのファイルやディレクトリを表示
-F ファイルやディレクトリを識別する記号が末尾に表示

上記のオプションは覚えておくと、かなり便利です。
具体的にひとつ一つ見ていきましょう。

まず、説明のために以下のような構成のディレクトリを作成しました。

9239D7E7-098F-478F-8D2D-FC4911E5B451.jpeg

lsコマンドで中身を見てみます。

hoge@host Qiita % ls

#出力
dir1		dir2		file1.html	file2.html	file3.html

写真と出力結果の対応関係がきちんとわかると思います。

ただ表示名だけでは、どれがファイルでどれがフォルダかわかりにくいこともあると思います( 今回はわかりやすい名前にしましたが )。

そこで、オプションの出番です。

-l オプション

まずは「-l」 オプションから見てみましょう。

hoge@host Qiita % ls -l

#出力
total 0
drwxr-xr-x  2 hoge  staff  64  2 23 15:46 dir1
drwxr-xr-x  2 hoge  staff  64  2 23 15:46 dir2
-rw-r--r--  1 hoge  staff   0  2 23 15:46 file1.html
-rw-r--r--  1 hoge  staff   0  2 23 15:46 file2.html
-rw-r--r--  1 hoge  staff   0  2 23 15:46 file3.html

ここでは、出力結果のうち一番左の「drwxr-xr-x」のような部分を理解しましょう。
このヘンテコなアルファベットの詳細は以下のようになってます。

5C7D725F-6600-4DE7-820E-A6FA9BF6F9C6.jpeg

最初の文字が「d」ならディレクトリ、「-」ならファイルという意味です。

次の文字列は3文字ごとに見ていきます。それぞれ「読み込み」「書き込み」「実行」の権限があるかを示しています。権限がない場合には「-」となっています。

ここで、なぜ3つも権限があるのかと思うでしょうが、今回は簡単な説明に留めておきます。OSでは複数のユーザーの使用が想定されており、ユーザーごとに権限を変えることができるようになっています。具体的にはユーザーに所属グループを割り当て、そのグループごとに権限を変えることができるといった具合です。そのグループが三つあるというイメージで問題ないです。

一人で使う分には、このグループの概念はあまり意識しなくても問題ないです。

-A オプション

「-A」 オプションは、隠しフォルダを表示することができます。
隠しフォルダとは冒頭に「.」などがついているファイルやディレクトリです。通常ホームディレクトリにもいくつかあります。

ホームディレクトリで実行して、オプションの有無で出力結果を比較しましょう。
今回は(恥ずかしながら)私の~ディレクトリを公開します。(いやん)

# Aオプションなし
hoge@host ~ % ls -A ~
# 出力
Applications			LightGBM_compilation.log	anaconda3			scikit_learn_data
Desktop				Movies				bin				zshrc
Documents			Music				miniforge3
Downloads			Pictures			myprj
Library				Public				nltk_data

# Aオプションあり
hoge@host ~ % ls -A ~
# 出力
.CFUserTextEncoding		.ipython			.wdm				Movies
.DS_Store			.keras				.xonshrc			Music
.Trash				.lesshst			.zprofile			Pictures
.anaconda			.matplotlib			.zsh_history			Public
.bash_profile			.mysql_history			.zsh_sessions			anaconda3
.cache				.python_history			.zshrc				bin
.conda				.rye				.zshrc_backup			miniforge3
.condarc			.sqlite_history			Applications			myprj
.config				.ssh				Desktop				nltk_data
.continuum			.tcshrc				Documents			scikit_learn_data
.cups				.viminfo			Downloads			zshrc
.docker				.vimrc				Library
.gitconfig			.vscode				LightGBM_compilation.log

見比べてもらうと、.がついているファイルが表示されてますね。
みんなのディレクトリにも隠れファイルがあるかも!

-F オプション

最後に「-F」 オプションを見てみましょう。Fオプションは識別子を末尾につけるオプションです。
最後は、-lオプションと同じく用意したQiitaディレクトリで実行してみましょう。

hoge@host Qiita % ls -F

# 出力
dir1/		dir2/		file1.html	file2.html	file3.html

名前の末尾に「/」があればディレクトリ、なければファイルです。

pwdコマンド

pwdコマンドは、現在自分がいるディレクトリ(カレントディレクトリ)のパスを表示するコマンドです。

コマンド操作では、よく迷子になることがあります。そんな時にはこのpwdコマンドを実行することで、自分の位置を把握しましょう。

hoge@host ~ % pwd

# 出力
/Users/hoge

cdコマンド

cdコマンドは、ディレクトリの移動を行うコマンドです。
Change Directoryの略ですので、覚えやすいと思います。

cdコマンドはコマンドライン引数に注意が必要です。
コマンドライン引数に移動したいディレクトリを指定します。何も指定しないと、ホームディレクトリ(~)に移動します。

それではcdコマンドで移動してpwdコマンドで移動の確認をしてみましょう。

hoge@host ~ % pwd

# 出力 (現在位置)
/Users/hoge


hoge@host ~ % cd Downloads
hoge@host Downloads % pwd

# 出力 (移動後位置)
/Users/hoge/Downloads

mkdirコマンド

mkdirコマンドは、ディレクトリの作成を行うコマンドです。
MaKe DIRectoryの略ですので、覚えやすいと思います。

コマンドライン引数作成したいディレクトリの名前を指定してください。

以下に使用例を挙げます↓

hoge@host Qiita % ls -F

# 出力 (作成前のディレクトリの中身)
dir1/		dir2/		file1.html	file2.html	file3.html


hoge@host Qiita % mkdir dir3
hoge@host Qiita % ls -F

# 出力 (作成後のディレクトリの中身)
dir1/		dir2/		dir3/		file1.html	file2.html	file3.html

dir3という名前のディレクトリが作成されているのが確認できると思います。

touchコマンド

touchコマンドは、ファイルの作成を行うコマンドです。

コマンドライン引数作成したいファイルの名前を指定してください。
以下に使用例を挙げます↓

hoge@host Qiita % ls -F

# 出力 (作成前のディレクトリの中身)
dir1/		dir2/		dir3/		file1.html	file2.html	file3.html


hoge@host Qiita % touch file4.html
hoge@host Qiita % ls -F

# 出力 (作成後のディレクトリの中身)
dir1/		dir2/		dir3/		file1.html	file2.html	file3.html	file4.html

rmコマンド

rmコマンドは、ファイルやディレクトリの削除を行うコマンドです。
RMoveの略ですので、覚えやすいと思います。

コマンドライン引数削除したいファイルやディレクトリを指定します。

ただ、注意が必要で、オプションを指定しないとファイルしか削除できません
ディレクトリを削除したい場合には「-r」オプションを指定する必要があります。
このrとはRecursiveの頭文字であり、再帰的に削除をすることを指定するオプションです。従って、ディレクトリのような複数ファイルが含まれているものでも再帰的に削除することできます。

まとめ

紹介したコマンドについて、まとめを掲載します。
今一度確認してみてください。

コマンド 内容
ls ディレクトリの中身を表示
pwd カレントディレクトリのパス表示
cd ディレクトリの移動
mkdir ディレクトリの作成
touch ファイルの作成
rm ファイルやディレクトリの削除

補足資料

ここでは、この記事を読むために必要な概念を簡単に紹介します。

カーネルについて

カーネルとは、「OSの基本機能の役割を担うソフトウェア」のことです。

まず、OSとは皆さんのパソコンにも入っているWindowsやMacと呼ばれるものです。OSはOperation Systemの略であり、我々の操作を解釈して実際にパソコンの中で実行してくれるものです。その他、様々な機能がありますが、ここでは割愛します。

そんなOSの中核と呼ばれているのがカーネルです。ユーザーがアプリケーションを実行するときに、このリクエストをカーネルが処理して実行してくれます。

つまり、カーネルとは、我々とPCを結びつけてくれる大きな役割を持ったものと認識してくれれば問題ないです。

パスについて

パスとは、ディレクトリやファイルの住所のようなものです。

具体的には、目的のファイルまでの経路のディレクトリを階層的に繋ぎ合わせた文字列であり、絶対パスと相対パスの2種類が存在します。この繋ぎの部分はOSごとに異なりMacでは「/」で繋ぎ合わせを行います。

詳細は以下の概念図を参照してください。

69E7D04D-CCDC-4036-A10B-80527C16A6CE.jpeg

いくつかわからない単語があると思うので簡単に説明します。
まず、ルートディレクトリとは、PCにおいて最上位に位置するディレクトリであり、全てのディレクトリやファイルはこの中に格納されています。

このルートディレクトリから段階的にディレクトリを通過し、目的のファイルかディレクトリまでの一連の経路を「/」で繋ぎ合わせてものが絶対パスです。

それに対し、相対パスは、カレントディレクトリからの経路を繋ぎ合わせたものです。相対パスでは、現在のディレクトリを「.」、一つ上のディレクトリ(親ディレクトリ)を「..」で表します。

echoコマンドについて

echoコマンドは、コマンドラインに入力した文字列を、画面に出力として表示するためのコマンドです。

使用例はこんな感じ↓

hoge@host ~ % echo "Hello World"

# 出力
Hello World

「なんの意味が...」と思うかもしれませんが、意外と使うことがあります。

例えば、シェル変数などを展開するのに使えます。
シェル変数とはシェルの中で定める変数のことです。例えば、a=10とするとaという変数は10として扱われます。

以下で実行例を見てみましょう。

# シェル変数の定義
hoge@host ~ % a=10

# シェル変数の展開
hoge@host ~ % echo "$a"
#出力
10

このように、代入されたものを展開したりできます。
今回は割愛しますが、同じ要領で環境変数の展開もできます($PATHなど)。気になる人は調べてみてください!

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?