Search This Blog

2012-02-29

linux/unix cheat sheet

# File:NixCheatSheet.sh v.1.4.0 docs at the end 
 
# how-to get a nice prompt on HP-UX
clear;export PS1=$USER'@'`hostname`:$PWD:`echo ``date +%Y.%m.%d-%H:%M:%S`` `:`echo  "\n" $ " "`; clear;
 
 
# who , where and when
uname -a ;
id;
date +%Y.%m.%d-%H:%M:%S;
# all env vars starting with _
env | grep -e "^_"
 
 
ls -lt --time-style=long-iso 
ls -alt --time-style=long-iso
 
 
# http://www.gnu.org/software/findutils/manual/html_mono/find.html
# The ultimate "find in files"
find /etc/httpd/ -type f -print0 | xargs --null grep -nHP 'StartServers\s+\d' | less
 
find / -name '*bash*' -exec grep -nHP '*APerlRegex*' {} \;
 
#  or even faster , be aware of funny file names xargs -0
find / -name '*bak' -print0 | xargs --null grep -nPH 'curl'
 
# find and replace recursively
find . -name '*.html' -print0 | xargs -0 perl -pi -e 's/foo/bar/g'
 
# find all the files greather than 100 MB , sort them by the size and print their sizes 
find / -type f -size +100M -exec du -B M {} \; | sort -r | less 
 
# disk usage of users under the /home directory in MB
clear;du -all -m --max-depth=3 /home | sort -n -r | less
 
# where I have been lately ?
history | grep cd
 
# what I have opening recently 
history | grep vi
 
#send my history 
history | mailx -s "my history" $MyEmail
tcpdump dst 10.168.28.22 and tcp port 22
tcpdump dst 172.21.212.212 
 
 
# record the current session via script
mkdir ~/scriptlogs
script -a ~/scriptlogs/`date +%Y%m%d%H%M%S`_script.log
  
#/usr/bin is for normal user executables, /usr/sbin is for superuser executables, /usr/sfw is for external software (like gnu one), but provided with bundle of OS, /usr/ccs is for development utilities, usually not need for daily tasks like make, lex, yacc, sccs
 
# take the last 5 commands for faster execution to the temp execution script
tail -n 5 /root/.bash_history >> /var/run.sh
 
# I saw the command cd /to/some/suching/dir/which/was/very/long/to/type
echo so I redid it and saved my fingers
!345
 
 
 
history | mail -s "test file sending" -c mail1@com yordan.georgiev(boom)gmail.com
 
# remove all trealing spaces from the history file works for TextPad
 
^([ ]*)([0-9]*)(.*)$
 
\3 --- replace with the pure commands
 
history | gawk -F1 'BEGIN {FS=" "};{print $2 , $3}' | less
 
# display the history oldest commands first withouth the line numbers ...
history | sort -nr | perl -i -pe 's/^([ ]*)([0-9]*)(.*)$/$3/gi'
 
vi fileName anotherFile
 
# how to deal with command outputs
command | filtercommand > command_output.txt 2>errors_from_command.txt
 
# Hint after the less filter pressing s will prompt you for saving the
output to a file ...
 
 
#  find the files having os somewhere in their names and only those having linux
find . -name '*os*' | grep linux | less
 
# find all xml type of files and display only the rows having wordToFindInRow
find . -name '*.xml' -exec cat {} \;| grep wordToFindInRow | less
 
 
# putty , bash shortcuts 
Ctrl + A --- Go to the beginning of the line you are currently typing on
Ctrl + E --- Go to the end of the line you are currently typing on
 
# how-to mount an usb stick
# remember to change the path other wise you will get the device is busy errror
 
mkdir /mnt/usbflash
mount /dev/sdb1 -t vfat /mnt/usbflash
 
umount /mnt/usbflash
 
 
head -n 20 tooLongFile -- display the first 20 lines of the file
 
 
# get a nice prompt 
PS1="\u@\h \t \w\n\\$ "
 
# how to restart a process initiated at startup
/etc/rc.d/init.d/sendmail start | stop | status | restart
 
# see all the rules associated with the firewall
 
iptables -L -v
 
gunzip *file.zip
 
 
To access the server download winscp.exe:
 
# start winscp with a stored session from Win box 
cmd /c start /max winscp oracle@192.168.255.12
 
# To start remote session click on the putty screen , configure putty
settings to pull full screen with alt + Enter
 
# right click on the title bar , settings , change the font , copy
paste from and to the terminal window text
 
# how to ensure the sshd daemon is running
ps -ef | grep sshd
 
 
# User and group management
useradd -p winscppass -r winscp -d /home/winscp --- to add a user with
specifig home directory name and pass
 
luserdel winscp --- delete the user
 
gpasswd: administer the /etc/group file
groupadd: Create a new group
groupmod: Modify a group
groupdel: Delete a new group
 
#useradd: Create a new user or update default new user information
#usermod: Modify a user account
#userdel: Delete a user account and related files
 
 
# how to kill process interactively
killall -v -i sshd
 
 
# the most efficent way to search your history is to hit Ctrl R and
type the start of the command. It will autocomplete as soon as there’s
a match to a history entry, then you just hit enter. If you want to
complete the command (add to it ) use the right arrow to
escape from the quick search box ...
 
#How to install Perl modules
gzip -dc yourmodule.tar.gz | tar -xof -
# create the make file
perl Makefile.PL
# test
make test
# install 
make install
 
