このページでは、Mac のターミナルで使用するコマンドについて紹介していきたいと思います!
一口に「コマンド」といっても非常に多くのものがあるので、このページはコマンド実行の初心者の方に向けて、「特に良く使用する・最低限知っておいた方が良い」コマンドのみを紹介させていただきます。
また、このページではあくまでも “コマンドの存在” や “どんなコマンドであるか” を知っていただくのが目的なので、各コマンドの紹介は浅〜く行います。特に私が良く利用する使い方に絞って解説していきたいと思います。
使ってみたいコマンドや深く知りたいコマンドがある場合は、下記ページでも紹介している man コマンドを使ったり、ググったりして別途調べてみていただければと思います!
上記ページでは、ターミナルアプリの起動方法や、ターミナルを扱う上で知っておいた方が良い知識についても解説しています。まだターミナルアプリを使ったことがない方は、先にこちらを読んでいただくことをオススメします。
ディレクトリ関連のコマンド
まずはディレクトリ関連のコマンドを紹介していきます!
cd:ディレクトリを移動する

cd はカレントディレクトリから他のディレクトリに移動するコマンドです。
$ cd /usr/local/bin $ pwd /usr/local/bin
書式
cd コマンドは、引数に「移動先のディレクトリのパス」を指定して実行します。
$ cd ディレクトリパス
引数を省略した場合、移動先は「ホームディレクトリ」になります。
ホームディレクトリとは具体的にいうと下記のパスのディレクトリです
/Users/[ユーザー名]
使用例
例えば下記を実行すると /usr/local/bin ディレクトリに移動することができます(カレントディレクトリが /usr/local/bin になる)。
$ cd /usr/local/bin
また、下記を実行すると現在のディレクトリの1つ上の階層に移動することができます。
$ cd ../
さらに、下記を実行すれば、ホームディレクトリに移動することができます。
$ cd ~
スポンサーリンク
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 コマンドではオプションを指定しないと「隠しファイル」が表示されません。
Mac や Linux では、ファイル名やディレクトリ名の先頭が .(ドット)の場合に隠しファイルとして扱われます
隠しファイルを表示したい場合はオプションに -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 /Users/daeu
cd コマンドを繰り返してどこにいるのか分からなくなった(カレントディレクトリがどこなのか分からなくなった)ような場合に使うと便利なコマンドです。
書式
pwd コマンドでは、パスの指定は不要です。
$ pwd
mkdir:ディレクトリを新規作成する

mkdir はディレクトリを新規作成するコマンドです。
$ mkdir test_dir
書式
mkdir コマンドは、引数に「作成したいディレクトリのパス」を指定して実行します。
$ mkdir ディレクトリパス
使用例
下記を実行すれば、カレントディレクトリの1つ上の階層のディレクトリに test_dir ディレクトリが作成されます。
$ mkdir ../test_dir
パスという形式ではなく、単に「ディレクトリ名」だけ指定して実行すると、カレントディレクトリにその名前のディレクトリが作成されます。
$ mkdir test_dir
スポンサーリンク
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 はディレクトリを Finder で表示するコマンドです。
$ open .
また、引数にファイルを指定した場合は、そのファイルをアプリで開くこともできます(そのファイルの拡張子に関連づけられたアプリが起動してそのファイルが開かれる)。
$ open cat.png

書式
open コマンドでは、開きたいディレクトリのパスもしくはファイルのパスを引数として指定して実行します。
$ open ディレクトリパス or ファイルパス
使用例
下記のように open コマンドを実行すると、/usr/local ディレクトリを Finder で開くことができます。
$ open /usr/local
また、下記のように open コマンドを実行すると、カレントディレクトリの下の cat.jpg をプレビューアプリで開くことができます(画像を開くアプリは他のものである可能性はあります)。
$ open cat.jpg
また、.txt ファイルに対して open コマンドを実行すれば、テキストエディットアプリでファイルが開かれます。
$ open memo.txt
ファイル関連
続いてはファイル関連のコマンドを紹介していきます!
ファイル関連として紹介しているコマンドにおいても、実はディレクトリに対して実行することが可能なものもあります。
スポンサーリンク
cp:ファイルをコピーする

cp はファイルをコピーするコマンドです。
$ cp test.txt text_dir
書式
cp コマンドでは、第1引数にコピー元のパス、第2引数にコピー先のパスを指定します。
cp コピー元のファイルパス コピー先のパス
第2引数に「ディレクトリパス」を指定するか、「ファイルパスを」指定するかで若干動作が異なります。
第2引数にディレクトリパスを指定すると、第1引数で指定したパスのファイルがそのディレクトリ以下にコピーされます。
この時、コピーされたファイル名は第1引数で指定したパスの “ファイル名” 部分のものと同じになります。つまり同じファイル名としてコピーされます。
$ cp ファイルパス ディレクトリパス

