備忘用。
gitコマンド系
Javaの期間を絞って自分のコミット行数の確認
git log --numstat --pretty="%H" --author='hoge@foo.com' --since=2021-04-01 --until=2022-03-31 --no-merges "./*.java" | awk 'NF==3 {plus+=$1; minus+=$2} END {printf("%d (+%d, -%d)\n", plus+minus, plus, minus)}'
コマンド名でプロセスの状態を監視
watch "ps -C {コマンド名} -o comm,pid,ppid,%cpu,ni,cls"
ログファイルの中身を1行ずつSJIS->UTF-8変換して出力
tail -f logfile | while read LINE ; do echo $LINE | iconv -f SJIS -t UTF-8 ; done
1日前までの更新ファイル検索
find . -mtime -1
パスワード付zip圧縮
zip -e img.zip IMG1.jpg
dvd/bluerayのISOファイル作成
# blockサイズ取得
blocks=$( $(which isosize) -d 2048 /dev/cdrom )
# isoファイル作成
dd if=/dev/sr0 of=isoイメージ名 bs=2048 count=$blocks status=progress
ファイル分割・結合
# ファイル分割 (約100Mb単位)
split -b 100000000 bigdata.zip bigdata.zip.
# ファイル結合
cat bigdata.zip.* > bigdata.zip
自分のマシンの時間ズレ確認
echo machine-time:`date +%s` nict-time:`wget -q https://ntp-a1.nict.go.jp/cgi-bin/jst -O - | sed -n 4p | cut -d. -f1`
ターミナルからウィンドウ開く(xwindow前提)
xdg-open .
or
gnome-open .
以下のように.bashrcに追加すると良い
alias open=xdg-open
sqlplus組み込みshellの基本形
#!/bin/bash
sqlplus -s / <<EOF
select instance_name,status from v\$instance;
exit
EOF
exit 0
定期的に同じSQLを発行し続けるshell シェルスクリプト内でsqlplusを実行するより
#!/bin/bash
sql_alive_flg=/tmp/sql_alive.flg
touch $sql_alive_flg
(
while [ -a ${sql_alive_flg} ]
do
echo "select instance_name,status from v\$instance;"
sleep 5
done
echo "exit"
)|sqlplus -s / as sysdba
exit
見易くしたJSONをlessの色付きで確認
echo '{"name": "taro", "age": 30, "sex": "male"}' | jq -C . | less -R
数字.jpgをzero-paddingしたファイル名に変更
for i in $(ls -v) ; do mv $i $(printf '%02d.jpg' $( basename $i .jpg ) ) ; done
ファイル内の特定キーワードからx行分取得
logcutw.sh
#!/bin/bash
# usage: logcutw.sh filename keyword the-number-of-lines-to-get
# check args eq 3.
set -eu
: $1 $2 $3
rowno=`grep $2 $1 --line-number | head -1 | cut -f 1 -d ':'`
sed -n "$rowno, +$(($3-1))p" $1
exit 0
疑似Treeコマンド
tree コマンドが無い環境で tree コマンドを実現より
pwd;find . | sort | sed '1d;s/^\.//;s/\/\([^/]*\)$/|--\1/;s/\/[^/|]*/| /g'
特定キーワードでのログ監視
tail -f /var/log/xxxx/yyyy.log | grep -P 'ERROR|FATAL' --line-buffered
または、
watch "sudo tail -10 /var/log/messages | grep 'Started'"
sshのアクセス履歴表示(Ret Hat Enterprise Linux / CentOS)
sudo journalctl _SYSTEMD_UNIT=sshd.service
ディスク使用量割合のグラフィカル表示
find $1 -maxdepth 1 -mindepth 1 -type d | xargs du -sk | awk '{ total += $1; pathes[$2] = $1; } END { size = 20; for (name in pathes) { ratio = pathes[name] / total; cnt = size * ratio; printf("%6.3f%% ", ratio*100); for (i = 0; i <cnt; i++) printf("="); for (i = cnt; i < size; i++ ) printf("-"); printf(" %s\n", name); } }' | sort -nr
10MBのダミーファイル作成
dd if=/dev/zero of=tempfile bs=1M count=10
または
dd if=/dev/random of=dummy.iso bs=1M count=10
IPAフォントのダウンロード
sudo yum -y install ipa-gothic-fonts ipa-mincho-fonts ipa-pgothic-fonts ipa-pmincho-fonts
(メモ)JSON整形
echo '{"key1": "value1", "key2": {"key3": "value3"}}' | python -m json.tool
grep o, P
grep -oP '<td><a[^>]*?>\K[\p{Katakana}ー]{5,9}(?=<)'
oオプション:--only-matching マッチした部分のみを抽出する
pオプション:Perl正規表現
\K:名前つき後方参照
nvmインストール
curl https://raw.githubusercontent.com/creationix/nvm/master/install.sh | sh
連番生成
seq -f "hoge%05g" 5 3 12
=>hoge00005
=>hoge00008
=>hoge00011
連番ファイル一発作成 (ブレース展開)
touch test_{1..30}.txt
touch test_{a..z}.txt
touch foo_{01..100}.txt
連番ファイルのダウンロード
seq -f http://www.example.com/img/%02g.jpg 10 | wget -w 5 --random-wait -i -
連番ファイルコピー
for i in seq -w 1 10; do cp hoge_0.png hoge_$i.png; done
seq -f "win%03g.c" 100 | xargs -I % cp win000.c %
ワンライナーなwebサーバ
bash $ sudo perl -MIO::Socket -e
"\$s=new IO::Socket::INET
(LocalAddr=>'localhost:80',Listen=>1);
while(\$sock=\$s->accept()){
while(<\$sock>=~/^GET\s+(\S+)\s+.*\$/){
\$p=\$1;\$path=(\$p=~/^(.*\/)\$/?\$1.'index.html':\$1);}
\$cn='';if(open(FI,'.'.\$path)){while(<FI>){\$cn.=\$_;}
}else{\$cn='NotFound';}
print \$sock \"HTTP/1.0 200 OK\nContent-Type: text/html\nContent-Length: \".length(\$cn).\"\n\n\$cn\";\$sock->close;}
\$s->close;"
ワンライナーにかける情熱
より拝借。その発想はなかった。
#以下、[初心者向け、「上手い」シェルスクリプトの書き方メモ](https://qiita.com/m-yamashita/items/889c116b92dc0bf4ea7d)からメモ。 詳細は[そちら](https://qiita.com/m-yamashita/items/889c116b92dc0bf4ea7d)をみてね
ファイルを 0 バイトで上書き
# 「:」は、何もしないコマンドらしい。
: > foo.log
三項演算子
# もどき
[ $foo -ge $bar ] && baz=0 || baz=1
変数初期値
# $foo に $bar を代入。但し $bar が未定義だった場合は 0 を代入
foo=${bar:-0}
# $bar が未定義だった場合、 $foo にも $bar にも 0 を代入
foo=${bar:=0}
実行ディレクトリ取得
script_dir_path=$(dirname $(readlink -f $0))
一時ディレクトリ/ファイルを作成し、中断時は、後始末
temp_file=$(mktemp)
temp_dir=$(mktemp -d)
# 後始末を定義
trap "
rm -f $temp_file
rm -rf $temp_dir
" 0
お手軽引数チェック
set -eu
# 引数が3つ渡されていなければスクリプト実行中止
: $1 $2 $3