LoginSignup
14
15

More than 3 years have passed since last update.

よく使うかもしれないUNIXコマンド Mac

Last updated at Posted at 2018-04-22

参考

ターミナルのコマンドチートシート
爆速でターミナルを使うためのショートカット集【初学者用】

初歩的な補足

ファイル名末尾のマークについて

シンボリックファイルには が付く (Windowsにおける「ショートカット」ファイルを指す)
・ファイルに実行属性があれば * が付く(Windowsにおける「.exe」ファイルを指す)

マークについて
brew@

/usr/bin/vim*

ファイルとディレクトリの区別

ls -lコマンドなどで表示される詳細情報の先頭部分でファイルとディレクトリが判別できる。

詳細を表示
ls -l
# -rwxr--r-- 1 root root 3443  5 20 04:57 file_desu.txt
# drwxr-xr-x 1 root root 2562  6 12 05:21 dir_desu
先頭部分の記号で判別
- : ファイル
d : ディレクトリ

ls -F/がつくかどうかで判別しても良い

末尾に/があればディレクトリ
ls -F

# file_da.txt
# dir_da/

ターミナル画面分割について

command + dで画面分割できる。最初のうちは不意に分割してしまって戻し方が不明で困ったりするので。。。操作メモ

画面分割関連の操作
#分割
command + d

#統合
command + shift + d

画面入出力情報の清掃w

コマンド入力していくとターミナル画面表示がごちゃごちゃしてきて
わかりづらいな、という時に表示を消してスッキリさせることができます。
(コマンド履歴から消えるわけではなく、あくまでも表示上消えるだけです。)

# 最新の表示を1つ消す
command + l

# 入出力情報を全て消す
control + l
# もしくは下記コマンド
clear

control + l = clear

隠しファイル表示

通常設定では見れない設定ファイルなどを可視化する

#隠しファイル表示
defaults write com.apple.Finder AppleShowAllFiles YES

#再度、非表示に
defaults write com.apple.Finder AppleShowAllFiles NO

デバッグ作業的なやつ

プロセスをバックグラウンドで起動
# コマンド &
sleep 8 &

# 実行中プロセスの確認
ps $! 

# 複数コマンド実行
#(コマンド1; コマンド2) &
(sleep 5; echo done) &
プロセスをバックグラウンド起動し、標準出力とエラー出力は捨てる(表示しない)
hoge.sh > /dev/null 2>&1 &

Linuxコマンド(Bash)でバックグラウンド実行する方法のまとめメモ
プロセスをバックグラウンドで起動しつつ、標準出力とエラー出力を捨てる - stack_stuck’s blog

よく使うかもなコマンド

linuxのテキスト編集(vi, sed, tr, grepなど+xargs)まとめ
wgetコマンド

echo

任意の文字列を出力(表示)する

実行例
echo "hoge"

# 改行させる
# -e オプションと \n で改行
echo -e "\nhoge\npiyo"
# もしくは -e オプションと \\n (クォートの必要なし)
echo -e hoge\\nhoge

# ファイル追記
echo -e "\nhogehoge...end" >> hoge.txt

printf

任意の文字列を出力(表示)する

実行例
# デフォルトでは最終行が改行されない
printf "piyo"

# 改行させる
# \n
printf "piyo\n"

echoコマンドで改行やタブを扱うには@Linux (Debian Etch) | Mazn.net

ls

ディレクトリ内の内容(ファイル・ディレクトリ)を表示

実行例
# ファイル名だけ1行ずつ表示
ls -1

# 詳細情報付きで(1行ずつ)表示
ls -l 

# ドットファイル(隠しファイル)を表示
ls -a

# 全ての内容を詳細情報を付けて(1行ずつ)表示
ls -la

# ファイル(ディレクトリ)種別毎に末尾にマーク付与して表示
ls -F
更新日時順に表示
# 詳細表示しつつ、更新日順に並び替えて表示
ls -lt

# 上記を逆順で表示
ls -ltr
最新のファイル1件のみ表示
ls -t1 | head -n1
ファイル個数を確認(カウントする)
ls -l | wc -l
複数階層があれば再帰的に表示
# hoge/hoge2/hoge3

ls -R hoge

ディレクトリ内のファイル数をカウントする

(Macの場合、llをalias設定した方が使い勝手がいいかも
Linuxは標準で ll が使用可)

