LoginSignup
1
1

Linuxコマンドめも

Last updated at Posted at 2018-02-06

備忘用。

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
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1