UNIX系コマンド備忘録
2016-07-14
(Updated : 2020-03-29)
※ 普段 Mac で生活しているので、Mac 前提です
リダイレクト
出力先によって分ける
# 1 : 標準出力
# 2 : 標準エラー出力
$ {Command} 1> stdout.txt 2> stderr.txt
※ 番号の省略は標準出力を意味する
エラーも含めてファイルに出力
2>&1
で 2 を 1 に入れる
$ {Command} > out.txt 2>&1
画面に出力しつつファイルにも吐く
$ {Command} 2>&1 | tee log.txt
検索
文字列検索 : ag
- grep 系は
ag
使ってる- the_silver_searcher/ag.1.md at master · ggreer/the_silver_searcher
- オプション
-U
で .gitignore に含まれるファイルも対象にしてくれる -u
でバイナリも対象に含める
ファイルサイズの大きいディレクトリを探す
-d
で深さ指定
$ du -m -x -d 2 ~/Desktop | sort -n
プロセス
プロセス確認
# 全部出力して grep
$ ps aux | grep hoge
# ユーザで絞り込む(ww は改行して出力が切れないようにする)
# * Mac の場合は -u でなくて -U
$ ps uww -U user_name
ネットワーク
TCP ポート開いてるか確かめる
- ICMP なら ping すれば十分だが
- telnet でもよいけど開いてるか確認したいだけなら
$ nc -vz <host> <port>
$ nc -vz xx.xx.xx.xx 20-30 # 範囲指定も可
Mac の電波遮断
- ゲームを作っていてローカルで手軽に電波遮断のテストをしたい時に使える
$ networksetup -setairportpower en1 off
$ networksetup -setairportpower en1 on
自分のグローバル ip アドレスを調べる
- そういうサービスを利用しよう
$ curl ipecho.net/plain; echo
SSH
鍵作成
$ ssh-keygen -t rsa -b 4096 -C "[email protected]" -f ~/.ssh/id_rsa
- 4096 bit の RSA 鍵を作る例
- (デフォルトの 2048 bit の強度が許容されるのは 2030 年までらしい)
-C
は公開鍵の末尾につくコメント (デフォルトだとマシンのホスト名)- GitHub で使うメールアドレスなどにしておくと無難
公開鍵の fingerprint 確認
$ ssh-keygen -l -E md5 -f ~/.ssh/id_rsa.pub
- SSH-KEYGEN (1)
-l
オプションで表示、-f
オプションでファイル指定- 最近の表示形式は SHA256/base64 らしいので
MD5/hex で見たい場合は
-E
オプションでフォーマット指定
文字列 / 文字コード
sed
# Mac 版 sed は -i の後にバックアップファイルの拡張子指定が必須
# (Linux 版だとバックアップ不要の場合は省略できる)
$ sed -i '.bak' -e 's/OLD/NEW/g' path/to/input_file
# -e は -f を指定しない場合は省略可能。
# (-f は編集コマンドを記述したスクリプトファイルの指定)
# バックアップ作らなくていい場合はこんな感じでよい
$ sed -i '' 's/OLD/NEW/g' path/to/input_file
複数ファイルの文字列一括置換
# find コマンドと連携
$ find ./ -name "*.cpp" | xargs sed -i '' 's/OLD/NEW/g'
# ag コマンドと連携
$ ag -l "Hoge" | xargs sed -i '' 's/OLD/NEW/g'
文字コードや改行コードを調べる
# Mac にはデフォルトで入ってないので
$ brew install nkf
$ nkf --guess FILE_NAME
od
コマンド(Octal Dump)とかもある
$ od -c file.txt
# LF なら \n, CR なら \r, CRLF なら \r\n と表示
nkf による文字コード・改行コードの変更
例:
# -w : UTF-8 (BOM 付きは -w8)
# -Lw : Windows 形式の改行コード (CRLF)
$ nkf -w -Lw --overwrite file.txt
- オプション参考 : [2018-08] nkfで文字コード変換したいときはこうする!! - Qiita
BOM なしの UTF-8 ファイルを一括で BOM 付きに変換
Unity の C# スクリプトを BOM 付きで統一したい時などに:
find path/to/Scripts -name *.cs | xargs nkf --overwrite --oc=UTF-8-BOM
時刻
- Mac の date は Linux とオプションなどが違う
# 現在時刻から 9 時間後の時刻を表示
$ date -v+9H
UTC → JST
- date コマンドでサクっとやる方法無いのかな?
- スクリプト言語で力技でやるなら:
$ php -r '$t = new DateTime("2016-07-13 12:00:00 UTC"); $t->setTimeZone(new DateTimeZone("Asia/Tokyo")); print $t->format("Y-m-d H:i:s")."\n"; '
2016-07-13 21:00:00
日時 → UNIXTIME
$ date +%s # 現在時刻
1410416640
$ date -jf '%Y-%m-%d %H:%M:%S' '2014-09-11 15:24:00' +%s
1410416640
UNIXTIME → 日時
$ date -r 1410416640
2014年 9月11日 木曜日 15時24分00秒 JST
画像ファイル
画像サイズの一括変換
- Mac だと
sips
ってコマンドが便利
# 画像が置かれたディレクトリに移動して一括サイズ変換(横幅を揃える)
$ mkdir resampled
$ for file in *.jpg; do sips --resampleWidth 640 $file --out resampled/${file%.jpg}.jpg; done
# -Z オプションは縦横長い方を見てアスペクト比維持で縮小
# 縦向き・横向きの画像が混ざってるときに便利
$ sips -Z 640 *.jpg --out resampled/
- ファイル名にスペースが含まれているとうまくいかないので注意
雑多
ファイルの MD5 をとる
# Mac なら標準で md5 コマンドがある
$ md5 hoge.txt
MD5 (hoge.txt) = d45ac056aeb47c6bcf5c56dc2b6d3d5c
# 上記の出力が気に入らないなら
$ brew install md5sha1sum
$ md5sum hoge.txt
d45ac056aeb47c6bcf5c56dc2b6d3d5c hoge.txt
Human readable を sort する
2009 年以降の Linux の sort には -h
オプションという素敵なものがあるらしいが
Mac でやるなら gsort
を使う
$ brew install coreutils
$ du -sh * | gsort -h
Tips
サーバのログの改行文字を実際に改行させる
$ {Command} 2>&1 | perl -pe 's/\\n/\n/g'