PacktLib: Linux Shell Scripting Cookbook, Second Edition

Linux Shell Scripting Cookbook


About the Authors

About the Reviewers


Shell Something Out


Printing in the terminal

Playing with variables and environment variables

Function to prepend to environment variables

Math with the shell

Playing with file descriptors and redirection

Arrays and associative arrays

Visiting aliases

Grabbing information about the terminal

Getting and setting dates and delays

Debugging the script

Functions and arguments

Reading the output of a sequence of commands in a variable

Reading n characters without pressing the return key

Running a command until it succeeds

Field separators and iterators

Comparisons and tests

Have a Good Command


Concatenating with cat

Recording and playing back of terminal sessions

Finding files and file listing

Playing with xargs

Translating with tr

Checksum and verification

Cryptographic tools and hashes

Sorting unique and duplicates

Temporary file naming and random numbers

Splitting files and data

Slicing filenames based on extension

Renaming and moving files in bulk

Spell checking and dictionary manipulation

Automating interactive input

Making commands quicker by running parallel processes

File In, File Out


Generating files of any size

The intersection and set difference (A-B) on text files

Finding and deleting duplicate files

Working with file permissions, ownership, and the sticky bit

Making files immutable

Generating blank files in bulk

Finding symbolic links and their targets

Enumerating file type statistics

Using loopback files

Creating ISO files and hybrid ISO

Finding the difference between files, patching

Using head and tail for printing the last or first 10 lines

Listing only directories – alternative methods

Fast command-line navigation using pushd and popd

Counting the number of lines, words, and characters in a file

Printing the directory tree

Texting and Driving


Using regular expressions

Searching and mining a text inside a file with grep

Cutting a file column-wise with cut

Using sed to perform text replacement

Using awk for advanced text processing

Finding the frequency of words used in a given file

Compressing or decompressing JavaScript

Merging multiple files as columns

Printing the nth word or column in a file or line

Printing text between line numbers or patterns

Printing lines in the reverse order

Parsing e-mail addresses and URLs from text

Removing a sentence in a file containing a word

Replacing a pattern with text in all the files in a directory

Text slicing and parameter operations

Tangled Web? Not At All!


Downloading from a web page

Downloading a web page as plain text

A primer on cURL

Accessing Gmail e-mails from the command line

Parsing data from a website

Image crawler and downloader

Web photo album generator

Twitter command-line client

Creating a "define" utility by using the Web backend

Finding broken links in a website

Tracking changes to a website

Posting to a web page and reading the response

The Backup Plan


Archiving with tar

Archiving with cpio

Compressing data with gzip

Archiving and compressing with zip

Faster archiving with pbzip2

Creating filesystems with compression

Backup snapshots with rsync

Version control-based backup with Git

Creating entire disk images using fsarchiver

The Old-boy Network


Setting up the network

Let us ping!

Listing all the machines alive on a network

Running commands on a remote host with SSH

Transferring files through the network

Connecting to a wireless network

Password-less auto-login with SSH

Port forwarding using SSH

Mounting a remote drive at a local mount point

Network traffic and port analysis

Creating arbitrary sockets

Sharing an Internet connection

Basic firewall using iptables

Put on the Monitor's Cap


Monitoring disk usage

Calculating the execution time for a command

Collecting information about logged in users, boot logs, and boot failures

Listing the top 10 CPU consuming processes in an hour

Monitoring command outputs with watch

Logging access to files and directories

Logfile management with logrotate

Logging with syslog

Monitoring user logins to find intruders

Remote disk usage health monitor

Finding out active user hours on a system

Measuring and optimizing power usage

Monitoring disk activity

Checking disks and filesystems for errors

Administration Calls


Gathering information about processes

Killing processes and send or respond to signals

Sending messages to user terminals

Gathering system information

Using /proc for gathering information

Scheduling with cron

Writing and reading the MySQL database from Bash

User administration script

Bulk image resizing and format conversion

Taking screenshots from the terminal

Managing multiple terminals from one