Wednesday, 31 May 2017

What is PS2 - Continuation Interactive Prompt in Linux

A very long command can be broken down to multiple lines by giving \ at the
end of the line. The default interactive prompt for a multi-line command is
“> “. Let us change this default behavior to display “continue->” by using PS2
environment variable as shown below.

ramesh@dev-db ~> myisamchk --silent --force --fast --
update-state \
> --key_buffer_size=512M --sort_buffer_size=512M \
> --read_buffer_size=4M --write_buffer_size=4M \
> /var/lib/mysql/bugs/*.MYI

[Note: This uses the default ">" for continuation
prompt]

ramesh@dev-db ~> export PS2="continue-> "
ramesh@dev-db ~> myisamchk --silent --force --fast --
update-state \
continue-> --key_buffer_size=512M --
sort_buffer_size=512M \
continue-> --read_buffer_size=4M --write_buffer_size=4M
\
continue-> /var/lib/mysql/bugs/*.MYI
[Note: This uses the modified "continue-> " for

continuation prompt]
I found it very helpful and easy to read, when I break my long commands into
multiple lines using \. I have also seen others who don’t like to break-up long
commands.

What is PS1 - Default Interaction Prompt

The default interactive prompt on your Linux can be modified as shown below
to something useful and informative. In the following example, the default
PS1 was “\s-\v\$”, which displays the shell name and the version number. Let
us change this default behavior to display the username, hostname and
current working directory name as shown below.

-bash-3.2$
export PS1="\u@\h \w> "
ramesh@dev-db ~> cd /etc/mail
ramesh@dev-db /etc/mail>
[Note: Prompt changed to "username@hostname current-
dir>" format]
Following PS1 codes are used in this example:
o \u – Username
o \h – Hostname
o \w - Full pathname of current directory. Please note that when
 you are in the home directory, this will display only ~ as shown
above
Note that there is a space at the end in the value of PS1. Personally, I prefer
a space at the end of the prompt for better readability.
Make this setting permanent by adding export PS1=”\u@\h \w> ” to either
.bash_profile (or) .bashrc as shown below.

47
Linux 101 Hacks
www.thegeekstuff.com
ramesh@dev-db ~> vi ~/.bash_profile
ramesh@dev-db ~> vi ~/.bashrc
[Note: Add export PS1="\u@\h \w> " to one of the above
files]
Refer to the next chapter for several practical examples of PS1 usage in
detail.

How to Display total connect time of users in Linux

Ac command will display the statistics about the user’s connect time.
Connect time for the current logged in user
With the option –d, it will break down the output for the individual days. In
this example, I’ve been logged in to the system for more than 6 hours today.

On Dec 1st, I was logged in for about 1 hour.
$ ac –d
Dec 1
Dec 2
Dec 3
Dec 4
Today
total
total
total
total
total
1.08
0.99
3.39
4.50
6.10
Connect time for all the users
To display connect time for all the users use –p as shown below. Please note
that this indicates the cumulative connect time for the individual users.
$ ac -p
john
madison
sanjay
nisha
3.64
0.06
88.17
105.92

ramesh
total 309.21
111.42
Connect time for a specific user
To get a connect time report for a specific user, execute the following:
$ ac -d sanjay
Jul 2
Aug 25
Sep 3
Sep 4
Dec 24
Dec 29
Today
total
total
total
total
total
total
total
12.85
5.05
1.03
5.37
8.15
1.42
2.95

How to use Diff Command in Linux

diff command compares two different files and reports the difference. The
output is very cryptic and not straight forward to read.

Syntax: diff [options] file1 file2

What was modified in my new file when compare to my old file?
The option -w in the diff command will ignore the white space while
performing the comparison.
In the following diff output:

o The lines above ---, indicates the changes happened in first file in the
 diff command (i.e name_list.txt).

o The lines below ---, indicates the changes happened to the second
 file in the diff command (i.e name_list_new.txt). The lines that
belong to the first file starts with < and the lines of second file starts
with >.

# diff -w name_list.txt name_list_new.txt

2c2,3
< John Doe
---
> John M Doe
> Jason Bourne

How to use Stat Command in Linux

Stat command can be used either to check the status/properties of a single
file or the filesystem.
Display statistics of a file or directory.

$ stat /etc/my.cnf
File:
Size:
Device:
Access:
(
0/
Access:
Modify:
Change:
`/etc/my.cnf'
346 Blocks: 16 IO Block: 4096
regular file
801h/2049d
Inode: 279856
Links: 1
(0644/-rw-r--r--) Uid: (
0/
root)
Gid:
root)
2009-01-01 02:58:30.000000000 -0800
2006-06-01 20:42:27.000000000 -0700
2007-02-02 14:17:27.000000000 -0800
$ stat /home/ramesh
File: `/home/ramesh'
Size: 4096
Blocks: 8
IO Block:
4096
directory
Device: 803h/2051d
Inode: 5521409
Links: 7
Access: (0755/drwxr-xr-x) Uid: ( 401/ramesh)
Gid: (
401/ramesh)
Access: 2009-01-01 12:17:42.000000000 -0800
Modify: 2009-01-01 12:07:33.000000000 -0800
Change: 2009-01-09 12:07:33.000000000 -0800

Display the status of the filesystem using option –f
$ stat -f /
File:
ID:
Blocks:
1876998
Inodes:
"/"
0
Namelen: 255
Type: ext2/ext3
Total: 2579457
Free: 2008027
Available:
Size: 4096
Total: 1310720
Free: 1215892

How to use Cut Command in Linux

Cut command can be used to display only specific columns from a text file or
other command outputs.
Following are some of the examples.

Display the 1st field (employee name) from a colon delimited file

$ cut -d: -f 1 names.txt
Emma Thomas
Alex Jason
Madison Randy
Sanjay Gupta
Nisha Singh

Display 1st and 3rd field from a colon delimited file

$ cut -d: -f 1,3 names.txt
Emma Thomas:Marketing
Alex Jason:Sales
Madison Randy:Product Development
Sanjay Gupta:Support
Nisha Singh:Sales

Display only the first 8 characters of every line in a file

$ cut -c 1-8 names.txt
Emma Tho
Alex Jas
Madison
Sanjay G
Nisha Si

Misc Cut command examples
o cut -d: -f1 /etc/passwd Displays the unix login names for all the users
 in the system.
o free | tr -s ' ' | sed '/^Mem/!d' | cut -d" " -f2 Displays the total
 memory available on the system.

How use Uniq Command in Linux

Uniq command is mostly used in combination with sort command, as uniq
removes duplicates only from a sorted file. i.e In order for uniq to work, all
the duplicate entries should be in the adjacent lines. Following are some
common examples.

1. When you have an employee file with duplicate entries, you can do the
following to remove duplicates.
$ sort namesd.txt | uniq
$ sort –u namesd.txt

2. If you want to know how many lines are duplicates, do the following. The
first field in the following examples indicates how many duplicates where
found for that particular line. So, in this example the lines beginning with
Alex and Emma were found twice in the namesd.txt file.
$ sort namesd.txt | uniq –c
2
2
1
1
1
Alex Jason:200:Sales
Emma Thomas:100:Marketing
Madison Randy:300:Product Development
Nisha Singh:500:Sales
Sanjay Gupta:400:Support
3. The following displays only the entries that are duplicates.
$ sort namesd.txt | uniq –cd
2 Alex Jason:200:Sales
2 Emma Thomas:100:Marketing

How to use Sort Command in Linux

Sort command sorts the lines of a text file. Following are several practical
examples on how to use the sort command based on the following sample text
file that has employee information in the format:

employee_name:employee_id:department_name.

$ cat names.txt
Emma Thomas:100:Marketing
Alex Jason:200:Sales
Madison Randy:300:Product Development
Sanjay Gupta:400:Support
Nisha Singh:500:Sales

Sort a text file in ascending order
$ sort names.txt
Alex Jason:200:Sales
Emma Thomas:100:Marketing
Madison Randy:300:Product Development
Nisha Singh:500:Sales
Sanjay Gupta:400:Support
Sort a text file in descending order

$ sort -r names.txt
Sanjay Gupta:400:Support
Nisha Singh:500:Sales
Madison Randy:300:Product Development
Emma Thomas:100:Marketing
Alex Jason:200:Sales
Sort a colon delimited text file on 2nd field (employee_id)

$ sort -t: -k 2 names.txt
Emma Thomas:100:Marketing
Alex Jason:200:Sales
Madison Randy:300:Product Development
Sanjay Gupta:400:Support
Nisha Singh:500:Sales
Sort a tab delimited text file on 3rd field (department_name) and
suppress duplicates

$ sort -t: -u -k 3 names.txt
Emma Thomas:100:Marketing
Madison Randy:300:Product Development
Alex Jason:200:Sales
Sanjay Gupta:400:Support
Sort the passwd file by the 3rd field (numeric userid)

$ sort -t: -k 3n /etc/passwd | more
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
Sort /etc/hosts file by ip-addres

$ sort -t . -k 1,1n -k 2,2n -k 3,3n -k 4,4n /etc/hosts
127.0.0.1 localhost.localdomain localhost
192.168.100.101 dev-db.thegeekstuff.com dev-db
192.168.100.102 prod-db.thegeekstuff.com prod-db
192.168.101.20 dev-web.thegeekstuff.com dev-web
192.168.101.21 prod-web.thegeekstuff.com prod-web
Combine sort with other commands

o ps –ef | sort : Sort the output of process list
o ls -al | sort +4n : List the files in the ascending order of the file-
 size. i.e sorted by 5th filed and displaying smallest files first.
o ls -al | sort +4nr : List the files in the descending order of the
 file-size. i.e sorted by 5th filed and displaying largest files first.

How to use Xargs Command in Linux

xargs is a very powerful command that takes output of a command and pass it
as argument of another command. Following are some practical examples on
how to use xargs effectively.

1. When you are trying to delete too many files using rm, you may get error
message: /bin/rm Argument list too long – Linux. Use xargs to avoid this
problem.
find ~ -name ‘*.log’ -print0 | xargs -0 rm -f

2. Get a list of all the *.conf file under /etc/. There are different ways to get
the same result. Following example is only to demonstrate the use of xargs.
The output of the find command in this example is passed to the ls –l one by
one using xargs.

# find /etc -name "*.conf" | xargs ls –l

3. If you have a file with list of URLs that you would like to download, you can
use xargs as shown below.

# cat url-list.txt | xargs wget –c

4. Find out all the jpg images and archive it.

# find / -name *.jpg -type f -print | xargs tar -cvzf
images.tar.gz

5. Copy all the images to an external hard-drive.
# ls *.jpg | xargs -n1 -i cp {} /external-hard-
drive/directory

How to use Change the Case in Linux

Convert a file to all upper-case

$ cat employee.txt
100
200
300
400
Jason Smith
John Doe
Sanjay Gupta
Ashok Sharma
$ tr a-z A-Z < employee.txt
100 JASON SMITH
200 JOHN DOE

400 ASHOK SHARMA
Convert a file to all lower-case

$ cat department.txt
100
200
300
400
FINANCE
MARKETING
PRODUCT DEVELOPMENT
SALES

$ tr A-Z a-z < department.txt
100
200
300
400
finance
marketing
product development
sales

How to use Join Command in Linux

Join command combines lines from two files based on a common field.
In the example below, we have two files – employee.txt and salary.txt. Both
have employee-id as common field.
 So, we can use join command to combine

the data from these two files using employee-id as shown below.

$ cat employee.txt
100
200
300
400
Jason Smith
John Doe
Sanjay Gupta
Ashok Sharma

$ cat bonus.txt
100
200
300
400
$5,000
$500
$3,000
$1,250

$ join employee.txt bonus.txt
100
200
300
400
Jason Smith $5,000
John Doe $500
Sanjay Gupta $3,000
Ashok Sharma $1,250

How to Suppress Standard Output and Error Message in Linux

Sometime while debugging a shell script, you may not want to see either the
standard output or standard error message. Use /dev/null as shown below for
suppressing the output.

Suppress standard output using > /dev/null
This will be very helpful when you are debugging shell scripts, where you
don’t want to display the echo statement and interested in only looking at
the error messages.

# cat file.txt > /dev/null
# ./shell-script.sh > /dev/null

Suppress standard error using 2> /dev/null
This is also helpful when you are interested in viewing only the standard
output and don’t want to view the error messages.

# cat invalid-file-name.txt 2> /dev/null
# ./shell-script.sh 2> /dev/null

How to use Find Command in linux

find is frequently used command to find files in the UNIX filesystem based on
numerous conditions. Let us review some practice examples of find command.

Syntax: find [pathnames] [conditions]
How to find files containing a specific word in its name?
The following command looks for all the files under /etc directory with mail
in the filename.

# find /etc -name "*mail*"
How to find all the files greater than certain size?
The following command will list all the files in the system greater than
100MB.

# find / -type f -size +100M
How to find files that are not modified in the last x number of days?
The following command will list all the files that were modified more than 60
days ago under the current directory.

# find . -mtime +60
How to find files that are modified in the last x number of days?
The following command will list all the files that were modified in the last
two days under the current directory.

# find . –mtime -2
How to delete all the archive files with extension *.tar.gz and
greater than 100MB?
Please be careful while executing the following command as you don’t want
to delete the files by mistake. The best practice is to execute the same
command with ls –l to make sure you know which files will get deleted when
you execute the command with rm.

# find / -type f -name *.tar.gz -size +100M -exec ls -l {} \;
# find / -type f -name *.tar.gz -size +100M -exec rm -f {} \;

How to archive all the files that are not modified in the last x
number of days?

The following command finds all the files not modified in the last 60 days
under /home/jsmith directory and creates an archive files under /tmp in the
format of ddmmyyyy_archive.tar.

# find /home/jsmith -type f -mtime +60 | xargs tar -cvf
/tmp/`date '+%d%m%Y'_archive.tar`
On a side note, you can perform lot of file related activities (including finding
files) using midnight commander GUI, a powerful text based file manager for
Unix.

How to use Grep Command in linux

grep command is used to search files for a specific text. This is incredibly
powerful command with lot of options.

Syntax: grep [options] pattern [files]
How can I find all lines matching a specific keyword on a file?
In this example, grep looks for the text John inside /etc/passwd file and
displays all the matching lines.

# grep John /etc/passwd
jsmith:x:1082:1082:John Smith:/home/jsmith:/bin/bash
jdoe:x:1083:1083:John Doe:/home/jdoe:/bin/bash
Option -v, will display all the lines except the match. In the example below,
it displays all the records from /etc/password that doesn't match John.
Note: There are several lines in the /etc/password that doesn’t contain the
word John. Only the first line of the output is shown below.

# grep -v John /etc/passwd
jbourne:x:1084:1084:Jason Bourne:/home/jbourne:/bin/bash
How many lines matched the text pattern in a particular file?
In the example below, it displays the total number of lines that contains the
text John in /etc/passwd file.

# grep -c John /etc/passwd
2
You can also get the total number of lines that did not match the specific
pattern by passing option -cv.

# grep -cv John /etc/passwd
39
How to search a text by ignoring the case?
Pass the option -i (ignore case), which will ignore the case while searching.

# grep -i john /etc/passwd
jsmith:x:1082:1082:John Smith:/home/jsmith:/bin/bash
jdoe:x:1083:1083:John Doe:/home/jdoe:/bin/bash

How do I search all subdirectories for a text matching a specific
pattern?

Use option -r (recursive) for this purpose. In the example below, it will search
for the text "John" by ignoring the case inside all the subdirectories under
/home/users.

This will display the output in the format of "filename: line that matching the
pattern". You can also pass the option -l, which will display only the name of
the file that matches the pattern.

# grep -ri john /home/users
/home/users/subdir1/letter.txt:John, Thanks for your
contribution.
/home/users/name_list.txt:John Smith

/home/users/name_list.txt:John Doe
# grep -ril john /root
/home/users/subdir1/letter.txt
/home/users/name_list.txt

How to SSH Session Statistics using SSH Escape Character in Linux

To get some useful statistics about the current ssh session, do the following.

This works only on SSH2 client.
1. Login to remotehost from localhost.
localhost$ ssh -l jsmith remotehost

2. On the remotehost, type ssh escape character ~ followed by s as shown
below. This will display lot of useful statistics about the current SSH
connection.
remotehost$ [Note: The ~s is not visible on the
command line when you type.]
remote host: remotehost
local host: localhost
remote version: SSH-1.99-OpenSSH_3.9p1
local version: SSH-2.0-3.2.9.1 SSH Secure
Shell (non-commercial)
compressed bytes in: 1506
uncompressed bytes in: 1622
compressed bytes out: 4997
uncompressed bytes out: 5118
packets in: 15
packets out: 24
rekeys: 0
Algorithms:
Chosen key exchange algorithm: diffie-hellman-
group1-sha1
Chosen host key algorithm: ssh-dss
Common host key algorithms: ssh-dss,ssh-rsa
Algorithms client to server:
Cipher: aes128-cbc
MAC: hmac-sha1
Compression: zlib

Algorithms server to client:
Cipher: aes128-cbc
MAC: hmac-sha1
Compression: zlib
localhost$
Additional SSH Info
On a side note, to setup SSH key based authentication, refer openSSH and
SSH2 tutorials.

How to Toggle SSH Session using SSH Escape Character in linux

When you’ve logged on to the remotehost using ssh from the localhost, you
may want to come back to the localhost to perform some activity and go back

to remote host again. In this case, you don’t need to disconnect the ssh
session to the remote host. Instead, follow the steps below.
1. Login to remotehost from localhost:
localhost$ ssh -l jsmith remotehost

2. Now you are connected to the remotehost:
remotehost$

3. To come back to the localhost temporarily, type the escape character ~
and Control-Z.
When you type ~ you will not see that immediately on the screen until you
press <Control-Z> and press enter. So, on the remotehost in a new line enter
the following key strokes for the below to work: ~<Control-Z>
remotehost$ ~^Z
[1]+ Stopped ssh -l jsmith remotehost
localhost$

4. Now you are back to the localhost and the ssh remotehost client session
runs as a typical UNIX background job, which you can check as shown below:
localhost$ jobs
[1]+ Stopped ssh -l jsmith remotehost

5. You can go back to the remote host ssh without entering the password
again by bringing the background ssh remotehost session job to foreground on
the localhost.
localhost$ fg %1
ssh -l jsmith remotehost
remotehost$

How to Debug SSH Client Session in linux

Sometimes it is necessary to view debug messages to troubleshoot any SSH
connection issues.

 pass -v (lowercase v) option to the ssh as shown below to
view the ssh debug messages.


Example without SSH client debug message:

localhost$ ssh -l jsmith remotehost.example.com
warning: Connecting to remotehost.example.com failed:
No address associated to the name

Example with SSH client debug message:
locaclhost$ ssh -v -l jsmith remotehost.example.com
debug:
SshConfig/sshconfig.c:2838/ssh2_parse_config_ext:
Metaconfig parsing stopped at line 3.

debug:
SshConfig/sshconfig.c:637/ssh_config_set_param_verbose:
Setting variable ‘VerboseMode’ to ‘FALSE’.

debug:
SshConfig/sshconfig.c:3130/ssh_config_read_file_ext:
Read 17 params from config file.
debug: Ssh2/ssh2.c:1707/main: User config file not
found, using defaults. (Looked for
‘/home/jsmith/.ssh2/ssh2_config’)
debug: Connecting to remotehost.example.com, port 22...
(SOCKS not used)
warning: Connecting to remotehost.example.com failed:
No address associated to the name

how to Login to Remote Host using SSH in linux

The First time when you login to a remotehost from a localhost, it will display

the host key not found message and you can give “yes” to continue. The host
key of the remote host will be added under .ssh2/hostkeys directory of your
home directory, as shown below.
localhost$ ssh -l jsmith remotehost.example.com
Host key not found from database.
Key fingerprint:
xabie-dezbc-manud-bartd-satsy-limit-nexiu-jambl-title-jarde-
tuxum
You can get a public key’s fingerprint by running
% ssh-keygen -F publickey.pub

on the keyfile.
Are you sure you want to continue connecting (yes/no)? Yes
Host key saved to
/home/jsmith/.ssh2/hostkeys/key_22_remotehost.example.com.pub
host key for remotehost.example.com, accepted by jsmith Mon
May 26 2008 16:06:50 -0700
jsmith@remotehost.example.com password:
remotehost.example.com$
The Second time when you login to the remote host from the localhost, it will
prompt only for the password as the remote host key is already added to the
known hosts list of the ssh client.
localhost$ ssh -l jsmith remotehost.example.com
jsmith@remotehost.example.com password:
remotehost.example.com$
For some reason, if the host key of the remote host is changed after you
logged in for the first time, you may get a warning message as shown below.
This could be because of various reasons such as:
o Sysadmin upgraded/reinstalled the SSH server on the remote host
o Someone is doing malicious activity etc.,
The best possible action to take before saying “yes” to the message below, is
to call your sysadmin and identify why you got the host key changed message
and verify whether it is the correct host key or not.
localhost$ ssh -l jsmith remotehost.example.com
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@
WARNING: HOST IDENTIFICATION HAS CHANGED!
@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-

middle attack)!
It is also possible that the host key has just been changed.
Please contact your system administrator.
Add correct host key to
“/home/jsmith/.ssh2/hostkeys/key_22_remotehost.example.com.pu
b”
to get rid of this message.
Received server key’s fingerprint:
xabie-dezbc-manud-bartd-satsy-limit-nexiu-jambl-title-arde-
tuxum

You can get a public key’s fingerprint by running
% ssh-keygen -F publickey.pub
on the keyfile.

Agent forwarding is disabled to avoid attacks by corrupted
servers.

Are you sure you want to continue connecting (yes/no)? yes
Do you want to change the host key on disk (yes/no)? yes
Agent forwarding re-enabled.
Host key saved to

/home/jsmith/.ssh2/hostkeys/key_22_remotehost.example.com.pub
host key for remotehost.example.com, accepted by jsmith Mon
May 26 2008 16:17:31 -0700
jsmith @remotehost.example.com’s password:
remotehost$

How to Identify SSH Client Version in linux

Sometimes it may be necessary to identify the SSH client that you are
currently running and it’s corresponding version number.

Use ssh –V to
identify the version number. Please note that Linux comes with OpenSSH.

The following example indicates that this particular system is using OpenSSH:

$ ssh -V
OpenSSH_3.9p1, OpenSSL 0.9.7a Feb 19 2003
The following example indicates that this particular system is using SSH2:

$ ssh -V
ssh: SSH Secure Shell 3.2.9.1 (non-commercial version)
on i686-pc-linux-gnu

How to Display Future Date and Time

Following examples shows how to display a future date and time.

$ date
Thu Jan
1 08:30:07 PST 2009
$ date --date='3 seconds'
Thu Jan 1 08:30:12 PST 2009
$ date --date='4 hours'
Thu Jan 1 12:30:17 PST 2009
$ date --date='tomorrow'
Fri Jan 2 08:30:25 PST 2009
$ date --date="1 day"
Fri Jan 2 08:30:31 PST 2009
$ date --date="1 days"
Fri Jan 2 08:30:38 PST 2009
$ date --date="2 days"
Sat Jan 3 08:30:43 PST 2009
$ date --date='1 month'
Sun Feb 1 08:30:48 PST 2009
$ date --date='1 week'
Thu Jan 8 08:30:53 PST 2009
$ date --date="2 months"
Sun Mar 1 08:30:58 PST 2009
$ date --date="2 years"
Sat Jan 1 08:31:03 PST 2011
$ date --date="next day"
Fri Jan 2 08:31:10 PST 2009

$ date --date="-1 days ago"
Fri Jan 2 08:31:15 PST 2009
$ date --date="this Wednesday"
Wed Jan 7 00:00:00 PST 2009
23

How to Display Current Date and Time in a Specific Format in linux

Following are different ways of displaying the current date and time in
various formats:


$ date
Thu Jan

1 08:19:23 PST 2009
$ date --date="now"
Thu Jan 1 08:20:05 PST 2009
$ date --date="today"
Thu Jan 1 08:20:12 PST 2009
$ date --date='1970-01-01 00:00:01 UTC +5 hours' +%s
18001
$ date '+Current Date: %m/%d/%y%nCurrent Time:%H:%M:%S'
Current Date: 01/01/09
Current Time:08:21:41
$ date +"%d-%m-%Y"
01-01-2009
$ date +"%d/%m/%Y"
01/01/2009
$ date +"%A,%B %d %Y"
Thursday,January 01 2009

Following are the different format options you can pass to the date
command:

o %D date (mm/dd/yy)
o %d day of month (01..31)
o %m month (01..12)
o %y last two digits of year (00..99)
o %a locale’s abbreviated weekday name (Sun..Sat)
o %A locale’s full weekday name, variable length
   (Sunday..Saturday)
o %b locale’s abbreviated month name (Jan..Dec)

o %B locale’s full month name, variable length
   (January..December)
o %H hour (00..23)
o %I hour (01..12)
o %Y year (1970...)

How to Set Hardware Date and Time in linux

Before setting the hardware date and time, make sure the OS date and time
is set appropriately as shown in the hack#7.

Set the hardware date and time based on the system date as shown below:

# hwclock –systohc
# hwclock --systohc –utc
Use hwclock without any parameter, to view the current hardware date and
time:

# hwclock
Check the clock file to verify whether the system is set for UTC:

# cat /etc/sysconfig/clock
ZONE="America/Los_Angeles"
UTC=false
ARC=false

How to Set System Date and Time in linux

To change the system date use:

# date {mmddhhmiyyyy.ss}
o
o
o
o
o
o
mm – Month
dd – Date
hh – 24 hour format
mi – Minutes
yyyy – Year
ss – seconds

For example, to set system date to Jan 31st 2008, 10:19 p.m, 53 seconds
# date 013122192009.53

You can also change system date using set argument as shown below.

# date 013122192009.53
# date +%Y%m%d -s "20090131"
# date -s "01/31/2009 22:19:53"
# date -s "31 JAN 2009 22:19:53"
# date set="31 JAN 2009 22:19:53"
To set the time only:
# date +%T -s "22:19:53"

# date +%T%p -s "10:19:53PM"

How to Use “shopt -s cdspell” to automatically correct mistyped directory names on cd in linux

Use shopt -s cdspell to correct the typos in the cd command automatically as
shown below. If you are not good at typing and make lot of mistakes, this will
be very helpful.
# cd /etc/mall
-bash: cd: /etc/mall: No such file or directory
# shopt -s cdspell
# cd /etc/mall
# pwd
/etc/mail
[Note: By mistake, when I typed mall instead of mail,
cd corrected it automatically]

How to use Set System Date and Time in linux

To change the system date use:

# date {mmddhhmiyyyy.ss}
o
o
o
o
o
o
mm – Month
dd – Date
hh – 24 hour format
mi – Minutes
yyyy – Year
ss – seconds
For example, to set system date to Jan 31st 2008, 10:19 p.m, 53 seconds

# date 013122192009.53

You can also change system date using set argument as shown below.

# date 013122192009.53
# date +%Y%m%d -s "20090131"
# date -s "01/31/2009 22:19:53"
# date -s "31 JAN 2009 22:19:53"
# date set="31 JAN 2009 22:19:53"
To set the time only:
# date +%T -s "22:19:53"

# date +%T%p -s "10:19:53PM"

How to Use “shopt -s cdspell” to automatically correct mistyped directory names on cd

Use shopt -s cdspell to correct the typos in the cd command automatically as
shown below. If you are not good at typing and make lot of mistakes, this will
be very helpful.

# cd /etc/mall
-bash: cd: /etc/mall: No such file or directory
# shopt -s cdspell
# cd /etc/mall
# pwd
/etc/mail

How to Use dirs, pushd and popd to manipulate directory stack


You can use directory stack to push directories into it and later pop directory
from the stack. Following three commands are used in this example.

o dirs: Display the directory stack
o pushd: Push directory into the stack
o popd: Pop directory from the stack and cd to it
Dirs will always print the current directory followed by the content of the
stack. Even when the directory stack is empty, dirs command will still print
only the current directory as shown below.
# popd
-bash: popd: directory stack empty
# dirs
~
# pwd
/home/ramesh
How to use pushd and popd? Let us first create some temporary directories
and push them to the directory stack as shown below.
#
#
#
#
mkdir
mkdir
mkdir
mkdir
/tmp/dir1
/tmp/dir2
/tmp/dir3
/tmp/dir4
# cd /tmp/dir1
# pushd .
# cd /tmp/dir2
# pushd .
# cd /tmp/dir3
# pushd .
# cd /tmp/dir4
# pushd .

# dirs
/tmp/dir4 /tmp/dir4 /tmp/dir3 /tmp/dir2 /tmp/dir1
[Note: The first directory (/tmp/dir4) of the dir
command output is always the current directory and not
the content from the stack.]
At this stage, the directory stack contains the following directories:
/tmp/dir4
/tmp/dir3
/tmp/dir2
/tmp/dir1
The last directory that was pushed to the stack will be at the top. When you
perform popd, it will cd to the top directory entry in the stack and remove it
from the stack. As shown above, the last directory that was pushed into the
stack is /tmp/dir4. So, when we do a popd, it will cd to the /tmp/dir4 and
remove it from the directory stack as shown below.
# popd
# pwd
/tmp/dir4
[Note: After the above popd, directory Stack Contains:
/tmp/dir3
/tmp/dir2
/tmp/dir1]
# popd
# pwd
/tmp/dir3
[Note: After the above popd, directory Stack Contains:
/tmp/dir2
/tmp/dir1]
# popd
16

# pwd
/tmp/dir2
[Note: After the above popd, directory Stack Contains:
/tmp/dir1]
# popd
# pwd
/tmp/dir1
[Note: After the above popd, directory Stack is empty!]
# popd
-bash: popd: directory stack empty

How to Use “cd -” to toggle between the last two directories


You can toggle between the last two current directories using cd - as shown
below.
# cd /tmp/very/long/directory/structure/that/is/too/deep
# cd /tmp/subdir1/subdir2/subdir3
# cd -
# pwd
/tmp/very/long/directory/structure/that/is/too/deep
# cd -
# pwd
/tmp/subdir1/subdir2/subdir3
# cd -
# pwd
/tmp/very/long/directory/structure/that/is/too/deep

How to Perform mkdir and cd using a single command

Sometimes when you create a new directory, you may cd to the new directory
immediately to perform some work as shown below.


# mkdir -p /tmp/subdir1/subdir2/subdir3
# cd /tmp/subdir1/subdir2/subdir3
# pwd
/tmp/subdir1/subdir2/subdir3
Wouldn’t it be nice to combine both mkdir and cd in a single command? Add
the following to the .bash_profile and re-login.
$ vi .bash_profile
function mkdircd () { mkdir -p "$@" && eval cd
"\"\$$#\""; }
Now, perform both mkdir and cd at the same time using a single command as
shown below:
13

# mkdircd /tmp/subdir1/subdir2/subdir3
[Note: This creates the directory and cd to it
automatically]
# pwd
/tmp/subdir1/subdir2/subdir3

How to Use cd alias to navigate up the directory effectively

When you are navigating up a very long directory structure, you may be using
cd ..\..\ with multiple ..\’s depending on how many directories you want to go
up as shown below.
# mkdir -p
/tmp/very/long/directory/structure/that/is/too/deep
# cd /tmp/very/long/directory/structure/that/is/too/deep
# pwd
/tmp/very/long/directory/structure/that/is/too/deep
# cd ../../../../
10
Linux 101 Hacks
www.thegeekstuff.com
# pwd
/tmp/very/long/directory/structure
Instead of executing cd ../../../.. to navigate four levels up, use one of the
following three alias methods:
Method 1: Navigate up the directory using “..n”
In the example below, ..4 is used to go up 4 directory level, ..3 to go up 3
directory level, ..2 to go up 2 directory level. Add the following alias to your
~/.bash_profile and re-login.
alias
alias
alias
alias
alias
..="cd .."
..2="cd ../.."
..3="cd ../../.."
..4="cd ../../../.."
..5="cd ../../../../.."
# cd
/tmp/very/long/directory/structure/that/is/too/deep
# ..4
[Note: use ..4 to go up 4 directory level]
# pwd
/tmp/very/long/directory/structure/
Method 2: Navigate up the directory using only dots
In the example below, ..... (five dots) is used to go up 4 directory level.
Typing 5 dots to go up 4 directory structure is really easy to remember, as
when you type the first two dots, you are thinking “going up one directory”,
after that every additional dot, is to go one level up. So, use .... (four dots) to
go up 3 directory level and .. (two dots) to go up 1 directory level. Add the
following alias to your ~/.bash_profile and re-login for the ..... (five dots) to
work properly.
alias ..="cd .."

alias
alias
alias
alias

...="cd ../.."
....="cd ../../.."
.....="cd ../../../.."
......="cd ../../../../.."
# cd /tmp/very/long/directory/structure/that/is/too/deep
# .....
[Note: use ..... (five dots) to go up 4 directory level]
# pwd
/tmp/very/long/directory/structure/
Method 3: Navigate up the directory using cd followed by
consecutive dots
In the example below, cd..... (cd followed by five dots) is used to go up 4
directory level. Making it 5 dots to go up 4 directory structure is really easy to
remember, as when you type the first two dots, you are thinking “going up
one directory”, after that every additional dot, is to go one level up. So, use
cd.... (cd followed by four dots) to go up 3 directory level and cd... (cd
followed by three dots) to go up 2 directory level. Add the following alias to
your ~/.bash_profile and re-login for the above cd..... (five dots) to work
properly.
alias
alias
alias
alias
alias
cd..="cd .."
cd...="cd ../.."
cd....="cd ../../.."
cd.....="cd ../../../.."
cd......="cd ../../../../.."
# cd /tmp/very/long/directory/structure/that/is/too/deep
# cd.....
[Note: use cd..... to go up 4 directory level]
# pwd
/tmp/very/long/directory/structure


Method 5: Navigate up the directory using cd followed by number
In the example below, cd4 (cd followed by number 4) is used to go up 4
directory level.
alias
alias
alias
alias
alias
cd1="cd
cd2="cd
cd3="cd
cd4="cd
cd5="cd
.."
../.."
../../.."
../../../.."
../../../../.."

How to Use CDPATH to define the base directory for cd command

Use CDPATH to define the base directory for
cd command

If you are frequently performing cd to subdirectories of a specific parent
directory, you can set the CDPATH to the parent directory and perform cd to
the subdirectories without giving the parent directory path as explained
below.

[ramesh@dev-db ~]# pwd
/home/ramesh
[ramesh@dev-db ~]# cd mail
-bash: cd: mail: No such file or directory
[Note: This is looking for mail directory under current
directory]
[ramesh@dev-db ~]# export CDPATH=/etc
[ramesh@dev-db ~]# cd mail
/etc/mail
[Note: This is looking for mail under /etc and not
under current directory]
[ramesh@dev-db /etc/mail]# pwd
/etc/mail
To make this change permanent, add export CDPATH=/etc to your
~/.bash_profile

Similar to the PATH variable, you can add more than one directory entry in
the CDPATH variable, separating them with : , as shown below.
export CDPATH=.:~:/etc:/var
This hack can be very helpful under the following situations:
o Oracle DBAs frequently working under $ORACLE_HOME, can set
 the CDPATH variable to the oracle home
o Unix sysadmins frequently working under /etc, can set the
 CDPATH variable to /etc
o Developers frequently working under project directory
 /home/projects, can set the CDPATH variable to /home/projects
o End-users frequently accessing the subdirectories under their
 home directory, can set the CDPATH variable to ~ (home
directory)
 

What is PS2 - Continuation Interactive Prompt in Linux

A very long command can be broken down to multiple lines by giving \ at the end of the line. The default interactive prompt for a multi-lin...