一方で、第2引数にファイルパスを指定すると、コピー時にコピー先のファイルの “ファイル名” が変更されます。
具体的にはコピー先のファイルの “ファイル名” が、第2引数で指定したファイルパスの “ファイル名” 部分のものになります。
$ cp ファイルパス ファイルパス

後述で解説するように、オプションを指定することによって 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 はファイルを移動するコマンドです。
$ mv test.txt test_dir
mv コマンドでは、ディレクトリの移動を行うことも可能です。
また、 mv コマンドにより、ファイルやディレクトリの「名前変更」を行うこともできます。
書式
mv コマンドでは、第1引数に移動元のパス、第2引数に移動先のパスを指定します。
$ mv 移動元のパス 移動先のパス
第1引数・第2引数ともに、ファイルパスとディレクトリパスのどちらも指定可能です。
例えば、下記のように第1引数にファイルパス、第2引数にディレクトリのパスを指定すれば、第1引数のファイルが第2引数のディレクトリの下に移動します。
$ mv ファイルパス ディレクトリパス

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

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

ディレクトリの移動も可能で、下記のように指定すれば、第1引数のディレクトリが第2引数のディレクトリの下に移動します。
$ mv ディレクトリパス ディレクトリのパス
使用例
下記のように 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_dir が no_dir という名前に変わるだけになります。
$ mv test_dir no_dir
-i オプション
cp コマンドにおける -i オプションと同様です。
-n オプション
こちらも cp コマンドにおける -n オプションと同様です。
touch:タイムスタンプを変更する / 空のファイルを作成する

touch はファイルのタイムスタンプ(最終更新日時・最終アクセス日時)を変更するコマンドです。
これを利用して、touch コマンドで「空のファイルを新規作成」することもできます。どちらかというと、touch コマンドを使うのは空のファイルを新規作成する目的の方が多いかなぁと思います。
書式
touch コマンドでは引数に「ファイルのパス」を指定します。
$ touch ファイルパス
指定した「ファイルのパス」に既にファイルが存在する場合、ファイルのタイムスタンプがコマンド実行時の日時に変化します。

指定した「ファイルのパス」にファイルが存在しない場合、そのパスにファイルが新規作成されることになります。

使用例
例えばカレントディレクトリに memo.txt というファイルが存在する状態で下記コマンドを実行すれば、memo.txt のタイムスタンプがコマンド実行時の日時に変更されることになります。
$ touch memo.txt
このタイムスタンプ(最終更新日時)は、ls -l コマンド等で確認することが可能です。コマンド実行前後でタイムスタンプを比較してみると違いが分かりやすいと思います。

また、カレントディレクトリに memo.txt というファイルが存在しない状態で上記コマンドを実行した場合は、空の memo.txt というファイルがカレントディレクトリに新規作成されることになります。
何かしらの環境構築を行うような場合に「空のファイルを作成する」ことも結構あるので、このコマンドは覚えておくと良いと思います。
また、Mac の場合は右クリックメニューからテキストファイルの新規作成等もできないので、空のファイルを作成するだけであればマウス操作よりもコマンド操作の方が楽&早いと思います。
-t オプション
オプションを指定しなかった場合はタイムスタンプはコマンド実行時の日時に設定されますが、-t オプションを指定することで変更後のタイムスタンプの日時を設定することも可能です。
変更後のタイムスタンプの日時は -t の後ろ側に [[CC]YY]MMDDhhmm[.SS] の形式で指定します。
CC:年の上2桁YY:年の下2桁MM:月(2桁)DD:日(2桁)hh:時(2桁)mm:分(2桁)SS:秒(2桁)
[ ] で括られた項目は省略可能です。
CC を指定せずに YY を指定した場合は、自動的に CC が設定されることになります(例えば YY が 99 の場合、タイムスタンプが 2099 年というのはおかしいので CC には 19 が自動的に設定される)。
例えば下記のように touch コマンドを実行すれば、memo.txt のタイムスタンプ(最終更新日時・最終アクセス日時)が 5月2日4時56分 に変更されます(年は “コマンド実行した日の年” に自動設定される)。
$ touch -t 05020456 memo.txt
-m オプション・-a オプション
オプションを指定しなかった場合、touch コマンドでは最終更新日時と最終アクセス日時の両方のタイムスタンプが変更されることになります
オプションを指定することでどちらか一方のみを変更することが可能で、-m オプションを指定した場合は最終更新日時のみが、-a オプションを指定した場合は最終アクセス日時のみが変更されることになります。
-r オプション
-r オプションを指定することで、特定のファイルのタイムスタンプを別のファイルのタイムスタンプと同じものに設定することが可能です。
例えば下記を実行すれば、memo.txt のタイムスタンプに text.txt のタイムスタンプが設定されることになります。
$ touch -r text.txt memo.txt
スポンサーリンク
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
このリンクに対して操作を行うことで、リンク先のパスのファイルやディレクトリに対して操作が行われることになります。
例えば、上記で作成したシンボリックリンク local に cd コマンドで移動すると、リンク先の /usr/local に移動することになります。
-s オプション
ここまでシンボリックリンクを作成する前提で ln コマンドの説明をしてきましたが、この -s オプションこそが ln コマンドでシンボリックリンクを作成するためのオプションになります。
-s オプションを付加しない場合は、ln コマンドを実行すると前述のハードリンクが作成されることになります。
注意点
ln コマンドの第1引数に “相対パス” を指定する場合は注意が必要です。
作成したリンクファイルは、”そのリンクファイルから見た” パスへのリンクとなります。
例えばカレントディレクトリに存在する memo.txt に対するシンボリックリンク memo-lnk を下記コマンドで作成したとします。
$ ln -s ./memo.txt test_dir/memo-lnk
この場合、test_dir に memo-lnk というシンボリックリンクが作成されることになります。
この作成した memo-lnk を ls -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_dir に memo.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
要は、シンボリックリンクのリンク先を相対パスとして指定する場合は、カレントディレクトリから見たパスではなく、そのリンクの設置先から見たファイルのパスをリンク先として指定する必要があります。

