Macのターミナルでよく使うコマンドからあまり使わないけどぜひ試してほしいコマンドまで幅広く紹介していきます。Macだけじゃなくて、他のUNIX/Linux系OSでも使える知識なので覚えて損はありません。
よく使うコマンド
pwd | 現在の作業ディレクトリ名を返す |
cd | 作業ディレクトリを変更する |
ls | ディレクトリ内のファイル一覧を返す |
cp | ファイルをコピーする |
rm | ファイルを削除する |
mv | ファイルを移動する、ファイル名を変更する |
mkdir | ディレクトリを作成する |
rmdir | ディレクトリを削除する |
chmod | ファイルのパーミッションを変更する |
less | テキストファイルの内容を表示する |
echo | 文字列を画面に表示する、文字列をファイルに書き込む |
ln | ファイルのリンクを作成する |
pwd
print working directory の略で、現在の作業ディレクトリを返します。自分の居場所を見失ってしまった時に使います。
パスワードとは関係ありません。でも密かにパスワードと覚えている人は多いはずです。
% pwd
/Users/username
cd
change directory の略で、作業ディレクトリを変更します。別の言い方をすると、自分の居るディレクトリを移動します。
% cd /usr/local/bin #/usr/local/bin に移動する
% cd foo #現在のディレクトリ下にある foo ディレクトリに移動する
% cd .. #ひとつ上の階層に移動する
% cd ../foo #ひとつ上の階層にある foo ディレクトリに移動する
% cd ~ #ホームディレクトリに移動する
% cd ~/foo #ホームディレクトリ下にある foo ディレクトリに移動する
ls
list の略で、ディレクトリ内のファイル一覧を返します。
% ls #現在のディレクトリのファイル一覧を表示する
% ls /usr/local/bin #/usr/local/bin 内のファイル一覧を表示する
% ls -l #詳細な情報を含めてファイル一覧を表示する
% ls -a #不可視ファイルを含めてファイル一覧を表示する
% ls -lh #詳細なファイル一覧を表示する、ファイルサイズは読みやすい単位で表示される
% ls -G #ファイルの種類によって色分けして表示する
% ls -Glah #複数のオプションをまとめて指定
% ls -l foo.txt #指定したファイルの詳細情報を表示
cp
copy の略で、ファイルをコピーします。
% cp foo.txt bar/ #foo.txt を bar ディレクトリ下にコピーする
% cp foo.txt bar.txt #foo.txt をカレントディレクトリに bar.txt という名前でコピーする
% cp -i foo.txt bar/ #コピー先に上書きされるファイルがある場合に確認する
% cp -R foo_dir bar_dir #ディレクトリとその中身をコピーする
rm
remove の略で、ファイルを削除します。
% rm foo.txt #カレントディレクトリの foo.txt を削除する
% rm /Users/username/foo.txt #/Users/username 下にある foo.txt を削除する
% rm -i foo.txt #ファイルを削除する前に確認する
% rm -r foo_dir #ディレクトリ foo_dir とその中身を削除する
% rm -rf foo_dir #ディレクトリ foo_dir とその中身を警告なしで削除する
mv
move の略で、ファイルを移動します。移動先にファイル名を指定した場合はファイルの名前が変更されます。
% mv foo.txt bar_dir/ #現在のディレクトリにある foo.txt を bar_dir の下に移動する
% mv foo.txt bar.txt #foo.txt の名前を bar.txt に変更する。
% mv -i foo.txt bar.txt #移動先に上書きされるファイルがある場合に確認する
mkdir
make directory の略で、ディレクトリを作成します。
% mkdir foo #foo という名前のディレクトリを作成する
% mkdir foo bar baz #3つのディレクトリをまとめて作成する
rmdir
remove directory の略で、ディレクトリを削除します。
% rmdir foo
chmod
change mode の略で、ファイルのパーミッション(アクセス権)を変更します。
% chmod 700 foo.sh #foo.sh のパーミッションを700にする
less
テキストファイルの内容を表示します。
% less foo.txt #foo.txt の内容を表示する
% less -N foo.txt #行番号を付けて foo.txt の内容を表示する
less
コマンドはテキストファイルを開き、1画面分ずつ表示します。space キーで1画面分下にスクロール、b キーで1画面分上にスクロールします。↓キーで1行下に、↑キーで1行上にスクロールします。q キーで終了します。
ファイルの内容を見る以外に、コマンドの出力が長い時にそれを1画面ずつ表示するために使うこともあります。
% ls -l /usr/bin | less
ls -l /usr/bin
の出力結果をパイプ(|
)で less
コマンドに渡します。パイプで渡された値は less
の引数になります。したがって、ls -l /usr/bin
の出力が1画面ずつ表示されることになります。
パイプの使い方、最初はなんのこっちゃかもしれませんが、繰り返し使ってるうちに慣れるのでご心配なく。
echo
引数を標準出力に出力します。
急に標準出力とか言い出しました。これまで「画面に表示する」とか「返す」と言っていたのも正確には「標準出力に出力する」なのです。デフォルトでは標準出力先がターミナルの画面なので、画面に表示されます。
% echo "いえーい" #画面に「いえーい」と表示する
いえーい
% echo $PATH #環境変数 $PATH を表示する
/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
標準出力先をファイルにする時は次のようにします。
% echo "いえーい" > foo.txt #foo.txt に「いえーい」と書き込む
% less foo.txt
いえーい
% echo "ひゃっほう" >> foo.txt #foo.txt に「ひゃっほう」と追記する
% less foo.txt
いえーい
ひゃっほう
ln
link の略で、ファイルのハードリンクやシンボリックリンクを作成します。
シンボリックリンクとはファイルの分身のようなものです。MacのエイリアスやWindowsのショートカットに似ています。
% ln -s target.txt symlink #target.txt のシンボリックリンク symlink を作成する
ハードリンクは使わないので覚えなくていいです。というのも冷たいので説明すると、ファイルにあだ名を付けるのがシンボリックリンクで、2つめの本名を付けるのがハードリンクです。うまい例えですね(自画自賛)。
たまに使うコマンド
find | ファイルを検索する |
grep | 文字列を検索する |
which | コマンドのフルパスを返す |
where | コマンドのフルパスをすべて返す |
sort | 文字列を行単位で並べ替える |
tail | ファイルの最後の数行を返す |
head | ファイルの最初の数行を返す |
wc | ファイルや標準入力の行数、単語数、バイト数などを返す |
touch | ファイルのタイムスタンプを変更する、ファイルを新規作成する |
cat | ファイルを連結して返す |
du | ディレクトリごとのディスク使用量を返す |
env | 環境変数を設定してコマンドを実行する、環境変数を返す |
source | ファイルに書かれたコマンドを実行する |
sudo | root権限でコマンドを実行する |
tar | アーカイブを作成・展開する |
xargs | 標準入力からコマンドラインを作成して実行する |
ps | 実行中のプロセスの一覧を返す |
kill | 実行中のプロセスを終了させる |
man | マニュアルを表示する |
date | 日付や時刻を表示する |
find
ファイルやディレクトリを検索します。
#/foo/bar の中にある baz.txt という名前のファイル・ディレクトリを探す
% find /foo/bar -name baz.txt
#/foo/bar の中にある baz で始まる名前のファイル・ディレクトリを探す
% find /foo/bar -name "baz*"
ワイルドカード(*
)を使う時は、シングルクオートまたはダブルクオートで括ります。
grep
global regular expression print の略で、標準入力の文字列を検索してマッチする行を返します。
#file.txt から文字列 foo を含む行を検索して表示する
% grep foo file.txt
#file.txt から文字列 foo を含む行を検索し、さらに bar を含む行を検索して表示する
$ grep foo file.txt | grep bar
which, where
コマンドのフルパスを返します。
同じコマンドが複数ある場合、which は優先順位の高いものを1つだけ、where はすべてのパスを返します。
% which perl
/opt/homebrew/bin/perl
% where perl
/opt/homebrew/bin/perl
/usr/bin/perl
sort
文字列を行単位で並べ替えます。
#duの結果を容量順に並べ替える
% du | sort -n
0 ./bar
8 ./baz
88 ./foo
232 .
#duの結果をディレクトリ名順に並べ替える
% du | sort -k 2
232 .
0 ./bar
8 ./baz
88 ./foo
tail, head
tail
はファイルの最後の数行、head
は最初の数行を表示します。初期値は10行です。
tail
はログファイルを確認する時に使うことがありますけど、head
はあまり使わないかな。
wc
word count の略で、ファイルや標準入力の行数、単語数、バイト数などを返します。
実際は行数を数えたい時にしか使わないですね。
touch
ファイルのタイムスタンプを変更します。存在しないファイル名を指定するとファイルが新しく作成されるので、それ目的で使われることのほうが多い気がします。なんかかわいそう。
cat
concatenate の略で、1つ以上のファイルを連結して出力します。初めて知らない英語が出てきました。
ファイルを1つだけ指定した場合はそのファイルを出力するので、ファイルの中身を見る時に使う人もいるようです。私には理解できません。less のほうが使いやすいと思うけどなぁ。
du
disk usage の略で、ディレクトリごとのディスク使用量を返します。
#現在のディレクトリ下のすべてのディレクトリのディスク使用量を表示
% du
264 ./foo
8 ./baz
0 ./bar
416 .
#指定したディレクトリのディスク使用量を表示
% du foo
264 foo
#読みやすい単位で表示
% du -h
132K ./foo
4.0K ./baz
0B ./bar
208K .
env
environment の略で、環境変数を設定してコマンドを実行します。何も引数を指定しなければ環境変数の一覧を表示します。
#dateコマンドの出力結果
% date
2022年 3月31日 木曜日 02時36分27秒 JST
#環境変数 LANG=C を設定して date
% env LANG=C date
Thu Mar 31 02:37:25 JST 2022
#環境変数の一覧を表示
% env
LANG=ja_JP.UTF-8
PWD=/Users/username
SHELL=/bin/zsh
PATH=/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
HOME=/Users/username
USER=username
(中略)
HOMEBREW_PREFIX=/opt/homebrew
HOMEBREW_CELLAR=/opt/homebrew/Cellar
HOMEBREW_REPOSITORY=/opt/homebrew
_=/usr/bin/env
source
ファイルに書かれたコマンドを実行します。
シェルの設定ファイルを変更した時に、設定をすぐに反映させるためによく使用します。
sudo
別のユーザ(主にroot)の権限でコマンドを実行します。su が何の略かについては、super user, switch user, substitute user の3つの説があっていまだに揉めています。
一般ユーザ権限でうまくいかない時に、なんでもかんでも sudo しちゃう人がいますが、本当に必要な時だけにしましょう。危険です。そりゃ、神になれば何でもできるんですよ。sudo は甘えです。
tar
tape archives の略で、アーカイブの作成や展開をします。
tar
自体は複数のファイルをまとめるだけのものですが、圧縮プログラムと連携して使うことが多いです。
#foo をアーカイブしてgzipで圧縮する
% tar -zcvf foo.tar.gz foo
#foo をアーカイブしてbzip2で圧縮する
% tar -jcvf foo.tar.bz2 foo
#foo をアーカイブしてzzで圧縮する
% tar -Jcvf foo.tar.xz foo
#アーカイブを展開する
% tar -xvf foo.tar.gz
xargs
extended arguments の略で(execute arguments 説もあり)、標準入力を引数としてコマンドラインを作成して実行します。
こいつの使い方はちょっとややこしいので、また別の記事でやるとかやらないとか(どっち)。
ps
process status の略で、実行中のプロセスの一覧を返します。
# すべてのプロセスをCPUやメモリの使用率を含めて表示する
% ps axu
#httpdが起動しているか確認する
% ps axu | grep httpd
username 774 0.0 0.0 409276112 384 ?? S 土05AM 0:00.02 /opt/homebrew/opt/httpd/bin/httpd -D FOREGROUND
username 773 0.0 0.0 409409488 512 ?? S 土05AM 0:00.28 /opt/homebrew/opt/httpd/bin/httpd -D FOREGROUND
username 772 0.0 0.0 409411536 512 ?? S 土05AM 0:00.60 /opt/homebrew/opt/httpd/bin/httpd -D FOREGROUND
username 647 0.0 0.0 409014272 2800 ?? S 土05AM 0:19.07 /opt/homebrew/opt/httpd/bin/httpd -D FOREGROUND
username 8769 0.0 0.0 408628368 1616 s000 S+ 7:04PM 0:00.00 grep httpd
kill
実行中のプロセスを終了させます。
何かの間違いで暴走したプロセスを止める時に使います。
#プロセスを正常終了させる
% kill <プロセス番号>
#プロセスを強制終了させる
% kill -KILL <プロセス番号>
man
manual の略で、マニュアルを表示します。
コマンドの使い方を調べる時に使います。
% man <コマンド名>
date
日付や時刻を表示します。
#現在の日時を表示する
% date
2022年 3月31日 木曜日 17時25分43秒 JST
#現在の日時をフォーマットして表示する
% date "+%Y-%m-%d %H:%M:%S"
2022-03-31 17:25:43
#日時をファイル名に付ける
% touch file_`date "+%Y%m%d-%H%M"`
% ls
file_20220331-1725
あまり使わないコマンド
cal | カレンダーを表示する |
df | ディスクの空き容量を表示する |
dig | ドメイン名のDNSレコード情報を取得する |
host | ホスト名からIPアドレス、IPアドレスからホスト名を調べる |
ping | ネットワークの疎通を確認する |
top | システムの上位プロセスをリアルタイムに表示する |
traceroute | ネットワークの経路を調べる |
uname | システムに関する情報を表示する |
uptime | システムの稼働時間を表示する |
cal
calendar の略で、カレンダーを表示します。
有名なコマンドですけど、実務で使うことないですよね。
df
disk free の略で、ディスクの空き容量を表示します。
macならば「このMacについて」で確認したほうがわかりやすいです。
dig
domain information groper の略で、ドメイン名のDNSレコード情報を取得します。私はドメインを掘るツールだと思ってました。
% dig example.com any #example.com のDNS情報を調べる
% dig @8.8.8.8 example.com any #特定のネームサーバに問い合わせる
host
ホスト名からIPアドレス、またはIPアドレスからホスト名を調べます。
% host www.google.com #ホスト名 www.google.com のIPアドレスを調べる
www.google.com has address 172.217.161.68
www.google.com has IPv6 address 2404:6800:4004:820::2004
% host 172.217.161.68 #IPアドレス 172.217.161.68 のホスト名を調べる。
68.161.217.172.in-addr.arpa domain name pointer nrt20s09-in-f4.1e100.net.
ping
packet internet groper の略で、ネットワークの疎通を確認します。
% ping -c 10 www.google.com
PING www.google.com (142.251.42.132): 56 data bytes
64 bytes from 142.251.42.132: icmp_seq=0 ttl=117 time=18.682 ms
64 bytes from 142.251.42.132: icmp_seq=1 ttl=117 time=13.080 ms
64 bytes from 142.251.42.132: icmp_seq=2 ttl=117 time=15.522 ms
64 bytes from 142.251.42.132: icmp_seq=3 ttl=117 time=17.367 ms
64 bytes from 142.251.42.132: icmp_seq=4 ttl=117 time=16.800 ms
64 bytes from 142.251.42.132: icmp_seq=5 ttl=117 time=15.653 ms
64 bytes from 142.251.42.132: icmp_seq=6 ttl=117 time=14.764 ms
64 bytes from 142.251.42.132: icmp_seq=7 ttl=117 time=17.426 ms
64 bytes from 142.251.42.132: icmp_seq=8 ttl=117 time=10.194 ms
64 bytes from 142.251.42.132: icmp_seq=9 ttl=117 time=15.134 ms
--- www.google.com ping statistics ---
10 packets transmitted, 10 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 10.194/15.462/18.682/2.317 ms
オプション -c 10
を指定すると10回パケットを送って終了します。指定し忘れると永久に終わらないので気を付けてください。もしやっちまった場合は control + c で抜け出すことができます。
top
システムの上位プロセスをリアルタイムに表示します。
情報がリアルタイムに更新されていくので、ずっと見ていられます。top
を肴に日本酒を呑むことがあるのは私だけでしょうか。
終了する時は q キーです。
traceroute
ネットワークの経路を調べます。
% traceroute www.google.com
traceroute to www.google.com (142.250.207.4), 64 hops max, 52 byte packets
1 ntt.setup (192.168.1.1) 4.313 ms 3.707 ms 3.137 ms
(中略)
10 108.170.242.193 (108.170.242.193) 20.627 ms 24.732 ms 26.713 ms
11 216.239.43.51 (216.239.43.51) 21.196 ms 15.020 ms
216.239.43.53 (216.239.43.53) 11.137 ms
12 nrt13s54-in-f4.1e100.net (142.250.207.4) 20.246 ms 12.037 ms 13.394 ms
uname
unix name の略で、システムに関する情報を表示します。
% uname -a
Darwin mymac.local 21.4.0 Darwin Kernel Version 21.4.0: Mon Feb 21 20:36:53 PST 2022; root:xnu-8020.101.4~2/RELEASE_ARM64_T8101 arm64
uptime
システムの稼働時間を表示します。
ロードアベレージも表示されます。ロードアベレージを確認するために実行することが多いですね、私は。
% uptime
18:00 up 5 days, 14:01, 2 users, load averages: 1.32 1.47 1.40
さいごに
今回紹介したのは、ほんの一部のコマンドです。使い方や指定できるオプションも、もっともっとあります。いろいろ試して遊んでみてください。
でわでわ
コメント