ようへい
ラベル Linux の投稿を表示しています。 すべての投稿を表示
ラベル Linux の投稿を表示しています。 すべての投稿を表示

2020年2月20日木曜日

bash スクリプトでよく使うコマンドまとめ

スクリプトを動的に作る

$ cat <<'EOF' >/tmp/hogehoge.rb
xxx
EOF
あまり使わないけど、docker で自動的に環境構築するときとか、シェルからはできないような操作をする際に使ったり。

echo で色つけて出力

色・装飾つき echo コマンドメーカー

sed で置換

$ sed -i -e 's;fuga;bar;' \
    -e '/^hoge/s/=false/=true/' \
    /tmp/hoge.conf
sed の正規表現で気を付けるのは、-e 's;h+;HOGE;' と書いてしまうとダメ。
拡張正規表現を使うためには、対象のメタキャラクタをエスケープする。-e 's;h\+;HOGE;' という感じ。
よくハマる。

grep で抽出

$ echo "hoge=fuga" | grep -o "fuga"
fuga
これでもいいのだが、Perl の正規表現を使うようにして
$ echo "hoge=fuga" | grep -Po "=\K(fuga)"
こんな感じで使うほうが好き。

大量のファイルに何かをする

$ find <検索条件> -print0 | xargs -0i sh -c "echo {}; basename {}"
ポイントとしては、-print0 で null 区切りにすること。
こうすることで、ファイルパスに含まれる空白などが悪さをしなくなり xargs が正しく処理できる。
なお、-exec は制限あるので極力使わない。

ls の日付フォーマットを変更

$ ls -l --time-style=+%Y-%m-%d\ %H:%M:%S
加工するときとかに使う。

バイナリファイルのダンプ

$ od -tx1z <ファイルパス>
ファイルの中に制御文字入ってないかとか見るときに使ったり。

指定サイズのデータ作成

ランダムデータ
$ dd if=/dev/urandom of=random_data bs=1073741824 count=4
ddは2GB以上のブロックサイズを指定できないため、4GBを作る場合は1GBx4等で対処する
固定データ
$ printf "%01048576d" > 1MB.txt
0で埋まったファイルが作られる。

あるファイルが、どの rpm によりインストールされたか調べる

$ rpm -qf <ファイルパス>

rpm の中身を見る

未インストールの rpm
$ rpm -pql <rpmファイルパス>
インストール済みの rpm
$ rpm -ql <rpm名>
関連記事

色・装飾つき echo コマンドメーカー

シェルを書いてると、エラーや大切なメッセージを色や装飾つきで表示したくなることありますよね。
そんなとき、面倒な色のコードや、テキスト装飾の属性を調べるのが面倒だったのでつくりました。
色は 16bit カラーに限定しています。
点滅はブラウザが非対応なのでプレビューで意図的に再現してません。また、ほかにも装飾があったり色があったりしますが、省略しています。
必要な方はググってください。
なお、Macのターミナルの場合は、echo -e $'xxxx'のように、クォートの前に$を入れないと色が付きません。
Macターミナル対応
$ {{ echoCommand() }}
{{ echoText }}
コマンドをコピー
クリア
関連記事

2020年1月14日火曜日

Git で毎回 SSH パスワードを入力しなくていいようにする

セキュリティ考えてる人は SSH キーにパスワードを設定してると思いますが、この場合 git コマンドを打つたびにパスワードを聞かれるのが厄介。
これを解消します。
test -f ~/.bashrc && . ~/.bashrc
# Setup ssh-agent
if [ -f ~/.ssh-agent ]; then
    . ~/.ssh-agent
fi
if [ -z "$SSH_AGENT_PID" ] || ! kill -0 $SSH_AGENT_PID; then
    ssh-agent > ~/.ssh-agent
    . ~/.ssh-agent
fi
ssh-add -l >& /dev/null || ssh-add
~/.ssh-agentssh-agent の実行に必要な情報を書いておき、それを使い回す。
最後の行で、読み込まれた認証情報があるか確認し、なければ ssh-add する。
ssh キーがデフォルトのパス(~/.ssh/id_rsa) 以外にある場合は、
ssh-add -l >& /dev/null || ssh-add /path/to/id_rsa
のようにすればいいはず。 次回ログイン時にパスワードを聞かれますが、以後は ssh-agent がいい感じにやってくれると思います。
たぶん Linux でも Git for Windows の Git Bash でも同じはず。
Windows のコマンドプロンプトとかから使いたい場合は、
  1. puttygen で、Conversions -> Save private key で変換
  2. pageant に変換したキーファイルを読み込ませて起動
    pagent.exe ~\.ssh\id_rsa.ppk
  3. 環境変数 GIT_SSH に plink.exe のパスを設定
でいいはず。
関連記事