TODO

From PeformIQ Upgrade
Jump to navigation Jump to search

http://www.kitebird.com/articles/pydbapi.html


Solaris References

Links

MQ Series

Links

Solaris Command Reference

HD info(vendor, RPM, capacity)

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

Display the number of used and free i-nodes

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]

Display processes with the highest CPU utilization

xxx:/home/dxy[4:54pm] ps -eo pid,pcpu,args | sort +1n

Display processes with the highest memory usage

xxx:/home/dxy[4:54pm] ps -eo pid,vsz,args | sort +1n

Printing disk geometry and partition info

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]

Checking whether it's running in 32-bit mode or 64-bit mode

64-bit mode

% isalist -v
sparcv9+vis sparcv9 sparcv8plus+vis sparcv8plus sparcv8 sparcv8-fsmuld sparcv7 sparc
% isainfo -v
64-bit sparcv9 applications
32-bit sparc applications

32-bit mode

% isalist \-v
sparcv8plus+vis sparcv8plus sparcv8 sparcv8-fsmuld sparcv7 sparc
% isainfo \-v
32-bit sparc applications

Verifying a route to a specified network

# 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
\#

print the version of OBP

% prtconf \-V
OBP 3.3.2 1996/06/28 08:43
% /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
%
{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

print the version of Open Windows

% showrev \-w
 
OpenWindows version:
OpenWindows Version 3.6.1 25 January 1999
 
%

To determine which monitor resolution is available

% /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.
%

system configuration

% sysdef


Display the device list (and drivers attached to devices)

% 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)

processor type, speed

% 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.

patch applied on the system

% showrev \-p

exported file system on NFS server

% showmount \-e NFS_SERVER

display current run level

% who \-r

Find out a package which a file belongs to

% 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
 
%

Examining gcc behavior

% gcc \-v \-x c /dev/null

Display the version of CDE

% /usr/ccs/bin/what /usr/dt/bin/dtmail
/usr/dt/bin/dtmail:
CDE Version 1.3.4
CDEVersion1.3.4

Display the version of BIND

% 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
 
%

system configuration

% /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
======================
 
%
=Network Time Protocol - ntpd=


=References=
 
* [http://linux.die.net/man/1/ntpd]
* [http://wylie.summerhill.org/ntp/ntpd.html]
  
=UNIX - Useful References=


=Command Translation Matrix=
 
* [http://bhami.com/rosetta.html]
* [http://www.opennet.ru/soft/linux2unix.html]
* [http://www.gnu.org/software/automake/manual/autoconf/Systemology.html#Systemology]
 
 
=Object Relational Mapping - ORM=

 
==References==
 
* [http://www.simpleorm.org/whitepaper.html]
* [http://www.simpleorm.org/]

=Python - MySQL=
 
==References==

* [http://dev.mysql.com/downloads/python.html]
* [http://sourceforge.net/projects/mysql-python]
* [http://mysql-python.sourceforge.net/]
* [http://www.kitebird.com/articles/pydbapi.html]
* [http://dustman.net/andy/python/python-and-mysql]
* [http://www.devshed.com/c/a/Python/Database-Programming-in-Python-Accessing-MySQL/]
 
=General References=

* [http://www.python.org/dev/peps/pep-0249/]
 
=Python - Sqlite=
 
==References==
 

* [http://www.hwaci.com/sw/sqlite/]
* [http://en.wikipedia.org/wiki/SQLite]
* [http://www.sqlite.org/cvstrac/wiki]
* [http://snippets.dzone.com/posts/show/653]
* [http://del.icio.us/pauldwaite/sqlite]
 
==Examples==
 
* [http://www.mail-archive.com/sqlite-users@sqlite.org/msg28608.html]
* [http://www.freenetpages.co.uk/hp/alan.gauld/tutdbms.htm]
 
==GeoLite==
 
===Tables===
 
<pre>
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)

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:

    * Beginning IP Address
    * Ending IP Address
    * Beginning IP Number*
    * Ending IP Number*
    * ISO 3166 Country Code
    * Country Name

This is an sample of how the CSV file is structured:

"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"
  • Beginning IP Number and Ending IP Number are calculated as follows:
ipnum = 16777216*w + 65536*x + 256*y + z   (1)

where

IP Address = w.x.y.z

The reverse of this formula is

w = int ( ipnum / 16777216 ) % 256;
x = int ( ipnum / 65536    ) % 256;
y = int ( ipnum / 256      ) % 256;
z = int ( ipnum            ) % 256;

Where % is the mod operator.

Here is sample Perl code to convert the IP number to a IP address:

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";
}

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

SELECT ip_country FROM geoip WHERE 404232216 BETWEEN begin_ip_num AND end_ip_num

MySQL Query

SELECT ip_country FROM geoip WHERE 404232216 >= begin_ip_num AND
 404232216 <= end_ip_num

Here we used the formula (1) to compute the IP Number based on 24.24.24.24

404232216 = 16777216*24 + 65536*24 + 256*24 + 24

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.

Script

'''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()