<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1594261002485299087</id><updated>2012-02-16T08:20:10.422-05:00</updated><title type='text'>Open IT</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default?start-index=101&amp;max-results=100'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>121</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-5222165802329361789</id><published>2012-01-06T17:13:00.001-05:00</published><updated>2012-01-06T17:14:43.549-05:00</updated><title type='text'>Setting root password in Ubuntu</title><content type='html'>Its quite simple:&lt;br /&gt;&lt;br /&gt;- Open a terminal&lt;br /&gt;- sudo passwd root&lt;br /&gt;&lt;br /&gt;&amp; follow the instructions.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-5222165802329361789?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/5222165802329361789/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=5222165802329361789&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/5222165802329361789'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/5222165802329361789'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2012/01/setting-root-password-in-ubuntu.html' title='Setting root password in Ubuntu'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-2559234409766007421</id><published>2010-03-03T15:41:00.000-05:00</published><updated>2010-03-03T15:42:13.137-05:00</updated><title type='text'>More on Swapping Vs. Paging</title><content type='html'>Just using a lot of swap space doesn’t necessarily mean that you need more memory. Here’s how to tell when Linux is happy with the available memory and when it needs more.&lt;br /&gt;&lt;br /&gt;Linux novices often find virtual memory mysterious, but with a grasp of the fundamental concepts, it’s easy to understand. With this knowledge, you can monitor your system’s memory utilization using vmstat and detect problems that can adversely affect system performance.&lt;br /&gt;How Virtual Memory Works&lt;br /&gt;&lt;br /&gt;Physical memory-the actual RAM installed-is a finite resource on any system. The Linux memory handler manages the allocation of that limited resource by freeing portions of physical memory when possible.&lt;br /&gt;&lt;br /&gt;All processes use memory, of course, but each process doesn’t need all its allocated memory all the time. Taking advantage of this fact, the kernel frees up physical memory by writing some or all of a process’ memory to disk until it’s needed again.&lt;br /&gt;&lt;br /&gt;The kernel uses paging and swapping to perform this memory management. Paging refers to writing portions, termed pages, of a process’ memory to disk. Swapping, strictly speaking, refers to writing the entire process, not just part, to disk. In Linux, true swapping is exceedingly rare, but the terms paging and swapping often are used interchangeably.&lt;br /&gt;&lt;br /&gt;When pages are written to disk, the event is called a page-out, and when pages are returned to physical memory, the event is called a page-in. A page fault occurs when the kernel needs a page, finds it doesn’t exist in physical memory because it has been paged-out, and re-reads it in from disk.&lt;br /&gt;&lt;br /&gt;Page-ins are common, normal and are not a cause for concern. For example, when an application first starts up, its executable image and data are paged-in. This is normal behavior.&lt;br /&gt;&lt;br /&gt;Page-outs, however, can be a sign of trouble. When the kernel detects that memory is running low, it attempts to free up memory by paging out. Though this may happen briefly from time to time, if page-outs are plentiful and constant, the kernel can reach a point where it’s actually spending more time managing paging activity than running the applications, and system performance suffers. This woeful state is referred to as thrashing.&lt;br /&gt;&lt;br /&gt;Using swap space is not inherently bad. Rather, it’s intense paging activity that’s problematic. For instance, if your most-memory-intensive application is idle, it’s fine for portions of it to be set aside when another large job is active. Memory pages belonging to an idle application are better set aside so the kernel can use physical memory for disk buffering.&lt;br /&gt;Using vmstat&lt;br /&gt;&lt;br /&gt;vmstat, as its name suggests, reports virtual memory statistics. It shows how much virtual memory there is, how much is free and paging activity. Most important, you can observe page-ins and page-outs as they happen. This is extremely useful.&lt;br /&gt;&lt;br /&gt;To monitor the virtual memory activity on your system, it’s best to use vmstat with a delay. A delay is the number of seconds between updates. If you don’t supply a delay, vmstat reports the averages since the last boot and quit. Five seconds is the recommended delay interval.&lt;br /&gt;&lt;br /&gt;To run vmstat with a five-second delay, type:&lt;br /&gt;&lt;br /&gt;vmstat 5&lt;br /&gt;&lt;br /&gt;You also can specify a count, which indicates how many updates you want to see before vmstat quits. If you don’t specify a count, the count defaults to infinity, but you can stop output with Ctrl-C.&lt;br /&gt;&lt;br /&gt;To run vmstat with ten updates, five seconds apart, type:&lt;br /&gt;&lt;br /&gt;vmstat 5 10&lt;br /&gt;&lt;br /&gt;Here’s an example of a system free of paging activity:&lt;br /&gt;&lt;br /&gt;procs memory swap io system cpu&lt;br /&gt;r b w swpd free buff cache si so bi bo in cs us sy id&lt;br /&gt;0 0 0 29232 116972 4524 244900 0 0 0 0 0 0 0 0 0&lt;br /&gt;0 0 0 29232 116972 4524 244900 0 0 0 0 2560 6 0 1 99&lt;br /&gt;0 0 0 29232 116972 4524 244900 0 0 0 0 2574 10 0 2 98&lt;br /&gt;&lt;br /&gt;All fields are explained in the vmstat man page, but the most important columns for this article are free, si and so. The free column shows the amount of free memory, si shows page-ins and so shows page-outs. In this example, the so column is zero consistently, indicating there are no page-outs.&lt;br /&gt;&lt;br /&gt;The abbreviations so and si are used instead of the more accurate po and pi for historical reasons.&lt;br /&gt;&lt;br /&gt;Here’s an example of a system with paging activity:&lt;br /&gt;&lt;br /&gt;procs memory swap io system cpu&lt;br /&gt;r b w swpd free buff cache si so bi bo in cs us sy id&lt;br /&gt;. . .&lt;br /&gt;1 0 0 13344 1444 1308 19692 0 168 129 42 1505 713 20 11 69&lt;br /&gt;1 0 0 13856 1640 1308 18524 64 516 379 129 4341 646 24 34 42&lt;br /&gt;3 0 0 13856 1084 1308 18316 56 64 14 0 320 1022 84 9 8&lt;br /&gt;&lt;br /&gt;Notice the nonzero so values indicating there is not enough physical memory and the kernel is paging out. You can use top and ps to identify the processes that are using the most memory.&lt;br /&gt;&lt;br /&gt;You also can use top to show memory and swap statistics. Here is an example of the uppermost portion of a typical top report:&lt;br /&gt;&lt;br /&gt;14:23:19 up 348 days, 3:02, 1 user, load average: 0.00, 0.00, 0.00&lt;br /&gt;55 processes: 54 sleeping, 1 running, 0 zombie, 0 stopped&lt;br /&gt;CPU states: 0.0% user, 2.4% system, 0.0% nice, 97.6% idle&lt;br /&gt;Mem: 481076K total, 367508K used, 113568K free, 4712K buffers&lt;br /&gt;Swap: 1004052K total, 29852K used, 974200K free, 244396K cached&lt;br /&gt;&lt;br /&gt;For more information about top, see the top man page.&lt;br /&gt;Conclusion&lt;br /&gt;&lt;br /&gt;It isn’t necessarily bad for your system to be using some of its swap space. But if you discover your system is often running low on physical memory and paging is causing performance to suffer, add more memory. If you can’t add more memory, run memory-intensive jobs at different times of the day, avoid running nonessential jobs when memory demand is high or distribute jobs across multiple systems if possible.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-2559234409766007421?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/2559234409766007421/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=2559234409766007421&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/2559234409766007421'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/2559234409766007421'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2010/03/more-on-swapping-vs-paging.html' title='More on Swapping Vs. Paging'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-1777824262398196617</id><published>2010-02-23T23:56:00.000-05:00</published><updated>2010-02-23T23:57:55.620-05:00</updated><title type='text'>20 Linux System Monitoring Tools Every SysAdmin Should Know</title><content type='html'>http://www.cyberciti.biz/tips/top-linux-monitoring-tools.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-1777824262398196617?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.cyberciti.biz/tips/top-linux-monitoring-tools.html' title='20 Linux System Monitoring Tools Every SysAdmin Should Know'/><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/1777824262398196617/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=1777824262398196617&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/1777824262398196617'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/1777824262398196617'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2010/02/20-linux-system-monitoring-tools-every.html' title='20 Linux System Monitoring Tools Every SysAdmin Should Know'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-3249717709916846961</id><published>2010-02-23T16:25:00.001-05:00</published><updated>2010-02-23T16:25:36.148-05:00</updated><title type='text'>Solaris Swapping and Paging</title><content type='html'>http://www.sunmanagers.org/archives/1996/0436.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-3249717709916846961?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.sunmanagers.org/archives/1996/0436.html' title='Solaris Swapping and Paging'/><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/3249717709916846961/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=3249717709916846961&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/3249717709916846961'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/3249717709916846961'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2010/02/solaris-swapping-and-paging.html' title='Solaris Swapping and Paging'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-3955107443934033050</id><published>2010-02-23T12:31:00.002-05:00</published><updated>2010-02-23T12:33:37.998-05:00</updated><title type='text'>Displaying %ENV completely</title><content type='html'>#! /usr/bin/perl -w&lt;br /&gt;&lt;br /&gt;use strict;&lt;br /&gt;&lt;br /&gt;my $keyy;&lt;br /&gt;&lt;br /&gt;foreach $keyy (keys %ENV)&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;   print "$keyy and its value = $ENV{$keyy} \n";&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;1;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-3955107443934033050?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/3955107443934033050/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=3955107443934033050&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/3955107443934033050'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/3955107443934033050'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2010/02/displaying-env-completely.html' title='Displaying %ENV completely'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-3598395995731278668</id><published>2010-02-23T12:06:00.006-05:00</published><updated>2010-02-23T12:31:31.735-05:00</updated><title type='text'>Perl use lib, unshift difference</title><content type='html'>What's the difference between use, unshift and PERL5LIB when adding/including module path?&lt;br /&gt;&lt;br /&gt;A. &lt;br /&gt;&lt;br /&gt;use lib - is a compile time inclusion. Try this example:&lt;br /&gt;&lt;br /&gt;#! /usr/bin/perl -w&lt;br /&gt;&lt;br /&gt;use strict;&lt;br /&gt;&lt;br /&gt;print "@INC\n";&lt;br /&gt;use lib '/home/kdranjan/Perl/Dynamic';&lt;br /&gt;Print "@INC\n";&lt;br /&gt;&lt;br /&gt;Run it and it will display: (Both are same because added path was included at compile time)&lt;br /&gt;---------------------------&lt;br /&gt;- /home/kdranjan/Perl/Dynamic /etc/perl /usr/local/lib/perl/5.10.0 /usr/local/share/perl/5.10.0 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.10 /usr/share/perl/5.10 /usr/local/lib/site_perl .&lt;br /&gt;&lt;br /&gt;- /home/kdranjan/Perl/Dynamic /etc/perl /usr/local/lib/perl/5.10.0 /usr/local/share/perl/5.10.0 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.10 /usr/share/perl/5.10 /usr/local/lib/site_perl .&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;==========================================================&lt;br /&gt;&lt;br /&gt;unshift - is a run time inclusion.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Modify previous script a bit like this:&lt;br /&gt;---------------------------------------&lt;br /&gt;#! /usr/bin/perl -w&lt;br /&gt;&lt;br /&gt;use strict;&lt;br /&gt;&lt;br /&gt;print "@INC\n";&lt;br /&gt;unshift(@INC, '/home/kdranjan/Perl/Dynamic');&lt;br /&gt;print "@INC\n";&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;- /etc/perl /usr/local/lib/perl/5.10.0 /usr/local/share/perl/5.10.0 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.10 /usr/share/perl/5.10 /usr/local/lib/site_perl .&lt;br /&gt;&lt;br /&gt;- /home/kdranjan/Perl/Dynamic /etc/perl /usr/local/lib/perl/5.10.0 /usr/local/share/perl/5.10.0 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.10 /usr/share/perl/5.10 /usr/local/lib/site_perl .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-3598395995731278668?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/3598395995731278668/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=3598395995731278668&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/3598395995731278668'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/3598395995731278668'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2010/02/perl-use-lib-unshift.html' title='Perl use lib, unshift difference'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-7357221122532434223</id><published>2010-02-21T01:33:00.000-05:00</published><updated>2010-02-21T01:34:24.475-05:00</updated><title type='text'>How does gcc, ld and g++ work</title><content type='html'>http://www.linuxjournal.com/article/6463&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-7357221122532434223?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.linuxjournal.com/article/6463' title='How does gcc, ld and g++ work'/><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/7357221122532434223/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=7357221122532434223&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/7357221122532434223'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/7357221122532434223'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2010/02/how-does-gcc-ld-and-g-work.html' title='How does gcc, ld and g++ work'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-6771255650870692067</id><published>2010-02-18T23:19:00.001-05:00</published><updated>2010-02-18T23:21:53.536-05:00</updated><title type='text'>Defunct (Zombie) process, preap and orphan process</title><content type='html'>A defunct (or zombie) process is one whose exit status has yet to be reaped by its parent. So when a process shows as "defunct" in ps, you need to reap it. Here's how:&lt;br /&gt;&lt;br /&gt;preap(1) - force a defunct process to be reaped by its parent&lt;br /&gt;&lt;br /&gt;    Syntax: /usr/bin/preap PID&lt;br /&gt;&lt;br /&gt;So, to get rid of all zombies on our system, all we have to do is script this to reap all process marked as defunct:&lt;br /&gt;&lt;br /&gt;    /usr/bin/preap $(ps -ef | grep defunct | awk '{ print $2 }' | xargs)&lt;br /&gt;&lt;br /&gt;So, what's an orphan process then? If the parent of a defunct process happens to exit, it becomes an orphan, and is asigned PID 1 as a parent - see init(1M).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-6771255650870692067?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/6771255650870692067/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=6771255650870692067&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/6771255650870692067'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/6771255650870692067'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2010/02/defunct-zombie-process-preap-and-orphan.html' title='Defunct (Zombie) process, preap and orphan process'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-8733595678573368259</id><published>2010-02-18T22:45:00.002-05:00</published><updated>2010-02-18T23:00:51.149-05:00</updated><title type='text'>Solaris: How to know all the options of a command from process id</title><content type='html'>Question: How to find out, What all options or inputs were specified with a unix tool, from process id? &lt;br /&gt;&lt;br /&gt;Ans: Solaris supports 'pargs', which, when, run with &lt;process_id&gt;, will throw all the inputs specified with the command. Question is, why is 'ps -eaf' not sufficient. Answer lies in what 'ps -eaf' prints. 'ps -eaf' can print only limited number of outputs on one line, mostly, 80 char. What if, command + inputs were bigger/wider than 80 chars. &lt;br /&gt;&lt;br /&gt;Also, 'pargs -e &lt;process_id&gt; can also print the environment variable path.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-8733595678573368259?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/8733595678573368259/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=8733595678573368259&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/8733595678573368259'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/8733595678573368259'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2010/02/solaris-how-to-know-all-options-of.html' title='Solaris: How to know all the options of a command from process id'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-8397598331716035880</id><published>2010-02-10T20:14:00.004-05:00</published><updated>2010-02-10T20:20:59.860-05:00</updated><title type='text'>mod_bandwidth in Apache Web Servers</title><content type='html'>Q. How can we deal with the situation where we can afford only a limited amount of bandwidth but some of the service's content is large such as streaming media or large files?&lt;br /&gt;&lt;br /&gt;A. mod_bandwidth is a Apache module that enables the setting of server-side wide or per-connection bandwidth limits, based on directory, size of files, and remote IP/Domain.&lt;br /&gt;&lt;br /&gt;http://www.cohprog.com/mod_bandwidth.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-8397598331716035880?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/8397598331716035880/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=8397598331716035880&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/8397598331716035880'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/8397598331716035880'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2010/02/modbandwidth-in-apache-web-servers.html' title='mod_bandwidth in Apache Web Servers'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-8393510812536029727</id><published>2010-02-10T20:08:00.002-05:00</published><updated>2010-02-10T20:13:00.842-05:00</updated><title type='text'>Apache Load Balancing</title><content type='html'>Load balancing can help distribute load off of one Apache Web Server machine to logically and geographically distributed Apache Web Servers. &lt;br /&gt;&lt;br /&gt;Load balancing can be achieved using 'mod_backhand', Cisco LocalDirector.&lt;br /&gt;&lt;br /&gt;URL for mod_backhand:&lt;br /&gt;&lt;br /&gt;http://www.backhand.org/mod_backhand/&lt;br /&gt;&lt;br /&gt;User who are really serious about tuning their Web Servers can refer to&lt;br /&gt;'Web Performance Tuning' by Patrick Killelea (O'Reilly).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-8393510812536029727?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/8393510812536029727/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=8393510812536029727&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/8393510812536029727'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/8393510812536029727'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2010/02/apache-load-balancing.html' title='Apache Load Balancing'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-3554887026156855274</id><published>2010-02-09T10:01:00.002-05:00</published><updated>2010-02-09T10:02:26.431-05:00</updated><title type='text'>What is Taint mode in perl</title><content type='html'>http://gunther.web66.com/FAQS/taintmode.html&lt;br /&gt;&lt;br /&gt;http://perldoc.perl.org/perlsec.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-3554887026156855274?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://gunther.web66.com/FAQS/taintmode.html' title='What is Taint mode in perl'/><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/3554887026156855274/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=3554887026156855274&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/3554887026156855274'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/3554887026156855274'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2010/02/what-is-taint-mode-in-perl.html' title='What is Taint mode in perl'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-934576244011769436</id><published>2010-02-09T09:56:00.002-05:00</published><updated>2010-02-09T09:56:42.660-05:00</updated><title type='text'>Single Line Swap in Perl</title><content type='html'>($foo, $bar) = ($bar, $foo)&lt;br /&gt;&lt;br /&gt;will work just fine.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-934576244011769436?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/934576244011769436/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=934576244011769436&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/934576244011769436'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/934576244011769436'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2010/02/single-line-swap-in-perl.html' title='Single Line Swap in Perl'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-3942665706504545406</id><published>2010-02-09T09:39:00.002-05:00</published><updated>2010-02-09T09:51:47.827-05:00</updated><title type='text'>Perl 5.6 Vs 5.8</title><content type='html'>Perl 5.6.1 and Perl 5.8.x are not binary compatible (It means that user will have to download the source code in c and install it using their c development and build environment). Binary versions may be available directly from vendors such as RedHat or Ubuntu etc.&lt;br /&gt;&lt;br /&gt;There are a few important differences to consider:&lt;br /&gt;-------------------------------------------------&lt;br /&gt;&lt;br /&gt;5.6.1: &lt;br /&gt;- Smaller installation, &lt;br /&gt;- Faster in some cases, &lt;br /&gt;- Broken threading model, &lt;br /&gt;- No unicode&lt;br /&gt;&lt;br /&gt;5.8.x: &lt;br /&gt;- Larger installation, &lt;br /&gt;- Threading model mostly works,&lt;br /&gt;- Has unicode support&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Highlights In 5.8.0&lt;br /&gt;&lt;br /&gt;- Better Unicode Support:&lt;br /&gt;  Unicode support has been much enhanced since 5.6, at all levels:&lt;br /&gt;  - now supports Unicode 3.2.0 (5.6.1 supports 3.0.1)&lt;br /&gt;  - at the language (and internals) level Unicode support is&lt;br /&gt;    now more ubiquitous and robust&lt;br /&gt;  - regular expressions now work with Unicode&lt;br /&gt;  - support for non-Latin encodings (such as the various&lt;br /&gt;    Chinese/Japanese/Korean encodings) through the Encode module&lt;br /&gt;&lt;br /&gt;- New Threads Implementation:&lt;br /&gt;  A new multithreading implementation called interpreter threads,&lt;br /&gt;  or "ithreads" for short, is available, their use instead of the&lt;br /&gt;  old "5.005 threads" is strongly encouraged.  The major difference&lt;br /&gt;  is that in ithreads any data sharing must be done explicitly.&lt;br /&gt;&lt;br /&gt;- New IO Implementation:&lt;br /&gt;  the new PerlIO implementation is both a portable stdio implementation&lt;br /&gt;  (at the source code level) and a flexible new framework for richer&lt;br /&gt;  I/O behaviours&lt;br /&gt;&lt;br /&gt;- Better Numeric Accuracy:&lt;br /&gt;  previous Perls relied on vendors' string-to-number and back&lt;br /&gt;  routines which in some cases proved to be too much trust&lt;br /&gt;  leading to nonportable and wrong behaviours&lt;br /&gt;&lt;br /&gt;- 64-bit support:&lt;br /&gt;  64-bit support is now considered to be mature -- if your platform&lt;br /&gt;  supports 64-bit integers or address space, you can compile Perl to&lt;br /&gt;  use those&lt;br /&gt;&lt;br /&gt;- Safe Signals:&lt;br /&gt;  in previous versions of Perl signals could corrupt Perl's internal state&lt;br /&gt;&lt;br /&gt;- Many New Modules:&lt;br /&gt;  Digest::MD5, File::Temp, Filter::Simple, libnet, List::Util,&lt;br /&gt;  Memoize, MIME::Base64, Scalar::Util, Storable, Switch,&lt;br /&gt;  Test::More, Test::Simple, Text::Balanced, Tie::File, ...&lt;br /&gt;&lt;br /&gt;- Extensive Regression Testing:&lt;br /&gt;  Perl has now almost six times as many tests as in 5.6,&lt;br /&gt;  and the code is test built daily on several platforms&lt;br /&gt;&lt;br /&gt;Incompatibilities&lt;br /&gt;&lt;br /&gt;- BINARY INCOMPATIBLE:&lt;br /&gt;  mainly because of the PerlIO introduction, Perl 5.8 is not&lt;br /&gt;  binary compatible with any earlier Perl release, XS MODULES&lt;br /&gt;  WILL HAVE TO BE RECOMPILED!&lt;br /&gt;&lt;br /&gt;- AIX Dynaloading:&lt;br /&gt;  Perl uses now AIX dynaloading, instead of the older emulated&lt;br /&gt;  version, to be more compatible with other applications on AIX&lt;br /&gt;&lt;br /&gt;- 64-bit Platforms No Longer Use Perl Malloc:&lt;br /&gt;  the Perl malloc seems to have various problems on platforms&lt;br /&gt;  with 64-bit addressing, therefore the default in these cases&lt;br /&gt;  is to use the native malloc&lt;br /&gt;&lt;br /&gt;- Hashing Order Changed Once Again:&lt;br /&gt;  the function used in the implementation of hashes was changed&lt;br /&gt;  to a better one once again, but your code shouldn't be expecting&lt;br /&gt;  any particular key ordering&lt;br /&gt;&lt;br /&gt;- Attributes For my Now Handled At Run-Time:&lt;br /&gt;  the attributes for my() are now run-time, as opposed to compile time&lt;br /&gt;&lt;br /&gt;- REF(...) instead of SCALAR(...):&lt;br /&gt;  to be consistent with ref()'s results, references to references&lt;br /&gt;  now stringify as "REF(...)"&lt;br /&gt;&lt;br /&gt;- Unicode Model Changed (no more "use utf8", almost)&lt;br /&gt;  In Perl 5.6 "Unicodeness" was lexically scoped to the operations;&lt;br /&gt;  in Perl 5.8 "Unicodeness" is bound to the data.  The only remaining&lt;br /&gt;  use of "use utf8" is when the Perl script itself is written in the&lt;br /&gt;  UTF-8 encoding of Unicode.&lt;br /&gt;&lt;br /&gt;- VMS: Socket Extension Dynamic, IEEE fp Default on Alpha&lt;br /&gt;  - the Socket extension is now dynamic rather than static, which may&lt;br /&gt;    cause problems in really old VMS installations&lt;br /&gt;  - the IEEE floating point is now the default format in OpenVMS Alpha,&lt;br /&gt;    see README.vms for reasons and other details&lt;br /&gt;&lt;br /&gt;Nomenclature Change&lt;br /&gt;&lt;br /&gt;- What the "Camel III" book called an "IO discipline"&lt;br /&gt;  is now called an "IO layer"&lt;br /&gt;&lt;br /&gt;Deprecations&lt;br /&gt;&lt;br /&gt;- dump():&lt;br /&gt;  the functionality of the dump command is now considered obsolete&lt;br /&gt;&lt;br /&gt;- 5.005 threads are now to be considered deprecated;&lt;br /&gt;  the new "interpreter threads" implementation should be used instead&lt;br /&gt;&lt;br /&gt;- Pseudohashes:&lt;br /&gt;  the user-visible implementation of pseudohashes is going to be removed&lt;br /&gt;  and replaced with something cleaner (also, the internal implementation&lt;br /&gt;  will have to go since it was found to slow down the overall hash access)&lt;br /&gt;&lt;br /&gt;- Use of tainted data in exec LIST and system LIST:&lt;br /&gt;  now gives a warning, but will become fatal error in a future release&lt;br /&gt;&lt;br /&gt;- tr///C, tr///U:&lt;br /&gt;  the interface was found to be a mistake, pack("C0", ...) and&lt;br /&gt;  pack("U0", ...) can be used instead&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-3942665706504545406?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/3942665706504545406/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=3942665706504545406&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/3942665706504545406'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/3942665706504545406'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2010/02/perl-56-vs-58.html' title='Perl 5.6 Vs 5.8'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-1607954715656334437</id><published>2010-02-03T09:55:00.000-05:00</published><updated>2010-02-03T09:56:09.769-05:00</updated><title type='text'>Crontab - Good Reference</title><content type='html'>Crontab – Quick Reference&lt;br /&gt;&lt;br /&gt;Setting up cron jobs in Unix and Solaris&lt;br /&gt;&lt;br /&gt;cron is a unix, solaris utility that allows tasks to be automatically run in the background at regular intervals by the cron daemon. These tasks are often termed as cron jobs in unix , solaris.  Crontab (CRON TABle) is a file which contains the schedule of cron entries to be run and at specified times.&lt;br /&gt;&lt;br /&gt;This document covers following aspects of Unix cron jobs&lt;br /&gt;1. Crontab Restrictions&lt;br /&gt;2. Crontab Commands&lt;br /&gt;3. Crontab file – syntax&lt;br /&gt;4. Crontab Example&lt;br /&gt;5. Crontab Environment&lt;br /&gt;6. Disable Email&lt;br /&gt;7. Generate log file for crontab activity&lt;br /&gt;&lt;br /&gt;1. Crontab Restrictions&lt;br /&gt;You can execute crontab if your name appears in the file /usr/lib/cron/cron.allow. If that file does not exist, you can use&lt;br /&gt;crontab if your name does not appear in the file /usr/lib/cron/cron.deny.&lt;br /&gt;If only cron.deny exists and is empty, all users can use crontab. If neither file exists, only the root user can use crontab. The allow/deny files consist of one user name per line.&lt;br /&gt;&lt;br /&gt;2. Crontab Commands&lt;br /&gt;&lt;br /&gt;export EDITOR=vi ;to specify a editor to open crontab file.&lt;br /&gt;&lt;br /&gt;crontab -e    Edit your crontab file, or create one if it doesn’t already exist.&lt;br /&gt;crontab -l      Display your crontab file.&lt;br /&gt;crontab -r      Remove your crontab file.&lt;br /&gt;crontab -v      Display the last time you edited your crontab file. (This option is only available on a few systems.)&lt;br /&gt;&lt;br /&gt;3. Crontab file&lt;br /&gt;Crontab syntax :&lt;br /&gt;A crontab file has five fields for specifying day , date and time followed by the command to be run at that interval.&lt;br /&gt;&lt;br /&gt;*     *     *   *    *        command to be executed&lt;br /&gt;-     -     -   -    -&lt;br /&gt;|     |     |   |    |&lt;br /&gt;|     |     |   |    +----- day of week (0 - 6) (Sunday=0)&lt;br /&gt;|     |     |   +------- month (1 - 12)&lt;br /&gt;|     |     +--------- day of        month (1 - 31)&lt;br /&gt;|     +----------- hour (0 - 23)&lt;br /&gt;+------------- min (0 - 59)&lt;br /&gt;* in the value field above means all legal values as in braces for that column.&lt;br /&gt;The value column can have a * or a list of elements separated by commas. An element is either a number in the ranges shown above or two numbers in the range separated by a hyphen (meaning an inclusive range).&lt;br /&gt;Notes&lt;br /&gt;A. ) Repeat pattern like /2 for every 2 minutes or /10 for every 10 minutes is not supported by all operating systems. If you try to use it and crontab complains it is probably not supported.&lt;br /&gt;&lt;br /&gt;B.) The specification of days can be made in two fields: month day and weekday. If both are specified in an entry, they are cumulative meaning both of the entries will get executed .&lt;br /&gt;&lt;br /&gt;4. Crontab Example&lt;br /&gt;A line in crontab file like below removes the tmp files from /home/someuser/tmp each day at 6:30 PM.&lt;br /&gt;&lt;br /&gt;30     18     *     *     *         rm /home/someuser/tmp/*&lt;br /&gt;&lt;br /&gt;Changing the parameter values as below will cause this command to run at different time schedule below :&lt;br /&gt;&lt;br /&gt;min hour day/month month day/week  Execution time&lt;br /&gt;30 0 1 1,6,12 * – 00:30 Hrs  on 1st of Jan, June &amp; Dec.&lt;br /&gt;0 20 * 10 1-5 –8.00 PM every weekday (Mon-Fri) only in Oct.&lt;br /&gt;0 0 1,10,15 * * – midnight on 1st ,10th &amp; 15th of month&lt;br /&gt;5,10 0 10 * 1 – At 12.05,12.10 every Monday &amp; on 10th of every month&lt;br /&gt;:&lt;br /&gt;Note : If you inadvertently enter the crontab command with no argument(s), do not attempt to get out with Control-d. This removes all entries in your crontab file. Instead, exit with Control-c.&lt;br /&gt;&lt;br /&gt;5. Crontab Environment&lt;br /&gt;cron invokes the command from the user’s HOME directory with the shell, (/usr/bin/sh).&lt;br /&gt;cron supplies a default environment for every shell, defining:&lt;br /&gt;HOME=user’s-home-directory&lt;br /&gt;LOGNAME=user’s-login-id&lt;br /&gt;PATH=/usr/bin:/usr/sbin:.&lt;br /&gt;SHELL=/usr/bin/sh&lt;br /&gt;&lt;br /&gt;Users who desire to have their .profile executed must explicitly do so in the crontab entry or in a script called by the entry.&lt;br /&gt;&lt;br /&gt;6. Disable Email&lt;br /&gt;By default cron jobs sends a email to the user account executing the cronjob. If this is not needed put the following command At the end of the cron job line .&lt;br /&gt;&lt;br /&gt;&gt;/dev/null 2&gt;&amp;1&lt;br /&gt;&lt;br /&gt;7. Generate log file&lt;br /&gt;To collect the cron execution execution log in a file :&lt;br /&gt;&lt;br /&gt;30 18 * * * rm /home/someuser/tmp/* &gt; /home/someuser/cronlogs/clean_tmp_dir.log&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-1607954715656334437?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/1607954715656334437/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=1607954715656334437&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/1607954715656334437'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/1607954715656334437'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2010/02/crontab-good-reference.html' title='Crontab - Good Reference'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-165306552119037347</id><published>2010-02-03T09:54:00.001-05:00</published><updated>2010-02-03T09:54:17.624-05:00</updated><title type='text'>Crontab</title><content type='html'>&lt;a href=http://adminschoice.com/crontab-quick-reference&gt;Crontab &amp;#8211; Quick Reference&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Posted using &lt;a href="http://sharethis.com"&gt;ShareThis&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-165306552119037347?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/165306552119037347/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=165306552119037347&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/165306552119037347'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/165306552119037347'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2010/02/crontab.html' title='Crontab'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-812447954911140439</id><published>2010-01-28T21:24:00.001-05:00</published><updated>2010-01-28T21:34:04.828-05:00</updated><title type='text'>Daemon a perl process</title><content type='html'>http://search.cpan.org/~ehood/Proc-Daemon-0.03/Daemon.pm&lt;br /&gt;&lt;br /&gt;Another method:&lt;br /&gt;&lt;br /&gt;http://www.webreference.com/perl/tutorial/9/3.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-812447954911140439?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://search.cpan.org/~ehood/Proc-Daemon-0.03/Daemon.pm' title='Daemon a perl process'/><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/812447954911140439/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=812447954911140439&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/812447954911140439'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/812447954911140439'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2010/01/daemon-perl-process.html' title='Daemon a perl process'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-8533525852124605081</id><published>2009-11-25T01:17:00.001-05:00</published><updated>2009-11-25T01:21:22.416-05:00</updated><title type='text'>Creating directory tree with one - mkdir -</title><content type='html'>mkdir -p Deepak1/Deepak2/Deepak3/Deepak4&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-8533525852124605081?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/8533525852124605081/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=8533525852124605081&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/8533525852124605081'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/8533525852124605081'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2009/11/creating-directory-tree-with-one-mkdir.html' title='Creating directory tree with one - mkdir -'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-7463975981812372336</id><published>2009-11-14T00:10:00.001-05:00</published><updated>2009-11-14T00:10:46.953-05:00</updated><title type='text'>Network Authentication - Kerberos</title><content type='html'>http://web.mit.edu/kerberos/#what_is&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-7463975981812372336?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://web.mit.edu/kerberos/#what_is' title='Network Authentication - Kerberos'/><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/7463975981812372336/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=7463975981812372336&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/7463975981812372336'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/7463975981812372336'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2009/11/network-authentication-kerberos.html' title='Network Authentication - Kerberos'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-5286500687750990702</id><published>2009-11-14T00:01:00.001-05:00</published><updated>2009-11-14T00:01:35.522-05:00</updated><title type='text'>Solaris initialization Story</title><content type='html'>The normal Unix boot process has these main phases:&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;Basic hardware detection (memory, disk, keyboard, mouse etc) and executing the firmware system initialization program . In Solaris, this is called Boot PROM phase. After you turn on power of the system, the PROM displays system identification information and runs self-test diagnostics to verify the system's hardware and memory. &lt;br /&gt;&lt;br /&gt;PROM chip contains Forth OpenBoot firmware, and it is executed immediately after you turn on the system. The primary task of the OpenBoot firmware is to boot the operating system either from a mass storage device or from the network. OpenBoot contains a program called the monitor that controls the operation of the system before the kernel is available. When a system is turned on, the monitor runs a power-on self-test (POST) that checks such things as the hardware and memory on the system.  If no errors are found, the automatic boot process begins. OpenBoot contains a set of instructions that locate and start up the system's boot program and eventually start up the Unix operating system.&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;Locating and running the initial boot program (IPL or bootloader) from a predetermined location on the disk (MBR in PC). In Solaris the primary boot program, called bootblk, is loaded from its location on the boot device (usually disk) into memory.&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;Locating and starting the Unix kernel. The kernel image file to execute may be determined automatically or via input to the bootloader. In Solaris the bootblk program finds and executes the secondary boot program (called ufsboot) from the Unix file system (UFS) and loads it into memory. After the ufsboot program is loaded, the ufsboot program loads the two-part kernel.&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;The kernel initializes itself and then performs final, high-level hardware checks, loading device drivers and/or kernel modules as required.  In Solaris the kernel initializes itself and begins loading modules, using ufsboot to read the files. When the kernel has loaded enough modules to mount the root file system, it unmaps the ufsboot program and continues, using its own resources.&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;The kernel starts the init process, which in turn starts system processes (daemons) and initializes all active subsystems. When everything is ready, the system begins accepting user logins. In Solaris kernel starts the Unix operating system, mounts the necessary file systems, and runs /sbin/init to bring the system to the initdefault state specified in /etc/inittab. The kernel creates a user process and starts the /sbin/init process, which starts other processes by reading the /etc/inittab file. The /sbin/init process starts the run control (rc) scripts, which execute a series of other scripts. These scripts (/sbin/rc*) check and mount file systems, start various processes, and perform system maintenance tasks.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-5286500687750990702?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/5286500687750990702/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=5286500687750990702&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/5286500687750990702'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/5286500687750990702'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2009/11/solaris-initialization-story.html' title='Solaris initialization Story'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-4656424429848740015</id><published>2009-11-03T01:14:00.001-05:00</published><updated>2009-11-03T01:14:13.884-05:00</updated><title type='text'>KumarDeepakRanjan.doc</title><content type='html'>&lt;div class="Section1"&gt;&lt;p style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;"&gt;&lt;font size="3"&gt; &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=" margin-left:108pt; margin-right:0pt"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;b&gt;&lt;font size="2"&gt;Kumar Deepak Ranjan&lt;/font&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=" margin-left:108pt; margin-right:0pt"&gt;&lt;a href="mailto:kdranjan@yahoo.com"&gt;&lt;span style="color:#0000ff; font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;b&gt;&lt;u&gt;&lt;font size="2"&gt;kdranjan@yahoo.com&lt;/font&gt;&lt;/u&gt;&lt;/b&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style=" margin-left:108pt; margin-right:0pt"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;b&gt;&lt;font size="2"&gt;Phone - 732 803 8761&lt;/font&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=" margin-left:108pt; margin-right:0pt"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;b&gt;&lt;font size="2"&gt;(Permanent Resident)&lt;/font&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;b&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;b&gt;&lt;font size="2"&gt;SUMMARY:&lt;/font&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;h1 style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="color:#0000ff; font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;b&gt;&lt;font size="2"&gt;Software Architect with 12 years of solid hands on experience in following domain:&lt;/font&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h1&gt;&lt;ul type="disc"&gt;&lt;li&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Expert in OO Perl development in Business Intelligence &amp;amp; Web Development area.&lt;/font&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Expert in Unix/Linux (Solaris/Redhat/Ubuntu/Debian) architecture.&lt;/font&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Expert in Shell scripting using cut, grep/egrep, sed, awk, functions.&lt;/font&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Oracle PL/SQL programming,  Stored Procedures, Functions, Packages, Cursors, Triggers using Rapid SQL, PL/SQL Developer and Data Modeling tools like Erwin.&lt;/font&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;MySQL installation/administration and programming.&lt;/font&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Expert Network Programming using OO Perl FTP, Telnet, SMTP etc. modules.&lt;/font&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Expert in Data Structures such as multi-dimensional hashes, arrays, memory based DB (MLDBM, BerkeleyDB).&lt;/font&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Good exposure to Informatica 7.1, Seibel Analytics, Cognos cube base BI systems.&lt;/font&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Expert in installing/configuring any GNU based software on Unix/Linux platform.&lt;/font&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Expert in Open Source Technologies. I have recommended lots of cost cutting measures in previous companies by using Open Source products.&lt;/font&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Good knowledge in Python/Java/C/C++.&lt;/font&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Course taken for ETL tools Informatica Power Center 7.1 &amp;amp; Warehouse Builder 10g.&lt;/font&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;b&gt;&lt;font size="2"&gt;Technical Skills:&lt;/font&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;table cellspacing="0" cellpadding="0" style=" margin-left:0pt" class="zeroBorder"&gt;&lt;tr&gt;&lt;td style="vertical-align:top"&gt;&lt;p style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Operating System&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="vertical-align:top"&gt;&lt;p style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Solaris, Linux (Slackware, Ubuntu, Redhat)&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;, VxWorks, pSOS&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="vertical-align:top"&gt;&lt;p style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Programming Languages&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="vertical-align:top"&gt;&lt;p style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;OO &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Perl, Python, Shell (csh/ksh/bash) Scripting, PHP, PL/SQL, mod_perl, HTML, JavaScript, grep, sed, awk&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;.&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="vertical-align:top"&gt;&lt;p style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Databases&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="vertical-align:top"&gt;&lt;p style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Oracle 11g/10g/9i, &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;MySQL, DBM, MLDBM, BerkeleyDB, MemCache, RRD.&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="vertical-align:top"&gt;&lt;p style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Job Schedulers&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="vertical-align:top"&gt;&lt;p style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Cron, kcron, autosys (d-series), Control-M&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="vertical-align:top"&gt;&lt;p style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Version Control&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="vertical-align:top"&gt;&lt;p style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Subversion (SVN)&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;, ClearCase&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="vertical-align:top"&gt;&lt;p style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Protocol/Services&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="vertical-align:top"&gt;&lt;p style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;SNMP v1, v2c, v3, trap &amp;amp; informs, NetFlow, telnet/ssh, openSSH, openSSL, tftp, sftp, scp, rcp, rsh, UDP, TCP/IP, MIBv1 &amp;amp; MIBv2, ICMP, Ipv4 &amp;amp; Ipv6, mtop, ntop, Apache httpd, net-snmp.&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="vertical-align:top"&gt;&lt;p style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Environment&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="vertical-align:top"&gt;&lt;p style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;kde, Gnome, CDE&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;, VMWare, Windows&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="vertical-align:top"&gt;&lt;p style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Tools&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="vertical-align:top"&gt;&lt;p style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Solaris Pkgadd, pkgchk, pkgrm, swmtool, snmpd, snmptrapd, snmptt, snmpttconvertmib,  Ethereal/Wireshark, MRTG, mtop, RRDtool&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;, ObjecTime 5.2.1, Purify, Quantify, gdb/xdb,  &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Big Brother, Hobbit Monitor, Big Brother Watcher, Configure (gnu), make (gnu), nmake, tar, deb, rpm, traceroute, tcpdump, Memcache, pgpinfo, pecl, pear, Nagios.&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;p style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;"&gt;&lt;font size="3"&gt; &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;b&gt;&lt;font size="2"&gt;PROFESSIONAL EXPERIENCE:&lt;/font&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="color:#0000ff; font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;b&gt;&lt;font size="2"&gt;Univision.com&lt;/font&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#0000ff; font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;b&gt;&lt;font size="2"&gt;              &lt;/font&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#0000ff; font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;b&gt;&lt;font size="2"&gt;              &lt;/font&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#0000ff; font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;b&gt;&lt;font size="2"&gt;              &lt;/font&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#0000ff; font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;b&gt;&lt;font size="2"&gt;              &lt;/font&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#0000ff; font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;b&gt;&lt;font size="2"&gt;              &lt;/font&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#0000ff; font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;b&gt;&lt;font size="2"&gt;              &lt;/font&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#0000ff; font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;b&gt;&lt;font size="2"&gt;              &lt;/font&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#0000ff; font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;b&gt;&lt;font size="2"&gt;(July 2007 – Present)&lt;/font&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;h1 style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="color:#0000ff; font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;b&gt;&lt;font size="2"&gt;Position: Software Architect&lt;/font&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h1&gt;&lt;p style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;b&gt;&lt;font size="2"&gt;Environment:&lt;/font&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt; Solaris, Linux, Perl 5.8, Python, Oracle 9.2 &amp;amp; 10g, PL/SQL, sed, awk, gawk, openSSH, Multi-Threading, OO Perl DBI, DBD, MLDBM, BerkeleyDB, mod_perl, apache/perl, apache/ssl, Net::Telnet, Net::FTP, Net::Socket, &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Net::SSH, Net::SSL, Net::SMTP, CGI, CGI::Carp, CGI::Pretty, HTML::template, CGI::Utils, Log::Log4perl, Data::Dumper, RRDTool&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;b&gt;&lt;font size="2"&gt;Contribution:&lt;/font&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul type="disc"&gt;&lt;li&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Designed &amp;amp; developed the complete backend data FTP engine, Data cleansing engine, Data loading engine of CRM system (Business Intelligence) at Univision Mobile users. Designed and implemented a high performance FTP and loader engine into Dimension and fact table.&lt;/font&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Designed and developed a complete suite of FTP and Loader Engine for Business Intelligence group, which deals mainly with Financial &amp;amp; Marketing (Revenue, Gross Margin, Sales, Returns, Net Margins etc.) data coming to FTP server from atleast 12 countries. FTP Engine is an ultra smart, high performance engine, which makes real time decision to FTP, files which matches the business rules. Developed re-usable perl classes/libraries. Worked with flat files, Excel files, CSV files etc.&lt;/font&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Designed and developed lookup table comparison algorithms using perl hashes and smart algorithmic techniques. &lt;/font&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Designed and Developed sqlldr Engine, which feeds data to staging area (Engine could load data from more than 100 flat and CSV formatted files at once.), which ultimately is loaded to &lt;/font&gt;&lt;/span&gt;&lt;span style="color:#0000ff; font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Data Warehouse (DW)&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt; with the help of Loader Engine. Reporting tools Cognos takes the data to build power cubes for generating reports.&lt;/font&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Worked with Oracle PL/SQL, Stored Procedures, Oracle Packages, Indexes, Triggers, Cursors, MySQL DB.&lt;/font&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Designed &amp;amp; build a SQL engines ExecuteSQL, ExecuteBatchSQL, RunSQLBatch &amp;amp; RunPrjBatchSQL which executes different types of SQL packages, SQL scripts and SQL mappings in order to perform Transformation &amp;amp; Loading&lt;/font&gt;&lt;/span&gt; &lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;to take place.&lt;/font&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Designed and developed an IDOL server graphing solution using RRDtool, RRDcreate, RRDupdate, RRDgraph, RRDinfo&lt;/font&gt;&lt;/span&gt; &lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;&amp;amp; MRTG.&lt;/font&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Worked with &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;ETL&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt; data modeling tools like Informatica Power Center 7.1 &amp;amp; OWB (Oracle Warehouse Builder) 9 and 10g.&lt;/font&gt;&lt;/span&gt; &lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;I have installed Informatica Power Center 7.1 and configured it with Oracle 10g. Worked with Informatica Repository server, Mapping Designer and Workflow Manager&lt;/font&gt;&lt;/span&gt;&lt;span style="color:#0000ff; font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;.&lt;/font&gt;&lt;/span&gt; &lt;/li&gt;&lt;li&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Lead the whole evaluation &amp;amp; decision making process of selecting a job scheduler&lt;/font&gt;&lt;/span&gt; &lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;out of Autosys’s d-series, cron, kcron, Tidal Software &amp;amp; Control-M. Investigated into a case study done by &lt;/font&gt;&lt;/span&gt;&lt;span style="color:#0000ff; font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Gartner’s&lt;/font&gt;&lt;/span&gt; &lt;span style="color:#0000ff; font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Magic quadrant&lt;/font&gt;&lt;/span&gt; &lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;to evaluate Job Scheduling product.&lt;/font&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Developed &lt;/font&gt;&lt;/span&gt;&lt;span style="color:#0000ff; font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;batch scripts&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt; in k-shell &amp;amp; bash, which implements various dependencies between each other and configured it with automated batch processing tool &lt;/font&gt;&lt;/span&gt;&lt;span style="color:#0000ff; font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Control-M.&lt;/font&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Worked with K-shell &amp;amp; bash shell and used grep, egrep, sed &amp;amp; awk for file manipulation&lt;/font&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Installed, Configured &amp;amp; used Apache 1.2 &amp;amp; 2.0&lt;/font&gt;&lt;/span&gt; &lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;web server.&lt;/font&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Worked with tools/protocols such as SNMP v1, v2c, v3, trap &amp;amp; informs, telnet/ssh, openSSH, openSSL, tftp, sftp, scp, rcp, rsh, UDP, TCP/IP, ICMP, Ipv4 &amp;amp; Ipv6, mtop, ntop, Apache Web Server, tar, deb, rpm, pkgadd, pkgrm, pkgchk,swmtool&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;.&lt;/font&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Worked with &lt;/font&gt;&lt;/span&gt;&lt;span style="color:#0000ff; font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;linux (Ubuntu 7.04 &amp;amp; Gutsy Gibon 7.10), Slackware &amp;amp; Redhat 4/5/9 as specialist.&lt;/font&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Sound understanding of Linux/Unix kernel, different file systems.&lt;/font&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;              &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;              &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;              &lt;/font&gt;&lt;/span&gt; &lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;              &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;              &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;              &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;              &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;              &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;                    &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="color:#0000ff; font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;b&gt;&lt;font size="2"&gt;ShoreGroup, Inc &lt;/font&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#0000ff; font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;b&gt;&lt;font size="2"&gt;              &lt;/font&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#0000ff; font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;b&gt;&lt;font size="2"&gt;              &lt;/font&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#0000ff; font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;b&gt;&lt;font size="2"&gt;              &lt;/font&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#0000ff; font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;b&gt;&lt;font size="2"&gt;              &lt;/font&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#0000ff; font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;b&gt;&lt;font size="2"&gt;              &lt;/font&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#0000ff; font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;b&gt;&lt;font size="2"&gt;(Jan 2006 – June 2007)&lt;/font&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="color:#0000ff; font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;b&gt;&lt;font size="2"&gt;Position: Senior Software Developer&lt;/font&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;ShoreGroup specializes in &lt;/font&gt;&lt;/span&gt;&lt;span style="color:#0000ff; font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Systems &amp;amp; Network Management&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt; domain. In 2001, ShoreGroup launched a subscription-based product, &lt;/font&gt;&lt;/span&gt;&lt;span style="color:#0000ff; font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;CaseSentry&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;. The &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;CaseSentry&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt; consists of different suites of products that serve the needs of IT staff, from Network Engineers and System Administrators to the CIO/CTO of the company.&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;b&gt;&lt;font size="2"&gt;Environment:&lt;/font&gt;&lt;/b&gt;&lt;/span&gt; &lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Linux, Solaris, Perl (&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;DBI, DBD, MLDBM, Net::FTP, Net::Telnet, Net::Socket, Net::SSH, Net::SSL&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;, sed, gawk, HTML, JavaScript, TCP/IP, UDP, SNMP, IPv4, Data Structures, Socket, POSIX Multi-threading.&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;b&gt;&lt;font size="2"&gt;Contribution:&lt;/font&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul type="disc"&gt;&lt;li&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Developed &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Data Collection Agent&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt; on Linux, C, C++, Data Structures and Sockets, multi-threaded programming, make, Makefile, OO Perl, JavaScript and MySQL &amp;amp; Sybase.&lt;/font&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Developed a &lt;/font&gt;&lt;/span&gt;&lt;span style="color:#0000ff; font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Decision Engine&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;, in order to process SNMP traps/informs that comes in the systems DB table. DE processes the trap/inform and keeps track of the state in state machine and update status, which in turn, updates case/ticket status. Implementation involved Linux, C/C++, Perl, Data Structures and Sockets in a multi-threaded environment.&lt;/font&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Worked with&lt;/font&gt;&lt;/span&gt; &lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;sed, grep and awk/gawk for file manipulation and scripting.&lt;/font&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Worked in Perl scripting and development for fetching data from DB and messaging the data. &lt;/font&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Worked with Virtual Memory and other non conventional Database like MLDBM and BerkleyDB.&lt;/font&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Extensively supported &lt;/font&gt;&lt;/span&gt;&lt;span style="color:#0000ff; font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;IPCC/ICM&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt; 6.xx and ICM 7.0 SNMP trap management using &lt;/font&gt;&lt;/span&gt;&lt;span style="color:#0000ff; font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;SNMP (v1, v2c and v3&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;). This feature includes implementation of &lt;/font&gt;&lt;/span&gt;&lt;span style="color:#0000ff; font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;IPv6&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt; and is &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;deployed at more than 20 customers including the &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;ING Direct, Axis Capital, Capital One, and AXA Equitable, IRS, Verizon Wireless.&lt;/font&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Installed and used ‘&lt;/font&gt;&lt;/span&gt;&lt;span style="color:#0000ff; font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;TKMIB&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;’, a MIB browser that is a GNU based tool.  Also worked with at least 100 MIBs from vendors like &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Cisco, Lucent, Alcatel, Juniper, Geotel, IBM, Dell, HP, Compaq etc&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;. &lt;/font&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Configured SNMP (v2c &amp;amp; v3) for Cisco IOS, CatOS, VPNs, and Firewalls.&lt;/font&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Worked with various SNMP based tools like snmpd, snmptrapd, snmptt, and snmptthandler.&lt;/font&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Designed and developed a web based &lt;/font&gt;&lt;/span&gt;&lt;span style="color:#0000ff; font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;SNMP trap manager&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt; tool that manages SNMP traps with the help of state machines.&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;  C&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;orrelated traps are fed to a Decision Engine for reporting to the support team through emails or pagers. This tool requires installation of the snmpd, snmptrapd, snmptthandler, snmpt, convertmib and snmptt tools.&lt;/font&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Installed, set up and used the &lt;/font&gt;&lt;/span&gt;&lt;span style="color:#0000ff; font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Subversion&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt; environment for version control.&lt;/font&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Installed, created and designed a MySQL database, prepared table schemas, indexes. Wrote scripts to take database backups using &lt;/font&gt;&lt;/span&gt;&lt;span style="color:#0000ff; font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;mysqldump&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;, perl &amp;amp; cron.&lt;/font&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Developed a System, Application &amp;amp; Network monitoring product for &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;ING Direct&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt; using open source &amp;#39;Big Brother Monitor&amp;#39; (now owned by Quest Software, Inc), Hobbit Monitor &amp;amp; Big Brother Watcher.&lt;/font&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Installed/Configured &lt;/font&gt;&lt;/span&gt;&lt;span style="color:#0000ff; font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;SFTP, TFTP&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt; and a GNU based tool called &lt;/font&gt;&lt;/span&gt;&lt;span style="color:#0000ff; font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Pancho/Panchito &amp;amp; Rancid&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt; to retrieve and push configuration files for backup purposes for devices like routers, switches, VPNs, firewalls, printers, etc.&lt;/font&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Installed/Configured APR (Apache Portable Runtime) and APR-UTIL to support installation of &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Subversion&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;. Subversion&amp;#39;s installation is dependent on APR and APR-UTIL.&lt;/font&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Installed &lt;/font&gt;&lt;/span&gt;&lt;span style="color:#0000ff; font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;MTOP&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt; to&lt;/font&gt;&lt;/span&gt; &lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;monitor queries dynamically and track timing and performance of the queries in order to better optimize them.&lt;/font&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;              &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;              &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;              &lt;/font&gt;&lt;/span&gt; &lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;              &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;              &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;              &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;              &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;              &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;                    &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="color:#0000ff; font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;b&gt;&lt;font size="2"&gt;AT&amp;amp;T/IBM Corporation&lt;/font&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#0000ff; font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;b&gt;&lt;font size="2"&gt;              &lt;/font&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#0000ff; font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;b&gt;&lt;font size="2"&gt;              &lt;/font&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#0000ff; font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;b&gt;&lt;font size="2"&gt;              &lt;/font&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#0000ff; font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;b&gt;&lt;font size="2"&gt;              &lt;/font&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#0000ff; font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;b&gt;&lt;font size="2"&gt;              &lt;/font&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#0000ff; font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;b&gt;&lt;font size="2"&gt;(Aug 2001 – Dec 2005)&lt;/font&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="color:#0000ff; font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;b&gt;&lt;font size="2"&gt;Position: Senior Software Engineer&lt;/font&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;b&gt;&lt;font size="2"&gt;Contribution:&lt;/font&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul type="disc"&gt;&lt;li&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Designed and developed a 5E simulator from scratch and supported the command response and automatic alarm systems in C, C++, Perl 5.8 (DBI, DBD, MLDBM, Net::FTP, NET::Telnet, Net::Socket etc), Data Structures, Multi-threading, Sockets, MLDBM, Berkley DB and Oracle on the HP-UX platform.&lt;/font&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Designed and developed a DMS-100 simulator from scratch and supported the command response and automatic alarm systems in C++, Perl 5.8, Multi-threading, Sockets, MLDBM, Berkley DB and Oracle on the HP-UX platform.&lt;/font&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Prepared the design and architecture for 15 interfaces (DBOR, FC, RUBY-CC, and RUBY-CORE) with different communication protocols that CTP will interact with. These interfaces use XML, DMQ protocol, &lt;/font&gt;&lt;/span&gt;&lt;span style="color:#0000ff; font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;CORBA, and LibE&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;.&lt;/font&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Worked with Oracle 9i PL/SQL programming language.&lt;/font&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Designed and developed 13 interface simulators for CTP so that the tester would not have to depend on the availability of various interfaces. Used &lt;/font&gt;&lt;/span&gt;&lt;span style="color:#0000ff; font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Unix, Perl, C/C++, and SQL queries&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt; extensively in this effort.&lt;/font&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Designed and coded load balancer and performance analyzer tools in Unix and Perl that generated statistical reports for successful / failed tests conducted by a lab technician over a 24 hour period.&lt;/font&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Used K-shell and bash shell scripting extensively in the projects.&lt;/font&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Worked with OO Perl Development using Perl 5.6. Worked with DBD, DBI, DBM, MLDBM and BerkeleyDB.&lt;/font&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Resolved customer problems within 24 hours of the initial call depending on the severity.&lt;/font&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Managed resources (6 machines) and allocated them between teams. Monitored the load and build schedule.   &lt;/font&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Created test plan and test case scenarios for optimal utilization of the application.&lt;/font&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="color:#0000ff; font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;b&gt;&lt;font size="2"&gt;Lucent Technology &lt;/font&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#0000ff; font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;b&gt;&lt;font size="2"&gt;              &lt;/font&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#0000ff; font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;b&gt;&lt;font size="2"&gt;              &lt;/font&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#0000ff; font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;b&gt;&lt;font size="2"&gt;              &lt;/font&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#0000ff; font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;b&gt;&lt;font size="2"&gt;              &lt;/font&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#0000ff; font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;b&gt;&lt;font size="2"&gt;(April 2000 – July 2001)&lt;/font&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="color:#0000ff; font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;b&gt;&lt;font size="2"&gt;Position: Software Developer&lt;/font&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Lambda Xtreme &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;is a third generation fiber optic transmission system that used optical multiplexing, optical amplification (both erbium and Raman), and optical de-multiplexing to provide high capacity, long haul reach, and ultra long haul DWDM transmission over TW-RS and most LEAF fiber types. The ultra long haul application has 10 GB/s channels that offer a 1.28 Tb/s capacity for a 4000km reach system.&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;b&gt;&lt;font size="2"&gt;Contribution:&lt;/font&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul type="disc"&gt;&lt;li&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Analyzed requirement, design and unit test specification documents for various &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Xtreme&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt; features. Made a tremendous contribution in the Optical Connection Directory (OPTC).&lt;/font&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Patent Description: Method for automatically provisioning a network element.   Designed and coded the Optc and Channel Map in &lt;/font&gt;&lt;/span&gt;&lt;span style="color:#0000ff; font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;C++ using ObjecTime 5.1&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;. [&lt;/font&gt;&lt;/span&gt;&lt;span style="color:#0000ff; font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Google &amp;#39;Patent Search&amp;#39; KeyWord: 6920288].&lt;/font&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Developed backend TL1 commands that worked between the GUI and Network Element. &lt;/font&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Prepared the test bed in a lab environment for simulating reaches of 500 miles and longer.&lt;/font&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Helped the system integration team load the software into field boxes and perform tests in real world scenarios.&lt;/font&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Managed software configurations using &lt;/font&gt;&lt;/span&gt;&lt;span style="color:#0000ff; font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;ClearCase &amp;amp; DDTS&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;.&lt;/font&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Installed a Cisco router (2600) in the Lucent Laboratory for the system integration team.&lt;/font&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="color:#0000ff; font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;b&gt;&lt;font size="2"&gt;TCS-Nortel&lt;/font&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#0000ff; font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;b&gt;&lt;font size="2"&gt;              &lt;/font&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#0000ff; font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;b&gt;&lt;font size="2"&gt;              &lt;/font&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#0000ff; font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;b&gt;&lt;font size="2"&gt;              &lt;/font&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#0000ff; font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;b&gt;&lt;font size="2"&gt;              &lt;/font&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#0000ff; font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;b&gt;&lt;font size="2"&gt;              &lt;/font&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#0000ff; font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;b&gt;&lt;font size="2"&gt;              &lt;/font&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#0000ff; font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;b&gt;&lt;font size="2"&gt;              &lt;/font&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#0000ff; font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;b&gt;&lt;font size="2"&gt;         (Sept 1997 – March 2000)&lt;/font&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="color:#0000ff; font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;b&gt;&lt;font size="2"&gt;Position: Assistant System Analyst&lt;/font&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;b&gt;&lt;font size="2"&gt;Projects: &lt;/font&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;b&gt;&lt;font size="2"&gt;              &lt;/font&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Communication Assistance for Law Enforcement Agency (CALEA):&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt; This feature provides the packet interception facility for ISDN packet calls. All the packets that are transmitted and received by the suspect are intercepted, copied and delivered to the Law Enforcement Agency&amp;#39;s DTE. This feature was developed for the &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;FBI, USA&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;. (Please check out &lt;/font&gt;&lt;/span&gt;&lt;a href="http://www.FBI.gov/"&gt;&lt;span style="color:#0000ff; font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;u&gt;&lt;font size="2"&gt;www.FBI.gov&lt;/font&gt;&lt;/u&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt; for a brief description of this feature)&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;X.25 User Loop back (Echo Station): &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;The aim of this feature was to provide the end-user (the ISDN subscriber) with the ability to verify the communication link from his DTE to the switch by dialing a directory number provided by the Telco (Telephone Operating Companies).&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;b&gt;&lt;font size="2"&gt;Contribution:&lt;/font&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Analyzed requirements and software design for various projects based on &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;ISDN BRI packet switching in layer 2 and layer 3 (XLIU Call Processing &amp;amp; Provisioning)&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;.&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Designed, prototyped and coded Layer 3 software for DMS-100 switches.&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Prepared system test case documentation for multiple features.&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Participated in a team of six (6) while learning the software life cycle (requirements analysis, high level design, low level design, prototyping, coding and testing).&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;EDUCATION:&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;B.E. (Electrical Engineering)&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;              &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;              &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;National Institute of Technology (REC), Jamshedpur, India&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;b&gt;&lt;font size="2"&gt;Accomplishments&lt;/font&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;:&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul type="disc"&gt;&lt;li&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Brain Bench Certified (2008) OO Perl 5.8 developer&lt;/font&gt;&lt;/span&gt;&lt;span style="color:#0000ff; font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;.&lt;/font&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul type="disc"&gt;&lt;li&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Ranked top 1&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;sup&gt;&lt;font size="1"&gt;%&lt;/font&gt;&lt;/sup&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt; in the National Physics competition conducted by I.I.T, Kanpur, India.&lt;/font&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Worked on implementing &lt;/font&gt;&lt;/span&gt;&lt;span style="color:#0000ff; font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;b&gt;&lt;i&gt;&lt;font size="2"&gt;Patent IDS #&lt;/font&gt;&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#0000ff; font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;b&gt;&lt;font size="2"&gt;6920288&lt;/font&gt;&lt;/b&gt;&lt;/span&gt; &lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;at Alcatel-Lucent.&lt;/font&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt;Got recommendations from managers and directors at previously held positions.&lt;/font&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;"&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=" margin-left:0pt; margin-right:0pt"&gt;&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;"&gt;&lt;font size="3"&gt; &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-4656424429848740015?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/4656424429848740015/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=4656424429848740015&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/4656424429848740015'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/4656424429848740015'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2009/11/kumardeepakranjandoc.html' title='KumarDeepakRanjan.doc'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-5614766610075742887</id><published>2009-10-28T00:48:00.000-04:00</published><updated>2009-10-28T00:49:27.528-04:00</updated><title type='text'>Embedding Perl in HTML with Mason</title><content type='html'>This book is available for free @_ http://www.masonbook.com/book/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-5614766610075742887?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.masonbook.com/book/' title='Embedding Perl in HTML with Mason'/><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/5614766610075742887/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=5614766610075742887&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/5614766610075742887'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/5614766610075742887'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2009/10/embedding-perl-in-html-with-mason.html' title='Embedding Perl in HTML with Mason'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-1457992688225671465</id><published>2009-10-20T00:37:00.000-04:00</published><updated>2009-10-20T00:38:01.653-04:00</updated><title type='text'>Perl Inheritance Simplified</title><content type='html'>http://perl.active-venture.com/pod/perltoot-inheritance.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-1457992688225671465?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://perl.active-venture.com/pod/perltoot-inheritance.html' title='Perl Inheritance Simplified'/><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/1457992688225671465/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=1457992688225671465&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/1457992688225671465'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/1457992688225671465'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2009/10/perl-inheritance-simplified.html' title='Perl Inheritance Simplified'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-1426402166264494158</id><published>2009-10-09T11:11:00.002-04:00</published><updated>2009-10-09T11:14:59.491-04:00</updated><title type='text'>Perl Special Literals list</title><content type='html'>__FILE__ = represent the current filename&lt;br /&gt;__LINE__ = line number&lt;br /&gt;__PACKAGE__ package name&lt;br /&gt;&lt;br /&gt;If there is no current package (due to an empty package; directive), &lt;br /&gt;__PACKAGE__ is the undefined value. &lt;br /&gt;&lt;br /&gt;The two control characters ^D and ^Z, and the tokens __END__ and __DATA__ may be used to indicate the logical end of the script before the actual end of file. Any following text is ignored.&lt;br /&gt;&lt;br /&gt;Text after __DATA__ may be read via the filehandle PACKNAME::DATA, where PACKNAME is the package that was current when the __DATA__ token was encountered. The filehandle is left open pointing to the contents after __DATA__. It is the program's responsibility to close DATA when it is done reading from it. For compatibility with older scripts written before __DATA__ was introduced, __END__ behaves like __DATA__ in the top level script (but not in files loaded with require or do) and leaves the remaining contents of the file accessible via main::DATA.&lt;br /&gt;&lt;br /&gt;See SelfLoader for more description of __DATA__, and an example of its use. Note that you cannot read from the DATA filehandle in a BEGIN block: the BEGIN block is executed as soon as it is seen (during compilation), at which point the corresponding __DATA__ (or __END__) token has not yet been seen&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-1426402166264494158?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://search.cpan.org/~dapm/perl-5.10.1/pod/perldata.pod' title='Perl Special Literals list'/><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/1426402166264494158/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=1426402166264494158&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/1426402166264494158'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/1426402166264494158'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2009/10/perl-special-literals-list.html' title='Perl Special Literals list'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-3421073955259855348</id><published>2009-10-02T00:14:00.002-04:00</published><updated>2009-10-02T00:17:44.404-04:00</updated><title type='text'>How to determine Total memory (Total RAM, Used RAM, Free RAM) on Unix/Linux</title><content type='html'>'free' tool prints pretty much everything.&lt;br /&gt;&lt;br /&gt;       total  used   free    shared  buffers cached&lt;br /&gt;Mem:   514592 274136 240456  0       20228   134104&lt;br /&gt;-/+ buffers/cache: 119804 394788&lt;br /&gt;Swap: 1052216 0 1052216&lt;br /&gt;&lt;br /&gt;or &lt;br /&gt;&lt;br /&gt;cat /etc/meminfo - has all the information.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-3421073955259855348?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.linuxquestions.org/questions/linux-hardware-18/determine-physical-ram-size-213382/' title='How to determine Total memory (Total RAM, Used RAM, Free RAM) on Unix/Linux'/><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/3421073955259855348/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=3421073955259855348&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/3421073955259855348'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/3421073955259855348'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2009/10/how-to-determine-total-memory-total-ram.html' title='How to determine Total memory (Total RAM, Used RAM, Free RAM) on Unix/Linux'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-143371679674654569</id><published>2009-10-01T23:41:00.002-04:00</published><updated>2009-10-01T23:51:59.465-04:00</updated><title type='text'>How to find out which process is listening upon a port</title><content type='html'>For standard processes, Services names can be seen in /etc/services files associated with port numbers. This is pretty much standard TCP/IP.&lt;br /&gt;&lt;br /&gt;For non-standard user defined services,&lt;br /&gt;&lt;br /&gt;lsof -i :port_number&lt;br /&gt;&lt;br /&gt;For example: &lt;br /&gt;&lt;br /&gt;So to see which process is listening upon port 80 we can run:&lt;br /&gt;&lt;br /&gt;root@mystery:~# lsof -i :80&lt;br /&gt;This gives us the following output:&lt;br /&gt;&lt;br /&gt;COMMAND   PID     USER   FD   TYPE   DEVICE SIZE NODE NAME&lt;br /&gt;apache2 10437     root    3u  IPv6 22890556       TCP *:www (LISTEN)&lt;br /&gt;apache2 10438 www-data    3u  IPv6 22890556       TCP *:www (LISTEN)&lt;br /&gt;apache2 10439 www-data    3u  IPv6 22890556       TCP *:www (LISTEN)&lt;br /&gt;apache2 10440 www-data    3u  IPv6 22890556       TCP *:www (LISTEN)&lt;br /&gt;apache2 10441 www-data    3u  IPv6 22890556       TCP *:www (LISTEN)&lt;br /&gt;apache2 10442 www-data    3u  IPv6 22890556       TCP *:www (LISTEN)&lt;br /&gt;apache2 25966 www-data    3u  IPv6 22890556       TCP *:www (LISTEN)&lt;br /&gt;apache2 25968 www-data    3u  IPv6 22890556       TCP *:www (LISTEN)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-143371679674654569?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/143371679674654569/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=143371679674654569&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/143371679674654569'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/143371679674654569'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2009/10/how-to-find-out-which-process-is.html' title='How to find out which process is listening upon a port'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-2029958400213899064</id><published>2009-05-14T13:44:00.001-04:00</published><updated>2009-05-14T13:44:43.866-04:00</updated><title type='text'>Best practices for a high performance Perl program</title><content type='html'>http://makepp.sourceforge.net/1.50/perl_performance.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-2029958400213899064?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://makepp.sourceforge.net/1.50/perl_performance.html' title='Best practices for a high performance Perl program'/><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/2029958400213899064/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=2029958400213899064&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/2029958400213899064'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/2029958400213899064'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2009/05/best-practices-for-high-performance.html' title='Best practices for a high performance Perl program'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-3666981805344519425</id><published>2009-03-04T13:49:00.002-05:00</published><updated>2009-03-04T13:55:22.506-05:00</updated><title type='text'>Validating data types in PERL</title><content type='html'>Since perl data types are very typeless and depends upon where they are used. There are some situations, when this design is awkward.&lt;br /&gt;&lt;br /&gt;To validate data types, &lt;br /&gt;&lt;br /&gt;Data::Types module can be installed and used. &lt;br /&gt;&lt;br /&gt;However if you dont want to install, here are few quickies:&lt;br /&gt;&lt;br /&gt;- To Check&lt;br /&gt;&lt;br /&gt;% An Integer, Use regex /^[+-]?\d+$/ and ofcourse, not matched ones are non-intger&lt;br /&gt;% A Decimal, /^[+-]?(?:\d+(?:\.\d*)?|\.\d+)$/ &lt;br /&gt;% Whole number, /^\d+$/&lt;br /&gt;% Float number, /^([+-]?)(?=\d|\.\d)\d*(\.\d*)?([Ee]([+-]?\d+))?$/&lt;br /&gt;%&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-3666981805344519425?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/3666981805344519425/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=3666981805344519425&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/3666981805344519425'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/3666981805344519425'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2009/03/validating-data-types-in-perl.html' title='Validating data types in PERL'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-8776994862527667042</id><published>2009-02-25T11:03:00.000-05:00</published><updated>2009-02-25T11:04:35.679-05:00</updated><title type='text'>Python Advance books</title><content type='html'>A Good link for description of these books.&lt;br /&gt;&lt;br /&gt;http://wiki.python.org/moin/AdvancedBooks&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-8776994862527667042?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/8776994862527667042/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=8776994862527667042&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/8776994862527667042'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/8776994862527667042'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2009/02/python-advance-books.html' title='Python Advance books'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-2499679344577614321</id><published>2008-11-24T12:54:00.002-05:00</published><updated>2008-11-24T12:56:12.916-05:00</updated><title type='text'>How to group UNIX Solaris, Linux commands</title><content type='html'>Simply group them in a small bracket and separate them by semi colon (;)&lt;br /&gt;&lt;br /&gt;123-bash: (ls -1;pwd;cd /tmp/curl)&lt;br /&gt;&lt;br /&gt;It will list the files in CWD first, print the directory you are in, cd to /tmp/curl&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-2499679344577614321?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/2499679344577614321/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=2499679344577614321&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/2499679344577614321'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/2499679344577614321'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2008/11/how-to-group-unix-solaris-linux.html' title='How to group UNIX Solaris, Linux commands'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-2398237544710336339</id><published>2008-11-18T15:22:00.002-05:00</published><updated>2008-11-18T15:25:29.610-05:00</updated><title type='text'>How to get user input in PERL</title><content type='html'>It's simple - &lt;br /&gt;&lt;br /&gt;- The angle bracket operator to read from STDIN (see I/O operators in perlop) &lt;br /&gt;- If entering 'Y' or 'N' - make sure to use 'chomp' to cut the new line character.&lt;br /&gt;- @ARGV - the array that holds parameters from the command line (see perlvar) &lt;br /&gt;- Getopt::Long or Getopt::Std - for more powerful handling of command line arguments &lt;br /&gt;- uc - to uppercase an expression &lt;br /&gt;- ucfirst - to uppercase the first letter of an expression &lt;br /&gt;&lt;br /&gt;Later in your code, you can compare by using 'eq' or 'ne' or '==' or '!=' or&lt;br /&gt;pattern matching =~ m///, thingy to move on to do what you want.....&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-2398237544710336339?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/2398237544710336339/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=2398237544710336339&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/2398237544710336339'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/2398237544710336339'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2008/11/how-to-get-user-input-in-perl.html' title='How to get user input in PERL'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-8705316853674891893</id><published>2008-11-14T16:26:00.002-05:00</published><updated>2008-11-14T16:27:58.352-05:00</updated><title type='text'>Solaris Kernel Modules operations</title><content type='html'>Kernel Modules:&lt;br /&gt;---------------&lt;br /&gt;&lt;br /&gt;modinfo   : prints out information on all currently loaded kernel modules. &lt;br /&gt;modload   : loads kernel modules. &lt;br /&gt;modunload : unloads kernel modules. &lt;br /&gt;forceload : in the /etc/system file loads a module at boot time.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-8705316853674891893?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/8705316853674891893/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=8705316853674891893&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/8705316853674891893'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/8705316853674891893'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2008/11/solaris-kernel-modules-operations.html' title='Solaris Kernel Modules operations'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-8589702342161350935</id><published>2008-11-10T13:53:00.001-05:00</published><updated>2008-11-10T14:01:18.912-05:00</updated><title type='text'>Passing a DB handler to an user defined function</title><content type='html'>It is pretty simply. Pass it like an ordinary variable.&lt;br /&gt;&lt;br /&gt;Example here:&lt;br /&gt;&lt;br /&gt;#!/opt/local/bin/perl&lt;br /&gt;&lt;br /&gt;use db_connect;&lt;br /&gt;use warnings;&lt;br /&gt;use strict;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# More efficient than ./test_connection.pl because $0 makes only one DB connection&lt;br /&gt;&lt;br /&gt;my $obj = db_connect-&gt;new();&lt;br /&gt;my $db  = $obj-&gt;connect_qora007_mir("qora007_mir");&lt;br /&gt;&lt;br /&gt;print "                                 \n";&lt;br /&gt;&amp;checkConnectionMIR_qora007($db);&lt;br /&gt;&amp;checkConnectionCIR_qora007($db);&lt;br /&gt;print "                                 \n";&lt;br /&gt;&lt;br /&gt;$db-&gt;disconnect();&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;sub checkConnectionMIR_qora007($)&lt;br /&gt;{&lt;br /&gt;        my $dbh = shift;&lt;br /&gt;&lt;br /&gt;        my $sql;&lt;br /&gt;        my $sth;&lt;br /&gt;        my $str;&lt;br /&gt;        my @row;&lt;br /&gt;&lt;br /&gt;        $sql = "select sysdate from dual";&lt;br /&gt;&lt;br /&gt;        $sth = $dbh-&gt;prepare($sql);&lt;br /&gt;        $sth-&gt;execute;&lt;br /&gt;&lt;br /&gt;        while((@row) = $sth-&gt;fetchrow_array())&lt;br /&gt;        {&lt;br /&gt;                $str =  join(" " , map {defined $_ ? $_ : "(null)"} @row);&lt;br /&gt;                print "INSTANCE: $str\n";&lt;br /&gt;        }&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-8589702342161350935?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/8589702342161350935/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=8589702342161350935&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/8589702342161350935'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/8589702342161350935'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2008/11/passing-db-handler-to-user-defined.html' title='Passing a DB handler to an user defined function'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-1487416931396921475</id><published>2008-11-06T15:27:00.002-05:00</published><updated>2008-11-06T15:30:31.403-05:00</updated><title type='text'>PERL - IF ELSE statement shortcuts</title><content type='html'>I will give an example of how to write IF ELSE statement in short. This will be simply useful to read others code if you know that this can also be an option. This kind of code normally comes from seasoned PERL programers.&lt;br /&gt;&lt;br /&gt;#!/opt/local/bin/perl&lt;br /&gt;&lt;br /&gt;use warnings;&lt;br /&gt;use strict;&lt;br /&gt;&lt;br /&gt;print &amp;max(5, 3);&lt;br /&gt;print &amp;max(7, 10);&lt;br /&gt;&lt;br /&gt;sub max (@)&lt;br /&gt;{&lt;br /&gt;        my ($x, $y) = @_;&lt;br /&gt;        return $x &gt; $y ? $x : $y;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Explanation: In function max, 2nd lines means that&lt;br /&gt;&lt;br /&gt;if $x is greater than $y, return $x or return $y. That's it.....&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-1487416931396921475?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/1487416931396921475/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=1487416931396921475&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/1487416931396921475'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/1487416931396921475'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2008/11/perl-if-else-statement-shortcuts.html' title='PERL - IF ELSE statement shortcuts'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-252341486095261929</id><published>2008-11-05T11:40:00.001-05:00</published><updated>2008-11-05T11:40:37.074-05:00</updated><title type='text'>How to open a write into an already zipped file in perl:</title><content type='html'>How to open a write into an already zipped file in perl:&lt;br /&gt;--------------------------------------------------------&lt;br /&gt;&lt;br /&gt;my $temp_file = "file_name.gz";&lt;br /&gt;open(HWRITE, "|gzip -c &gt; $temp_file") or die "cannot open file $temp_file\n";&lt;br /&gt;print HWRITE "Something_1|Something_1|Something_1|Something_1\n" &lt;br /&gt;              or die "File write failed : $!\n";&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-252341486095261929?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/252341486095261929/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=252341486095261929&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/252341486095261929'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/252341486095261929'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2008/11/how-to-open-write-into-already-zipped.html' title='How to open a write into an already zipped file in perl:'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-2120496172372738931</id><published>2008-10-10T13:42:00.002-04:00</published><updated>2008-10-10T13:46:13.606-04:00</updated><title type='text'>How to pass an object in a function</title><content type='html'>It is really simple concept but can confuse novice to perl. An object can be passed to a function just like an ordinary variable. File handler need special syntax to be&lt;br /&gt;passed inside a function but not an object.&lt;br /&gt;&lt;br /&gt;Follow this simple example here. Code is incomplete but is tested when complete. &lt;br /&gt;&lt;br /&gt;Here it goes:&lt;br /&gt;&lt;br /&gt;#!/opt/local/bin/perl&lt;br /&gt;&lt;br /&gt;use lib "$ENV{HOME}/perl/lib";&lt;br /&gt;use convert_time;&lt;br /&gt;use dir_pool;&lt;br /&gt;use db_connect;&lt;br /&gt;use warnings;&lt;br /&gt;use strict;&lt;br /&gt;&lt;br /&gt;my $obj = db_connect-&gt;new();&lt;br /&gt;&lt;br /&gt;&amp;doConnectMIR($obj);&lt;br /&gt;print "                 \n";&lt;br /&gt;&amp;doConnectCIR($obj);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;sub doConnectMIR($)&lt;br /&gt;{&lt;br /&gt;        my $tObj = shift;&lt;br /&gt;&lt;br /&gt;        my $dbh;&lt;br /&gt;        my $sql;&lt;br /&gt;        my $sth;&lt;br /&gt;        my $str;&lt;br /&gt;        my @row;&lt;br /&gt;&lt;br /&gt;        $tObj = db_connect-&gt;new();&lt;br /&gt;        $dbh = $obj-&gt;connect_qora007_mir("qora007_mir");&lt;br /&gt;&lt;br /&gt;        $sql = "select sysdate from dual";&lt;br /&gt;&lt;br /&gt;        $sth = $dbh-&gt;prepare($sql);&lt;br /&gt;        $sth-&gt;execute;&lt;br /&gt;&lt;br /&gt;        while((@row) = $sth-&gt;fetchrow_array())&lt;br /&gt;        {&lt;br /&gt;                $str =  join(" " , map {defined $_ ? $_ : "(null)"} @row);&lt;br /&gt;                print "INSTANCE: $str\n";&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;more code follows.....but concept is clear.....&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-2120496172372738931?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/2120496172372738931/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=2120496172372738931&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/2120496172372738931'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/2120496172372738931'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2008/10/how-to-pass-object-in-function.html' title='How to pass an object in a function'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-8780554698182584202</id><published>2008-08-20T10:30:00.001-04:00</published><updated>2008-08-20T10:31:08.359-04:00</updated><title type='text'>Typical Oracle profile file on Unix</title><content type='html'># .oracle10g&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;### Oracle specific setup&lt;br /&gt;ORACLE_HOME=/opt/oracle10g/instantclient_10_2&lt;br /&gt;TNS_ADMIN=/opt/oracle10g/instantclient_10_2&lt;br /&gt;NLS_LANG=_.WE8ISO8859P1&lt;br /&gt;&lt;br /&gt;export ORACLE_HOME TNS_ADMIN NLS_LANG&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;LD_LIBRARY_PATH=$ORACLE_HOME:$LD_LIBRARY_PATH&lt;br /&gt;export LD_LIBRARY_PATH&lt;br /&gt;PATH=$ORACLE_HOME:$PATH&lt;br /&gt;&lt;br /&gt;export PATH&lt;br /&gt;### End Oracle specific setup&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-8780554698182584202?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/8780554698182584202/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=8780554698182584202&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/8780554698182584202'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/8780554698182584202'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2008/08/typical-oracle-profile-file-on-unix_20.html' title='Typical Oracle profile file on Unix'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-9197810805397331467</id><published>2008-08-20T10:30:00.000-04:00</published><updated>2008-08-20T10:31:08.059-04:00</updated><title type='text'>Typical Oracle profile file on Unix</title><content type='html'># .oracle10g&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;### Oracle specific setup&lt;br /&gt;ORACLE_HOME=/opt/oracle10g/instantclient_10_2&lt;br /&gt;TNS_ADMIN=/opt/oracle10g/instantclient_10_2&lt;br /&gt;NLS_LANG=_.WE8ISO8859P1&lt;br /&gt;&lt;br /&gt;export ORACLE_HOME TNS_ADMIN NLS_LANG&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;LD_LIBRARY_PATH=$ORACLE_HOME:$LD_LIBRARY_PATH&lt;br /&gt;export LD_LIBRARY_PATH&lt;br /&gt;PATH=$ORACLE_HOME:$PATH&lt;br /&gt;&lt;br /&gt;export PATH&lt;br /&gt;### End Oracle specific setup&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-9197810805397331467?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/9197810805397331467/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=9197810805397331467&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/9197810805397331467'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/9197810805397331467'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2008/08/typical-oracle-profile-file-on-unix.html' title='Typical Oracle profile file on Unix'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-5351872471513842752</id><published>2008-08-01T10:32:00.000-04:00</published><updated>2008-08-01T10:33:23.203-04:00</updated><title type='text'>Perl Internals - Simon Cozens</title><content type='html'>http://www.faqs.org/docs/perl5int/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-5351872471513842752?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/5351872471513842752/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=5351872471513842752&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/5351872471513842752'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/5351872471513842752'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2008/08/perl-internals-simon-cozens.html' title='Perl Internals - Simon Cozens'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-3421531019808279742</id><published>2008-08-01T10:26:00.001-04:00</published><updated>2008-08-01T10:26:42.441-04:00</updated><title type='text'>How Hashes Really Work</title><content type='html'>Great article to understand Hashes in PERL&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-3421531019808279742?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.perl.com/pub/a/2002/10/01/hashes.html' title='How Hashes Really Work'/><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/3421531019808279742/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=3421531019808279742&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/3421531019808279742'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/3421531019808279742'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2008/08/how-hashes-really-work.html' title='How Hashes Really Work'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-4419437792909002052</id><published>2008-07-24T16:50:00.002-04:00</published><updated>2008-07-24T16:51:15.285-04:00</updated><title type='text'>PERL - How to use %INC &amp; @INC on command line</title><content type='html'>perl -e 'use XML::Simple;use XML::Parser; foreach my $tuni (keys %INC){print $tuni . "\t" . $INC{$tuni} . "\n"}'&lt;br /&gt;&lt;br /&gt;perl -e 'print "@INC\n"'&lt;br /&gt;&lt;br /&gt;Multiple -e can be used, just like shell's sed program.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-4419437792909002052?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/4419437792909002052/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=4419437792909002052&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/4419437792909002052'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/4419437792909002052'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2008/07/perl-how-to-use-inc-inc-on-command-line.html' title='PERL - How to use %INC &amp; @INC on command line'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-638055926418089472</id><published>2008-07-09T13:17:00.000-04:00</published><updated>2008-07-09T13:19:12.275-04:00</updated><title type='text'>Unix - Large file aware utilities</title><content type='html'>A large file is a regular file whose size is greater than or&lt;br /&gt;     equal  to  2 Gbyte ( 2**31 bytes). A small file is a regular&lt;br /&gt;     file whose size is less than 2 Gbyte.&lt;br /&gt;&lt;br /&gt;  Large file aware utilities&lt;br /&gt;     A utility is called large file aware if it can process large&lt;br /&gt;     files  in  the same manner as it does small files. A utility&lt;br /&gt;     that is large file aware is able to handle  large  files  as&lt;br /&gt;     input and generate as output large files that are being pro-&lt;br /&gt;     cessed. The exception is where additional files  are used as&lt;br /&gt;     system configuration files or support files that can augment&lt;br /&gt;     the processing. &lt;br /&gt;     &lt;br /&gt;     For example, the file utility  supports  the&lt;br /&gt;     -m  option for an alternative "magic" file and the -f option&lt;br /&gt;     for a support file that can contain a list of file names. It&lt;br /&gt;     is  unspecified  whether  a utility that is large file aware&lt;br /&gt;     will accept configuration or support files  that  are  large&lt;br /&gt;     files.  If a large file aware utility does not accept confi-&lt;br /&gt;     guration or support files that  are  large  files,  it  will&lt;br /&gt;     cause  no  data  loss  or  corruption upon encountering such&lt;br /&gt;     files and will return an appropriate error.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;     The following /usr/bin utilities are large file aware:&lt;br /&gt;&lt;br /&gt;     adb           awk           bdiff         cat           chgrp&lt;br /&gt;     chmod         chown         cksum         cmp           compress&lt;br /&gt;     cp            csh           csplit        cut           dd&lt;br /&gt;     dircmp        du            egrep         fgrep         file&lt;br /&gt;     find          ftp           getconf       grep          gzip&lt;br /&gt;     head          join          jsh           ksh           ln&lt;br /&gt;     ls            mdb           mkdir         mkfifo        more&lt;br /&gt;     mv            nawk          page          paste         pathchck&lt;br /&gt;     pg            rcp           remsh         rksh          rm&lt;br /&gt;     rmdir         rsh           sed           sh            sort&lt;br /&gt;     split         sum           tail          tar           tee&lt;br /&gt;     test          touch         tr            uncompress    uudecode&lt;br /&gt;     uuencode      wc            zcat&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;     The following /usr/xpg4/bin utilities are large file aware:&lt;br /&gt;&lt;br /&gt;     awk           cp            chgrp         chown         du&lt;br /&gt;     egrep         fgrep         file          grep          ln&lt;br /&gt;     ls            more          mv            rm            sed&lt;br /&gt;     sh            sort          tail          tr&lt;br /&gt;     &lt;br /&gt;     &lt;br /&gt;     The following /usr/sbin utilities are large file aware:&lt;br /&gt;     &lt;br /&gt;     install       mkfile        mknod         mvdir         swap&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-638055926418089472?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/638055926418089472/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=638055926418089472&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/638055926418089472'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/638055926418089472'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2008/07/unix-large-file-aware-utilities.html' title='Unix - Large file aware utilities'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-387668862289152601</id><published>2008-07-02T13:26:00.003-04:00</published><updated>2008-07-02T13:33:04.383-04:00</updated><title type='text'>Knowledge about pixel, resolution and how to convert pixel into inches</title><content type='html'>Folks,&lt;br /&gt;Recently I got to work with GD library using PHP 5.xx and was little confused about pixels, resolution and how to convert them into physical dimensional measurement units like centimeters or inches.&lt;br /&gt;&lt;br /&gt;I think, lots of people are still very confused about it but still work as developers in GUI or web development.&lt;br /&gt;&lt;br /&gt;Here is some information......&lt;br /&gt;&lt;br /&gt;Say, there is an image of a flower 400x300 pixels. It means that height of this image is 400 pixel and width is 300 pixels. With it, there must be one more attribute of screen called 'resolution' (Remember, your color TV resolution).&lt;br /&gt;Say that is 72 ppi (pixel per inch). &lt;br /&gt;&lt;br /&gt;Simple mathematics: 72 ppi means&lt;br /&gt;72 pixels in 1 inch&lt;br /&gt;Therefore, 400 pixels in  = 400/72 = 5.55 inches tall&lt;br /&gt;Therefore, 300 pixels in  = 300/72 = 4.16 inches wide&lt;br /&gt;&lt;br /&gt;Hope it clears the cloud.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-387668862289152601?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/387668862289152601/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=387668862289152601&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/387668862289152601'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/387668862289152601'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2008/07/knowledge-about-pixel-resolution-and.html' title='Knowledge about pixel, resolution and how to convert pixel into inches'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-8728596434105693373</id><published>2008-07-01T16:05:00.001-04:00</published><updated>2008-07-01T16:05:51.319-04:00</updated><title type='text'>How to convert seconds into HH:MM:SS (24 hour format)</title><content type='html'>// $startstamp, $endstamp are both UNIX timestamp &lt;br /&gt;// from Jan 1, 1970 mid night&lt;br /&gt;&lt;br /&gt;function elapsed_time($startstamp, $endstamp)&lt;br /&gt;{&lt;br /&gt;        $sec=$endstamp - $startstamp;&lt;br /&gt;&lt;br /&gt;        $hours = ($sec/3600);&lt;br /&gt;        list($hours, $x) = split('\.', $hours);&lt;br /&gt;        if ($hours &lt; 10)&lt;br /&gt;        {&lt;br /&gt;                $hours = "0" . $hours;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        $min = ($sec%3600);&lt;br /&gt;        $min = ($min/60);&lt;br /&gt;        list($min, $x) = split('\.', $min);&lt;br /&gt;        if ($min &lt; 10)&lt;br /&gt;        {&lt;br /&gt;                $min = "0" . $min;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        $sec = ($sec%60);&lt;br /&gt;        if ($sec &lt; 10)&lt;br /&gt;        {&lt;br /&gt;                $sec = "0" . $sec;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        return "$hours:$min:$sec";&lt;br /&gt;&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-8728596434105693373?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/8728596434105693373/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=8728596434105693373&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/8728596434105693373'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/8728596434105693373'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2008/07/how-to-convert-seconds-into-hhmmss-24.html' title='How to convert seconds into HH:MM:SS (24 hour format)'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-5402279734745809745</id><published>2008-06-19T16:35:00.003-04:00</published><updated>2008-06-19T16:39:43.430-04:00</updated><title type='text'>MySQL - Convert MySQL date, datetime, timestamp to unix time and Vice versa</title><content type='html'>&amp;&amp; To convert Unix time to regular MySQL DATETIME&lt;br /&gt;select from_unixtime('1213907115');&lt;br /&gt;It prints '2008-06-19 16:25:15'&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;&amp; To Convert DATETIME to unixtime&lt;br /&gt;select unix_timestamp('2008-06-19 16:25:15');&lt;br /&gt;It prints 1213907115&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;&amp; To Convert current date &amp; time to unix time.&lt;br /&gt;select unix_timestamp();&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;&amp; To Convert a column of DATETIME type to unixtime.&lt;br /&gt;select unix_timestamp(c8013_date_created) from RealTimeStatus.T8013_PROGRAM;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-5402279734745809745?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/5402279734745809745/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=5402279734745809745&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/5402279734745809745'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/5402279734745809745'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2008/06/mysql-convert-mysql-date-datetime.html' title='MySQL - Convert MySQL date, datetime, timestamp to unix time and Vice versa'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-4093903097335526697</id><published>2008-06-12T16:51:00.003-04:00</published><updated>2008-06-12T16:54:07.712-04:00</updated><title type='text'>PERL - Hash, Hash reference and file handler passing to a subroutines</title><content type='html'>Fews days ago - One of my friends asked me about:&lt;br /&gt;1. hashes in perl&lt;br /&gt;2. hash references and how to use them&lt;br /&gt;3. file handler passing to a subroutines....&lt;br /&gt;&lt;br /&gt;Here is an example.....&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;#!/opt/local/bin/perl&lt;br /&gt;&lt;br /&gt;use warnings;&lt;br /&gt;use strict;&lt;br /&gt;&lt;br /&gt;my $n_ref;&lt;br /&gt;my $p_ref;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;open(NAME, "./tns_names") or die " Failed to open tns_names file : $! \n ";&lt;br /&gt;open(PASS, "./tns_pass") or die " Failed to open tns_pass file : $! \n ";&lt;br /&gt;&lt;br /&gt;$n_ref = &amp;process_names(*NAME);&lt;br /&gt;$p_ref = &amp;process_pass(*PASS);&lt;br /&gt;&lt;br /&gt;&amp;do_final($n_ref, $p_ref);&lt;br /&gt;&lt;br /&gt;close NAME;&lt;br /&gt;close PASS;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;sub process_names($)&lt;br /&gt;{&lt;br /&gt;        local *h = shift;&lt;br /&gt;&lt;br /&gt;        my %n;&lt;br /&gt;        my $nkey;&lt;br /&gt;        my $nval;&lt;br /&gt;&lt;br /&gt;        while(&lt;h&gt;)&lt;br /&gt;        {&lt;br /&gt;                chomp $_;&lt;br /&gt;                ($nkey, $nval) = split(/,/, $_);&lt;br /&gt;                $n{$nkey} = $nval;&lt;br /&gt;        }&lt;br /&gt;        return \%n;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;sub process_pass($)&lt;br /&gt;{&lt;br /&gt;        local *h = shift;&lt;br /&gt;&lt;br /&gt;        my %p;&lt;br /&gt;        my $pkey;&lt;br /&gt;        my $pval;&lt;br /&gt;&lt;br /&gt;        while(&lt;h&gt;)&lt;br /&gt;        {&lt;br /&gt;                chomp $_;&lt;br /&gt;                ($pkey, $pval) = split(/,/, $_);&lt;br /&gt;                $p{$pkey} = $pval;&lt;br /&gt;        }&lt;br /&gt;        return \%p;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;sub do_final(@)&lt;br /&gt;{&lt;br /&gt;        my ($nam, $pas) = @_;&lt;br /&gt;        my $akey;&lt;br /&gt;&lt;br /&gt;        foreach $akey (keys %$nam)&lt;br /&gt;        {&lt;br /&gt;                print 'Key :' . $akey . ' and Value: ' . $nam-&gt;{$akey} . "\n";&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        foreach $akey (keys %$pas)&lt;br /&gt;        {&lt;br /&gt;                print 'Key :' . $akey . ' and Value: ' . $pas-&gt;{$akey} . "\n";&lt;br /&gt;        }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-4093903097335526697?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/4093903097335526697/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=4093903097335526697&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/4093903097335526697'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/4093903097335526697'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2008/06/perl-hash-hash-reference-and-file.html' title='PERL - Hash, Hash reference and file handler passing to a subroutines'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-8042258975999598338</id><published>2008-06-12T16:19:00.000-04:00</published><updated>2008-06-12T16:20:06.583-04:00</updated><title type='text'>PERL - I/O Redirection Example</title><content type='html'>The following example shows how I/O can be simply redirected:&lt;br /&gt;&lt;br /&gt;open(F, '&gt;/tmp/x') || die;&lt;br /&gt;*STDOUT = *F;&lt;br /&gt;print "hello world\n";&lt;br /&gt;&lt;br /&gt;The print function thinks it is sending the output to STDOUT but ends up sending it to the open file instead, because the typeglob associated with STDOUT has been aliased to F. If you want this redirection to be temporary, you can localize *STDOUT.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-8042258975999598338?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/8042258975999598338/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=8042258975999598338&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/8042258975999598338'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/8042258975999598338'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2008/06/perl-io-redirection-example.html' title='PERL - I/O Redirection Example'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-6333489391938121909</id><published>2008-06-12T16:18:00.001-04:00</published><updated>2008-06-12T16:18:38.519-04:00</updated><title type='text'>PERL - Passing Filehandles to Subroutines</title><content type='html'>#!/usr/bin/perl&lt;br /&gt;use warnings;&lt;br /&gt;use strict;&lt;br /&gt;&lt;br /&gt;open(NAME, "./names") or die " Failed to open tns_names file : $! \n ";&lt;br /&gt;open(PASS, "./pass") or die " Failed to open tns_pass file : $! \n ";&lt;br /&gt;&lt;br /&gt;&amp;process_names(*NAME);&lt;br /&gt;&amp;process_pass(*PASS);&lt;br /&gt;&lt;br /&gt;close NAME;&lt;br /&gt;close PASS;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;sub process_names($)&lt;br /&gt;{&lt;br /&gt;        local (*h) = shift;&lt;br /&gt;        while(&lt;h&gt;)&lt;br /&gt;        {&lt;br /&gt;                chomp $_;&lt;br /&gt;                print $_ . "\n";&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;sub process_pass($)&lt;br /&gt;{&lt;br /&gt;        local (*h) = shift;&lt;br /&gt;        while(&lt;h&gt;)&lt;br /&gt;        {&lt;br /&gt;                chomp $_;&lt;br /&gt;                print $_ . "\n";&lt;br /&gt;        }&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-6333489391938121909?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/6333489391938121909/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=6333489391938121909&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/6333489391938121909'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/6333489391938121909'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2008/06/perl-passing-filehandles-to-subroutines.html' title='PERL - Passing Filehandles to Subroutines'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-608581546090791823</id><published>2008-06-06T13:54:00.001-04:00</published><updated>2008-06-06T13:54:43.490-04:00</updated><title type='text'>How to install ‘mysql-server’ community 5.1 and client on RHEL 5.0</title><content type='html'>How to install ‘mysql-server’ community 5.1 and client on RHEL 5.0&lt;br /&gt;&lt;br /&gt;Step 1: &lt;br /&gt;&lt;br /&gt;First step is to check if there are any version of mysql already installed. This is due to the fact that RHEL has some default packages available already. Do this.&lt;br /&gt;&lt;br /&gt;rpm –qa |grep mysql&lt;br /&gt;mysql-connector-odbc-3.51.12-2.2&lt;br /&gt;MySQL-python-1.2.1-1&lt;br /&gt;mysql-5.0.45-7.el5&lt;br /&gt;perl-DBD-MySQL-3.0007-1.fc6&lt;br /&gt;libdbi-dbd-mysql-0.8.1a-1.2.2&lt;br /&gt;mysql-server-5.0.45-7.el5&lt;br /&gt;&lt;br /&gt;Printed are a list of mysql server installed, clients and drivers like perl DBD driver, python driver and other stuff. Best idea is to get rid of all these dependencies and build it again. That can be done by &lt;br /&gt;&lt;br /&gt;rpm –e &lt; mysql-server-5.0.45-7.el5&gt;&lt;br /&gt;rpm –e &lt; libdbi-dbd-mysql-0.8.1a-1.2.2&lt;br /&gt;…..and so on.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Step 2: &lt;br /&gt;&lt;br /&gt;Try installing MySQL server 5.1 from MySQL mirror website itself. It would automatically start the server once successfully installed. ‘root’ is the default user id with a blank password. Root’s password can be changed once client package is installed which includs mysql and mysqladmin and other administrative tools.&lt;br /&gt;&lt;br /&gt;rpm –i http://dev.mysql.com/get/Downloads/MySQL-5.1/MySQL-server-community-5.1.24-0.rhel5.i386.rpm/from/http://mirror.trouble-free.net/mysql_mirror/&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Step 3:&lt;br /&gt;&lt;br /&gt;Try installing MySQL clients packages which include administrative tools like mysql, mysqladmin, mysqldump and others…..&lt;br /&gt;&lt;br /&gt;rpm –i http://dev.mysql.com/get/Downloads/MySQL-5.1/MySQL-client-community-5.1.24-0.rhel5.i386.rpm/from/http://mirror.trouble-free.net/mysql_mirror/&lt;br /&gt;&lt;br /&gt;Step 4:&lt;br /&gt;&lt;br /&gt;Change root user password or simply execute /usr/bin/mysql_secure_installation. Answer all the questions appropriately. That’s it. &lt;br /&gt;&lt;br /&gt;Step 5:&lt;br /&gt;&lt;br /&gt;Check if mysql is running by doing: ps –eaf|grep mysqld&lt;br /&gt;&lt;br /&gt;Also try connecting to it by doing.&lt;br /&gt;mysql –uroot –p&lt;root_password&gt;&lt;br /&gt;Welcome to the MySQL monitor.  Commands end with ; or \g.&lt;br /&gt;Your MySQL connection id is 38&lt;br /&gt;Server version: 5.1.24-rc-community MySQL Community Server (GPL)&lt;br /&gt;&lt;br /&gt;Type 'help;' or '\h' for help. Type '\c' to clear the buffer.&lt;br /&gt;mysql&gt; show databases;&lt;br /&gt;+--------------------+&lt;br /&gt;| Database           |&lt;br /&gt;+--------------------+&lt;br /&gt;| information_schema |&lt;br /&gt;| mysql              |&lt;br /&gt;| mysqlDB            |&lt;br /&gt;| test               |&lt;br /&gt;+--------------------+&lt;br /&gt;4 rows in set (0.00 sec)&lt;br /&gt;&lt;br /&gt;====== Now, you are all set =====================&lt;br /&gt;&lt;br /&gt;DO NOT FORGET TO RE-INSTALL DRIVERS FOR CLIENTS LIKE PERL, PYTHON, PHP.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-608581546090791823?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/608581546090791823/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=608581546090791823&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/608581546090791823'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/608581546090791823'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2008/06/how-to-install-mysql-server-community.html' title='How to install ‘mysql-server’ community 5.1 and client on RHEL 5.0'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-6111494662476693636</id><published>2008-06-06T13:31:00.001-04:00</published><updated>2008-06-06T13:31:22.434-04:00</updated><title type='text'>How to install 'MySQL' driver on Solaris platform</title><content type='html'>How to install 'MySQL' driver on Solaris platform:&lt;br /&gt;-------------------------------------------------&lt;br /&gt;&lt;br /&gt;STEP 1: &lt;br /&gt;&lt;br /&gt;Download   DBD-mysql-4.007.tar.gz http://search.cpan.org/dist/DBD-mysql/lib/DBD/mysql.pm&lt;br /&gt;by using wget tool from unix10/unix22 boxes because ftp/telnet/scp/sftp is prohibited.&lt;br /&gt;&lt;br /&gt;STEP 2:&lt;br /&gt;&lt;br /&gt;Copy this file into /tmp/mysql ( Create a temporary directory mysql under /tmp )&lt;br /&gt;&lt;br /&gt;STEP 3:&lt;br /&gt;&lt;br /&gt;gzip -d DBD-mysql-4.007.tar.gz&lt;br /&gt;&lt;br /&gt;STEP 4:&lt;br /&gt;&lt;br /&gt;tar xvf DBD-mysql-4.007.tar&lt;br /&gt;&lt;br /&gt;STEP 5:&lt;br /&gt;&lt;br /&gt;cd DBD-mysql-4.007&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;STEP 6:&lt;br /&gt;&lt;br /&gt;perl Makefile.PL --libs="-L/usr/local/mysql/lib/mysql -lmysqlclient -lz" \&lt;br /&gt;                 --cflags=-I/usr/local/mysql/include/mysql&lt;br /&gt;                 &lt;br /&gt;STEP 7:&lt;br /&gt;&lt;br /&gt;make&lt;br /&gt;make install &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;STEP 8: mysql driver has been installed if 'make install' does not produce any errors.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;STEP 9: How to verify if - mysql driver is installed.&lt;br /&gt;&lt;br /&gt;Used this perl script to verify:&lt;br /&gt;&lt;br /&gt;#!/opt/local/bin/perl -w&lt;br /&gt;&lt;br /&gt;use strict;&lt;br /&gt;use DBI;&lt;br /&gt;&lt;br /&gt;$|=1;&lt;br /&gt;my @x_drivers = DBI-&gt;available_drivers();&lt;br /&gt;foreach (@x_drivers){   print $_ . "\n";}&lt;br /&gt;&lt;br /&gt;__END__&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-6111494662476693636?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/6111494662476693636/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=6111494662476693636&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/6111494662476693636'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/6111494662476693636'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2008/06/how-to-install-mysql-driver-on-solaris.html' title='How to install &apos;MySQL&apos; driver on Solaris platform'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-548198245346422293</id><published>2008-06-06T13:17:00.001-04:00</published><updated>2008-06-06T13:17:42.528-04:00</updated><title type='text'>How to install mtop for MySQL on RHEL 5.0 machine</title><content type='html'>How to install mtop for MySQL on RHEL 5.0 machine:&lt;br /&gt;&lt;br /&gt;Step 1: Download&lt;br /&gt;wget http://downloads.sourceforge.net/mtop/mtop0.6.6.tar.gz?modtime=1094947200&amp;big_mirror=0&lt;br /&gt;&lt;br /&gt;Step 2: unzip it.&lt;br /&gt;gzip -d mtop-0.6.6.tar.gz&lt;br /&gt;&lt;br /&gt;Step 3: Extract the files&lt;br /&gt;tar xvf mtop-0.6.6.tar&lt;br /&gt;&lt;br /&gt;NOTE: It will create a directory named ‘mtop-0.6.6’&lt;br /&gt;&lt;br /&gt;Step 4: Install it.&lt;br /&gt;mtop-0.6.6&lt;br /&gt;perl Makefile.PL&lt;br /&gt;sudo make&lt;br /&gt;sudo make install&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;mtop is installed. If ‘which mtop’ is done, it will print &lt;br /&gt;/usr/local/bin/mtop&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-548198245346422293?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/548198245346422293/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=548198245346422293&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/548198245346422293'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/548198245346422293'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2008/06/how-to-install-mtop-for-mysql-on-rhel.html' title='How to install mtop for MySQL on RHEL 5.0 machine'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-7845140686710614773</id><published>2008-06-05T15:33:00.002-04:00</published><updated>2008-06-05T15:37:02.639-04:00</updated><title type='text'>Where to download mtop from - if unix/linux boxes can not connect to your windows</title><content type='html'>Folks,&lt;br /&gt;&lt;br /&gt;For most of us, Unix/Linux (Dev/QA) environment is totally separate from our work machine which should be most likely windows boxes and basically users use putty, or something like that. What if network does not allow you to copy or ftp/sftp &lt;br /&gt;anything from your windows box to Unix/Linux boxes.&lt;br /&gt;&lt;br /&gt;Simply use this on your unix machine:&lt;br /&gt;wget http://search.cpan.org/CPAN/authors/id/M/MP/MPREWITT/mtop/mtop-0.6.4.tar.gz&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-7845140686710614773?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/7845140686710614773/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=7845140686710614773&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/7845140686710614773'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/7845140686710614773'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2008/06/where-to-download-mtop-from-if.html' title='Where to download mtop from - if unix/linux boxes can not connect to your windows'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-8411539108474113191</id><published>2008-06-05T14:49:00.002-04:00</published><updated>2008-06-05T14:57:21.132-04:00</updated><title type='text'>Convert character sets from UTF8 to Latin1 and Base64</title><content type='html'>Folks,&lt;br /&gt;I came across this learning during some work where I have to convert some utf8 based characters from database to latin1 and some cases vice versa.....&lt;br /&gt;&lt;br /&gt;Perl site has good demo of this. Check this out...&lt;br /&gt;&lt;br /&gt;http://perldoc.perl.org/Encode/Encoder.html.&lt;br /&gt;&lt;br /&gt;This can also convert Latin1 to base64 and vice versa....&lt;br /&gt;&lt;br /&gt;Pretty cool stuff.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-8411539108474113191?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://perldoc.perl.org/Encode/Encoder.html' title='Convert character sets from UTF8 to Latin1 and Base64'/><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/8411539108474113191/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=8411539108474113191&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/8411539108474113191'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/8411539108474113191'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2008/06/convert-character-sets-from-utf8-to.html' title='Convert character sets from UTF8 to Latin1 and Base64'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-3527799385374249922</id><published>2008-05-29T09:32:00.001-04:00</published><updated>2008-05-29T09:32:32.870-04:00</updated><title type='text'>How to know, which all DBD exists on a Unix/Linux platform</title><content type='html'>#!/opt/local/bin/perl&lt;br /&gt;&lt;br /&gt;## How to know, which all DBD exists on a Unix/Linux platform.&lt;br /&gt;&lt;br /&gt;use warnings;&lt;br /&gt;use strict;&lt;br /&gt;use DBI;&lt;br /&gt;&lt;br /&gt;my @xt=DBI-&gt;available_drivers();&lt;br /&gt;foreach (@xt)&lt;br /&gt;{&lt;br /&gt;   print $_ . "\n";&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-3527799385374249922?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/3527799385374249922/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=3527799385374249922&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/3527799385374249922'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/3527799385374249922'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2008/05/how-to-know-which-all-dbd-exists-on.html' title='How to know, which all DBD exists on a Unix/Linux platform'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-3610739346976906424</id><published>2008-05-28T13:40:00.000-04:00</published><updated>2008-05-28T13:41:06.572-04:00</updated><title type='text'>UNIX shell differences and how to change your shell</title><content type='html'>The following article answers the frequently asked questions, what&lt;br /&gt;   UNIX shells are available, what are the differences between them and&lt;br /&gt;   how do you change your interactive shell. It is posted monthly to the&lt;br /&gt;   USENET newsgroups comp.unix.shell, comp.unix.questions, news.answers&lt;br /&gt;   and comp.answers and is additionally available on the world wide web&lt;br /&gt;   as http://www.wonderland.org/~eternal/shell.html&lt;br /&gt;   &lt;br /&gt;Contents&lt;br /&gt;&lt;br /&gt;     * Modifications since last issue&lt;br /&gt;     * Why change your shell&lt;br /&gt;     * The history of unix shells&lt;br /&gt;     * Deciding on a shell&lt;br /&gt;     * Shell features (table)&lt;br /&gt;     * How to change your shell&lt;br /&gt;     * A warning about changing your shell&lt;br /&gt;     * Further information&lt;br /&gt;     * Copyright and Disclaimer&lt;br /&gt;       &lt;br /&gt;Modifications since last issue&lt;br /&gt;&lt;br /&gt;     * Change of authors contact addresses&lt;br /&gt;       &lt;br /&gt;Why change your shell&lt;br /&gt;&lt;br /&gt;   The UNIX shell is most people's main access to the UNIX operating&lt;br /&gt;   system and as such any improvement to it can result in considerably&lt;br /&gt;   more effective use of the system, and may even allow you to do things&lt;br /&gt;   you couldn't do before. The primary improvement most of the new&lt;br /&gt;   generation shells give you is increased speed. They require fewer key&lt;br /&gt;   strokes to get the same results due to their completion features, they&lt;br /&gt;   give you more information (e.g. showing your directory in your prompt,&lt;br /&gt;   showing which files it would complete) and they cover some of the more&lt;br /&gt;   annoying features of UNIX, such as not going back up symbolic links to&lt;br /&gt;   directories.&lt;br /&gt;   &lt;br /&gt;A brief history of UNIX shells&lt;br /&gt;&lt;br /&gt;   Note, this history is just known to be slightly out of historical&lt;br /&gt;   order, it is in the process of being corrected, but for the moment&lt;br /&gt;   should be taken with a pinch of salt&lt;br /&gt;   &lt;br /&gt;   In the near beginning there was the Bourne shell /bin/sh (written by&lt;br /&gt;   S. R. Bourne). It had (and still does) a very strong powerful&lt;br /&gt;   syntactical language built into it, with all the features that are&lt;br /&gt;   commonly considered to produce structured programs; it has&lt;br /&gt;   particularly strong provisions for controlling input and output and in&lt;br /&gt;   its expression matching facilities. But no matter how strong its input&lt;br /&gt;   language is, it had one major drawback; it made nearly no concessions&lt;br /&gt;   to the interactive user (the only real concession being the use of&lt;br /&gt;   shell functions and these were only added later) and so there was a&lt;br /&gt;   gap for something better.&lt;br /&gt;   &lt;br /&gt;   Along came the people from UCB and the C-shell /bin/csh was born. Into&lt;br /&gt;   this shell they put several concepts which were new, (the majority of&lt;br /&gt;   these being job control and aliasing) and managed to produce a shell&lt;br /&gt;   that was much better for interactive use. But as well as improving the&lt;br /&gt;   shell for interactive use they also threw out the baby with the bath&lt;br /&gt;   water and went for a different input language.&lt;br /&gt;   &lt;br /&gt;   The theory behind the change was fairly good, the new input language&lt;br /&gt;   was to resemble C, the language in which UNIX itself was written, but&lt;br /&gt;   they made a complete mess of implementing it. Out went the good&lt;br /&gt;   control of input and output and in came the bugs. The new shell was&lt;br /&gt;   simply too buggy to produce robust shell scripts and so everybody&lt;br /&gt;   stayed with the Bourne shell for that, but it was considerably better&lt;br /&gt;   for interactive use so changed to the C shell, this resulted in the&lt;br /&gt;   stupid situation where people use a different shell for interactive&lt;br /&gt;   work than for non-interactive, a situation which a large number of&lt;br /&gt;   people still find themselves in today.&lt;br /&gt;   &lt;br /&gt;   After csh was let loose on an unsuspecting world various people&lt;br /&gt;   decided that the bugs really should get fixed, and while they where at&lt;br /&gt;   it they might as well add some extra features. In came command line&lt;br /&gt;   editing, TENEX-style completion and several other features. Out went&lt;br /&gt;   most of the bugs, but did the various UNIX operating system&lt;br /&gt;   manufacturers start shipping tcsh instead of csh? No, most of them&lt;br /&gt;   stuck with the standard C-Shell, adding non-standard features as they&lt;br /&gt;   went along.&lt;br /&gt;   &lt;br /&gt;   Eventually David Korn from AT&amp;T had the bright idea to sort out this&lt;br /&gt;   mess and the Korn shell /bin/ksh made its appearance. This quite&lt;br /&gt;   sensibly junked the C shells language and reverted back to the bourne&lt;br /&gt;   shell language, but it also added in the many features that made the C&lt;br /&gt;   shell good for interactive work (you could say it was the best of both&lt;br /&gt;   worlds), on top of this, it also added a some features from other&lt;br /&gt;   operating. The Korn shell became part of System V but had one major&lt;br /&gt;   problem; unlike the rest of the UNIX shells it wasn't free, you had to&lt;br /&gt;   pay AT&amp;T for it.&lt;br /&gt;   &lt;br /&gt;   It was at about this time that the first attempts to standardize UNIX&lt;br /&gt;   started in the form of the POSIX standard. POSIX specified more or&lt;br /&gt;   less the System V Bourne Shell (by this time the BSD and System V&lt;br /&gt;   versions had got slightly different). Later the standard is upgraded,&lt;br /&gt;   and somehow the new standard managed to look very much like ksh.&lt;br /&gt;   &lt;br /&gt;   Also at about this time the GNU project was underway and they decided&lt;br /&gt;   that they needed a free shell, they also decided that they wanted to&lt;br /&gt;   make this new shell POSIX compatible, thus bash (the Bourne again&lt;br /&gt;   shell) was born. Like the Korn shell bash was based upon the Bourne&lt;br /&gt;   shells language and like the Korn shell, it also pinched features from&lt;br /&gt;   the C shell and other operating systems (in my opinion it put them&lt;br /&gt;   together better; guess which shell I use), but unlike the Korn shell&lt;br /&gt;   it is free. Bash was quickly adopted for LINUX (where it can be&lt;br /&gt;   configured to perform just like the Bourne shell), and is the most&lt;br /&gt;   popular of the free new generation shells.&lt;br /&gt;   &lt;br /&gt;   Meanwhile Tom Duff faced with the problem of porting the Bourne shell&lt;br /&gt;   to Plan 9, revolts and writes rc instead, he publishes a paper on it,&lt;br /&gt;   and Byron Rakitzis reimplements it under UNIX. With the benefit of a&lt;br /&gt;   clean start Rc ended up smalled, simpler, more regular and in most&lt;br /&gt;   peoples opinion a much cleaner shell.&lt;br /&gt;   &lt;br /&gt;   The search for the perfect shell still goes on and the latest entry&lt;br /&gt;   into this arena is zsh. Zsh was written by Paul Falstad while he was a&lt;br /&gt;   student a Princeton and suffers from slight case of feeping&lt;br /&gt;   creaturism. It is based roughly on the bourne shell (although there&lt;br /&gt;   are some minor but important differences) and has so many additional&lt;br /&gt;   features that I don't even think the author even knows all of them.&lt;br /&gt;   &lt;br /&gt;   Additionally rc has been enhanced to produced es, this shell adds the&lt;br /&gt;   ability for the user to redefine low level functions.&lt;br /&gt;   &lt;br /&gt;Deciding on a shell&lt;br /&gt;&lt;br /&gt;   Which of the many shells you choose depends on many different things,&lt;br /&gt;   here is what I consider to be the most important, you may think&lt;br /&gt;   differently.&lt;br /&gt;   &lt;br /&gt;   How much time do I have to learn a new shell?&lt;br /&gt;          There is no point in using a shell with a different syntax, or&lt;br /&gt;          a completly different alias system if you havn't the time to&lt;br /&gt;          learn it. If you have the time and are presently using csh or&lt;br /&gt;          tcsh it is worth considering a switch to a Bourne shell&lt;br /&gt;          variant.&lt;br /&gt;          &lt;br /&gt;   What do I wish to be able to do with my new shell?&lt;br /&gt;          The main reason for switching shells is to gain extra&lt;br /&gt;          functionality; its vital you know what you are gaining from the&lt;br /&gt;          switch.&lt;br /&gt;          &lt;br /&gt;   Do I have to be able to switch back to a different shell?&lt;br /&gt;          If you may have to switch back to a standard shell, it is&lt;br /&gt;          fairly important you don't become too dependent on extra&lt;br /&gt;          features and so can't use an older shell.&lt;br /&gt;          &lt;br /&gt;   How much extra load can the system cope with?&lt;br /&gt;          The more advanced shells tend to take up extra CPU, since they&lt;br /&gt;          work in cbreak mode; if you are on an overloaded machine they&lt;br /&gt;          should probably be avoided; this can also cause problems with&lt;br /&gt;          an overloaded network. This only really applies to very old&lt;br /&gt;          systems nowadays.&lt;br /&gt;          &lt;br /&gt;   What support is given for my new shell?&lt;br /&gt;          If your new shell is not supported make sure you have someone&lt;br /&gt;          you can ask if you encounter problems or that you have the time&lt;br /&gt;          to sort them out yourself.&lt;br /&gt;          &lt;br /&gt;   What shell am I using already?&lt;br /&gt;          Switching between certain shells of the same syntax is alot&lt;br /&gt;          easier than switching between shells of a different syntax. So&lt;br /&gt;          if you havn't much time a simple upgrade (eg csh to tcsh) may&lt;br /&gt;          be a good idea.&lt;br /&gt;          &lt;br /&gt;   Can I afford any minor bugs?&lt;br /&gt;          Like most software all shells have some bugs in them&lt;br /&gt;          (especially csh), can you afford the problems that may occur&lt;br /&gt;          because of them.&lt;br /&gt;          &lt;br /&gt;   Do you need to be able to use more than one shell?&lt;br /&gt;          If you use more than one machine you may discover that you need&lt;br /&gt;          to use more than one shell regularly. How different are these&lt;br /&gt;          shells and can you cope with having to switch between these&lt;br /&gt;          shells on a regular basis. It may be to your advantage to&lt;br /&gt;          choose shells that are similar to each other.&lt;br /&gt;          &lt;br /&gt;Shell features&lt;br /&gt;&lt;br /&gt;   This table below lists most features that I think would make you&lt;br /&gt;   choose one shell over another. It is not intended to be a definitive&lt;br /&gt;   list and does not include every single possible feature for every&lt;br /&gt;   single possible shell. A feature is only considered to be in a shell&lt;br /&gt;   if in the version that comes with the operating system, or if it is&lt;br /&gt;   available as compiled directly from the standard distribution. In&lt;br /&gt;   particular the C shell specified below is that available on SUNOS 4.*,&lt;br /&gt;   a considerable number of vendors now ship either tcsh or their own&lt;br /&gt;   enhanced C shell instead (they don't always make it obvious that they&lt;br /&gt;   are shipping tcsh.&lt;br /&gt;&lt;br /&gt;                                     sh   csh  ksh  bash tcsh zsh  rc   es&lt;br /&gt;Job control                          N    Y    Y    Y    Y    Y    N    N&lt;br /&gt;Aliases                              N    Y    Y    Y    Y    Y    N    N&lt;br /&gt;Shell functions                      Y(1) N    Y    Y    N    Y    Y    Y&lt;br /&gt;"Sensible" Input/Output redirection  Y    N    Y    Y    N    Y    Y    Y&lt;br /&gt;Directory stack                      N    Y    Y    Y    Y    Y    F    F&lt;br /&gt;Command history                      N    Y    Y    Y    Y    Y    L    L&lt;br /&gt;Command line editing                 N    N    Y    Y    Y    Y    L    L&lt;br /&gt;Vi Command line editing              N    N    Y    Y    Y(3) Y    L    L&lt;br /&gt;Emacs Command line editing           N    N    Y    Y    Y    Y    L    L&lt;br /&gt;Rebindable Command line editing      N    N    N    Y    Y    Y    L    L&lt;br /&gt;User name look up                    N    Y    Y    Y    Y    Y    L    L&lt;br /&gt;Login/Logout watching                N    N    N    N    Y    Y    F    F&lt;br /&gt;Filename completion                  N    Y(1) Y    Y    Y    Y    L    L&lt;br /&gt;Username completion                  N    Y(2) Y    Y    Y    Y    L    L&lt;br /&gt;Hostname completion                  N    Y(2) Y    Y    Y    Y    L    L&lt;br /&gt;History completion                   N    N    N    Y    Y    Y    L    L&lt;br /&gt;Fully programmable Completion        N    N    N    N    Y    Y    N    N&lt;br /&gt;Mh Mailbox completion                N    N    N    N(4) N(6) N(6) N    N&lt;br /&gt;Co Processes                         N    N    Y    N    N    Y    N    N&lt;br /&gt;Builtin artithmetic evaluation       N    Y    Y    Y    Y    Y    N    N&lt;br /&gt;Can follow symbolic links invisibly  N    N    Y    Y    Y    Y    N    N&lt;br /&gt;Periodic command execution           N    N    N    N    Y    Y    N    N&lt;br /&gt;Custom Prompt (easily)               N    N    Y    Y    Y    Y    Y    Y&lt;br /&gt;Sun Keyboard Hack                    N    N    N    N    N    Y    N    N&lt;br /&gt;Spelling Correction                  N    N    N    N    Y    Y    N    N&lt;br /&gt;Process Substitution                 N    N    N    Y(2) N    Y    Y    Y&lt;br /&gt;Underlying Syntax                    sh   csh  sh   sh   csh  sh   rc   rc&lt;br /&gt;Freely Available                     N    N    N(5) Y    Y    Y    Y    Y&lt;br /&gt;Checks Mailbox                       N    Y    Y    Y    Y    Y    F    F&lt;br /&gt;Tty Sanity Checking                  N    N    N    N    Y    Y    N    N&lt;br /&gt;Can cope with large argument lists   Y    N    Y    Y    Y    Y    Y    Y&lt;br /&gt;Has non-interactive startup file     N    Y    Y(7) Y(7) Y    Y    N    N&lt;br /&gt;Has non-login startup file           N    Y    Y(7) Y    Y    Y    N    N&lt;br /&gt;Can avoid user startup files         N    Y    N    Y    N    Y    Y    Y&lt;br /&gt;Can specify startup file             N    N    Y    Y    N    N    N    N&lt;br /&gt;Low level command redefinition       N    N    N    N    N    N    N    Y&lt;br /&gt;Has anonymous functions              N    N    N    N    N    N    Y    Y&lt;br /&gt;List Variables                       N    Y    Y    N    Y    Y    Y    Y&lt;br /&gt;Full signal trap handling            Y    N    Y    Y    N    Y    Y    Y&lt;br /&gt;File no clobber ability              N    Y    Y    Y    Y    Y    N    F&lt;br /&gt;Local variables                      N    N    Y    Y    N    Y    Y    Y&lt;br /&gt;Lexically scoped variables           N    N    N    N    N    N    N    Y&lt;br /&gt;Exceptions                           N    N    N    N    N    N    N    Y&lt;br /&gt;&lt;br /&gt;Key to the table above.&lt;br /&gt;&lt;br /&gt;   Y      Feature can be done using this shell.&lt;br /&gt;          &lt;br /&gt;   N      Feature is not present in the shell.&lt;br /&gt;          &lt;br /&gt;   F      Feature can only be done by using the shells function&lt;br /&gt;          mechanism.&lt;br /&gt;          &lt;br /&gt;   L      The readline library must be linked into the shell to enable&lt;br /&gt;          this Feature.&lt;br /&gt;          &lt;br /&gt;Notes to the table above&lt;br /&gt;&lt;br /&gt;    1. This feature was not in the orginal version, but has since become&lt;br /&gt;       almost standard.&lt;br /&gt;    2. This feature is fairly new and so is often not found on many&lt;br /&gt;       versions of the shell, it is gradually making its way into&lt;br /&gt;       standard distribution.&lt;br /&gt;    3. The Vi emulation of this shell is thought by many to be&lt;br /&gt;       incomplete.&lt;br /&gt;    4. This feature is not standard but unoffical patches exist to&lt;br /&gt;       perform this.&lt;br /&gt;    5. A version called 'pdksh' is freely available, but does not have&lt;br /&gt;       the full functionality of the AT&amp;T version.&lt;br /&gt;    6. This can be done via the shells programmable completion mechanism.&lt;br /&gt;    7. Only by specifing a file via the ENV environment variable.&lt;br /&gt;       &lt;br /&gt;How to change your shell&lt;br /&gt;&lt;br /&gt;   If you ever look at a UNIX manual page it will say that to change your&lt;br /&gt;   shell use chsh or passwd -s; unfortunately it often isn't as simple as&lt;br /&gt;   this, since it requires that your new shell is recognized as a valid&lt;br /&gt;   shell by the system and at present many systems do not recognize the&lt;br /&gt;   newer shells (the normal selection is, /bin/sh, /bin/csh and possibly&lt;br /&gt;   /bin/ksh). You are thus left with having to do some sort of fudge,&lt;br /&gt;   changing your effective login shell without changing your official&lt;br /&gt;   entry in /etc/passwd. You may also be left with the problem that there&lt;br /&gt;   isn't a compiled binary on your system , so you will have to get hold&lt;br /&gt;   of the shell's source and compile it yourself (Its generally best to&lt;br /&gt;   ask around to see if anyones done this already, since it isn't that&lt;br /&gt;   easy). Once done you should add in code to your old shells login file&lt;br /&gt;   so that it overlays your official login shell with your new shell&lt;br /&gt;   (remember to add the login flags to the command line, and with&lt;br /&gt;   csh/tcsh ensure that the overlay doesn't happen recursively since they&lt;br /&gt;   both read the same .login file).&lt;br /&gt;   &lt;br /&gt;   The shell can be recognized as a valid shell if the system&lt;br /&gt;   administrator puts it in the file /etc/shells. If this file does not&lt;br /&gt;   exist, it must be created and should contain all valid shells&lt;br /&gt;   (i.e.don't forget the traditional ones in all their forms).&lt;br /&gt;   &lt;br /&gt;WARNING&lt;br /&gt;&lt;br /&gt;    If you do decide to change your shell you must be very careful - if&lt;br /&gt;   handled wrongly it can be almost impossible to correct, and will&lt;br /&gt;   almost certainly cause you a lot of hassle. Never make a new shell a&lt;br /&gt;   login shell until you have tested its new configuration files&lt;br /&gt;   thoroughly and then tested them once again. It is also important that&lt;br /&gt;   you make a full backup of your previous config files onto a floppy&lt;br /&gt;   disk (or a different host if you have a second account) if you have to&lt;br /&gt;   change any of them (which you will probably have to do if you can't&lt;br /&gt;   change your shell entry in /etc/passwd). You should also note that&lt;br /&gt;   your new shell is probably not supported by your system admin, so if&lt;br /&gt;   you have any problems you will probably have to look elsewhere.&lt;br /&gt;   &lt;br /&gt;Further information&lt;br /&gt;&lt;br /&gt;   The Bourne shell, the C-Shell and the Korn Shell (if you have it) are&lt;br /&gt;   all distributed as standard with your UNIX operating system,&lt;br /&gt;   information on these should come with your operating system, bug&lt;br /&gt;   reports etc should be sent to your operating system vendor. The free&lt;br /&gt;   version of ksh, pdksh is available as ftp://ftp.cs.mun.ca/pub/pdksh/&lt;br /&gt;   &lt;br /&gt;   A commercial "compiler" (CCsh) is available for the Bourne shell, this&lt;br /&gt;   can provide extra speed on some applications. For more information&lt;br /&gt;   contact Comeau Computing 91-34 120th Street, Richmond Hill, NY, USA&lt;br /&gt;   11418-3214. Email comeau@csanta.attmail.com.&lt;br /&gt;   &lt;br /&gt;   Bash was written and is maintained by the Free Software Foundation,&lt;br /&gt;   the primary source of information for this shell is its manual page.&lt;br /&gt;   Bug reports should be sent to bash-maintainers@ai.MIT.Edu, while&lt;br /&gt;   suggestions and philosophical bug reports may be mailed to&lt;br /&gt;   bug-bash@ai.MIT.Edu or posted to the Usenet newsgroup gnu.bash.bug,&lt;br /&gt;   the source is widely available on many ftp sites, and is subject to&lt;br /&gt;   the GNU copyleft licence.&lt;br /&gt;   &lt;br /&gt;   Tcsh is available by ftp from ftp://ftp.deshaw.com and several other&lt;br /&gt;   places.&lt;br /&gt;   &lt;br /&gt;   Rc is available by ftp from ftp://viz.tamu.edu/pub/rc,&lt;br /&gt;   ftp://ftp.sys.utotonoto.cs/pub/rc and several other places. An FAQ&lt;br /&gt;   exists and is posted frequently to comp.unix.shell and other places.&lt;br /&gt;   The Rc mailing list may be subscribed to by sending mail to&lt;br /&gt;   rc-request@hawkwind.utcs.toronto.edu, this, the manual page and the Rc&lt;br /&gt;   FAQ are the main sources of information for this shell. The original&lt;br /&gt;   paper on rc is available as&lt;br /&gt;   http://plan9.att.com/plan9/plan9doc/7.ps.Z.&lt;br /&gt;   &lt;br /&gt;   Zsh is available by ftp from ftp://ftp.math.gatech.edu/pub/zsh and at&lt;br /&gt;   several mirror sites. Zsh is now maintained by the members of the zsh&lt;br /&gt;   mailing lists, which can be subscribed to by sending email to&lt;br /&gt;   zsh-announce-request@math.gatech.edu (announcements),&lt;br /&gt;   zsh-users-request@math.gatech.edu (users discussions) or&lt;br /&gt;   zsh-workers-request@math.gatech.edu (zsh hacking and development) with&lt;br /&gt;   a subject of "subscribe email-address", there is also an FAQ which&lt;br /&gt;   is posted frequently to comp.unix.shell. The manual page, the Z-shell&lt;br /&gt;   FAQ and the zsh-list are the main sources of information for this&lt;br /&gt;   shell.&lt;br /&gt;   &lt;br /&gt;   ES is available by ftp from ftp://ftp.cs.utoronto/pub/es and at&lt;br /&gt;   several other places, a mailing list can be subscribed to by sending&lt;br /&gt;   mail to es-request@hawkwind.utcs.toronto.edu and a paper about es is&lt;br /&gt;   at http://www.webcom.com/~haahr/es/es-usenix-winter93.html.&lt;br /&gt;   &lt;br /&gt;   Questions on any of the UNIX shells and on shell script programming,&lt;br /&gt;   may be posted to the Usenet newsgroup comp.unix.shell a quick response&lt;br /&gt;   can normally be expected, especially on subjects relating to the more&lt;br /&gt;   common shells.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-3610739346976906424?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.faqs.org/faqs/unix-faq/shell/shell-differences/' title='UNIX shell differences and how to change your shell'/><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/3610739346976906424/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=3610739346976906424&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/3610739346976906424'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/3610739346976906424'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2008/05/unix-shell-differences-and-how-to.html' title='UNIX shell differences and how to change your shell'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-2891241906697659551</id><published>2008-05-28T13:34:00.000-04:00</published><updated>2008-05-28T13:36:33.652-04:00</updated><title type='text'>BASH Frequently-Asked Questions </title><content type='html'>This is the Bash FAQ, version 3.26, for Bash version 2.05b.&lt;br /&gt;&lt;br /&gt;This document contains a set of frequently-asked questions concerning&lt;br /&gt;Bash, the GNU Bourne-Again Shell.  Bash is a freely-available command&lt;br /&gt;interpreter with advanced features for both interactive use and shell&lt;br /&gt;programming.&lt;br /&gt;&lt;br /&gt;Another good source of basic information about shells is the collection&lt;br /&gt;of FAQ articles periodically posted to comp.unix.shell.&lt;br /&gt;&lt;br /&gt;Questions and comments concerning this document should be sent to&lt;br /&gt;chet@po.cwru.edu.&lt;br /&gt;&lt;br /&gt;This document is available for anonymous FTP with the URL&lt;br /&gt;&lt;br /&gt;ftp://ftp.cwru.edu/pub/bash/FAQ&lt;br /&gt;&lt;br /&gt;The Bash home page is http://cnswww.cns.cwru.edu/~chet/bash/bashtop.html&lt;br /&gt;&lt;br /&gt;----------&lt;br /&gt;Contents:&lt;br /&gt;&lt;br /&gt;Section A:  The Basics&lt;br /&gt;&lt;br /&gt;A1) What is it?&lt;br /&gt;A2) What's the latest version?&lt;br /&gt;A3) Where can I get it?&lt;br /&gt;A4) On what machines will bash run?&lt;br /&gt;A5) Will bash run on operating systems other than Unix?&lt;br /&gt;A6) How can I build bash with gcc?&lt;br /&gt;A7) How can I make bash my login shell?&lt;br /&gt;A8) I just changed my login shell to bash, and now I can't FTP into my&lt;br /&gt;    machine.  Why not?&lt;br /&gt;A9) What's the `POSIX Shell and Utilities standard'?&lt;br /&gt;A10) What is the bash `posix mode'?&lt;br /&gt;&lt;br /&gt;Section B:  The latest version&lt;br /&gt;&lt;br /&gt;B1) What's new in version 2.05b?&lt;br /&gt;B2) Are there any user-visible incompatibilities between bash-2.05b and&lt;br /&gt;    bash-1.14.7?&lt;br /&gt;&lt;br /&gt;Section C:  Differences from other Unix shells&lt;br /&gt;&lt;br /&gt;C1) How does bash differ from sh, the Bourne shell?&lt;br /&gt;C2) How does bash differ from the Korn shell, version ksh88?&lt;br /&gt;C3) Which new features in ksh-93 are not in bash, and which are?&lt;br /&gt;&lt;br /&gt;Section D:  Why does bash do some things differently than other Unix shells?&lt;br /&gt;&lt;br /&gt;D1) Why does bash run a different version of `command' than&lt;br /&gt;    `which command' says it will?&lt;br /&gt;D2) Why doesn't bash treat brace expansions exactly like csh?&lt;br /&gt;D3) Why doesn't bash have csh variable modifiers?&lt;br /&gt;D4) How can I make my csh aliases work when I convert to bash?&lt;br /&gt;D5) How can I pipe standard output and standard error from one command to&lt;br /&gt;    another, like csh does with `|&amp;'?&lt;br /&gt;D6) Now that I've converted from ksh to bash, are there equivalents to&lt;br /&gt;    ksh features like autoloaded functions and the `whence' command?&lt;br /&gt;&lt;br /&gt;Section E:  Why does bash do certain things the way it does?&lt;br /&gt;&lt;br /&gt;E1) Why is the bash builtin `test' slightly different from /bin/test?&lt;br /&gt;E2) Why does bash sometimes say `Broken pipe'?&lt;br /&gt;E3) When I have terminal escape sequences in my prompt, why does bash&lt;br /&gt;    wrap lines at the wrong column?&lt;br /&gt;E4) If I pipe the output of a command into `read variable', why doesn't&lt;br /&gt;    the output show up in $variable when the read command finishes?&lt;br /&gt;E5) I have a bunch of shell scripts that use backslash-escaped characters&lt;br /&gt;    in arguments to `echo'.  Bash doesn't interpret these characters.  Why&lt;br /&gt;    not, and how can I make it understand them?&lt;br /&gt;E6) Why doesn't a while or for loop get suspended when I type ^Z?&lt;br /&gt;E7) What about empty for loops in Makefiles?&lt;br /&gt;E8) Why does the arithmetic evaluation code complain about `08'?&lt;br /&gt;E9) Why does the pattern matching expression [A-Z]* match files beginning&lt;br /&gt;    with every letter except `z'?&lt;br /&gt;E10) Why does `cd //' leave $PWD as `//'?&lt;br /&gt;E11) If I resize my xterm while another program is running, why doesn't bash&lt;br /&gt;     notice the change?&lt;br /&gt;E12) Why don't negative offsets in substring expansion work like I expect?&lt;br /&gt;&lt;br /&gt;Section F:  Things to watch out for on certain Unix versions&lt;br /&gt;&lt;br /&gt;F1) Why can't I use command line editing in my `cmdtool'?&lt;br /&gt;F2) I built bash on Solaris 2.  Why do globbing expansions and filename&lt;br /&gt;    completion chop off the first few characters of each filename?&lt;br /&gt;F3) Why does bash dump core after I interrupt username completion or&lt;br /&gt;    `~user' tilde expansion on a machine running NIS?&lt;br /&gt;F4) I'm running SVR4.2.  Why is the line erased every time I type `@'?&lt;br /&gt;F5) Why does bash report syntax errors when my C News scripts use a&lt;br /&gt;    redirection before a subshell command?&lt;br /&gt;F6) Why can't I use vi-mode editing on Red Hat Linux 6.1?&lt;br /&gt;F7) Why do bash-2.05a and  bash-2.05b fail to compile `printf.def' on&lt;br /&gt;    HP/UX 11.x?&lt;br /&gt;&lt;br /&gt;Section G:  How can I get bash to do certain common things?&lt;br /&gt;&lt;br /&gt;G1) How can I get bash to read and display eight-bit characters?&lt;br /&gt;G2) How do I write a function `x' to replace builtin command `x', but&lt;br /&gt;    still invoke the command from within the function?&lt;br /&gt;G3) How can I find the value of a shell variable whose name is the value&lt;br /&gt;    of another shell variable?&lt;br /&gt;G4) How can I make the bash `time' reserved word print timing output that&lt;br /&gt;    looks like the output from my system's /usr/bin/time?&lt;br /&gt;G5) How do I get the current directory into my prompt?&lt;br /&gt;G6) How can I rename "*.foo" to "*.bar"?&lt;br /&gt;G7) How can I translate a filename from uppercase to lowercase?&lt;br /&gt;G8) How can I write a filename expansion (globbing) pattern that will match&lt;br /&gt;    all files in the current directory except "." and ".."?&lt;br /&gt;&lt;br /&gt;Section H:  Where do I go from here?&lt;br /&gt;&lt;br /&gt;H1) How do I report bugs in bash, and where should I look for fixes and&lt;br /&gt;    advice?&lt;br /&gt;H2) What kind of bash documentation is there?&lt;br /&gt;H3) What's coming in future versions?&lt;br /&gt;H4) What's on the bash `wish list'?&lt;br /&gt;H5) When will the next release appear?&lt;br /&gt;&lt;br /&gt;----------&lt;br /&gt;Section A:  The Basics&lt;br /&gt;&lt;br /&gt;A1)  What is it?&lt;br /&gt;&lt;br /&gt;Bash is a Unix command interpreter (shell).  It is an implementation of&lt;br /&gt;the Posix 1003.2 shell standard, and resembles the Korn and System V&lt;br /&gt;shells.&lt;br /&gt;&lt;br /&gt;Bash contains a number of enhancements over those shells, both&lt;br /&gt;for interactive use and shell programming.  Features geared&lt;br /&gt;toward interactive use include command line editing, command&lt;br /&gt;history, job control, aliases, and prompt expansion.  Programming&lt;br /&gt;features include additional variable expansions, shell&lt;br /&gt;arithmetic, and a number of variables and options to control&lt;br /&gt;shell behavior.&lt;br /&gt;&lt;br /&gt;Bash was originally written by Brian Fox of the Free Software&lt;br /&gt;Foundation.  The current developer and maintainer is Chet Ramey&lt;br /&gt;of Case Western Reserve University.&lt;br /&gt;&lt;br /&gt;A2)  What's the latest version?&lt;br /&gt;&lt;br /&gt;The latest version is 2.05b, first made available on Wednesday, 17&lt;br /&gt;July, 2002.&lt;br /&gt;&lt;br /&gt;A3)  Where can I get it?&lt;br /&gt;&lt;br /&gt;Bash is the GNU project's shell, and so is available from the&lt;br /&gt;master GNU archive site, ftp.gnu.org, and its mirrors.  The&lt;br /&gt;latest version is also available for FTP from ftp.cwru.edu.&lt;br /&gt;The following URLs tell how to get version 2.05b:&lt;br /&gt;&lt;br /&gt;ftp://ftp.gnu.org/pub/gnu/bash/bash-2.05b.tar.gz&lt;br /&gt;ftp://ftp.cwru.edu/pub/bash/bash-2.05b.tar.gz&lt;br /&gt;&lt;br /&gt;Formatted versions of the documentation are available with the URLs:&lt;br /&gt;&lt;br /&gt;ftp://ftp.gnu.org/pub/gnu/bash/bash-doc-2.05b.tar.gz&lt;br /&gt;ftp://ftp.cwru.edu/pub/bash/bash-doc-2.05b.tar.gz&lt;br /&gt;&lt;br /&gt;A4)  On what machines will bash run?&lt;br /&gt;&lt;br /&gt;Bash has been ported to nearly every version of UNIX.  All you&lt;br /&gt;should have to do to build it on a machine for which a port&lt;br /&gt;exists is to type `configure' and then `make'.  The build process&lt;br /&gt;will attempt to discover the version of UNIX you have and tailor&lt;br /&gt;itself accordingly, using a script created by GNU autoconf.&lt;br /&gt;&lt;br /&gt;More information appears in the file `INSTALL' in the distribution.&lt;br /&gt;&lt;br /&gt;The Bash web page (http://cnswww.cns.cwru.edu/~chet/bash/bashtop.html)&lt;br /&gt;explains how to obtain binary versions of bash for most of the major&lt;br /&gt;commercial Unix systems.&lt;br /&gt;&lt;br /&gt;A5) Will bash run on operating systems other than Unix?&lt;br /&gt;&lt;br /&gt;Configuration specifics for Unix-like systems such as QNX and&lt;br /&gt;LynxOS are included in the distribution.  Bash-2.05 and later&lt;br /&gt;versions should compile and run on Minix 2.0 (patches were&lt;br /&gt;contributed), but I don't believe anyone has built bash-2.x on&lt;br /&gt;earlier Minix versions yet. &lt;br /&gt;&lt;br /&gt;Bash has been ported to versions of Windows implementing the Win32&lt;br /&gt;programming interface.  This includes Windows 95 and Windows NT.&lt;br /&gt;The port was done by Cygnus Solutions as part of their CYGWIN&lt;br /&gt;project.  For more information about the project, look at the URLs&lt;br /&gt;&lt;br /&gt;http://www.cygwin.com/&lt;br /&gt;http://sourceware.cygnus.com/cygwin&lt;br /&gt;&lt;br /&gt;Cygnus originally ported bash-1.14.7, and that port was part of their&lt;br /&gt;early GNU-Win32 (the original name) releases.  Cygnus has also done a&lt;br /&gt;port of bash-2.05 to the CYGWIN environment, and it is available as&lt;br /&gt;part of their current release.&lt;br /&gt;&lt;br /&gt;Bash-2.05b should require no local Cygnus changes to build and run under&lt;br /&gt;CYGWIN.&lt;br /&gt;&lt;br /&gt;The Cygnus port works only on Intel machines.  There is a port of bash&lt;br /&gt;(I don't know which version) to the alpha/NT environment available from&lt;br /&gt;&lt;br /&gt;ftp://ftp.gnustep.org//pub/win32/&lt;br /&gt;&lt;br /&gt;DJ Delorie has a port of bash-2.x which runs under MS-DOS, as part&lt;br /&gt;of the DJGPP project.  For more information on the project, see&lt;br /&gt;&lt;br /&gt;http://www.delorie.com/djgpp/&lt;br /&gt;&lt;br /&gt;I have been told that the original DJGPP port was done by Daisuke Aoyama.&lt;br /&gt;&lt;br /&gt;Mark Elbrecht &lt;snowball3@bigfoot.com&gt; has sent me notice that bash-2.04&lt;br /&gt;is available for DJGPP V2.  The files are available as:&lt;br /&gt;&lt;br /&gt;ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/	binary&lt;br /&gt;ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/	documentation&lt;br /&gt;ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/	source&lt;br /&gt;&lt;br /&gt;Mark has begun to work with bash-2.05, but I don't know the status.&lt;br /&gt;&lt;br /&gt;Ports of bash-1.12 and bash-2.0 are available for OS/2 from&lt;br /&gt;&lt;br /&gt;ftp://hobbes.nmsu.edu/pub/os2/util/shell/bash_112.zip&lt;br /&gt;ftp://hobbes.nmsu.edu/pub/os2/util/shell/bash-2.0(253).zip&lt;br /&gt;&lt;br /&gt;I haven't looked at either, but the second appears to be a binary-only&lt;br /&gt;distribution.  Beware.&lt;br /&gt;&lt;br /&gt;I have received word that Bash (I'm not sure which version, but I&lt;br /&gt;believe that it's at least bash-2.02.1) is the standard shell on&lt;br /&gt;BeOS.&lt;br /&gt;&lt;br /&gt;A6) How can I build bash with gcc? &lt;br /&gt;&lt;br /&gt;Bash configures to use gcc by default if it is available.  Read the&lt;br /&gt;file INSTALL in the distribution for more information.&lt;br /&gt;&lt;br /&gt;A7)  How can I make bash my login shell?&lt;br /&gt;&lt;br /&gt;Some machines let you use `chsh' to change your login shell.  Other&lt;br /&gt;systems use `passwd -s' or `passwd -e'.  If one of these works for&lt;br /&gt;you, that's all you need.  Note that many systems require the full&lt;br /&gt;pathname to a shell to appear in /etc/shells before you can make it&lt;br /&gt;your login shell.  For this, you may need the assistance of your&lt;br /&gt;friendly local system administrator. &lt;br /&gt;&lt;br /&gt;If you cannot do this, you can still use bash as your login shell, but&lt;br /&gt;you need to perform some tricks.  The basic idea is to add a command&lt;br /&gt;to your login shell's startup file to replace your login shell with&lt;br /&gt;bash.&lt;br /&gt;&lt;br /&gt;For example, if your login shell is csh or tcsh, and you have installed&lt;br /&gt;bash in /usr/gnu/bin/bash, add the following line to ~/.login:&lt;br /&gt;&lt;br /&gt;	if ( -f /usr/gnu/bin/bash ) exec /usr/gnu/bin/bash --login&lt;br /&gt;&lt;br /&gt;(the `--login' tells bash that it is a login shell).&lt;br /&gt;&lt;br /&gt;It's not a good idea to put this command into ~/.cshrc, because every&lt;br /&gt;csh you run without the `-f' option, even ones started to run csh scripts,&lt;br /&gt;reads that file.  If you must put the command in ~/.cshrc, use something&lt;br /&gt;like&lt;br /&gt;&lt;br /&gt;	if ( $?prompt ) exec /usr/gnu/bin/bash --login&lt;br /&gt;&lt;br /&gt;to ensure that bash is exec'd only when the csh is interactive.&lt;br /&gt;&lt;br /&gt;If your login shell is sh or ksh, you have to do two things.&lt;br /&gt;&lt;br /&gt;First, create an empty file in your home directory named `.bash_profile'.&lt;br /&gt;The existence of this file will prevent the exec'd bash from trying to&lt;br /&gt;read ~/.profile, and re-execing itself over and over again.  ~/.bash_profile&lt;br /&gt;is the first file bash tries to read initialization commands from when&lt;br /&gt;it is invoked as a login shell.&lt;br /&gt;&lt;br /&gt;Next, add a line similar to the above to ~/.profile:&lt;br /&gt;&lt;br /&gt;	[ -f /usr/gnu/bin/bash ] &amp;&amp; [ -x /usr/gnu/bin/bash ] &amp;&amp; \&lt;br /&gt;		exec /usr/gnu/bin/bash --login&lt;br /&gt;&lt;br /&gt;This will cause login shells to replace themselves with bash running as&lt;br /&gt;a login shell.  Once you have this working, you can copy your initialization&lt;br /&gt;code from ~/.profile to ~/.bash_profile.&lt;br /&gt;&lt;br /&gt;I have received word that the recipe supplied above is insufficient for&lt;br /&gt;machines running CDE.  CDE has a maze of twisty little startup files, all&lt;br /&gt;slightly different.&lt;br /&gt;&lt;br /&gt;If you cannot change your login shell in the password file to bash, you&lt;br /&gt;will have to (apparently) live with CDE using the shell in the password&lt;br /&gt;file to run its startup scripts.  If you have changed your shell to bash,&lt;br /&gt;there is code in the CDE startup files (on Solaris, at least) that attempts&lt;br /&gt;to do the right thing.  It is, however, often broken, and may require that&lt;br /&gt;you use the $BASH_ENV trick described below.&lt;br /&gt;&lt;br /&gt;`dtterm' claims to use $SHELL as the default program to start, so if you&lt;br /&gt;can change $SHELL in the CDE startup files, you should be able to use bash&lt;br /&gt;in your terminal windows.&lt;br /&gt;&lt;br /&gt;Setting DTSOURCEPROFILE in ~/.dtprofile will cause the `Xsession' program&lt;br /&gt;to read your login shell's startup files.  You may be able to use bash for&lt;br /&gt;the rest of the CDE programs by setting SHELL to bash in ~/.dtprofile as&lt;br /&gt;well, but I have not tried this.&lt;br /&gt;&lt;br /&gt;You can use the above `exec' recipe to start bash when not logging in with&lt;br /&gt;CDE by testing the value of the DT variable:&lt;br /&gt;&lt;br /&gt;	if [ -n "$DT" ]; then&lt;br /&gt;	        [ -f /usr/gnu/bin/bash ] &amp;&amp; exec /usr/gnu/bin/bash --login&lt;br /&gt;	fi&lt;br /&gt;&lt;br /&gt;If CDE starts its shells non-interactively during login, the login shell&lt;br /&gt;startup files (~/.profile, ~/.bash_profile) will not be sourced at login.&lt;br /&gt;To get around this problem, append a line similar to the following to your&lt;br /&gt;~/.dtprofile:&lt;br /&gt;&lt;br /&gt;	BASH_ENV=${HOME}/.bash_profile ; export BASH_ENV&lt;br /&gt;&lt;br /&gt;and add the following line to the beginning of ~/.bash_profile:&lt;br /&gt;&lt;br /&gt;	unset BASH_ENV&lt;br /&gt;&lt;br /&gt;A8) I just changed my login shell to bash, and now I can't FTP into my&lt;br /&gt;   machine.  Why not?&lt;br /&gt;&lt;br /&gt;You must add the full pathname to bash to the file /etc/shells.  As&lt;br /&gt;noted in the answer to the previous question, many systems require&lt;br /&gt;this before you can make bash your login shell. &lt;br /&gt;&lt;br /&gt;Most versions of ftpd use this file to prohibit `special' users&lt;br /&gt;such as `uucp' and `news' from using FTP. &lt;br /&gt;&lt;br /&gt;A9)  What's the `POSIX Shell and Utilities standard'?&lt;br /&gt;&lt;br /&gt;POSIX is a name originally coined by Richard Stallman for a&lt;br /&gt;family of open system standards based on UNIX.  There are a&lt;br /&gt;number of aspects of UNIX under consideration for&lt;br /&gt;standardization, from the basic system services at the system&lt;br /&gt;call and C library level to applications and tools to system&lt;br /&gt;administration and management.  Each area of standardization is&lt;br /&gt;assigned to a working group in the 1003 series. &lt;br /&gt;&lt;br /&gt;The POSIX Shell and Utilities standard was originally developed by&lt;br /&gt;IEEE Working Group 1003.2 (POSIX.2).  Today it has been merged with&lt;br /&gt;the original 1003.1 Working Group and is maintained by the Austin&lt;br /&gt;Group (a joint working group of the IEEE, The Open Group and&lt;br /&gt;ISO/IEC SC22/WG15).  Today the Shell and Utilities are a volume&lt;br /&gt;within the set of documents that make up IEEE Std 1003.1-2001, and&lt;br /&gt;thus now the former POSIX.2 (from 1992) is now part of the current&lt;br /&gt;POSIX.1 standard (POSIX 1003.1-2001). &lt;br /&gt;&lt;br /&gt;The Shell and Utilities volume concentrates on the command&lt;br /&gt;interpreter interface and utility programs commonly executed from&lt;br /&gt;the command line or by other programs.  The standard is freely&lt;br /&gt;available on the web at http://www.UNIX-systems.org/version3/ . &lt;br /&gt;Work continues at the Austin Group on maintenance issues; see&lt;br /&gt;http://www.opengroup.org/austin/ to join the discussions. &lt;br /&gt;&lt;br /&gt;Bash is concerned with the aspects of the shell's behavior defined&lt;br /&gt;by the POSIX Shell and Utilities volume.  The shell command&lt;br /&gt;language has of course been standardized, including the basic flow&lt;br /&gt;control and program execution constructs, I/O redirection and&lt;br /&gt;pipelining, argument handling, variable expansion, and quoting. &lt;br /&gt;&lt;br /&gt;The `special' builtins, which must be implemented as part of the&lt;br /&gt;shell to provide the desired functionality, are specified as&lt;br /&gt;being part of the shell; examples of these are `eval' and&lt;br /&gt;`export'.  Other utilities appear in the sections of POSIX not&lt;br /&gt;devoted to the shell which are commonly (and in some cases must&lt;br /&gt;be) implemented as builtin commands, such as `read' and `test'. &lt;br /&gt;POSIX also specifies aspects of the shell's interactive&lt;br /&gt;behavior as part of the UPE, including job control and command&lt;br /&gt;line editing.  Only vi-style line editing commands have been&lt;br /&gt;standardized; emacs editing commands were left out due to&lt;br /&gt;objections.&lt;br /&gt;&lt;br /&gt;The latest version of the POSIX Shell and Utilities standard is&lt;br /&gt;available (now updated to the 2003 Edition incorporating the&lt;br /&gt;Technical Corrigendum 1), as part of the Single UNIX Specification&lt;br /&gt;Version 3 at&lt;br /&gt;&lt;br /&gt;http://www.UNIX-systems.org/version3/&lt;br /&gt;&lt;br /&gt;A10)  What is the bash `posix mode'?&lt;br /&gt;&lt;br /&gt;Although bash is an implementation of the POSIX shell&lt;br /&gt;specification, there are areas where the bash default behavior&lt;br /&gt;differs from that spec.  The bash `posix mode' changes the bash&lt;br /&gt;behavior in these areas so that it obeys the spec more closely. &lt;br /&gt;&lt;br /&gt;Posix mode is entered by starting bash with the --posix or&lt;br /&gt;'-o posix' option or executing `set -o posix' after bash is running.&lt;br /&gt;&lt;br /&gt;The specific aspects of bash which change when posix mode is&lt;br /&gt;active are listed in the file POSIX in the bash distribution.&lt;br /&gt;They are also listed in a section in the Bash Reference Manual&lt;br /&gt;(from which that file is generated).&lt;br /&gt;&lt;br /&gt;Section B:  The latest version&lt;br /&gt;&lt;br /&gt;B1) What's new in version 2.05b?&lt;br /&gt;&lt;br /&gt;The raison d'etre for bash-2.05b is to make a second intermediate&lt;br /&gt;release containing the first of the new features to be available&lt;br /&gt;in bash-3.0 and get feedback on those features before proceeding.&lt;br /&gt;The major new feature is multibyte character support in both Bash&lt;br /&gt;and Readline.&lt;br /&gt;&lt;br /&gt;Bash-2.05b contains the following new features (see the manual page for&lt;br /&gt;complete descriptions and the CHANGES and NEWS files in the bash-2.05b&lt;br /&gt;distribution):&lt;br /&gt;&lt;br /&gt;o support for multibyte characters has been added to both bash and readline&lt;br /&gt;&lt;br /&gt;o the DEBUG trap is now run *before* simple commands, ((...)) commands,&lt;br /&gt;  [[...]] conditional commands, and for ((...)) loops&lt;br /&gt;&lt;br /&gt;o the shell now performs arithmetic in the largest integer size the machine&lt;br /&gt;  supports (intmax_t)&lt;br /&gt;&lt;br /&gt;o there is a new \D{...} prompt expansion; passes the `...' to strftime(3)&lt;br /&gt;  and inserts the result into the expanded prompt&lt;br /&gt;&lt;br /&gt;o there is a new `here-string' redirection operator:  &lt;&lt;&lt; word&lt;br /&gt;&lt;br /&gt;o when displaying variables, function attributes and definitions are shown&lt;br /&gt;  separately, allowing them to be re-used as input (attempting to re-use&lt;br /&gt;  the old output would result in syntax errors).&lt;br /&gt;&lt;br /&gt;o `read' has a new `-u fd' option to read from a specified file descriptor&lt;br /&gt;&lt;br /&gt;o the bash debugger in examples/bashdb has been modified to work with the&lt;br /&gt;  new DEBUG trap semantics, the command set has been made more gdb-like,&lt;br /&gt;  and the changes to $LINENO make debugging functions work better&lt;br /&gt;&lt;br /&gt;o the expansion of $LINENO inside a shell function is only relative to the&lt;br /&gt;  function start if the shell is interactive -- if the shell is running a&lt;br /&gt;  script, $LINENO expands to the line number in the script.  This is as&lt;br /&gt;  POSIX-2001 requires&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;A short feature history dating from Bash-2.0:&lt;br /&gt;&lt;br /&gt;Bash-2.05a introduced the following new features:&lt;br /&gt;&lt;br /&gt;o The `printf' builtin has undergone major work&lt;br /&gt;&lt;br /&gt;o There is a new read-only `shopt' option: login_shell, which is set by&lt;br /&gt;  login shells and unset otherwise&lt;br /&gt;&lt;br /&gt;o New `\A' prompt string escape sequence; expanding to time in 24-hour&lt;br /&gt;  HH:MM format&lt;br /&gt;&lt;br /&gt;o New `-A group/-g' option to complete and compgen; goes group name&lt;br /&gt;  completion&lt;br /&gt;&lt;br /&gt;o New [+-]O invocation option to set and unset `shopt' options at startup&lt;br /&gt;&lt;br /&gt;o ksh-like `ERR' trap&lt;br /&gt;&lt;br /&gt;o `for' loops now allow empty word lists after the `in' reserved word&lt;br /&gt;&lt;br /&gt;o new `hard' and `soft' arguments for the `ulimit' builtin&lt;br /&gt;&lt;br /&gt;o Readline can be configured to place the user at the same point on the line&lt;br /&gt;  when retrieving commands from the history list&lt;br /&gt;&lt;br /&gt;o Readline can be configured to skip `hidden' files (filenames with a leading&lt;br /&gt;  `.' on Unix) when performing completion&lt;br /&gt;&lt;br /&gt;Bash-2.05 introduced the following new features:&lt;br /&gt;&lt;br /&gt;o This version has once again reverted to using locales and strcoll(3) when&lt;br /&gt;  processing pattern matching bracket expressions, as POSIX requires. &lt;br /&gt;o Added a new `--init-file' invocation argument as a synonym for `--rcfile',&lt;br /&gt;  per the new GNU coding standards.&lt;br /&gt;o The /dev/tcp and /dev/udp redirections now accept service names as well as&lt;br /&gt;  port numbers.&lt;br /&gt;o `complete' and `compgen' now take a `-o value' option, which controls some&lt;br /&gt;   of the aspects of that compspec.  Valid values are:&lt;br /&gt;&lt;br /&gt;        default - perform bash default completion if programmable&lt;br /&gt;                  completion produces no matches&lt;br /&gt;        dirnames - perform directory name completion if programmable&lt;br /&gt;                   completion produces no matches&lt;br /&gt;        filenames - tell readline that the compspec produces filenames,&lt;br /&gt;                    so it can do things like append slashes to&lt;br /&gt;                    directory names and suppress trailing spaces&lt;br /&gt;o A new loadable builtin, realpath, which canonicalizes and expands symlinks&lt;br /&gt;  in pathname arguments.&lt;br /&gt;o When `set' is called without options, it prints function defintions in a&lt;br /&gt;  way that allows them to be reused as input.  This affects `declare' and &lt;br /&gt;  `declare -p' as well.  This only happens when the shell is not in POSIX&lt;br /&gt;   mode, since POSIX.2 forbids this behavior.&lt;br /&gt;&lt;br /&gt;Bash-2.04 introduced the following new features:&lt;br /&gt;&lt;br /&gt;o Programmable word completion with the new `complete' and `compgen' builtins;&lt;br /&gt;  examples are provided in examples/complete/complete-examples&lt;br /&gt;o `history' has a new `-d' option to delete a history entry&lt;br /&gt;o `bind' has a new `-x' option to bind key sequences to shell commands&lt;br /&gt;o The prompt expansion code has new `\j' and `\l' escape sequences&lt;br /&gt;o The `no_empty_cmd_completion' shell option, if enabled, inhibits&lt;br /&gt;  command completion when TAB is typed on an empty line&lt;br /&gt;o `help' has a new `-s' option to print a usage synopsis&lt;br /&gt;o New arithmetic operators: var++, var--, ++var, --var, expr1,expr2 (comma)&lt;br /&gt;o New ksh93-style arithmetic for command:&lt;br /&gt;	for ((expr1 ; expr2; expr3 )); do list; done&lt;br /&gt;o `read' has new options: `-t', `-n', `-d', `-s'&lt;br /&gt;o The redirection code handles several filenames specially:  /dev/fd/N,&lt;br /&gt;  /dev/stdin, /dev/stdout, /dev/stderr&lt;br /&gt;o The redirection code now recognizes /dev/tcp/HOST/PORT and&lt;br /&gt;  /dev/udp/HOST/PORT and tries to open a TCP or UDP socket, respectively,&lt;br /&gt;  to the specified port on the specified host&lt;br /&gt;o The ${!prefix*} expansion has been implemented&lt;br /&gt;o A new FUNCNAME variable, which expands to the name of a currently-executing&lt;br /&gt;  function&lt;br /&gt;o The GROUPS variable is no longer readonly&lt;br /&gt;o A new shopt `xpg_echo' variable, to control the behavior of echo with&lt;br /&gt;  respect to backslash-escape sequences at runtime&lt;br /&gt;o The NON_INTERACTIVE_LOGIN_SHELLS #define has returned&lt;br /&gt;&lt;br /&gt;The version of Readline released with Bash-2.04, Readline-4.1, had several&lt;br /&gt;new features as well:&lt;br /&gt;&lt;br /&gt;o Parentheses matching is always compiled into readline, and controllable&lt;br /&gt;  with the new `blink-matching-paren' variable&lt;br /&gt;o The history-search-forward and history-search-backward functions now leave&lt;br /&gt;  point at the end of the line when the search string is empty, like&lt;br /&gt;  reverse-search-history, and forward-search-history&lt;br /&gt;o A new function for applications:  rl_on_new_line_with_prompt()&lt;br /&gt;o New variables for applications:  rl_already_prompted, and rl_gnu_readline_p&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Bash-2.03 had very few new features, in keeping with the convention&lt;br /&gt;that odd-numbered releases provide mainly bug fixes.  A number of new&lt;br /&gt;features were added to Readline, mostly at the request of the Cygnus&lt;br /&gt;folks.&lt;br /&gt;&lt;br /&gt;A new shopt option, `restricted_shell', so that startup files can test&lt;br /&gt;	whether or not the shell was started in restricted mode&lt;br /&gt;Filename generation is now performed on the words between ( and ) in&lt;br /&gt;	compound array assignments (this is really a bug fix)&lt;br /&gt;OLDPWD is now auto-exported, as POSIX.2 requires&lt;br /&gt;ENV and BASH_ENV are read-only variables in a restricted shell&lt;br /&gt;Bash may now be linked against an already-installed Readline library,&lt;br /&gt;	as long as the Readline library is version 4 or newer&lt;br /&gt;All shells begun with the `--login' option will source the login shell&lt;br /&gt;	startup files, even if the shell is not interactive&lt;br /&gt;&lt;br /&gt;There were lots of changes to the version of the Readline library released&lt;br /&gt;along with Bash-2.03.  For a complete list of the changes, read the file&lt;br /&gt;CHANGES in the Bash-2.03 distribution.&lt;br /&gt;&lt;br /&gt;Bash-2.02 contained the following new features:&lt;br /&gt;&lt;br /&gt;a new version of malloc (based on the old GNU malloc code in previous&lt;br /&gt;	bash versions) that is more page-oriented, more conservative&lt;br /&gt;	with memory usage, does not `orphan' large blocks when they&lt;br /&gt;	are freed, is usable on 64-bit machines, and has allocation&lt;br /&gt;	checking turned on unconditionally&lt;br /&gt;POSIX.2-style globbing character classes ([:alpha:], [:alnum:], etc.)&lt;br /&gt;POSIX.2-style globbing equivalence classes&lt;br /&gt;POSIX.2-style globbing collating symbols&lt;br /&gt;the ksh [[...]] extended conditional command&lt;br /&gt;the ksh egrep-style extended pattern matching operators&lt;br /&gt;a new `printf' builtin&lt;br /&gt;the ksh-like $(&lt;filename) command substitution, which is equivalent to&lt;br /&gt;	$(cat filename)&lt;br /&gt;new tilde prefixes that expand to directories from the directory stack&lt;br /&gt;new `**' arithmetic operator to do exponentiation&lt;br /&gt;case-insensitive globbing (filename expansion)&lt;br /&gt;menu completion a la tcsh&lt;br /&gt;`magic-space' history expansion function like tcsh&lt;br /&gt;the readline inputrc `language' has a new file inclusion directive ($include)&lt;br /&gt;&lt;br /&gt;Bash-2.01 contained only a few new features:&lt;br /&gt;&lt;br /&gt;new `GROUPS' builtin array variable containing the user's group list&lt;br /&gt;new bindable readline commands: history-and-alias-expand-line and&lt;br /&gt;	alias-expand-line&lt;br /&gt;&lt;br /&gt;Bash-2.0 contained extensive changes and new features from bash-1.14.7.&lt;br /&gt;Here's a short list:&lt;br /&gt;&lt;br /&gt;new `time' reserved word to time pipelines, shell builtins, and&lt;br /&gt;	shell functions&lt;br /&gt;one-dimensional arrays with a new compound assignment statement,&lt;br /&gt;        appropriate expansion constructs and modifications to some&lt;br /&gt;	of the builtins (read, declare, etc.) to use them&lt;br /&gt;new quoting syntaxes for ANSI-C string expansion and locale-specific&lt;br /&gt;	string translation&lt;br /&gt;new expansions to do substring extraction, pattern replacement, and&lt;br /&gt;	indirect variable expansion&lt;br /&gt;new builtins: `disown' and `shopt'&lt;br /&gt;new variables: HISTIGNORE, SHELLOPTS, PIPESTATUS, DIRSTACK, GLOBIGNORE,&lt;br /&gt;	       MACHTYPE, BASH_VERSINFO&lt;br /&gt;special handling of many unused or redundant variables removed&lt;br /&gt;	(e.g., $notify, $glob_dot_filenames, $no_exit_on_failed_exec)&lt;br /&gt;dynamic loading of new builtin commands; many loadable examples provided&lt;br /&gt;new prompt expansions: \a, \e, \n, \H, \T, \@, \v, \V&lt;br /&gt;history and aliases available in shell scripts&lt;br /&gt;new readline variables: enable-keypad, mark-directories, input-meta,&lt;br /&gt;	visible-stats, disable-completion, comment-begin&lt;br /&gt;new readline commands to manipulate the mark and operate on the region&lt;br /&gt;new readline emacs mode commands and bindings for ksh-88 compatibility&lt;br /&gt;updated and extended builtins&lt;br /&gt;new DEBUG trap&lt;br /&gt;expanded (and now documented) restricted shell mode&lt;br /&gt;&lt;br /&gt;implementation stuff:	&lt;br /&gt;autoconf-based configuration&lt;br /&gt;nearly all of the bugs reported since version 1.14 have been fixed&lt;br /&gt;most builtins converted to use builtin `getopt' for consistency&lt;br /&gt;most builtins use -p option to display output in a reusable form&lt;br /&gt;	(for consistency)&lt;br /&gt;grammar tighter and smaller (66 reduce-reduce conflicts gone)&lt;br /&gt;lots of code now smaller and faster&lt;br /&gt;test suite greatly expanded&lt;br /&gt;&lt;br /&gt;B2) Are there any user-visible incompatibilities between bash-2.05b and&lt;br /&gt;    bash-1.14.7?&lt;br /&gt;&lt;br /&gt;There are a few incompatibilities between version 1.14.7 and version 2.05b.&lt;br /&gt;They are detailed in the file COMPAT in the bash distribution.  That file&lt;br /&gt;is not meant to be all-encompassing; send mail to bash-maintainers@gnu.org&lt;br /&gt;if if you find something that's not mentioned there.&lt;br /&gt;&lt;br /&gt;Section C:  Differences from other Unix shells&lt;br /&gt;&lt;br /&gt;C1) How does bash differ from sh, the Bourne shell?&lt;br /&gt;&lt;br /&gt;This is a non-comprehensive list of features that differentiate bash&lt;br /&gt;from the SVR4.2 shell.  The bash manual page explains these more&lt;br /&gt;completely.&lt;br /&gt;&lt;br /&gt;Things bash has that sh does not:&lt;br /&gt;	long invocation options&lt;br /&gt;	[+-]O invocation option&lt;br /&gt;	-l invocation option&lt;br /&gt;	`!' reserved word to invert pipeline return value&lt;br /&gt;	`time' reserved word to time pipelines and shell builtins&lt;br /&gt;	the `function' reserved word&lt;br /&gt;	the `select' compound command and reserved word&lt;br /&gt;	arithmetic for command: for ((expr1 ; expr2; expr3 )); do list; done&lt;br /&gt;	new $'...' and $"..." quoting&lt;br /&gt;	the $(...) form of command substitution&lt;br /&gt;	the $(&lt;filename) form of command substitution, equivalent to&lt;br /&gt;		$(cat filename)&lt;br /&gt;	the ${#param} parameter value length operator&lt;br /&gt;	the ${!param} indirect parameter expansion operator&lt;br /&gt;	the ${!param*} prefix expansion operator&lt;br /&gt;	the ${param:offset[:length]} parameter substring operator&lt;br /&gt;	the ${param/pat[/string]} parameter pattern substitution operator&lt;br /&gt;	expansions to perform substring removal (${p%[%]w}, ${p#[#]w})&lt;br /&gt;	expansion of positional parameters beyond $9 with ${num}&lt;br /&gt;	variables: BASH, BASH_VERSION, BASH_VERSINFO, UID, EUID, REPLY,&lt;br /&gt;		   TIMEFORMAT, PPID, PWD, OLDPWD, SHLVL, RANDOM, SECONDS,&lt;br /&gt;		   LINENO, HISTCMD, HOSTTYPE, OSTYPE, MACHTYPE, HOSTNAME,&lt;br /&gt;		   ENV, PS3, PS4, DIRSTACK, PIPESTATUS, HISTSIZE, HISTFILE,&lt;br /&gt;		   HISTFILESIZE, HISTCONTROL, HISTIGNORE, GLOBIGNORE, GROUPS,&lt;br /&gt;		   PROMPT_COMMAND, FCEDIT, FIGNORE, IGNOREEOF, INPUTRC,&lt;br /&gt;		   SHELLOPTS, OPTERR, HOSTFILE, TMOUT, FUNCNAME, histchars,&lt;br /&gt;		   auto_resume&lt;br /&gt;	DEBUG trap&lt;br /&gt;	ERR trap&lt;br /&gt;	variable arrays with new compound assignment syntax&lt;br /&gt;	redirections: &lt;&gt;, &amp;&gt;, &gt;|, &lt;&lt;&lt;, [n]&lt;&amp;word-, [n]&gt;&amp;word-&lt;br /&gt;	prompt string special char translation and variable expansion&lt;br /&gt;	auto-export of variables in initial environment&lt;br /&gt;	command search finds functions before builtins&lt;br /&gt;	bash return builtin will exit a file sourced with `.'&lt;br /&gt;	builtins: cd -/-L/-P, exec -l/-c/-a, echo -e/-E, hash -d/-l/-p/-t.&lt;br /&gt;		  export -n/-f/-p/name=value, pwd -L/-P,&lt;br /&gt;		  read -e/-p/-a/-t/-n/-d/-s/-u,&lt;br /&gt;		  readonly -a/-f/name=value, trap -l, set +o,&lt;br /&gt;		  set -b/-m/-o option/-h/-p/-B/-C/-H/-P,&lt;br /&gt;		  unset -f/-v, ulimit -m/-p/-u,&lt;br /&gt;		  type -a/-p/-t/-f/-P, suspend -f, kill -n,&lt;br /&gt;		  test -o optname/s1 == s2/s1 &lt; s2/s1 &gt; s2/-nt/-ot/-ef/-O/-G/-S&lt;br /&gt;	bash reads ~/.bashrc for interactive shells, $ENV for non-interactive&lt;br /&gt;	bash restricted shell mode is more extensive&lt;br /&gt;	bash allows functions and variables with the same name&lt;br /&gt;	brace expansion&lt;br /&gt;	tilde expansion&lt;br /&gt;	arithmetic expansion with $((...)) and `let' builtin&lt;br /&gt;	the `[[...]]' extended conditional command&lt;br /&gt;	process substitution&lt;br /&gt;	aliases and alias/unalias builtins&lt;br /&gt;	local variables in functions and `local' builtin&lt;br /&gt;	readline and command-line editing with programmable completion&lt;br /&gt;	command history and history/fc builtins&lt;br /&gt;	csh-like history expansion&lt;br /&gt;	other new bash builtins: bind, command, compgen, complete, builtin,&lt;br /&gt;				 declare/typeset, dirs, enable, fc, help,&lt;br /&gt;				 history, logout, popd, pushd, disown, shopt,&lt;br /&gt;				 printf&lt;br /&gt;	exported functions&lt;br /&gt;	filename generation when using output redirection (command &gt;a*)&lt;br /&gt;	POSIX.2-style globbing character classes&lt;br /&gt;	POSIX.2-style globbing equivalence classes&lt;br /&gt;	POSIX.2-style globbing collating symbols&lt;br /&gt;	egrep-like extended pattern matching operators&lt;br /&gt;	case-insensitive pattern matching and globbing&lt;br /&gt;	variable assignments preceding commands affect only that command,&lt;br /&gt;		even for builtins and functions&lt;br /&gt;	posix mode&lt;br /&gt;	redirection to /dev/fd/N, /dev/stdin, /dev/stdout, /dev/stderr,&lt;br /&gt;		/dev/tcp/host/port, /dev/udp/host/port&lt;br /&gt;&lt;br /&gt;Things sh has that bash does not:&lt;br /&gt;	uses variable SHACCT to do shell accounting&lt;br /&gt;	includes `stop' builtin (bash can use alias stop='kill -s STOP')&lt;br /&gt;	`newgrp' builtin&lt;br /&gt;	turns on job control if called as `jsh'&lt;br /&gt;	$TIMEOUT (like bash $TMOUT)&lt;br /&gt;	`^' is a synonym for `|'&lt;br /&gt;	new SVR4.2 sh builtins: mldmode, priv&lt;br /&gt;&lt;br /&gt;Implementation differences:&lt;br /&gt;	redirection to/from compound commands causes sh to create a subshell&lt;br /&gt;	bash does not allow unbalanced quotes; sh silently inserts them at EOF&lt;br /&gt;	bash does not mess with signal 11&lt;br /&gt;	sh sets (euid, egid) to (uid, gid) if -p not supplied and uid &lt; 100&lt;br /&gt;	bash splits only the results of expansions on IFS, using POSIX.2&lt;br /&gt;		field splitting rules; sh splits all words on IFS&lt;br /&gt;	sh does not allow MAILCHECK to be unset (?)&lt;br /&gt;	sh does not allow traps on SIGALRM or SIGCHLD&lt;br /&gt;	bash allows multiple option arguments when invoked (e.g. -x -v);&lt;br /&gt;		sh allows only a single option argument (`sh -x -v' attempts&lt;br /&gt;		to open a file named `-v', and, on SunOS 4.1.4, dumps core.&lt;br /&gt;		On Solaris 2.4 and earlier versions, sh goes into an infinite&lt;br /&gt;		loop.)&lt;br /&gt;	sh exits a script if any builtin fails; bash exits only if one of&lt;br /&gt;		the POSIX.2 `special' builtins fails&lt;br /&gt;&lt;br /&gt;C2)  How does bash differ from the Korn shell, version ksh88?&lt;br /&gt;&lt;br /&gt;Things bash has or uses that ksh88 does not:&lt;br /&gt;	long invocation options&lt;br /&gt;	[-+]O invocation option&lt;br /&gt;	-l invocation option&lt;br /&gt;	`!' reserved word&lt;br /&gt;	arithmetic for command: for ((expr1 ; expr2; expr3 )); do list; done&lt;br /&gt;	arithmetic in largest machine-supported size (intmax_t)&lt;br /&gt;	posix mode and posix conformance&lt;br /&gt;	command hashing&lt;br /&gt;	tilde expansion for assignment statements that look like $PATH&lt;br /&gt;	process substitution with named pipes if /dev/fd is not available&lt;br /&gt;	the ${!param} indirect parameter expansion operator&lt;br /&gt;	the ${!param*} prefix expansion operator&lt;br /&gt;	the ${param:offset[:length]} parameter substring operator&lt;br /&gt;	the ${param/pat[/string]} parameter pattern substitution operator&lt;br /&gt;	variables: BASH, BASH_VERSION, BASH_VERSINFO, UID, EUID, SHLVL,&lt;br /&gt;		   TIMEFORMAT, HISTCMD, HOSTTYPE, OSTYPE, MACHTYPE,&lt;br /&gt;		   HISTFILESIZE, HISTIGNORE, HISTCONTROL, PROMPT_COMMAND,&lt;br /&gt;		   IGNOREEOF, FIGNORE, INPUTRC, HOSTFILE, DIRSTACK,&lt;br /&gt;		   PIPESTATUS, HOSTNAME, OPTERR, SHELLOPTS, GLOBIGNORE,&lt;br /&gt;		   GROUPS, FUNCNAME, histchars, auto_resume&lt;br /&gt;	prompt expansion with backslash escapes and command substitution&lt;br /&gt;	redirection: &amp;&gt; (stdout and stderr), &lt;&lt;&lt;, [n]&lt;&amp;word-, [n]&gt;&amp;word-&lt;br /&gt;	more extensive and extensible editing and programmable completion&lt;br /&gt;	builtins: bind, builtin, command, declare, dirs, echo -e/-E, enable,&lt;br /&gt;		  exec -l/-c/-a, fc -s, export -n/-f/-p, hash, help, history,&lt;br /&gt;		  jobs -x/-r/-s, kill -s/-n/-l, local, logout, popd, pushd,&lt;br /&gt;		  read -e/-p/-a/-t/-n/-d/-s, readonly -a/-n/-f/-p,&lt;br /&gt;		  set -o braceexpand/-o histexpand/-o interactive-comments/&lt;br /&gt;		  -o notify/-o physical/-o posix/-o hashall/-o onecmd/&lt;br /&gt;		  -h/-B/-C/-b/-H/-P, set +o, suspend, trap -l, type,&lt;br /&gt;		  typeset -a/-F/-p, ulimit -u, umask -S, alias -p, shopt,&lt;br /&gt;		  disown, printf, complete, compgen&lt;br /&gt;	`!' csh-style history expansion&lt;br /&gt;	POSIX.2-style globbing character classes&lt;br /&gt;	POSIX.2-style globbing equivalence classes&lt;br /&gt;	POSIX.2-style globbing collating symbols&lt;br /&gt;	egrep-like extended pattern matching operators&lt;br /&gt;	case-insensitive pattern matching and globbing&lt;br /&gt;	`**' arithmetic operator to do exponentiation&lt;br /&gt;	redirection to /dev/fd/N, /dev/stdin, /dev/stdout, /dev/stderr&lt;br /&gt;	arrays of unlimited size&lt;br /&gt;	TMOUT is default timeout for `read' and `select'&lt;br /&gt;&lt;br /&gt;Things ksh88 has or uses that bash does not:&lt;br /&gt;	tracked aliases (alias -t)&lt;br /&gt;	variables: ERRNO, FPATH, EDITOR, VISUAL&lt;br /&gt;	co-processes (|&amp;, &gt;&amp;p, &lt;&amp;p)&lt;br /&gt;	weirdly-scoped functions&lt;br /&gt;	typeset +f to list all function names without definitions&lt;br /&gt;	text of command history kept in a file, not memory&lt;br /&gt;	builtins: alias -x, cd old new, fc -e -, newgrp, print,&lt;br /&gt;		  read -p/-s/var?prompt, set -A/-o gmacs/&lt;br /&gt;		  -o bgnice/-o markdirs/-o nolog/-o trackall/-o viraw/-s,&lt;br /&gt;		  typeset -H/-L/-R/-Z/-A/-ft/-fu/-fx/-l/-u/-t, whence&lt;br /&gt;	using environment to pass attributes of exported variables&lt;br /&gt;	arithmetic evaluation done on arguments to some builtins&lt;br /&gt;	reads .profile from $PWD when invoked as login shell&lt;br /&gt;&lt;br /&gt;Implementation differences:&lt;br /&gt;	ksh runs last command of a pipeline in parent shell context&lt;br /&gt;	bash has brace expansion by default (ksh88 compile-time option)&lt;br /&gt;	bash has fixed startup file for all interactive shells; ksh reads $ENV&lt;br /&gt;	bash has exported functions&lt;br /&gt;	bash command search finds functions before builtins&lt;br /&gt;	bash waits for all commands in pipeline to exit before returning status&lt;br /&gt;	emacs-mode editing has some slightly different key bindings&lt;br /&gt;&lt;br /&gt;C3)  Which new features in ksh-93 are not in bash, and which are?&lt;br /&gt;&lt;br /&gt;New things in ksh-93 not in bash-2.05b:&lt;br /&gt;	associative arrays&lt;br /&gt;	floating point arithmetic and variables&lt;br /&gt;	math library functions&lt;br /&gt;	${!name[sub]} name of subscript for associative array&lt;br /&gt;	`.' is allowed in variable names to create a hierarchical namespace&lt;br /&gt;	more extensive compound assignment syntax&lt;br /&gt;	discipline functions&lt;br /&gt;	`sleep' and `getconf' builtins (bash has loadable versions)&lt;br /&gt;	typeset -n and `nameref' variables&lt;br /&gt;	KEYBD trap&lt;br /&gt;	variables: .sh.edchar, .sh.edmode, .sh.edcol, .sh.edtext, .sh.version,&lt;br /&gt;		   .sh.name, .sh.subscript, .sh.value, .sh.match, HISTEDIT&lt;br /&gt;	backreferences in pattern matching (\N)&lt;br /&gt;	`&amp;' operator in pattern lists for matching&lt;br /&gt;	print -f (bash uses printf)&lt;br /&gt;	`fc' has been renamed to `hist'&lt;br /&gt;	`.' can execute shell functions&lt;br /&gt;	exit statuses between 0 and 255&lt;br /&gt;	set -o pipefail&lt;br /&gt;	`+=' variable assignment operator&lt;br /&gt;	FPATH and PATH mixing&lt;br /&gt;	getopts -a&lt;br /&gt;	-I invocation option&lt;br /&gt;	DEBUG trap now executed before each simple command, instead of after&lt;br /&gt;	printf %H, %P, %T, %Z modifiers, output base for %d&lt;br /&gt;	lexical scoping for local variables in `ksh' functions&lt;br /&gt;	no scoping for local variables in `POSIX' functions&lt;br /&gt;&lt;br /&gt;New things in ksh-93 present in bash-2.05b:&lt;br /&gt;	[n]&lt;&amp;word- and [n]&gt;&amp;word- redirections (combination dup and close)&lt;br /&gt;        for (( expr1; expr2; expr3 )) ; do list; done - arithmetic for command&lt;br /&gt;        ?:, ++, --, `expr1 , expr2' arithmetic operators&lt;br /&gt;	expansions: ${!param}, ${param:offset[:len]}, ${param/pat[/str]},&lt;br /&gt;		    ${!param*}&lt;br /&gt;	compound array assignment&lt;br /&gt;	the `!' reserved word&lt;br /&gt;	loadable builtins -- but ksh uses `builtin' while bash uses `enable'&lt;br /&gt;	`command', `builtin', `disown' builtins&lt;br /&gt;	new $'...' and $"..." quoting&lt;br /&gt;	FIGNORE (but bash uses GLOBIGNORE), HISTCMD&lt;br /&gt;	set -o notify/-C&lt;br /&gt;	changes to kill builtin&lt;br /&gt;	read -A (bash uses read -a)&lt;br /&gt;        read -t/-d&lt;br /&gt;	trap -p&lt;br /&gt;	exec -c/-a&lt;br /&gt;	`.' restores the positional parameters when it completes&lt;br /&gt;	POSIX.2 `test'&lt;br /&gt;	umask -S&lt;br /&gt;	unalias -a&lt;br /&gt;	command and arithmetic substitution performed on PS1, PS4, and ENV&lt;br /&gt;	command name completion&lt;br /&gt;	ENV processed only for interactive shells&lt;br /&gt;&lt;br /&gt;Section D:  Why does bash do some things differently than other Unix shells?&lt;br /&gt;&lt;br /&gt;D1) Why does bash run a different version of `command' than&lt;br /&gt;    `which command' says it will?&lt;br /&gt;&lt;br /&gt;On many systems, `which' is actually a csh script that assumes&lt;br /&gt;you're running csh.  In tcsh, `which' and its cousin `where'&lt;br /&gt;are builtins.  On other Unix systems, `which' is a perl script&lt;br /&gt;that uses the PATH environment variable.&lt;br /&gt;&lt;br /&gt;The csh script version reads the csh startup files from your&lt;br /&gt;home directory and uses those to determine which `command' will&lt;br /&gt;be invoked.  Since bash doesn't use any of those startup files,&lt;br /&gt;there's a good chance that your bash environment differs from&lt;br /&gt;your csh environment.  The bash `type' builtin does everything&lt;br /&gt;`which' does, and will report correct results for the running&lt;br /&gt;shell.  If you're really wedded to the name `which', try adding&lt;br /&gt;the following function definition to your .bashrc:&lt;br /&gt;&lt;br /&gt;	which()&lt;br /&gt;	{&lt;br /&gt;		builtin type "$@"&lt;br /&gt;	}&lt;br /&gt;&lt;br /&gt;If you're moving from tcsh and would like to bring `where' along&lt;br /&gt;as well, use this function:&lt;br /&gt;&lt;br /&gt;	where()&lt;br /&gt;	{&lt;br /&gt;		builtin type -a "$@"&lt;br /&gt;	}&lt;br /&gt;&lt;br /&gt;D2) Why doesn't bash treat brace expansions exactly like csh?&lt;br /&gt;&lt;br /&gt;The only difference between bash and csh brace expansion is that&lt;br /&gt;bash requires a brace expression to contain at least one unquoted&lt;br /&gt;comma if it is to be expanded.  Any brace-surrounded word not&lt;br /&gt;containing an unquoted comma is left unchanged by the brace&lt;br /&gt;expansion code.  This affords the greatest degree of sh&lt;br /&gt;compatibility. &lt;br /&gt;&lt;br /&gt;Bash, ksh, zsh, and pd-ksh all implement brace expansion this way. &lt;br /&gt;&lt;br /&gt;D3) Why doesn't bash have csh variable modifiers?&lt;br /&gt;&lt;br /&gt;Posix has specified a more powerful, albeit somewhat more cryptic,&lt;br /&gt;mechanism cribbed from ksh, and bash implements it.&lt;br /&gt;&lt;br /&gt;${parameter%word}&lt;br /&gt;        Remove smallest suffix pattern.  The WORD is expanded to produce&lt;br /&gt;        a pattern.  It then expands to the value of PARAMETER, with the&lt;br /&gt;        smallest portion of the suffix matched by the pattern deleted.&lt;br /&gt;&lt;br /&gt;        x=file.c&lt;br /&gt;        echo ${x%.c}.o&lt;br /&gt;        --&gt;file.o&lt;br /&gt;&lt;br /&gt;${parameter%%word}&lt;br /&gt;&lt;br /&gt;        Remove largest suffix pattern.  The WORD is expanded to produce&lt;br /&gt;        a pattern.  It then expands to the value of PARAMETER, with the&lt;br /&gt;        largest portion of the suffix matched by the pattern deleted.&lt;br /&gt;&lt;br /&gt;        x=posix/src/std&lt;br /&gt;        echo ${x%%/*}&lt;br /&gt;        --&gt;posix&lt;br /&gt;&lt;br /&gt;${parameter#word}&lt;br /&gt;        Remove smallest prefix pattern.  The WORD is expanded to produce&lt;br /&gt;        a pattern.  It then expands to the value of PARAMETER, with the&lt;br /&gt;        smallest portion of the prefix matched by the pattern deleted.&lt;br /&gt;&lt;br /&gt;        x=$HOME/src/cmd&lt;br /&gt;        echo ${x#$HOME}&lt;br /&gt;        --&gt;/src/cmd&lt;br /&gt;&lt;br /&gt;${parameter##word}&lt;br /&gt;        Remove largest prefix pattern.  The WORD is expanded to produce&lt;br /&gt;        a pattern.  It then expands to the value of PARAMETER, with the&lt;br /&gt;        largest portion of the prefix matched by the pattern deleted.&lt;br /&gt;&lt;br /&gt;        x=/one/two/three&lt;br /&gt;        echo ${x##*/}&lt;br /&gt;        --&gt;three&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Given&lt;br /&gt;	a=/a/b/c/d&lt;br /&gt;	b=b.xxx&lt;br /&gt;&lt;br /&gt;	csh			bash		result&lt;br /&gt;	---			----		------&lt;br /&gt;	$a:h			${a%/*}		   /a/b/c&lt;br /&gt;	$a:t			${a##*/}	   d&lt;br /&gt;	$b:r			${b%.*}		   b&lt;br /&gt;	$b:e			${b##*.}	   xxx&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;D4) How can I make my csh aliases work when I convert to bash?&lt;br /&gt;&lt;br /&gt;Bash uses a different syntax to support aliases than csh does. &lt;br /&gt;The details can be found in the documentation.  We have provided&lt;br /&gt;a shell script which does most of the work of conversion for you;&lt;br /&gt;this script can be found in ./examples/misc/aliasconv.sh.  Here is&lt;br /&gt;how you use it:&lt;br /&gt;  &lt;br /&gt;Start csh in the normal way for you.  (e.g., `csh')&lt;br /&gt;  &lt;br /&gt;Pipe the output of `alias' through `aliasconv.sh', saving the&lt;br /&gt;results into `bash_aliases':&lt;br /&gt;  &lt;br /&gt;	alias | bash aliasconv.sh &gt;bash_aliases&lt;br /&gt;  &lt;br /&gt;Edit `bash_aliases', carefully reading through any created&lt;br /&gt;functions.  You will need to change the names of some csh specific&lt;br /&gt;variables to the bash equivalents.  The script converts $cwd to&lt;br /&gt;$PWD, $term to $TERM, $home to $HOME, $user to $USER, and $prompt&lt;br /&gt;to $PS1.  You may also have to add quotes to avoid unwanted&lt;br /&gt;expansion.&lt;br /&gt;&lt;br /&gt;For example, the csh alias:&lt;br /&gt;  &lt;br /&gt;	alias cd 'cd \!*; echo $cwd'&lt;br /&gt;  &lt;br /&gt;is converted to the bash function:&lt;br /&gt;&lt;br /&gt;	cd () { command cd "$@"; echo $PWD ; }&lt;br /&gt;&lt;br /&gt;The only thing that needs to be done is to quote $PWD:&lt;br /&gt;  &lt;br /&gt;	cd () { command cd "$@"; echo "$PWD" ; }&lt;br /&gt;  &lt;br /&gt;Merge the edited file into your ~/.bashrc.&lt;br /&gt;&lt;br /&gt;There is an additional, more ambitious, script in&lt;br /&gt;examples/misc/cshtobash that attempts to convert your entire csh&lt;br /&gt;environment to its bash equivalent.  This script can be run as&lt;br /&gt;simply `cshtobash' to convert your normal interactive&lt;br /&gt;environment, or as `cshtobash ~/.login' to convert your login&lt;br /&gt;environment. &lt;br /&gt;&lt;br /&gt;D5) How can I pipe standard output and standard error from one command to&lt;br /&gt;    another, like csh does with `|&amp;'?&lt;br /&gt;&lt;br /&gt;Use&lt;br /&gt;	command 2&gt;&amp;1 | command2&lt;br /&gt;&lt;br /&gt;The key is to remember that piping is performed before redirection, so&lt;br /&gt;file descriptor 1 points to the pipe when it is duplicated onto file&lt;br /&gt;descriptor 2.&lt;br /&gt;&lt;br /&gt;D6) Now that I've converted from ksh to bash, are there equivalents to&lt;br /&gt;    ksh features like autoloaded functions and the `whence' command?&lt;br /&gt;&lt;br /&gt;There are features in ksh-88 and ksh-93 that do not have direct bash&lt;br /&gt;equivalents.  Most, however, can be emulated with very little trouble.&lt;br /&gt;&lt;br /&gt;ksh-88 feature		Bash equivalent&lt;br /&gt;--------------		---------------&lt;br /&gt;compiled-in aliases	set up aliases in .bashrc; some ksh aliases are&lt;br /&gt;			bash builtins (hash, history, type)&lt;br /&gt;coprocesses		named pipe pairs (one for read, one for write)&lt;br /&gt;typeset +f		declare -F&lt;br /&gt;cd, print, whence	function substitutes in examples/functions/kshenv&lt;br /&gt;autoloaded functions	examples/functions/autoload is the same as typeset -fu&lt;br /&gt;read var?prompt		read -p prompt var&lt;br /&gt;&lt;br /&gt;ksh-93 feature		Bash equivalent&lt;br /&gt;--------------		---------------&lt;br /&gt;sleep, getconf		Bash has loadable versions in examples/loadables&lt;br /&gt;${.sh.version}		$BASH_VERSION&lt;br /&gt;print -f		printf&lt;br /&gt;hist			alias hist=fc&lt;br /&gt;$HISTEDIT		$FCEDIT&lt;br /&gt;&lt;br /&gt;Section E:  How can I get bash to do certain things, and why does bash do&lt;br /&gt;	    things the way it does?&lt;br /&gt;&lt;br /&gt;E1) Why is the bash builtin `test' slightly different from /bin/test?&lt;br /&gt;&lt;br /&gt;The specific example used here is [ ! x -o x ], which is false.&lt;br /&gt;&lt;br /&gt;Bash's builtin `test' implements the Posix.2 spec, which can be&lt;br /&gt;summarized as follows (the wording is due to David Korn):&lt;br /&gt;   &lt;br /&gt;Here is the set of rules for processing test arguments.&lt;br /&gt;  &lt;br /&gt;    0 Args: False&lt;br /&gt;    1 Arg:  True iff argument is not null.&lt;br /&gt;    2 Args: If first arg is !, True iff second argument is null.&lt;br /&gt;	    If first argument is unary, then true if unary test is true&lt;br /&gt;	    Otherwise error.&lt;br /&gt;    3 Args: If second argument is a binary operator, do binary test of $1 $3&lt;br /&gt;	    If first argument is !, negate two argument test of $2 $3&lt;br /&gt;	    If first argument is `(' and third argument is `)', do the&lt;br /&gt;	    one-argument test of the second argument.&lt;br /&gt;	    Otherwise error.&lt;br /&gt;    4 Args: If first argument is !, negate three argument test of $2 $3 $4.&lt;br /&gt;	    Otherwise unspecified&lt;br /&gt;    5 or more Args: unspecified.  (Historical shells would use their&lt;br /&gt;    current algorithm).&lt;br /&gt;   &lt;br /&gt;The operators -a and -o are considered binary operators for the purpose&lt;br /&gt;of the 3 Arg case.&lt;br /&gt;   &lt;br /&gt;As you can see, the test becomes (not (x or x)), which is false.&lt;br /&gt;&lt;br /&gt;E2) Why does bash sometimes say `Broken pipe'?&lt;br /&gt;&lt;br /&gt;If a sequence of commands appears in a pipeline, and one of the&lt;br /&gt;reading commands finishes before the writer has finished, the&lt;br /&gt;writer receives a SIGPIPE signal.  Many other shells special-case&lt;br /&gt;SIGPIPE as an exit status in the pipeline and do not report it. &lt;br /&gt;For example, in:&lt;br /&gt;  &lt;br /&gt;      ps -aux | head&lt;br /&gt;  &lt;br /&gt;`head' can finish before `ps' writes all of its output, and ps&lt;br /&gt;will try to write on a pipe without a reader.  In that case, bash&lt;br /&gt;will print `Broken pipe' to stderr when ps is killed by a&lt;br /&gt;SIGPIPE. &lt;br /&gt;&lt;br /&gt;You can build a version of bash that will not report SIGPIPE errors&lt;br /&gt;by uncommenting the definition of DONT_REPORT_SIGPIPE in the file&lt;br /&gt;config-top.h.&lt;br /&gt;&lt;br /&gt;E3) When I have terminal escape sequences in my prompt, why does bash&lt;br /&gt;    wrap lines at the wrong column?&lt;br /&gt;&lt;br /&gt;Readline, the line editing library that bash uses, does not know&lt;br /&gt;that the terminal escape sequences do not take up space on the&lt;br /&gt;screen.  The redisplay code assumes, unless told otherwise, that&lt;br /&gt;each character in the prompt is a `printable' character that&lt;br /&gt;takes up one character position on the screen. &lt;br /&gt;&lt;br /&gt;You can use the bash prompt expansion facility (see the PROMPTING&lt;br /&gt;section in the manual page) to tell readline that sequences of&lt;br /&gt;characters in the prompt strings take up no screen space. &lt;br /&gt;&lt;br /&gt;Use the \[ escape to begin a sequence of non-printing characters,&lt;br /&gt;and the \] escape to signal the end of such a sequence. &lt;br /&gt;&lt;br /&gt;E4) If I pipe the output of a command into `read variable', why doesn't&lt;br /&gt;    the output show up in $variable when the read command finishes?&lt;br /&gt;&lt;br /&gt;This has to do with the parent-child relationship between Unix&lt;br /&gt;processes.  It affects all commands run in pipelines, not just&lt;br /&gt;simple calls to `read'.  For example, piping a command's output&lt;br /&gt;into a `while' loop that repeatedly calls `read' will result in&lt;br /&gt;the same behavior.&lt;br /&gt;&lt;br /&gt;Each element of a pipeline runs in a separate process, a child of&lt;br /&gt;the shell running the pipeline.  A subprocess cannot affect its&lt;br /&gt;parent's environment.  When the `read' command sets the variable&lt;br /&gt;to the input, that variable is set only in the subshell, not the&lt;br /&gt;parent shell.  When the subshell exits, the value of the variable&lt;br /&gt;is lost. &lt;br /&gt;&lt;br /&gt;Many pipelines that end with `read variable' can be converted&lt;br /&gt;into command substitutions, which will capture the output of&lt;br /&gt;a specified command.  The output can then be assigned to a&lt;br /&gt;variable:&lt;br /&gt;&lt;br /&gt;	grep ^gnu /usr/lib/news/active | wc -l | read ngroup&lt;br /&gt;&lt;br /&gt;can be converted into&lt;br /&gt;&lt;br /&gt;	ngroup=$(grep ^gnu /usr/lib/news/active | wc -l)&lt;br /&gt;&lt;br /&gt;This does not, unfortunately, work to split the text among&lt;br /&gt;multiple variables, as read does when given multiple variable&lt;br /&gt;arguments.  If you need to do this, you can either use the&lt;br /&gt;command substitution above to read the output into a variable&lt;br /&gt;and chop up the variable using the bash pattern removal&lt;br /&gt;expansion operators or use some variant of the following&lt;br /&gt;approach.&lt;br /&gt;&lt;br /&gt;Say /usr/local/bin/ipaddr is the following shell script:&lt;br /&gt;&lt;br /&gt;#! /bin/sh&lt;br /&gt;host `hostname` | awk '/address/ {print $NF}'&lt;br /&gt;&lt;br /&gt;Instead of using&lt;br /&gt;&lt;br /&gt;	/usr/local/bin/ipaddr | read A B C D&lt;br /&gt;&lt;br /&gt;to break the local machine's IP address into separate octets, use&lt;br /&gt;&lt;br /&gt;	OIFS="$IFS"&lt;br /&gt;	IFS=.&lt;br /&gt;	set -- $(/usr/local/bin/ipaddr)&lt;br /&gt;	IFS="$OIFS"&lt;br /&gt;	A="$1" B="$2" C="$3" D="$4"&lt;br /&gt;&lt;br /&gt;Beware, however, that this will change the shell's positional&lt;br /&gt;parameters.  If you need them, you should save them before doing&lt;br /&gt;this.&lt;br /&gt;&lt;br /&gt;This is the general approach -- in most cases you will not need to&lt;br /&gt;set $IFS to a different value.&lt;br /&gt;&lt;br /&gt;Some other user-supplied alternatives include:&lt;br /&gt;&lt;br /&gt;read A B C D &lt;&lt; HERE&lt;br /&gt;    $(IFS=.; echo $(/usr/local/bin/ipaddr))&lt;br /&gt;HERE&lt;br /&gt;&lt;br /&gt;and, where process substitution is available,&lt;br /&gt;&lt;br /&gt;read A B C D &lt; &lt;(IFS=.; echo $(/usr/local/bin/ipaddr))&lt;br /&gt;&lt;br /&gt;E5) I have a bunch of shell scripts that use backslash-escaped characters&lt;br /&gt;    in arguments to `echo'.  Bash doesn't interpret these characters.  Why&lt;br /&gt;    not, and how can I make it understand them?&lt;br /&gt;&lt;br /&gt;This is the behavior of echo on most Unix System V machines.&lt;br /&gt;&lt;br /&gt;The bash builtin `echo' is modeled after the 9th Edition&lt;br /&gt;Research Unix version of `echo'.  It does not interpret&lt;br /&gt;backslash-escaped characters in its argument strings by default;&lt;br /&gt;it requires the use of the -e option to enable the&lt;br /&gt;interpretation.  The System V echo provides no way to disable the&lt;br /&gt;special characters; the bash echo has a -E option to disable&lt;br /&gt;them. &lt;br /&gt;&lt;br /&gt;There is a configuration option that will make bash behave like&lt;br /&gt;the System V echo and interpret things like `\t' by default.  Run&lt;br /&gt;configure with the --enable-xpg-echo-default option to turn this&lt;br /&gt;on.  Be aware that this will cause some of the tests run when you&lt;br /&gt;type `make tests' to fail.&lt;br /&gt;&lt;br /&gt;There is a shell option, `xpg_echo', settable with `shopt', that will&lt;br /&gt;change the behavior of echo at runtime.  Enabling this option turns&lt;br /&gt;on expansion of backslash-escape sequences.&lt;br /&gt;&lt;br /&gt;E6) Why doesn't a while or for loop get suspended when I type ^Z?&lt;br /&gt;&lt;br /&gt;This is a consequence of how job control works on Unix.  The only&lt;br /&gt;thing that can be suspended is the process group.  This is a single&lt;br /&gt;command or pipeline of commands that the shell forks and executes.&lt;br /&gt;&lt;br /&gt;When you run a while or for loop, the only thing that the shell forks&lt;br /&gt;and executes are any commands in the while loop test and commands in&lt;br /&gt;the loop bodies.  These, therefore, are the only things that can be&lt;br /&gt;suspended when you type ^Z.&lt;br /&gt;&lt;br /&gt;If you want to be able to stop the entire loop, you need to put it&lt;br /&gt;within parentheses, which will force the loop into a subshell that&lt;br /&gt;may be stopped (and subsequently restarted) as a single unit.&lt;br /&gt;&lt;br /&gt;E7) What about empty for loops in Makefiles?&lt;br /&gt;&lt;br /&gt;It's fairly common to see constructs like this in automatically-generated&lt;br /&gt;Makefiles:&lt;br /&gt;&lt;br /&gt;SUBDIRS = @SUBDIRS@&lt;br /&gt;&lt;br /&gt;	...&lt;br /&gt;&lt;br /&gt;subdirs-clean:&lt;br /&gt;	for d in ${SUBDIRS}; do \&lt;br /&gt;		( cd $$d &amp;&amp; ${MAKE} ${MFLAGS} clean ) \&lt;br /&gt;	done&lt;br /&gt;&lt;br /&gt;When SUBDIRS is empty, this results in a command like this being passed to&lt;br /&gt;bash:&lt;br /&gt;&lt;br /&gt;	for d in ; do&lt;br /&gt;		( cd $d &amp;&amp; ${MAKE} ${MFLAGS} clean )&lt;br /&gt;	done&lt;br /&gt;&lt;br /&gt;In versions of bash before bash-2.05a, this was a syntax error.  If the&lt;br /&gt;reserved word `in' was present, a word must follow it before the semicolon&lt;br /&gt;or newline.  The language in the manual page referring to the list of words&lt;br /&gt;being empty referred to the list after it is expanded.  These versions of&lt;br /&gt;bash required that there be at least one word following the `in' when the&lt;br /&gt;construct was parsed.&lt;br /&gt;&lt;br /&gt;The idiomatic Makefile solution is something like:&lt;br /&gt;&lt;br /&gt;SUBDIRS = @SUBDIRS@&lt;br /&gt;&lt;br /&gt;subdirs-clean:&lt;br /&gt;	subdirs=$SUBDIRS ; for d in $$subdirs; do \&lt;br /&gt;		( cd $$d &amp;&amp; ${MAKE} ${MFLAGS} clean ) \&lt;br /&gt;	done&lt;br /&gt;&lt;br /&gt;The latest drafts of the updated POSIX standard have changed this:  the&lt;br /&gt;word list is no longer required.  Bash versions 2.05a and later accept&lt;br /&gt;the new syntax.&lt;br /&gt;&lt;br /&gt;E8) Why does the arithmetic evaluation code complain about `08'?&lt;br /&gt;&lt;br /&gt;The bash arithmetic evaluation code (used for `let', $(()), (()), and in&lt;br /&gt;other places), interprets a leading `0' in numeric constants as denoting&lt;br /&gt;an octal number, and a leading `0x' as denoting hexadecimal.  This is&lt;br /&gt;in accordance with the POSIX.2 spec, section 2.9.2.1, which states that&lt;br /&gt;arithmetic constants should be handled as signed long integers as defined&lt;br /&gt;by the ANSI/ISO C standard.&lt;br /&gt;&lt;br /&gt;The POSIX.2 interpretation committee has confirmed this:&lt;br /&gt;&lt;br /&gt;http://www.pasc.org/interps/unofficial/db/p1003.2/pasc-1003.2-173.html&lt;br /&gt;&lt;br /&gt;E9) Why does the pattern matching expression [A-Z]* match files beginning&lt;br /&gt;    with every letter except `z'?&lt;br /&gt;&lt;br /&gt;Bash-2.03, Bash-2.05 and later versions honor the current locale setting&lt;br /&gt;when processing ranges within pattern matching bracket expressions ([A-Z]). &lt;br /&gt;This is what POSIX.2 and SUSv3/XPG6 specify. &lt;br /&gt;&lt;br /&gt;The behavior of the matcher in bash-2.05 and later versions depends on the&lt;br /&gt;current LC_COLLATE setting.  Setting this variable to `C' or `POSIX' will&lt;br /&gt;result in the traditional behavior ([A-Z] matches all uppercase ASCII&lt;br /&gt;characters).  Many other locales, including the en_US locale (the default&lt;br /&gt;on many US versions of Linux) collate the upper and lower case letters like&lt;br /&gt;this:&lt;br /&gt;&lt;br /&gt;	AaBb...Zz&lt;br /&gt;&lt;br /&gt;which means that [A-Z] matches every letter except `z'.  Others collate like&lt;br /&gt;&lt;br /&gt;	aAbBcC...zZ&lt;br /&gt;&lt;br /&gt;which means that [A-Z] matches every letter except `a'.&lt;br /&gt;&lt;br /&gt;The portable way to specify upper case letters is [:upper:] instead of&lt;br /&gt;A-Z; lower case may be specified as [:lower:] instead of a-z.&lt;br /&gt;&lt;br /&gt;Look at the manual pages for setlocale(3), strcoll(3), and, if it is&lt;br /&gt;present, locale(1).  If you have locale(1), you can use it to find&lt;br /&gt;your current locale information even if you do not have any of the&lt;br /&gt;LC_ variables set.&lt;br /&gt;&lt;br /&gt;My advice is to put&lt;br /&gt;&lt;br /&gt;	export LC_COLLATE=C&lt;br /&gt;&lt;br /&gt;into /etc/profile and inspect any shell scripts run from cron for&lt;br /&gt;constructs like [A-Z].  This will prevent things like&lt;br /&gt;&lt;br /&gt;	rm [A-Z]*&lt;br /&gt;&lt;br /&gt;from removing every file in the current directory except those beginning&lt;br /&gt;with `z' and still allow individual users to change the collation order.&lt;br /&gt;Users may put the above command into their own profiles as well, of course.&lt;br /&gt;&lt;br /&gt;E10) Why does `cd //' leave $PWD as `//'?&lt;br /&gt;&lt;br /&gt;POSIX.2, in its description of `cd', says that *three* or more leading&lt;br /&gt;slashes may be replaced with a single slash when canonicalizing the&lt;br /&gt;current working directory.&lt;br /&gt;&lt;br /&gt;This is, I presume, for historical compatibility.  Certain versions of&lt;br /&gt;Unix, and early network file systems, used paths of the form&lt;br /&gt;//hostname/path to access `path' on server `hostname'.&lt;br /&gt;&lt;br /&gt;E11) If I resize my xterm while another program is running, why doesn't bash&lt;br /&gt;     notice the change?&lt;br /&gt;&lt;br /&gt;This is another issue that deals with job control.&lt;br /&gt;&lt;br /&gt;The kernel maintains a notion of a current terminal process group.  Members&lt;br /&gt;of this process group (processes whose process group ID is equal to the&lt;br /&gt;current terminal process group ID) receive terminal-generated signals like&lt;br /&gt;SIGWINCH.  (For more details, see the JOB CONTROL section of the bash&lt;br /&gt;man page.)&lt;br /&gt;&lt;br /&gt;If a terminal is resized, the kernel sends SIGWINCH to each member of&lt;br /&gt;the terminal's current process group (the `foreground' process group).&lt;br /&gt;&lt;br /&gt;When bash is running with job control enabled, each pipeline (which may be&lt;br /&gt;a single command) is run in its own process group, different from bash's&lt;br /&gt;process group.  This foreground process group receives the SIGWINCH; bash&lt;br /&gt;does not.  Bash has no way of knowing that the terminal has been resized.&lt;br /&gt;&lt;br /&gt;There is a `checkwinsize' option, settable with the `shopt' builtin, that&lt;br /&gt;will cause bash to check the window size and adjust its idea of the&lt;br /&gt;terminal's dimensions each time a process stops or exits and returns control&lt;br /&gt;of the terminal to bash.  Enable it with `shopt -s checkwinsize'.&lt;br /&gt;&lt;br /&gt;E12) Why don't negative offsets in substring expansion work like I expect?&lt;br /&gt;&lt;br /&gt;When substring expansion of the form ${param:offset[:length} is used,&lt;br /&gt;an `offset' that evaluates to a number less than zero counts back from&lt;br /&gt;the end of the expanded value of $param.&lt;br /&gt;&lt;br /&gt;When a negative `offset' begins with a minus sign, however, unexpected things&lt;br /&gt;can happen.  Consider&lt;br /&gt;&lt;br /&gt;	a=12345678&lt;br /&gt;	echo ${a:-4}&lt;br /&gt;&lt;br /&gt;intending to print the last four characters of $a.  The problem is that&lt;br /&gt;${param:-word} already has a well-defined meaning: expand to word if the&lt;br /&gt;expanded value of param is unset or null, and $param otherwise.&lt;br /&gt;&lt;br /&gt;To use negative offsets that begin with a minus sign, separate the&lt;br /&gt;minus sign and the colon with a space.&lt;br /&gt;&lt;br /&gt;Section F:  Things to watch out for on certain Unix versions&lt;br /&gt;&lt;br /&gt;F1) Why can't I use command line editing in my `cmdtool'?&lt;br /&gt;&lt;br /&gt;The problem is `cmdtool' and bash fighting over the input.  When&lt;br /&gt;scrolling is enabled in a cmdtool window, cmdtool puts the tty in&lt;br /&gt;`raw mode' to permit command-line editing using the mouse for&lt;br /&gt;applications that cannot do it themselves.  As a result, bash and&lt;br /&gt;cmdtool each try to read keyboard input immediately, with neither&lt;br /&gt;getting enough of it to be useful.&lt;br /&gt;&lt;br /&gt;This mode also causes cmdtool to not implement many of the&lt;br /&gt;terminal functions and control sequences appearing in the&lt;br /&gt;`sun-cmd' termcap entry.  For a more complete explanation, see&lt;br /&gt;that file examples/suncmd.termcap in the bash distribution. &lt;br /&gt;&lt;br /&gt;`xterm' is a better choice, and gets along with bash much more&lt;br /&gt;smoothly.&lt;br /&gt;&lt;br /&gt;If you must use cmdtool, you can use the termcap description in&lt;br /&gt;examples/suncmd.termcap.  Set the TERMCAP variable to the terminal&lt;br /&gt;description contained in that file, i.e.&lt;br /&gt;&lt;br /&gt;TERMCAP='Mu|sun-cmd:am:bs:km:pt:li#34:co#80:cl=^L:ce=\E[K:cd=\E[J:rs=\E[s:'&lt;br /&gt;&lt;br /&gt;Then export TERMCAP and start a new cmdtool window from that shell.&lt;br /&gt;The bash command-line editing should behave better in the new&lt;br /&gt;cmdtool.  If this works, you can put the assignment to TERMCAP&lt;br /&gt;in your bashrc file.&lt;br /&gt;&lt;br /&gt;F2) I built bash on Solaris 2.  Why do globbing expansions and filename&lt;br /&gt;    completion chop off the first few characters of each filename?&lt;br /&gt;&lt;br /&gt;This is the consequence of building bash on SunOS 5 and linking&lt;br /&gt;with the libraries in /usr/ucblib, but using the definitions&lt;br /&gt;and structures from files in /usr/include. &lt;br /&gt;&lt;br /&gt;The actual conflict is between the dirent structure in&lt;br /&gt;/usr/include/dirent.h and the struct returned by the version of&lt;br /&gt;`readdir' in libucb.a (a 4.3-BSD style `struct direct'). &lt;br /&gt;&lt;br /&gt;Make sure you've got /usr/ccs/bin ahead of /usr/ucb in your $PATH&lt;br /&gt;when configuring and building bash.  This will ensure that you&lt;br /&gt;use /usr/ccs/bin/cc or acc instead of /usr/ucb/cc and that you&lt;br /&gt;link with libc before libucb. &lt;br /&gt;&lt;br /&gt;If you have installed the Sun C compiler, you may also need to&lt;br /&gt;put /usr/ccs/bin and /opt/SUNWspro/bin into your $PATH before&lt;br /&gt;/usr/ucb.&lt;br /&gt;&lt;br /&gt;F3) Why does bash dump core after I interrupt username completion or&lt;br /&gt;    `~user' tilde expansion on a machine running NIS?&lt;br /&gt;&lt;br /&gt;This is a famous and long-standing bug in the SunOS YP (sorry, NIS)&lt;br /&gt;client library, which is part of libc.&lt;br /&gt;&lt;br /&gt;The YP library code keeps static state -- a pointer into the data&lt;br /&gt;returned from the server.  When YP initializes itself (setpwent),&lt;br /&gt;it looks at this pointer and calls free on it if it's non-null. &lt;br /&gt;So far, so good. &lt;br /&gt;&lt;br /&gt;If one of the YP functions is interrupted during getpwent (the&lt;br /&gt;exact function is interpretwithsave()), and returns NULL, the&lt;br /&gt;pointer is freed without being reset to NULL, and the function&lt;br /&gt;returns.  The next time getpwent is called, it sees that this&lt;br /&gt;pointer is non-null, calls free, and the bash free() blows up&lt;br /&gt;because it's being asked to free freed memory. &lt;br /&gt;&lt;br /&gt;The traditional Unix mallocs allow memory to be freed multiple&lt;br /&gt;times; that's probably why this has never been fixed.  You can&lt;br /&gt;run configure with the `--without-gnu-malloc' option to use&lt;br /&gt;the C library malloc and avoid the problem.&lt;br /&gt;&lt;br /&gt;F4) I'm running SVR4.2.  Why is the line erased every time I type `@'?&lt;br /&gt;&lt;br /&gt;The `@' character is the default `line kill' character in most&lt;br /&gt;versions of System V, including SVR4.2.  You can change this&lt;br /&gt;character to whatever you want using `stty'.  For example, to&lt;br /&gt;change the line kill character to control-u, type&lt;br /&gt;&lt;br /&gt;	stty kill ^U&lt;br /&gt;&lt;br /&gt;where the `^' and `U' can be two separate characters.&lt;br /&gt;&lt;br /&gt;F5) Why does bash report syntax errors when my C News scripts use a&lt;br /&gt;    redirection before a subshell command?&lt;br /&gt;&lt;br /&gt;The actual command in question is something like&lt;br /&gt;&lt;br /&gt;	&lt; file ( command )&lt;br /&gt;&lt;br /&gt;According to the grammar given in the POSIX.2 standard, this construct&lt;br /&gt;is, in fact, a syntax error.  Redirections may only precede `simple&lt;br /&gt;commands'.  A subshell construct such as the above is one of the shell's&lt;br /&gt;`compound commands'.  A redirection may only follow a compound command.&lt;br /&gt;&lt;br /&gt;This affects the mechanical transformation of commands that use `cat'&lt;br /&gt;to pipe a file into a command (a favorite Useless-Use-Of-Cat topic on&lt;br /&gt;comp.unix.shell).  While most commands of the form&lt;br /&gt;&lt;br /&gt;	cat file | command&lt;br /&gt;&lt;br /&gt;can be converted to `&lt; file command', shell control structures such as&lt;br /&gt;loops and subshells require `command &lt; file'.&lt;br /&gt;&lt;br /&gt;The file CWRU/sh-redir-hack in the bash-2.05a distribution is an&lt;br /&gt;(unofficial) patch to parse.y that will modify the grammar to&lt;br /&gt;support this construct.  It will not apply with `patch'; you must&lt;br /&gt;modify parse.y by hand.  Note that if you apply this, you must&lt;br /&gt;recompile with -DREDIRECTION_HACK.  This introduces a large&lt;br /&gt;number of reduce/reduce conflicts into the shell grammar. &lt;br /&gt;&lt;br /&gt;F6) Why can't I use vi-mode editing on Red Hat Linux 6.1?&lt;br /&gt;&lt;br /&gt;The short answer is that Red Hat screwed up.&lt;br /&gt;&lt;br /&gt;The long answer is that they shipped an /etc/inputrc that only works&lt;br /&gt;for emacs mode editing, and then screwed all the vi users by setting&lt;br /&gt;INPUTRC to /etc/inputrc in /etc/profile.&lt;br /&gt;&lt;br /&gt;The short fix is to do one of the following: remove or rename&lt;br /&gt;/etc/inputrc, set INPUTRC=~/.inputrc in ~/.bashrc (or .bash_profile,&lt;br /&gt;but make sure you export it if you do), remove the assignment to&lt;br /&gt;INPUTRC from /etc/profile, add&lt;br /&gt;&lt;br /&gt;        set keymap emacs&lt;br /&gt;&lt;br /&gt;to the beginning of /etc/inputrc, or bracket the key bindings in&lt;br /&gt;/etc/inputrc with these lines&lt;br /&gt;&lt;br /&gt;	$if mode=emacs&lt;br /&gt;		[...]&lt;br /&gt;	$endif&lt;br /&gt;&lt;br /&gt;F7) Why do bash-2.05a and bash-2.05b fail to compile `printf.def' on&lt;br /&gt;    HP/UX 11.x?&lt;br /&gt;&lt;br /&gt;HP/UX's support for long double is imperfect at best.&lt;br /&gt;&lt;br /&gt;GCC will support it without problems, but the HP C library functions&lt;br /&gt;like strtold(3) and printf(3) don't actually work with long doubles.&lt;br /&gt;HP implemented a `long_double' type as a 4-element array of 32-bit&lt;br /&gt;ints, and that is what the library functions use.  The ANSI C&lt;br /&gt;`long double' type is a 128-bit floating point scalar.&lt;br /&gt;&lt;br /&gt;The easiest fix, until HP fixes things up, is to edit the generated&lt;br /&gt;config.h and #undef the HAVE_LONG_DOUBLE line.  After doing that,&lt;br /&gt;the compilation should complete successfully.&lt;br /&gt;&lt;br /&gt;Section G:  How can I get bash to do certain common things?&lt;br /&gt;&lt;br /&gt;G1) How can I get bash to read and display eight-bit characters?&lt;br /&gt;&lt;br /&gt;This is a process requiring several steps.&lt;br /&gt;&lt;br /&gt;First, you must ensure that the `physical' data path is a full eight&lt;br /&gt;bits.  For xterms, for example, the `vt100' resources `eightBitInput'&lt;br /&gt;and `eightBitOutput' should be set to `true'.&lt;br /&gt;&lt;br /&gt;Once you have set up an eight-bit path, you must tell the kernel and&lt;br /&gt;tty driver to leave the eighth bit of characters alone when processing&lt;br /&gt;keyboard input.  Use `stty' to do this:&lt;br /&gt;&lt;br /&gt;	stty cs8 -istrip -parenb&lt;br /&gt;&lt;br /&gt;For old BSD-style systems, you can use&lt;br /&gt;&lt;br /&gt;	stty pass8&lt;br /&gt;&lt;br /&gt;You may also need&lt;br /&gt;&lt;br /&gt;	stty even odd&lt;br /&gt;&lt;br /&gt;Finally, you need to tell readline that you will be inputting and&lt;br /&gt;displaying eight-bit characters.  You use readline variables to do&lt;br /&gt;this.  These variables can be set in your .inputrc or using the bash&lt;br /&gt;`bind' builtin.  Here's an example using `bind':&lt;br /&gt;&lt;br /&gt;	bash$ bind 'set convert-meta off'&lt;br /&gt;	bash$ bind 'set meta-flag on'&lt;br /&gt;	bash$ bind 'set output-meta on'&lt;br /&gt;&lt;br /&gt;The `set' commands between the single quotes may also be placed&lt;br /&gt;in ~/.inputrc.&lt;br /&gt;&lt;br /&gt;G2) How do I write a function `x' to replace builtin command `x', but&lt;br /&gt;    still invoke the command from within the function?&lt;br /&gt;&lt;br /&gt;This is why the `command' and `builtin' builtins exist.  The&lt;br /&gt;`command' builtin executes the command supplied as its first&lt;br /&gt;argument, skipping over any function defined with that name.  The&lt;br /&gt;`builtin' builtin executes the builtin command given as its first&lt;br /&gt;argument directly. &lt;br /&gt;&lt;br /&gt;For example, to write a function to replace `cd' that writes the&lt;br /&gt;hostname and current directory to an xterm title bar, use&lt;br /&gt;something like the following:&lt;br /&gt;&lt;br /&gt;	cd()&lt;br /&gt;	{&lt;br /&gt;		builtin cd "$@" &amp;&amp; xtitle "$HOST: $PWD"&lt;br /&gt;	}&lt;br /&gt;&lt;br /&gt;This could also be written using `command' instead of `builtin';&lt;br /&gt;the version above is marginally more efficient. &lt;br /&gt;&lt;br /&gt;G3) How can I find the value of a shell variable whose name is the value&lt;br /&gt;    of another shell variable?&lt;br /&gt;&lt;br /&gt;Versions of Bash newer than Bash-2.0 support this directly.  You can use &lt;br /&gt;&lt;br /&gt;	${!var}&lt;br /&gt;&lt;br /&gt;For example, the following sequence of commands will echo `z':&lt;br /&gt;&lt;br /&gt;	var1=var2&lt;br /&gt;	var2=z&lt;br /&gt;	echo ${!var1}&lt;br /&gt;&lt;br /&gt;For sh compatibility, use the `eval' builtin.  The important&lt;br /&gt;thing to remember is that `eval' expands the arguments you give&lt;br /&gt;it again, so you need to quote the parts of the arguments that&lt;br /&gt;you want `eval' to act on. &lt;br /&gt;&lt;br /&gt;For example, this expression prints the value of the last positional&lt;br /&gt;parameter:&lt;br /&gt;&lt;br /&gt;	eval echo \"\$\{$#\}\"&lt;br /&gt;&lt;br /&gt;The expansion of the quoted portions of this expression will be&lt;br /&gt;deferred until `eval' runs, while the `$#' will be expanded&lt;br /&gt;before `eval' is executed.  In versions of bash later than bash-2.0,&lt;br /&gt;&lt;br /&gt;	echo ${!#}&lt;br /&gt;&lt;br /&gt;does the same thing.&lt;br /&gt;&lt;br /&gt;This is not the same thing as ksh93 `nameref' variables, though the syntax&lt;br /&gt;is similar.  I may add namerefs in a future bash version.&lt;br /&gt;&lt;br /&gt;G4) How can I make the bash `time' reserved word print timing output that&lt;br /&gt;     looks like the output from my system's /usr/bin/time?&lt;br /&gt;&lt;br /&gt;The bash command timing code looks for a variable `TIMEFORMAT' and&lt;br /&gt;uses its value as a format string to decide how to display the&lt;br /&gt;timing statistics.&lt;br /&gt;&lt;br /&gt;The value of TIMEFORMAT is a string with `%' escapes expanded in a&lt;br /&gt;fashion similar in spirit to printf(3).  The manual page explains&lt;br /&gt;the meanings of the escape sequences in the format string.&lt;br /&gt;&lt;br /&gt;If TIMEFORMAT is not set, bash acts as if the following assignment had&lt;br /&gt;been performed:&lt;br /&gt;&lt;br /&gt;	TIMEFORMAT=$'\nreal\t%3lR\nuser\t%3lU\nsys\t%3lS'&lt;br /&gt;&lt;br /&gt;The POSIX.2 default time format (used by `time -p command') is&lt;br /&gt;&lt;br /&gt;	TIMEFORMAT=$'real %2R\nuser %2U\nsys %2S'&lt;br /&gt;&lt;br /&gt;The BSD /usr/bin/time format can be emulated with:&lt;br /&gt;&lt;br /&gt;	TIMEFORMAT=$'\t%1R real\t%1U user\t%1S sys'&lt;br /&gt;&lt;br /&gt;The System V /usr/bin/time format can be emulated with:&lt;br /&gt;&lt;br /&gt;	TIMEFORMAT=$'\nreal\t%1R\nuser\t%1U\nsys\t%1S'&lt;br /&gt;&lt;br /&gt;The ksh format can be emulated with:&lt;br /&gt;&lt;br /&gt;	TIMEFORMAT=$'\nreal\t%2lR\nuser\t%2lU\nsys\t%2lS'&lt;br /&gt;&lt;br /&gt;G5) How do I get the current directory into my prompt?&lt;br /&gt;&lt;br /&gt;Bash provides a number of backslash-escape sequences which are expanded&lt;br /&gt;when the prompt string (PS1 or PS2) is displayed.  The full list is in&lt;br /&gt;the manual page.&lt;br /&gt;&lt;br /&gt;The \w expansion gives the full pathname of the current directory, with&lt;br /&gt;a tilde (`~') substituted for the current value of $HOME.  The \W&lt;br /&gt;expansion gives the basename of the current directory.  To put the full&lt;br /&gt;pathname of the current directory into the path without any tilde&lt;br /&gt;subsitution, use $PWD.  Here are some examples:&lt;br /&gt;&lt;br /&gt;	PS1='\w$ '	# current directory with tilde&lt;br /&gt;	PS1='\W$ '	# basename of current directory&lt;br /&gt;	PS1='$PWD$ '	# full pathname of current directory&lt;br /&gt;&lt;br /&gt;The single quotes are important in the final example to prevent $PWD from&lt;br /&gt;being expanded when the assignment to PS1 is performed.&lt;br /&gt;&lt;br /&gt;G6) How can I rename "*.foo" to "*.bar"?&lt;br /&gt;&lt;br /&gt;Use the pattern removal functionality described in D3.  The following `for'&lt;br /&gt;loop will do the trick:&lt;br /&gt;&lt;br /&gt;	for f in *.foo; do&lt;br /&gt;		mv $f ${f%foo}bar&lt;br /&gt;	done&lt;br /&gt;&lt;br /&gt;G7) How can I translate a filename from uppercase to lowercase?&lt;br /&gt;&lt;br /&gt;The script examples/functions/lowercase, originally written by John DuBois,&lt;br /&gt;will do the trick.  The converse is left as an exercise.&lt;br /&gt;&lt;br /&gt;G8) How can I write a filename expansion (globbing) pattern that will match&lt;br /&gt;    all files in the current directory except "." and ".."?&lt;br /&gt;&lt;br /&gt;You must have set the `extglob' shell option using `shopt -s extglob' to use&lt;br /&gt;this:&lt;br /&gt;&lt;br /&gt;	echo .!(.|) *&lt;br /&gt;&lt;br /&gt;A solution that works without extended globbing is given in the Unix Shell&lt;br /&gt;FAQ, posted periodically to comp.unix.shell.&lt;br /&gt;&lt;br /&gt;Section H:  Where do I go from here?&lt;br /&gt;&lt;br /&gt;H1) How do I report bugs in bash, and where should I look for fixes and&lt;br /&gt;    advice?&lt;br /&gt;&lt;br /&gt;Use the `bashbug' script to report bugs.  It is built and&lt;br /&gt;installed at the same time as bash.  It provides a standard&lt;br /&gt;template for reporting a problem and automatically includes&lt;br /&gt;information about your configuration and build environment. &lt;br /&gt;&lt;br /&gt;`bashbug' sends its reports to bug-bash@gnu.org, which&lt;br /&gt;is a large mailing list gatewayed to the usenet newsgroup gnu.bash.bug. &lt;br /&gt;&lt;br /&gt;Bug fixes, answers to questions, and announcements of new releases&lt;br /&gt;are all posted to gnu.bash.bug.  Discussions concerning bash features&lt;br /&gt;and problems also take place there.&lt;br /&gt;&lt;br /&gt;To reach the bash maintainers directly, send mail to&lt;br /&gt;bash-maintainers@gnu.org.&lt;br /&gt;&lt;br /&gt;H2) What kind of bash documentation is there?&lt;br /&gt;&lt;br /&gt;First, look in the doc directory in the bash distribution.  It should&lt;br /&gt;contain at least the following files:&lt;br /&gt;&lt;br /&gt;bash.1		an extensive, thorough Unix-style manual page&lt;br /&gt;builtins.1	a manual page covering just bash builtin commands&lt;br /&gt;bashref.texi	a reference manual in GNU tex`info format&lt;br /&gt;bashref.info	an info version of the reference manual&lt;br /&gt;FAQ		this file&lt;br /&gt;article.ms	text of an article written for The Linux Journal&lt;br /&gt;readline.3	a man page describing readline&lt;br /&gt;&lt;br /&gt;Postscript, HTML, and ASCII files created from the above source are&lt;br /&gt;available in the documentation distribution.&lt;br /&gt;&lt;br /&gt;There is additional documentation available for anonymous FTP from host&lt;br /&gt;ftp.cwru.edu in the `pub/bash' directory.&lt;br /&gt;&lt;br /&gt;Cameron Newham and Bill Rosenblatt have written a book on bash, published&lt;br /&gt;by O'Reilly and Associates.  The book is based on Bill Rosenblatt's Korn&lt;br /&gt;Shell book.  The title is ``Learning the Bash Shell'', and the ISBN number&lt;br /&gt;is 1-56592-147-X.  Look for it in fine bookstores near you.  This book&lt;br /&gt;covers bash-1.14, but has an appendix describing some of the new features&lt;br /&gt;in bash-2.0.  &lt;br /&gt;&lt;br /&gt;A second edition of this book is available, published in January, 1998.&lt;br /&gt;The ISBN number is 1-56592-347-2.  Look for it in the same fine bookstores&lt;br /&gt;or on the web.&lt;br /&gt;&lt;br /&gt;The GNU Bash Reference Manual has been published as a printed book by&lt;br /&gt;Network Theory Ltd (Paperback, ISBN: 0-9541617-7-7, Feb 2003).  It covers&lt;br /&gt;bash-2.0 and is available from most online bookstores (see&lt;br /&gt;http://www.network-theory.co.uk/bash/manual/ for details).  The publisher&lt;br /&gt;will donate $1 to the Free Software Foundation for each copy sold. &lt;br /&gt;&lt;br /&gt;H3) What's coming in future versions?&lt;br /&gt;&lt;br /&gt;These are features I hope to include in a future version of bash.&lt;br /&gt;&lt;br /&gt;a better bash debugger (a minimally-tested version is included with bash-2.05b)&lt;br /&gt;associative arrays&lt;br /&gt;co-processes, but with a new-style syntax that looks like function declaration&lt;br /&gt;&lt;br /&gt;H4) What's on the bash `wish list' for future versions?&lt;br /&gt;&lt;br /&gt;These are features that may or may not appear in a future version of bash.&lt;br /&gt;&lt;br /&gt;breaking some of the shell functionality into embeddable libraries&lt;br /&gt;a module system like zsh's, using dynamic loading like builtins&lt;br /&gt;better internationalization using GNU `gettext'&lt;br /&gt;date-stamped command history&lt;br /&gt;a bash programmer's guide with a chapter on creating loadable builtins&lt;br /&gt;a better loadable interface to perl with access to the shell builtins and&lt;br /&gt;	variables (contributions gratefully accepted)&lt;br /&gt;ksh93-like `nameref' variables&lt;br /&gt;ksh93-like `+=' variable assignment operator&lt;br /&gt;ksh93-like `xx.yy' variables (including some of the .sh.* variables) and&lt;br /&gt;	associated disipline functions&lt;br /&gt;Some of the new ksh93 pattern matching operators, like backreferencing&lt;br /&gt;&lt;br /&gt;H5) When will the next release appear?&lt;br /&gt;&lt;br /&gt;The next version will appear sometime in 2003.  Never make predictions. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This document is Copyright 1995-2003 by Chester Ramey.&lt;br /&gt;&lt;br /&gt;Permission is hereby granted, without written agreement and&lt;br /&gt;without license or royalty fees, to use, copy, and distribute&lt;br /&gt;this document for any purpose, provided that the above copyright&lt;br /&gt;notice appears in all copies of this document and that the&lt;br /&gt;contents of this document remain unaltered.&lt;br /&gt;-- &lt;br /&gt;``The lyf so short, the craft so long to lerne.'' - Chaucer&lt;br /&gt;( ``Discere est Dolere'' -- chet )&lt;br /&gt;						Live...Laugh...Love&lt;br /&gt;Chet Ramey, ITS, CWRU    chet@po.cwru.edu    http://tiswww.tis.cwru.edu/~chet/&lt;br /&gt;-- &lt;br /&gt;``The lyf so short, the craft so long to lerne.'' - Chaucer&lt;br /&gt;( ``Discere est Dolere'' -- chet )&lt;br /&gt;						Live...Laugh...Love&lt;br /&gt;Chet Ramey, ITS, CWRU    chet@po.cwru.edu    http://tiswww.tis.cwru.edu/~chet/&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-2891241906697659551?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.faqs.org/faqs/unix-faq/shell/bash/' title='BASH Frequently-Asked Questions '/><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/2891241906697659551/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=2891241906697659551&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/2891241906697659551'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/2891241906697659551'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2008/05/bash-frequently-asked-questions.html' title='BASH Frequently-Asked Questions '/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-5261352036674750792</id><published>2008-05-28T13:26:00.000-04:00</published><updated>2008-05-28T13:27:51.837-04:00</updated><title type='text'>Csh Programming Considered Harmful</title><content type='html'>The following periodic article answers in excruciating detail&lt;br /&gt;the frequently asked question "Why shouldn't I program in csh?".&lt;br /&gt;It is available for anon FTP from perl.com in /pub/perl/versus/csh.whynot.gz&lt;br /&gt;&lt;br /&gt;	       *** CSH PROGRAMMING CONSIDERED HARMFUL ***&lt;br /&gt;&lt;br /&gt;    Resolved: The csh is a tool utterly inadequate for programming, &lt;br /&gt;	      and its use for such purposes should be strictly banned!&lt;br /&gt;&lt;br /&gt;I am continually shocked and dismayed to see people write test cases,&lt;br /&gt;install scripts, and other random hackery using the csh.  Lack of&lt;br /&gt;proficiency in the Bourne shell has been known to cause errors in /etc/rc&lt;br /&gt;and .cronrc files, which is a problem, because you *must* write these files&lt;br /&gt;in that language.&lt;br /&gt;&lt;br /&gt;The csh is seductive because the conditionals are more C-like, so the path&lt;br /&gt;of least resistance is chosen and a csh script is written.  Sadly, this is&lt;br /&gt;a lost cause, and the programmer seldom even realizes it, even when they&lt;br /&gt;find that many simple things they wish to do range from cumbersome to&lt;br /&gt;impossible in the csh.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1. FILE DESCRIPTORS&lt;br /&gt;&lt;br /&gt;The most common problem encountered in csh programming is that&lt;br /&gt;you can't do file-descriptor manipulation.  All you are able to &lt;br /&gt;do is redirect stdin, or stdout, or dup stderr into stdout. &lt;br /&gt;Bourne-compatible shells offer you an abundance of more exotic&lt;br /&gt;possibilities.    &lt;br /&gt;&lt;br /&gt;1a. Writing Files&lt;br /&gt;&lt;br /&gt;In the Bourne shell, you can open or dup arbitrary file descriptors.&lt;br /&gt;For example, &lt;br /&gt;&lt;br /&gt;    exec 2&gt;errs.out&lt;br /&gt;&lt;br /&gt;means that from then on, stderr goes into errs file.&lt;br /&gt;&lt;br /&gt;Or what if you just want to throw away stderr and leave stdout&lt;br /&gt;alone?    Pretty simple operation, eh?&lt;br /&gt;&lt;br /&gt;    cmd 2&gt;/dev/null&lt;br /&gt;&lt;br /&gt;Works in the Bourne shell.  In the csh, you can only make a pitiful &lt;br /&gt;attempt like this:&lt;br /&gt;&lt;br /&gt;    (cmd &gt; /dev/tty) &gt;&amp; /dev/null&lt;br /&gt;&lt;br /&gt;But who said that stdout was my tty?  So it's wrong.  This simple&lt;br /&gt;operation *CANNOT BE DONE* in the csh.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Along these same lines, you can't direct error messages in csh scripts&lt;br /&gt;out stderr as is considered proper.  In the Bourne shell, you might say:&lt;br /&gt;&lt;br /&gt;	echo "$0: cannot find $file" 1&gt;&amp;2&lt;br /&gt;&lt;br /&gt;but in the csh, you can't redirect stdout out stderr, so you end&lt;br /&gt;up doing something silly like this:&lt;br /&gt;&lt;br /&gt;	sh -c 'echo "$0: cannot find $file" 1&gt;&amp;2'&lt;br /&gt;&lt;br /&gt;1b. Reading Files&lt;br /&gt;&lt;br /&gt;In the csh, all you've got is $&lt;, which reads a line from your tty.  What&lt;br /&gt;if you've redirected stdin?  Tough noogies, you still get your tty, which &lt;br /&gt;you really can't redirect.  Now, the read statement &lt;br /&gt;in the Bourne shell allows you to read from stdin, which catches&lt;br /&gt;redirection.  It also means that you can do things like this:&lt;br /&gt;&lt;br /&gt;    exec 3&lt;file1&lt;br /&gt;    exec 4&lt;file2&lt;br /&gt;&lt;br /&gt;Now you can read from fd 3 and get lines from file1, or from file2 through&lt;br /&gt;fd 4.   In modern, Bourne-like shells, this suffices: &lt;br /&gt;&lt;br /&gt;    read some_var 0&lt;&amp;3&lt;br /&gt;    read another_var 0&lt;&amp;4&lt;br /&gt;&lt;br /&gt;Although in older ones where read only goes from 0, you trick it:&lt;br /&gt;&lt;br /&gt;    exec 5&lt;&amp;0  # save old stdin&lt;br /&gt;    exec 0&lt;&amp;3; read some_var&lt;br /&gt;    exec 0&lt;&amp;4; read another_var&lt;br /&gt;    exec 0&lt;&amp;5  # restore it&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1c. Closing FDs&lt;br /&gt;&lt;br /&gt;In the Bourne shell, you can close file descriptors you don't&lt;br /&gt;want open, like 2&gt;&amp;-, which isn't the same as redirecting it&lt;br /&gt;to /dev/null.&lt;br /&gt;&lt;br /&gt;1d. More Elaborate Combinations&lt;br /&gt;&lt;br /&gt;Maybe you want to pipe stderr to a command and leave stdout alone.&lt;br /&gt;Not too hard an idea, right?  You can't do this in the csh as I&lt;br /&gt;mentioned in 1a.  In a Bourne shell, you can do things like this:&lt;br /&gt;&lt;br /&gt;    exec 3&gt;&amp;1; grep yyy xxx 2&gt;&amp;1 1&gt;&amp;3 3&gt;&amp;- | sed s/file/foobar/ 1&gt;&amp;2 3&gt;&amp;-&lt;br /&gt;    grep: xxx: No such foobar or directory&lt;br /&gt;&lt;br /&gt;Normal output would be unaffected.  The closes there were in case&lt;br /&gt;something really cared about all its FDs.  We send stderr to sed,&lt;br /&gt;and then put it back out 2.&lt;br /&gt;&lt;br /&gt;Consider the pipeline:&lt;br /&gt;&lt;br /&gt;    A | B | C&lt;br /&gt;&lt;br /&gt;You want to know the status of C, well, that's easy: it's in $?, or&lt;br /&gt;$status in csh.  But if you want it from A, you're out of luck -- if&lt;br /&gt;you're in the csh, that is.  In the Bourne shell, you can get it, although&lt;br /&gt;doing so is a bit tricky.  Here's something I had to do where I ran dd's&lt;br /&gt;stderr into a grep -v pipe to get rid of the records in/out noise, but had&lt;br /&gt;to return the dd's exit status, not the grep's:&lt;br /&gt;&lt;br /&gt;    device=/dev/rmt8&lt;br /&gt;    dd_noise='^[0-9]+\+[0-9]+ records (in|out)$'&lt;br /&gt;    exec 3&gt;&amp;1&lt;br /&gt;    status=`((dd if=$device ibs=64k 2&gt;&amp;1 1&gt;&amp;3 3&gt;&amp;- 4&gt;&amp;-; echo $? &gt;&amp;4) |&lt;br /&gt;		egrep -v "$dd_noise" 1&gt;&amp;2 3&gt;&amp;- 4&gt;&amp;-) 4&gt;&amp;1`&lt;br /&gt;    exit $status;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The csh has also been known to close all open file descriptors besides&lt;br /&gt;the ones it knows about, making it unsuitable for applications that &lt;br /&gt;intend to inherit open file descriptors.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2. COMMAND ORTHOGONALITY&lt;br /&gt;&lt;br /&gt;2a. Built-ins&lt;br /&gt;&lt;br /&gt;The csh is a horrid botch with its built-ins.  You can't put them&lt;br /&gt;together in many reasonable ways.   Even simple little things like this:	&lt;br /&gt;&lt;br /&gt;	    % time | echo&lt;br /&gt;&lt;br /&gt;which while nonsensical, shouldn't give me this message:&lt;br /&gt;&lt;br /&gt;	    Reset tty pgrp from 9341 to 26678&lt;br /&gt;&lt;br /&gt;Others are more fun:&lt;br /&gt;&lt;br /&gt;	    % sleep 1 | while&lt;br /&gt;	    while: Too few arguments.&lt;br /&gt;	    [5] 9402&lt;br /&gt;	    % jobs&lt;br /&gt;	    [5]     9402 Done                 sleep |&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Some can even hang your shell.  Try typing ^Z while you're sourcing &lt;br /&gt;something, or redirecting a source command.  Just make sure you have&lt;br /&gt;another window handy.  Or try &lt;br /&gt;&lt;br /&gt;    % history | more&lt;br /&gt;&lt;br /&gt;on some systems.&lt;br /&gt;&lt;br /&gt;Aliases are not evaluated everywhere you would like them do be:&lt;br /&gt;&lt;br /&gt;    % alias lu 'ls -u'&lt;br /&gt;    % lu&lt;br /&gt;    HISTORY  News     bin      fortran  lib      lyrics   misc     tex&lt;br /&gt;    Mail     TEX      dehnung  hpview   logs     mbox     netlib&lt;br /&gt;    % repeat 3 lu&lt;br /&gt;    lu: Command not found.&lt;br /&gt;    lu: Command not found.&lt;br /&gt;    lu: Command not found.&lt;br /&gt;&lt;br /&gt;    % time lu&lt;br /&gt;    lu: Command not found.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2b. Flow control&lt;br /&gt;&lt;br /&gt;You can't mix flow-control and commands, like this:&lt;br /&gt;    &lt;br /&gt;    who | while read line; do&lt;br /&gt;	echo "gotta $line"&lt;br /&gt;    done&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;You can't combine multiline constructs in a csh using semicolons.&lt;br /&gt;There's no easy way to do this&lt;br /&gt;&lt;br /&gt;    alias cmd 'if (foo) then bar; else snark; endif'&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;You can't perform redirections with if statements that are&lt;br /&gt;evaluated solely for their exit status:&lt;br /&gt;&lt;br /&gt;    if ( { grep vt100 /etc/termcap &gt; /dev/null } ) echo ok&lt;br /&gt;&lt;br /&gt;And even pipes don't work:&lt;br /&gt;&lt;br /&gt;    if ( { grep vt100 /etc/termcap | sed 's/$/###' } ) echo ok&lt;br /&gt;&lt;br /&gt;But these work just fine in the Bourne shell:&lt;br /&gt;&lt;br /&gt;    if grep vt100 /etc/termcap &gt; /dev/null ; then echo ok; fi   &lt;br /&gt;&lt;br /&gt;    if grep vt100 /etc/termcap | sed 's/$/###/' ; then echo ok; fi&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Consider the following reasonable construct:&lt;br /&gt;&lt;br /&gt;  if ( { command1 | command2 } ) then&lt;br /&gt;      ...&lt;br /&gt;  endif&lt;br /&gt;&lt;br /&gt;The output of command1 won't go into the input of command2.  You will get&lt;br /&gt;the output of both commands on standard output.  No error is raised.  In&lt;br /&gt;the Bourne shell or its clones, you would say &lt;br /&gt;&lt;br /&gt;    if command1 | command2 ; then&lt;br /&gt;	...&lt;br /&gt;    fi&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2c. Stupid parsing bugs&lt;br /&gt;&lt;br /&gt;Certain reasonable things just don't work, like this:&lt;br /&gt;&lt;br /&gt;    % kill -1 `cat foo`&lt;br /&gt;    `cat foo`: Ambiguous.&lt;br /&gt;&lt;br /&gt;But this is ok:&lt;br /&gt;&lt;br /&gt;    % /bin/kill -1 `cat foo`&lt;br /&gt;&lt;br /&gt;If you have a stopped job:&lt;br /&gt;&lt;br /&gt;    [2]     Stopped              rlogin globhost&lt;br /&gt;&lt;br /&gt;You should be able to kill it with &lt;br /&gt;&lt;br /&gt;    % kill %?glob&lt;br /&gt;    kill: No match&lt;br /&gt;&lt;br /&gt;but&lt;br /&gt;&lt;br /&gt;    % fg %?glob&lt;br /&gt;&lt;br /&gt;works.&lt;br /&gt;&lt;br /&gt;White space can matter:&lt;br /&gt;&lt;br /&gt;    if(expr)&lt;br /&gt;&lt;br /&gt;may fail on some versions of csh, while&lt;br /&gt;&lt;br /&gt;    if (expr)&lt;br /&gt;&lt;br /&gt;works!  Your vendor may have attempted to fix this bug, but odds are good&lt;br /&gt;that their csh still won't be able to handle&lt;br /&gt;&lt;br /&gt;    if(0) then&lt;br /&gt;      if(1) then&lt;br /&gt;          echo A: got here&lt;br /&gt;      else&lt;br /&gt;          echo B: got here&lt;br /&gt;      endif&lt;br /&gt;      echo We should never execute this statement&lt;br /&gt;    endif&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3. SIGNALS&lt;br /&gt;&lt;br /&gt;In the csh, all you can do with signals is trap SIGINT.  In the Bourne&lt;br /&gt;shell, you can trap any signal, or the end-of-program exit.    For example,&lt;br /&gt;to blow away a tempfile on any of a variety of signals:&lt;br /&gt;&lt;br /&gt;    $ trap 'rm -f /usr/adm/tmp/i$$ ;&lt;br /&gt;	    echo "ERROR: abnormal exit";&lt;br /&gt;	    exit' 1 2 3 15&lt;br /&gt;&lt;br /&gt;    $ trap 'rm tmp.$$' 0   # on program exit&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;4. QUOTING&lt;br /&gt;&lt;br /&gt;You can't quote things reasonably in the csh:&lt;br /&gt;&lt;br /&gt;    set foo = "Bill asked, \"How's tricks?\""&lt;br /&gt;&lt;br /&gt;doesn't work.  This makes it really hard to construct strings with&lt;br /&gt;mixed quotes in them.  In the Bourne shell, this works just fine. &lt;br /&gt;In fact, so does this:&lt;br /&gt;&lt;br /&gt;     cd /mnt; /usr/ucb/finger -m -s `ls \`u\``&lt;br /&gt;&lt;br /&gt;Dollar signs cannot be escaped in double quotes in the csh.  Ug.&lt;br /&gt;&lt;br /&gt;    set foo = "this is a \$dollar quoted and this is $HOME not quoted" &lt;br /&gt;    dollar: Undefined variable.&lt;br /&gt;&lt;br /&gt;You have to use backslashes for newlines, and it's just darn hard to&lt;br /&gt;get them into strings sometimes.&lt;br /&gt;&lt;br /&gt;    set foo = "this \&lt;br /&gt;    and that";&lt;br /&gt;    echo $foo&lt;br /&gt;    this  and that&lt;br /&gt;    echo "$foo"&lt;br /&gt;    Unmatched ".  &lt;br /&gt;&lt;br /&gt;Say what?  You don't have these problems in the Bourne shell, where it's&lt;br /&gt;just fine to write things like this:&lt;br /&gt;&lt;br /&gt;    echo 	'This is &lt;br /&gt;	     some text that contains&lt;br /&gt;	     several newlines.'&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;As distributed, quoting history references is a challenge.  Consider:&lt;br /&gt;&lt;br /&gt;    % mail adec23!alberta!pixel.Convex.COM!tchrist&lt;br /&gt;    alberta!pixel.Convex.COM!tchri: Event not found.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;5. VARIABLE SYNTAX&lt;br /&gt;&lt;br /&gt;There's this big difference between global (environment) and local&lt;br /&gt;(shell) variables.  In csh, you use a totally different syntax &lt;br /&gt;to set one from the other.  &lt;br /&gt;&lt;br /&gt;In the Bourne shell, this &lt;br /&gt;    VAR=foo cmds args&lt;br /&gt; is the same as&lt;br /&gt;    (export VAR; VAR=foo; cmd args)&lt;br /&gt;or csh's&lt;br /&gt;    (setenv VAR;  cmd args)&lt;br /&gt; &lt;br /&gt;You can't use :t, :h, etc on envariables.  Watch:&lt;br /&gt;	echo Try testing with $SHELL:t&lt;br /&gt;&lt;br /&gt;It's really nice to be able to say&lt;br /&gt;    &lt;br /&gt;    ${PAGER-more}&lt;br /&gt;or&lt;br /&gt;    FOO=${BAR:-${BAZ}}&lt;br /&gt;&lt;br /&gt;to be able to run the user's PAGER if set, and more otherwise.&lt;br /&gt;You can't do this in the csh.  It takes more verbiage.&lt;br /&gt;&lt;br /&gt;You can't get the process number of the last background command from the&lt;br /&gt;csh, something you might like to do if you're starting up several jobs in&lt;br /&gt;the background.  In the Bourne shell, the pid of the last command put in&lt;br /&gt;the background is available in $!.&lt;br /&gt;&lt;br /&gt;The csh is also flaky about what it does when it imports an &lt;br /&gt;environment variable into a local shell variable, as it does&lt;br /&gt;with HOME, USER, PATH, and TERM.  Consider this:&lt;br /&gt;&lt;br /&gt;    % setenv TERM '`/bin/ls -l / &gt; /dev/tty`'&lt;br /&gt;    % csh -f&lt;br /&gt;&lt;br /&gt;And watch the fun!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;6. EXPRESSION EVALUATION&lt;br /&gt;&lt;br /&gt;Consider this statement in the csh:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    if ($?MANPAGER) setenv PAGER $MANPAGER&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Despite your attempts to only set PAGER when you want&lt;br /&gt;to, the csh aborts:&lt;br /&gt;&lt;br /&gt;    MANPAGER: Undefined variable.&lt;br /&gt;&lt;br /&gt;That's because it parses the whole line anyway AND EVALUATES IT!&lt;br /&gt;You have to write this:&lt;br /&gt;&lt;br /&gt;    if ($?MANPAGER) then&lt;br /&gt;	setenv PAGER $MANPAGER&lt;br /&gt;    endif&lt;br /&gt;&lt;br /&gt;That's the same problem you have here:&lt;br /&gt;&lt;br /&gt;    if ($?X &amp;&amp; $X == 'foo') echo ok&lt;br /&gt;    X: Undefined variable&lt;br /&gt;&lt;br /&gt;This forces you to write a couple nested if statements.  This is highly&lt;br /&gt;undesirable because it renders short-circuit booleans useless in&lt;br /&gt;situations like these.  If the csh were the really C-like, you would&lt;br /&gt;expect to be able to safely employ this kind of logic.  Consider the&lt;br /&gt;common C construct:&lt;br /&gt;&lt;br /&gt;    if (p &amp;&amp; p-&gt;member) &lt;br /&gt;&lt;br /&gt;Undefined variables are not fatal errors in the Bourne shell, so &lt;br /&gt;this issue does not arise there.&lt;br /&gt;&lt;br /&gt;While the csh does have built-in expression handling, it's not&lt;br /&gt;what you might think.  In fact, it's space sensitive.  This is an&lt;br /&gt;error&lt;br /&gt;&lt;br /&gt;   @ a = 4/2&lt;br /&gt;&lt;br /&gt;but this is ok&lt;br /&gt;&lt;br /&gt;   @ a = 4 / 2&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The ad hoc parsing csh employs fouls you up in other places &lt;br /&gt;as well.  Consider:&lt;br /&gt;&lt;br /&gt;    % alias foo 'echo hi' ; foo&lt;br /&gt;    foo: Command not found.&lt;br /&gt;    % foo&lt;br /&gt;    hi&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;7. ERROR HANDLING&lt;br /&gt;&lt;br /&gt;Wouldn't it be nice to know you had an error in your script before&lt;br /&gt;you ran it?   That's what the -n flag is for: just check the syntax.&lt;br /&gt;This is especially good to make sure seldom taken segments of code&lt;br /&gt;code are correct.  Alas, the csh implementation of this doesn't work.&lt;br /&gt;Consider this statement:&lt;br /&gt;&lt;br /&gt;    exit (i)&lt;br /&gt;&lt;br /&gt;Of course, they really meant&lt;br /&gt;&lt;br /&gt;    exit (1)&lt;br /&gt;&lt;br /&gt;or just&lt;br /&gt;&lt;br /&gt;    exit 1&lt;br /&gt;&lt;br /&gt;Either shell will complain about this.  But if you hide this in an if&lt;br /&gt;clause, like so:&lt;br /&gt;&lt;br /&gt;    #!/bin/csh -fn&lt;br /&gt;    if (1) then&lt;br /&gt;	exit (i)&lt;br /&gt;    endif&lt;br /&gt;&lt;br /&gt;The csh tells you there's nothing wrong with this script.  The equivalent&lt;br /&gt;construct in the Bourne shell, on the other hand, tells you this:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    #!/bin/sh -n&lt;br /&gt;    if (1) then&lt;br /&gt;	exit (i)&lt;br /&gt;    endif&lt;br /&gt;&lt;br /&gt;    /tmp/x: syntax error at line 3: `(' unexpected&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;RANDOM BUGS&lt;br /&gt;&lt;br /&gt;Here's one:&lt;br /&gt;&lt;br /&gt;    fg %?string&lt;br /&gt;    ^Z&lt;br /&gt;    kill  %?string&lt;br /&gt;    No match.&lt;br /&gt;&lt;br /&gt;Huh? Here's another&lt;br /&gt;&lt;br /&gt;    !%s%x%s&lt;br /&gt;&lt;br /&gt;Coredump, or garbage.&lt;br /&gt;&lt;br /&gt;If you have an alias with backquotes, and use that in backquotes in &lt;br /&gt;another one, you get a coredump.&lt;br /&gt;&lt;br /&gt;Try this:&lt;br /&gt;    % repeat 3 echo "/vmu*"&lt;br /&gt;    /vmu*&lt;br /&gt;    /vmunix&lt;br /&gt;    /vmunix&lt;br /&gt;What???&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Here's another one:&lt;br /&gt;&lt;br /&gt;    % mkdir tst&lt;br /&gt;    % cd tst&lt;br /&gt;    % touch '[foo]bar'&lt;br /&gt;    % foreach var ( * )&lt;br /&gt;    &gt; echo "File named $var"&lt;br /&gt;    &gt; end&lt;br /&gt;    foreach: No match.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;8. SUMMARY&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;While some vendors have fixed some of the csh's bugs (the tcsh also does&lt;br /&gt;much better here), many have added new ones.  Most of its problems can&lt;br /&gt;never be solved because they're not actually bugs per se, but rather the&lt;br /&gt;direct consequences of braindead design decisions.  It's inherently flawed.&lt;br /&gt;&lt;br /&gt;Do yourself a favor, and if you *have* to write a shell script, do it in the &lt;br /&gt;Bourne shell.  It's on every UNIX system out there.  However, behavior &lt;br /&gt;can vary.&lt;br /&gt;&lt;br /&gt;There are other possibilities.&lt;br /&gt;&lt;br /&gt;The Korn shell is the preferred programming shell by many sh addicts,&lt;br /&gt;but it still suffers from inherent problems in the Bourne shell's design,&lt;br /&gt;such as parsing and evaluation horrors.  The Korn shell or its&lt;br /&gt;public-domain clones and supersets (like bash) aren't quite so ubiquitous&lt;br /&gt;as sh, so it probably wouldn't be wise to write a sharchive in them that&lt;br /&gt;you post to the net.  When 1003.2 becomes a real standard that companies&lt;br /&gt;are forced to adhere to, then we'll be in much better shape.  Until&lt;br /&gt;then, we'll be stuck with bug-incompatible versions of the sh lying about.&lt;br /&gt;&lt;br /&gt;The Plan 9 shell, rc, is much cleaner in its parsing and evaluation; it is&lt;br /&gt;not widely available, so you'd be significantly sacrificing portability.&lt;br /&gt;No vendor is shipping it yet.&lt;br /&gt;&lt;br /&gt;If you don't have to use a shell, but just want an interpreted language,&lt;br /&gt;many other free possibilities present themselves, like Perl, REXX, TCL,&lt;br /&gt;Scheme, or Python.  Of these, Perl is probably the most widely available&lt;br /&gt;on UNIX (and many other) systems and certainly comes with the most&lt;br /&gt;extensive UNIX interface.  Increasing numbers vendors ship Perl with &lt;br /&gt;their standard systems.  (See the comp.lang.perl FAQ for a list.)&lt;br /&gt;&lt;br /&gt;If you have a problem that would ordinarily use sed or awk or sh, but it&lt;br /&gt;exceeds their capabilities or must run a little faster, and you don't want&lt;br /&gt;to write the silly thing in C, then Perl may be for you.  You can get&lt;br /&gt;at networking functions, binary data, and most of the C library. There&lt;br /&gt;are also translators to turn your sed and awk scripts into Perl scripts,&lt;br /&gt;as well as a symbolic debugger.  Tchrist's personal rule of thumb is&lt;br /&gt;that if it's the size that fits in a Makefile, it gets written in the&lt;br /&gt;Bourne shell, but anything bigger gets written in Perl.&lt;br /&gt;&lt;br /&gt;See the comp.lang.{perl,rexx,tcl} newsgroups for details about these&lt;br /&gt;languages (including FAQs), or David Muir Sharnoff's comparison of &lt;br /&gt;freely available languages and tools in comp.lang.misc and news.answers.&lt;br /&gt;&lt;br /&gt;NOTE: Doug Hamilton &lt;hamilton@bix.com&gt; has a program that he sells for&lt;br /&gt;profit for little toy non-UNIX systems.  He calls it 'csh' or the &lt;br /&gt;'hamilton csh', but it's not a csh as it's neither bug nor feature&lt;br /&gt;compatible with the real csh.  Actually, he's fixed a great deal, but&lt;br /&gt;in doing so, has created a totally different shell.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-5261352036674750792?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.faqs.org/faqs/unix-faq/shell/csh-whynot/' title='Csh Programming Considered Harmful'/><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/5261352036674750792/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=5261352036674750792&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/5261352036674750792'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/5261352036674750792'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2008/05/csh-programming-considered-harmful.html' title='Csh Programming Considered Harmful'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-5072567302515226939</id><published>2008-05-27T11:30:00.002-04:00</published><updated>2008-05-27T11:32:22.597-04:00</updated><title type='text'>How to give each file a common extension using shell script</title><content type='html'>Say, you want to rename each file in a directory to &lt;each_respective_file_name&gt;.old&lt;br /&gt;&lt;br /&gt;just do this:&lt;br /&gt;&lt;br /&gt;for i in `ls -1`&lt;br /&gt;do&lt;br /&gt;   mv $i $i\.old&lt;br /&gt;done&lt;br /&gt;&lt;br /&gt;This will do the trick.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-5072567302515226939?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/5072567302515226939/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=5072567302515226939&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/5072567302515226939'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/5072567302515226939'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2008/05/how-to-give-each-file-common-extension.html' title='How to give each file a common extension using shell script'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-7795954261227127463</id><published>2008-05-27T11:16:00.001-04:00</published><updated>2008-05-27T11:19:08.123-04:00</updated><title type='text'>Perl - How to open a gzipped file</title><content type='html'>open (FH, "/usr/bin/gzcat $file_name|") or die " Whatever : $! \n ";&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-7795954261227127463?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/7795954261227127463/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=7795954261227127463&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/7795954261227127463'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/7795954261227127463'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2008/05/perl-how-to-open-gzipped-file.html' title='Perl - How to open a gzipped file'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-777894764475951704</id><published>2008-05-21T14:41:00.002-04:00</published><updated>2008-05-21T14:57:15.707-04:00</updated><title type='text'>Stored procedure and DBI/DBD module for perl</title><content type='html'>Folks,&lt;br /&gt;I liked this method to call stored procedure in oracle/mysql through DBI rather than calling sqlplus or mysql and then doing exec stored procedure.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;   $date_id =$ARGV[0];&lt;br /&gt;   $script_name =$ARGV[1];&lt;br /&gt;   $type =$ARGV[2]||0;&lt;br /&gt;   $status =$ARGV[3]||0;&lt;br /&gt;&lt;br /&gt;   $csr = $dbh-&gt;prepare(q{&lt;br /&gt;      BEGIN &lt;br /&gt;         stored_procedure_name(:date_id,:script_name,:type,:status); &lt;br /&gt;      END;&lt;br /&gt;   });&lt;br /&gt;   $csr-&gt;bind_param(":date_id", $date_id);&lt;br /&gt;   &lt;br /&gt;$obj-&gt;proc_execute($csr , "stored_procedure_name");&lt;br /&gt;&lt;br /&gt;   $dbh-&gt;disconnect;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-777894764475951704?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/777894764475951704/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=777894764475951704&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/777894764475951704'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/777894764475951704'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2008/05/stored-procedure-and-dbidbd-module-for.html' title='Stored procedure and DBI/DBD module for perl'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-6833712266137845886</id><published>2008-05-21T10:30:00.001-04:00</published><updated>2008-05-21T10:33:17.013-04:00</updated><title type='text'>Hurd and Linux</title><content type='html'>Folks,&lt;br /&gt;&lt;br /&gt;I got very curious about GRUB and HURD when my laptop crashed when power went down. I found out that GNU has developed it's own kernel for UNIX like OS which is different than any Linux Distros. uses. It is called 'HURD'. &lt;br /&gt;&lt;br /&gt;Both are two different kernels. &lt;br /&gt;You can find kernel image for Linux at www.kernel.org&lt;br /&gt;and GNU kernel at http://www.gnu.org/software/hurd/&lt;br /&gt;&lt;br /&gt;The Hurd and Linux:&lt;br /&gt;-------------------&lt;br /&gt;&lt;br /&gt;People sometimes ask, ``Why did the FSF develop a new free kernel instead of using Linux?'' It's a reasonable question. The answer, briefly, is that that is not the question we faced. &lt;br /&gt;&lt;br /&gt;When we started developing the Hurd in 1990, the question facing us was, ``How can we get a free kernel for the GNU system?'' There was no free Unix-like kernel then, and we knew of no other plan to write one. The only way we could expect to have a free kernel was to write it ourselves. So we started. &lt;br /&gt;&lt;br /&gt;We heard about Linux after its release. At that time, the question facing us was, ``Should we cancel the Hurd project and use Linux instead?'' &lt;br /&gt;&lt;br /&gt;We heard that Linux was not at all portable (this may not be true today, but that's what we heard then). And we heard that Linux was architecturally on a par with the Unix kernel; our work was leading to something much more powerful. &lt;br /&gt;&lt;br /&gt;Given the years of work we had already put into the Hurd, we decided to finish it rather than throw them away. &lt;br /&gt;&lt;br /&gt;If we did face the question that people ask---if Linux were already available, and we were considering whether to start writing another kernel---we would not do it. Instead we would choose another project, something to do a job that no existing free software can do. &lt;br /&gt;&lt;br /&gt;But we did start the Hurd, back then, and now we have made it work. We hope its superior architecture will make free operating systems more powerful.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-6833712266137845886?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.gnu.org/software/hurd/hurd-and-linux.html' title='Hurd and Linux'/><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/6833712266137845886/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=6833712266137845886&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/6833712266137845886'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/6833712266137845886'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2008/05/hurd-and-linux.html' title='Hurd and Linux'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-6232853928845445862</id><published>2008-05-20T15:37:00.000-04:00</published><updated>2008-05-20T15:38:28.998-04:00</updated><title type='text'>MySQL DBI</title><content type='html'>my $xstr='DBI:mysql:database=db_name;host=$host;port=3306';&lt;br /&gt;my $xhd = DBI-&gt;connect($xstr, 'deepak' , 'xxx_password' );&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-6232853928845445862?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/6232853928845445862/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=6232853928845445862&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/6232853928845445862'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/6232853928845445862'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2008/05/mysql-dbi.html' title='MySQL DBI'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-264028523713723683</id><published>2008-05-12T16:49:00.000-04:00</published><updated>2008-05-12T16:50:19.209-04:00</updated><title type='text'>How to search for a pattern in every file</title><content type='html'>find . -exec grep "Pattern_to_look_for" {} \;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-264028523713723683?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/264028523713723683/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=264028523713723683&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/264028523713723683'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/264028523713723683'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2008/05/how-to-search-for-pattern-in-every-file.html' title='How to search for a pattern in every file'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-8974153338059084686</id><published>2008-05-12T16:44:00.001-04:00</published><updated>2008-05-12T16:44:35.572-04:00</updated><title type='text'>awk or gawk user guide</title><content type='html'>http://www.gnu.org/software/gawk/manual/gawk.html#If-Statement&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-8974153338059084686?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.gnu.org/software/gawk/manual/gawk.html#If-Statement' title='awk or gawk user guide'/><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/8974153338059084686/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=8974153338059084686&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/8974153338059084686'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/8974153338059084686'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2008/05/awk-or-gawk-user-guide.html' title='awk or gawk user guide'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-2741433553406287243</id><published>2008-05-12T16:36:00.000-04:00</published><updated>2008-05-12T16:37:17.663-04:00</updated><title type='text'>Different Methods to calculate the number of lines in a file</title><content type='html'>cat file_name | wc –l&lt;br /&gt;wc –l &lt; file_name&lt;br /&gt;awk '{x++}END{ print x}' file_name&lt;br /&gt;awk 'END{print NR}' file_name&lt;br /&gt;sed –n ‘$=’ file_name&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-2741433553406287243?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/2741433553406287243/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=2741433553406287243&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/2741433553406287243'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/2741433553406287243'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2008/05/different-methods-to-calculate-number.html' title='Different Methods to calculate the number of lines in a file'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-2309640931117539030</id><published>2008-05-12T15:47:00.000-04:00</published><updated>2008-05-12T15:48:09.400-04:00</updated><title type='text'>Everything about - cookie -</title><content type='html'>Cookie FAQ&lt;br /&gt;This FAQ is to enlighten you to the truth about Cookies. They are not as dangerous as the myths the media likes to popularize but then again, when has the media ever worried about the FAQ's? (Pun intended)&lt;br /&gt;&lt;br /&gt;This FAQ is compiled with bits of info grabbed from all over the place but for the most part it's based on mechanical (programming) fact and my experiences with Cookies.&lt;br /&gt;&lt;br /&gt;When I first became exposed to the Internet and Web Surfing, I hated Cookies as I was afraid of what they might do or learn about me. The facts set me free of that fear and now I embrace them when I'm surfing as I know the person who uses it has made a decision to serve me better!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;What is a Cookie? &lt;br /&gt;How Cookies work. &lt;br /&gt;Are Cookies dangerous? &lt;br /&gt;What information does a Cookie collect from you? &lt;br /&gt;What information can a Cookie get from my computer? &lt;br /&gt;Can a Cookie give my computer a virus? &lt;br /&gt;Can a Cookie delete my hard drive? &lt;br /&gt;Can I refuse to accept a Cookie? &lt;br /&gt;What happens if I refuse to accept a Cookie? &lt;br /&gt;Who can see my Cookies? &lt;br /&gt;Can anything bad happen from Cookies? &lt;br /&gt;Back To FAQ List &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;--------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;What is a Cookie? &lt;br /&gt;A cookie is a text file. That's all. Website designers will use cookies for a variety of reasons. If you go to a website that allows you to customize a page so that it looks the same everytime you visit it, the designer will store these pieces of design information in a Cookie.&lt;br /&gt;If you become a member or some site that wants to make you navigation easy, they will store your membership info in a Cookie so that you are instantly recognized when you visit the site.&lt;br /&gt;&lt;br /&gt;Controlled access can be achieved via a Cookie so that you can't view pages unless you have signed in with a UserID and Password. Usually these cookies expire after you leave the site.&lt;br /&gt;&lt;br /&gt;There are many ways a cookie can be used, from simply seeing what pages you visit to allowing you to use an on-line shopping cart! Many people balk at the thought of someone seeing what pages of their website you visit. The consideration most people don't stop for here is that it is the Designers website, why shouldn't he be able to tell what you visit? That way he can improve content on popular pages and remove or enhance un-popular pages. &lt;br /&gt;Top &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;How Cookies work. &lt;br /&gt;A Cookie is a text file. That's it. It can be created via a Perl script, Javascript, Active Server Pages etc. A Cookie is text information that is transferred from the server to your Browser via the HTTP protocol and then stored on your hard drive. It is not an executable file, it is not some nefarious info sniffer from Techno-World, it is only a text file.&lt;br /&gt;If a site uses a Cookie then everytime you visit that site, if the browser has a Cookie stored on it, it transfers that Cookie to that site. The program on the site using the Cookie then access the information and acts upon it.&lt;br /&gt;&lt;br /&gt;It is important to understand here that a Cookie will only be transfered to the site that created it. Part of the Cookie is the domain name of the site that created it as well as the path to the program that access it. Unless the domain and path match exactly as they were set, the Cookie IS NOT TRANSFERED! There is no way for someone from one site to see the contents of the Cookie from another site. It's just mechanically not possible. &lt;br /&gt;Top &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Are Cookies dangerous? &lt;br /&gt;NO! As I said, it is a text file and that is all. It is not an executable and can't do anything to your computer!&lt;br /&gt;Consider the following:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I can write a Perl program that will broadcast your name and e-mail address to thousands of mailing lists. &lt;br /&gt;I can write a Perl program that will display any personal information you give it to tens of thousands of people by simply accessing a mailing list program. &lt;br /&gt;I can write Javascript that will launch a program on your computer. &lt;br /&gt;I can write Javascript that will close your browser. &lt;br /&gt;I can write Javascript that will launch thousands of copies of your browser program, thereby crashing your computer. &lt;br /&gt;I can write a Java program that will ERASE YOUR HARDDRIVE!!! &lt;br /&gt;&lt;br /&gt;Think of all the things I can do to you with Perl, Java and Javascript. Think of how many site you visit that interact with a Perl CGI application. Think of how many thousands of pages out there have Javascript embeded in them. Think of how many Java applets you download and run! You download and run all those pages on your browser without giving a single thought to what the underlying Javascript can do to your computer.&lt;br /&gt;Cookies are text files as I've said, they can do nothing except sit on your computers hard drive until called or they expire. &lt;br /&gt;Top &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;What information does a Cookie collect from you? &lt;br /&gt;NOTHING!!! A Cookie collects no information whatsoever. The only information in a Cookie is information from the website designer or information that you have entered into a CGI/Javascript form. Information that you enter can be placed in a Cookie, the Cookie doesn't get the information on it's own. It is mechanically impossible for a Cookie to get ANY information from your computer. That's like saying the notebook on your nighttable is collecting information about you while you are asleep. &lt;br /&gt;Top &lt;br /&gt;&lt;br /&gt;What information can a Cookie get from my computer? &lt;br /&gt;NOTHING!!! As I said, a Cookie is a text file, plain and simple. It is not an executable program that can be run therefore it can not gather information. The page your looking at right now could, however, aready have searched your hard drive for your banking records via the use of a Java applet.........never thought of that did you?&lt;br /&gt;Just so you know, it hasn't. I don't go in for that under handed dealing. Just look at the source code for this page and you'll see there is no Java applet in it. &lt;br /&gt;Top &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Can a Cookie give my computer a virus? &lt;br /&gt;NO!!! Cookies are not executable's. For something to pass on a virus, you must first execute a program or applet. You can not get a virus from a text file. Just like you can't get a cold from watching a winter scene on television!&lt;br /&gt;With Java, I could have written code into the page that when you try to visit the next page or close the browser, your hard drive gets erased. &lt;br /&gt;Top &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Can a Cookie delete my hard drive? &lt;br /&gt;NO!!! Cookies can not delete your hard drive. Cookies are text files only and are not executable, therefore they can not do anything to your computer! See the topic above. &lt;br /&gt;Top &lt;br /&gt;&lt;br /&gt;Can I refuse to accept a Cookie? &lt;br /&gt;Yes. Older brwosers accepted Cookies automatically. MSIE3.0 and Netscape3.0 both allow you to accept or reject Cookies. V4.0 of these browsers allow you to always accept Cookies, choose to accept or reject Cookies or never accept Cookies. Here are the instructions for these V4.0 browsers:&lt;br /&gt;&lt;br /&gt;Explorer =&gt; Toolbar: View=&gt;Internet Options=&gt;Advanced then scroll down to "Cookies"&lt;br /&gt;&lt;br /&gt;Navigator =&gt; Toolbar: Options=&gt;Network Preferences=&gt;Protocols and follow the instructions. &lt;br /&gt;&lt;br /&gt;Top &lt;br /&gt;&lt;br /&gt;What happens if I refuse to accept a Cookie? &lt;br /&gt;The site designer calls the F.B.I. who call the S.W.A.T. team.....&lt;br /&gt;Just kidding! Nothing happens if you refuse to accept a Cookie. Refusing to accept a Cookie will only, at worst, make your surfing less personalized.&lt;br /&gt;&lt;br /&gt;If you refuse a Cookie from a site which you registered as a member of, refusing a Cookie may mean that you can't access the site. &lt;br /&gt;Top &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Who can see my Cookies? &lt;br /&gt;When a Cookie is transferred to your browser, part of it's content is the domain name of the server that placed it there. Another part of the Cookie data is the path to the program that placed the Cookie.&lt;br /&gt;When you visit a site that checks for Cookies, the browser looks at the request and determines the name of the server and the path to the program. If a Cookie exists that has the same domain name and the same path then obviously that program is allowed to access that Cookie because it placed it there in the first place!&lt;br /&gt;&lt;br /&gt;If the domain name and path do not match exactly, then the browser WILL NOT TRANSMIT THE COOKIE!!!. This means that, mechanically and logically, the Cookie will only be made available to an authorized program on the host server.&lt;br /&gt;&lt;br /&gt;No one except an authorized person can see the Cookie therefore no one can look at or take information from another websites Cookie! &lt;br /&gt;Top &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Can anything bad happen from Cookies? &lt;br /&gt;From Cookies themselves? No!&lt;br /&gt;As we have amply covered in this FAQ, a Cookie can not do anything bad to you or your computer. How the information is used, however, is something different. If there is any personal data stored in a Cookie, the only way it got there is because YOU provided it. If you fill out a form on a website and provide sensitive information such as your name, address, email, credit card number....then that data MIGHT be stored in a Cookie. Not always but sometimes. The concern that most Cookie detractors have is if a website stores information on an individual, for example, info on a person who navigates through a sex site. This information (and the only way then have it is becuase you gave it to them in the first place) could concievably be subpoenaed by a law enforcement agency or sold to a mailing list or a religious activist group. This, however, has nothing to do with Cookies. It's about individuals and the law.&lt;br /&gt;&lt;br /&gt;Remember, I can track you and get info on you with ASP, Java, Javascript, Python, Perl, PHP and C/C++ and you never even have to accept or reject a single Cookie!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-2309640931117539030?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.perlservices.net/en/faq/cookies.shtml' title='Everything about - cookie -'/><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/2309640931117539030/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=2309640931117539030&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/2309640931117539030'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/2309640931117539030'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2008/05/everything-about-cookie.html' title='Everything about - cookie -'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-4078829903598259850</id><published>2008-05-09T12:07:00.000-04:00</published><updated>2008-05-09T12:08:42.772-04:00</updated><title type='text'>Sun Solaris One liners</title><content type='html'>Unix/Solaris: One-Liners &lt;br /&gt;Source: http://www.kevlo.com/~ebs/unix_commands.txt &lt;br /&gt;  &lt;br /&gt;Listed here are a bunch of unix commands. &lt;br /&gt;  &lt;br /&gt;&lt;br /&gt;--&gt; change file date stamp &lt;br /&gt;touch –t 199906042020 filename &lt;br /&gt;&lt;br /&gt;--&gt; move partitions &lt;br /&gt;ufsdump 0f - /dev/rdsk/c0t0s0s0 | (cd /home; ufsrestore xv -) &lt;br /&gt;  &lt;br /&gt;&lt;br /&gt;--&gt; lay down file system with 1% minfree and inode density &lt;br /&gt;newfs –m1 –i81920 /dev/rdsk/c0t0d0s0 &lt;br /&gt;&lt;br /&gt;--&gt; check file system &lt;br /&gt;fsck /dev/rdsk/c0t0d0s0 &lt;br /&gt;&lt;br /&gt;Q: starting sybase &lt;br /&gt;login as sybase, run: ./install/RUN_SYBASE &lt;br /&gt;&lt;br /&gt;Q: logging in as sybase sa &lt;br /&gt;isql -U sa &lt;password&gt; &lt;br /&gt;&lt;br /&gt;--&gt; dump a partition and pipe to gzip. Watch &gt; 2GB limit &lt;br /&gt;ufsdump 0f - /home | gzip - &gt;/tmp/home.dump.gz &lt;br /&gt;&lt;br /&gt;--&gt; rewind offline a tape &lt;br /&gt;mt –f /dev/rmt/0 rewoffl &lt;br /&gt;&lt;br /&gt;--&gt; only allow 300MB for user /tmp access &lt;br /&gt;swap - /tmp tmpfs – yes SIZE=300M &lt;br /&gt;&lt;br /&gt;--&gt; verbose interactive restore &lt;br /&gt;ufsrestore –ivf /dev/rmt/1 &lt;br /&gt;&lt;br /&gt;--&gt; remove a printer from a class &lt;br /&gt;lpadmin –p level5-line1 –r level5-line &lt;br /&gt;  &lt;br /&gt;&lt;br /&gt;--&gt; truss a command &lt;br /&gt;truss –-f -–o /tmp/log.txt &lt;br /&gt;&lt;br /&gt;--&gt; [DB] feed a script into sybase &lt;br /&gt;isql –Urfe_xfer -Uuser -Ppassword -isqlscript &gt;&gt;blah.txt &lt;br /&gt;&lt;br /&gt;--&gt; make a printer class &lt;br /&gt;lpadmin –p level5-line1 –c level5-line &lt;br /&gt;&lt;br /&gt;--&gt; remove level2-line2 printer from printer class level2-line &lt;br /&gt;lpadmin -p level2-line2 -r level2-line &lt;br /&gt;  &lt;br /&gt;&lt;br /&gt;--&gt; add level2-line3 to printer class &lt;br /&gt;lpadmin -c level2-line -p level2-line3 &lt;br /&gt;&lt;br /&gt;--&gt; [DB] how to change your password in isql &lt;br /&gt;sp_password password, password-new &lt;br /&gt;&lt;br /&gt;--&gt; move a directory &lt;br /&gt;tar cf - ./games | (cd /tmp; tar xvBpf - ) &lt;br /&gt;&lt;br /&gt;--&gt; [DB] run a sybase script, and dump to file &lt;br /&gt;$ISQL -i$SCRIPTFILE -U$USER -D$DATABASE -P$PASS_ENC &gt;&gt; $SCRIPTLOGFILE &lt;br /&gt;&lt;br /&gt;--&gt; move a directory to another server &lt;br /&gt;tar cf - ./games | rsh brucey cd /tmp\; tar xvBpf - &lt;br /&gt;  &lt;br /&gt;&lt;br /&gt;--&gt; check for SUID SGID files &lt;br /&gt;ncheck -F ufs -s /dev/dsk/c3t0d0s &lt;br /&gt;&lt;br /&gt;-- remove core files &lt;br /&gt;find / -name core –exec rm –f {} \; -o –fstype nfs –prune &lt;br /&gt;  &lt;br /&gt;&lt;br /&gt;--&gt; rebuild man pages &lt;br /&gt;catman –w –M man-page-directory or /usr/lib/makewhatis &lt;br /&gt;  &lt;br /&gt;&lt;br /&gt;--&gt; vi command to show special characters &lt;br /&gt;: set list &lt;br /&gt;  &lt;br /&gt;&lt;br /&gt;--&gt; adding an account &lt;br /&gt;useradd -u 120 –g dls -d /apps/dls –s /bin/ksh -c "comment" -m dls &lt;br /&gt;&lt;br /&gt;--&gt; create a mysql database &lt;br /&gt;mysqladmin -uroot -ppassword create ebs &lt;br /&gt;&lt;br /&gt;--&gt; starting mysql database &lt;br /&gt;/etc/rc.d/init.d/mysql.server start &lt;br /&gt;/usr/local/bin/safe_mysqld &lt;br /&gt;&lt;br /&gt;--&gt; Invoke CPAN module install &lt;br /&gt;perl –MCPAN –eshell &lt;br /&gt;&lt;br /&gt;--&gt; dump to zip &lt;br /&gt;ufsdump 0f - /filesystem | /opt/local/gzip - &gt; /tmp/dump.gz &lt;br /&gt;&lt;br /&gt;--&gt; shutdown mysql databse &lt;br /&gt;/usr/local/bin/mysqladmin shutdown -ppassword &lt;br /&gt;/etc/rc.d/init.d/mysql.server stop &lt;br /&gt;&lt;br /&gt;--&gt; test the loading of a module &lt;br /&gt;PERL_DL_DEBUG=255 perl -e 'use CGI;' &lt;br /&gt;&lt;br /&gt;--&gt; shows open files &lt;br /&gt;fuser –cu / &lt;br /&gt;&lt;br /&gt;--&gt; Writing a Daemon: &lt;br /&gt;1. edit /etc/services &lt;br /&gt;add service and port. &lt;br /&gt;2. edit /etc/inetd.conf &lt;br /&gt;add in: edwardd stream tcp nowait root /bin/sh /bin/sh /home/sextone/bin/SERVER.mine &lt;br /&gt;3. kill –HUP inetd.conf &lt;br /&gt;&lt;br /&gt;--&gt; how to mount a file system &lt;br /&gt;mount /dev/dsk/c3t0d0s4 /apps/data/easysoft/DEVT &lt;br /&gt;&lt;br /&gt;--&gt; look at sar log &lt;br /&gt;sar –f /var/adm/sa/sa24 &lt;br /&gt;&lt;br /&gt;--&gt; write file checksums and size &lt;br /&gt;cksum filename &lt;br /&gt;&lt;br /&gt;--&gt; show storage array info &lt;br /&gt;ssaadm display /dev/rdsk/c1t5d2s0 &lt;br /&gt;--&gt; show all disks on device d &lt;br /&gt;luxadm display d &lt;br /&gt;&lt;br /&gt;--&gt; examine for a specific OS finerprint &lt;br /&gt;nmap –sS -p 80 -O -v &lt;host&gt; = examine OS &lt;br /&gt;&lt;br /&gt;--&gt; show print jobs &lt;br /&gt;/usr/ucb/lpq –Plevel6 &lt;br /&gt;&lt;br /&gt;--&gt; Scan for known ports. log it. do OS scan. &lt;br /&gt;nmap –sS -F -o foo.log -v -O www.foo.com//24 = &lt;br /&gt;&lt;br /&gt;--&gt; show status of printer &lt;br /&gt;/usr/ucb/lpc status &lt;br /&gt;&lt;br /&gt;--&gt; make a swap file: &lt;br /&gt;dd if=/dev/zero of=swapfile bs=1024 count=65535 &lt;br /&gt;mkswap ./swapfile &lt;br /&gt;chmod 600 ./swapfile &lt;br /&gt;swapon ./swapfile &lt;br /&gt;&lt;br /&gt;--&gt; show open files for process &lt;br /&gt;lsof –p PID &lt;br /&gt;&lt;br /&gt;--&gt; show open files for all TCP connections &lt;br /&gt;lsof –iTCP &lt;br /&gt;&lt;br /&gt;--&gt; show open files for internet address &lt;br /&gt;lsof -iTCP@10.20.2.9 &lt;br /&gt;&lt;br /&gt;--&gt; as above &lt;br /&gt;lsof -i @10.20.2.122 &lt;br /&gt;&lt;br /&gt;--&gt; examine tcp ports &lt;br /&gt;lsof -iTCP@sarah:1-50000 &lt;br /&gt;&lt;br /&gt;--&gt; show open files for user. &lt;br /&gt;lsof –u username &lt;br /&gt;&lt;br /&gt;--&gt; show processes that has the file in use. &lt;br /&gt;lsof /apps/cms/ECMS-Server &lt;br /&gt;&lt;br /&gt;--&gt; show open files and retry every 5 seconds &lt;br /&gt;lsof –p process-id –r 5 &lt;br /&gt;&lt;br /&gt;--&gt; mount a floppy &lt;br /&gt;mount -t vfat /dev/fd0 /mnt/floppy &lt;br /&gt;&lt;br /&gt;--&gt; check here for debugging processes and errno.h for errors &lt;br /&gt;/usr/include &lt;br /&gt;/usr/include/sys &lt;br /&gt;/usr/include/sys/errno.h &lt;br /&gt;&lt;br /&gt;--&gt; scp a whole directory, preserve mods &lt;br /&gt;sudo scp -prv devel webadmin@203.19.123.140:/home/httpd/cgi-bin &lt;br /&gt;&lt;br /&gt;--&gt; take processor 2 and 3 offline. &lt;br /&gt;psradm -f 2 3 &lt;br /&gt;--&gt; show processor stats verbose. &lt;br /&gt;psrinfo –v &lt;br /&gt;&lt;br /&gt;--&gt; how to skip grant tables in mysql (over ride security) &lt;br /&gt;/usr/local/libexec/mysqld -Sg &lt;br /&gt;&lt;br /&gt;--&gt; how to feed in an SQL program &lt;br /&gt;mysql &lt;create_table.sql &lt;br /&gt;&lt;br /&gt;--&gt; rm all files in directories &lt;br /&gt;find . -type f -exec rm {} \; &lt;br /&gt;&lt;br /&gt;--&gt; dump packets to a capture file &lt;br /&gt;sudo snoop –o /tmp/tcp.txt cp &lt;br /&gt;&lt;br /&gt;--&gt; backup one liner &lt;br /&gt;tar cvf - /home/ebs | gzip - &gt; ebs.tar.gz &lt;br /&gt;&lt;br /&gt;--&gt; Look at selected packets in capture file &lt;br /&gt;sudo snoop -i /tmp/tcp.txt &lt;br /&gt;&lt;br /&gt;--&gt; unzip and pipe to tar &lt;br /&gt;gzip -dc &lt;kmysql-1_1_6_tar.gz | tar xvf - &lt;br /&gt;&lt;br /&gt;--&gt; watch packets from two servers. &lt;br /&gt;snoop sarah brucey &lt;br /&gt;&lt;br /&gt;--&gt; enable ip masquerading &lt;br /&gt;/sbin/ipchains -P forward DENY &lt;br /&gt;/sbin/ipchains -A forward -s 10.100.100.100/8 -j MASQ &lt;br /&gt;&lt;br /&gt;-&gt; view su log file &lt;br /&gt;cat /var/adm/sulog &lt;br /&gt;&lt;br /&gt;--&gt; establish a default router or gateway. &lt;br /&gt;echo "sagacity.com" &gt; /etc/defaultrouter &lt;br /&gt;echo "10.100.100.100 sagacity.com sagacity" &gt;&gt; /etc/hosts &lt;br /&gt;change /etc/nsswitch.conf so that hosts has files, dns &lt;br /&gt;edit resolv.conf put in &lt;br /&gt;search . &lt;br /&gt;nameserver 203.7.132.98 &lt;br /&gt;&lt;br /&gt;--&gt; turn off automounter on /export/home. &lt;br /&gt;vi /etc/auto_master, comment out /export/home &lt;br /&gt;&lt;br /&gt;--&gt; configuration file for sudoers &lt;br /&gt;/opt/local/etc/sudoers &lt;br /&gt;&lt;br /&gt;--&gt; building ssh-1.2.27 on x86Solaris2.6 needed a few things: &lt;br /&gt;/usr/openwin/bin in path &lt;br /&gt;/usr/xpg4/bin in path &lt;br /&gt;declare AR="/usr/xpg4/bin/ar" &lt;br /&gt;declare NM_PATH="/usr/xpg4/bin/nm" &lt;br /&gt;&lt;br /&gt;--&gt; snoop network packets and get size and time stamp entries. &lt;br /&gt;snoop -S -ta empa1 &lt;br /&gt;&lt;br /&gt;--&gt; access perl CPAN &lt;br /&gt;perl -MCPAN -e shell &lt;br /&gt;install DBI &lt;br /&gt;&lt;br /&gt;--&gt; search for no password entries and lock all accounts. &lt;br /&gt;for i in `passwd –sa | grep NP | awk ‘{print $1’` &lt;br /&gt;do &lt;br /&gt;echo “locking $i” &lt;br /&gt;passwd –l $i &lt;br /&gt;done &lt;br /&gt;  &lt;br /&gt;&lt;br /&gt;--&gt; delete from a tar &lt;br /&gt;tar --delete -f fs_backup_Sunday.tar home/ebs/tmp &lt;br /&gt;&lt;br /&gt;--&gt; Example on backing up files to tape. Must specify non rewinding, else you will over-write the files. &lt;br /&gt;for file in `ls` &lt;br /&gt;do &lt;br /&gt;echo "sending $file to tape..." &lt;br /&gt;echo `date` &lt;br /&gt;tar cvpf /dev/rmt/0n $file &lt;br /&gt;done &lt;br /&gt;&lt;br /&gt;--&gt; making/adding a partition. &lt;br /&gt;1. use fdisk to make a parition. &lt;br /&gt;2. mkfs -t ext2 -c /dev/hda11 &lt;br /&gt;3. mount -t ext2 /dev/hda11 /opt2 &lt;br /&gt;4. update /etc/fstab &lt;br /&gt;&lt;br /&gt;--&gt; rebuild the windex file &lt;br /&gt;catman –w –M /usr/share/man &lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;&lt;br /&gt;--&gt; execute tar on remote host sarah and send tarball to standard output, &lt;br /&gt;which becomes standard input for tar xvf – and the file gets dumped locally, &lt;br /&gt;in this case on crawl. you have to cd to dir before tar or else you &lt;br /&gt;will include path in tar &lt;br /&gt;ssh maggie "cd $DIRNAME; tar cvf - $BASENAME" | (cd $TPATH; tar xvf - ) &lt;br /&gt;&lt;br /&gt;--&gt; dump a remote filesystem and send it to local tape drive. &lt;br /&gt;ssh -–x $fw /usr/sbin/ufsdump 0cf - $fs | dd obs=63k of=$TAPE &lt;br /&gt;&lt;br /&gt;--&gt; encrypt filename 1 and output to 1.crypt file &lt;br /&gt;crypt &lt; 1 &gt; 1.crypt ; rm 1 &lt;br /&gt;&lt;br /&gt;--&gt; decrypt filename 1.crypt and stdout to screen &lt;br /&gt;crypt &lt; 1.crypt &lt;br /&gt;&lt;br /&gt;--&gt; send a file to tape &lt;br /&gt;tar cvpf /dev/rmt/0 filename &lt;br /&gt;&lt;br /&gt;--&gt; quicker way to search and replace in vi &lt;br /&gt;: %s/existing/new/g &lt;br /&gt;&lt;br /&gt;--&gt; shows where and which shared library files an application uses. &lt;br /&gt;ldd binary &lt;br /&gt;&lt;br /&gt;--&gt; shell script stuff: &lt;br /&gt;# repeat a command 100 times &lt;br /&gt;x=100 &lt;br /&gt;while [ $x -gt 0 ] &lt;br /&gt;do &lt;br /&gt;command &lt;br /&gt;x=$(($x-1)) &lt;br /&gt;done &lt;br /&gt;&lt;br /&gt;--&gt; Something very important to remember about partitions &lt;br /&gt;It is important to note that Cylinder 0 contains the disklabel, which &lt;br /&gt;contains the partition table. A normal filesystem can be placed &lt;br /&gt;starting at Cylinder 0, since it will not touch the disklabel. &lt;br /&gt;If you lay down a raw device, for a database, over Cylinder 0, &lt;br /&gt;then you will completely lose all your partitions. You will then &lt;br /&gt;have to restore the disklabel, and backup from tape if you happen to do this. &lt;br /&gt;&lt;br /&gt;--&gt; move a partition &lt;br /&gt;find . |cpio -pdm /apps &lt;br /&gt;&lt;br /&gt;--&gt; cron structure &lt;br /&gt;min hour day-of-month month weekday command &lt;br /&gt;&lt;br /&gt;--&gt; PatchDiag Tool. Get patches from: &lt;br /&gt;http://sunsolve.sun.com/private-cgi/patchpage.pl &lt;br /&gt;patchdiag.xref is available at: http://sunsolve.sun.com/sunsolve/patchdiag/ &lt;br /&gt;/opt/local/bin/patchdiag -x /opt/local/lib/patchdiag.xref &gt; patchdiag.`uname -n` &lt;br /&gt;&lt;br /&gt;--&gt; command showing system parameters &lt;br /&gt;/usr/sbin/sysdef &lt;br /&gt;&lt;br /&gt;--&gt; Get Ambient Temperature of Server &lt;br /&gt;/usr/platform/SUNW,Ultra-4/sbin/prtdiag -v &lt;br /&gt;&lt;br /&gt;--&gt; good ps formatting showing percent cpu first. &lt;br /&gt;ps -edf -o pcpu,pid,user,arg &lt;br /&gt;&lt;br /&gt;--&gt; full details on ps &lt;br /&gt;/usr/bin/ps –A -o user,pid,pcpu,pmem,vsz,rss,tty,s,stime,time,args &lt;br /&gt;&lt;br /&gt;--&gt; chown the hidden files as well. &lt;br /&gt;find . -print -exec chown -R sextone:staff {} \; &lt;br /&gt;&lt;br /&gt;--&gt; The nsradmin command is a command-line based administrative &lt;br /&gt;program for the NetWorker system. Normally nsradmin monitors &lt;br /&gt;and modifies NetWorker resources over the network. &lt;br /&gt;/usr/sbin/nsr/nsradmin &lt;br /&gt;&lt;br /&gt;--&gt; Spray a server &lt;br /&gt;-c number of packets &lt;br /&gt;-d delay in microseconds &lt;br /&gt;-l pakcet size in bytes &lt;br /&gt;/usr/sbin/spray -c 1 –d 20 -l 4096 maggie &lt;br /&gt;&lt;br /&gt;--&gt; Turn on bold. &lt;br /&gt;bold=`tput smso` &lt;br /&gt;offbold=`tput rmso` &lt;br /&gt;echo "${bold}You must be the \"root\" user to run this script.${offbold}" &lt;br /&gt;&lt;br /&gt;--&gt; good way to send a dir to tape &lt;br /&gt;tar cf /dev/rmt/0n directory &lt;br /&gt;&lt;br /&gt;--&gt; example of bringing up an interface &lt;br /&gt;ifconfig hme0:1 inet 10.2.25.52 up &lt;br /&gt;&lt;br /&gt;--&gt; show all connections &lt;br /&gt;netstat –f inet &lt;br /&gt;&lt;br /&gt;--&gt; rpcinfo makes an RPC call to an RPC server and reports &lt;br /&gt;what it finds. &lt;br /&gt;rpcinfo -b 390109 2 | sort -u &lt;br /&gt;&lt;br /&gt;--&gt; rewind a tape fast &lt;br /&gt;&lt; /dev/rmt/0 &lt;br /&gt;&lt;br /&gt;--&gt; show loaded modules &lt;br /&gt;/usr/sbin/modinfo &lt;br /&gt;&lt;br /&gt;--&gt; find world readable files and dirs &lt;br /&gt;find / -type d –perm -2 –print &lt;br /&gt;find . -type f –perm -2 -print &lt;br /&gt;&lt;br /&gt;--&gt; adding in a boot alias, eg: &lt;br /&gt;boot sarahroot1 –s &lt;br /&gt;nvalias sarahroot1 /sbus@1f,0/sunw,fas@e,8800000/sd@9,0:a &lt;br /&gt;&lt;br /&gt;--&gt; clever way to archive &lt;br /&gt;tar cvf - `find . –print` &gt;/tmp/dumpfile.tar &lt;br /&gt;tar xvf - &lt;/tmp/dumpfile.tar &lt;br /&gt;&lt;br /&gt;--&gt; tee to a file &lt;br /&gt;echo "Start Date/Time: `date`" | tee -a $LOG_FILE &lt;br /&gt;  &lt;br /&gt;&lt;br /&gt;--&gt; read a snoop file &lt;br /&gt;snoop -i anz-telnet.snoop &lt;br /&gt;&lt;br /&gt;--&gt; write a snoop log (this will count the number of connections, which is pretty neat). &lt;br /&gt;snoop –osnoop.log sarah &lt;br /&gt;&lt;br /&gt;--&gt; set default run level. 5 for gui. &lt;br /&gt;/etc/inittab &lt;br /&gt;&lt;br /&gt;--&gt; show all exported filesystems &lt;br /&gt;showmount -e crawl &lt;br /&gt;&lt;br /&gt;--&gt; shows all configurable variables for tcp interface. &lt;br /&gt;sudo ndd -get /dev/tcp &lt;br /&gt;- ? &lt;br /&gt;eg: &lt;br /&gt;sudo ndd -get /dev/tcp tcp_conn_req_max_q &lt;br /&gt;128 &lt;br /&gt;ndd /dev/arp \? &lt;br /&gt;ndd /dev/ip \? &lt;br /&gt;ndd /dev/tcp \? &lt;br /&gt;ndd /dev/udp \? &lt;br /&gt;ndd /dev/icmp \? &lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;&lt;br /&gt;--&gt; set sticky bit on group files, only the owner can change the mode. &lt;br /&gt;--&gt; the +l is mandatory file and record locking while a program &lt;br /&gt;--&gt; is accessing that file. &lt;br /&gt;chmod g+s,+l file &lt;br /&gt;&lt;br /&gt;--&gt; print duplex landscape 4 qudrant printing &lt;br /&gt;mpage –t –l –4 &lt;br /&gt;&lt;br /&gt;--&gt; install a patch &lt;br /&gt;installpatch . &lt;br /&gt;&lt;br /&gt;--&gt; check to see if a patch has been installed &lt;br /&gt;showrev –p |grep package name &lt;br /&gt;  &lt;br /&gt;&lt;br /&gt;--&gt; unzip, untar in a /tmp directory &lt;br /&gt;zcat 104708-16.tar.gz | ( cd /tmp; sudo tar xvf - ) &lt;br /&gt;&lt;br /&gt;--&gt; check out revision level on ssa controller &lt;br /&gt;/usr/sbin/ssaadm display controller &lt;br /&gt;  &lt;br /&gt;&lt;br /&gt;--&gt; unzip and untar a file without having to create an intermediate tar file &lt;br /&gt;sudo gzip -dc /tmp/270599/post-EOD.tar.gz |tar xvf - &lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;&lt;br /&gt;--&gt; selectively extract from a tar archive &lt;br /&gt;tar xvf /tmp/iona.tar ./iona/.sh_history &lt;br /&gt;&lt;br /&gt;--&gt; send a bunch of files to tape &lt;br /&gt;tar cf /tmp/rules.tar ruleb* objects.C *.W &lt;br /&gt;&lt;br /&gt;--&gt; examine section 5 of man &lt;br /&gt;man -s 5 signal &lt;br /&gt;&lt;br /&gt;--&gt; shows signals and definitions of structures, eg sigaction &lt;br /&gt;/usr/include/sys/signal.h &lt;br /&gt;&lt;br /&gt;--&gt; location of the limits file on solaris &lt;br /&gt;/usr/include/limits.h &lt;br /&gt;&lt;br /&gt;--&gt; send an attachment via email from command prompt &lt;br /&gt;uuencode file.tar.gz file.tar.gz | mailx –s “backup” root@crawl &lt;br /&gt;&lt;br /&gt;--&gt; zero a file &lt;br /&gt;cat /dev/null &gt; isam.log &lt;br /&gt;&lt;br /&gt;--&gt; good way to restore from cdrom a binary file &lt;br /&gt;zcat &lt; /cdrom/cdrom0/Solaris_2.6/Product/SUNWcsu/install/reloc.cpio.Z | &lt;br /&gt;cpio –idm usr/lib/fs/ufs/ufsrestore &lt;br /&gt;  &lt;br /&gt;&lt;br /&gt;--&gt; running su as a user then ssh &lt;br /&gt;su - dls-PROD -c "/opt/local/bin/ssh drp-stagger \"cd /tmp; /bin/ls\" " &lt;br /&gt;  &lt;br /&gt;&lt;br /&gt;--&gt; verify a newfs format &lt;br /&gt;sudo newfs –Nv /dev/md/dsk/d96 &lt;br /&gt;  &lt;br /&gt;&lt;br /&gt;--&gt; making lost_found. must be 8192 bytes in size. &lt;br /&gt;mkdir ./lost+found;chown root ./lost+found; chgrp root ./lost+found ;chmod 700 ./lost+found’; cd ./lost+found &lt;br /&gt;nofiles=0 ; while [ "$nofiles" -le 650 ] ; do ; /usr/ucb/touch $nofiles ; nofiles=`expr $nofiles + 1` ; done &lt;br /&gt;  &lt;br /&gt;&lt;br /&gt;--&gt; execute lynx &lt;br /&gt;lynx -cfg /usr/lib/lynx.cfg &lt;br /&gt;  &lt;br /&gt;&lt;br /&gt;--&gt; sed search example &lt;br /&gt;sed '/Sep\ 25/!d; /castill/!d' /var/log/syslo &lt;br /&gt;&lt;br /&gt;--&gt;should only be used at the EEPROM &lt;br /&gt;boot –r &lt;br /&gt;--&gt; should be used at single user mode &lt;br /&gt;reboot -- -r &lt;br /&gt;--&gt; should be used in multiuser mode &lt;br /&gt;touch /reconfigure &lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;&lt;br /&gt;--&gt; performing a remote dump &lt;br /&gt;&lt;br /&gt;find MFASYS &lt;br /&gt;|cpio -oc |gzip -c &lt;br /&gt;|ssh brucey -l chaup dd obs=18k of=/dev/rmt/0n &lt;br /&gt;&lt;br /&gt;- to extract - &lt;br /&gt;cd /ssa/emphasys/sybase/dump &lt;br /&gt;dd ibs=18k if=&lt;TAPE DEVICE&gt;|gunzip -c |cpio –idc &lt;br /&gt;  &lt;br /&gt;&lt;br /&gt;--&gt; boot block located here. &lt;br /&gt;/usr/platform/`uname –i`/lib/fs/ufs &lt;br /&gt;  &lt;br /&gt;&lt;br /&gt;--&gt; getting a server on the network &lt;br /&gt;add hosts entry for IP address &lt;br /&gt;clear configs: ifconfig pe0 unplumb &lt;br /&gt;ifconfig pe0 10.20.2.27 netmask 255.0.0.0 up &lt;br /&gt;route add default 10.20.0.1 1 &lt;br /&gt;verify the routing table: netstat –rn &lt;br /&gt;add resolv.conf entry: domain rabobank.com.au nameserver 192.192.192.252 &lt;br /&gt;edit /etc/nsswitch.conf change hosts to files, dns &lt;br /&gt;  &lt;br /&gt;&lt;br /&gt;lesson here is to unplumb interface, and let ifconfig setup the routing. &lt;br /&gt;if you specify an ip address and a netmask it will manage &lt;br /&gt;the routing and the broadcasting. &lt;br /&gt;  &lt;br /&gt;&lt;br /&gt;--&gt; find all, files associated with PID 22240 &lt;br /&gt;/usr/proc/bin/pfiles 22240 &lt;br /&gt;find file based on inode &lt;br /&gt;find –i number &lt;br /&gt;“ncheck –i number &lt;br /&gt;  &lt;br /&gt;&lt;br /&gt;--&gt; good redirection example &lt;br /&gt;./a.out &lt;/etc/termcap | (sleep 10; cat) &gt;trash &lt;br /&gt;&lt;br /&gt;--&gt; synchronize files from one server to another. This is useful for &lt;br /&gt;synchronizing database dump files, binary files, etc. This is definitely a powerful tool. &lt;br /&gt;&lt;br /&gt;rsync -avz -e ssh --rsync-path="/usr/local/bin/rsync" `pwd` myhost.com:/home/ebs/public_html &lt;br /&gt;&lt;br /&gt;--&gt; Example Awk Script &lt;br /&gt;&lt;br /&gt;# run with awk -f/tmp/1.awk /etc/group &lt;br /&gt;&lt;br /&gt;BEGIN { FS = ":" } &lt;br /&gt;{ print $1 | "sort" } &lt;br /&gt;{ nlines++ } &lt;br /&gt;END { print nlines } &lt;br /&gt;&lt;br /&gt;--&gt; awk example. &lt;br /&gt;awk '/#/ {print "Got a comment"}' /etc/hosts &lt;br /&gt;&lt;br /&gt;--&gt; delete every 2nd field in file &lt;br /&gt;awk '{$2= ""; print}' datafile &gt; datafile.new &lt;br /&gt;&lt;br /&gt;--&gt; awk average/standard deviation program &lt;br /&gt;&lt;br /&gt;x1 += $1 &lt;br /&gt;x2 += $1*$1 &lt;br /&gt;&lt;br /&gt;END { &lt;br /&gt;x1 = x1/NR &lt;br /&gt;x2 = x2/NR &lt;br /&gt;sigma = sqrt(x2 - x1*x1) &lt;br /&gt;if (NR &gt; 1) std_err = sigma/sqrt(NR - 1) &lt;br /&gt;print "Number of points = " NR &lt;br /&gt;print "Mean = " x1 &lt;br /&gt;print "Standard Deviation = " sigma &lt;br /&gt;print "Standard Error = " std_err&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-4078829903598259850?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/4078829903598259850/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=4078829903598259850&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/4078829903598259850'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/4078829903598259850'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2008/05/sun-solaris-one-liners.html' title='Sun Solaris One liners'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-229898826619597375</id><published>2008-05-08T17:01:00.001-04:00</published><updated>2008-05-08T17:01:41.724-04:00</updated><title type='text'>http://www.unixguide.net/unix/programming/</title><content type='html'>http://www.unixguide.net/unix/programming/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-229898826619597375?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.unixguide.net/unix/programming/' title='http://www.unixguide.net/unix/programming/'/><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/229898826619597375/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=229898826619597375&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/229898826619597375'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/229898826619597375'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2008/05/httpwwwunixguidenetunixprogramming.html' title='http://www.unixguide.net/unix/programming/'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-6384427913585909333</id><published>2008-05-07T13:05:00.001-04:00</published><updated>2008-05-07T13:07:47.487-04:00</updated><title type='text'>Unix Tricks</title><content type='html'>1)&lt;br /&gt;&lt;br /&gt;From within an executing script, how do I find the directory where the script lives?&lt;br /&gt;&lt;br /&gt;A simple pwd doesn't work because it gives the Present Working Directory, and we want to know the directory where the script actually resides on disk. I can't remember the previous solution I came up with, but here's another solution that should work:&lt;br /&gt;&lt;br /&gt;#!/bin/bashdir=$(echo $0 | sed -e "s,^\([^/]\),$(pwd)/\1,")echo I live in $dir&lt;br /&gt;Here how it works (hopefully). $0 is the name of the script as it was executed, so this may be foo.sh, ./foo.sh, /tmp/foo.sh, etc.. This gets sent to sed, which then uses a basic regular expression that says "If the first character of $0 was NOT a forward slash, then prepend $0 with my present working directory ($(pwd)) followed by whatever that first character was (\1), then assign this new value to dir". If the first character in $0 is a forward slash, then we were invoked via an absolute path and so we don't want to change anything.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;How do I copy a directory structure from one machine to another?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;$ tar cf - some_directory | ssh kramer "( cd /path/to/destination; tar xf - )"&lt;br /&gt;tar cf - some_directory creates a tar file of some_directory but the dash (-) tells tar to write to STDOUT instead of writing to an actual file on disk. The STDOUT from the first tar command is piped to STDIN of the next command. The right hand side of the pipe says to log into the host kramer using ssh and run the commands cd and tar xf -. The trick is with the commands "( cd /path/to/destination; tar xf - )". The parens create a subshell, in which the current directory is changed to /path/to/destination, and tar xf - reads from STDIN and extracts the tar file. This STDIN is the same STDIN that was sent to us over the pipe from STDOUT of the first tar command. Thus the directory structure on jerry gets tar'd up, transfered to kramer, then extracted all in one fell swoop.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3)&lt;br /&gt;&lt;br /&gt;How do I diff two files on different machines (using Bash)?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;$ diff &lt;(ssh -n george cat /etc/passwd) &lt;(ssh -n kramer cat /etc/passwd)&lt;br /&gt;This is just the Bash Process Substitution trick.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;How can I run a shell script on a remote host without copying the script out?&lt;br /&gt;&lt;br /&gt;One way would be:&lt;br /&gt;&lt;br /&gt;jerry:~$ cat myscript.sh | ssh kramer /bin/sh&lt;br /&gt;This one is pretty simple how it works, but it is often overlooked as an option for getting things done. The shell script is written to STDOUT. /bin/sh is executed on the remote server, and it reads myscript.sh on STDIN, thus executing the local copy of the script. This is way convient for some things. The only problem I see with this one is that you can't pass command line arguments to the script.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;How can I run long pipe lines of commands on a remote host via SSH without escaping all the meta characters?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;jerry:~$ ssh kramer &lt;&lt;EOFps -ef | grep http | awk '{print \$NF}'EOF&lt;br /&gt;The only tricks here are the use of a bash here document, and the fact that the command line is typed directly into ssh's STDIN so there's no need to escape things like pipes and semi-colons, etc. However, notice that you do still need to escape dollar signs because they'll still be interpreted as shell variables.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;How do I change every occurance of a string in multiple files?&lt;br /&gt;&lt;br /&gt;Why, use perl pie!&lt;br /&gt;&lt;br /&gt;perl -p -i -e 's/jerry/george/g' *.txt&lt;br /&gt;See perl -h for a description of the flags.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-6384427913585909333?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://unixjunkie.blogspot.com/2006/08/old-but-useful-shell-tricks.html' title='Unix Tricks'/><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/6384427913585909333/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=6384427913585909333&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/6384427913585909333'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/6384427913585909333'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2008/05/unix-tricks.html' title='Unix Tricks'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-1960300537894044847</id><published>2008-04-25T14:04:00.001-04:00</published><updated>2008-04-25T14:05:43.384-04:00</updated><title type='text'>How UNIX/LINUX boot/initialization works</title><content type='html'>Folks,&lt;br /&gt;&lt;br /&gt;Although, it is a 'man init' from the Solaris prompt but it great read to understand the process of initialization.&lt;br /&gt;&lt;br /&gt;System Administration Commands                           init(1M)&lt;br /&gt;&lt;br /&gt;NAME&lt;br /&gt;     init, telinit - process control initialization&lt;br /&gt;&lt;br /&gt;SYNOPSIS&lt;br /&gt;     /sbin/init [0123456abcQqSs]&lt;br /&gt;&lt;br /&gt;     /etc/telinit [0123456abcQqSs]&lt;br /&gt;&lt;br /&gt;DESCRIPTION&lt;br /&gt;     init is a general process spawner. Its primary  role  is  to&lt;br /&gt;     create   processes  from  information  stored  in  the  file&lt;br /&gt;     /etc/inittab.&lt;br /&gt;&lt;br /&gt;  Run Level Defined&lt;br /&gt;     At any given time, the system is in one  of  eight  possible&lt;br /&gt;     run  levels.  A  run level is a software configuration under&lt;br /&gt;     which only a selected group of processes  exists.  Processes&lt;br /&gt;     spawned  by init for each of these run levels are defined in&lt;br /&gt;     /etc/inittab. init can be in one of eight  run  levels,  0-6&lt;br /&gt;     and  S  or  s (S and s are identical). The run level changes&lt;br /&gt;     when a privileged user runs /sbin/init. This sends appropri-&lt;br /&gt;     ate  signals  to  the original init spawned by the operating&lt;br /&gt;     system at boot time, saying which run level to invoke.&lt;br /&gt;&lt;br /&gt;  init and System Booting&lt;br /&gt;     When the system is booted, init is invoked and the following&lt;br /&gt;     occurs. First, it reads /etc/default/init to set environment&lt;br /&gt;     variables. This  is  typically  where  TZ  (time  zone)  and&lt;br /&gt;     locale-related  environments  such  as  LANG or LC_CTYPE get&lt;br /&gt;     set. (See the FILES section at the end of this  page.)  init&lt;br /&gt;     then  looks  in  /etc/inittab for the initdefault entry (see&lt;br /&gt;     inittab(4)). If the initdefault entry:&lt;br /&gt;&lt;br /&gt;     exists&lt;br /&gt;           init usually uses the  run  level  specified  in  that&lt;br /&gt;           entry as the initial run level to enter.&lt;br /&gt;&lt;br /&gt;     does not exist&lt;br /&gt;           /etc/inittab, init asks the user to enter a run  level&lt;br /&gt;           from the system console.&lt;br /&gt;&lt;br /&gt;           S or s&lt;br /&gt;                 init goes to  the  single-user  state.  In  this&lt;br /&gt;                 state,  the system console device (/dev/console)&lt;br /&gt;                 is opened for reading and writing and  the  com-&lt;br /&gt;                 mand  /sbin/su,  (see  su(1M)),  is invoked. Use&lt;br /&gt;                 either init or telinit to change the  run  level&lt;br /&gt;                 of  the  system.  Note that if the shell is ter-&lt;br /&gt;                 minated (using an end-of-file),  init  only  re-&lt;br /&gt;                 initializes   to   the   single-user   state  if&lt;br /&gt;                 /etc/inittab does not exist.&lt;br /&gt;&lt;br /&gt;SunOS 5.9           Last change: 21 Feb 2002                    1&lt;br /&gt;&lt;br /&gt;System Administration Commands                           init(1M)&lt;br /&gt;&lt;br /&gt;           0-6   init enters the  corresponding  run  level.  Run&lt;br /&gt;                 levels 0, 5, and 6 are reserved states for shut-&lt;br /&gt;                 ting the system down. Run levels 2, 3, and 4 are&lt;br /&gt;                 available as multi-user operating states.&lt;br /&gt;&lt;br /&gt;     If this is the first time  since  power  up  that  init  has&lt;br /&gt;     entered a run level other than single-user state, init first&lt;br /&gt;     scans /etc/inittab for boot and bootwait entries (see  init-&lt;br /&gt;     tab(4)).  These  entries are performed before any other pro-&lt;br /&gt;     cessing of /etc/inittab takes place, providing that the  run&lt;br /&gt;     level  entered  matches  that  of the entry. In this way any&lt;br /&gt;     special initialization of  the  operating  system,  such  as&lt;br /&gt;     mounting  file  systems,  can  take  place  before users are&lt;br /&gt;     allowed onto the system. init then scans  /etc/inittab   and&lt;br /&gt;     executes all other entries that are to be processed for that&lt;br /&gt;     run level.&lt;br /&gt;&lt;br /&gt;     To spawn each process in /etc/inittab, init reads each entry&lt;br /&gt;     and  for  each  entry  that  should be respawned, it forks a&lt;br /&gt;     child process. After it has spawned  all  of  the  processes&lt;br /&gt;     specified by /etc/inittab, init waits for one of its descen-&lt;br /&gt;     dant processes to die, a powerfail signal, or a signal  from&lt;br /&gt;     another  init  or telinit process to change the system's run&lt;br /&gt;     level. When one of these conditions occurs, init re-examines&lt;br /&gt;     /etc/inittab.&lt;br /&gt;&lt;br /&gt;  inittab Additions&lt;br /&gt;     New entries can be added to /etc/inittab at any  time;  how-&lt;br /&gt;     ever, init still waits for one of the above three conditions&lt;br /&gt;     to occur before re-examining  /etc/inittab.  To  get  around&lt;br /&gt;     this,  init  Q  or  init  q command wakes init to re-examine&lt;br /&gt;     /etc/inittab immediately.&lt;br /&gt;&lt;br /&gt;     When init comes up at boot  time  and  whenever  the  system&lt;br /&gt;     changes  from  the  single-user  state to another run state,&lt;br /&gt;     init sets the ioctl(2) states of the console to those  modes&lt;br /&gt;     saved  in  the file /etc/ioctl.syscon. init writes this file&lt;br /&gt;     whenever the single-user state is entered.&lt;br /&gt;&lt;br /&gt;  Run Level Changes&lt;br /&gt;     When a run level change request  is  made,  init  sends  the&lt;br /&gt;     warning signal (SIGTERM) to all processes that are undefined&lt;br /&gt;     in the target run level. init waits five seconds before for-&lt;br /&gt;     cibly  terminating  these processes by sending a kill signal&lt;br /&gt;     (SIGKILL).&lt;br /&gt;&lt;br /&gt;     When init receives a signal telling it  that  a  process  it&lt;br /&gt;     spawned has died, it records the fact and the reason it died&lt;br /&gt;     in /var/adm/utmpx  and  /var/adm/wtmpx  if  it  exists  (see&lt;br /&gt;     who(1)).  A  history  of  the  processes  spawned is kept in&lt;br /&gt;     /var/adm/wtmpx.&lt;br /&gt;&lt;br /&gt;SunOS 5.9           Last change: 21 Feb 2002                    2&lt;br /&gt;&lt;br /&gt;System Administration Commands                           init(1M)&lt;br /&gt;&lt;br /&gt;     If init  receives  a  powerfail  signal  (SIGPWR)  it  scans&lt;br /&gt;     /etc/inittab  for  special entries of the type powerfail and&lt;br /&gt;     powerwait. These entries are invoked (if the run levels per-&lt;br /&gt;     mit)  before any further processing takes place. In this way&lt;br /&gt;     init can perform various  cleanup  and  recording  functions&lt;br /&gt;     during the powerdown of the operating system.&lt;br /&gt;&lt;br /&gt;  Environment Variables in /etc/defaults/init&lt;br /&gt;     You can set default values for  environment  variables,  for&lt;br /&gt;     such   items   as  timezone  and  character  formatting,  in&lt;br /&gt;     /etc/default/init. See the FILES section, below, for a  list&lt;br /&gt;     of these variables.&lt;br /&gt;&lt;br /&gt;  telinit&lt;br /&gt;     telinit, which is linked to /sbin/init, is  used  to  direct&lt;br /&gt;     the  actions  of init. It takes a one-character argument and&lt;br /&gt;     signals init to take the appropriate action.&lt;br /&gt;&lt;br /&gt;SECURITY&lt;br /&gt;     init uses pam(3PAM) for session management. The  PAM  confi-&lt;br /&gt;     guration policy, listed through /etc/pam.conf, specifies the&lt;br /&gt;     session management module to be used for  init.  Here  is  a&lt;br /&gt;     partial  pam.conf  file with entries for init using the UNIX&lt;br /&gt;     session management module.&lt;br /&gt;&lt;br /&gt;     init   session   required    pam_unix_session.so.1&lt;br /&gt;&lt;br /&gt;     If there are no entries  for  the  init  service,  then  the&lt;br /&gt;     entries for the "other" service will be used.&lt;br /&gt;&lt;br /&gt;OPTIONS&lt;br /&gt;     0     Go into firmware.&lt;br /&gt;&lt;br /&gt;     1     Put the system in system administrator mode. All local&lt;br /&gt;           file  systems  are mounted. Only a small set of essen-&lt;br /&gt;           tial kernel processes are left running. This  mode  is&lt;br /&gt;           for  administrative  tasks such as installing optional&lt;br /&gt;           utility packages. All  files  are  accessible  and  no&lt;br /&gt;           users are logged in on the system.&lt;br /&gt;&lt;br /&gt;     2     Put the system  in  multi-user  mode.  All  multi-user&lt;br /&gt;           environment   terminal   processes   and  daemons  are&lt;br /&gt;           spawned. This state is commonly  referred  to  as  the&lt;br /&gt;           multi-user state.&lt;br /&gt;&lt;br /&gt;     3     Extend  multi-user  mode  by  making  local  resources&lt;br /&gt;           available over the network.&lt;br /&gt;&lt;br /&gt;     4     Is available to be defined as  an  alternative  multi-&lt;br /&gt;           user  environment  configuration.  It is not necessary&lt;br /&gt;           for system operation and is usually not used.&lt;br /&gt;&lt;br /&gt;SunOS 5.9           Last change: 21 Feb 2002                    3&lt;br /&gt;&lt;br /&gt;System Administration Commands                           init(1M)&lt;br /&gt;&lt;br /&gt;     5     Shut the machine down so that it is safe to remove the&lt;br /&gt;           power. Have the machine remove power, if possible.&lt;br /&gt;&lt;br /&gt;     6     Stop the operating system  and  reboot  to  the  state&lt;br /&gt;           defined by the initdefault entry in /etc/inittab.&lt;br /&gt;&lt;br /&gt;     a, b, c&lt;br /&gt;           process only those /etc/inittab entries having the  a,&lt;br /&gt;           b,  or c run level set. These are pseudo-states, which&lt;br /&gt;           may be defined to run certain commands, but  which  do&lt;br /&gt;           not cause the current run level to change.&lt;br /&gt;&lt;br /&gt;     Q, q  Re-examine /etc/inittab.&lt;br /&gt;&lt;br /&gt;     S, s  Enter single-user mode. This is  the  only  run  level&lt;br /&gt;           that  doesn't require the existence of a properly for-&lt;br /&gt;           matted /etc/inittab file. If this file does not exist,&lt;br /&gt;           then  by  default,  the only legal run level that init&lt;br /&gt;           can enter is the single-user mode. When in single-user&lt;br /&gt;           mode, the filesystems required for basic system opera-&lt;br /&gt;           tion will be mounted. When the system  comes  down  to&lt;br /&gt;           single-user  mode,  these  file  systems  will  remain&lt;br /&gt;           mounted (even if provided by a  remote  file  server),&lt;br /&gt;           and  any  other  local  filesystems  will also be left&lt;br /&gt;           mounted. During the  transition  down  to  single-user&lt;br /&gt;           mode,  all processes started by init or init.d scripts&lt;br /&gt;           that should only be running  in  multi-user  mode  are&lt;br /&gt;           killed.  In  addition,  any  process  that has a utmpx&lt;br /&gt;           entry will be killed. This last condition insures that&lt;br /&gt;           all  port  monitors  started by the SAC are killed and&lt;br /&gt;           all services started by these port monitors, including&lt;br /&gt;           ttymon login services, are killed.&lt;br /&gt;&lt;br /&gt;FILES&lt;br /&gt;     /dev/console&lt;br /&gt;           System console device.&lt;br /&gt;&lt;br /&gt;     /etc/default/init&lt;br /&gt;           Contains  environment  variables  and  their   default&lt;br /&gt;           values.  For  example,  for the timezone variable, TZ,&lt;br /&gt;           you might specify TZ=US/Pacific. The variables are:&lt;br /&gt;&lt;br /&gt;           TZ    Either specifies the timezone  information  (see&lt;br /&gt;                 ctime(3C)) or the name of a timezone information&lt;br /&gt;                 file /usr/share/lib/zoneinfo.&lt;br /&gt;&lt;br /&gt;                 Refer to the TIMEZONE(4) man page before  chang-&lt;br /&gt;                 ing this setting.&lt;br /&gt;&lt;br /&gt;           CMASK The mask (see umask(1)) that init uses and  that&lt;br /&gt;                 every process inherits from the init process. If&lt;br /&gt;                 not set, init uses the mask it inherits from the&lt;br /&gt;&lt;br /&gt;SunOS 5.9           Last change: 21 Feb 2002                    4&lt;br /&gt;&lt;br /&gt;System Administration Commands                           init(1M)&lt;br /&gt;                 kernel.  Note that init always attempts to apply&lt;br /&gt;                 a umask of 022 before creating a  file,  regard-&lt;br /&gt;                 less of the setting of CMASK.&lt;br /&gt;&lt;br /&gt;           LC_CTYPE&lt;br /&gt;                 Character characterization information.&lt;br /&gt;&lt;br /&gt;           LC_MESSAGES&lt;br /&gt;                 Message translation.&lt;br /&gt;&lt;br /&gt;           LC_MONETARY&lt;br /&gt;                 Monetary formatting information.&lt;br /&gt;&lt;br /&gt;           LC_NUMERIC&lt;br /&gt;                 Numeric formatting information.&lt;br /&gt;&lt;br /&gt;           LC_TIME&lt;br /&gt;                 Time formatting information.&lt;br /&gt;&lt;br /&gt;           LC_ALL&lt;br /&gt;                 If set, all other LC_*  environmental  variables&lt;br /&gt;                 take-on this value.&lt;br /&gt;&lt;br /&gt;           LANG  If LC_ALL is not set, and any particular LC_* is&lt;br /&gt;                 also not set, the value of LANG is used for that&lt;br /&gt;                 particular environmental variable.&lt;br /&gt;&lt;br /&gt;     /etc/initpipe&lt;br /&gt;           A named pipe used for internal communication.&lt;br /&gt;&lt;br /&gt;     /etc/inittab&lt;br /&gt;           Controls process dispatching by init.&lt;br /&gt;&lt;br /&gt;     /etc/ioctl.syscon&lt;br /&gt;           ioctl states of the console, as  saved  by  init  when&lt;br /&gt;           single-user state is entered.&lt;br /&gt;&lt;br /&gt;     /var/adm/utmpx&lt;br /&gt;           User access and administration information.&lt;br /&gt;&lt;br /&gt;     /var/adm/wtmpx&lt;br /&gt;           History of user access and administration information.&lt;br /&gt;&lt;br /&gt;ATTRIBUTES&lt;br /&gt;     See attributes(5) for descriptions of the  following  attri-&lt;br /&gt;     butes:&lt;br /&gt;&lt;br /&gt;SunOS 5.9           Last change: 21 Feb 2002                    5&lt;br /&gt;&lt;br /&gt;System Administration Commands                           init(1M)&lt;br /&gt;&lt;br /&gt;     ____________________________________________________________&lt;br /&gt;    |       ATTRIBUTE TYPE        |       ATTRIBUTE VALUE       |&lt;br /&gt;    |_____________________________|_____________________________|&lt;br /&gt;    | Availability                | SUNWcsu                     |&lt;br /&gt;    |_____________________________|_____________________________|&lt;br /&gt;&lt;br /&gt;SEE ALSO&lt;br /&gt;     login(1),  sh(1),  stty(1),  who(1),  shutdown(1M),  su(1M),&lt;br /&gt;     ttymon(1M),  ioctl(2),  kill(2), ctime(3C), pam(3PAM), init-&lt;br /&gt;     tab(4), pam.conf(4), TIMEZONE(4),  utmpx(4),  attributes(5),&lt;br /&gt;     pam_authtok_check(5),                    pam_authtok_get(5),&lt;br /&gt;     pam_authtok_store(5),   pam_dhkeys(5),   pam_passwd_auth(5),&lt;br /&gt;     pam_unix(5),      pam_unix_account(5),     pam_unix_auth(5),&lt;br /&gt;     pam_unix_session(5), termio(7I)&lt;br /&gt;&lt;br /&gt;DIAGNOSTICS&lt;br /&gt;     If  init  finds  that  it  is  respawning  an   entry   from&lt;br /&gt;     /etc/inittab  more  than  ten  times in two minutes, assumes&lt;br /&gt;     that there is an error in the command string in  the  entry,&lt;br /&gt;     and  generates  an  error  message on the system console. It&lt;br /&gt;     will then refuse to respawn this  entry  until  either  five&lt;br /&gt;     minutes  has  elapsed  or  it receives a signal from a user-&lt;br /&gt;     spawned init or telinit. This prevents init from  eating  up&lt;br /&gt;     system resources when someone makes a typographical error in&lt;br /&gt;     the inittab file, or a program is removed that is referenced&lt;br /&gt;     in /etc/inittab.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;NOTES&lt;br /&gt;     init and telinit can be run only by a privileged user.&lt;br /&gt;&lt;br /&gt;     The S or s  state  must  not  be  used  indiscriminately  in&lt;br /&gt;     /etc/inittab.  When modifying this file, it is best to avoid&lt;br /&gt;     adding this state to any line other than initdefault.&lt;br /&gt;&lt;br /&gt;     If a default state is not specified in the initdefault entry&lt;br /&gt;     in  /etc/inittab, state 6 is entered. Consequently, the sys-&lt;br /&gt;     tem will loop by going to firmware  and  rebooting  continu-&lt;br /&gt;     ously.&lt;br /&gt;&lt;br /&gt;     If the utmpx file cannot be created when booting the system,&lt;br /&gt;     the  system  will  boot to state "s" regardless of the state&lt;br /&gt;     specified in the initdefault entry in /etc/inittab. This can&lt;br /&gt;     occur if the /var file system is not accessible.&lt;br /&gt;&lt;br /&gt;     When a system transitions down to the  S  or  s  state,  the&lt;br /&gt;     /etc/nologin  file (see nologin(4)) is created.  Upon subse-&lt;br /&gt;     quent transition to run level 2, this file is removed  by  a&lt;br /&gt;     script in the /etc/rc2.d directory.&lt;br /&gt;&lt;br /&gt;     init uses /etc/initpipe, a named pipe, for internal communi-&lt;br /&gt;     cation.&lt;br /&gt;&lt;br /&gt;SunOS 5.9           Last change: 21 Feb 2002                    6&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;System Administration Commands                           init(1M)&lt;br /&gt;&lt;br /&gt;     The pam_unix(5) module might not be supported  in  a  future&lt;br /&gt;     release.    Similar    functionality    is    provided    by&lt;br /&gt;     pam_authtok_check(5),                    pam_authtok_get(5),&lt;br /&gt;     pam_authtok_store(5),   pam_dhkeys(5),   pam_passwd_auth(5),&lt;br /&gt;     pam_unix_account(5),          pam_unix_auth(5),          and&lt;br /&gt;     pam_unix_session(5).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-1960300537894044847?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/1960300537894044847/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=1960300537894044847&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/1960300537894044847'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/1960300537894044847'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2008/04/how-unixlinux-bootinitialization-works.html' title='How UNIX/LINUX boot/initialization works'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-4431891970623027134</id><published>2008-04-25T10:05:00.000-04:00</published><updated>2008-04-25T10:06:28.582-04:00</updated><title type='text'>Renaming all files in folder - Unix</title><content type='html'>Say, if you want to rename all the files in a folder and add an extension, use this&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;for file in *.pl ; do mv $file `echo $file | sed 's/\(.*\.\)pl/\1ppl/'` ; done&lt;br /&gt;&lt;br /&gt;This converts all the files in this folder from *.pl to *.ppl&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-4431891970623027134?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/4431891970623027134/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=4431891970623027134&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/4431891970623027134'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/4431891970623027134'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2008/04/renaming-all-files-in-folder-unix.html' title='Renaming all files in folder - Unix'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-3033047761729256358</id><published>2008-04-04T16:53:00.000-04:00</published><updated>2008-04-04T16:54:09.386-04:00</updated><title type='text'>Pretty cool site for perl reading</title><content type='html'>http://perl.active-venture.com/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-3033047761729256358?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/3033047761729256358/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=3033047761729256358&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/3033047761729256358'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/3033047761729256358'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2008/04/pretty-cool-site-for-perl-reading.html' title='Pretty cool site for perl reading'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-7865120829838224050</id><published>2008-04-04T14:17:00.000-04:00</published><updated>2008-04-04T14:18:06.072-04:00</updated><title type='text'>Good read about, How to handle CSV type of files from perl DBI module:</title><content type='html'>http://www.mathematik.uni-ulm.de/help/perl5/doc/DBD/CSV.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-7865120829838224050?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/7865120829838224050/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=7865120829838224050&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/7865120829838224050'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/7865120829838224050'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2008/04/good-read-about-how-to-handle-csv-type.html' title='Good read about, How to handle CSV type of files from perl DBI module:'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-1605572615461811993</id><published>2008-04-04T10:31:00.001-04:00</published><updated>2008-04-04T10:31:45.557-04:00</updated><title type='text'>5 important functions in perl</title><content type='html'>split/join&lt;br /&gt;unpack/pack&lt;br /&gt;seek (fseek function)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-1605572615461811993?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/1605572615461811993/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=1605572615461811993&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/1605572615461811993'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/1605572615461811993'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2008/04/5-important-functions-in-perl.html' title='5 important functions in perl'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-1380501421630734719</id><published>2008-04-04T10:24:00.002-04:00</published><updated>2008-04-04T10:27:35.557-04:00</updated><title type='text'>pack() and unpack function in PERL</title><content type='html'>Content of test-file.txt&lt;br /&gt;------------------------&lt;br /&gt;20080331EJUSD00 0003372500000010750000000000000000000000&lt;br /&gt;20080331 SUSD0000 87673600001148531000000000000000000000&lt;br /&gt;20080331XZUSD00000 0000000000000000000000000000000000000&lt;br /&gt;200 0331XZUSD0000000000000000000000000000000000000000000&lt;br /&gt;20  0331XZUSD0000000000000000000000000000000000000000000&lt;br /&gt;&lt;br /&gt;Script name: try-unpack.pl&lt;br /&gt;&lt;br /&gt;#!/usr/bin/perl&lt;br /&gt;&lt;br /&gt;use warnings;&lt;br /&gt;use strict;&lt;br /&gt;&lt;br /&gt;my $xf = './test-file.txt';&lt;br /&gt;&lt;br /&gt;open FH, $xf or die " Can not open the file : $! \n";&lt;br /&gt;while(&lt;FH&gt;)&lt;br /&gt;{&lt;br /&gt;   chomp $_;&lt;br /&gt;   my ($a, $b, $c, $d) =unpack("A4 A4 A4 A8", $_);&lt;br /&gt;   print $a . "\t" . $b . "\t" . $c . "\t" . $d . "\n";&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Output:&lt;br /&gt;bash-2.05$ ./try-unpack.pl&lt;br /&gt;2008    0331    EJUS    D00 0003&lt;br /&gt;2008    0331     SUS    D0000 87&lt;br /&gt;2008    0331    XZUS    D00000 0&lt;br /&gt;200     0331    XZUS    D0000000&lt;br /&gt;20      0331    XZUS    D0000000&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;====================================================================&lt;br /&gt;Script Name: try-pack.pl&lt;br /&gt;&lt;br /&gt;#!/usr/bin/perl&lt;br /&gt;&lt;br /&gt;use warnings;&lt;br /&gt;use strict;&lt;br /&gt;&lt;br /&gt;my $xline;&lt;br /&gt;die " Not enough user specified inputs : $! \n" unless @ARGV == 4;&lt;br /&gt;$xline = pack("A5 A4 A3 A2", $ARGV[0], $ARGV[1], $ARGV[2], $ARGV[3]);&lt;br /&gt;print $xline . "\n";&lt;br /&gt;$xline = pack("a5 a4 a3 a2", $ARGV[0], $ARGV[1], $ARGV[2], $ARGV[3]);&lt;br /&gt;print $xline . "\n";&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Output:&lt;br /&gt;bash-2.05$ ./try-pack.pl KUMAR PRA RA BROTHER&lt;br /&gt;KUMARPRA RA BR&lt;br /&gt;KUMARPRARABR&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-1380501421630734719?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/1380501421630734719/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=1380501421630734719&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/1380501421630734719'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/1380501421630734719'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2008/04/pack-and-unpack-function-in-perl.html' title='pack() and unpack function in PERL'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-8427000056660335402</id><published>2008-02-21T00:16:00.001-05:00</published><updated>2008-02-21T00:16:43.942-05:00</updated><title type='text'>Super Good Article about Veritas Volume Manager</title><content type='html'>http://www.adminschoice.com/docs/vxvm.htm&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-8427000056660335402?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/8427000056660335402/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=8427000056660335402&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/8427000056660335402'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/8427000056660335402'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2008/02/super-good-article-about-veritas-volume.html' title='Super Good Article about Veritas Volume Manager'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-3663463987168309207</id><published>2008-02-20T23:36:00.001-05:00</published><updated>2008-02-20T23:37:53.688-05:00</updated><title type='text'>Solaris - Types of file systems</title><content type='html'>Conceptually there are only 3 types of file systems:&lt;br /&gt;&lt;br /&gt;1. Disk based file system&lt;br /&gt;2. Network based file system&lt;br /&gt;3. Virtual File systems.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-3663463987168309207?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/3663463987168309207/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=3663463987168309207&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/3663463987168309207'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/3663463987168309207'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2008/02/solaris-types-of-file-systems.html' title='Solaris - Types of file systems'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-4269456252406046389</id><published>2008-02-20T23:21:00.002-05:00</published><updated>2008-02-20T23:23:55.981-05:00</updated><title type='text'>Solaris - How to find out, How many partitions exists on a disk</title><content type='html'>Use a command called &lt;br /&gt;&lt;br /&gt;prtvtoc&lt;br /&gt;&lt;br /&gt;df only shows the slices that contains file systems and have been mounted. If we want to see all the partitions on a disk, we can use the 'prtvtoc' command. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;~Cheers&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-4269456252406046389?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/4269456252406046389/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=4269456252406046389&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/4269456252406046389'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/4269456252406046389'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2008/02/solaris-how-to-find-out-how-many.html' title='Solaris - How to find out, How many partitions exists on a disk'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-1151947926693929832</id><published>2008-02-20T15:38:00.000-05:00</published><updated>2008-02-20T15:39:13.919-05:00</updated><title type='text'>हाउ टू तुर्ण ओं फ्लाश्बैक फेअतुरे ओं Oracle</title><content type='html'>alter database flashback on;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-1151947926693929832?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/1151947926693929832/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=1151947926693929832&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/1151947926693929832'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/1151947926693929832'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2008/02/oracle.html' title='हाउ टू तुर्ण ओं फ्लाश्बैक फेअतुरे ओं Oracle'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-9019722724608118291</id><published>2008-02-14T14:32:00.001-05:00</published><updated>2008-02-14T14:32:43.155-05:00</updated><title type='text'>Test Your Knowledge of Regular Expressions and Shell Basics</title><content type='html'>Test Your Knowledge of Regular Expressions and Shell Basics &lt;br /&gt;by Emmett Dulaney &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Regular expressions have set Unix-based operating systems apart from others almost since the very beginning. While other operating systems incorporate wild cards and quit there, Unix goes far beyond that. Regular expressions allow you to tweak and refine operations with tools ranging from directory searches to stream editing and everything in between. Not only do you need to know regular expressions, but you have to know some basics about the shell as well a few key commands in order to work with them. Following are 50 questions on regular expressions and shell basics at a knowledge level required for almost any intermediate-level certification exam. Good luck (answers are at the end of the article)! &lt;br /&gt;&lt;br /&gt;1. Which of the following characters used to match any single character? &lt;br /&gt;&lt;br /&gt;A. a dash (-)&lt;br /&gt;B. an asterisk (*)&lt;br /&gt;C. a question mark (?)&lt;br /&gt;D. a period (.) &lt;br /&gt;&lt;br /&gt;2. Which of the following characters is used to signify the beginning of a line? &lt;br /&gt;&lt;br /&gt;A. %&lt;br /&gt;B. $ &lt;br /&gt;C. ^&lt;br /&gt;D. ~ &lt;br /&gt;&lt;br /&gt;3. You want to use the question mark character (?) in a regular expression search and not have it interpreted as a metacharacter. Which of the following should be used to accomplish this? &lt;br /&gt;&lt;br /&gt;A. "\?"&lt;br /&gt;B. "/?"&lt;br /&gt;C. "$?"&lt;br /&gt;D. "(?)" &lt;br /&gt;&lt;br /&gt;4. How many occurrences of a character preceding an asterisk (*) must be present before it is considered a match? &lt;br /&gt;&lt;br /&gt;A. zero &lt;br /&gt;B. one &lt;br /&gt;C. two &lt;br /&gt;D. more than two &lt;br /&gt;&lt;br /&gt;5. You want to find every line in a file that contains a number. Which of the following regular expressions will accomplish this? &lt;br /&gt;&lt;br /&gt;A. -n&lt;br /&gt;B. "0 1 2 3 4 5 6 7 8 9"&lt;br /&gt;C. [0-9]&lt;br /&gt;D. [^0-9] &lt;br /&gt;&lt;br /&gt;6. You want to find all occurrences of "Muncie" in a file and suspect that sometimes it may appear initial-capped and other times all in lowercase. Which regular expression should you use to accomplish this? &lt;br /&gt;&lt;br /&gt;A. [Muncie,muncie]&lt;br /&gt;B. [Mm]uncie&lt;br /&gt;C. -i muncie&lt;br /&gt;D. {Muncie,muncie} &lt;br /&gt;&lt;br /&gt;7. What regular expression should be used to find all lines that begin with a question mark? (Fill in the blank.) &lt;br /&gt;&lt;br /&gt;8. Which character is used to mean that the preceding must be matched one or more times? &lt;br /&gt;&lt;br /&gt;A. + &lt;br /&gt;B. ? &lt;br /&gt;C. &amp; &lt;br /&gt;D. @ &lt;br /&gt;&lt;br /&gt;9. You want to find all matches for two distinctly different values. Which character is used to signify that you want to match two values? &lt;br /&gt;&lt;br /&gt;A. back slash (\)&lt;br /&gt;B. forward slash (/)&lt;br /&gt;C. pipe (|)&lt;br /&gt;D. ampersand (&amp;) &lt;br /&gt;&lt;br /&gt;10.Which of the following should be used to find "Sam" and "Samantha" in a file? &lt;br /&gt;&lt;br /&gt;A. Sam(antha)*&lt;br /&gt;B. Sam[antaha] &lt;br /&gt;C. Sam|antha&lt;br /&gt;D. Sam\(antha\)\? &lt;br /&gt;&lt;br /&gt;11. Which of the following can be used to find any white space, including spaces and tabs? &lt;br /&gt;&lt;br /&gt;A. [white]&lt;br /&gt;B. ""&lt;br /&gt;C. [[:space:]]&lt;br /&gt;D. [[tab|space]] &lt;br /&gt;&lt;br /&gt;12. Which of the following characters is used to signify the end of a line? &lt;br /&gt;&lt;br /&gt;A. %&lt;br /&gt;B. $&lt;br /&gt;C. ^&lt;br /&gt;D. ~ &lt;br /&gt;&lt;br /&gt;13. What set of characters will be matched if the expression is [1-9A-D]? &lt;br /&gt;&lt;br /&gt;A. 123456789ABCDabcd&lt;br /&gt;B. 123456789ABCD&lt;br /&gt;C. 19ADad&lt;br /&gt;D. 19AD &lt;br /&gt;&lt;br /&gt;14. Which of the following matches will be found to file\.html? (choose all that apply):&lt;br /&gt;A. file.htmlll&lt;br /&gt;B. file.html&lt;br /&gt;C. file.htm&lt;br /&gt;D. file &lt;br /&gt;&lt;br /&gt;15. Which of the following regular expressions should be used to find lines that do not contain numbers?&lt;br /&gt;A. -n&lt;br /&gt;B. "\0 \1 \2 \3 \4 \5 \6 \7 \8 \9"&lt;br /&gt;C. [0-9]&lt;br /&gt;D. [^0-9] &lt;br /&gt;&lt;br /&gt;16. On the command line, what does encompassing a string within single quotes accomplish? &lt;br /&gt;&lt;br /&gt;A. It turns off the special significance of everything within the quotes.&lt;br /&gt;B. It turns off the special significance of everything within the quotes except for a few very special characters.&lt;br /&gt;C. It executes the command within.&lt;br /&gt;D. It sets a variable value. &lt;br /&gt;&lt;br /&gt;17. You want to perform a test on a string to make sure that the length of it is not zero before using it. Which test should be done to accomplish this? &lt;br /&gt;&lt;br /&gt;A. [[ string ]]&lt;br /&gt;B. [[ -z string ]]&lt;br /&gt;C. [[ -n string ]]&lt;br /&gt;D. [[ -a string ]] &lt;br /&gt;&lt;br /&gt;18. You are writing a shell script that includes a number of choices within a case statement. What is used to end the case statement? &lt;br /&gt;&lt;br /&gt;A. done&lt;br /&gt;B. fi&lt;br /&gt;C. end&lt;br /&gt;D. esac &lt;br /&gt;&lt;br /&gt;19. Which of the following can be checked to see how many positional parameters were used to call a script? &lt;br /&gt;&lt;br /&gt;A. $#&lt;br /&gt;B. $$&lt;br /&gt;C. $!&lt;br /&gt;D. $? &lt;br /&gt;&lt;br /&gt;20. Which switch should be used with grep to print all lines in a file that do not match the search criteria given? &lt;br /&gt;&lt;br /&gt;A. -i &lt;br /&gt;B. -v&lt;br /&gt;C. -c&lt;br /&gt;D. -n &lt;br /&gt;&lt;br /&gt;21. You are writing a simple shell script that will prompt the user and require them to enter a string variable. What command will you need to use within the script to input the user's string? &lt;br /&gt;&lt;br /&gt;A. input&lt;br /&gt;B. enter&lt;br /&gt;C. read&lt;br /&gt;D. record &lt;br /&gt;&lt;br /&gt;22. What is the stream number associated with standard error? &lt;br /&gt;&lt;br /&gt;A. 3 &lt;br /&gt;B. 2 &lt;br /&gt;C. 1 &lt;br /&gt;D. 0 &lt;br /&gt;&lt;br /&gt;23. Which of the following regular expressions would indicate that the search item preceding it must be found at least 5 times? &lt;br /&gt;&lt;br /&gt;A. (5)&lt;br /&gt;B. 5x&lt;br /&gt;C. {5,}&lt;br /&gt;D. [5+] &lt;br /&gt;&lt;br /&gt;24. Which of the following should be used to test if two strings are equal? &lt;br /&gt;&lt;br /&gt;A. string1 = string2&lt;br /&gt;B. string1 –eq string2&lt;br /&gt;C. string1 –a string2&lt;br /&gt;D. string1 –o string2 &lt;br /&gt;&lt;br /&gt;25. Which of the following would be the result of the command echo 1{2,3,4}5 (choose all that apply)? &lt;br /&gt;&lt;br /&gt;A. 15&lt;br /&gt;B. 125&lt;br /&gt;C. 135&lt;br /&gt;D. 145&lt;br /&gt;E. 12345&lt;br /&gt;F. 12,3,45&lt;br /&gt;G. 1{2,3,4}5 &lt;br /&gt;&lt;br /&gt;26. On the command line, what does encompassing a string within double quotes accomplish? &lt;br /&gt;&lt;br /&gt;A. It turns off the special significance of everything within the quotes.&lt;br /&gt;B. It turns off the special significance of everything within the quotes except for a few very special characters.&lt;br /&gt;C. It executes the command within.&lt;br /&gt;D. It sets a variable value. &lt;br /&gt;&lt;br /&gt;27. Which of the following can be used to see the arguments given when the shell script was invoked? &lt;br /&gt;&lt;br /&gt;A. $#&lt;br /&gt;B. $?&lt;br /&gt;C. $0&lt;br /&gt;D. $* &lt;br /&gt;&lt;br /&gt;28. You are including a while loop in a shell script. What is used to end the while loop? &lt;br /&gt;&lt;br /&gt;A. done&lt;br /&gt;B. fi&lt;br /&gt;C. end&lt;br /&gt;D. esac &lt;br /&gt;&lt;br /&gt;29. What regular expression can be used to find all lines that end with a period? (Fill in the blank.) &lt;br /&gt;&lt;br /&gt;30. Which switch should be used with grep to ignore case as you look for matches in a file? &lt;br /&gt;&lt;br /&gt;A. -i&lt;br /&gt;B. -v&lt;br /&gt;C. -c&lt;br /&gt;D. -n &lt;br /&gt;&lt;br /&gt;31. Which of the following is a synonym for [^[:alnum:]] ? &lt;br /&gt;&lt;br /&gt;A. \W&lt;br /&gt;B. \w&lt;br /&gt;C. \a&lt;br /&gt;D. \A &lt;br /&gt;&lt;br /&gt;32. Within the Bash shell, what is the tilde (~) translated to by default? &lt;br /&gt;&lt;br /&gt;A. the PATH&lt;br /&gt;B. the present working directory&lt;br /&gt;C. the user's home directory&lt;br /&gt;D. the TMP directory &lt;br /&gt;&lt;br /&gt;33. With a simple command given at a prompt, how does Bash process it? &lt;br /&gt;&lt;br /&gt;A. from right to left&lt;br /&gt;B. from left to right&lt;br /&gt;C. in alphabetic order&lt;br /&gt;D. in ASCII order &lt;br /&gt;&lt;br /&gt;34. Which of the following Bash built-in commands can be used within a shell script to parse positional variables? &lt;br /&gt;&lt;br /&gt;A. shear&lt;br /&gt;B. parse&lt;br /&gt;C. trim&lt;br /&gt;D. getopts &lt;br /&gt;&lt;br /&gt;35. The typeset command exists in Bash for compatibility with Korn shell scripts. What command, however, is more favored for use with Bash? &lt;br /&gt;&lt;br /&gt;A. slot &lt;br /&gt;B. state&lt;br /&gt;C. declare&lt;br /&gt;D. proclaim &lt;br /&gt;&lt;br /&gt;36. On the command line, what does encompassing a string within backticks accomplish? &lt;br /&gt;&lt;br /&gt;A. It turns off the special significance of everything within the backticks.&lt;br /&gt;B. It turns off the special significance of everything within the backticks except for a few very special characters.&lt;br /&gt;C. It executes the command within.&lt;br /&gt;D. It sets a variable value. &lt;br /&gt;&lt;br /&gt;37. Which of the following can be used within a shell script to see the name with which the shell is being executed? &lt;br /&gt;&lt;br /&gt;A. $#&lt;br /&gt;B. $?&lt;br /&gt;C. $0&lt;br /&gt;D. $* &lt;br /&gt;&lt;br /&gt;38. You are tweaking a shell script by adding an until loop. What needs to be used to end the until loop? &lt;br /&gt;&lt;br /&gt;A. done&lt;br /&gt;B. fi&lt;br /&gt;C. end&lt;br /&gt;D. esac &lt;br /&gt;&lt;br /&gt;39. Which of the following should be used to test if the value of two integers is the same? &lt;br /&gt;&lt;br /&gt;A. integer1 = integer2&lt;br /&gt;B. integer1 –eq integer2&lt;br /&gt;C. integer1 –a integer2&lt;br /&gt;D. integer1 –o integer2 &lt;br /&gt;&lt;br /&gt;40. Which switch should be used with grep to count all lines in a file that match the search criteria? &lt;br /&gt;&lt;br /&gt;A. -i&lt;br /&gt;B. -v&lt;br /&gt;C. -c &lt;br /&gt;D. -n &lt;br /&gt;&lt;br /&gt;41. What is the file descriptor/stream number for standard input? (Fill in the blank.) &lt;br /&gt;&lt;br /&gt;42. Which of the following utilities processes most quickly? &lt;br /&gt;&lt;br /&gt;A. grep&lt;br /&gt;B. egrep&lt;br /&gt;C. fgrep &lt;br /&gt;&lt;br /&gt;43. Which of the following regular expressions means the search criteria preceding it must be found at least seven times, but not more than ten times? &lt;br /&gt;&lt;br /&gt;A. {7,,10}&lt;br /&gt;B. {7,10}&lt;br /&gt;C. {7&gt;10}&lt;br /&gt;D. {7,!10} &lt;br /&gt;&lt;br /&gt;44. Which of the following regular expressions can be used to find all blank lines in a file? &lt;br /&gt;&lt;br /&gt;A.""&lt;br /&gt;B. ^$&lt;br /&gt;C. ^" "$&lt;br /&gt;D. [ ] &lt;br /&gt;&lt;br /&gt;45. In a shell script, you have nested one loop within another (both using the syntax for – do – done). What can be used to exit the first loop without exiting the second once a specific condition is met? &lt;br /&gt;&lt;br /&gt;A. enod&lt;br /&gt;B. end&lt;br /&gt;C. break&lt;br /&gt;D. rof &lt;br /&gt;&lt;br /&gt;46. Which option can be used with test to see if a file exists and is a regular file? &lt;br /&gt;&lt;br /&gt;A. -r&lt;br /&gt;B. -e&lt;br /&gt;C. -a&lt;br /&gt;D. -f &lt;br /&gt;&lt;br /&gt;47. What is the stream number associated with standard output? &lt;br /&gt;&lt;br /&gt;A. 3 &lt;br /&gt;B. 2 &lt;br /&gt;C. 1 &lt;br /&gt;D. 0 &lt;br /&gt;&lt;br /&gt;48. Which of the following can be used to see the exit code of the last command or shell executed? &lt;br /&gt;&lt;br /&gt;A. $#&lt;br /&gt;B. $?&lt;br /&gt;C. $0&lt;br /&gt;D. $* &lt;br /&gt;&lt;br /&gt;49. Which test on a string can be used to make sure that the length of it is zero? &lt;br /&gt;&lt;br /&gt;A. [[ string ]]&lt;br /&gt;B. [[ -z string ]]&lt;br /&gt;C. [[ -n string ]]&lt;br /&gt;D. [[ -a string ]] &lt;br /&gt;&lt;br /&gt;50. If the value of ALT is set to the string "MPC", what will the command echo '$ALT' return? &lt;br /&gt;&lt;br /&gt;A. $MPC&lt;br /&gt;B. MPC&lt;br /&gt;C. ALT&lt;br /&gt;D. $ALT &lt;br /&gt;&lt;br /&gt;Answers &lt;br /&gt;&lt;br /&gt;1. A period (.) is used to match any single character. Answer: D.&lt;br /&gt;&lt;br /&gt;2. The circumflex (^) is used to signify the beginning of a line. Answer: C.&lt;br /&gt;&lt;br /&gt;3. You must use the backslash (\) with the metacharacter – "\?". Answer: A.&lt;br /&gt;&lt;br /&gt;4. The asterisk (*) will match zero or more occurrences of the character(s) preceding it. Answer: A.&lt;br /&gt;&lt;br /&gt;5. The expression [0-9] will find a match for any number between 0 and 9 (all numbers). Answer: C.&lt;br /&gt;&lt;br /&gt;6. The expression [Mm]uncie will find both "Muncie" and "muncie" . Answer: B.&lt;br /&gt;&lt;br /&gt;7. The regular expression to use is : ^\?&lt;br /&gt;&lt;br /&gt;8. The plus sign (+) is used to indicate that the preceding must be matched one or more times. Answer: A.&lt;br /&gt;&lt;br /&gt;9. A pipe (|) is used to separate multiple values being searched for. Answer: C.&lt;br /&gt;&lt;br /&gt;10. Using the expression Sam\(antha\)\? will always match "Sam" and it can be followed by zero or one (?) occurrences of "antha" . Answer: D.&lt;br /&gt;&lt;br /&gt;11. The expression [[:space:]] can be used to find any white space, including spaces and tabs. Answer: C.&lt;br /&gt;&lt;br /&gt;12. The dollar sign ($) is used to signify the end of a line. Answer: B.&lt;br /&gt;&lt;br /&gt;13. Anything within the character set 123456789ABCD will be matched the expression [1-9A-D]. Answer: B.&lt;br /&gt;&lt;br /&gt;14. The question mark (?) will match zero or one occurrence of the "l", meaning that both file.htm and file.html will be found. Answer: B&amp;C. &lt;br /&gt;&lt;br /&gt;15. The expression [^0-9] will find a match to everything except the number set 0 to 9. Answer: D.&lt;br /&gt;&lt;br /&gt;16. Single quotes are used to turn off the special significance of everything within the quotes. Answer: A.&lt;br /&gt;&lt;br /&gt;17. The syntax [[ -n string ]] is used to see if the string has a length greater than zero. Answer: C.&lt;br /&gt;&lt;br /&gt;18. The case statement ends with esac. Answer: D.&lt;br /&gt;&lt;br /&gt;19. The value of $# can be checked to see how many positional parameters were used to call a script. Answer: A.&lt;br /&gt;&lt;br /&gt;20. The –v switch is used to print all lines of a file that do not match the search criteria given. Answer: B.&lt;br /&gt;&lt;br /&gt;21. The read command is used to accept a value and assign it to a variable. Answer: C.&lt;br /&gt;&lt;br /&gt;22. Standard error is stream 2. Answer: B.&lt;br /&gt;&lt;br /&gt;23. The expression {5,} means the preceding must be found at least five times. Answer: C.&lt;br /&gt;&lt;br /&gt;24. To test and see if two string values are the same, the equal sign (=) is used. Answer: A.&lt;br /&gt;&lt;br /&gt;25. The command will echo "1" and "5" with each number specified between the braces in the middle: 125, 135, and 145. Answer: B&amp;C&amp;D.&lt;br /&gt;&lt;br /&gt;26. Double quotes turn off the special significance of everything within the quotes except for a few very special characters that remain (such as single quotes, the dollar sign, and back slash). Answer: B.&lt;br /&gt;&lt;br /&gt;27. The variable $* can be used to see the arguments given when the shell script was invoked. Answer: D.&lt;br /&gt;&lt;br /&gt;28. A while loop ends with done (while – do – done). Answer: A.&lt;br /&gt;&lt;br /&gt;29. The regular expression to use is: \.$&lt;br /&gt;&lt;br /&gt;30. The –i option is used to ignore case. Answer: A.&lt;br /&gt;&lt;br /&gt;31. \W is a synonym for [^[:alnum:]]. Answer: A.&lt;br /&gt;&lt;br /&gt;32. The tilde, by default, translates to the home directory of the user. Answer: C.&lt;br /&gt;&lt;br /&gt;33. Simple commands are executed from left to right. Answer: B.&lt;br /&gt;&lt;br /&gt;34. The command getopts is a Bash built-in that can be used within a shell script to parse positional variables. Answer: D.&lt;br /&gt;&lt;br /&gt;35. The declare command is used to proclaim what type of variable it is so it can be handled accordingly. Answer: C.&lt;br /&gt;&lt;br /&gt;36. A command can be placed within backticks and that command is then executed, with the value of execution becoming the resulting string/value. Answer: C.&lt;br /&gt;&lt;br /&gt;37. The positional variable $0 holds the name with which the script was summoned. Answer: C.&lt;br /&gt;&lt;br /&gt;38. An until loop ends with done (until – do – done). Answer: A.&lt;br /&gt;&lt;br /&gt;39. A test can be done to see if the values of two integers are the same using the –eq parameter. Answer: B.&lt;br /&gt;&lt;br /&gt;40. The –c switch is used to count lines that match the search criteria. Answer: C.&lt;br /&gt;&lt;br /&gt;41. The file descriptor/stream number for standard input is 0.&lt;br /&gt;&lt;br /&gt;42. The fgrep utility does not have the same regular expression set as the other two, and is thus able to execute the fastest. Answer: C.&lt;br /&gt;&lt;br /&gt;43. The regular expressions {7,10} means the search criteria preceding it must be found at least seven times, but not more than ten times. Answer: B.&lt;br /&gt;&lt;br /&gt;44. To find the blank lines, look for the beginning (^) and end ($) with nothing between them (^$). Answer: B.&lt;br /&gt;&lt;br /&gt;45. The break statement can be used to exit a nested loop. Answer: C.&lt;br /&gt;&lt;br /&gt;46. The –f option is used to see if a file exists and is a regular file. Answer: D.&lt;br /&gt;&lt;br /&gt;47. Standard output is stream 1. Answer: C.&lt;br /&gt;&lt;br /&gt;48. The value of $? is equal to the exit code returned by the last command executed. Answer: B.&lt;br /&gt;&lt;br /&gt;49. The test [[ -z string ]] will verify that the length of the string is zero. Answer: B.50. Because the single quotes override the special meaning of the dollar sign,the string give ($ALT) is literally returned. Answer: D. &lt;br /&gt;&lt;br /&gt;50. The original Ethernet standard, first published in 1980 by the consortium of DEC, Intel, and Xerox, specified a speed of 10 Mbps. Answer: C. &lt;br /&gt;&lt;br /&gt;Emmett Dulaney is the author of the several books on Linux/Unix and certification as well as a columnist for UnixReview.com. Emmett's blog can be found at: http://edulaney.blogspot.com, and he can be reached (and welcomes your comments) at: edulaney@insightbb.com.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-9019722724608118291?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/9019722724608118291/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=9019722724608118291&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/9019722724608118291'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/9019722724608118291'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2008/02/test-your-knowledge-of-regular.html' title='Test Your Knowledge of Regular Expressions and Shell Basics'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-9017178689227666073</id><published>2008-02-14T14:22:00.000-05:00</published><updated>2008-02-14T14:23:35.314-05:00</updated><title type='text'>Test Your Knowledge of Users and Groups by Emmett Dulaney :</title><content type='html'>Test Your Knowledge of Users and Groups by Emmett Dulaney :&lt;br /&gt;&lt;br /&gt;If there is one thing that all administrators deal with on a regular basis, it is users and groups. If there is &lt;br /&gt;one topic that you should know inside and out, it is users and groups. &lt;br /&gt;That said, following are 50 questions &lt;br /&gt;intended to test your knowledge of user and group fundamentals at an intermediate level. &lt;br /&gt;&lt;br /&gt;Good luck (answers are at the end of the article)! &lt;br /&gt;&lt;br /&gt;1. What is the default UID number assigned to the first user added to a system on most systems? &lt;br /&gt;&lt;br /&gt;A. 1&lt;br /&gt;B. 100&lt;br /&gt;C. 1000&lt;br /&gt;D. 10000 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2. Which command can be used at the command line to change your active GID to a new one? &lt;br /&gt;&lt;br /&gt;A. chgroup&lt;br /&gt;B. group&lt;br /&gt;C. newgrp&lt;br /&gt;D. switch &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3. Which field of the /etc/passwd file identifies the user’s primary group ID? &lt;br /&gt;&lt;br /&gt;A. 1 &lt;br /&gt;B. 3 &lt;br /&gt;C. 4 &lt;br /&gt;D. 5 &lt;br /&gt;E. 6&lt;br /&gt;F. 7 &lt;br /&gt;&lt;br /&gt;4. NIS entries are automatically added to your system. What character precedes entries in /etc/passwd for which &lt;br /&gt;   this is done? &lt;br /&gt;&lt;br /&gt;A. + &lt;br /&gt;B. !&lt;br /&gt;C. ? &lt;br /&gt;D. % &lt;br /&gt;&lt;br /&gt;5. How many fields does the /etc/shadow file consist of? &lt;br /&gt;&lt;br /&gt;A. 7&lt;br /&gt;B. 9&lt;br /&gt;C. 12 &lt;br /&gt;D. 15 &lt;br /&gt;&lt;br /&gt;6. Which command can be used to see a user’s password aging information? &lt;br /&gt;&lt;br /&gt;A. useradd -l&lt;br /&gt;B. passwd -l&lt;br /&gt;C. chage -l&lt;br /&gt;D. usermod -l &lt;br /&gt;&lt;br /&gt;7. If the passwords are stored in /etc/shadow instead of /etc/passwd, what single letter is found in the second column &lt;br /&gt;   of /etc/passwd entries? __________ (Fill in the blank.) &lt;br /&gt;&lt;br /&gt;8. Who owns the /etc/group file? &lt;br /&gt;&lt;br /&gt;A. root &lt;br /&gt;B. bin &lt;br /&gt;C. daemon &lt;br /&gt;D. nobody &lt;br /&gt;&lt;br /&gt;9. Which tool can be used to create a user account with default values? &lt;br /&gt;&lt;br /&gt;A. pwck&lt;br /&gt;B. useradd&lt;br /&gt;C. usermod&lt;br /&gt;D. chfn &lt;br /&gt;&lt;br /&gt;10. Which module can PAM use to enforce strong passwords (choose the best answer)? &lt;br /&gt;&lt;br /&gt;A. pam_strong&lt;br /&gt;B. pam_usersec&lt;br /&gt;C. pam_pwcheck&lt;br /&gt;D. pam_cracker &lt;br /&gt;&lt;br /&gt;11. Instead of logging in as root regularly, you have advised all administrators to use sudo. Which files logs &lt;br /&gt;    all sudo commands? &lt;br /&gt;&lt;br /&gt;A. /tmp/sudo/log&lt;br /&gt;B. /var/sudolog&lt;br /&gt;C. /etc/sudo/log&lt;br /&gt;D. /var/log/messages &lt;br /&gt;&lt;br /&gt;12. The root user, on every system, always has the same UID. What is its value? &lt;br /&gt;&lt;br /&gt;A. 0&lt;br /&gt;B. 1 &lt;br /&gt;C. 10&lt;br /&gt;D. 100 &lt;br /&gt;&lt;br /&gt;13. Within the member list field of the /etc/group file, what character is used to separate members? &lt;br /&gt;&lt;br /&gt;A. a colon (:)&lt;br /&gt;B. a comma (,)&lt;br /&gt;C. a period (.)&lt;br /&gt;D. a pipe (|) &lt;br /&gt;&lt;br /&gt;14. By default, what utility is used to hash the passwords that appear in /etc/shadow? &lt;br /&gt;&lt;br /&gt;A. hash&lt;br /&gt;B. encode&lt;br /&gt;C. pgp&lt;br /&gt;D. crypt &lt;br /&gt;&lt;br /&gt;15. Which file can be used to limit which users can use sudo? &lt;br /&gt;&lt;br /&gt;A. /etc/sudo&lt;br /&gt;B. /etc/sudoers&lt;br /&gt;C. /etc/sudo/accept&lt;br /&gt;D. /etc/accept &lt;br /&gt;&lt;br /&gt;16. In Ubuntu, which utility can be used to add a new user to the system? &lt;br /&gt;&lt;br /&gt;A. makeuser&lt;br /&gt;B. newuser&lt;br /&gt;C. adduser&lt;br /&gt;D. usermake &lt;br /&gt;&lt;br /&gt;17. Which command is used to change an NIS user’s password? &lt;br /&gt;&lt;br /&gt;A. nispasswd&lt;br /&gt;B. yppasswd&lt;br /&gt;C. passwd -nis&lt;br /&gt;D. gpasswd &lt;br /&gt;&lt;br /&gt;18. How many fields are there in the /etc/group file? &lt;br /&gt;&lt;br /&gt;A. 4 &lt;br /&gt;B. 5&lt;br /&gt;C. 6&lt;br /&gt;D. 7 &lt;br /&gt;&lt;br /&gt;19. Which field of the /etc/passwd file identifies the home directory for the user? &lt;br /&gt;&lt;br /&gt;A. 1 &lt;br /&gt;B. 3 &lt;br /&gt;C. 4 &lt;br /&gt;D. 5 &lt;br /&gt;E. 6&lt;br /&gt;F. 7 &lt;br /&gt;&lt;br /&gt;20. If you want to run su and not only become the other user, but also run their login shell, which option should &lt;br /&gt;    you specify? &lt;br /&gt;&lt;br /&gt;A. -&lt;br /&gt;B. -l&lt;br /&gt;C. -r&lt;br /&gt;D. -s &lt;br /&gt;&lt;br /&gt;21. What character is used as a delimiter between fields in the /etc/passwd file? __________ (Fill in the blank.)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;22. In the /etc/shadow file, dates are specified for when the password was set/changed and the absolute last date &lt;br /&gt;    that it can be used. This is expressed as a number of days since when? &lt;br /&gt;&lt;br /&gt;A. January 1, 1970&lt;br /&gt;B. December 31, 1969&lt;br /&gt;C. December 25, 1968&lt;br /&gt;D. November 30, 1967 &lt;br /&gt;&lt;br /&gt;23. Which PAM module examines the home directory of the user for files/directories that have dangerous permissions and &lt;br /&gt;    issues a warning if there are any there? &lt;br /&gt;&lt;br /&gt;A. pam_env.so&lt;br /&gt;B. pam_homecheck.so&lt;br /&gt;C. pam_securetty.so&lt;br /&gt;D. pam_unix2.so &lt;br /&gt;&lt;br /&gt;24. In the following /etc/shadow entry, which value indicates the number of days after a password has expired that &lt;br /&gt;    the account is disabled and cannot be used? &lt;br /&gt;&lt;br /&gt;edulaney:PcaQWn6d1la5.:13000:0:1:2:3:14000: &lt;br /&gt;&lt;br /&gt;A. 0&lt;br /&gt;B. 1 &lt;br /&gt;C. 2 &lt;br /&gt;D. 3 &lt;br /&gt;&lt;br /&gt;25. Which field of the /etc/passwd file holds the UID? &lt;br /&gt;&lt;br /&gt;A. 1 &lt;br /&gt;B. 3 &lt;br /&gt;C. 4 &lt;br /&gt;D. 5&lt;br /&gt;E. 6&lt;br /&gt;F. 7 &lt;br /&gt;&lt;br /&gt;26. What is the default GID number assigned to the first group added to a system on most systems? &lt;br /&gt;&lt;br /&gt;A. 1&lt;br /&gt;B. 100&lt;br /&gt;C. 1000 &lt;br /&gt;D. 10000 &lt;br /&gt;&lt;br /&gt;27. Which command can be used to add a new user to an existing group? &lt;br /&gt;&lt;br /&gt;A. groupadd -g&lt;br /&gt;B. groupmod -g&lt;br /&gt;C. useradd -g&lt;br /&gt;D. usermod -g &lt;br /&gt;&lt;br /&gt;28. For security reasons, you want to prevent the use of finger and the values that are returned to it from /etc/passwd. Which port should be blocked at the firewall? &lt;br /&gt;&lt;br /&gt;A. 49&lt;br /&gt;B. 59&lt;br /&gt;C. 69 &lt;br /&gt;D. 79 &lt;br /&gt;&lt;br /&gt;29. What character should be added to an account entry to disable it? __________ (Fill in the blank.) &lt;br /&gt;&lt;br /&gt;30. Which command can be used to add an existing user to an existing group? &lt;br /&gt;&lt;br /&gt;A. groupadd -g&lt;br /&gt;B. groupmod -g&lt;br /&gt;C. useradd -g&lt;br /&gt;D. usermod -g &lt;br /&gt;&lt;br /&gt;31. If you want to run su and not only become root, but also use root’s environmental variables. Which option should you specify? &lt;br /&gt;&lt;br /&gt;A. -&lt;br /&gt;B.-c&lt;br /&gt;C. -r&lt;br /&gt;D. -s &lt;br /&gt;&lt;br /&gt;32. Which of the following files holds the default password aging information for newly created accounts? &lt;br /&gt;&lt;br /&gt;A. /etc/inittab&lt;br /&gt;B. /etc/defaults/passwd&lt;br /&gt;C. /etc/defaults/aging&lt;br /&gt;D. /etc/login.defs &lt;br /&gt;&lt;br /&gt;33. Which PAM module verifies that the username name given is valid (exists in passwd and shadow)? &lt;br /&gt;&lt;br /&gt;A. pam_env.so&lt;br /&gt;B. pam_homecheck.so&lt;br /&gt;C. pam_securetty.so&lt;br /&gt;D. pam_unix2.so &lt;br /&gt;&lt;br /&gt;34. Which field of the /etc/passwd file identifies the default shell to use when the user logs in? &lt;br /&gt;&lt;br /&gt;A. 1 &lt;br /&gt;B. 3 &lt;br /&gt;C. 4 &lt;br /&gt;D. 5&lt;br /&gt;E. 6&lt;br /&gt;F. 7 &lt;br /&gt;&lt;br /&gt;35. In the following /etc/shadow entry, which value indicates the maximum number of days the password can be used before it must be changed? &lt;br /&gt;&lt;br /&gt;edulaney:PcaQWn6d1la5.:13000:0:1:2:3:14000: &lt;br /&gt;&lt;br /&gt;A. 0 &lt;br /&gt;B. 1&lt;br /&gt;C. 2 &lt;br /&gt;D. 3 &lt;br /&gt;&lt;br /&gt;36. Which command is used to convert passwords from /etc/password entries into /etc/shadow entries? &lt;br /&gt;&lt;br /&gt;A. pwconv&lt;br /&gt;B. pwunconv&lt;br /&gt;C. convert&lt;br /&gt;D. unshadow &lt;br /&gt;&lt;br /&gt;37. The root user, on every system, always has the same group ID (GID) value. What is that value? &lt;br /&gt;&lt;br /&gt;A. 0&lt;br /&gt;B. 1&lt;br /&gt;C.10 &lt;br /&gt;D. 100 &lt;br /&gt;&lt;br /&gt;38. Which tool can be used to change CGOS values? &lt;br /&gt;&lt;br /&gt;A.pwck&lt;br /&gt;B. useradd&lt;br /&gt;C. usermod&lt;br /&gt;D. chfn &lt;br /&gt;&lt;br /&gt;39. Which command is used to change an LDAP password? &lt;br /&gt;&lt;br /&gt;A. passwdldap&lt;br /&gt;B. lpasswd&lt;br /&gt;C. ldappaswd&lt;br /&gt;D. yp &lt;br /&gt;&lt;br /&gt;40. Which of the following system accounts has a default GID of 1? &lt;br /&gt;&lt;br /&gt;A. bin&lt;br /&gt;B. mail&lt;br /&gt;C. uucp&lt;br /&gt;D. named &lt;br /&gt;&lt;br /&gt;41. Which field of the /etc/passwd file holds the login name? &lt;br /&gt;&lt;br /&gt;A. 1 &lt;br /&gt;B. 3 &lt;br /&gt;C. 4 &lt;br /&gt;D. 5&lt;br /&gt;E. 6&lt;br /&gt;F. 7 &lt;br /&gt;&lt;br /&gt;42. Which of the following files holds default values assigned to newly created user accounts? &lt;br /&gt;&lt;br /&gt;A. /etc/default/useradd&lt;br /&gt;B. /etc/users/default&lt;br /&gt;C. /etc/useradd/users&lt;br /&gt;D. /etc/default &lt;br /&gt;&lt;br /&gt;43. Which command-line utility can be used in Ubuntu to remove a group? &lt;br /&gt;&lt;br /&gt;A. ungroup&lt;br /&gt;B. group_rm&lt;br /&gt;C. rmgroup&lt;br /&gt;D. delgroup &lt;br /&gt;&lt;br /&gt;44. Within which directory does su reside by default? &lt;br /&gt;&lt;br /&gt;A. /bin&lt;br /&gt;B. /etc&lt;br /&gt;C. /usr&lt;br /&gt;D. /var &lt;br /&gt;&lt;br /&gt;45. Which PAM module verifies that the root user is allowed access from the current terminal? &lt;br /&gt;&lt;br /&gt;A. pam_env.so&lt;br /&gt;B. pam_homecheck.so&lt;br /&gt;C. pam_securetty.so&lt;br /&gt;D. pam_unix2.so &lt;br /&gt;&lt;br /&gt;46. In the following /etc/shadow entry, which value indicates the minimum number of days the password has to be used &lt;br /&gt;before it can be changed? &lt;br /&gt;&lt;br /&gt;edulaney:PcaQWn6d1la5.:13000:0:1:2:3:14000: &lt;br /&gt;&lt;br /&gt;A. 0 &lt;br /&gt;B. 1 &lt;br /&gt;C. 2 &lt;br /&gt;D. 3 &lt;br /&gt;&lt;br /&gt;47. Which tool can be used to check the integrity of the passwd and shadow files? &lt;br /&gt;&lt;br /&gt;A. pwck&lt;br /&gt;B. useradd&lt;br /&gt;C. usermod&lt;br /&gt;D. chfn &lt;br /&gt;&lt;br /&gt;48. Which command is used to convert passwords from /etc/shadow entries into /etc/passwd entries? &lt;br /&gt;&lt;br /&gt;A. arsort()&lt;br /&gt;B. rev()&lt;br /&gt;C. trosa()&lt;br /&gt;D. zsort() &lt;br /&gt;&lt;br /&gt;49. Which field of the /etc/passwd file is known as the GCOS field? &lt;br /&gt;&lt;br /&gt;A. 1 &lt;br /&gt;B. 3 &lt;br /&gt;C. 4 &lt;br /&gt;D. 5&lt;br /&gt;E. 6&lt;br /&gt;F. 7 &lt;br /&gt;&lt;br /&gt;50. Which of the following system accounts has a default UID of 10? &lt;br /&gt;&lt;br /&gt;A. bin&lt;br /&gt;B. mail&lt;br /&gt;C. uucp&lt;br /&gt;D. named &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Answers &lt;br /&gt;&lt;br /&gt;1. The default user ID number on most systems is 1000, and the numbers then increment by one from there with each newly &lt;br /&gt;added user. Answer: C.&lt;br /&gt;&lt;br /&gt;2. The newgrp command can be used at the command line to change your active GID to a new one. &lt;br /&gt;Answer: C.&lt;br /&gt;&lt;br /&gt;3. The fourth field of /etc/passwd identifies the GID. &lt;br /&gt;Answer: C.&lt;br /&gt;&lt;br /&gt;4. The plus sign (“+”) precedes entries in /etc/passwd for which NIS inserts values. Answer: A.&lt;br /&gt;&lt;br /&gt;5. There are nine fields in the /etc/shadow file. &lt;br /&gt;Answer: B.&lt;br /&gt;&lt;br /&gt;6. The chage –l command can be used to see a user’s password aging information (for example, chage –l edulaney). &lt;br /&gt;Answer: C.&lt;br /&gt;&lt;br /&gt;7. An “x” in the second column of /etc/passwd indicates that the password values are being stored in /etc/shadow.&lt;br /&gt;&lt;br /&gt;8. The root user, by default, owns the /etc/group file. &lt;br /&gt;Answer: A.&lt;br /&gt;&lt;br /&gt;9.  The useradd tool can be used to create a user account with default values. &lt;br /&gt;Answer: B.&lt;br /&gt;&lt;br /&gt;10. PAM can use the pam_pwcheck module to enforce strong passwords. &lt;br /&gt;Answer: C.&lt;br /&gt;&lt;br /&gt;11. The /var/log/messages file logs all sudo commands. &lt;br /&gt;Answer: D.&lt;br /&gt;&lt;br /&gt;12. The UID number for root is always 0. &lt;br /&gt;Answer: A.&lt;br /&gt;&lt;br /&gt;13. Within the member list field of the /etc/group file, a comma is used to separate members. &lt;br /&gt;Answer: B.&lt;br /&gt;&lt;br /&gt;14. The crypt utility is used to hash the passwords that appear in /etc/shadow. &lt;br /&gt;Answer: D.&lt;br /&gt;&lt;br /&gt;15. The /etc/sudoers file can be used to limit which users can use sudo. &lt;br /&gt;Answer: B.&lt;br /&gt;&lt;br /&gt;16. The adduser utility can be used to add a new user to the system. &lt;br /&gt;Answer: C.&lt;br /&gt;&lt;br /&gt;17. The yppasswd command is used to change an NIS user’s password. &lt;br /&gt;Answer: B.&lt;br /&gt;&lt;br /&gt;18. The /etc/group file consists of four fields. &lt;br /&gt;Answer: A.&lt;br /&gt;&lt;br /&gt;19. The sixth field of /etc/passwd identifies the user’s home directory. &lt;br /&gt;Answer: E.&lt;br /&gt;&lt;br /&gt;20. To run su and not only become the other user, but also run their login shell, specify the -l (login) option. &lt;br /&gt;Answer: B.&lt;br /&gt;&lt;br /&gt;21. Answer: The colon (“:”) is used as a delimiter between fields in the /etc/passwd file.&lt;br /&gt;&lt;br /&gt;22. Values are expressed as the number of days since January 1, 1970. &lt;br /&gt;Answer: A.&lt;br /&gt;&lt;br /&gt;23. The pam_homecheck.so  module performs this function. &lt;br /&gt;Answer: B.&lt;br /&gt;&lt;br /&gt;24. The seventh field of an /etc/shadow entry – holding a “3” in this case – indicates the number of days after the &lt;br /&gt;    password expires before the account is disabled. &lt;br /&gt;Answer: D.&lt;br /&gt;&lt;br /&gt;25. The third field of /etc/passwd holds the UID. &lt;br /&gt;Answer: B.&lt;br /&gt;&lt;br /&gt;26. The first group added to most systems begins at 100 and increments from there with each newly added group.&lt;br /&gt; Answer: B.&lt;br /&gt;&lt;br /&gt;27. The useradd –g command can be used to add a new user to an existing group. &lt;br /&gt;Answer: C.&lt;br /&gt;&lt;br /&gt;28. The finger port to block is 79. &lt;br /&gt;Answer: D.&lt;br /&gt;&lt;br /&gt;29. Answer: An asterisk (“*”) character should be added to an account entry to disable it.&lt;br /&gt;&lt;br /&gt;30.  The usermod –g command can be used to add an existing user to an existing group. &lt;br /&gt;Answer: D.&lt;br /&gt;&lt;br /&gt;31. Using just the dash (su -), you not only become root, but also use root’s environmental variables. &lt;br /&gt;Answer: A.&lt;br /&gt;&lt;br /&gt;32. The /etc/login.defs file holds the default password aging information for newly created accounts. &lt;br /&gt;Answer: D.&lt;br /&gt;&lt;br /&gt;33. The pam_unix2.so module performs this function.  &lt;br /&gt;Answer: D.&lt;br /&gt;&lt;br /&gt;34. The seventh field holds the login shell path. If no value is given, the default shell is assigned. &lt;br /&gt;Answer: F.&lt;br /&gt;&lt;br /&gt;35. The fifth field of an /etc/shadow entry – holding a “1” in this case – indicates the maximum number of days the &lt;br /&gt;    password can be used before it must be changed. &lt;br /&gt;Answer: B.&lt;br /&gt;&lt;br /&gt;36. The pwconv command is used to convert passwords from /etc/password entries into /etc/shadow entries. &lt;br /&gt;Answer: A.&lt;br /&gt;&lt;br /&gt;37. The primary GID number for root is 0. &lt;br /&gt;Answer: A.&lt;br /&gt;&lt;br /&gt;38. The chfn tool can be used to change CGOS values. &lt;br /&gt;Answer: D.&lt;br /&gt;&lt;br /&gt;39. The ldappaswd utility is used to change an LDAP password. &lt;br /&gt;Answer: C.&lt;br /&gt;&lt;br /&gt;40. By default, the bin account has a UID and GID of 1. &lt;br /&gt;Answer: A.&lt;br /&gt;&lt;br /&gt;41. The first field holds the login name. &lt;br /&gt;Answer: A.&lt;br /&gt;&lt;br /&gt;42. The /etc/default/useradd file holds default values assigned to newly created user accounts. &lt;br /&gt;Answer: A.&lt;br /&gt;&lt;br /&gt;43. The delgroup command-line utility can be used in Ubuntu to remove a group. &lt;br /&gt;Answer: D.&lt;br /&gt;&lt;br /&gt;44. The su utility resides beneath /bin. &lt;br /&gt;Answer: A.&lt;br /&gt;&lt;br /&gt;45. The pam_securetty.so  module performs this function. &lt;br /&gt;Answer: C.&lt;br /&gt;&lt;br /&gt;46. The fourth field of an /etc/shadow entry – holding a “0” in this case – indicates the minimum number of days the &lt;br /&gt;    password has to be used before it can be changed. &lt;br /&gt;Answer: A.&lt;br /&gt;&lt;br /&gt;47. The pwck tool can be used to check the integrity of the passwd and shadow files. &lt;br /&gt;Answer: A.&lt;br /&gt;&lt;br /&gt;48. The pwunconv command is used to convert passwords from /etc/shadow entries into /etc/passwd entries. &lt;br /&gt;Answer: B.&lt;br /&gt;&lt;br /&gt;49. The fifth field is the GCOS (General Electric Comprehensive Operating System) field. It holds free text that is&lt;br /&gt;    identifies the user and is often used to return values with finger. &lt;br /&gt;Answer: D.&lt;br /&gt;&lt;br /&gt;50. By default, the special account uucp has the UID of 10. Answer: C.&lt;br /&gt;&lt;br /&gt;Emmett Dulaney is the author of the several books on Linux/Unix and certification as well as a columnist for UnixReview. &lt;br /&gt;Emmett’s blog can be found at http://edulaney.blogspot.com and he can be reached &lt;br /&gt;(and welcomes your comments) at edulaney@insightbb.com.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-9017178689227666073?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/9017178689227666073/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=9017178689227666073&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/9017178689227666073'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/9017178689227666073'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2008/02/test-your-knowledge-of-users-and-groups.html' title='Test Your Knowledge of Users and Groups by Emmett Dulaney :'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-6620541361143959057</id><published>2008-02-14T13:18:00.000-05:00</published><updated>2008-02-14T13:19:18.451-05:00</updated><title type='text'>http://www.kalamazoolinux.org/tech/find.html</title><content type='html'>http://www.kalamazoolinux.org/tech/find.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-6620541361143959057?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/6620541361143959057/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=6620541361143959057&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/6620541361143959057'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/6620541361143959057'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2008/02/httpwwwkalamazoolinuxorgtechfindhtml.html' title='http://www.kalamazoolinux.org/tech/find.html'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-7001913459299418030</id><published>2008-02-07T16:40:00.000-05:00</published><updated>2008-02-07T16:42:45.779-05:00</updated><title type='text'>(Status ऑफ़ एकाच सोलारिस प्रोसस्सर ) psrinfo -v</title><content type='html'>Status of virtual processor 0 as of: 02/07/2008 16:40:50&lt;br /&gt;  on-line since 01/19/2008 05:39:05.&lt;br /&gt;  The sparcv9 processor operates at 900 MHz,&lt;br /&gt;        and has a sparcv9 floating point processor.&lt;br /&gt;Status of virtual processor 1 as of: 02/07/2008 16:40:50&lt;br /&gt;  on-line since 01/19/2008 05:39:05.&lt;br /&gt;  The sparcv9 processor operates at 900 MHz,&lt;br /&gt;        and has a sparcv9 floating point processor.&lt;br /&gt;Status of virtual processor 2 as of: 02/07/2008 16:40:50&lt;br /&gt;  on-line since 01/19/2008 05:39:05.&lt;br /&gt;  The sparcv9 processor operates at 900 MHz,&lt;br /&gt;        and has a sparcv9 floating point processor.&lt;br /&gt;Status of virtual processor 3 as of: 02/07/2008 16:40:50&lt;br /&gt;  on-line since 01/19/2008 05:39:04.&lt;br /&gt;  The sparcv9 processor operates at 900 MHz,&lt;br /&gt;        and has a sparcv9 floating point processor.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-7001913459299418030?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/7001913459299418030/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=7001913459299418030&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/7001913459299418030'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/7001913459299418030'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2008/02/status-psrinfo-v.html' title='(Status ऑफ़ एकाच सोलारिस प्रोसस्सर ) psrinfo -v'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-3027842726874434550</id><published>2008-02-05T13:11:00.000-05:00</published><updated>2008-02-05T13:12:42.136-05:00</updated><title type='text'>What does “&gt; /dev/null 2&gt;&amp;1″ mean?</title><content type='html'>What does “&gt; /dev/null 2&gt;&amp;1″ mean?&lt;br /&gt;&lt;br /&gt;./Script.sh &gt; /dev/null 2&gt;&amp;1Output redirection&lt;br /&gt;The greater-thans (&gt;) in commands like these redirect the program’s &lt;br /&gt;outputsomewhere. In this case, something is being redirected into /dev/null, and &lt;br /&gt;something is being redirected into &amp;1.&lt;br /&gt;&lt;br /&gt;Standard in, out, and error&lt;br /&gt;There are three standard sources of input and output for a program. Standard input usually comes from the keyboard if it’s an interactive program, or from &lt;br /&gt;another program if it’s processing the other program’s output. The program usually prints to standard output, and sometimes prints to standard error. These three &lt;br /&gt;file descriptors (you can think of them as “data pipes”) are often &lt;br /&gt;called STDIN, STDOUT, and STDERR.&lt;br /&gt;&lt;br /&gt;Sometimes they’re not named, they’re numbered! The built-in numberings for them &lt;br /&gt;are 0, 1, and 2, in that order. By default, if you don’t name or number one explicitly, you’re talking about STDOUT.&lt;br /&gt;&lt;br /&gt;Given that context, you can see the command above is redirecting standard output into /dev/null, which is a place you can dump anything you don’t want (often called the bit-bucket), then redirecting standard error into standard output (you have to put an &amp; in front of the destination when you do this).&lt;br /&gt;&lt;br /&gt;The short explanation, therefore, is “all output from this command should be shoved into a black hole.” That’s one good way to make a program be really quiet.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-3027842726874434550?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/3027842726874434550/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=3027842726874434550&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/3027842726874434550'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/3027842726874434550'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2008/02/what-does-devnull-2-mean.html' title='What does “&gt; /dev/null 2&gt;&amp;1″ mean?'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-4376955334250601424</id><published>2008-02-05T12:09:00.001-05:00</published><updated>2008-02-05T12:09:37.298-05:00</updated><title type='text'>/dev/null</title><content type='html'>http://en.wikipedia.org/wiki/Data_sink&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-4376955334250601424?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://en.wikipedia.org/wiki/Data_sink' title='/dev/null'/><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/4376955334250601424/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=4376955334250601424&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/4376955334250601424'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/4376955334250601424'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2008/02/devnull.html' title='/dev/null'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-4061894014658173232</id><published>2008-02-05T10:52:00.000-05:00</published><updated>2008-02-05T10:53:11.701-05:00</updated><title type='text'>कोड to display, How can arguments be passed to a function in K SHELL script.</title><content type='html'>#!/usr/bin/ksh&lt;br /&gt;&lt;br /&gt;## Code to display, How can arguments be passed to a function in K SHELL script.&lt;br /&gt;## First $1 is the first input to this script. See below for passing on parameters to&lt;br /&gt;## the functionA.&lt;br /&gt;##&lt;br /&gt;## Status: Tested.&lt;br /&gt;&lt;br /&gt;xx=$1&lt;br /&gt;yy=$1/logs/script.log&lt;br /&gt;&lt;br /&gt;functionA()&lt;br /&gt;{&lt;br /&gt;   a=$1&lt;br /&gt;   b=$2&lt;br /&gt;&lt;br /&gt;   echo $a&lt;br /&gt;   echo $b&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;functionA "Deepak" "Ranjan"&lt;br /&gt;functionA $xx $yy&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-4061894014658173232?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/4061894014658173232/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=4061894014658173232&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/4061894014658173232'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/4061894014658173232'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2008/02/to-display-how-can-arguments-be-passed.html' title='कोड to display, How can arguments be passed to a function in K SHELL script.'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-5824825872355913695</id><published>2008-02-02T01:22:00.000-05:00</published><updated>2008-02-02T01:25:16.914-05:00</updated><title type='text'>http://en.wikiversity.org/wiki/User:Roadrunner</title><content type='html'>Folks interested in Financial Engineering/Quants/Trading algorithm development:&lt;br /&gt;&lt;br /&gt;I was just Google'ing around on the subject and hit upon an interesting site:&lt;br /&gt;http://en.wikiversity.org/wiki/User:Roadrunner&lt;br /&gt;&lt;br /&gt;This seems to be owned by Joseph Wang, an Astrophysicist but works in Financial Engineering industry. Check this site out. Good for starters.....&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-5824825872355913695?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/5824825872355913695/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=5824825872355913695&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/5824825872355913695'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/5824825872355913695'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2008/02/httpenwikiversityorgwikiuserroadrunner.html' title='http://en.wikiversity.org/wiki/User:Roadrunner'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-5534299236842682894</id><published>2008-01-30T13:32:00.000-05:00</published><updated>2008-01-30T13:33:49.133-05:00</updated><title type='text'>DBI.pm utilities - It is just a ctrl-c &amp; ctrl-v</title><content type='html'>BEGIN {&lt;br /&gt;$DBI::VERSION = "1.59"; # ==&gt; ALSO update the version in the pod text below!&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;=head1 NAME&lt;br /&gt;&lt;br /&gt;DBI - Database independent interface for Perl&lt;br /&gt;&lt;br /&gt;=head1 SYNOPSIS&lt;br /&gt;&lt;br /&gt;  use DBI;&lt;br /&gt;&lt;br /&gt;  @driver_names = DBI-&gt;available_drivers;&lt;br /&gt;  %drivers      = DBI-&gt;installed_drivers;&lt;br /&gt;  @data_sources = DBI-&gt;data_sources($driver_name, \%attr);&lt;br /&gt;&lt;br /&gt;  $dbh = DBI-&gt;connect($data_source, $username, $auth, \%attr);&lt;br /&gt;&lt;br /&gt;  $rv  = $dbh-&gt;do($statement);&lt;br /&gt;  $rv  = $dbh-&gt;do($statement, \%attr);&lt;br /&gt;  $rv  = $dbh-&gt;do($statement, \%attr, @bind_values);&lt;br /&gt;&lt;br /&gt;  $ary_ref  = $dbh-&gt;selectall_arrayref($statement);&lt;br /&gt;  $hash_ref = $dbh-&gt;selectall_hashref($statement, $key_field);&lt;br /&gt;&lt;br /&gt;  $ary_ref  = $dbh-&gt;selectcol_arrayref($statement);&lt;br /&gt;  $ary_ref  = $dbh-&gt;selectcol_arrayref($statement, \%attr);&lt;br /&gt;&lt;br /&gt;  @row_ary  = $dbh-&gt;selectrow_array($statement);&lt;br /&gt;  $ary_ref  = $dbh-&gt;selectrow_arrayref($statement);&lt;br /&gt;  $hash_ref = $dbh-&gt;selectrow_hashref($statement);&lt;br /&gt;&lt;br /&gt;  $sth = $dbh-&gt;prepare($statement);&lt;br /&gt;  $sth = $dbh-&gt;prepare_cached($statement);&lt;br /&gt;&lt;br /&gt;  $rc = $sth-&gt;bind_param($p_num, $bind_value);&lt;br /&gt;  $rc = $sth-&gt;bind_param($p_num, $bind_value, $bind_type);&lt;br /&gt;  $rc = $sth-&gt;bind_param($p_num, $bind_value, \%attr);&lt;br /&gt;&lt;br /&gt;  $rv = $sth-&gt;execute;&lt;br /&gt;  $rv = $sth-&gt;execute(@bind_values);&lt;br /&gt;  $rv = $sth-&gt;execute_array(\%attr, ...);&lt;br /&gt;&lt;br /&gt;  $rc = $sth-&gt;bind_col($col_num, \$col_variable);&lt;br /&gt;  $rc = $sth-&gt;bind_columns(@list_of_refs_to_vars_to_bind);&lt;br /&gt;&lt;br /&gt;  @row_ary  = $sth-&gt;fetchrow_array;&lt;br /&gt;  $ary_ref  = $sth-&gt;fetchrow_arrayref;&lt;br /&gt;  $hash_ref = $sth-&gt;fetchrow_hashref;&lt;br /&gt;&lt;br /&gt;  $ary_ref  = $sth-&gt;fetchall_arrayref;&lt;br /&gt;  $ary_ref  = $sth-&gt;fetchall_arrayref( $slice, $max_rows );&lt;br /&gt;&lt;br /&gt;  $hash_ref = $sth-&gt;fetchall_hashref( $key_field );&lt;br /&gt;&lt;br /&gt;  $rv  = $sth-&gt;rows;&lt;br /&gt;&lt;br /&gt;  $rc  = $dbh-&gt;begin_work;&lt;br /&gt;  $rc  = $dbh-&gt;commit;&lt;br /&gt;  $rc  = $dbh-&gt;rollback;&lt;br /&gt;&lt;br /&gt;  $quoted_string = $dbh-&gt;quote($string);&lt;br /&gt;&lt;br /&gt;  $rc  = $h-&gt;err;&lt;br /&gt;  $str = $h-&gt;errstr;&lt;br /&gt;  $rv  = $h-&gt;state;&lt;br /&gt;&lt;br /&gt;  $rc  = $dbh-&gt;disconnect;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-5534299236842682894?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/5534299236842682894/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=5534299236842682894&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/5534299236842682894'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/5534299236842682894'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2008/01/dbipm-utilities-it-is-just-ctrl-c-ctrl.html' title='DBI.pm utilities - It is just a ctrl-c &amp; ctrl-v'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-8761112692446203321</id><published>2008-01-30T13:18:00.000-05:00</published><updated>2008-01-30T13:19:23.424-05:00</updated><title type='text'>Standard DBD in PERL installation - We can implement ours too.</title><content type='html'>DBD::Adabas&lt;br /&gt;DBD::ADO&lt;br /&gt;DBD::Amazon&lt;br /&gt;DBD::AnyData&lt;br /&gt;DBD::ASAny&lt;br /&gt;DBD::Chart&lt;br /&gt;DBD::CSV&lt;br /&gt;DBD::DB2&lt;br /&gt;DBD::DBMaker&lt;br /&gt;DBD::DBM&lt;br /&gt;DBD::EmpressNet&lt;br /&gt;DBD::Empress&lt;br /&gt;DBD::ExampleP&lt;br /&gt;DBD::Excel&lt;br /&gt;DBD::File&lt;br /&gt;DBD::Fulcrum&lt;br /&gt;DBD::Gofer&lt;br /&gt;DBD::Google&lt;br /&gt;DBD::Illustra&lt;br /&gt;DBD::Informix4&lt;br /&gt;DBD::Informix&lt;br /&gt;DBD::Ingres&lt;br /&gt;DBD::InterBase&lt;br /&gt;DBD::iPod&lt;br /&gt;DBD::JDBC&lt;br /&gt;DBD::LDAP&lt;br /&gt;DBD::Log&lt;br /&gt;DBD::MaxDB&lt;br /&gt;DBD::Mimer&lt;br /&gt;DBD::Mock&lt;br /&gt;DBD::monetdb&lt;br /&gt;DBD::mSQL&lt;br /&gt;DBD::Multiplex&lt;br /&gt;DBD::Multi&lt;br /&gt;DBD::mysqlPP&lt;br /&gt;DBD::mysql&lt;br /&gt;DBD::NullP&lt;br /&gt;DBD::ODBC&lt;br /&gt;DBD::Oracle&lt;br /&gt;DBD::Ovrimos&lt;br /&gt;DBD::PgLite&lt;br /&gt;DBD::PgPP&lt;br /&gt;DBD::PgSPI&lt;br /&gt;DBD::Pg&lt;br /&gt;DBD::pNET&lt;br /&gt;DBD::PrimeBase&lt;br /&gt;DBD::Proxy&lt;br /&gt;DBD::QBase&lt;br /&gt;DBD::RAM&lt;br /&gt;DBD::RDFStore&lt;br /&gt;DBD::Recall&lt;br /&gt;DBD::Redbase&lt;br /&gt;DBD::Salesforce&lt;br /&gt;DBD::SearchServer&lt;br /&gt;DBD::Solid&lt;br /&gt;DBD::Sponge&lt;br /&gt;DBD::Sprite&lt;br /&gt;DBD::Sqlflex&lt;br /&gt;DBD::SQLite2&lt;br /&gt;DBD::SQLite&lt;br /&gt;DBD::Sybase&lt;br /&gt;DBD::TemplateSS&lt;br /&gt;DBD::Template&lt;br /&gt;DBD::Teradata&lt;br /&gt;DBD::TimesTen&lt;br /&gt;DBD::TSM&lt;br /&gt;DBD::Unify&lt;br /&gt;DBD::WMI&lt;br /&gt;DBD::WTSprite&lt;br /&gt;DBD::XBase&lt;br /&gt;DBD::Yaswi&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-8761112692446203321?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/8761112692446203321/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=8761112692446203321&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/8761112692446203321'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/8761112692446203321'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2008/01/standard-dbd-in-perl-installation-we.html' title='Standard DBD in PERL installation - We can implement ours too.'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-2745643112720798231</id><published>2008-01-30T13:17:00.001-05:00</published><updated>2008-01-30T13:17:55.135-05:00</updated><title type='text'>Perl DBI Master Key Site</title><content type='html'>http://dbi.tiddlyspot.com/&lt;br /&gt;&lt;br /&gt;This has most of the thing an experianced people using DBI need to know.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-2745643112720798231?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/2745643112720798231/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=2745643112720798231&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/2745643112720798231'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/2745643112720798231'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2008/01/perl-dbi-master-key-site.html' title='Perl DBI Master Key Site'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-2251231520260084132</id><published>2008-01-30T11:45:00.001-05:00</published><updated>2008-01-30T11:46:14.846-05:00</updated><title type='text'>K-Shell programming</title><content type='html'>Very good site for ksh programming learning:&lt;br /&gt;&lt;br /&gt;http://www.bolthole.com/solaris/ksh.html&lt;br /&gt;&lt;br /&gt;Happy Learning.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-2251231520260084132?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/2251231520260084132/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=2251231520260084132&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/2251231520260084132'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/2251231520260084132'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2008/01/k-shell-programming.html' title='K-Shell programming'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-1558185260467041327</id><published>2008-01-29T20:05:00.000-05:00</published><updated>2008-01-29T20:06:47.068-05:00</updated><title type='text'>Different compression techniques</title><content type='html'>http://en.wikipedia.org/wiki/Bzip2&lt;br /&gt;http://en.wikipedia.org/wiki/Gunzip ( same as gzip)&lt;br /&gt;http://en.wikipedia.org/wiki/Compress&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-1558185260467041327?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/1558185260467041327/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=1558185260467041327&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/1558185260467041327'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/1558185260467041327'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2008/01/different-compression-techniques.html' title='Different compression techniques'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-3496284233611613116</id><published>2008-01-29T20:04:00.000-05:00</published><updated>2008-01-29T20:05:12.586-05:00</updated><title type='text'>Good read - gzip -</title><content type='html'>Good study article about gzip (GNU zip).&lt;br /&gt;&lt;br /&gt;http://en.wikipedia.org/wiki/Gzip&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-3496284233611613116?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/3496284233611613116/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=3496284233611613116&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/3496284233611613116'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/3496284233611613116'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2008/01/good-read-gzip.html' title='Good read - gzip -'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-2223692135334182702</id><published>2008-01-29T16:25:00.000-05:00</published><updated>2008-01-29T16:28:10.486-05:00</updated><title type='text'>Open Group Base Specifications (Owner of UNIX &amp; POSIX)</title><content type='html'>Folks,&lt;br /&gt;&lt;br /&gt;If you have any question regarding UNIX or UNIX like system aka POSIX standard and stuff, you can go to :&lt;br /&gt;&lt;br /&gt;http://www.opengroup.org/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-2223692135334182702?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/2223692135334182702/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=2223692135334182702&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/2223692135334182702'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/2223692135334182702'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2008/01/open-group-base-specifications-owner-of.html' title='Open Group Base Specifications (Owner of UNIX &amp; POSIX)'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-8948391764826337651</id><published>2008-01-25T23:49:00.000-05:00</published><updated>2008-01-25T23:52:44.193-05:00</updated><title type='text'>Brain Bench Perl 5.8 Certification</title><content type='html'>Folks,&lt;br /&gt;&lt;br /&gt;I got certified in Perl 5.8 today and will be getting my certification in couple of days. It really has some good questions, worth taking a look at this exam.&lt;br /&gt;&lt;br /&gt;-Deepak&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-8948391764826337651?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/8948391764826337651/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=8948391764826337651&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/8948391764826337651'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/8948391764826337651'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2008/01/brain-bench-perl-58-certification.html' title='Brain Bench Perl 5.8 Certification'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-8566972236449608487</id><published>2008-01-24T15:14:00.000-05:00</published><updated>2008-01-24T15:19:26.910-05:00</updated><title type='text'>Perl Tricks</title><content type='html'>Quote and Quote-like Operators ------------------------------While we usually think of quotes as literal values, in Perl theyfunction as operators, providing various kinds of interpolating and pattern matching capabilities. Perl provides customary quote characters for these behaviors, but also provides a way for you to choose your quote character for any of them. In the following table, a {} represents any pair of delimiters you choose.&lt;br /&gt;&lt;br /&gt;    Customary  Generic        Meaning      Interpolates&lt;br /&gt;     ''                   q{}                Literal           no&lt;br /&gt;    ""                  qq{}              Literal          yes&lt;br /&gt;    ``                  qx{}             Command     yes&lt;br /&gt;    *                    qw{}            Word list       no&lt;br /&gt;   //                   m{}             Pattern match   yes&lt;br /&gt;   *                     qr{}             Pattern           yes&lt;br /&gt;   *                   s{}{}              Substitution   yes&lt;br /&gt;   *                   tr{}{}            Transliteration   no (but see below&lt;br /&gt;   '&lt;&lt;'EOF         here-doc            yes&lt;br /&gt;&lt;br /&gt;* * unless the delimiter is ''.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-8566972236449608487?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/8566972236449608487/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=8566972236449608487&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/8566972236449608487'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/8566972236449608487'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2008/01/perl-tricks.html' title='Perl Tricks'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-529528961116726965</id><published>2008-01-24T10:58:00.000-05:00</published><updated>2008-01-24T10:59:41.571-05:00</updated><title type='text'>Perl Quiz Series - Part I</title><content type='html'>Perl Questions:&lt;br /&gt;&lt;br /&gt;Generic Questions:&lt;br /&gt;1. What is 'our' used for ?&lt;br /&gt;    e.g our($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS)&lt;br /&gt;2. What is 'exists' function used for?&lt;br /&gt;3. What is 'uc' function used for ?&lt;br /&gt;4. What is 'ref' function used for ?&lt;br /&gt;5. What is 'defined' function used for ?&lt;br /&gt;6. What is 'map' function used for ?&lt;br /&gt;7. What is 'reverse' function used for ?&lt;br /&gt;8. What is ' qq qw ' used for ?&lt;br /&gt;9. What is 'tr' function used for ?&lt;br /&gt;10. What is 'tie' function used for ?&lt;br /&gt;11. What is ' push &amp;amp; pop ' function used for ?&lt;br /&gt;12. What is ' undef ' function used for ?&lt;br /&gt;13. What is ' bless ' function used for ?&lt;br /&gt;14. What is ' self ' function used for ?&lt;br /&gt;15. What is ' __FILE__ ' variable used for ?&lt;br /&gt;16. What is ' __LINE__ ' variable used for ?&lt;br /&gt;17. What is ' $_ ' used for ?&lt;br /&gt;18. What is ' @_ ' used for ?&lt;br /&gt;19. What is ' $$ ' used for ?&lt;br /&gt;20. What is ' shift ' function used for ?&lt;br /&gt;21. What is ' unless ' function used for ?&lt;br /&gt;22. What is ' self ' function used for ?&lt;br /&gt;23. What is ' untie ' function used for ?&lt;br /&gt;24. What is 'split' function used for ?&lt;br /&gt;25. What is 'splice' function used for ?&lt;br /&gt;26. What is 'sort' function used for ?&lt;br /&gt;27. What is 'keys' function used for ?&lt;br /&gt;28. What is 'values' function used for ?&lt;br /&gt;29. How to dereference a array reference $ref_a ? ( @$ref_a )&lt;br /&gt;30. How to dereference a hash reference $ref_h ? ( %$ref_h )&lt;br /&gt;31. How to dereference a scalar reference $ref_s ? ( $$ref_s )&lt;br /&gt;32. What is difference between 'for &amp;amp; foreach' loop ?&lt;br /&gt;33. What is 'while' function used for ?&lt;br /&gt;34. What is 'last' function used for ?&lt;br /&gt;35. What is 'exit' function used for ?&lt;br /&gt;36. What is difference between 'die &amp;amp; warn' ?&lt;br /&gt;37. What is 'eval' function used for ?&lt;br /&gt;38. What is '$@' variable used for ?&lt;br /&gt;39. What is 'Here document' ?&lt;br /&gt;40. What is difference between 'exec &amp;amp; system' function?&lt;br /&gt;41. How to set environment variable in perl ? ( $ENV{xx} )&lt;br /&gt;42. What is ' $ ' (dollar pipe) used for ?&lt;br /&gt;43. What is 'shebang'? ( #! ) --&gt; first line of perl code&lt;br /&gt;44. Can we use ' -w ' switch on first line OR 'use warnings' module alternatively ?&lt;br /&gt;45. What is the difference between 'chomp &amp;amp; chop'?&lt;br /&gt;46. How to invoke a unix shell command inside a perl script ? ( `ls -l` )&lt;br /&gt;47. What is the difference between 'use &amp;amp; require' ?&lt;br /&gt;48. What is '@ARGV' used for ? (Number of arguments)&lt;br /&gt;49. What is ' . ' ( dot operator ) used for ?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-529528961116726965?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/529528961116726965/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=529528961116726965&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/529528961116726965'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/529528961116726965'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2008/01/perl-quiz-series-part-i.html' title='Perl Quiz Series - Part I'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-2544124689437843459</id><published>2008-01-23T16:01:00.000-05:00</published><updated>2008-01-23T16:02:38.708-05:00</updated><title type='text'>Use google search engine from command line.</title><content type='html'>#!/usr/bin/perl -w&lt;br /&gt;&lt;br /&gt;my $browser = "/usr/bin/mozilla-firefox";&lt;br /&gt;exec $browser, "&lt;a href="http://www.google.com/advanced_search"&gt;http://www.google.com/advanced_search&lt;/a&gt;" unless @ARGV;&lt;br /&gt;&lt;br /&gt;for ( @ARGV )&lt;br /&gt;{&lt;br /&gt;   s/.*/%22$&amp;amp;%22/   if y/ /+/; $s .= $s?"+$_":"$_";&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;exec $browser, "&lt;a href="http://www.google.com/search?num=30&amp;amp;hl=en&amp;amp;as_qdr=all&amp;amp;q=$s&amp;amp;btnG=Google+Search"&gt;http://www.google.com/search?num=30&amp;amp;hl=en&amp;amp;as_qdr=all&amp;amp;q=$s&amp;amp;btnG=Google+Search&lt;/a&gt;"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-2544124689437843459?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/2544124689437843459/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=2544124689437843459&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/2544124689437843459'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/2544124689437843459'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2008/01/use-google-search-engine-from-command.html' title='Use google search engine from command line.'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-8429770218044220107</id><published>2008-01-15T13:04:00.000-05:00</published><updated>2008-01-15T13:04:34.486-05:00</updated><title type='text'>Comparison of file systems - Wikipedia, the free encyclopedia</title><content type='html'>Truly awesome stuff from Wikipedia.org&lt;br /&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Comparison_of_file_systems"&gt;Comparison of file systems - Wikipedia, the free encyclopedia&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-8429770218044220107?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://en.wikipedia.org/wiki/Comparison_of_file_systems' title='Comparison of file systems - Wikipedia, the free encyclopedia'/><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/8429770218044220107/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=8429770218044220107&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/8429770218044220107'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/8429770218044220107'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2008/01/comparison-of-file-systems-wikipedia.html' title='Comparison of file systems - Wikipedia, the free encyclopedia'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1594261002485299087.post-3750540581751095840</id><published>2008-01-11T16:26:00.000-05:00</published><updated>2008-01-11T16:29:08.356-05:00</updated><title type='text'>can I use $match within regex , sun as / $match ../</title><content type='html'>Building a pattern at run-time by interpolating a variable into a pattern. Yes, you can interpolate a variable such as $match into a pattern; you'll generally want the qr// operator to quote the pieces you use to make $match.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://perldoc.perl.org/perlop.html#Regexp-Quote-Like-Operators"&gt;http://perldoc.perl.org/perlop.html#Regexp-Quote-Like-Operators&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1594261002485299087-3750540581751095840?l=opensourceit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourceit.blogspot.com/feeds/3750540581751095840/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1594261002485299087&amp;postID=3750540581751095840&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/3750540581751095840'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1594261002485299087/posts/default/3750540581751095840'/><link rel='alternate' type='text/html' href='http://opensourceit.blogspot.com/2008/01/can-i-use-match-within-regex-sun-as.html' title='can I use $match within regex , sun as / $match ../'/><author><name>Kumar</name><uri>http://www.blogger.com/profile/01800220185935679638</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