結構ここが複雑なので、リンク先を “絶対パス” で指定できる場合は “絶対パス” で指定する方が簡単だと思います。
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 memo.txt
書式
引数には中身を表示したいファイルのファイルパスを指定します。
$ cat ファイルパス
使用例
カレントディレクトリの text.txt というファイルの中身 “全体” を表示する場合は下記のように cat コマンドを実行します。
$ cat text.txt
スポンサーリンク
head:ファイルの中身の先頭部分を表示する

head はファイルの中身の “先頭部分のみ” を表示するコマンドです。
$ head memo.txt
書式
引数には中身を表示したいファイルのファイルパスを指定します。
$ head ファイルパス
使用例
カレントディレクトリの text.txt というファイルの中身の “先頭部分” を表示する場合は下記のように head コマンドを実行します。
$ head text.txt
-n オプション
先頭から何行分表示するかを指定することが可能です。
例えば下記のように head コマンドを実行すれば、先頭から 20 行分を表示することができます。
$ head -n 20 text.txt
tail:ファイルの中身の最後尾部分を表示する

tail はファイルの中身の “最後尾部分のみ” を表示するコマンドです。
$ tail memo.txt
書式
引数には中身を表示したいファイルのファイルパスを指定します。
$ tail ファイルパス
使用例
カレントディレクトリの text.txt というファイルの中身の “最後尾” を表示する場合は下記のように head コマンドを実行します。
$ tail text.txt
-n オプション
先頭から何行分表示するかを指定することが可能です。
例えば下記のように tail コマンドを実行すれば、最後尾から 20 行分を表示することができます。
$ tail -n 20 text.txt
less:ファイルの中身を1画面分表示する