Macのターミナルでよく使うコマンドにエイリアスを作りました

touch

ファイルを作成する

touch hoge.txt

which

コマンドの実行ファイルをフルパスで表示
「あれ? あのコマンドって使える状態だっけ?」という場合、確認するときに。
あとは、同名の実行ファイルが複数ある場合、コマンド実行した際、どこから呼ばれてるか確認するときとか

# which コマンド名
which python

# 同名実行ファイルが複数ある場合、すべて表示する -aオプション
which -a python

cd

ディレクトリの移動

# test/etc に移動(現在のディレクトリから)
cd test/etc

# ホームディレクトリ配下の test2/eetc に移動
cd ~/test2/eetc

# 1つ上の階層に移動(戻る)
cd ..
# 2つ上の階層に移動(同様に3つ以上も可能)
cd ../../

# 直前にいたディレクトリへ戻る
cd -

#---#

# ホームディレクトリへ戻る
cd
#もしくは
cd ~/
#もしくは
$HOME

ディレクトリの移動は cd コマンドよりも pushd コマンドのほうが便利!

open

ターミナルからコマンドでアプリやサイトを開く
単純にローカルディレクトリを開いたりもできる。

アプリを起動
open /Applications/アプリ名.app
URLからWebページ開く
# open URL
open http://github.com
アプリを指定してファイルを開く
# open -a アプリ名 ファイル名
open -a Atom README.md
今いるディレクトリをFinderで表示
open .

Macターミナルのopenコマンドの使用例
ターミナルからファイルを開く

say

こいつ、しゃべるぞ。。。
(事前に
システム環境設定アクセシビリティスピーチシステムの声カスタマイズ
から音声ファイルをダウンロードしとく)

say -v Good shinchoku dowdeghska shinchku dowdeghska

非実用 say コマンド · GitHub

history

コマンド履歴を表示する。
後に数字をつけて表示する履歴数を指定(grep組み合わせると便利)
!履歴番号でその履歴番号のコマンドを実行できる。

history
最新から100件表示
history 100
スクロール可能な状態で表示
history | less
# shift + g で最新行へ
G
# q で終了
q
検索したい文字列を含む行のみ表示
history | grep "検索したい文字列"

# &スクロール可能な状態で表示
history | grep "検索したい文字列" | less
履歴番号のコマンドを実行
# !履歴番号
!20
よく使っているコマンドをランキング表示する
# このままだとあんまり実用的では無いかも
history | awk 'BEGIN {FS="[ \t]+|\\|"} {print $3}' | sort | uniq -c | sort -nr | head 

毎日使えるBashコマンドテクニック

find

find / -name [ファイル名]
# 特定のファイルを探す。

find . -name mkmf.log
# エラーの際に、対象のプロジェクトディレクトリ内でエラーファイルを探す

find . -name '*.php'
# phpファイルを探してくる。

find . -name '???.txt'
# ファイル名が3文字のtxtファイルを探してくる。

* -> 任意の0文字以上。
? -> 任意の一文字。
【ド素人メモ】findとgrepとワイルドカードの違いとか。(UNIXコマンド)

find . -type l
シンボリックリンクのファイルを探して表示

find . -type l | grep ".net"
.net をファイル名に含むシンボリックリンクのファイルを表示

find . -type d
サブディレクトリを表示

Nokogiriにハマるつもりじゃなかった – MCATM SAYS NOTHING – a web developer still holds his knee

ファイル名に「○○」という文字列が含まれているファイルのリストを取得。

find [検索対象フォルダのパス] -type f -name "*[検索したい文字列]*"

【find・grep】特定の文字列を含むファイルのリストを取得する方法。

cat

ファイルの中身を表示する

オプション

  • -b 空白行を消して表示
  • -s 連続した空白行を一つにまとめて表示
# ファイルの中身を表示
cat fileA
# ファイルの中身を[行番号をつけて]表示
cat -n fileB
# 複数ファイルの中身を連結して表示
cat fileC fileD fileE
# ファイル内容を逆順(最終行→先頭行の順)にして表示
tac fileA

# ファイル内容を別ファイルに出力(上書き)
cat fileA > fileB
# ファイル内容を別ファイルに出力(追記)
cat fileA >> fileB
簡易テキストファイル作成
cat > hogehoge
 #任意の内容を入力
 #最終行まで入力したら改行後に「control + c」でファイル保存して終了
