シェルのコマンド例記録
参考になったコマンド
## a~gまで出力して、field numberが4以上だと、3連番する $ echo {a..g} | xargs -n 1 | awk 'NR>=4{print $1, $1, $1}NR<4{print $1, $1}' ## 80ポートのtcp udpの確認 $ grep '80/[tu][cd]p' /etc/services ## 出現文字列の種類を確認 $ cat test.txt |sed 's/./&\n/g' | sort | uniq ## 時間指定で、ファイルを抽出する方法 -t 時間順 -r リバース $ ls -ltr --full-time | awk -v "d=$(date -d '10 days ago' +%Y-%m-%d)" 'd<=$6' ## 階層指定(maxdepth)で10日前(0時を出発)までの更新ファイルの検出 $ find . -daystart -maxdepth 1 -mtime -10 ## uploadsからworkに、1日以上まえのファイルを移動させる $ find uploads/ -maxdepth 1 -daystart -mtime +0 | xargs -I@ mv @ work/ ## 以後エラー出力をファイルに吐き出す $ exec 2> file ## user1にuser変更 $ sudo -u -i user1 ## test.txtの2列目(-k2,2)で数字順(-n)安定(-s)ソートする $ sort -k2,2n -s test.txt ## 文字コードの判別 $ nkf -g shift_jis.txt Shift_JIS ## 文字コードをShift_JISに変換 $ cat -e 'あい\nうえお' | nkf -sLwx > shift_jis.txt ## バイナリファイルを16進数ずつ引き剥がし(xxd -p)、nバイトに改行を入れる(fold -b<n>) $ xxd -p shift_jis.txt | fold -b2 ## 頭に16進数の0xをつける $ cat tmp | fold -b2 | sed 's/^/0x/' ## string.txtに記載されたキーワードがtarget.txtにあるか判定して、exam.csvに記録 $ for i in `cat string.txt`; do if grep -q $i target.txt; then echo $i,O; else echo $i,X; fi ; done > exam.csv ## ディスク容量の確認 $ df -h $ du -h --max-depth=1 / | grep G ## メモリの確認 $ free -h ## アクセスの集計確認 $ for F in `ls access_log.20180*`; do echo "$(zcat -f < $F | grep -vF '[文字列]' | wc -l) $F"; done | sed -e "s@.gz@@g" | awk '{print substr($2, 0, 21),$1}' | sort | awk '{arr[$1]+=$2} END {for (i in arr) {print i,arr[i]}}' | less $ zgrep -F '[文字列]' access_log.201712* |wc -l ## varnishのログが 1M 以上のデータを確認 $ ionice -c2 -n7 nice -n19 awk '{ if($10 > 1000000) {print $0}}' /home/logs/varnish_log.`date +%Y%m%d` ## Apacheの処理時間(最終行)の平均値をとる $ grep -F '[検索文字列]' logs/access_log.20180405 | awk -F ' ' '{sum+=$NF} END {print sum/NR}' ## zipファイルの中身のファイルを [文字列] でgrepする $ for F in `ls /tmp/*`; do echo "$(unzip -c $F | grep -cF '[文字列]') $F" ; done ## gitで管理しているファイルから、検索文字列を一括置換する。 $ git grep -l '検索文字列' | xargs sed -i '' -e 's/検索文字列/置換文字列/g' ## 更新日時が90日以前のファイルを特定ディレクトリ(to_dir/)に移動させる $ find . -mtime +90 -type f | xargs -r mv --target-directory=to_dir ## ファイルが空もしくは0行の場合、メール送信 || は && の逆。失敗したら、実行 $ test -s /tmp/test_`date +\%Y\%m\%d`.csv || echo "no file" | mail -s "hogehoge" aaa@kkk.com ## 4列目が0かつ 5列目の重複排除した、tab_text*の行数 for f in `ls tab_text*`; do echo $(cut -f 4,5 $f | egrep ^0$'\t' | cut -f 2 | nice -n19 uniq | wc -l) $f; done ## 文字コードの grep をする grep -rlP '\xe6\x97\xa5\xe6\x9c\xac' . grep -oP '\xe6\x97\xa5\xe6\x9c\xac' . ## 再帰的にディレクトリの symbolic link を発見 ls -Rla . | grep "\->" ## MB単位でメモリの使用量確認 ps hax -o rss,user | awk '{a[$2]+=$1;}END{for(i in a)print i" "int(a[i]/1024+0.5);}' | sort -rnk2 ## aaa_dir に encode=cp932 を指定してunzipする方法 unzip -Ocp932 aaa.zip -d aaa_dir ## aaa_dir ディレクトリ内のファイル数を再帰的に取得 find aaa_dir -type f | wc -l ## google driveからのinstall curl -c /tmp/cookie.txt -s -L "https://drive.google.com/uc?export=download&id=XXXXXXXX" |grep confirm | sed -e "s/^.*confirm=\(.*\)&id=.*$/\1/" | xargs -I{} curl -b /tmp/cookie.txt -L -o hoge.tar.gz "https://drive.google.com/uc?confirm={}&export=download&id=XXXXXXXX" ##HEIC から jpgの変更 $ ls -1 data/ | sed -e 's/.HEIC//g' | xargs -I{} heif-convert data/{}.HEIC data/{}.jpg