Macのターミナルでよく使うコマンド集(初心者向け)

Macのターミナルで良く使うコマンド集紹介ページのアイキャッチ

このページでは、Mac のターミナルで使用するコマンドについて紹介していきたいと思います!

一口に「コマンド」といっても非常に多くのものがあるので、このページはコマンド実行の初心者の方に向けて、「特に良く使用する・最低限知っておいた方が良い」コマンドのみを紹介させていただきます。

また、このページではあくまでも “コマンドの存在” や “どんなコマンドであるか” を知っていただくのが目的なので、各コマンドの紹介は浅〜く行います。特に私が良く利用する使い方に絞って解説していきたいと思います。

使ってみたいコマンドや深く知りたいコマンドがある場合は、下記ページでも紹介している man コマンドを使ったり、ググったりして別途調べてみていただければと思います!

macのターミナルアプリの使い方の解説ページアイキャッチMacでのターミナルアプリの使い方

上記ページでは、ターミナルアプリの起動方法や、ターミナルを扱う上で知っておいた方が良い知識についても解説しています。まだターミナルアプリを使ったことがない方は、先にこちらを読んでいただくことをオススメします。

ディレクトリ関連のコマンド

まずはディレクトリ関連のコマンドを紹介していきます!

cd:ディレクトリを移動する

cdコマンドの説明図

cd はカレントディレクトリから他のディレクトリに移動するコマンドです。

$ cd /usr/local/bin
$ pwd              
/usr/local/bin

書式

cd コマンドは、引数に「移動先のディレクトリのパス」を指定して実行します。

$ cd ディレクトリパス

引数を省略した場合、移動先は「ホームディレクトリ」になります。

MEMO

ホームディレクトリとは具体的にいうと下記のパスのディレクトリです

/Users/[ユーザー名]

使用例

例えば下記を実行すると /usr/local/bin ディレクトリに移動することができます(カレントディレクトリが /usr/local/bin になる)。

$ cd /usr/local/bin

また、下記を実行すると現在のディレクトリの1つ上の階層に移動することができます。

$ cd ../

さらに、下記を実行すれば、ホームディレクトリに移動することができます。

$ cd ~

スポンサーリンク

ls:ファイルやディレクトリの一覧を表示する

lsコマンドの説明図

ls はディレクトリに存在するファイルやディレクトリを一覧表示するコマンドです。

$ ls
memo.txt	test.txt	test_dir

書式

ls コマンドは、引数に「一覧表示したいディレクトリのパス」を指定して実行します。

$ ls ディレクトリパス

引数を省略した場合は、「カレントディレクトリ」以下のファイルとディレクトリが一覧表示されます。

後述するように、ディレクトリパスではなくファイルパスを指定することも可能です。

使用例

下記のように引数を省略して実行すると、”カレントディレクトリ” 以下のファイルとディレクトリが一覧表示されます。

$ ls

また、下記は /usr/local/bin ディレクトリ以下のファイルとディレクトリを一覧表示する場合の使用例です。

$ ls /usr/local/bin

また、下記を実行すると現在のディレクトリの1つ上の階層のディレクトリ以下の一覧表示を行うことができます。

$ ls ../

ここまでは、ディレクトリに対して ls コマンドを実行する例ばかりでしたが、ファイルパスを指定して実行することも可能です。

$ ls memo.txt

この場合は、そのファイルのみが表示されるのであまり意味がなさそうに思えますが、後述で説明する -l オプションを付加することで、ファイルの権限などの詳細を確認することができます。

$ ls -l memo.txt
-rw-r--r--  1 daeu  staff  1574  4 13 14:10 memo.txt

-a オプション

ls コマンドではオプションを指定しないと「隠しファイル」が表示されません。

MEMO

Mac や Linux では、ファイル名やディレクトリ名の先頭が .(ドット)の場合に隠しファイルとして扱われます

隠しファイルを表示したい場合はオプションに -a を指定して ls コマンドを実行します。

-aオプション(ls)
$ ls
text.txt
$ ls -a
.		..		.bash_profile	text.txt

-l オプション

ls コマンドでの一覧表示はオプションを指定しないと “横方向に” ファイル名やディレクトリ名が一覧表示されることになります。”横方向に” 表示されると、ファイルやディレクトリが多いと見にくい場合があります。

-l オプションを指定することで、一覧を “リスト” として表示することができます。また、-l オプションを指定することで、ファイルの詳細情報(権限や所有者・ファイルサイズなど)が一緒に表示されるようになります。

$ ls -l -a
drwxr-xr-x   4 daeu  staff   128  4 12 07:13 .
drwxr-xr-x+ 64 daeu  staff  2048  4 12 07:11 ..
-rw-r--r--   1 daeu  staff   587  4 12 07:09 .bash_profile
-rw-r--r--   1 daeu  staff    76  4 12 07:11 text.txt

