Beginner's Introduction to Shell Script: PART 1
Beginner's Introduction to Shell Script: PART 2
Beginner's Introduction to Shell Script: PART 3
3.1. System and Administrative Commands
Mastering the commands on your Linux machine is an indispensable prelude to writing effective shell scripts.
1.Users and Groups
Show all logged on users. This is the approximate equivalent of who -q.
sankar@new-host ~]$ users
root sankar sankar xavier
[sankar@new-host ~]$ who
root pts/1 2012-10-08 09:54 (:1.0)
xavier pts/2 2012-10-08 09:54 (:2.0)
sankar :0 2012-10-08 09:55
sankar pts/5 2012-10-08 11:28 (:0)
[sankar@new-host ~]$
4. set
The set command changes the value of internal script variables/options.
[sankar@new-host shell script]$ set
BASH=/bin/bash
BASH_ARGC=()
BASH_ARGV=()
BASH_LINENO=()
BASH_SOURCE=()
BASH_VERSINFO=([0]="3" [1]="2" [2]="25" [3]="1" [4]="release" [5]="i686-redhat-linux-gnu")
BASH_VERSION='3.2.25(1)-release'
CATALINA_HOME=/usr/share/tomcat
CLASSPATH=.:/usr/java/default/jre/lib:/usr/java/default/lib:/usr/java/default/lib/tools.jar
COLORS=/etc/DIR_COLORS.xterm
COLORTERM=.............
5. unset
The unset command deletes a shell variable, effectively setting it to null.
6. type
type cmd identifies "cmd." Unlike which, type is a Bash builtin. The useful -a option to type identifies keywords andbuiltins, and also locates system commands with identical names.
Gives statistics on the system time elapsed when executing commands, in the following form:
[sankar@new-host ~]$ times
0m0.086s 0m0.042s
0m0.535s 0m0.419s
2. killall
The killall command kills a running process by name, rather than by process ID. If there are multiple instances of a particular command running, then doing akillall on that command will terminate them all.
Note: kill -l lists all the signals (as does the file /usr/include/asm/signal.h). A kill -9 is a sure kill, which will usually terminate a process that stubbornly refuses to die with a plain kill. Sometimes, a kill -15 works. A zombie process, that is, a child process that has terminated, but that the parent process has not (yet) killed,
[sankar@new-host ~]$ cat aaa
1. om sai ram
2. om sai ram
3. om sai ram
4. om sai ram
4. tac, is the inverse of cat, listing a file backwards from its end.
5. rev
reverses each line of a file, and outputs to stdout.
[sankar@new-host ~]$ rev aaa
mar ias mo .1
mar ias mo .2
mar ias mo .3
mar ias mo .4
6. chattr
Change file attributes.
One particularly interesting chattr option is i. A chattr +i filename marks the file as immutable. The file cannot be modified, linked to, or deleted, not even by root.
[root@new-host sankar]# chattr +i aaa
[sankar@new-host ~]$ chmod +x aaa
7. xargs
A filter for feeding arguments to a command, and also a tool for assembling the commands themselves. This means that input piped to xargs may have linefeeds and other whitespace characters stripped out.
3.3. Time / Date Commands
1. IST Time(general)
[sankar@new-host ~]$ date
Wed Oct 10 15:22:31 IST 2012
2. UTC Time:
[sankar@new-host ~]$ date -u
Wed Oct 10 09:52:34 UTC 2012
3. zdump
Time zone dump: echoes the time in a specified time zone.
The hwclock command accesses or adjusts the machine's hardware clock. Some options require root privileges. The /etc/rc.d/rc.sysinit startup file uses hwclock to set the system time from the hardware clock at bootup.
1. sort
File sort utility, often used as a filter in a pipe. This command sorts a text stream or file forwards or backwards, or according to various keys or character positions. Using the -m option, it merges presorted input files.
2. tsort
Topological sort, reading in pairs of whitespace-separated strings and sorting according to input patterns. The results of a tsort will usually differ markedly from those of the standard sort command,
3. uniq
This filter removes duplicate lines from a sorted file.
4. cut
A tool for extracting fields from files. Particularly important are the -d (delimiter) and -f (field specifier) options.
[sankar@new-host ~]$ cat /etc/mtab
/dev/hdb3 / ext3 rw 0 0
proc /proc proc rw 0 0
sysfs /sys sysfs rw 0 0
devpts /dev/pts devpts rw,gid=5,mode=620 0 0
/dev/hdb5 /home ext3 rw 0 0
/dev/hdb2 /var ext3 rw 0 0
/dev/hdb1 /boot ext3 rw 0 0
tmpfs /dev/shm tmpfs rw 0 0
/dev/hdd1 /SOFTWARE fuseblk rw,allow_other,blksize=4096 0 0
none /proc/sys/fs/binfmt_misc binfmt_misc rw 0 0
sunrpc /var/lib/nfs/rpc_pipefs rpc_pipefs rw 0 0
[sankar@new-host ~]$ cut -d ' ' -f1,2 /etc/mtab /dev/hdb3 / proc /proc sysfs /sys devpts /dev/pts /dev/hdb5 /home /dev/hdb2 /var /dev/hdb1 /boot tmpfs /dev/shm /dev/hdd1 /SOFTWARE none /proc/sys/fs/binfmt_misc sunrpc /var/lib/nfs/rpc_pipefs
[sankar@new-host ~]$ uname -a
Linux new-host 2.6.18-194.3.1.el5 #1 SMP Thu May 13 13:09:10 EDT 2010 i686 i686 i386 GNU/Linux
[sankar@new-host ~]$ uname -a | cut -d" " -f1,3,11,12
Linux 2.6.18-194.3.1.el5 2010 i686
5. join
Consider this a special-purpose cousin of paste.
[sankar@new-host shell script]$ cat file1.data
100 Shoes
200 Laces
300 Socks
[sankar@new-host shell script]$ cat file2.data
100 $40.00
200 $1.00
300 $2.00
[sankar@new-host shell script]$ join file1.data file2.data
100 Shoes $40.00
200 Laces $1.00
300 Socks $2.00
6. head
lists the beginning of a file to stdout.
[sankar@new-host shell script]$ head -n 1 /etc/passwd
root:x:0:0:root:/root:/bin/bash
7. tail
lists the (tail) end of a file to stdout.
[sankar@new-host shell script]$ tail -n 1 /etc/passwd
sankar:x:522:522::/home/sankar:/bin/bash
8. grep
A multi-purpose file search tool that uses Regular Expressions.
The -i option causes a case-insensitive search.
The -w option matches only whole words.
The -l option lists only the files in which matches were found, but not the matching lines.
The -r (recursive) option searches files in the current working directory and all subdirectories below it.
The -n option lists the matching lines, together with line numbers.
9. egrep -- extended grep -- is the same as grep -E
Note:
2. To search compressed files, use zgrep, zegrep, or zfgrep.
11. tr
character translation filter.
The -d option deletes a range of characters.
12. wc
wc gives a "word count" on a file or I/O stream:
13. fold
A filter that wraps lines of input to a specified width.
14. fmt
Simple-minded file formatter, used as a filter in a pipe to "wrap" long lines of text output.
15. col
This deceptively named filter removes reverse line feeds from an input stream.The chief use of col is in filtering the output from certain text processing utilities,
16. nl
Line numbering filter: nl filename lists filename to stdout,
[sankar@new-host shell script]$ nl file1.data
1 100 Shoes
2 200 Laces
3 300 Socks
17. pr
Print formatting filter. The pr command combines much of the functionality of nl, paste, fold, column, and expand.
Beginner's Introduction to Shell Script: PART 4
Beginner's Introduction to Shell Script: PART 5
Beginner's Introduction to Shell Script: PART 6
Beginner's Introduction to Shell Script: PART 3
3.1. System and Administrative Commands
Mastering the commands on your Linux machine is an indispensable prelude to writing effective shell scripts.
1.Users and Groups
Show all logged on users. This is the approximate equivalent of who -q.
sankar@new-host ~]$ users
root sankar sankar xavier
[sankar@new-host ~]$ who
2.[sankar@new-host ~]$ type -a echo
echo is a shell builtin
echo is /bin/echo
3. let
The let command carries out arithmetic operations on variables.
[sankar@new-host ~]$
#!/bin/bash
echo
let a=11 # Same as 'a=11'
let a=a+5 # Equivalent to let "a = a + 5"
# (Double quotes and spaces make it more readable.)
echo "11 + 5 = $a" # 16
4. set
The set command changes the value of internal script variables/options.
[sankar@new-host shell script]$ set
BASH=/bin/bash
BASH_ARGC=()
BASH_ARGV=()
BASH_LINENO=()
BASH_SOURCE=()
BASH_VERSINFO=([0]="3" [1]="2" [2]="25" [3]="1" [4]="release" [5]="i686-redhat-linux-gnu")
BASH_VERSION='3.2.25(1)-release'
CATALINA_HOME=/usr/share/tomcat
CLASSPATH=.:/usr/java/default/jre/lib:/usr/java/default/lib:/usr/java/default/lib/tools.jar
COLORS=/etc/DIR_COLORS.xterm
COLORTERM=.............
5. unset
The unset command deletes a shell variable, effectively setting it to null.
bash$ unset PATH
bash$ echo $PATH
type cmd identifies "cmd." Unlike which, type is a Bash builtin. The useful -a option to type identifies keywords andbuiltins, and also locates system commands with identical names.
bash$ type -a '['
[ is a shell builtin
[ is /usr/bin/[
bash$ type type
type is a shell builtin
3.2. Job Control Commands
1. timesGives statistics on the system time elapsed when executing commands, in the following form:
[sankar@new-host ~]$ times
0m0.086s 0m0.042s
0m0.535s 0m0.419s
Note: kill -l lists all the signals (as does the file /usr/include/asm/signal.h). A kill -9 is a sure kill, which will usually terminate a process that stubbornly refuses to die with a plain kill. Sometimes, a kill -15 works. A zombie process, that is, a child process that has terminated, but that the parent process has not (yet) killed,
Table. Job identifiers
Notation | Meaning |
---|---|
%N | Job number [N] |
%S | Invocation (command-line) of job begins with string S |
%?S | Invocation (command-line) of job contains within it string S |
%% | "current" job (last job stopped in foreground or started in background) |
%+ | "current" job (last job stopped in foreground or started in background) |
%- | Last job |
$! | Last background process |
3. cat,
cat, an acronym for concatenate, lists a file to stdout.
cat, an acronym for concatenate, lists a file to stdout.
[sankar@new-host ~]$ cat aaa
1. om sai ram
2. om sai ram
3. om sai ram
4. om sai ram
[sankar@new-host ~]$ tac aaa
4. om sai ram
3. om sai ram
2. om sai ram
1. om sai ram
4. om sai ram
3. om sai ram
2. om sai ram
1. om sai ram
[sankar@new-host ~]$ rev aaa
mar ias mo .1
mar ias mo .2
mar ias mo .3
mar ias mo .4
[root@new-host sankar]# chattr +i aaa
[sankar@new-host ~]$ chmod +x aaa
chmod: changing permissions of `aaa': Operation not permitted
[root@new-host sankar]# chattr -i aaa
[sankar@new-host ~]$ chmod +x aaa
bash$ ls -l
$ls | xargs -n 8 echo lists the files in the current directory in 8 columns.
8. expr
All-purpose expression evaluator:
expr 3 + 5
returns 8
expr 5 % 3
returns 2
expr 1 / 0
returns the error message, expr: division by zero
Illegal arithmetic operations not allowed.
expr 5 \* 3
returns 15
total 0
-rw-rw-r-- 1 bozo bozo 0 Jan 29 23:58 file1
-rw-rw-r-- 1 bozo bozo 0 Jan 29 23:58 file2
bash$ ls -l | xargs
total 0 -rw-rw-r-- 1 bozo bozo 0 Jan 29 23:58 file1 -rw-rw-r-- 1 bozo bozo 0 Jan...
An interesting xargs option is -n NN, which limits to NN the number of arguments passed.$ls | xargs -n 8 echo lists the files in the current directory in 8 columns.
8. expr
Illegal arithmetic operations not allowed.
3.3. Time / Date Commands
1. IST Time(general)
[sankar@new-host ~]$ date
Wed Oct 10 15:22:31 IST 2012
2. UTC Time:
[sankar@new-host ~]$ date -u
Wed Oct 10 09:52:34 UTC 2012
3. zdump
Time zone dump: echoes the time in a specified time zone.
bash$ zdump EST
EST Tue Sep 18 22:09:22 2001 EST
4. hwclock, clock:The hwclock command accesses or adjusts the machine's hardware clock. Some options require root privileges. The /etc/rc.d/rc.sysinit startup file uses hwclock to set the system time from the hardware clock at bootup.
3.4. Text Processing Commands
Commands affecting text and text files$cat list-1 list-2 list-3 | sort | uniq > final.list
# Concatenates the list files,
# sorts them,
# removes duplicate lines,
# and finally writes the result to an output file.
The useful -c option prefixes each line of the input file with its number of occurrences.bash$ cat testfile
This line occurs only once.
This line occurs twice.
This line occurs twice.
This line occurs three times.
This line occurs three times.
This line occurs three times.
bash$ uniq -c testfile
1 This line occurs only once.
2 This line occurs twice.
3 This line occurs three times.
bash$ sort testfile | uniq -c | sort -nr
3 This line occurs three times.
2 This line occurs twice.
1 This line occurs only once.
[sankar@new-host ~]$ cat /etc/mtab
/dev/hdb3 / ext3 rw 0 0
proc /proc proc rw 0 0
sysfs /sys sysfs rw 0 0
devpts /dev/pts devpts rw,gid=5,mode=620 0 0
/dev/hdb5 /home ext3 rw 0 0
/dev/hdb2 /var ext3 rw 0 0
/dev/hdb1 /boot ext3 rw 0 0
tmpfs /dev/shm tmpfs rw 0 0
/dev/hdd1 /SOFTWARE fuseblk rw,allow_other,blksize=4096 0 0
none /proc/sys/fs/binfmt_misc binfmt_misc rw 0 0
sunrpc /var/lib/nfs/rpc_pipefs rpc_pipefs rw 0 0
[sankar@new-host ~]$ cut -d ' ' -f1,2 /etc/mtab /dev/hdb3 / proc /proc sysfs /sys devpts /dev/pts /dev/hdb5 /home /dev/hdb2 /var /dev/hdb1 /boot tmpfs /dev/shm /dev/hdd1 /SOFTWARE none /proc/sys/fs/binfmt_misc sunrpc /var/lib/nfs/rpc_pipefs
[sankar@new-host ~]$ uname -a
Linux new-host 2.6.18-194.3.1.el5 #1 SMP Thu May 13 13:09:10 EDT 2010 i686 i686 i386 GNU/Linux
[sankar@new-host ~]$ uname -a | cut -d" " -f1,3,11,12
Linux 2.6.18-194.3.1.el5 2010 i686
[sankar@new-host shell script]$ cat file1.data
100 Shoes
200 Laces
300 Socks
[sankar@new-host shell script]$ cat file2.data
100 $40.00
200 $1.00
300 $2.00
[sankar@new-host shell script]$ join file1.data file2.data
100 Shoes $40.00
200 Laces $1.00
300 Socks $2.00
[sankar@new-host shell script]$ head -n 1 /etc/passwd
root:x:0:0:root:/root:/bin/bash
[sankar@new-host shell script]$ tail -n 1 /etc/passwd
sankar:x:522:522::/home/sankar:/bin/bash
The -w option matches only whole words.
The -l option lists only the files in which matches were found, but not the matching lines.
The -r (recursive) option searches files in the current working directory and all subdirectories below it.
The -n option lists the matching lines, together with line numbers.
9. egrep -- extended grep -- is the same as grep -E
bash $ egrep 'matches|Matches' file.txt
Line 1 matches.
Line 3 Matches.
Line 4 contains matches, but also Matches
10. fgrep -- fast grep -- is the same as grep -F.Note:
1. On some Linux distros, egrep and fgrep are symbolic links to, or aliases for grep, but invoked with the -E and -F options, respectively. |
echo "abcdef" # abcdef
echo "abcdef" | tr -d b-d # aef
$tr -d 0-9 <filename
# Deletes all digits from the file "filename".
|
wc -w gives only the word count.
wc -l gives only the line count.
wc -c gives only the byte count.
wc -m gives only the character count.
wc -L gives only the length of the longest line.
wc -l gives only the line count.
wc -c gives only the byte count.
wc -m gives only the character count.
wc -L gives only the length of the longest line.
[sankar@new-host shell script]$ nl file1.data
1 100 Shoes
2 200 Laces
3 300 Socks
[sankar@new-host shell script]$ cat -b file1.data
1 100 Shoes
2 200 Laces
3 300 Socks
Beginner's Introduction to Shell Script: PART 5
Beginner's Introduction to Shell Script: PART 6
No comments:
Post a Comment