control + c

【Linuxコマンド集】3分でわかるcat コマンドの使い方

less

ファイルスクロール閲覧可能な状態で表示する
編集できないvimのような感じ

lessでファイルを開く
less gg.txt
less閲覧状態での操作

# ヘルプ表示(q で表示終了)
h
# 1ページずつ戻る(上へ)
w
# 1ページずつ進める(下へ)
space
# 1行ずつ進める(下へ)
Enter 
# 上下にスクロール
↑,↓
y,e
k,j
# 終了 
q 

オプション
-X : less画面を閉じた際に編集内容がクリアされないようにする
他のコマンドとパイプで繋げて使う
# 表示内容が長い時にスクロールして確認できる
ls -laR | less

【 less 】コマンド(基本編)――メッセージやテキストファイルを1画面ずつ表示する:Linux基本コマンドTips(84) - @IT
@IT:lessコマンド終了時の画面クリアを防ぐには

grep

ファイルを開いた中身に、「検索したい文字列」が含まれているファイルのリストを表示(検索対象フォルダ配下を再帰検索)

-r ディレクトリ指定の場合はサブディレクトリ内ファイルも含めて検索
-l ファイル名のみ表示する

grep [検索したい文字列] -rl [検索対象フォルダのパス]

【find・grep】特定の文字列を含むファイルのリストを取得する方法。
【 grep 】コマンド――特定の文字を含む行を抽出する:Linux基本コマンドTips(9)

結果の個数表示

ファイル実行結果の簡易集計とかに
grep -c "hoge"
# 3

hogesayhoge.sh | grep -c "hoge"
# 800

grepコマンドでヒットした数をカウントしました

mv

ファイルを移動したり、リネームしたりできる

ファイル名を変更

mv [変更前のファイル] [変更後のファイル]
mv a.txt aa.txt

ディレクトリにも適用可

複数選択

# mv 移動したいファイル(複数) 移動先ディレクトリ 

mv a b c dir/

# dir内にa,b,cが移動する
#ワイルドカード利用

mv huga_hoge/**/*.txt dir/

# 指定ディレクトリ内の全txtファイルをdir内に移動

一度に複数のファイルを特定のDirにコピー/移動(cp/mv)する ~ Unix Command ~

同様の方法で cp(コピー) でも複数選択ができる

cp

ファイルをコピーできる。ディレクトリコピーも可

所有者・グループ・パーミッション・タイムスタンプを保持したままコピー
cp -p hoge hoge2

ディレクトリを再帰的に任意の場所にコピー

-r:ディレクトリを再帰的に(内部のファイルも含めて)コピー
-v:コピーされるディレクトリ(ファイル)を表示

cp -rv [コピー元パス] [コピー先パス]

コピー元パスに注意。末尾に/をつけた場合、ディレクトリの内部がコピーされ、ディレクトリ自体はコピーされないので、ディレクトリごとコピーしたい場合はパス末尾に/つけないように。

cp -rv dir1/test app/assets 

【 cp 】 ファイルやディレクトリをコピーする | 日経 xTECH(クロステック)

バックアップファイルなどを作成したい場合の簡略記法
# cp コピーしたいファイルのパス{,.任意の拡張子}
cp /Users/hoge/piyo.txt{,.bkup}

# 複製されたファイルは複製元ファイルと同ディレクトリに生成される。
ls /Users/hoge/
# piyo.txt piyo.txt.bkup

mkdir

ディレクトリを作成できる

mkdir ~/hogE

#pオプションで複数階層を一気に作成
mkdir -p ~/piYo/piiyo/pyo
作成と同時にディレクトリ移動
mkdir -p ~/piyo2/piyo3/piyo4 && cd $_

pwd
# /piyo2/piyo3/piyo4

【Linux】複数階層で構成されるディレクトリを一気に作成する方法 - 私は素人サーバ管理者
mkdirとcdを同時に

rm

ファイル(ディレクトリ)を削除する。

ディレクトリを再帰的(中身ごと全部)に警告なしで削除

rm -rf 削除したいディレクトリ

【 rm 】 ファイルやディレクトリを削除する | 日経 xTECH(クロステック)

sed