pwd:カレントディレクトリを表示する

pwdコマンドの説明図

pwd は「カレントディレクトリ」のパスを表示するコマンドです。

$ pwd              
/Users/daeu

cd コマンドを繰り返してどこにいるのか分からなくなった(カレントディレクトリがどこなのか分からなくなった)ような場合に使うと便利なコマンドです。

書式

pwd コマンドでは、パスの指定は不要です。

$ pwd

mkdir:ディレクトリを新規作成する

mkdirコマンドの説明図

mkdir はディレクトリを新規作成するコマンドです。

$ mkdir test_dir

書式

mkdir コマンドは、引数に「作成したいディレクトリのパス」を指定して実行します。

$ mkdir ディレクトリパス

使用例

下記を実行すれば、カレントディレクトリの1つ上の階層のディレクトリに test_dir ディレクトリが作成されます。

$ mkdir ../test_dir

パスという形式ではなく、単に「ディレクトリ名」だけ指定して実行すると、カレントディレクトリにその名前のディレクトリが作成されます。

$ mkdir test_dir

スポンサーリンク

rmdir:(空の)ディレクトリを削除する

rmdirコマンドの説明図

rmdir はディレクトリを削除するコマンドです。

$ rmdir test_dir

ただし、削除できるのは “空の” ディレクトリのみです。

“空でない” ディレクトリを削除する場合は、後述で解説する rm コマンドを -R オプションを付加して実行します。

なので、一応紹介はしていますが、rmdir は実はあまり使わないです…。

書式

rmdir コマンドは、引数に「削除したいディレクトリのパス」を指定して実行します。

$ rmdir ディレクトリパス

使用例

下記を実行すれば、1つ上の階層の test_dir ディレクトリを削除することができます。

$ rmdir ../test_dir

ただし、削除できるのは前述のとおり “空の” ディレクトリのみです。”空でない” ディレクトリを削除しようとしても、下記のようなメッセージが表示されて削除することができません。

$ rmdir ../test_dir
rmdir: ../test_dir: Directory not empty

open:ディレクトリやファイルを開く

openコマンドの説明図1

open はディレクトリを Finder で表示するコマンドです。

$ open .

また、引数にファイルを指定した場合は、そのファイルをアプリで開くこともできます(そのファイルの拡張子に関連づけられたアプリが起動してそのファイルが開かれる)。

$ open cat.png

openコマンドの説明図2

MEMO

猫の画像はリズム727さんによる写真ACからの写真を使用させていただいています

書式

open コマンドでは、開きたいディレクトリのパスもしくはファイルのパスを引数として指定して実行します。

$ open ディレクトリパス or ファイルパス

使用例

下記のように open コマンドを実行すると、/usr/local ディレクトリを Finder で開くことができます。

$ open /usr/local

また、下記のように open コマンドを実行すると、カレントディレクトリの下の cat.jpg をプレビューアプリで開くことができます(画像を開くアプリは他のものである可能性はあります)。

$ open cat.jpg

また、.txt ファイルに対して open コマンドを実行すれば、テキストエディットアプリでファイルが開かれます。

$ open memo.txt

ファイル関連

続いてはファイル関連のコマンドを紹介していきます!

ファイル関連として紹介しているコマンドにおいても、実はディレクトリに対して実行することが可能なものもあります。

スポンサーリンク

cp:ファイルをコピーする

cpコマンドの説明図

cp はファイルをコピーするコマンドです。

$ cp test.txt text_dir

書式

cp コマンドでは、第1引数にコピー元のパス、第2引数にコピー先のパスを指定します。

cp コピー元のファイルパス コピー先のパス

第2引数に「ディレクトリパス」を指定するか、「ファイルパスを」指定するかで若干動作が異なります。

第2引数にディレクトリパスを指定すると、第1引数で指定したパスのファイルがそのディレクトリ以下にコピーされます。

この時、コピーされたファイル名は第1引数で指定したパスの “ファイル名” 部分のものと同じになります。つまり同じファイル名としてコピーされます。

$ cp ファイルパス ディレクトリパス

cpコマンドの説明図

一方で、第2引数にファイルパスを指定すると、コピー時にコピー先のファイルの “ファイル名” が変更されます。

具体的にはコピー先のファイルの “ファイル名” が、第2引数で指定したファイルパスの “ファイル名” 部分のものになります。

$ cp ファイルパス ファイルパス

cpコマンドの説明図2

後述で解説するように、オプションを指定することによって cp コマンドでディレクトリをコピーすることも可能です。

使用例

下記のように cp コマンドを実行することで、カレントディレクトリの original.txt が1つ上の階層のディレクトリにコピーされます。この時コピー先のファイル名は original.txt となります。

$ cp original.txt ../

一方で、下記のように cp コマンドを実行すれば、カレントディレクトリの original.txt が1つ上の階層のディレクトリにコピーされる点は先ほどと同じですが、コピー先のファイル名は copied.txt となります。

