Why does console refuse to die?
- It's because of pipes!
This post is result of my long addiction to console applications. Somehow, when I want to get a quick view of things on my system, I always turn to pipes and do something with them. In that process, I developed few of useful scripts for use within shell pipes, and I would like to introduce my readership to them.
PostgreSQL database size
When I want to see size of all databases on my system or size of tables in one database I turn to
pg_size. It's a short and sweet script which will do a little shell magic (take a look in it) and display size of all databases on system (without any options) or size of all tables in database and number of rows (when used like
pg_size database_name) like this:
dpavlin@llin:~$ pg_size dellstore2 | grep -v sql_
4890624 customers 20000
3153920 orderlines 60350
2678784 cust_hist 60350
991232 products 10000
966656 orders 12000
450560 inventory 10000
8192 categories 16
0 reorder 0
This is all nice and well, but doesn't really gives us the right overview, so move along for...
Nice console graphs
First, a caveat: this tools assumes that it will get number, space, and optional description. Output above seems to fit into this description, so let's try it:
dpavlin@llin:~$ COLUMNS=80 pg_size dellstore2 | grep -v sql_ | sum.pl -h
customers 20000 4776k OOOOOOOOOOOOOOOO 4776k
orderlines 60350 3080k OOOOOOOOOO----------------- 7856k
cust_hist 60350 2616k OOOOOOOOO--------------------------- 10M
products 10000 968k OOO------------------------------------- 11M
orders 12000 944k OOO---------------------------------------- 12M
inventory 10000 440k O------------------------------------------- 12M
categories 16 8192b --------------------------------------------- 12M
reorder 0 0 --------------------------------------------- 12M
This gives us nice output: description (followed by number of rows from above output), and running total of size in human readable form (if you don't like it, remove
-h flag and you will get raw numbers).
Let's take another example (if you are still reading this and not interested in PostgreSQL database size). Let's see how much traffic did pppd transfer over very slow GPRS link on 8-day vacation:
dpavlin@llin:~$ grep 'pppd.*: Sent' /var/log/messages | awk '{ print $7 + $10 " " $1 " " $2 }' | sum.pl -h
May 5 0 0
May 5 39k 39k
May 5 7512k OO 7551k
May 6 6352b -- 7558k
May 6 20k -- 7579k
May 6 1183k --- 8762k
May 8 6869k OO--- 15M
May 8 70k ----- 15M
May 9 3596k O------ 18M
May 9 1998k ------- 20M
May 10 32M OOOOOOOOOOOO-------- 53M
May 10 13k -------------------- 53M
May 11 44M OOOOOOOOOOOOOOOOO-------------------- 98M
May 12 12M OOOO-------------------------------------- 111M
May 13 7120k OO------------------------------------------- 118M
May 13 20M OOOOOOO---------------------------------------------- 139M
Much more interesting! A long time ago, I had a bunch of quick one-lines which used
sum.pl to produce output from various other system counters, but somehow it got lost.
As I get only few comments on my blog, if you find this useful, leave one. I have few other examples, like the one which shows top 5 memory eaters on my system:
dpavlin@llin:~$ ps v | awk '{ print $8 " " $9 " " $10 }' | sort -rn | ~/private/perl/sum.pl | head -5
# RSS %MEM COMMAND
10.6 /usr/lib/iceweasel/firefox-bin 165092 OOOOOOOOOOOOOO 165092
4.3 perl 67240 OOOOOO--------------- 232332
0.5 awesome 8504 --------------------- 240836
0.4 irssi 6632 ---------------------- 247468
0.3 vi 5888 ---------------------- 253356
but, if this is not interested to my readership, tell me so, and I will stop spamming your already full RSS reader with console output!
:-)