#How to see better which file were opened , which directories were visited
 
type always the fullpath after the vi - use the $PWD env variable to
open files in the current directory , thus after opening the file
after:
 
vi /$PWD , press tab to complete the name of the current directory ,
type the name of the file
 
 
thus after
 
history | grep vi
 
 
 
the full list of opened files is viwed .
 
of course the same could be seen from the /home/username/.viinfo file /files
 
#where to set the colors for the terminal (if you are lucky to have one
with colors ; )
 
/etc/DIR_COLORS
 
open a file containing "sh" in its name bellow the "/usr/lib" directory
 
:r !find /usr/lib -name *sh*
 
go over the file and gf
 
uname -a --- which version of Linux I am using
 
rmp -dev --- show all installed packages
 
passwd [username] --- change the password for the specified user (own password)
 
 
 
How to copy paste text in the putty window from client to server -
 
click the right button of your pointing device
 
How to copy paste text from the putty window from server to client -
right-click the window title and select copy all to Clipboard.
 
#To restart a service
service sshd restart
#  
service --status-all --- show the status of all services
 
 
# change the owneership of the directory
chown -R userName:GroupName DirPath
 
# perform action recursively on a set of files
 
find . -name '*.pl' -exec perl -wc {} \;
 
 
for file in `find . -type f`;do echo cp $file ../backups/; done;
 
# make Bash append rather than overwrite the history on disk:
shopt -s histappend
 
# henever displaying the prompt, write the previous line to disk:
PROMPT_COMMMOR='history -a'
 
gpm -- general "cut and paste" server
 
 
sh ScriptWithALotOfErrorMessages.sh | tee -a whereToSaveIt.log
 
# run first the following command
script -a The_Log_File_To_Append_as_well_as_display_diagnostig_messages.log
 
# than run the script
 
 
 
sh ScriptWithALotOfErrorMessages.sh
#how-to replace single char in file
tr '\t' ',' < FileWithTabs > fileWithCommas
 
df -k --- disk usage
 
# Allow access to the box from only one ip address
 
IPTables=/sbin/iptables
$ IPTables -A INPUT -s <Insert other Origin ip here> -p tcp
--source-port xxx -j ACCEPT
$ IPTables -A OUTPUT -d < Insert other Origin ip here > -p tcp
--destination-port xxx-j ACCEPT
 
# has the root logged in over an unencrypted network ?
 
# next_line_is_templatized
#  last | grep “^root “ | egrep –v “reboot|console” | morphus
 
 
 
# start command in the background
command1 &
 
# start another one
command2 &
 
# bring the command in the foreground
fg %1
 
# create a backup file based on the timestamp on bash
 
cp fileName.ext fileName.ext.`date +%Y%m%d%H%M%S`.bak
 
 
 
 
Unix commands:
 
FIX broken lines:
 
$ cat output.txt
a:b:c:1:2:3:2.3:henry
s:d:e:2:1:4:
54:user5
d:q:w:5:6:
3:5.2:alex
y:m:n:3:4:1:5.6:eiam
 
Output Required:
----------------
a:b:c:1:2:3:2.3:henry
s:d:e:2:1:4:54:user5
d:q:w:5:6:3:5.2:alex
y:m:n:3:4:1:5.6:eiam
 
 
$ awk '
BEGIN {
FS=":";
maxFLD=8;
}
{
while (NF < maxFLD || $0 ~ /\:$/ ) {
getline record;
$0 = $0 record
}
print $0
}
' file_name
 
Live example: 
2009-07-10 13:51:31.939439|2009-07-10|2|1.1.6401.0.614513|0570817|1|-3||production|2.0.0|Series60|V 11.0.021|11.0.021.01.01|11.0.021.C01.01|244|05|862e-d2ac-4f03-9cbb|xmldatabinding 5.0|Xmldatabinding 5.0 for N-Gage
|x-epoc/x-sisx-app|0|4|1|3|0x101f978e|1.0.6|Company|N97|Country_variants_of_UK_Ireland
--------------------------------------------------------------------------------------------------------------------------------------
$ awk 'BEGIN {FS="|";maxFLD=30;}{while (NF < maxFLD || $0 ~ /\:$/ ) {getline record;$0 = $0 record} print $0}' file_name
---------------------------------------------------------------------------------------------------------------------------------------
 
 
Display lines which starts with “|”:
 
- $ Grep ‘^|’ file_name
 
 
Paste = shift + insert
Copy = ctrl + insert
 
df  -h ***
 
id -u
 
ls –lrt
 
ps -ef
 
#unpack a file 
tar xvf “filename”
 
#on hp-ux
gzip -cd FileName.tar.gz | tar -xvf -
 
 
fg  (can be used to return to stopped window/process)
 
w (logged in users, idle or not?)
who (logged on users, from where)
who -r (show runlevel)
 
wc filename (lines, words, characters)
 
 
# print line number 52
sed -n '52p' # method 1
sed '52!d' # method 2
sed '52q;d' # method 3, efficient on large files
 
Remove/replace hex values from a file:
perl -i.bak -pe 's/(\xEF)(\xBF)(\xBD)/???/g' music_player_track.txt
 
Add user: useradd –u uid (esim. 2600)  –c ‘description’ –d /homedir/ -g group –m –s /bin/bash username
Change passwd: passwd username
 
Example:
 
