TOP ▲ itcore TOP TIPS

シェル小技 | itcore 2017

ファイル名の一括変換 IPアドレスのソート vsftpに最近ログインしたID sshログ自動取得 findコマンド

ファイル名の一括変換

<conv.sh> axxx-xxxとbxxx-xxxをaxxxとbxxxに変換する。
#!/bin/bash
for file in a*-* b*-*
do
  echo mv $file ${file%-*}
  mv $file ${file%-*}
done
<実行結果>
mv a1.php-20170301 a1.php
mv b2.php-20170302 b2.php
<文法>
${var/old/new}    変数var内の最初のoldをnewに置換する
${var//old/new}    変数var内の全てのoldをnewに置換する
${var#pattern}    変数var内の最初の文字から検索し, patternにマッチした最短の文字列を削除する
${var##pattern}    変数var内の最初の文字から検索し, patternにマッチした最長の文字列を削除する
${var%pattern}    変数var内の最後の文字から検索し, patternにマッチした最短の文字列を削除する
${var%%pattern}    変数var内の最後の文字から検索し, patternにマッチした最長の文字列を削除する

IPアドレスのソート

</var/log/secure>
Mar  1 20:01:45 www sshd[16294]: refused connect from 52.53.217.10 (52.53.217.10)
<コマンド>
grep refused /var/log/secure| awk '{print $9}' |sort -n -t '.' -k 1,1 -k 2,2 -k 3,3 -k 4,4|uniq
<実行結果>
1.32.43.36
1.189.47.156
2.60.137.125

vsftpに最近ログインしたID

</var/log/vsftpd.log vsftpd.log.*>
Mon Mar 20 14:38:55 2017 1 111.222.333.444 77698 /www/index.html a _ i r user001 ftp 0 * c
<コマンド>
cat /var/log/vsftpd.log* | awk '{print $14}' | sort | uniq
<実行結果>
user001
user002

sshログ自動取得

$ vi .bashrc
# ログの取得  無限ループ対策あり
_LOG_DIR=~/sshlog
mkdir -p $_LOG_DIR
_p_proc=`ps aux | grep $PPID | grep sshd |  awk '{print $11}'`
if [ "$_p_proc" = sshd: ]; then
    script -fq $_LOG_DIR/`date '+%Y%m%d'`_$$.log
    exit;
fi

$ ls -lrt sshlog | tail -3
-rw-rw-r-- 1 itcadm2012 itcadm2012   8569  3月 24 21:30 20170324_17648.log
-rw-rw-r-- 1 itcadm2012 itcadm2012  28964  3月 24 21:31 20170324_7220.log
-rw-rw-r-- 1 itcadm2012 itcadm2012    214  3月 24 21:31 20170324_18719.log

findコマンド

3日以内に更新されたファイル。シンボリックリンクもたどる。
ファイル名のみ表示
# find . -mtime -3 -follow
タイムスタンプ表示
# find . -mtime -3 -follow -ls