コピペコードで快適生活

明日使えるソースを自分のために

シェルで便利だったコマンド&オプションまとめ

随時追加していく。

# grepでOR検索
cat file.txt | grep -e hoge -e fuga

# grepで前後行も出力
# -A -> 後の行数
# -B -> 前の行数
cat file.txt | grep -A 10 -B 5 hoge -e fuga

# xargsでパイプで渡された値を任意の場所に突っ込む
cat file.txt | grep "hoge" | awk '{print $1}' | xargs -IXXX grep XXX file2.txt

# tail -F をリアルタイムで grep する
tail -f production.log | grep --line-buffered "hogehoge"

# gz形式のファイルを解答せずに中身を見る
gzip -dc production.log-yyyymmdd.gz | less

# 全検索
sudo find / -name filename

# <() コマンド結果をファイルのようにして入力値として与える
diff <(seq 1 3) <(seq 2 4)

# trで文字列置換(改行コードも扱える)
cat file.txt | tr 'A' 'B' # AをBにする
cat file.txt | tr -d '\n'  # 改行を消す
cat file.txt | tr -dc 1 # => 1以外を消す

# 指定文字数で改行させなおす
# 一度改行消して、60文字区切りで改行させる
cat file.txt | tr -d '\n' | fold -w60

# ImageMagickで画像変換
convert test.png test.jpg # フォーマット変換
convert -geometry 50% testimg.png testimg.50p.png # サムネイル
convert -geometry 100x100 testimg.png testimg.50p.png # サムネイル
convert -rotate 90 server.jpg server_90.jpg # 時計回りに90度回転

# xargsで複数のコマンドを実行
# (shコマンドの中で複数のコマンドを実行させて実現する)
seq 10 | xargs -I@ sh -c 'echo @; sleep 1'

# 乱数を出力する
# /dev/urandomは乱数を出す / tr-dcで0-9以外を消す
cat /dev/urandom | gtr -dc 0-9 | fold -w 10 | head

# テキストブラウザ
w3m http://google.co.jp 
w3m http://google.co.jp --dump # 表示出力

# bcコマンド 電卓
# オプション obase(output10進数)
# オプション ibase(input16進数)
echo 'obase=10;ibase=16; F + F' | bc

# ファイルに差分があるかどうかだけ返す
diff -q a.txt b.txt
ls | xargs -IX diff -q X ~/app2/X

# グローバルIDを知る
curl ifconfig.io

# 列指定でsort
sort -k2 # 2列目でソート

# 無限ループ
while true
do
  echo hogehoge
done

# 1行無限ループ
while :; do ps aux | grep unicorn; sleep 1; done

# ディレクトリ配下のファイルの拡張子を一斉置換
for filename in *.txt; do mv $filename ${filename%.txt}.csv; done

My.tmux.conf

随時更新していく

bind s split-window -v
bind v split-window -h
bind j select-pane -D
bind k select-pane -U
bind h select-pane -L
bind l select-pane -R
bind r source-file ~/.tmux.conf \; display "Reloaded!"

set -g pane-active-border-fg red
set -sg escape-time 1
setw -g mode-keys vi

bind c new-window -c "#{pane_current_path}"
bind % split-window -hc "#{pane_current_path}"
bind '"' split-window -vc "#{pane_current_path}"

gitでたまに使うコマンド集

たまにしか使わなくて、よく忘れるコマンドをメモしていく。

リモートリポジトリ系

# リモートリポジトリの変更
git remote set-url origin <新しいリポジトリURL>

# リモートリポジトリの追加
git remote add hogehoge <追加したいリポジトリURL>

# リモートリポジトリの削除
git remote rm hogehoge

# リモートリポジトリ名の変更
git remote rename <old_name> <new_name>

やりなおし系

# 間違ってaddしたやつを取り消す
git reset config/environments/development.js

# commitを打ち消し(逆向きのcommitをする)
git revert コミットのハッシュ値

# 直前のcommitをなかったことにする
# --hardオプション:コミット取り消した上でワークディレクトリの内容も書き換えたい場合に使用。
git reset --hard HEAD^

# 特定のコミットまで戻す
git reset --hard #{コミットハッシュ}

# 間違ってcommitしたものをステージ前まで戻す
git reset --soft HEAD^
git reset HEAD

# 直前のコミットの差分を見る
git diff HEAD^ HEAD

# ステージしたファイルと最新コミットの差分を見る
git diff --staged

# 直前のコミットメッセージを修正する
git commit --amend

タグ系

# タグを作る
git tag TAGNAME

# タグでブランチ切る
git checkout -b 1.6 refs/tags/v1.6

# タグ一覧
git tag

# タグの削除
git tag -d TAGNAME

# タグのpush
git push origin TAGNAME

# リモートのタグを消す
git tag -d TAGNAME
git push origin :TAGNAME

その他

# コミット間のファイル差分を出力する
# --statは編集量表示 / --name-onlyはファイル名のみ出力の意味
git diff --stat --name-only <コミットID A> <コミットID B>

# 大文字小文字の違いもファイル変更と認識させる
# Macで作業する時用
git config core.ignorecase false

# git add . で deletedが反映されない時
git add -u .

Rubyでメソッドの定義場所を確認する

gem pry を使うと、$で簡単に確認できる

$ "".present?

# From: /home/kinosuke/app/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.7/lib/active_support/core_ext/object/blank.rb @ line 23:
# Owner: Object
# Visibility: public
# Number of lines: 3
# 
# def present?
#   !blank?
# end

rpmでインストール&アンインストール

オプションをいつも忘れるのでメモ。

# インストール
rpm -ivh https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.2.1.rpm

# アンインストール
rpm -e elasticsearch

# アンインストールに問題ないか確認
# 何か問題あったらごにょごにょ出力される
rpm -e --test elasticsearch

# 詳細確認(インストールされているかどうか確認できる)
rpm -q elasticsearch