less はファイルの中身を1画面分だけ表示するコマンドです。
$ less memo.txt
less コマンドは、ファイルの中身を表示するという点では前述の cat や head と同様ですが、動作は大きく違います。
cat や head はコマンド実行すると、ファイルの中身を表示して直ちにコマンドが終了します。
一方で、この less の場合は、実行してファイルの中身を表示した状態でコマンドが実行中のままになります。
なので、このコマンドを終了するためには、そのためのキーボード入力が必要になります(具体的に必要な入力は後述で解説します)。
一方で、ファイルの中身を表示した状態なので、表示をスクロールしたり、表示中のファイルの中身からキーボード操作により文字列を検索したりするようなことも可能です。
同様のコマンドとして more が存在しますが、more と less の大きな違いは下記になります。
more:ファイルの最後尾までスクロールしたらコマンドが自動的に終了less:ファイルの最後尾までスクロールしてもコマンドが自動的に終了しない- 終了するためには
qキーを押す必要がある
- 終了するためには
書式
引数には中身を表示したいファイルのパスを指定します。
$ less ファイルパス
使用例
カレントディレクトリの text.txt というファイルの中身を表示する場合は下記のように less コマンドを実行します。
$ less text.txt
less 実行中の操作
less を実行すると、ターミナル上にファイルの中身が表示されたまま less が実行中の状態になります。
この状態では、例えば下記のような操作を行うことができます。
| スクロール |
|
| 検索文字列指定 |
|
| 次へ検索 | 検索文字列指定後に n キーを押す |
| 前へ検索 | 検索文字列指定後に shift+n キーを押す |
| 先頭から検索 | 検索文字列指定後に p キーを押す |
| 終了 | q キーを押す |
スポンサーリンク
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 コマンドに複数の検索パターンを指定することができます。
下記では nodes と codes の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 memo.txt
Vim はコマンドだけでテキストを編集することができるテキストエディタで、使いこなせればプログラミングなどは全てターミナルで完結できるようになるのでかなり便利です。
書式
引数には「編集したいファイルのパス」を指定します。
$ vim ファイルパス
使用例
下記を実行すれば、カレントディレクトリの memo.txt を Vim で編集することができます。
$ vim memo.txt
引数を指定しない場合は新規作成ファイルを Vim で編集することが可能です。
$ vim
vim 実行中の操作
vim を実行すると、ターミナル上でテキストエディタが開かれ、ファイルの中身が表示されたまま vim が実行中の状態になります。
この状態で Vim に対してコマンドを実行することで様々な操作を行うことが可能です。
ただ、私がやるのは下記の「挿入モードに移行 -> 文字挿入 -> ファイルを上書き保存 -> Vim 終了」くらいです…。
ただしこれだけでも、ターミナル上からテキストが編集できて便利なので、ちょっとしたプログラミングはこの vim でやることが多いです。
| 挿入モードに移行 |
|
| 文字を挿入 |
|
| ファイルを上書き保存 |
|
| ファイルを新規保存 |
|
| Vim を終了 |
|
| Vim を強制終了 |
|
もっと詳しく Vim に対する操作を知りたい方は是非「Vim コマンド」などでググって調べてみてください。
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 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 は、”他のユーザーとしてコマンドを実行する” コマンドになります。
特に良く使うのが “スーパーユーザー(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 を起動するとログインするのにパスワードを入力すると思いますが、おそらくこのパスワードがここで入力すべきパスワードになると思います。
スポンサーリンク
コマンドをもっと知りたい方へのおすすめ参考書(PR)
最後にコマンドについてもっと詳しく知りたい方へのオススメ参考書を紹介しておきます。
特にコマンドをほとんど使ったことない方には下記の「macOS×コマンド入門」がおすすめです。
ターミナルやコマンドだけでなく、コマンドを扱うのに必要な知識である Finder やファイルシステムについても解説してくれており、Mac でのコマンド初学者向けの内容になっています。OS についての知識もつくので、より深くコマンドについて理解することができます。
とにかくコマンドを知りたいという方、さらに Linux も利用するという方には下記の「Linuxコマンドポケットリファレンス」がオススメです。
本の最初に「コマンドの1行要約つき」の目次がありますので、一覧でどのようなコマンドがあるかを把握することができます。
基本的なコマンドに関しては Linux と MacOS 共通で使用できるものが多いです。コマンドの辞書的な参考書としてパソコンに置いておくすぐにコマンドが調べられて便利です。
Linux も利用する&重要なコマンドからまず学習したいという方には下記の「LinuxコマンドABCリファレンス」がオススメです。こちらの本はコマンド別に重要度が3段階で設定されており、重要度の高いコマンドから勉強していくようなことができます。
これらの参考書は「コマンドに関する知識を身につける・どんなコマンドがあるかを知る」上では良い参考書だと思います。ただ、どの参考書を利用するにしても、最終的に一番詳しい情報は man コマンドで表示される解説になると思います。
なので、参考書で幅広い知識をつけながら、コマンドの使い方やオプションの指定方法などに困った時には man コマンドで補うのが良いと思います。
まとめ
このページでは、特にターミナル初心者の方向けによく使うコマンドの紹介を行いました!
今回はコマンドを紹介することが目的なので、紹介内容はハッキリ言って浅いです。
各コマンドについてもっと深く知りたい場合は、別途ネットや man コマンドで調べて色々試してみてください!
また、今回紹介したのは、ほぼディレクトリ関連・ファイル関連のコマンドでしたが、ターミナルで行う作業の基本はディレクトリやファイルに対する操作です。
ここで紹介したコマンドは、ターミナルを扱っていく上で必ず使用するコマンドになってくると思いますので、是非この機会にコマンド名だけでも覚えておきましょう!
ちょっと上級者向けの話になりますが、リダイレクトやパイプを利用することで、コマンドの結果をファイル保存したり、コマンド同士を連携して動作させてコマンドで実現可能な操作の幅を広げたりすることも可能になります。
リダイレクトとパイプについてはそれぞれ下記のページで解説していますので、興味があればこちらもぜひ読んでみてください!



[…] OSコマンドを実行できる。コマンド一覧 […]