useradd -u 10302011 -c "FirstName LastName, DeparmentName, firstname.lastname@company.com" -m -d /export/home/firstlast -s /bin/bash firstlast
 
passwd -f login = forces to change password when logging in for the first time
 
 
#Ei saa näyttää yhtään vastausta:
passwd -s -a | grep NP (=No Password)
 
#/var/adm/loginlog sisältää kaikki epäonnistuneet loginyritykset…
#Alustus:
#!/bin/sh
log=/var/adm/loginlog
test -f "$log" && {
        # "Good, $log exists already."
        exit 0
}
touch $log || exit 1
chown root $log || exit 1
chgrp sys $log || exit 1
chmod 600 $log || exit 1
 
# "Initialized $log."
 
Use SVCCFG:
bash-3.00# svccfg
svc:> select cde-login
svc:/application/graphical-login/cde-login>
svc:/application/graphical-login/cde-login> setprop dtlogin/args=astring: "-udpPort 0"
svc:/application/graphical-login/cde-login> quit
bash-3.00# svcadm cde-login restart
 
 
Display lines that contain A or B
/usr/bin/egrep - i “A|B”
Ex. # ps -ef | /usr/bin/egrep - i “PID1|PID2”
 
START/ STOP scripts ( /etc/init.d/rc.script)
-    create symbolic links from /etc/rc(0,1,2).d/K99sas --> /etc/init.d/rc.script
-    create symbolic link from /etc/rc3.d/S99sas --> /etc/init.d/rc.script
 
Startscripts are executed in order where smallest number is executed first on each runlevel
 
ln –s source target
 
Normal Case
 
Put SXX in rc3.d
Put KXX in rc0.d, rc1.d, rc2.d, rcS.d
 
cd /etc/rc3.d
ln –s /etc/init.d/rc.script S99rcscript
 
cd /etc/rc0.d
ln -s /etc/init.d/rc.script K99rcscript
cd /etc/rc1.d
ln -s /etc/init.d/rc.script K99rcscript
cd /etc/rc2.d
ln -s /etc/init.d/rc.script K99rcscript
cd /etc/rcS.d
ln -s /etc/init.d/rc.script K99rcscript
 
RC scripts & Run Levels 
Rc scripts performs the following functions : 
 
a) They check and mount the file systems 
 
b) Start and stop the various processes like network , nfs etc.
 
c) Perform some of the house keeping jobs.
 
System goes in to one of the following run level after booting depending on default run level and the commands issued for changing the run level to some other one.
 
0 Boot prom level ok> or > prompt in Sun.
1 Administrative run level . Single user mode 
2 Multiuser mode with no resource sharing .
3 Multiuser level with nfs resource sharing
4 Not used
5 Shutdown & power off (Sun 4m and 4u architecture )
6 Reboot to default run level
S s Single user mode user logins are disabled.
 
Broadly speaking the running system can be in any of the folloing state
 
Single user – Minimum processes running , user logins disabled and root password is required to gain access to the shell . 
Multiuser - All system processes are running and user logins are permitted 
 
Run level of a desired state is achieved by a number of scripts executed by the rc program the rc scripts are located in /etc/rc0.d , /etc/rc1.d , /etc/rc2.d , /etc/rc3.d & /etc/rcS.d directories . All the files of a particular run level are executed in the alphanumeric order .Those files beginning with letter S starts the processes and those beginning with K stops the processes.
 
These files are hard linked to the files in /etc/init.d in order to provide a central location for all these files and eliminating the need to change the run level in case these scripts needs to be run separately . The files in /etc/init.d directory are without any S , K and numeric prefix instead a stop / start argument has to be supplied whenever these scripts are to be executed .
 
By default system has a number of rc scripts needed for run level transition but sometimes it becomes necessary to start some custom scripts at the booting time and turn them off at the shutdown . Custom scripts can be put in any of the required rc directory but following major considerations has to be kept in mind :
•    The sequence number of the file should not conflict with other files.
•    The sevices needed should be available by previously executed scripts. 
•    File should be hard linked to the /etc/init.d directory .
•    The system looks for only those files beginning with letter K & S , any thing else is ignored , therefore, to make a file inactive simply changing uppercase K or S to lower case will cause system to ignore it . 
 
 
The scripts that begin with a K are used to kill processes when exiting a specific runlevel. In the listing above, the K scripts would be used when terminating runlevel 3. The scripts that start with an S are used when starting runlevel 3. None of the items in rc3.d, however, is really a startup script. They are logical links to the real scripts, which are located in the /etc/rc.d/init.d directory. For example, S80sendmail is linked to init.d/sendmail. This raises the question of why the scripts are executed from the directory rc3.d instead of directly from init.d where they actually reside. The reasons are simple. The same scripts are needed for several different runlevels. Using logical links, the scripts can be stored in one place and still be accessed by every runlevel from the directory used by that runlevel. 
Scripts are executed in alphabetical order. Thus S10network is executed before S80sendmail. This allows the system to control the order in which scripts are executed through simple naming conventions. Different runlevels can execute the scripts in different orders while still allowing the real scripts in init.d to have simple, descriptive names. A listing of the init.d directory shows these descriptive names: 
 
 
VI COMMMORS 
 
Move with cursor: h,j,k,l
Beginning of line: 0
 
Corrections during INSERT:
-    CTRL+H delete last character
 
Append after cursor: a
Append at the end of line: A
 
