このページでは、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
コマンドで調べて色々試してみてください!
また、今回紹介したのは、ほぼディレクトリ関連・ファイル関連のコマンドでしたが、ターミナルで行う作業の基本はディレクトリやファイルに対する操作です。
ここで紹介したコマンドは、ターミナルを扱っていく上で必ず使用するコマンドになってくると思いますので、是非この機会にコマンド名だけでも覚えておきましょう!
ちょっと上級者向けの話になりますが、リダイレクトやパイプを利用することで、コマンドの結果をファイル保存したり、コマンド同士を連携して動作させてコマンドで実現可能な操作の幅を広げたりすることも可能になります。
リダイレクトとパイプについてはそれぞれ下記のページで解説していますので、興味があればこちらもぜひ読んでみてください!
パイプ | について解説( | と | xargs の違いも理解できる!) コマンドのリダイレクトについて解説(標準入力や標準出力の接続先を変更)
[…] OSコマンドを実行できる。コマンド一覧 […]