sed -i -e 's/変更前の文字列/変更後の文字列/g' ./data.txt

ファイルと文字列を指定して一括で置換できる。
※上記コマンドでは-iオプションでバックアップファイルを作りつつ文字列置換している。
(バックアップファイルは上の例でいうとdata.txt-eというものが作成されるかと)

ちなみにMacではgsed使ったほうが便利(homebrewでインストールできる)

置換対象を複数指定(-eオプション)
ls | sed -e 's/[\[]//g' -e 's/\]//g' -e 's/\"//g' -e "s/'//g"

# [ と ] と " と ' を空文字に置き換えて表示

sedで置換がうまくいかなかった話
シェルスクリプトによる文字列処理:置換や削除をする方法
sedコマンドでファイルを上書き編集
sedコマンドによるファイルの書き換え | シキノート
改行に置換するためのワンライナー集(tr/sed/perl) · DQNEO起業日記
sedコマンドで置換する際に複数の処理を追加する方法 - 塩焼きブログ

read

キーボードからの入力待ち状態になる。主に入力内容を変数に格納する際に利用。
あとは、対話的に処理を実行したり、パスワード入力の際に使用したり。

zshでターミナルから実行
# -s 入力する内容が表示されない(記録されない)のでセキュリティを気にするときに便利かも。

# 変数PIYOに値を入れてみる
read -s "PIYO? is "
# 適当に入力

# 確認
echo $PIYO

# 変数削除
unset PIYO
echo $PIYO  

Linux 作業手順書からべた書きパスワードをなくすシンプルなアイディア
zshでも作業手順書からべた書きパスワードをなくしたい!!

chmod

chmodはファイル or ディレクトリに対する権限を設定するコマンド。

#形式
chmod 権限設定 ファイルパス
#chmod 744 test.txt
0 1 2 3 4 5 6 7
--- --x -w- -wx r-- r-x rw- rwx

chmod コマンド

ln

リンクを作成する
ln: ハードリンクを作成
ln -s: シンボリックリンクを作成

※ 以下はシンボリックリンクの作成について

シンボリックリンク(ショートカット)の作成
# 各パスの末尾に / をつけないほうがいい
# ln -s リンク先パス リンク名

ln -s /hoge/hoge/hogetta ./piyotta
リンクの削除
# unlink 削除するリンク名
unlink ./piyotta

rm リンク名でも削除できるが、誤って実体削除する可能性もあるので、unlink使うのが無難

シンボリックリンクの作成と削除 - Qiita
【 ln 】コマンド ― ファイルのハードリンクとシンボリックリンクを作る

chown

指定したファイルやディレクトリの ユーザー所有権(所有者) または
グループ所有権(グループ)を変更する。
ユーザー所有権は、ユーザー名(ユーザーIDで指定)で指定。
グループ所有権は、グループ名(グループID)で指定。

#確認
ls -l hoge
#> -rw-r--r-- 1 funga fungaa 0 Dec 11 15:55 hoge


#形式 chown [オプション] ユーザー[:グループ] ファイル

# chown 変更後のユーザー所有権 対象のファイル(パス)
chown root hoge
#> -rw-r--r-- 1 root fungaa 0 Dec 11 15:56 hoge

# chown 変更後のユーザー所有権:グループ所有権 対象のファイル(パス)
chown root:root hoge
#> -rw-r--r-- 1 root root 0 Dec 11 15:56 hoge

省略記法
# 所有者とグループが同じなら下記の方が入力が楽
# chown ユーザー(グループ)名. 対象
chown root. hoge

Linuxコマンド【 chown 】ファイルの所有者やグループを変更

htop

グラフィカルにプロセスをリアルタイム表示する
topの高機能版(使用にはインストールが必要)

homebrewでインストール
brew install htop
実行
htop

# control + c で終了

htop - an interactive process viewer for Unix
スタバで top でドヤ顔しているMacユーザはもう古い。これからは htop だ!
htopコマンドで覚えておきたい使い方11個 | 俺的備忘録 〜なんかいろいろ〜

jot

指定した数値を出力。
回数や範囲を指定できる(数字以外に文字も出力可)。
変数を使っての指定も可能。便利。
-r:乱数を生成

#基本
jot 回数 開始 終了

#100~50000の間の乱数を9回
jot -r 9 100 50000

シェルスクリプトで乱数を扱う - hyconの日記