$ cp original.txt ../copied.txt

-i オプション

cp コマンドにおける -i オプションは、ファイルの上書きが行われる場合に注意喚起してくれるオプションになります。

cp コマンドでは、デフォルトだとコピー元と同じファイル名のファイルがコピー先にも存在する場合、そのファイルが上書きされてしまいます。

なので、間違ってコピーをすると、大事なファイルがコピーによって上書きされてしまう可能性があります。

このような失敗をしないために -i オプションは便利です。

$ cp -i original.txt ../copied.txt
overwrite ../copied.txt? (y/n [n]) n
not overwritten

-n オプション

-i は、ファイルの上書きが行われる場合に注意喚起してくれるオプションですが、-n は、ファイルの上書きが行われないようにするオプションになります。

具体的には、ファイルコピーによって他のファイルが上書きされる場合は、そのコピー処理が自動的にスキップされることになります。

-R オプション

cp コマンドは基本的に「ファイル」をコピーするコマンドなので、ディレクトリをコピーしようとしてもコピーに失敗します。

$ cp test_dir ../
cp: test_dir is a directory (not copied).

cp コマンドでディレクトリをコピーしたい場合は、-R オプションを指定して実行します。この時、ディレクトリ以下の全ファイルがコピー先にコピーされます。

$ cp -R test_dir ../

mv:ファイルを移動する

mvコマンドの説明図1

mv はファイルを移動するコマンドです。

$ mv test.txt test_dir

mv コマンドでは、ディレクトリの移動を行うことも可能です。

また、 mv コマンドにより、ファイルやディレクトリの「名前変更」を行うこともできます。

書式

mv コマンドでは、第1引数に移動元のパス、第2引数に移動先のパスを指定します。

$ mv 移動元のパス 移動先のパス

第1引数・第2引数ともに、ファイルパスとディレクトリパスのどちらも指定可能です。

例えば、下記のように第1引数にファイルパス、第2引数にディレクトリのパスを指定すれば、第1引数のファイルが第2引数のディレクトリの下に移動します。

$ mv ファイルパス ディレクトリパス

mvコマンドの説明図1

第2引数をファイルパスとすることで、そのファイルパスのディレクトリに移動された際に “名前を変更する” ことも可能です。

$ mv ファイルパス ファイルパス

mvコマンドの説明図2

↑ の応用ですが、下記のように第1引数と第2引数のファイルパスが両方で “同じディレクトリ” の場合、単にファイルの名前変更のみが行われることになります。

$ mv ファイルパス 同じディレクトリのファイルパス

mvコマンドの説明図3

ディレクトリの移動も可能で、下記のように指定すれば、第1引数のディレクトリが第2引数のディレクトリの下に移動します。

$ mv ディレクトリパス ディレクトリのパス
mvコマンドの説明図4

使用例

下記のように mv コマンドを実行することで、カレントディレクトリの original.txt が1つ上の階層のディレクトリに移動されます。この時、移動先のファイル名は original.txt となります。

$ mv original.txt ../

一方で、下記のようにmv コマンドを実行すれば、カレントディレクトリの original.txt が1つ上の階層のディレクトリに移動される点は先ほどと同じですが、移動先のファイル名はmoved.txt となります。

$ mv original.txt ../moved.txt

また、移動元と移動先が同じディレクトリであれば、単にファイル名が変化するだけになります。

例えば下記を実行すれば、カレントディレクリ下の original.txt のファイル名が moved.txt に変わります。

$ mv original.txt moved.txt

第1引数にディレクトリパスを指定することで、ディレクトリを移動することも可能です。

下記を実行すれば test_dir ディレクトリが exist_dir の下に移動します。

$ mv test_dir exist_dir

ただし、第2引数で指定したディレクトリが “存在しない場合” は、第1引数で指定したディレクトリのパスが第2引数で指定したパスに変化するだけです。

例えばno_dir が存在しない場合、下記を実行すると test_dirno_dir という名前に変わるだけになります。

$ mv test_dir no_dir

-i オプション

cp コマンドにおける -i オプションと同様です。

-n オプション

こちらも cp コマンドにおける -n オプションと同様です。

ln:ファイルのリンクを作成する

lnコマンドの説明図

ln はファイルやディレクトリのリンクを作成するコマンドです。

$ ln -s /usr/local test_dir

リンクには大きく分けて2種類のものが存在します。

  • シンボリックリンク
  • ハードリンク

シンボリックリンクは Windows でいうショートカットみたいなものです。

上記の2つの違いなどを詳しく知りたい方は別途ご自身で調べてみていただけると幸いです(私もあまり詳しくないです…)。

私が ln コマンドをよく使うのはシンボリックリンク作成時ですので、ここでもシンボリックリンク作成を前提に ln コマンドについて解説していきます。

書式

