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

#**参考**
[ターミナルのコマンドチートシート](https://qiita.com/you88/items/c500fbe7cedbdc9cd04b)
[爆速でターミナルを使うためのショートカット集【初学者用】](https://qiita.com/akito/items/d09a2d5b36d4cf7bac6d)

#**初歩的な補足**
###ファイル名末尾のマークについて
・[シンボリックファイル](http://wa3.i-3-i.info/word1151.html)には **`＠`** が付く （Windowsにおける「ショートカット」ファイルを指す）
・ファイルに実行属性があれば **`*`** が付く（Windowsにおける「.exe」ファイルを指す）

```rb:マークについて
brew@

/usr/bin/vim*
```

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

```zsh:詳細を表示
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
```
```zsh:先頭部分の記号で判別
- : ファイル
d : ディレクトリ
```
`ls -F`で`/`がつくかどうかで判別しても良い

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

# file_da.txt
# dir_da/
```

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

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

#統合
command + shift + d
```

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

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

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

`control + l` = `clear`

###隠しファイル表示
通常設定では見れない[設定ファイルなどを可視化](https://www.lastday.jp/2010/12/15/mac-geek-30-hacks)する

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

#再度、非表示に
defaults write com.apple.Finder AppleShowAllFiles NO
```
# デバッグ作業的なやつ
```zsh:プロセスをバックグラウンドで起動
# コマンド &
sleep 8 &

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

# 複数コマンド実行
#(コマンド1; コマンド2) &
(sleep 5; echo done) &
```
```zsh:プロセスをバックグラウンド起動し、標準出力とエラー出力は捨てる（表示しない）
hoge.sh > /dev/null 2>&1 &
```
>
[Linuxコマンド(Bash)でバックグラウンド実行する方法のまとめメモ](https://qiita.com/inosy22/items/341cfc589494b8211844)
[プロセスをバックグラウンドで起動しつつ、標準出力とエラー出力を捨てる - stack_stuck’s blog](http://stst.hateblo.jp/entry/20141004/1412397571)

#よく使うかもなコマンド
>[linuxのテキスト編集（vi, sed, tr, grepなど＋xargs）まとめ](https://qiita.com/gigamori/items/1a4bf45b4cd4fe1c2a00)
[wgetコマンド](https://qiita.com/ntkgcj/private/37b50ba4e1b2517c26ef)

##**echo**
任意の文字列を出力（表示）する

```zsh:実行例
echo "hoge"

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

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

##**printf**
任意の文字列を出力（表示）する

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

# 改行させる
# \n
printf "piyo\n"
```
>
[echoコマンドで改行やタブを扱うには@Linux (Debian Etch) | Mazn.net](https://www.mazn.net/blog/2009/01/06/169.html)


##**ls**
ディレクトリ内の内容（ファイル・ディレクトリ）を表示

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

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

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

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

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

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

ls -R hoge
```
>
[ディレクトリ内のファイル数をカウントする](https://qiita.com/stc1988/items/e3a1d7dccafe4ab573fa)


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

>
[Macのターミナルでよく使うコマンドにエイリアスを作りました](https://qiita.com/pugiemonn/items/da04a422cc7da548632e)

##**touch**
ファイルを作成する

```zsh
touch hoge.txt
```


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

```zsh
# which コマンド名
which python

# 同名実行ファイルが複数ある場合、すべて表示する -aオプション
which -a python
```
##**cd**
ディレクトリの移動

```zsh
# test/etc に移動（現在のディレクトリから）
cd test/etc

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

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

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

#---#

# ホームディレクトリへ戻る
cd
#もしくは
cd ~/
#もしくは
$HOME
```
>
[ディレクトリの移動は cd コマンドよりも pushd コマンドのほうが便利！](https://qiita.com/noraworld/items/81c12253d22b7575151a)

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

```zsh:アプリを起動
open /Applications/アプリ名.app
```
```zsh:URLからWebページ開く
# open URL
open http://github.com
```
```zsh:アプリを指定してファイルを開く
# open -a アプリ名 ファイル名
open -a Atom README.md
```
```zsh:今いるディレクトリをFinderで表示
open .
```
>[Macターミナルのopenコマンドの使用例](https://qiita.com/ryusukefuda/items/cec317b450b6322cadea)
[ターミナルからファイルを開く](https://sekika.github.io/2015/10/27/open-command/)

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

	say -v Good shinchoku dowdeghska shinchku dowdeghska
>
[非実用 say コマンド · GitHub](https://gist.github.com/susisu/c9b106745f94c85e482c)

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

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

# &スクロール可能な状態で表示
history | grep "検索したい文字列" | less
```
```zsh:履歴番号のコマンドを実行
# !履歴番号
!20
```
```zsh:よく使っているコマンドをランキング表示する
# このままだとあんまり実用的では無いかも
history | awk 'BEGIN {FS="[ \t]+|\\|"} {print $3}' | sort | uniq -c | sort -nr | head 
```
>[毎日使えるBashコマンドテクニック](https://news.mynavi.jp/article/20180618-647436/)






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

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

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

find . -name '???.txt'
# ファイル名が3文字のtxtファイルを探してくる。
```
>\* -> 任意の0文字以上。
? -> 任意の一文字。
[【ド素人メモ】findとgrepとワイルドカードの違いとか。（UNIXコマンド）](https://qiita.com/mochizukikotaro/items/a04c03a0d0a33848fcf2)

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

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

find . -type d
サブディレクトリを表示
```
>
[Nokogiriにハマるつもりじゃなかった – MCATM SAYS NOTHING – a web developer still holds his knee](http://mcatm.github.io/post/love-and-hate-about-nokogiri/)

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

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

>
[【find・grep】特定の文字列を含むファイルのリストを取得する方法。](https://qiita.com/pokari_dz/items/0f14a21e3ca3df025d21)

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

オプション

- -b　空白行を消して表示
- -s 連続した空白行を一つにまとめて表示

```zsh
# ファイルの中身を表示
cat fileA
# ファイルの中身を[行番号をつけて]表示
cat -n fileB
# 複数ファイルの中身を連結して表示
cat fileC fileD fileE
# ファイル内容を逆順（最終行→先頭行の順）にして表示
tac fileA

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

>
[【Linuxコマンド集】3分でわかるcat コマンドの使い方](https://eng-entrance.com/linux_command_cat)

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

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

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

```
```zsh:オプション
-X : less画面を閉じた際に編集内容がクリアされないようにする
```
```zsh:他のコマンドとパイプで繋げて使う
# 表示内容が長い時にスクロールして確認できる
ls -laR | less
```
>
[ 【 less 】コマンド（基本編）――メッセージやテキストファイルを1画面ずつ表示する：Linux基本コマンドTips（84） - ＠IT](http://www.atmarkit.co.jp/ait/articles/1702/09/news031.html)
[＠IT：lessコマンド終了時の画面クリアを防ぐには](http://www.atmarkit.co.jp/flinux/rensai/linuxtips/524noclearless.html)

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

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

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

>
[【find・grep】特定の文字列を含むファイルのリストを取得する方法。](https://qiita.com/pokari_dz/items/0f14a21e3ca3df025d21)
[ 【 grep 】コマンド――特定の文字を含む行を抽出する：Linux基本コマンドTips（9）](http://www.atmarkit.co.jp/ait/articles/1604/07/news018.html)

#### 結果の個数表示
```zsh:ファイル実行結果の簡易集計とかに
grep -c "hoge"
# 3

hogesayhoge.sh | grep -c "hoge"
# 800
```
>
[grepコマンドでヒットした数をカウントしました](https://qiita.com/pugiemonn/items/18482554c983c4dab938)


##**mv**
ファイルを移動したり、リネームしたりできる
#### ファイル名を変更
```
mv [変更前のファイル] [変更後のファイル]
mv a.txt aa.txt
```
ディレクトリにも適用可

#### 複数選択
```zsh
# mv 移動したいファイル（複数） 移動先ディレクトリ　

mv a b c dir/

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

mv huga_hoge/**/*.txt dir/

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

>[一度に複数のファイルを特定のDirにコピー/移動(cp/mv)する ~ Unix Command ~](https://qiita.com/ukitazume/items/4b29c6222fcd63675692)

`同様の方法で　cp（コピー）　でも複数選択ができる`

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

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

####ディレクトリを再帰的に任意の場所にコピー
`-r`：ディレクトリを再帰的に（内部のファイルも含めて）コピー
`-v`：コピーされるディレクトリ（ファイル）を表示

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

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

	cp -rv dir1/test app/assets 


>
[【 cp 】 ファイルやディレクトリをコピーする | 日経 xTECH（クロステック）](http://tech.nikkeibp.co.jp/it/article/COLUMN/20060227/230734/)

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

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

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

```zsh
mkdir ~/hogE

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

pwd
# /piyo2/piyo3/piyo4
```

>
[【Linux】複数階層で構成されるディレクトリを一気に作成する方法 - 私は素人サーバ管理者](http://d.hatena.ne.jp/horus531/20110104/1294143017)
[mkdirとcdを同時に](https://qiita.com/akokubu/items/d577d0d8ccc6464286c1)


##**rm**
ファイル（ディレクトリ）を削除する。

####ディレクトリを再帰的（中身ごと全部）に警告なしで削除
```zsh
rm -rf 削除したいディレクトリ
```
>
[【 rm 】 ファイルやディレクトリを削除する | 日経 xTECH（クロステック）](http://tech.nikkeibp.co.jp/it/article/COLUMN/20060227/230871/)


##**sed**
```
sed -i -e 's/変更前の文字列/変更後の文字列/g' ./data.txt
```
ファイルと文字列を指定して一括で置換できる。
※上記コマンドでは`-i`オプションでバックアップファイルを作りつつ文字列置換している。
（バックアップファイルは上の例でいうと`data.txt-e`というものが作成されるかと）

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

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

# [ と ] と " と ' を空文字に置き換えて表示
```
>
[sedで置換がうまくいかなかった話](https://qiita.com/sublimer/items/b1f58ca60e69233d3602)
[シェルスクリプトによる文字列処理：置換や削除をする方法](https://eng-entrance.c>om/linux-shellscript-replacement)
>[sedコマンドでファイルを上書き編集](https://open-groove.net/linux-command/sed-edit-files/)
[sedコマンドによるファイルの書き換え | シキノート](http://slpr.sakura.ne.jp/qp/sed-sh/)
[ 改行に置換するためのワンライナー集(tr/sed/perl) ·  DQNEO起業日記](http://dqn.sakusakutto.jp/2014/10/replace_tr_sed_perl.html)
[sedコマンドで置換する際に複数の処理を追加する方法 - 塩焼きブログ](https://blog.sioyaki.com/entry/2017/10/23/132421)

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

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

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

# 確認
echo $PIYO

# 変数削除
unset PIYO
echo $PIYO  
```
>
[Linux 作業手順書からべた書きパスワードをなくすシンプルなアイディア](https://qiita.com/ktooi/items/ba156bb1848c31f04949)
[zshでも作業手順書からべた書きパスワードをなくしたい！！](https://qiita.com/serinuntius/items/58607f82aaaa349ca3c7)

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

```zsh
#形式
chmod 権限設定　ファイルパス
#chmod 744 test.txt
```
|0|1|2|3|4|5|6|7|
|:--:|:--:|:--:|:--:|:--:|:--:|:--:|:--:|
|---|--x|-w-|-wx|r--|r-x|rw-|rwx|
[**chmod コマンド**](https://qiita.com/ntkgcj/items/6450e25c5564ccaa1b95)

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

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

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

ln -s /hoge/hoge/hogetta ./piyotta
```
```zsh:リンクの削除
# unlink 削除するリンク名
unlink ./piyotta
```
`rm リンク名`でも削除できるが、誤って実体削除する可能性もあるので、`unlink`使うのが無難

>
[シンボリックリンクの作成と削除 - Qiita](https://qiita.com/colorrabbit/items/2e99304bd92201261c60)
[ 【 ln 】コマンド ― ファイルのハードリンクとシンボリックリンクを作る](http://www.atmarkit.co.jp/ait/articles/1605/30/news022.html)

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

```zsh
#確認
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

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

>
[Linuxコマンド【 chown 】ファイルの所有者やグループを変更](https://webkaru.net/linux/chown-command/)

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

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

# control + c で終了
```
>
[htop - an interactive process viewer for Unix](https://hisham.hm/htop/)
[ スタバで top でドヤ顔しているMacユーザはもう古い。これからは htop だ！](https://qiita.com/khotta/items/a998a52bc56c3bfe5f91)
[htopコマンドで覚えておきたい使い方11個 | 俺的備忘録 〜なんかいろいろ〜](https://orebibou.com/2016/05/htopコマンドで覚えておきたい使い方11個/)

##**jot**
指定した数値を出力。
回数や範囲を指定できる（数字以外に文字も出力可）。
変数を使っての指定も可能。便利。
`-r`：乱数を生成

```zsh
#基本
jot 回数 開始 終了

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

```
>
[シェルスクリプトで乱数を扱う - hyconの日記](http://d.hatena.ne.jp/hycon/20101007/1286450035)


## **cut**
始点（左端）から文字を指定して切り出す。`rev`と組み合わせて末尾からも指定可能

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

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

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

```
```zsh:-d「,」で区切って4,6番目のみ
$ echo gr,e,jk,qe,rj,n,g | cut -d',' -f4,6
qe,n
```
```zsh:-cとrev
# 末尾から6文字切り取った結果を表示
$ echo grejkgerjng | rev | cut -c7- | rev
grejk
```
>
[フィルタを使用した文字列操作 2 | UNIX & Linux コマンド・シェルスクリプト リファレンス](https://shellscript.sunone.me/filter_etc.html)


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

```zsh:基本形
コマンド | xargs オプション コマンド
```
```zsh:オプション
I 変数名  : 標準入力からの情報をコマンド実行時に任意の位置に配置できる
p        : 1ファイルずつ実行するか確認しながら実行できる
n 数     : コマンドに渡す引き数の数を指定
```
以下はファイル名を一括で変更（表示）する例。
（`\ls`は**alias**設定を無視するための記述。）

```zsh:一括で名前変更
# ディレクトリ内の全てのファイルが対象
\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
```
拡張子で絞れば特定のファイルのみ実行対象にできる。

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

\ls *.txt | xargs -I{} echo hige
```
>
[xargs【コマンド】](https://wa3.i-3-i.info/word11619.html)
[覚えると便利、xargsコマンドの使い方12選 | マイナビニュース](https://news.mynavi.jp/article/20180816-678553)
[xargsコマンドで覚えておきたい使い方・組み合わせ7個(+1個)](https://orebibou.com/2015/07/インフラエンジニアなら覚えておきたい『xargs』/)
[find／xargsを使ったファイル・ディレクトリ名の一括置換／一括作成コマンド一覧](http://uguisu.skr.jp/Windows/find_xargs2.html)

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

```zsh:
qlmanage -p 画像ファイル
```
>
[画像ファイルをMacのコマンドラインで表示する - ごずろぐ](http://gozuk16.hatenablog.com/entry/2015/05/15/105423)


##**launchctl**
サービス（daemon, agent）の管理コマンド
Linuxにおける`systemctl`や`service `のようなもの

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

```zsh:
# 対象サービス（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 のサービス起動／停止を簡単に | ハックノート](https://hacknote.jp/archives/11570/)
[  Mac の起動時に nginx を launchctl / launchd で自動起動(デーモン化)させる設定をあれこれ試行錯誤したメモ : にわタコのblog](http://niwatako.info/20140104/article1349.html)
[コマンド/launchctl - MacWiki](https://macwiki.osdn.jp/wiki/index.php/コマンド/launchctl)
[launchdで定期的にスクリプトを実行 - Qiita](https://qiita.com/rsahara/items/7d37a4cb6c73329d4683)

## <div id="zip">**zip**</div>
皆さんご存知zip。ファイル（ディレクトリ）を圧縮するコマンド。
`-e`オプションつければパスワード付きのファイルになる。

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

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

（[ディレクトリ圧縮には -r オプションをつける](https://qiita.com/griffin3104/items/948e38aab62bbb0d0610)
みたいだけど、自分がやった限りではオプションつけなくてもファイルと同様にディレクトリ圧縮できた。）