cut

始点(左端)から文字を指定して切り出す。revと組み合わせて末尾からも指定可能

cutオプション
-c : 特定の位置の文字を切り出す
-d : 区切り文字で指定したフィールドを切り出す
-c
# 10番目のみ
$ echo grejkgerjng | cut -c10                             
n

# 4番目以降
$ echo grejkgerjng | cut -c4- 
jkgerjng

# 3〜7番目
$ echo grejkgerjng | cut -c3-7
ejkge

-d「,」で区切って4,6番目のみ
$ echo gr,e,jk,qe,rj,n,g | cut -d',' -f4,6
qe,n
-cとrev
# 末尾から6文字切り取った結果を表示
$ echo grejkgerjng | rev | cut -c7- | rev
grejk

フィルタを使用した文字列操作 2 | UNIX & Linux コマンド・シェルスクリプト リファレンス

xargs

標準入力 or ファイル からリスト形式で読込、コマンドラインを作成して実行する。
コマンド出力をパイプでxargsコマンドに送り、別のコマンドの引数を指定して利用するのが主な使い方。

基本形
コマンド | xargs オプション コマンド
オプション
I 変数名  : 標準入力からの情報をコマンド実行時に任意の位置に配置できる
p        : 1ファイルずつ実行するか確認しながら実行できる
n 数     : コマンドに渡す引き数の数を指定

以下はファイル名を一括で変更(表示)する例。
\lsalias設定を無視するための記述。)

一括で名前変更
# ディレクトリ内の全てのファイルが対象
\ls -1 *

# --- ファイル名の末尾に .txt をつける

## 表示のみ
\ls -1 * | xargs -I{} echo {}.txt

## 実際に変更
### 確認しながら
\ls -1 * | xargs -p -I{}  mv {} {}.txt
### 即座に反映
\ls -1 * | xargs -I{}  mv {} {}.txt


# --- ファイル名の先頭に hige_ をつける
\ls -1 * | xargs -I{} echo hige_{}

# --- ファイル名を hige にする
\ls -1 * | xargs -I{} echo hige

拡張子で絞れば特定のファイルのみ実行対象にできる。

拡張子指定
# txt ファイルのみ対象にする

\ls *.txt | xargs -I{} echo hige

xargs【コマンド】
覚えると便利、xargsコマンドの使い方12選 | マイナビニュース
xargsコマンドで覚えておきたい使い方・組み合わせ7個(+1個)
find/xargsを使ったファイル・ディレクトリ名の一括置換/一括作成コマンド一覧

qlmanage

指定した画像ファイルをクイックルック(別ウィンドウ)で表示する。
(画像表示のできない)ターミナル上から画像を確認したいときに。。

qlmanage -p 画像ファイル

画像ファイルをMacのコマンドラインで表示する - ごずろぐ

launchctl

サービス(daemon, agent)の管理コマンド
Linuxにおけるsystemctlserviceのようなもの

特定サービスの自動起動設定もこのコマンドで管理

# 対象サービス(plist)一覧
ll ~/Library/LaunchAgents

# サービス停止
launchctl unload ~/Library/LaunchAgents/サービス名

# サービス起動
launchctl load ~/Library/LaunchAgents/サービス名

# -w をつけると強制的に 停止/起動する
launchctl unload -w ~/Library/LaunchAgents/サービス名
launchctl load -w ~/Library/LaunchAgents/サービス名

plistの設定次第でcronのような定期実行も設定できたり、奥が深い。

Mac のサービス起動/停止を簡単に | ハックノート
Mac の起動時に nginx を launchctl / launchd で自動起動(デーモン化)させる設定をあれこれ試行錯誤したメモ : にわタコのblog
コマンド/launchctl - MacWiki
launchdで定期的にスクリプトを実行 - Qiita

zip

皆さんご存知zip。ファイル(ディレクトリ)を圧縮するコマンド。
-eオプションつければパスワード付きのファイルになる。

zip 圧縮後のファイル名.zip 圧縮したいファイル名
zip test.zip test.txt

zip -e pass.zip test.txt
#パスワードを2回入力

ディレクトリ圧縮には -r オプションをつける
みたいだけど、自分がやった限りではオプションつけなくてもファイルと同様にディレクトリ圧縮できた。)

14
15
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
14
15