TODO
http://www.kitebird.com/articles/pydbapi.html
== Solaris References --
Links
== MQ Series --
Links
=
Solaris Command References
Solaris Command Reference
HD info(vendor, RPM, capacity)
{noformat} xxx:/home/tse/dxy[9:18pm] iostat -E
sd0 Soft Errors: 0 Hard Errors: 3 Transport Errors: 0 Vendor: SEAGATE Product: ST34371W SUN4.2G Revision: 7462 Serial No: 9742K71685 RPM: 7200 Heads: 16 Size: 4.29GB <4292075520 bytes> Media Error: 0 Device Not Ready: 0 No Device: 3 Recoverable: 0 Illegal Request: 0 Predictive Failure Analysis: 0
sd1 Soft Errors: 0 Hard Errors: 3 Transport Errors: 0 Vendor: SEAGATE Product: ST32171W SUN2.1G Revision: 7462 Serial No: 9736T74649 RPM: 5400 Heads: 19 Size: 2.13GB <2127708160 bytes> Media Error: 0 Device Not Ready: 0 No Device: 3 Recoverable: 0 Illegal Request: 0 Predictive Failure Analysis: 0
sd6 Soft Errors: 0 Hard Errors: 3 Transport Errors: 0 Vendor: TOSHIBA Product: XM5701TASUN12XCD Revision: 0997 Serial No: 04/09/97 RPM: 0 Heads: 0 Size: 18446744073.71GB <-8589934591 bytes> Media Error: 0 Device Not Ready: 3 No Device: 0 Recoverable: 0 Illegal Request: 0 Predictive Failure Analysis: 0 {noformat}
Display the number of used and free i-nodes
{noformat} xxx:/home/dxy[4:07pm] df -F ufs -o i Filesystem iused ifree %iused Mounted on /dev/dsk/c0t3d0s0 38555 403045 9% / /dev/dsk/c0t1d0s0 160761 345607 32% /export/home /dev/md/dsk/d20 149826 1905214 7% /usr/local impulse:/home/dxy[4:07pm] /usr/ucb/df -i Filesystem iused ifree %iused Mounted on /dev/dsk/c0t3d0s0 38555 403045 9% / /dev/dsk/c0t1d0s0 160761 345607 32% /export/home /dev/md/dsk/d20 149826 1905214 7% /usr/local impulse:/home/dxy[4:07pm] {noformat}
Display processes with the highest CPU utilization
{noformat} xxx:/home/dxy[4:54pm] ps -eo pid,pcpu,args | sort +1n {noformat}
Display processes with the highest memory usage
{noformat} xxx:/home/dxy[4:54pm] ps -eo pid,vsz,args | sort +1n {noformat}
Printing disk geometry and partition info
{noformat} xxx:/home/dxy[4:16pm] prtvtoc /dev/rdsk/c0t0d0s0
- /dev/rdsk/c0t0d0s0 partition map
- Dimensions:
- 512 bytes/sector
- 135 sectors/track
- 16 tracks/cylinder
- 2160 sectors/cylinder
- 3882 cylinders
- 3880 accessible cylinders
- Flags:
- 1: unmountable
- 10: read-only
- First Sector Last
- Partition Tag Flags Sector Count Sector Mount Directory
0 2 00 0 7855920 7855919 /usr/local 1 3 01 7855920 524880 8380799 2 5 00 0 8380800 8380799
xxx:/home/dxy[4:16pm] {noformat}
Checking whether it's running in 32-bit mode or 64-bit mode
64-bit mode
{h4> {noformat}
% isalist -v
sparcv9+vis sparcv9 sparcv8plus+vis sparcv8plus sparcv8 sparcv8-fsmuld sparcv7 sparc
% isainfo -v
64-bit sparcv9 applications
32-bit sparc applications
{noformat}
32-bit mode{h4>{noformat}
}
% isalist \-v
sparcv8plus+vis sparcv8plus sparcv8 sparcv8-fsmuld sparcv7 sparc
% isainfo \-v
32-bit sparc applications
{noformat}
Verifying a route to a specified network
{noformat}
- route \-n get xxx.yyy.zzz.0
route to: xxx.yyy.zzz.0
destination: default
mask: default
gateway: xxx.yyy.aaa.254
interface: hme0
flags: <UP,GATEWAY,DONE>
recvpipe sendpipe ssthresh rtt,msec rttvar hopcount mtu expire
0 0 0 0 0 0 1500 0
\#
{noformat}
h2. print the version of OBP
{noformat}
% prtconf \-V
OBP 3.3.2 1996/06/28 08:43
{noformat}
{noformat}
% /usr/platform/`uname \-i`/sbin/prtdiag \-v \| grep OBP
OBP 3.11.1 1997/12/03 15:53 POST 3.11.4 1997/05/27 02:26
%
{noformat}
{noformat}
{2} ok .version
Release 3.23 Version 1 created 1999/07/16 12:08
OBP 3.23.1 1999/07/16 12:08
POST 2.0.2 1998/10/19 10:46
{2}
ok
{noformat}
print the version of Open Windows
{noformat}
% showrev \-w
OpenWindows version:
OpenWindows Version 3.6.1 25 January 1999
%
{noformat}
To determine which monitor resolution is available
{noformat}
% /usr/sbin/ffbconfig \-res ?
Valid values for \-res option are:
1024x768x60 [1]
1024x768x70 [1]
1024x768x75 [1] [2]
1024x768x77
1024x800x84
1152x900x66
1152x900x76
1280x800x76 [1] [2]
1280x1024x60 [1] [2]
1280x1024x67
1280x1024x76
1280x1024x85 [1] [2]
960x680x112s
960x680x108s
640x480x60 [1] [2]
640x480x60i [1]
768x575x50i [1]
1440x900x76 [1] [2]
1600x1000x66 [1] [2]
1600x1000x76 [1] [2]
1600x1280x76 [1] [2]
1920x1080x72 [1] [2]
1920x1080x76 [1] [2]
1920x1200x70 [1] [2]
1920x1200x75 [1] [2]
svga [1]
1152
1280
stereo
vga [1] [2]
ntsc [1]
pal [1]
none
Notes:
[1] monitor does not support this resolution.
[2] this version of FFB (FFB1) does not support this resolution.
%
{noformat}
system configuration
% sysdef
h2. Display the device list (and drivers attached to devices)
{noformat}
% prtconf \-D
System Configuration: Sun Microsystems sun4u
Memory size: 256 Megabytes
System Peripherals (Software Nodes):
SUNW,Ultra-1
packages
terminal-emulator
deblocker
obp-tftp
disk-label
ufs-file-system
chosen
openprom
client-services
options, instance #0 (driver name: options)
aliases
memory
virtual-memory
counter-timer
sbus, instance #0 (driver name: sbus)
SUNW,CS4231 (driver name: audiocs)
auxio
flashprom
SUNW,fdtwo, instance #0 (driver name: fd)
eeprom (driver name: eeprom)
zs, instance #0 (driver name: zs)
zs, instance #1 (driver name: zs)
sc
SUNW,pll
SUNW,fas, instance #0 (driver name: fas)
sd (driver name: sd)
st (driver name: st)
sd, instance #0 (driver name: sd)
sd, instance #1 (driver name: sd)
sd, instance #2 (driver name: sd)
sd, instance #3 (driver name: sd)
sd, instance #4 (driver name: sd)
sd, instance #5 (driver name: sd)
sd, instance #6 (driver name: sd)
sd, instance #7 (driver name: sd)
sd, instance #8 (driver name: sd)
sd, instance #9 (driver name: sd)
sd, instance #10 (driver name: sd)
sd, instance #11 (driver name: sd)
sd, instance #12 (driver name: sd)
sd, instance #13 (driver name: sd)
sd, instance #14 (driver name: sd)
SUNW,hme, instance #0 (driver name: hme)
SUNW,bpp (driver name: bpp)
SUNW,UltraSPARC
SUNW,ffb, instance #0 (driver name: ffb)
pseudo, instance #0 (driver name: pseudo)
{noformat}
h2. processor type, speed
{noformat}
% psrinfo \-v
Status of processor 0 as of: 06/16/99 12:38:51
Processor has been on-line since 02/07/99 01:47:11.
The sparcv9 processor operates at 200 MHz,
and has a sparcv9 floating point processor.
{noformat}
patch applied on the system
% showrev \-p
exported file system on NFS server
% showmount \-e NFS_SERVER
h2. display current run level
% who \-r
Find out a package which a file belongs to
{noformat}
% pkgchk \-l \-p /usr/lib/sendmail
Pathname: /usr/lib/sendmail
Type: regular file
Expected mode: 4555
Expected owner: root
Expected group: bin
Expected file size (bytes): 650720
Expected sum(1) of contents: 22626
Expected last modification: Apr 07 04:13:53 1999
Referenced by the following packages:
SUNWsndmu
Current status: installed
%
{noformat}
Examining gcc behavior
% gcc \-v \-x c /dev/null
Display the version of CDE
{noformat}
% /usr/ccs/bin/what /usr/dt/bin/dtmail
/usr/dt/bin/dtmail:
CDE Version 1.3.4
CDEVersion1.3.4
{noformat}
h2. Display the version of BIND
{noformat}
% nslookup \-class=chaos \-q=txt version.bind ns0.optix.org
Server: impulse.optix.org
Address: 210.164.85.210
Aliases: 210.85.164.210.in-addr.arpa
VERSION.BIND text = "8.2.2-P5"
% dig @ns-tk021.ocn.ad.jp version.bind chaos txt
- <<>> DiG 8.2 <<>> @ns-tk021.ocn.ad.jp version.bind chaos txt
- (1 server found)
- res options
- init recurs defnam dnsrch
- got answer
- ->>HEADER<<- opcode
- QUERY, status: NOERROR, id: 6
- flags
- qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
- QUERY SECTION
- version.bind, type = TXT, class = CHAOS
- ANSWER SECTION
VERSION.BIND. 0S CHAOS TXT "4.9.7-REL"
- Total query time
- 81 msec
- FROM
- velocity to SERVER: ns-tk021.ocn.ad.jp 203.139.160.103
- WHEN
- Tue May 9 17:26:23 2000
- MSG SIZE sent
- 30 rcvd: 64
%
{noformat}
system configuration
{noformat}
% /usr/platform/`uname \-i`/sbin/prtdiag
System Configuration: Sun Microsystems sun4u 8-slot Sun Enterprise 4000/5000
System clock frequency: 82 MHz
Memory size: 512Mb
=================== CPUs ===================
Run Ecache CPU CPU
Brd CPU Module MHz MB Impl. Mask
--- --- \------\- \----\- \-----\- \-----\- \---\-
0 0 0 248 2.0 US-II 1.1
0 1 1 248 2.0 US-II 1.1
2 4 0 248 2.0 US-II 1.1
2 5 1 248 2.0 US-II 1.1
=================== Memory ===================
Intrlv. Intrlv.
Brd Bank MB Status Condition Speed Factor With
--- \----\- \---\- \------\- \---------\- \----\- \------\- \------\-
0 0 256 Active OK 60ns 2-way A
2 0 256 Active OK 60ns 2-way A
=================== IO Cards ===================
Bus Freq
Brd Type MHz Slot Name Model
--- \---\- \---\- \---\- \-------------------------------\- \---------------------\-
1 SBus 25 3 SUNW,hme
1 SBus 25 3 SUNW,fas/sd (block)
1 SBus 25 13 SUNW,soc/SUNW,pln 501-2069
5 SBus 25 3 SUNW,hme
5 SBus 25 3 SUNW,fas/sd (block)
5 SBus 25 13 SUNW,soc/SUNW,pln 501-2069
Detached Boards
===
Slot State Type Info
\---\- \--------\- \-----\- \----------------------------------------\-
3 disabled disk Disk 0: Target: 10 Disk 1: Target: 11
7 disabled disk Disk 0: Target: 14 Disk 1: Target: 15
No failures found in System
===============
No System Faults found
==========
%
{noformat}
{noformat}
=
Network Time Protocol - ntpd
References
=
UNIX - Useful References
Command Translation Matrix
8 [9]
=
Object Relational Mapping - ORM
h1. References
=
Python - MySQL
References
\\
h1. General References
\\
=
Python - Sqlite
References
\\
Examples
\\
GeoLite
\\
Tables
\\
{noformat}
CREATE TABLE locations(
locid INTEGER PRIMARY KEY,
country TEXT,
region TEXT,
city TEXT,
postalCode TEXT,
latitude REAL,
longitude REAL,
dmaCode INTEGER,
areaCode INTEGER)
CREATE TABLE blocks(
startIpNum INTEGER,
endIpNum INTEGER,
locId INTEGER)
{noformat}
Data
Blocks table has 2,776,436 rows
Locations table has 159,488 rows
Instructions
GeoIP Country CSV Text Files
MaxMind GeoIP databases are available in a Comma Separated Value (CSV) format, in addition to the binary format. These CSV files generally contain IP Address range and geographical data for all publicly assigned IPv4 addresses.
Due to the large size of geolocation databases, we generally recommend using our binary format with one of our APIs, since they are highly optimized for speed and disk space. On the other hand, if you have a requirement to import the data into a SQL database, the CSV format is recommended. We have listed some guidelines for importing and querying the data with a SQL database.
CSV Format
The CSV File contains six fields:
{noformat}
* Beginning IP Address
* Ending IP Address
* Beginning IP Number*
* Ending IP Number*
* ISO 3166 Country Code
* Country Name
{noformat}
This is an sample of how the CSV file is structured:
{noformat}
"begin_ip","end_ip","begin_num","end_num","country","name"
"61.88.0.0","61.91.255.255","1029177344","1029439487","AU","Australia"
"61.92.0.0","61.93.255.255","1029439488","1029570559","HK","Hong Kong"
"61.94.0.0","61.94.7.255","1029570560","1029572607","ID","Indonesia"
{noformat}
- Beginning IP Number and Ending IP Number are calculated as follows:
{noformat}
ipnum = 16777216*w + 65536*x + 256*y + z (1)
{noformat}
where
{noformat}
IP Address = w.x.y.z
{noformat}
The reverse of this formula is
{noformat}
w = int ( ipnum / 16777216 ) % 256;
x = int ( ipnum / 65536 ) % 256;
y = int ( ipnum / 256 ) % 256;
z = int ( ipnum ) % 256;
{noformat}
Where % is the mod operator.
Here is sample Perl code to convert the IP number to a IP address:
{noformat}
sub numToStr {
my ($ipnum) = @_;
my $z = $ipnum % 256;
$ipnum >>= 8;
my $y = $ipnum % 256;
$ipnum >>= 8;
my $x = $ipnum % 256;
$ipnum >>= 8;
my $w = $ipnum % 256;
return "$w.$x.$y.$z";
}
{noformat}
It is useful to have the IP Number if you are performing IP Address lookups using a database. For example the following queries will find the country based on IP Address 24.24.24.24:
SQL Query
{noformat}
SELECT ip_country FROM geoip WHERE 404232216 BETWEEN begin_ip_num AND end_ip_num
{noformat}
MySQL Query
{noformat}
SELECT ip_country FROM geoip WHERE 404232216 >= begin_ip_num AND
404232216 <= end_ip_num
{noformat}
Here we used the formula (1) to compute the IP Number based on 24.24.24.24
{noformat}
404232216 = 16777216*24 + 65536*24 + 256*24 + 24
{noformat}
Guides For more information on importing GeoIP CSV files into MySQL, see HOW-TO Import the MaxMind GeoIP Free Country CSV file into MySQL and save diskspace.
For more information on importing GeoIP CSV files into Oracle 8i\+ with PL/SQL and SQL*Loader files included, see GeoIP01.zip on Sascha Pfalz's download page.
For more information on importing GeoIP CSV files into MS Access, see How to install the MaxMind GeoIP CSV databases into an MS Access Database.
h3. Script
\\
{noformat}
geolite
GeoLite City is a free IP to city database provided by MaxMind.
They provide a C API (and a python wrapper) for the database.
If you can't compile the C sources on your server (or get a binary
version), this script might be helpful for you.
The script puts the geoip data in a sqllite database, and provides
interfaces for updating and searching the database.
To use this script, get the database in CSV format:
http://www.maxmind.com/app/geolitecity
You also need to have python 2.5 for this script (sqlite3 is used)
import sqlite3 as sqlite
import os
def dottedQuadToNum(ip):
"convert decimal dotted quad string to long integer"
hexn = .join(["%02X" % long(i) for i in ip.split('.')])
return long(hexn, 16)
def cursorToDict(cursor):
val = cursor.next()
return dict([(cursor.description[i][0],val[i]) for i in xrange(len(cursor.description))])
def test():
import sqlite3
from time import clock
x = sqlite3.connect('geolite.db')
y = x.cursor()
ip = dottedQuadToNum("84.108.189.94")
res = y.execute('select * from blocks,locations where locations.locid = blocks.locid AND ? >= blocks.startIpNum AND ? <= blocks.endIpNum', [ip,ip])
begin = clock()
f = res.next()
end = clock()
y.close()
x.close()
return end-begin, f
def test2():
from time import clock
x = GeoLiteDB()
x.connect();
begin = clock()
x.ipLocation("84.108.189.94");
end = clock()
x.close()
return end - begin
def createDB(dbPath = 'geolite.db', locationsPath='GeoLiteCity-Location.csv', blocksPath='GeoLiteCity-Blocks.csv', warnOnDelete = True):
if os.path.exists(dbPath):
if warnOnDelete:
print "file %s will be deleted. Press any key to continue, or 'n' to abort..." % (os.path.abspath(dbPath))
if getch() == 'n':
print 'aborted.'
return None
os.remove(os.path.abspath(dbPath))
conn = sqlite.connect(dbPath)
cursor = conn.cursor()
try:
cursor.execute(CREATE TABLE locations(
locid INTEGER PRIMARY KEY,
country TEXT,
region TEXT,
city TEXT,
postalCode TEXT,
latitude REAL,
longitude REAL,
dmaCode INTEGER,
areaCode INTEGER))
cursor.execute(CREATE TABLE blocks(
startIpNum INTEGER,
endIpNum INTEGER,
locId INTEGER))
locations = file(locationsPath,'r')
print ('parsing locations. This will a while.')
print locations.readline().strip() #should print copyright note
print locations.readline().strip() #should print column names
lines = ([x.strip('"') for x in line.strip().split(',')] for line in locations.xreadlines())
cursor.executemany('insert into locations values (?,?,?,?,?,?,?,?,?)', lines)
locations.close()
blocks = file(blocksPath,'r')
print ('parsing blocks. This will take longer.')
print blocks.readline().strip() #should print copyright note
print blocks.readline().strip() #should print column names
lines = ([x.strip('"') for x in line.strip().split(',')] for line in blocks.xreadlines())
cursor.executemany('insert into blocks values (?,?,?)', lines)
blocks.close()
- cursor.execute(CREATE UNIQUE INDEX startIpNumIx ON blocks(startIpNum);)
- cursor.execute(CREATE UNIQUE INDEX endIpNumIx ON blocks(endIpNum);)
conn.commit()
print 'analyze'
cursor.execute(ANALYZE;)
numBlocks = cursor.execute('select count(*) from blocks').fetchone()[0]
numLocations = cursor.execute('select count(*) from locations').fetchone()[0]
return numBlocks, numLocations
finally:
cursor.close()
conn.close()
class GeoLiteDB:
def __init__(self, dbPath = 'geolite.db'):
self.dbPath = dbPath
self._conn = None
self._cursor = None
def connect(self):
if self._conn:
raise 'database already opened'
self._conn = sqlite.connect(self.dbPath)
self._cursor = self._conn.cursor()
def close(self):
if not self._conn:
raise 'databse was not opened'
self._cursor.close()
self._conn.close()
def autoConnect(self):
if not self._conn:
self.connect()
def countBlocks(self):
self.autoConnect()
return self._cursor.execute('select count(*) from blocks').next()[0]
def countLocations(self):
self.autoConnect()
return self._cursor.execute('select count(*) from locations').next()[0]
def ipLocation(self, ip):
self.autoConnect()
if isinstance(ip,str):
ip = dottedQuadToNum(ip)
return cursorToDict(self._cursor.execute('select * from blocks,locations where locations.locid = blocks.locid AND ? >= blocks.startIpNum AND ? <= blocks.endIpNum', [ip,ip]))
- cross platform getch, from http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/134892
class _Getch:
"""Gets a single character from standard input. Does not echo to the
screen."""
def __init__(self):
try:
self.impl = _GetchWindows()
except ImportError:
self.impl = _GetchUnix()
def __call__(self): return self.impl()
class _GetchUnix:
def __init__(self):
import tty, sys
def __call__(self):
import sys, tty, termios
fd = sys.stdin.fileno()
old_settings = termios.tcgetattr(fd)
try:
tty.setraw(sys.stdin.fileno())
ch = sys.stdin.read(1)
finally:
termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
return ch
class _GetchWindows:
def __init__(self):
import msvcrt
def __call__(self):
import msvcrt
return msvcrt.getch()
getch = _Getch()
{noformat}
- init recurs defnam dnsrch
- got answer
- ->>HEADER<<- opcode
- QUERY, status: NOERROR, id: 6
- flags
- qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
- QUERY SECTION
- version.bind, type = TXT, class = CHAOS
- 81 msec
- FROM
- velocity to SERVER: ns-tk021.ocn.ad.jp 203.139.160.103
- WHEN
- Tue May 9 17:26:23 2000
- MSG SIZE sent
- 30 rcvd: 64