Yanked: y
Put: p – puts back yanked or deletet text after cursor
 
#Undo last change: 
u
#Restore curren line: 
U
#Repeat last change:
.
#Repeat last command
: n
#Replace (sed):    
:%s/old value/new value/
 
#Copy: CTRL+INSERT
#PASTe: SHIFT+INSERT
 
#EXTRACT *.tar.gz on HP-UX:
gzip -dc some.tar.gz | tar xvf –
 
Single file:
 
gzip -dc fileName.tar.gz | tar -xvf - filename
 
find . -name '*.log' -print | zip cipdq`date +%Y%m%d%H%M%S` -@
 
find / -type f | xargs grep -nH 'curl'
 
find . -type f -name '*.sh' -print -exec grep -n gpg {} \;
 
 
 
 
#where am I
uname -a ; 
#who am I 
id ; 
# when this is happening 
date "+%Y.%m.%d %H:%M:%S" ; 
 
 
useradd -u 12202211 -c "First Name , LastName, Teamp , firstName.LastName@company.com" -m -d /export/home/userName -s /bin/bash userName
 
#obsolete
skill -STOP -u userToKick
pkill -STOP -u userToKick
 
# reboot ... !!! BOOM BOOM BOOM !!!
shutdown -r now 
 
# check all available commands on my system
 echo -n $PATH | xargs -d : -I {} find {} -maxdepth 1  -type f -printf '%P\n' | sort -u | less
 
 #how-to kill a process 
ps aux | grep omniture
pidof omniture
kill -9 omniture
#what cpu am a running
less /proc/cpuinfo
 
# which processes are listening on my system
netstat --tcp --listening --programs
netstat --tcp
netstat --route
 
 
#source: http://www.yolinux.com/TUTORIALS/LinuxTutorialSysAdmin.html#MONITOR
#monitoring commands 
# show the top processes
top
# running processes status 
ps -auxw | less 
ps -ef | less 
#List all currently loaded kernel modules
lsmod | less 
#Displays the system's current runlevel.
/sbin/runlevel
# get the Processes attached to open files or open network ports:
lsoff | less 
# monitor the virtual memory 
vmstat 
#Display/examine memory map and libraries (so). Usage: pmap pid
ps -aux | grep <<MyProcToPMap>>
pmap      <<MyprocToPMapPID>>
 
 
history | gawk -F1 'BEGIN {FS=" "};{print $2 , $3}'
pmap -x 4041 | gawk -F1 'BEGIN {FS=" "};{print $2  ,"\t" , $5 , "\t" , $6 , "\t", $7 , $8}' | sort -nr
 
#how-to sort output by a delimited by single delimiter column 
# in this example the - char is used for delimiter , the output is 
# by their sending sequence , use proper file naming convention files 
# ls -1 gives us:
# fileBeginningTillFirstDelimiter-TheColumnToSortBy-TheRestFromTheFileNameDelimiter
ls -1 | awk -F1 'BEGIN {FS="-"};{print $2 "¤" $1 "-" $2 "-" $3 }' | sort -nr | cut -d ¤ -f 2,5 
# the same approach with perl
ls -1 | perl -p -i -e 's/^([^\-]*)(\-)([^\-]*)(\-)([^\-]*)/$3¤$1$2$3$4$5/g' | sort -nr | cut -d ¤ -f 2,5  
 