ln コマンドでは、第1引数に「リンク先のパス」を、第2引数に「リンクの作成先のディレクトリパス」を指定します。

$ ln -s リンク先のパス ディレクトリパス

第1引数の「リンク先のパス」はファイルパスでもディレクトリパスでも良いです。

作成されるリンクの名前を、リンク先のパスのファイル名やディレクトリ名と異なるものにしたい場合は、下記のように第2引数にファイルパスや “存在しないディレクトリ名” を指定します。

$ ln -s リンク先のパス ファイルパス or 存在しないディレクトリ名

使用例

下記を実行すれば、/usr/local ディレクトリへのシンボリックが test_dir の下に作成されます。

$ ln -s /usr/local test_dir
$ ls -l test_dir
total 0
lrwxr-xr-x  1 daeu  staff  10  4 14 10:43 local -> /usr/local

ls -l コマンドで表示される lrwxr-xr-x の先頭の l がシンボリックリンクであることを表しています。

また、ls -l コマンドの実行結果から、どのパスへのリンクであるかも確認することができます。

local -> /usr/local

このリンクに対して操作を行うことで、リンク先のパスのファイルやディレクトリに対して操作が行われることになります。

例えば、上記で作成したシンボリックリンク localcd コマンドで移動すると、リンク先の /usr/local に移動することになります。

-s オプション

ここまでシンボリックリンクを作成する前提で ln コマンドの説明をしてきましたが、この -s オプションこそが ln コマンドでシンボリックリンクを作成するためのオプションになります。

-s オプションを付加しない場合は、ln コマンドを実行すると前述のハードリンクが作成されることになります。

注意点

ln コマンドの第1引数に “相対パス” を指定する場合は注意が必要です。

作成したリンクファイルは、”そのリンクファイルから見た” パスへのリンクとなります。

例えばカレントディレクトリに存在する memo.txt に対するシンボリックリンク memo-lnk を下記コマンドで作成したとします。

$ ln -s ./memo.txt test_dir/memo-lnk

この場合、test_dirmemo-lnk というシンボリックリンクが作成されることになります。

この作成した memo-lnkls -l コマンドで確認すると、リンク先が下記のように設定されていることが確認できます。

$ ls -l test_dir/memo-lnk
total 0
lrwxr-xr-x  1 daeu  staff  8  4 14 11:54 memo-lnk -> ./memo.txt

リンク先のパスが ./memo.txt と設定されているところがポイントです。

memo-lnk のリンク先は、memo-lnk と同じディレクトリの、つまり test_dir の下の memo.txt に設定されていることになります。

test_dirmemo.txt が存在しない場合は、memo-lnk に対して何かコマンドを実行しても、下記のようにファイルが見つかりませんというエラーが発生します。

$ less test_dir/memo-lnk
test_dir/memo-lnk: No such file or directory

シンボリックリンクのリンク先をカレントディレクトリの memo.txt に設定するのであれば、下記のように “シンボリックリンクの作成先” から見たファイルのパスを第1引数に指定する必要があります。

$ ln -s ../memo.txt test_dir/memo-lnk
$ ls -l test_dir/memo-lnk
total 0
lrwxr-xr-x  1 daeu  staff  11  4 15 16:37 test_dir/memo-lnk -> ../memo.txt

要は、シンボリックリンクのリンク先を相対パスとして指定する場合は、カレントディレクトリから見たパスではなく、そのリンクの設置先から見たファイルのパスをリンク先として指定する必要があります。

リンク先に相対パスを設定した場合のlnコマンドの注意点

結構ここが複雑なので、リンク先を “絶対パス” で指定できる場合は “絶対パス” で指定する方が簡単だと思います。

スポンサーリンク

rm:ファイルを削除する

rmコマンドの説明図

rm は指定したパスのファイルを削除するコマンドです。

$ rm text.txt
注意

GUI からファイルを削除した場合はゴミ箱に入れられるので、後から削除したファイルを簡単に復元することができます

ですが、rm コマンドで削除したファイルは基本的に復元できないと考えた方が良いです

rm 復元」などでググると復元方法をまとめた記事なども見つかりますが、方法によっては復元できない場合もあります

書式

rm コマンドでは、引数に「削除したいファイルのパス」を指定します。

$ rm ファイルパス

使用例

下記を実行することで、カレントディレクトリの text.txt ファイルを削除することができます。

$ rm text.txt

-d オプション

-d オプションを指定することで、ファイルではなくディレクトリを削除することが可能です。

ただし削除できるのは「空のディレクトリ」のみです。空でないディレクトリを削除しようとするとしても削除できません。

$ rm -d test
rm: test: Directory not empty

空でないディレクトリを削除するには次の -R オプションを使用します。

-R オプション

-R オプションを指定することでディレクトリを削除することができます。

$ rm -R test

