ソフトウェア/catlog の変更点

更新


[[公開メモ]]

* gzip されたログファイルをシームレスに読むコマンド [#l4e282ef]

/var/log にあるログ、最新版はテキストだけれど古いものは gzip されているので、
自動的に gunzip して古いものから新しいものへつなげて表示するコマンドを作った。

~/bin/catlog
 LANG:bash
 #!/bin/bash
 gunzip -c `ls -r -t /var/log/$1* | grep -E "\.gz$"` | cat - `ls -r -t /var/log/$1* | grep -E "\.gz$" -v`

ls に -t を付けると時刻順、-r を付けると古いもの順になる

引数 $1 として例えば dpkg.log が与えられれば普通は名前順で

 dpkg.log
 dpkg.log.1
 dpkg.log.10.gz
 dpkg.log.11.gz
 dpkg.log.12.gz
 dpkg.log.2.gz
 dpkg.log.3.gz
 dpkg.log.4.gz
 dpkg.log.5.gz
 dpkg.log.6.gz
 dpkg.log.7.gz
 dpkg.log.8.gz
 dpkg.log.9.gz

の順になるところ、

 dpkg.log.12.gz
 dpkg.log.11.gz
 dpkg.log.10.gz
 dpkg.log.9.gz
 dpkg.log.8.gz
 dpkg.log.7.gz
 dpkg.log.6.gz
 dpkg.log.5.gz
 dpkg.log.4.gz
 dpkg.log.3.gz
 dpkg.log.2.gz
 dpkg.log.1
 dpkg.log

となってくれる。

このリストに grep -E "\.gz$" することで末尾が .gz となっているものをより分けて、
gunzip に渡し、-c でコンソールへ出力する

一方、同じリストを grep -v -E "\.gz$" することで、「末尾が .gz となっていないもの」をより分けて
cat に渡す。

その際、前に - を付けて gunzip の結果を先に表示する

* bash-completion [#t9d1a56d]

タブ入力でログファイル名を補完して欲しい

~~/.bashrc

 LANG:bash
 _catlog()
 {
     COMPREPLY=( `find /var/log -type f 2>/dev/null | sed -r "s/\.[0-9]+(\.gz)?$//" | sed -r "s/\\/var\\/log\\///" | sort -u | grep -E "^$2"` )
 }
 complete -F _catlog catlog

とすることで、ログファイル一覧を自動補完する。

find /var/log -type f 2>/dev/null でエラーメッセージを捨てながらファイル名を列挙し、

sed -r "s/\.[0-9]+(\.gz)?$//" で末尾の ".数字.gz" を消去する

sed -r "s/\\/var\\/log\\///" で先頭の "/var/log/" を消去する

sort -u でアルファベット順にソートしつつ重複を除く

grep -E "^$2"` で途中まで入力した文字があればその文字列で始まるもののみとする

これを complete -F に渡せば良い

 LANG:console
 $ catlog ^T
  Display all 140 possibilities? (y or n) y
  ConsoleKit/history                  mail.log                            samba/log.dorami                    samba/log.shigekawa-pc
  alternatives.log                    mail.warn                           samba/log.fmva32mbp                 samba/log.shigekawaken
  apache2/access.log                  memcached.log                       samba/log.fujimoto-pc               samba/log.shigekawalab221
  apache2/error.log                   messages                            samba/log.jcifs0_1_e2               samba/log.smbd
  apache2/other_vhosts_access.log     mongodb/mongod.log                  samba/log.jeol-sem                  samba/log.su-ochiai
  apache2/ssl_access.log              mongodb/mongodb.log                 samba/log.jun-note                  samba/log.t-k-pc
  apt/history.log                     mysql.err                           samba/log.jun-pc                    samba/log.takeuchi-t430
  apt/term.log                        mysql.log                           samba/log.jun-z87mx-d3h             samba/log.takeuchi-thkpd
  aptitude                            news/news.crit                      samba/log.jun04-pc                  samba/log.takeuchi-tpdold
  auth.log                            news/news.err                       samba/log.k                         samba/log.test-d223098a93
  btmp                                news/news.notice                    samba/log.kato-pc                   samba/log.tomoki
  daemon.log                          postgresql/postgresql-9.1-main.log  samba/log.kishi-pc                  samba/log.tpe-ochiai
  dbconfig-common/dbc.log             postgresql/postgresql-9.4-main.log  samba/log.kobayashi-vaio            samba/log.ubuntu_xeon
  debug                               redis/redis-server.log              samba/log.kou-pc                    samba/log.ubuntupc
  denyhosts                           samba/log.                          samba/log.laptop-9p54nmgj           samba/log.virtualpc-xp
  dmesg                               samba/log.10.10.10                  samba/log.lenovo-pc                 samba/log.vt-g114
  dpkg.log                            samba/log.10.225.225                samba/log.macbookpro-ebe7           samba/log.vt-stm
  exim4/mainlog                       samba/log.225-lenovo2               samba/log.mhqmygosmcwzlmr           samba/log.wb-BUILTIN
  exim4/rejectlog                     samba/log.______-pc                 samba/log.mitani-pc                 samba/log.wb-DORA
  faillog                             samba/log._________-pc              samba/log.mogi-think                samba/log.win-hm8q3t62vkc
  fontconfig.log                      samba/log._______________-pc        samba/log.mrs                       samba/log.win-inlu09e8kkn
  fsck/checkfs                        samba/log.bamba                     samba/log.nec-pcuser-pc             samba/log.winbindd
  fsck/checkroot                      samba/log.bamba-dell                samba/log.nmbd                      samba/log.winbindd-idmap
  installer/cdebconf/questions.dat    samba/log.bamba-pc                  samba/log.nsu-pc                    samba/log.workstation
  installer/cdebconf/templates.dat    samba/log.bamba-xps                 samba/log.ochiai                    samba/log.yoshida-pc
  installer/hardware-summary          samba/log.banba-pc                  samba/log.ochiaidesktoppc           samba/log.yoshida-vaio
  installer/lsb-release               samba/log.desktop-02od8uj           samba/log.osamu-a3acde464           samba/log.yuka-pc
  installer/partman                   samba/log.desktop-2fk5bki           samba/log.owner-pc                  squid3/access.log
  installer/status                    samba/log.desktop-51i7357           samba/log.owner7                    squid3/cache.log
  installer/syslog                    samba/log.desktop-8uhmfk9           samba/log.pc                        squid3/netdb.state
  kern.log                            samba/log.desktop-ea9rn79           samba/log.pcuser-pc                 suphp/suphp.log
  lastlog                             samba/log.desktop-hklb3hd           samba/log.rdcifs_225_157_123        sympa.log
  lpr.log                             samba/log.desktop-i198eqf           samba/log.sgkw-l                    syslog
  mail.err                            samba/log.desktop-o8sf0no           samba/log.shalashaska-vai           user.log
  mail.info                           samba/log.dfs-pc2                   samba/log.shigekawa-lab             wtmp
  Display all 140 possibilities? (y or n) n
 $ catlog a^T
  alternatives.log                 apache2/error.log                apache2/ssl_access.log           apt/term.log                     auth.log
  apache2/access.log               apache2/other_vhosts_access.log  apt/history.log                  aptitude

* コメント・質問 [#lf8372ec]

#article_kcaptcha

Counter: 1329 (from 2010/06/03), today: 1, yesterday: 2