CLI Color and bash prompt.. some colored fun with prompts in bash

There are two ways to do it, one is with tput command. We will see that some other time, today we will consider the escape sequence way.

First we need to understand the colors as understood by bash. Some time back a fried of mine gave me this little script to find the colors. You can download it Script bash colors. Here is the script


T=\’amit agarwal\’   # The test text

echo -e \”\\n                 40m     41m     42m     43m\\
44m     45m     46m     47m\”;

for FGs in \’    m\’ \’   1m\’ \’  30m\’ \’1;30m\’ \’  31m\’ \’1;31m\’ \’  32m\’ \\
\’1;32m\’ \’  33m\’ \’1;33m\’ \’  34m\’ \’1;34m\’ \’  35m\’ \’1;35m\’ \\
\’  36m\’ \’1;36m\’ \’  37m\’ \’1;37m\’;
do FG=${FGs// /}
echo -en \” $FGs \\033[$FG  $T  \”
for BG in 40m 41m 42m 43m 44m 45m 46m 47m;
do echo -en \”$EINS \\033[$FG\\033[$BG  $T  \\033[0m\”;

Now you will get output something like below:


Now\’s the time to get our hand dirty. First lets note down some facts


\\[ and \\] respectively marks the begining and end of non-printing character. These characters also mark the start and end of non-countable characters for line wrapping.

\\e is the ASCII escape character also marked by \\033

PS1 holds the string for the command prompt

PS2 holds the string for the command prompt at second level.

So we will use the above two in combination with the color codes that we saw earlier to create our own colored prompt.

Let try with simple one first. Let try something like \”aka>\” in green color. So we will try in the terminal first:



PS1 –> we want to change the command prompt and not the second prompt

\\[   –> Begin non printing character

\\e[   –> Escape character

1;32m –> Color green with no background as per the chart of the output from bash_color script

\\]   –> End non printing character

aka> –> Actual prompt

\\[     –> Begin non printing character

\\e[  –> Escape Character

0m –> Restore original color to black

\\]     –> End non printing character

Ok, no now all the cryptic code above looks simple, isn\’t it. Let\’s see what all we can put in the command prompt:

   Sequence   Description
              \\a     an ASCII bell character (07)
              \\d     the date in \"Weekday Month Date\" format (e.g., \"Tue May 26\")
                     the format is passed to strftime(3) and the result is inserted into the prompt string; an empty format results in  a  locale-
                     specific time representation.  The braces are required
              \\e     an ASCII escape character (033)
              \\h     the hostname up to the first ‘.’
              \\H     the hostname
              \\j     the number of jobs currently managed by the shell
              \\l     the basename of the shell’s terminal device name
              \\n     newline
              \\r     carriage return
              \\s     the name of the shell, the basename of $0 (the portion following the final slash)
              \\t     the current time in 24-hour HH:MM:SS format
              \\T     the current time in 12-hour HH:MM:SS format
              \\@     the current time in 12-hour am/pm format
              \\A     the current time in 24-hour HH:MM format
              \\u     the username of the current user
              \\v     the version of bash (e.g., 2.00)
              \\V     the release of bash, version + patch level (e.g., 2.00.0)
              \\w     the current working directory, with $HOME abbreviated with a tilde
              \\W     the basename of the current working directory, with $HOME abbreviated with a tilde
              \\!     the history number of this command
              \\#     the command number of this command
              \\$     if the effective UID is 0, a #, otherwise a $
              \\nnn   the character corresponding to the octal number nnn
              \\     a backslash
              \\[     begin a sequence of non-printing characters, which could be used to embed a terminal control sequence into the prompt
              \\]     end a sequence of non-printing characters

So, with the above information in hand, we are ready to create complex command prompts for our shell. If all this does not look like you can handle and need some help on this, there is always help available in the form of bashish and lot of other bash tools to help here.

If you like the artile please digg it or share on your favourite bookmarks site.

Some examples from various sources:

export PS1=\”\\e[0;31m[\\u@\\h \\W]\\$ \\e[m\”


if [ `hostname|cut -c -11` == lonlnddebtp ]; then
PS1=’\\[\\e[1;31m\\][\\u@\\h:\\w]\\$\\[\\e[0m\\] ‘ # PROD, red color
elif [ `hostname|cut -c -11,13-` == lonlnddebtd-z1 ]; then
PS1=’\\[\\e[2;32m\\][\\u@\\h:\\w]\\$\\[\\e[0m\\] ‘ # UAT, green color
PS1=’[\\u@\\h:\\w]\\$ ‘

set PS1 = “%B%{33[31m%}%m %{33[37m%}%B%// \\n”

\\[\\033[34m\\])\\[\\033[31m\\]-\\[\\033[34m\\](\\[\\033[31m\\]\\$(date +%I:%M%P)\\
\\[\\033[34m\\]-:-\\[\\033[31m\\]\\$(date +%m)\\[\\033[34m\\033[31m\\]/\\$(date +%d)\\
export PS1=\”\\[\\e[32;1m\\]\\w> \\[\\e[0m\\]\”

export PS1=\”\\[\\e[36;1m\\]\\u@\\[\\e[32;1m\\]\\H> \\[\\e[0m\\]\”
and so on….

Leave me a comment if you need some specific format for the prompt.

Solaris one liners

Unix/Solaris: One-Liners


Listed here are a bunch of unix commands.

–> change file date stamp

touch –t 199906042020 filename

–> move partitions

ufsdump 0f – /dev/rdsk/c0t0s0s0 | (cd /home; ufsrestore xv -)

–> lay down file system with 1% minfree and inode density

newfs –m1 –i81920 /dev/rdsk/c0t0d0s0

–> check file system

fsck /dev/rdsk/c0t0d0s0

Q: starting sybase

login as sybase, run: ./install/RUN_SYBASE

Q: logging in as sybase sa

isql -U sa

–> dump a partition and pipe to gzip. Watch > 2GB limit

ufsdump 0f – /home | gzip – >/tmp/home.dump.gz

–> rewind offline a tape

mt –f /dev/rmt/0 rewoffl

–> only allow 300MB for user /tmp access

swap – /tmp tmpfs – yes SIZE=300M

–> verbose interactive restore

ufsrestore –ivf /dev/rmt/1

–> remove a printer from a class

lpadmin –p level5-line1 –r level5-line

–> truss a command

truss –-f -–o /tmp/log.txt

–> [DB] feed a script into sybase

isql –Urfe_xfer -Uuser -Ppassword -isqlscript >>blah.txt

–> make a printer class

lpadmin –p level5-line1 –c level5-line

–> remove level2-line2 printer from printer class level2-line

lpadmin -p level2-line2 -r level2-line

–> add level2-line3 to printer class

lpadmin -c level2-line -p level2-line3

–> [DB] how to change your password in isql

sp_password password, password-new

–> move a directory

tar cf – ./games | (cd /tmp; tar xvBpf – )

–> [DB] run a sybase script, and dump to file


–> move a directory to another server

tar cf – ./games | rsh brucey cd /tmp\\; tar xvBpf –

–> check for SUID SGID files

ncheck -F ufs -s /dev/dsk/c3t0d0s

— remove core files

find / -name core –exec rm –f {} \\; -o –fstype nfs –prune

–> rebuild man pages

catman –w –M man-page-directory or /usr/lib/makewhatis

–> vi command to show special characters

: set list

–> adding an account

useradd -u 120 –g dls -d /apps/dls –s /bin/ksh -c \”comment\” -m dls

–> create a mysql database

mysqladmin -uroot -ppassword create ebs

–> starting mysql database

/etc/rc.d/init.d/mysql.server start


–> Invoke CPAN module install

perl –MCPAN –eshell

–> dump to zip

ufsdump 0f – /filesystem | /opt/local/gzip – > /tmp/dump.gz

–> shutdown mysql databse

/usr/local/bin/mysqladmin shutdown -ppassword

/etc/rc.d/init.d/mysql.server stop

–> test the loading of a module

PERL_DL_DEBUG=255 perl -e \’use CGI;\’

–> shows open files

fuser –cu /

–> Writing a Daemon:

1. edit /etc/services

add service and port.

2. edit /etc/inetd.conf

add in: edwardd stream tcp nowait root /bin/sh /bin/sh /home/sextone/bin/SERVER.mine

3. kill –HUP inetd.conf

–> how to mount a file system

mount /dev/dsk/c3t0d0s4 /apps/data/easysoft/DEVT

–> look at sar log

sar –f /var/adm/sa/sa24

–> write file checksums and size

cksum filename

–> show storage array info

ssaadm display /dev/rdsk/c1t5d2s0

–> show all disks on device d

luxadm display d

–> examine for a specific OS finerprint

nmap –sS -p 80 -O -v = examine OS

–> show print jobs

/usr/ucb/lpq –Plevel6

–> Scan for known ports. log it. do OS scan.

nmap –sS -F -o foo.log -v -O =

–> show status of printer

/usr/ucb/lpc status

–> make a swap file:

dd if=/dev/zero of=swapfile bs=1024 count=65535

mkswap ./swapfile

chmod 600 ./swapfile

swapon ./swapfile

–> show open files for process

lsof –p PID

–> show open files for all TCP connections

lsof –iTCP

–> show open files for internet address

lsof -iTCP@

–> as above

lsof -i @

–> examine tcp ports

lsof -iTCP@sarah:1-50000

–> show open files for user.

lsof –u username

–> show processes that has the file in use.

lsof /apps/cms/ECMS-Server

–> show open files and retry every 5 seconds

lsof –p process-id –r 5

–> mount a floppy

mount -t vfat /dev/fd0 /mnt/floppy

–> check here for debugging processes and errno.h for errors




–> scp a whole directory, preserve mods

sudo scp -prv devel webadmin@

–> take processor 2 and 3 offline.

psradm -f 2 3

–> show processor stats verbose.

psrinfo –v

–> how to skip grant tables in mysql (over ride security)

/usr/local/libexec/mysqld -Sg

–> how to feed in an SQL program


–> rm all files in directories

find . -type f -exec rm {} \\;

–> dump packets to a capture file

sudo snoop –o /tmp/tcp.txt cp

–> backup one liner

tar cvf – /home/ebs | gzip – > ebs.tar.gz

–> Look at selected packets in capture file

sudo snoop -i /tmp/tcp.txt

–> unzip and pipe to tar

gzip -dc

–> watch packets from two servers.

snoop sarah brucey

–> enable ip masquerading

/sbin/ipchains -P forward DENY

/sbin/ipchains -A forward -s -j MASQ

-> view su log file

cat /var/adm/sulog

–> establish a default router or gateway.

echo \”\” > /etc/defaultrouter

echo \” sagacity\” >> /etc/hosts

change /etc/nsswitch.conf so that hosts has files, dns

edit resolv.conf put in

search .


–> turn off automounter on /export/home.

vi /etc/auto_master, comment out /export/home

–> configuration file for sudoers


–> building ssh-1.2.27 on x86Solaris2.6 needed a few things:

/usr/openwin/bin in path

/usr/xpg4/bin in path

declare AR=\”/usr/xpg4/bin/ar\”

declare NM_PATH=\”/usr/xpg4/bin/nm\”

–> snoop network packets and get size and time stamp entries.

snoop -S -ta empa1

–> access perl CPAN

perl -MCPAN -e shell

install DBI

–> search for no password entries and lock all accounts.

for i in `passwd –sa | grep NP | awk ‘{print $1’`


echo “locking $i”

passwd –l $i


–> delete from a tar

tar –delete -f fs_backup_Sunday.tar home/ebs/tmp

–> Example on backing up files to tape. Must specify non rewinding, else you will over-write the files.

for file in `ls`


echo \”sending $file to tape…\”

echo `date`

tar cvpf /dev/rmt/0n $file


–> making/adding a partition.

1. use fdisk to make a parition.

2. mkfs -t ext2 -c /dev/hda11

3. mount -t ext2 /dev/hda11 /opt2

4. update /etc/fstab

–> rebuild the windex file

catman –w –M /usr/share/man

–> execute tar on remote host sarah and send tarball to standard output,

which becomes standard input for tar xvf – and the file gets dumped locally,

in this case on crawl. you have to cd to dir before tar or else you

will include path in tar

ssh maggie \”cd $DIRNAME; tar cvf – $BASENAME\” | (cd $TPATH; tar xvf – )

–> dump a remote filesystem and send it to local tape drive.

ssh -–x $fw /usr/sbin/ufsdump 0cf – $fs | dd obs=63k of=$TAPE

–> encrypt filename 1 and output to 1.crypt file

crypt < 1 > 1.crypt ; rm 1

–> decrypt filename 1.crypt and stdout to screen

crypt < 1.crypt

–> send a file to tape

tar cvpf /dev/rmt/0 filename

–> quicker way to search and replace in vi

: %s/existing/new/g

–> shows where and which shared library files an application uses.

ldd binary

–> shell script stuff:

# repeat a command 100 times


while [ $x -gt 0 ]





–> Something very important to remember about partitions

It is important to note that Cylinder 0 contains the disklabel, which

contains the partition table. A normal filesystem can be placed

starting at Cylinder 0, since it will not touch the disklabel.

If you lay down a raw device, for a database, over Cylinder 0,

then you will completely lose all your partitions. You will then

have to restore the disklabel, and backup from tape if you happen to do this.

–> move a partition

find . |cpio -pdm /apps

–> cron structure

min hour day-of-month month weekday command

–> PatchDiag Tool. Get patches from:

patchdiag.xref is available at:

/opt/local/bin/patchdiag -x /opt/local/lib/patchdiag.xref > patchdiag.`uname -n`

–> command showing system parameters


–> Get Ambient Temperature of Server

/usr/platform/SUNW,Ultra-4/sbin/prtdiag -v

–> good ps formatting showing percent cpu first.

ps -edf -o pcpu,pid,user,arg

–> full details on ps

/usr/bin/ps –A -o user,pid,pcpu,pmem,vsz,rss,tty,s,stime,time,args

–> chown the hidden files as well.

find . -print -exec chown -R sextone:staff {} \\;

–> The nsradmin command is a command-line based administrative

program for the NetWorker system. Normally nsradmin monitors

and modifies NetWorker resources over the network.


–> Spray a server

-c number of packets

-d delay in microseconds

-l pakcet size in bytes

/usr/sbin/spray -c 1 –d 20 -l 4096 maggie

–> Turn on bold.

bold=`tput smso`

offbold=`tput rmso`

echo \”${bold}You must be the \”root\” user to run this script.${offbold}\”

–> good way to send a dir to tape

tar cf /dev/rmt/0n directory

–> example of bringing up an interface

ifconfig hme0:1 inet up

–> show all connections

netstat –f inet

–> rpcinfo makes an RPC call to an RPC server and reports

what it finds.

rpcinfo -b 390109 2 | sort -u

–> rewind a tape fast

< /dev/rmt/0

–> show loaded modules


–> find world readable files and dirs

find / -type d –perm -2 –print

find . -type f –perm -2 -print

–> adding in a boot alias, eg:

boot sarahroot1 –s

nvalias sarahroot1 /sbus@1f,0/sunw,fas@e,8800000/sd@9,0:a

–> clever way to archive

tar cvf – `find . –print` >/tmp/dumpfile.tar

tar xvf –

–> tee to a file

echo \”Start Date/Time: `date`\” | tee -a $LOG_FILE

–> read a snoop file

snoop -i anz-telnet.snoop

–> write a snoop log (this will count the number of connections, which is pretty neat).

snoop –osnoop.log sarah

–> set default run level. 5 for gui.


–> show all exported filesystems

showmount -e crawl

–> shows all configurable variables for tcp interface.

sudo ndd -get /dev/tcp

– ?


sudo ndd -get /dev/tcp tcp_conn_req_max_q


ndd /dev/arp \\?

ndd /dev/ip \\?

ndd /dev/tcp \\?

ndd /dev/udp \\?

ndd /dev/icmp \\?

–> set sticky bit on group files, only the owner can change the mode.

–> the +l is mandatory file and record locking while a program

–> is accessing that file.

chmod g+s,+l file

–> print duplex landscape 4 qudrant printing

mpage –t –l –4

–> install a patch

installpatch .

–> check to see if a patch has been installed

showrev –p |grep package name

–> unzip, untar in a /tmp directory

zcat 104708-16.tar.gz | ( cd /tmp; sudo tar xvf – )

–> check out revision level on ssa controller

/usr/sbin/ssaadm display controller

–> unzip and untar a file without having to create an intermediate tar file

sudo gzip -dc /tmp/270599/post-EOD.tar.gz |tar xvf –

–> selectively extract from a tar archive

tar xvf /tmp/iona.tar ./iona/.sh_history

–> send a bunch of files to tape

tar cf /tmp/rules.tar ruleb* objects.C *.W

–> examine section 5 of man

man -s 5 signal

–> shows signals and definitions of structures, eg sigaction


–> location of the limits file on solaris


–> send an attachment via email from command prompt

uuencode file.tar.gz file.tar.gz | mailx –s “backup” root@crawl

–> zero a file

cat /dev/null > isam.log

–> good way to restore from cdrom a binary file

zcat < /cdrom/cdrom0/Solaris_2.6/Product/SUNWcsu/install/reloc.cpio.Z |

cpio –idm usr/lib/fs/ufs/ufsrestore

–> running su as a user then ssh

su – dls-PROD -c \”/opt/local/bin/ssh drp-stagger \”cd /tmp; /bin/ls\” \”

–> verify a newfs format

sudo newfs –Nv /dev/md/dsk/d96

–> making lost_found. must be 8192 bytes in size.

mkdir ./lost+found;chown root ./lost+found; chgrp root ./lost+found ;chmod 700 ./lost+found’; cd ./lost+found

nofiles=0 ; while [ \”$nofiles\” -le 650 ] ; do ; /usr/ucb/touch $nofiles ; nofiles=`expr $nofiles + 1` ; done

–> execute lynx

lynx -cfg /usr/lib/lynx.cfg

–> sed search example

sed \’/Sep\\ 25/!d; /castill/!d\’ /var/log/syslo

–>should only be used at the EEPROM

boot –r

–> should be used at single user mode

reboot — -r

–> should be used in multiuser mode

touch /reconfigure

–> performing a remote dump


|cpio -oc |gzip -c

|ssh brucey -l chaup dd obs=18k of=/dev/rmt/0n

– to extract –

cd /ssa/emphasys/sybase/dump

dd ibs=18k if=|gunzip -c |cpio –idc

–> boot block located here.

/usr/platform/`uname –i`/lib/fs/ufs

–> getting a server on the network

add hosts entry for IP address

clear configs: ifconfig pe0 unplumb

ifconfig pe0 netmask up

route add default 1

verify the routing table: netstat –rn

add resolv.conf entry: domain nameserver

edit /etc/nsswitch.conf change hosts to files, dns

lesson here is to unplumb interface, and let ifconfig setup the routing.

if you specify an ip address and a netmask it will manage

the routing and the broadcasting.

–> find all, files associated with PID 22240

/usr/proc/bin/pfiles 22240

find file based on inode

find –i number

“ncheck –i number

–> good redirection example

./a.out trash

–> synchronize files from one server to another. This is useful for

synchronizing database dump files, binary files, etc. This is definitely a powerful tool.

rsync -avz -e ssh –rsync-path=\”/usr/local/bin/rsync\” `pwd`

–> Example Awk Script

# run with awk -f/tmp/1.awk /etc/group

BEGIN { FS = \”:\” }

{ print $1 | \”sort\” }

{ nlines++ }

END { print nlines }

–> awk example.

awk \’/#/ {print \”Got a comment\”}\’ /etc/hosts

–> delete every 2nd field in file

awk \'{$2= \”\”; print}\’ datafile >

–> awk average/standard deviation program

x1 += $1

x2 += $1*$1


x1 = x1/NR

x2 = x2/NR

sigma = sqrt(x2 – x1*x1)

if (NR > 1) std_err = sigma/sqrt(NR – 1)

print \”Number of points = \” NR

print \”Mean = \” x1

print \”Standard Deviation = \” sigma

print \”Standard Error = \” std_err

# tapeless tar

By : anonymous ( Wed Jan 17 00:48:20 2007 )

# Ack

By : Samir Kumar Rakshit ( Tue Jan 9 21:58:24 2007 )

# How to ru RPC daemons on solaris

By : kian ( Sun Oct 8 23:01:47 2006 )

# A great Service

By : anonymous ( Thu Jul 13 11:48:18 2006 )

# helpfull commands..

By : binoy ( Thu May 4 15:45:22 2006 )

All Comments

Name :

Password :

E-mail :

Subject :

Comments :

English to Visayan Cebuano Dictionary

Find: Display: hits per page

Suggest a Site

Visayan Cebuano to English Dictionary

Recovering Deleted Files With lsof

Quick update, found this nice article on how to recover deleted file, if its still open by some process.
Recovering Deleted Files With lsof