Wednesday, June 18, 2008

My Solaris .profile

I wanted to post my .profile file online because I have had to re-create it many times and I thought that others might find it useful!

Some of the things that the profile does are:
  • colors the prompt
  • adds shortcuts for ll and l (ls -lF and ls -laF)
  • fixes the delete (among others) key so that delete actually deletes characters, rather than add tildes!
  • adds mouse support to pico and makes 'nano' refer to pico (our system doesn't have nano)
  • sets up CDPATH (adds the directories in this variable to the search path when using cd)

# set the term to xterm
export TERM=xterm

# Set up VISUAL, EDITOR for crontab editing
VISUAL=/usr/local/bin/pico
EDITOR=${VISUAL}

# Set up a prompt
PS1="\u@\h:\w# "
export PS1="\e[1;31m$(echo $PS1)\e[m"

# Export all the above
export VISUAL EDITOR PS1

# set up CDPATH
CDPATH=$HOME
export CDPATH

# set up some aliases
alias ll="ls -lF"
alias l="ls -laF"

alias nano="pico -w -m"
alias pico="/usr/local/bin/pico -w -m"


# fix some keys
case $TERM in
xterm*)
bind '"\e[1~": beginning-of-line'
bind '"\e[3~": delete-char'
bind '"\e[4~": end-of-line'
bind '"\177": backward-delete-char'
;;
esac
# eof

All that you need to do is save the above text in your home directory under the filename '.profile'.

I have tested this on Solaris, SuSe Linux and Ubuntu Linux.


Good luck!

Tuesday, June 17, 2008

Deleting shared memory segments

Recently, I found myself using IPC in a multi-threaded perl script that I wrote.

After running the script a few times I eventually ran out of memory segments and so the script would just die (turns out that the script wasn't robust enough ;-)

So after searching around, I came up with 2 commands that go through and clean, (read delete) all segments (and semaphores) on the computer. The commands need to be run from the command line.

On Solaris:

ipcs -s | awk ' $5 == "ekawas" {print $2, $5}' | awk '{ print $1}' | while read i; do ipcrm -s $i; done

ipcs -m | awk ' $5 == "ekawas" {print $2, $5}' | awk '{ print $1}' | while read i; do ipcrm -m $i; done


On Linux/Unix:

ipcs -s | awk ' $3 == "ekawas" {print $2, $3}' | awk '{ print $1}' | while read i; do ipcrm sem $i; done

ipcs -m | awk ' $3 == "ekawas" {print $2, $3}' | awk '{ print $1}' | while read i; do ipcrm -m $i; done


Of course, you will need to change "ekawas" to a more appropriate username. To find out the username that you should be using, run 'ipcs -s' or 'ipcs -m' and see who created the segments.

Please be careful, because all segments created by all users will be listed; so don't delete ones that you didn't create!