# how-to use sftp with remoteUserName having publicIdentity of PublicIdentityUserName
sftp -v -o "IdentityFile /var/www/.ssh-id/PublicIdentityUserName" -o "UserKnownHostsFile /var/www/.ssh-id/known_hosts" remoteUserName@ServerHostNameOrIpd
 
 
# ==================================================================
# START Jobs control 
# start some very long lasting command 
find / -name '*.crt' | less 
# now press Ctrl + Z 
# the terminal says "Jobs stopped"
# now check the open jobs 
jobs
# you should see something like 
# [1]+  Stopped                 find / -name '*.crt' | less
# now put the job in the background and start working on something else by Ctrl + Z 
bg 1
# run the next command 
# how-to copy file via scp by using specificy identity
scp -v -o "IdentityFile /home/userName/.ssh/id_rsa" /data/path/dir/* userName@ServerHostName.Domain.com:/Server/Target/Dir/
# now again stop the job first by Ctrl + Z 
# check again the running jobs 
jobs 
# use should see the both of the jobs started 
# now put the first on in the forground 
fg 1
# Repeat that several times untill you get it ; ) !!!
 
# END Jobs control 
# ==================================================================
 
nicedate=`date +%Z-%Y%m%d%H%M%S`
 
# kill a process by name 
ProcNameToKill=sftp
# ps -ef | grep wget | perl -ne 'split /\s+/;print "kill $_[7] with PID $_[1] \n";`kill -9 $_[1];`'
ps -ef | grep $ProcNameToKill | perl -ne 'split /\s+/;print "kill $_[7] with PID $_[1] \n";`kill -9 $_[1];`'
 
# how-to display human readable file sizes on systems with stupid du
# of course you would have to have perl next_line_is_templatized
find `pwd` -type f -exec du -k {} \; | perl -ne 'split /\s+/;my $SizesInMegs=$_[0]/1024;printf ( "%10d %10s \n" , "$SizesInMegs" , "MB $_[1]")' | sort -nr | morphus
 
export dir=/opt/path/to/dir
echo sizes in MB
find $dir -type f -exec du -k {} \; | perl -ne 'split /\s+/;my $SizesInMegs=$_[0]/1024;printf ( "%10d %-100s \n" , "$SizesInMegs" , "$_[1]")' | sort -nr | more
 
 
#who has been accessing via ssh 
for file in `find /var/log/secure* | sort -rn` ; do grep -nHP 'mfe' $file ; done; | less
 
 
#print files recursively 
dir=/opt/path/to/dir
clear;find $dir -type f -exec ls -alt --time-style=long-iso --color=tty {} \; | perl -ne 'split(/\s+/);printf ( "%10s %2s %-20s \n" , "$_[5]", "$_[6]", "$_[7]") ; ' | sort -nr
 
#how-to print relative file paths to /some/DirName with perl one liner 
find /some/DirName -type f | perl -ne 'split/DirName\//;print "$_[1]"  '
 
# see nice dir recursively listing newest first
dir=/tmp
find $dir -name '*.tmp' -exec ls -alt --time-style=long-iso --color=tty {} \; | perl -ne 'split/\s+/;print "$_[5] $_[6] $_[7] \n" ;' | sort -nr | less
 
# how-to sort files based on a number sequence in their file names
# list dir files , grap a number from their names , print with NumberFileName, sort , print finally the names without the Number but sorted 
 ls -1 | perl -ne 'm/(\d{8})/; print $1 . $_ ;' | sort -nr | perl -ne 's/(\d{8})//;print $_'
 
#how-to create relative file paths tar package recursively fromm a dir
cd <<RootDirToStartRelativePathsFrom>>
tar -cvzpf <<PackageToCreate>>.tar <<DirToPackRecursively>>
 
# exctract tar file into cd  
tar -xvf <<PackageToExctractInCurrentDir>>.tar
 
#source:http://mywiki.wooledge.org/BashFAQ/002
# get the STDERR and STDOUTPUT 
output=$(command 2>&1)
 
# create pub priv keys on server
ssh-keygen -t rsa 
 
# add pub key from client to authorized_keys files on server
cat id_rsa.pub >> ~/.ssh/authorized_keys
 
 
# VersionHistory
# 1.5.0 --- Added tar and ssh-keygen
# 1.4.0 --- Added kill proc by name and du -BM for HP-UX
# 1.3.0 --- Added jobs control 
# 1.2.0 --- Added system monitoring commands 
# 1.1.6 --- refined du , replaced echo's with #'s
# 1.0.0 --- Initial creation  

2012-02-20

basic sh bash script starter stub

#!/bin/bash
umask 000 ; 
# print the commands 
# set -x
# exit the script if any statement returns a non-true return value
set -e 
 
 
setVars(){
        export PATH=/cygdrive/c/cygwin/bin/:$PATH
        MyDir=`dirname $(readlink -f $0)`
        Tmp="$MyDir/tmp.$$"
        mkdir -p $Tmp                #create the tmp dir if it does not exist 
        ( set -o posix ; set ) >$Tmp/variables.before 
        MyName=`basename $0`
        IniFile="$MyDir/$MyName.`hostname`.conf"
        IniSection=MainSection
        LogFile="$MyDir/$MyName.log"
        # get the machine / host specific configuration 
        parseIniFile
        #source $0
        ( set -o posix ; set ) >$Tmp/variables.after
        wlog " Using the following vars :"
        cmd="comm -3 $Tmp/variables.before $Tmp/variables.after"
        runCmdAndLog $cmd
        rm -f $Tmp/variables.before $Tmp/variables.after
        rm -f $Tmp/variables.before $Tmp/variables.before    
}
#eof function setVars
 
 
parseIniFile(){
    eval `sed -e 's/[[:space:]]*\=[[:space:]]*/=/g' \
        -e 's/;.*$//' \
        -e 's/[[:space:]]*$//' \
        -e 's/^[[:space:]]*//' \
        -e "s/^\(.*\)=\([^\"']*\)$/\1=\"\2\"/" \
       < $IniFile \
        | sed -n -e "/^\[$IniSection\]/,/^\s*\[/{/^[^;].*\=.*/p;}"`
}
#eof function parseIniFile
 
# call by runCmdAndLog $cmd
runCmdAndLog(){
                cmd="$*" ; 
                Msg=$($cmd 2>&1)
                [ $? -eq 0 ]  || wlog "ERROR : Failed to run the $cmd command with $Msg output!!!"
                wlog " DEBUG : $Msg"
}
#eof function runCmdAndLog
 
 
#call by runCmdOrExit $cmd
runCmdOrExit(){
                cmd="$*" ; 
                Msg=$($cmd 2>&1)
                [ $? -eq 0 ] || Exit "ERROR : FATAL : Failed to run the $cmd command with $Msg output!!!"
                wlog " DEBUG : $Msg"
}
#eof function runCmdOrExit
 
# echo passed params and print them to a log file
wlog(){
        # check terminal if exists echo 
        test -t 1 && echo "`date +%Y.%m.%d-%H:%M:%S` [$$] $*"
        # check LogFile and 
        test -z $LogFile || {
          echo "`date +%Y.%m.%d-%H:%M:%S` [$$] $*" >> $LogFile
        } #eof test
 } 
# eof function wlog 
 
 
# exit with passed status and message
Exit(){
        ExitStatus=0
        case $1 in
            [0-9]) ExitStatus="$1"; shift 1;;
    esac
        Msg="$*"
        test "$ExitStatus" = "0" || Msg="ERROR: $Msg"
        wlog "$Msg"
        exit $ExitStatus
}
#eof function Exit
 
# the main function called 
main(){
    setVars
}
#eof function main
 
# Action !!!
main
 
# Purpose:
# To provide an easy starting template for writing bash and sh scripts
# having the following features: 
# - prints the set in the script variables
# - separation of host specific vars into $0.`hostname`.conf file
# - wlog function for both xterm and log file printing
# - 
# EOF File:ShStub.sh
 

basic principles for writing bash scripts


  • Use main func calling other functions
  • Use functions - several commands performing an logical entity should form a function
  • Try to separate the machine / host  dependant settings into a SetVars function
  • Use logging , capture the commads output and log them 
  • For any operation on file , string etc test first that it exists 
  • have a cheat sheet open all the time from which to copy basic constructs - bash syntax is quite tricky and could bring you surprises 

bash : how-to build cmd dynamically , get both STDOUT and STDERR output of it , log it and exit if fatal

# build the command
    cmd="chown -Rv $RunUser:$RunUserGroup $ProductDir"
# get the command output both STDERR and STDOUTPUT into a var
    Msg=$($cmd 2>&1)
    [ $? -eq 0 ] || Exit "ERROR : FATAL : Failed to run the $cmd command with $Msg output!!!"
 
 
wlog(){
        # check terminal if exists echo 
        test -t 1 && echo "`date +%Y.%m.%d-%H:%M:%S` [$$] $*"
        # check LogFile and 
        test -z $LogFile || {
          echo "`date +%Y.%m.%d-%H:%M:%S` [$$] $*" >> $LogFile
        } #eof test
 } 
# eof function wlog 
 
Exit(){
    ExitStatus=0
    case $1 in
        [0-9]) ExitStatus="$1"; shift 1;;
    esac
    Msg="$*"
    test "$ExitStatus" = "0" || Msg="ERROR: $Msg"
    wlog "$Msg"
    exit $ExitStatus
}
#eof function Exit

2012-02-18

how-to create relative file paths tar package recursively fromm a dir and extract it later

#how-to create relative file paths tar package recursively fromm a dir
cd <<RootDirToStartRelativePathsFrom>>
tar -cvzpf <<PackageToCreate>>.tar <<DirToPackRecursively>>
 
# exctract tar file into cd  
tar -xvf <<PackageToExctractInCurrentDir>>.tar

2012-02-03

Perl Special Vars quick reference


source: Perl Monks
Special Vars Quick Reference
$_ The default or implicit variable.
@_ Subroutine parameters.
$a
$b sort comparison routine variables.
@ARGV The command-line args.
Regular Expressions
$<digit> Regexp parenthetical capture holders.
$& Last successful match (degrades performance).
${^MATCH} Similar to $& without performance penalty. Requires /p modifier.
$` Prematch for last successful match string (degrades performance).
${^PREMATCH} Similar to $` without performance penalty. Requires /p modifier.
$' Postmatch for last successful match string (degrades performance).
${^POSTMATCH} Similar to $' without performance penalty. Requires /p modifier.
$+ Last paren match.
$^N Last closed paren match (last submatch).
@+ Offsets of ends of successful submatches in scope.
@- Offsets of starts of successful submatches in scope.
%+ Like @+, but for named submatches.
%- Like @-, but for named submatches.
$^R Last regexp (?{code}) result.
${^RE_DEBUG_FLAGS} Current value of regexp debugging flags. See use re 'debug';
${^RE_TRIE_MAXBUF} Control memory allocations for RE optimizations for large alternations.
Encoding
${^ENCODING} The object reference to the Encode object, used to convert the source code to Unicode.
${^OPEN} Internal use: \0 separated Input / Output layer information.
${^UNICODE} Read-only Unicode settings.
${^UTF8CACHE} State of the internal UTF-8 offset caching code.
${^UTF8LOCALE} Indicates whether UTF8 locale was detected at startup.
IO and Separators
$. Current line number (or record number) of most recent filehandle.
$/ Input record separator.
$| Output autoflush. 1=autoflush, 0=default. Applies to currently selected handle.
$, Output field separator (lists)
$\ Output record separator.
$" Output list separator. (interpolated lists)
$; Subscript separator. (Use a real multidimensional array instead.)
Formats

$% Page number for currently selected output channel.
$= Current page length.
$- Number of lines left on page.
$~ Format name.
$^ Name of top-of-page format.
$: Format line break characters
$^L Form feed (default "\f").
$^A Format Accumulator
Status Reporting
$? Child error. Status code of most recent system call or pipe.
$! Operating System Error. (What just went 'bang'?)
%! Error number hash
$^E Extended Operating System Error (Extra error explanation).
$@ Eval error.
${^CHILD_ERROR_NATIVE} Native status returned by the last pipe close, backtick (`` ) command, successful call to wait() or waitpid(), or from the system() operator.
ID's and Process Information
$$ Process ID
$< Real user id of process.
$> Effective user id of process.
$( Real group id of process.
$) Effective group id of process.
$0 Program name.
$^O Operating System name.
Perl Status Info
$] Old: Version and patch number of perl interpreter. Deprecated.
$^C Current value of flag associated with -c switch.
$^D Current value of debugging flags

$^F Maximum system file descriptor.
$^I Value of the -i (inplace edit) switch.
$^M Emergency Memory pool.
$^P Internal variable for debugging support.
$^R Last regexp (?{code}) result.
$^S Exceptions being caught. (eval)
$^T Base time of program start.
$^V Perl version.
$^W Status of -w switch
${^WARNING_BITS} Current set of warning checks enabled by use warnings;
$^X Perl executable name.
${^GLOBAL_PHASE} Current phase of the Perl interpreter.
$^H Internal use only: Hook into Lexical Scoping.
%^H Internaluse only: Useful to implement scoped pragmas.
${^TAINT} Taint mode read-only flag.
${^WIN32_SLOPPY_STAT} If true on Windows stat() won't try to open the file.
Command Line Args
ARGV Filehandle iterates over files from command line (see also <>).
$ARGV Name of current file when reading <>
@ARGV List of command line args.
ARGVOUT Output filehandle for -i switch
Miscellaneous
@F Autosplit (-a mode) recipient.
@INC List of library paths.
%INC Keys are filenames, values are paths to modules included via use, require, or do.
%ENV Hash containing current environment variables
%SIG Signal handlers.
$[ Array and substr first element (Deprecated!).



 See perlvar for detailed descriptions of each of these (and a few more) special variables.

 When modifiying special variables, it is often a good practice to localize the effects of the change. ie,
my @array = ( 1, 2, 3, 4, 5 );
print "@array\n";
{
    local $" = "\t";
    print "@array\n";
}
print "@array\n";
[download]

 And the output.....
1 2 3 4 5
1       2       3       4       5      
1 2 3 4 5
[download]

 The purpose of this node is to provide a super-concise categorized quick crossreference to Perl's special variables. perlvar provides a list in asciibetical order but doesn't really put the variables into easy to find categories.

one reason more to dislike svn

Before shooting me for all the rational reasons to have your code under source control .... Listen:

- Any developer should have 100% control over the source code of the instance of the project he is working on
- Any binary messing with that control is EVIL. Perioid

I have seen it with Microsoft Visual Studio. I saw it today with svn  - it messes the permissions of the projects so that you will not be able copy , move or edit FULLY from your source root dir and bellow.

And because of this EVIL I do have the templatize feature in the morphus project, which might introduce rare nasty bugs from time to time but provides me with independance without hiding and EVIL.

Labels

perl (41) Cheat Sheet (25) how-to (24) windows (14) sql server 2008 (13) linux (12) oracle (12) sql (12) Unix (11) cmd windows batch (10) mssql (10) cmd (9) script (9) textpad (9) netezza (8) sql server 2005 (8) cygwin (7) meta data mssql (7) metadata (7) bash (6) code generation (6) Informatica (5) cheatsheet (5) energy (5) tsql (5) utilities (5) excel (4) future (4) generic (4) git cheat sheet (4) html (4) perl modules (4) programs (4) settings (4) sh (4) shortcuts (4) поуки (4) принципи (4) Focus Fusion (3) Solaris (3) cool programs (3) development (3) economy (3) example (3) freeware (3) fusion (3) logging (3) morphus (3) mssql 2005 (3) nuclear (3) nz (3) parse (3) python (3) sftp (3) sofware development (3) source (3) sqlplus (3) table (3) vim (3) .Net (2) C# (2) China (2) GUI (2) Google (2) GoogleCL (2) Solaris Unix (2) architecture (2) ascii (2) awk (2) batch (2) cas (2) chrome extensions (2) code2html (2) columns (2) configuration (2) conversion (2) duplicates (2) excel shortcuts (2) export (2) file (2) free programs (2) informatica sql repository (2) linux cheat sheet (2) mssql 2008 (2) mysql (2) next big future (2) nsis (2) nz netezza cheat sheet (2) nzsql (2) ora (2) prediction (2) publish (2) release management (2) report (2) security (2) single-click (2) sqlserver 2005 (2) sqlserver 2008 (2) src (2) ssh (2) template (2) tools (2) vba (2) video (2) xlt (2) xml (2) youtube videos (2) *nix (1) .vimrc (1) .virmrc vim settings configs (1) BSD license (1) Bulgaria (1) Dallas (1) Database role (1) Dense plasma focus (1) Deployment (1) ERP (1) ExcelToHtml (1) GD (1) GDP (1) HP-UX (1) Hosting (1) IDEA (1) INC (1) IT general (1) ITIL management bullshit-management (1) IZarc (1) Java Web Start (1) JavaScript anchor html jquery (1) Khan Academy (1) LINUX UNIX BASH AND CYGWIN TIPS AND TRICKS (1) Linux Unix rpm cpio build install configure (1) Linux git source build .configure make (1) ListBox (1) MIT HYDROGEN VIRUS (1) OO (1) Obama (1) PowerShell (1) Run-time (1) SDL (1) SIWA (1) SOX (1) Scala (1) Services (1) Stacks (1) SubSonic (1) TED (1) abstractions (1) ansible hosts linux bash (1) ansible linux deployment how-to (1) ansible yum pip python (1) apache (1) apache 2.2 (1) application life cycle (1) architecture input output (1) archive (1) arguments (1) avatar (1) aws cheat sheet cli (1) aws cli (1) aws cli amazon cheat sheet (1) aws elb (1) backup (1) bash Linux open-ssh ssh ssh_server ssh_client public-private key authentication (1) bash perl search and replace (1) bash stub (1) bin (1) biofuels (1) biology (1) books (1) browser (1) bubblesort (1) bugs (1) build (1) byte (1) cas_sql_dev (1) chennai (1) chrome (1) class (1) claut (1) cmdow (1) code generation sqlserver (1) command (1) command line (1) conf (1) confluence (1) console (1) convert (1) cool programs windows free freeware (1) copy paste (1) copy-paste (1) csv (1) ctags (1) current local time (1) cygwin X11 port-forwarding mintty xclock Linux Unix X (1) cygwin bash how-to tips_n_tricks (1) cygwin conf how-to (1) data (1) data types (1) db2 cheat sheet (1) db2 starter ibm bash Linux (1) debt (1) diagram (1) dictionaries (1) digital (1) disk (1) disk space (1) documentation (1) dos (1) dubai (1) e-cars (1) electric cars (1) electricity (1) emulate (1) errors (1) exponents (1) export workflow (1) extract (1) fast export (1) fexp (1) file extension (1) file permissions (1) findtag (1) firewall (1) for loop (1) freaky (1) functions (1) fusion research (1) german (1) git gitlab issues handling system (1) google cli (1) google code (1) google command line interface (1) gpg (1) ha (1) head (1) helsinki (1) history (1) hop or flop (1) host-independant (1) how-to Windows cmd time date datetime (1) ibm db2 cognos installation example db deployment provisioning (1) ideas (1) image (1) informatica oracle sql (1) informatica repo sql workflows sessions file source dir (1) informatica source files etl (1) install (1) isg-pub issue-tracker architecture (1) it management best practices (1) java (1) jump to (1) keyboard shortcuts (1) ksh (1) level (1) linkedin (1) linux bash ansible hosts (1) linux bash commands (1) linux bash how-to shell expansion (1) linux bash shell grep xargs (1) linux bash tips and t ricks (1) linux bash unix cygwin cheatsheet (1) linux bash user accounts password (1) linux bash xargs space (1) linux cheat-sheet (1) linux cheatsheet cheat-sheet revised how-to (1) linux how-to non-root vim (1) linux ssh hosts parallel subshell bash oneliner (1) london (1) make (1) me (1) metacolumn (1) metadata functions (1) metaphonre (1) method (1) model (1) movie (1) multithreaded (1) mysql cheat sheet (1) mysql how-to table datatypes (1) n900 (1) nano (1) neteza (1) netezza bash linux nps (1) netezza nps (1) netezza nps nzsql (1) netezza nz Linux bash (1) netezza nz bash linux (1) netezza nz nzsql sql (1) netezza nzsql database db sizes (1) non-password (1) nord pol (1) nps backup nzsql schema (1) number formatting (1) nz db size (1) nz table count rows (1) nzsql date timestamp compare bigint to_date to_char now (1) on-lier (1) one-liners (1) one-to-many (1) oneliners (1) open (1) open source (1) openrowset (1) openssl (1) oracle PL/SQL (1) oracle Perl perl (1) oracle installation usability (1) oracle number formatting format-model ora-sql oracle (1) oracle templates create table (1) oracle trigger generic autoincrement (1) oracle vbox virtual box cheat sheet (1) oracle virtual box cheat sheet (1) outlook (1) parser (1) password (1) paths (1) perl @INC compile-time run-time (1) perl disk usage administration Linux Unix (1) perl modules configuration management (1) permissions (1) php (1) picasa (1) platform (1) postgreSQL how-to (1) powerShell cmd cygwin mintty.exe terminal (1) ppm (1) predictions (1) prices (1) principles (1) productivity (1) project (1) prompt (1) proxy account (1) public private key (1) publishing (1) putty (1) qt (1) read file (1) registry (1) relationship (1) repository (1) rm (1) scala ScalaFmt (1) scp (1) scripts (1) scsi (1) search and replace (1) sed (1) sendEmail (1) sh stub (1) shortcuts Windows sql developer Oracle (1) sidebar (1) silicon (1) smells (1) smtp (1) software development (1) software procurement (1) sofware (1) sort (1) sql script (1) sql_dev (1) sqlcmd (1) sqlite (1) sqlite3 (1) sshd (1) sshd cygwin (1) stackoverflow (1) stored procedure (1) stub (1) stupidity (1) subroutines (1) svn (1) sysinternals (1) system design (1) tail (1) tar (1) temp table (1) templates (1) teradata (1) terminal (1) test (1) testing (1) theory (1) thorium (1) time (1) tip (1) title (1) tmux .tmux.conf configuration (1) tmux efficiency bash (1) tool (1) ui code prototyping tips and tricks (1) umask Linux Unix bash file permissions chmod (1) url (1) urls (1) user (1) utility (1) utils (1) vb (1) vbox virtual box cheat sheet (1) vim perl regex bash search for string (1) vim recursively hacks (1) vim starter (1) vim-cheat-sheet vim cheat-sheet (1) vimeo (1) visual stuio (1) warsaw (1) wiki (1) wikipedia (1) window (1) windows 7 (1) windows 8 (1) windows programs (1) windows reinstall (1) windows utility batch perl space Windows::Clipboard (1) wisdoms (1) workflow (1) worth-reading (1) wrapper (1) xp_cmdshell (1) xslt (1) youtube (1)

Blog Archive

Translate with Google Translate

My Blog List