-d オプションとは異なり、”空でない” ディレクトリも削除可能で、rm コマンドの引数に「空でないディレクトリのパス」を指定すれば、そのディレクトリ内のファイルやディレクトリも一緒に削除されます。

便利ですが、前述の通り rm コマンドで削除したファイルは復元するのが困難なので注意してください。

-i オプション

-i オプションを指定することで、ファイル削除が行われる前に注意喚起をしてくれるようになります。

$ rm -i -R test_dir  
examine files in directory test_dir? y
remove test_dir/test2.txt? y
remove test_dir/test.txt? y
remove test_dir? y

cat:ファイルの中身の全体を表示する

catコマンドの説明図

cat はファイルの中身の “全体” を表示するコマンドになります。

$ cat memo.txt

書式

引数には中身を表示したいファイルのファイルパスを指定します。

$ cat ファイルパス

使用例

カレントディレクトリの text.txt というファイルの中身 “全体” を表示する場合は下記のように cat コマンドを実行します。

$ cat text.txt

head:ファイルの中身の先頭部分を表示する

headコマンドの説明図

head はファイルの中身の “先頭部分のみ” を表示するコマンドです。

$ head memo.txt

書式

引数には中身を表示したいファイルのファイルパスを指定します。

$ head ファイルパス

使用例

カレントディレクトリの text.txt というファイルの中身の “先頭部分” を表示する場合は下記のように head コマンドを実行します。

$ head text.txt

-n オプション

先頭から何行分表示するかを指定することが可能です。

例えば下記のように head コマンドを実行すれば、先頭から 20 行分を表示することができます。

$ head -n 20 text.txt

スポンサーリンク

tail:ファイルの中身の最後尾部分を表示する

tailコマンドの説明図

tail はファイルの中身の “最後尾部分のみ” を表示するコマンドです。

$ tail memo.txt

書式

引数には中身を表示したいファイルのファイルパスを指定します。

$ tail ファイルパス

使用例

カレントディレクトリの text.txt というファイルの中身の “最後尾” を表示する場合は下記のように head コマンドを実行します。

$ tail text.txt

-n オプション

先頭から何行分表示するかを指定することが可能です。

例えば下記のように tail コマンドを実行すれば、最後尾から 20 行分を表示することができます。

$ tail -n 20 text.txt

less:ファイルの中身を1画面分表示する

lessコマンドの説明図

less はファイルの中身を1画面分だけ表示するコマンドです。

$ less memo.txt

less コマンドは、ファイルの中身を表示するという点では前述の cat や head と同様ですが、動作は大きく違います。

cat や head はコマンド実行すると、ファイルの中身を表示して直ちにコマンドが終了します。

一方で、この less の場合は、実行してファイルの中身を表示した状態でコマンドが実行中のままになります。

なので、このコマンドを終了するためには、そのためのキーボード入力が必要になります(具体的に必要な入力は後述で解説します)。

一方で、ファイルの中身を表示した状態なので、表示をスクロールしたり、表示中のファイルの中身からキーボード操作により文字列を検索したりするようなことも可能です。

同様のコマンドとして more が存在しますが、moreless の大きな違いは下記になります。

  • more:ファイルの最後尾までスクロールしたらコマンドが自動的に終了
  • less:ファイルの最後尾までスクロールしてもコマンドが自動的に終了しない
    • 終了するためには q キーを押す必要がある

書式

引数には中身を表示したいファイルのパスを指定します。

$ less ファイルパス

使用例

カレントディレクトリの text.txt というファイルの中身を表示する場合は下記のように less コマンドを実行します。

$ less text.txt

less 実行中の操作

less を実行すると、ターミナル上にファイルの中身が表示されたまま less が実行中の状態になります。

この状態では、例えば下記のような操作を行うことができます。

スクロール
  • 上下キー
  • マウスホイール
  • エンターキー(1行分下にスクロール)
  • スペースキー(1画面分下にスクロール)
検索文字列指定
  1. / キーを押す
  2. 検索したい文字列を入力
  3. エンターキー
次へ検索検索文字列指定後に n キーを押す
前へ検索検索文字列指定後に shift+n キーを押す
先頭から検索検索文字列指定後に p キーを押す
終了q キーを押す

grep:ファイル内から文字列を検索する

grepコマンドの説明図

grep はファイル内から文字列を検索するコマンドです。

grep コマンドを実行することで、引数に指定した文字列が含まれる “行” が全て表示されます。

$ grep char encode.c
  char chr;
  char chr;
  char bit;
NODE *searchNode(NODE *node, char chr){
NODE *newNode(char chr){
NODE *makeNodes(char *filename){

書式

第1引数に「検索したい文字列パターン」を第2引数に「検索先のファイルのパス」を指定します。

$ grep パターン ファイルパス

第2引数以降に複数のファイルを指定することも可能です。

使用例

カレントディレクトリの encode.c というファイルから char という文字列を検索したい場合は、下記のように grep コマンドを実行します。

$ grep char encode.c
  char chr;
  char chr;
  char bit;
NODE *searchNode(NODE *node, char chr){
NODE *newNode(char chr){
NODE *makeNodes(char *filename){

また、char chr のように空白文字を含ませて検索を行うような場合は、第1引数を " " もしくは ' ' で括って指定を行います。

$ grep "char chr" encode.c
  char chr;
  char chr;
NODE *searchNode(NODE *node, char chr){
NODE *newNode(char chr){

また、第1引数の検索パターンは正規表現を用いて指定することも可能です。この場合も第1引数を " " もしくは ' ' で括って指定を行います。

例えば下記では「”任意の文字(.)” が “0 回以上繰り返した(*)” 後に odes と続く文字列」の検索を行なっています。

$ grep '.*odes' encode.c                  
NODE *makeNodes(char *filename){
  NODE *nodes;
  CODE *codes;
  nodes = makeNodes(argv[1]);
  makeHuffmanTree(nodes);
  codes = makeHuffmanCode(nodes);
  freeNode(nodes);
  encodeFile(outname, argv[1], codes);

-e オプション

-e オプションを指定することで、grep コマンドに複数の検索パターンを指定することができます。

下記では nodescodes の2つを検索パターンとして grep コマンドで検索を行なっています。

$ grep -e nodes -e codes encode.c
  NODE *nodes;
  CODE *codes;
  nodes = makeNodes(argv[1]);
  makeHuffmanTree(nodes);
  codes = makeHuffmanCode(nodes);
  freeNode(nodes);
  encodeFile(outname, argv[1], codes);

-A オプション

指定した文字列が含まれる行だけでなく、その後ろ側の複数行を一緒に表示するためのオプションになります。

-A の後ろに表示したい行数を指定します。

$ grep -A 3 argv encode.c
int main(int argc, char* argv[]){

  NODE *nodes;
  CODE *codes;
--
  nodes = makeNodes(argv[1]);

  makeHuffmanTree(nodes);

--
  encodeFile(outname, argv[1], codes);

  return 0;
}

-B オプション

指定した文字列が含まれる行だけでなく、その “前側” の複数行を一緒に表示するためのオプションになります。

-B の後ろに表示したい行数を指定します。

$ grep -B 3 argv encode.c
  fclose(fo);
}

int main(int argc, char* argv[]){
--
    return -1;
  }

  nodes = makeNodes(argv[1]);
--

  sprintf(outname, "huffman.enc");

  encodeFile(outname, argv[1], codes);

-n オプション

-n オプションを指定することで、指定した文字列が含まれる行を “行番号” 付きで表示することができます。

$ grep -n argv encode.c
442:int main(int argc, char* argv[]){
453:  nodes = makeNodes(argv[1]);
463:  encodeFile(outname, argv[1], codes);

-H オプション

-H オプションを指定することで、指定した文字列が含まれる行を “ファイル名” 付きで表示することができます。

$ grep -H argv encode.c decode.c                
encode.c:int main(int argc, char* argv[]){
encode.c:  nodes = makeNodes(argv[1]);
encode.c:  encodeFile(outname, argv[1], codes);
decode.c:int main(int argc, char* argv[]){
decode.c:  if(decodeFile(outname, argv[1]) != 0){
decode.c:      printf("%s decode erorr\n", argv[1]);

スポンサーリンク

vim:テキストファイルを編集する

vimコマンドの説明図

vim は Vim というテキストエディタを開くコマンドです。

$ vim memo.txt

Vim はコマンドだけでテキストを編集することができるテキストエディタで、使いこなせればプログラミングなどは全てターミナルで完結できるようになるのでかなり便利です。

書式

引数には「編集したいファイルのパス」を指定します。

$ vim ファイルパス

使用例

下記を実行すれば、カレントディレクトリの memo.txt を Vim で編集することができます。

$ vim memo.txt

引数を指定しない場合は新規作成ファイルを Vim で編集することが可能です。

$ vim

vim 実行中の操作

vim を実行すると、ターミナル上でテキストエディタが開かれ、ファイルの中身が表示されたまま vim が実行中の状態になります。

この状態で Vim に対してコマンドを実行することで様々な操作を行うことが可能です。

ただ、私がやるのは下記の「挿入モードに移行 -> 文字挿入 -> ファイルを上書き保存 -> Vim 終了」くらいです…。

ただしこれだけでも、ターミナル上からテキストが編集できて便利なので、ちょっとしたプログラミングはこの vim でやることが多いです。

挿入モードに移行
  1. : をキー入力する
  2. i をキー入力する
  3. エンターキーを入力する
文字を挿入
  1. 挿入モードに移行
  2. 上下左右キーで文字を挿入したい位置にカーソルを合わせる
  3. キー入力すると、そのカーソルの位置に文字が挿入される
    • del キーで文字の削除なども行える
ファイルを上書き保存
  1. : をキー入力する
  2. w をキー入力する
  3. エンターキーを入力する
ファイルを新規保存
  1. : をキー入力する
  2. w をキー入力する
  3. w の後ろにスペースを入力する
  4. スペースの後ろにファイル名を入力する
  5. エンターキーを入力する
Vim を終了
  1. : をキー入力する
  2. q をキー入力する
  3. エンターキーを入力する
Vim を強制終了
  1. : をキー入力する
  2. q! をキー入力する
  3. エンターキーを入力する

もっと詳しく Vim に対する操作を知りたい方は是非「Vim コマンド」などでググって調べてみてください。

chmod:ファイルの権限を変更する

chmodコマンドの説明図

ファイルやディレクトリはそれぞれ下記の権限が設定されています。

  • 読み込み権限
  • 書き込み権限
  • 実行権限

そして、これらはユーザーの種別ごとに設定されています。

例えば「実行権限」が有効に設定されていないユーザーは、そのファイルを実行することができません。

こういった権限を変更するのが chmod コマンドになります。

$ chmod 775 memo.txt

権限について詳しく知りたい方は、別途「chmod 権限」などでググって調べてみてください。

書式

chmod の引数としては、設定したい「権限設定」と「権限を設定したいファイルのパス」を指定して実行します。

chmod 権限設定 ファイルパス

第2引数以降に複数のファイルパスを指定して、同時に権限設定を実行することも可能です。

使用例

例えばカレントディレクトリの decode.exe の権限を下記のように設定する場合、

  • 所有者ユーザー:
    • 読み込み権限あり
    • 書き込み権限あり
    • 実行権限なし
  • 所有グループのユーザー:
    • 読み込み権限あり
    • 書き込み権限なし
    • 実行権限なし
  • その他ユーザー:
    • 読み込み権限なし
    • 書き込み権限なし
    • 実行権限なし

下記のように chmod コマンドを実行します。

$ chmod 640 decode.exe 
$ ls -l
-rw-r-----   1 daeu  staff  13184  4 13 01:17 decode.exe
$ ./decode.exe
zsh: permission denied: ./decode.exe

上記では、全ユーザーに対して “実行権限なし” に設定しているので、./decode.exe でファイルを実行しようとするとエラーが発生するようになっています。

permission denied が発生する場合は権限が与えられていないことが原因なので、ls -l で権限設定を確認し、必要に応じて chmod コマンドで権限設定をするようにすれば良いと思います。

find:ファイルを検索する

findコマンドの説明図

find コマンドはファイルを検索するコマンドです。

$ find sort -name "*.c" 
sort/heap.c
sort/insert.c
sort/selection.c
sort/quick.c
sort/bubble.c
sort/merge.c

grep は “ファイル内の文字列を検索するコマンド” であるのに対し、この find は “ファイルそのものを検索するコマンド” になります。

書式

find コマンド実行時には引数として「検索先のディレクトリパス」を指定し、さらにその後ろに「検索条件」を指定します。この検索条件は “オプション” により指定します。

$ find ディレクトリパス 検索条件

-name オプション

-name を指定することにより検索条件として「ファイル名」を指定することが可能です。

第1引数で指定したディレクトリ以下に対して “再帰的に” その「ファイル名」のファイルが検索されます。

例えば下記のように find コマンドを実行することで、カレントディレクトリの programming ディレクトリ以下から test.c という名前のファイルが全て検索されます。

$ find programming -name test.c
programming/funcPtr/test.c
programming/arrow/test.c
programming/BinaryNumber/test.c
programming/strtest/test.c
programming/struct/test.c
programming/huffman/test.c

また、「ファイル名」は * などのワイルドカードを用いて表現することも可能です。

例えば下記のように find コマンドを実行することで、カレントディレクトリの programming ディレクトリ以下から拡張子が .c のファイルが全て検索されます。

$ find programming -name "*.c"
programming/compression_ratio/raw.c
programming/compression_ratio/myPng.c
programming/compression_ratio/main.c
programming/compression_ratio/myTiff.c
programming/compression_ratio/mywebp.c
programming/monochrome/monochro.c
programming/monochrome/myJpeg.c
programming/1bitTiff/main.c
programming/1bitTiff/myTiff.c

ワイルドカードを用いる場合は " " もしくは ' ' で括るかワイルドカードの前に \ を付加する必要があります。

今回は、私が良く使う -name を紹介しましたが、他にも検索条件を指定するオプションはたくさんあります。

詳しくは man コマンドなどで調べてみてください。

-exec オプション

-exec を指定することにより、find コマンドで見つかったファイルに対してコマンドを実行することが可能です。

基本的な書き方は下記の通りです。

$ find 検索先ディレクトリ 検索条件 -exec コマンド {} \;

実行すると、{} 部分が find コマンドで見つかったファイルパスに置き換えられて -exec 以下のコマンドが実行されます。

find コマンドで複数ファイルが見つかった場合は、複数回 -exec 以下のコマンドが実行されることになります。

例えば下記を実行すれば、カレントディレクトリ以下から拡張子が .c のファイルを検索し、見つかった全ファイルに対して grep コマンドが実行されることになります。

$ find . -name "*.c" -exec grep -H printf {} \;

この -name-exec の組み合わせは、私はめちゃめちゃ使います。

スポンサーリンク

その他

最後はディレクトリ・ファイル関連以外のコマンドを紹介します。

sudo:他のユーザーとしてコマンドを実行する

sudoコマンドの説明図

sudo は、”他のユーザーとしてコマンドを実行する” コマンドになります。

特に良く使うのが “スーパーユーザー(root ユーザー)としてコマンドを実行したい” 場合です。

スーパーユーザーは「管理者権限」持っている、言ってしまうとなんでもできるユーザーです。Windows だと Administrator 的な存在です。

例えばソフトウェアのインストールでは管理者権限が必要な場合があるので、通常のユーザーがインストールしようとしてもインストールが途中でエラーになるような場合があります。

こんな時に sudo コマンドを利用すれば、一時的に管理者権限を得た状態でコマンドを実行することができます。なので、上記のようなインストールも sudo コマンドを利用すれば正常に完了させることができます。

書式

sudo コマンドでは、引数に管理者権限で実行したい「他のコマンド」を指定する形で実行します。

$ sudo 他のコマンド

使用例

例えば下記では、読み込み権限が与えられていない /etc/sudoers というファイルを sudo コマンドを利用して読み込む例になります。

$ head /etc/sudoers
head: /etc/sudoers: Permission denied
$ sudo head /etc/sudoers
Password:
#
# Sample /etc/sudoers file.
#
# This file MUST be edited with the 'visudo' command as root.
#
# See the sudoers man page for the details on how to write a sudoers file.

##
# Override built-in defaults
##

sudo をつけずに cat コマンドを実行すると「Permission denied」と表示されてファイルを表示することができません(これは cat コマンドを実行しているユーザーに読み込み権限がないからです)。

一方で、sudo をつけて cat を実行することで、ファイルが表示できるようになっています。これは sudo により、管理者権限を持つスーパーユーザーとして cat コマンドを実行しているためです。

sudo コマンドを実行するとパスワードが尋ねられますが、ここで入力するパスワードは「現ユーザーのパスワード」になります。

Mac を起動するとログインするのにパスワードを入力すると思いますが、おそらくこのパスワードがここで入力すべきパスワードになると思います。

コマンドをもっと知りたい方へのおすすめ参考書

最後にコマンドについてもっと詳しく知りたい方へのオススメ参考書を紹介しておきます。

特にコマンドをほとんど使ったことない方には下記の「macOS×コマンド入門」がおすすめです。

ターミナルやコマンドだけでなく、コマンドを扱うのに必要な知識である Finder やファイルシステムについても解説してくれており、Mac でのコマンド初学者向けの内容になっています。OS についての知識もつくので、より深くコマンドについて理解することができます。

とにかくコマンドを知りたいという方、さらに Linux も利用するという方には下記の「Linuxコマンドポケットリファレンス」がオススメです。

本の最初に「コマンドの1行要約つき」の目次がありますので、一覧でどのようなコマンドがあるかを把握することができます。

基本的なコマンドに関しては Linux と MacOS 共通で使用できるものが多いです。コマンドの辞書的な参考書としてパソコンに置いておくすぐにコマンドが調べられて便利です。

Linux も利用する&重要なコマンドからまず学習したいという方には下記の「LinuxコマンドABCリファレンス」がオススメです。こちらの本はコマンド別に重要度が3段階で設定されており、重要度の高いコマンドから勉強していくようなことができます。

これらの参考書は「コマンドに関する知識を身につける・どんなコマンドがあるかを知る」上では良い参考書だと思います。ただ、どの参考書を利用するにしても、最終的に一番詳しい情報は man コマンドで表示される解説になると思います。

なので、参考書で幅広い知識をつけながら、コマンドの使い方やオプションの指定方法などに困った時には man コマンドで補うのが良いと思います。

スポンサーリンク

まとめ

このページでは、特にターミナル初心者の方向けによく使うコマンドの紹介を行いました!

今回はコマンドを紹介することが目的なので、紹介内容はハッキリ言って浅いです。

各コマンドについてもっと深く知りたい場合は、別途ネットや man コマンドで調べて色々試してみてください!

また、今回紹介したのは、ほぼディレクトリ関連・ファイル関連のコマンドでしたが、ターミナルで行う作業の基本はディレクトリやファイルに対する操作です。

ここで紹介したコマンドは、ターミナルを扱っていく上で必ず使用するコマンドになってくると思いますので、是非この機会にコマンド名だけでも覚えておいてください!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です