BASH

HOWTO: Close A Program Remotely (and Nicely!) In Terminal
Yes, you could use pkill or killall, but there is a nicer way.

Log in to your PC via SSH, then...

Install the software...

sudo apt-get install wmctrl

List running apps...

paully@mythbuntu-server3:~$ DISPLAY=:0.0 wmctrl -l 0x01600004 -1 mythbuntu-server3 xfce4-panel 0x01800003 -1 mythbuntu-server3 Desktop 0x01600020 -1 mythbuntu-server3 xfce4-panel 0x01e00004 0 mythbuntu-server3 Terminal - paully@mythbuntu-server3: ~

Close the app...

DISPLAY=:0.0 wmctrl -c "Terminal"

http://manpages.ubuntu.com/manpages/quantal/en/man1/wmctrl.1.html

Change / Add / Delete Default Route Gateway
route del default gw 192.168.0.254 eth0 route add default gw 192.168.0.1 eth0

Change / Add / Delete Default Route Gateway
route del default gw 192.168.0.254 eth0 route add default gw 192.168.0.1 eth0

Monitor The Progress Of dd with Pipe Viewer
dd if=/dev/mmcblk0 | pv -s 4G -peta | gzip -1 > /media/sda1/sd_backup.img.gz

This displays a progress indicator like the following.

0:15:01 [1.57MB/s] [====================>              ] 51% ETA 0:14:06

HOWTO: Print Tabs In AWK
awk '{print FNR "\t" $1 "\t" $2}'

HOWTO: Convert DOCX To Text
unzip -qc document.docx word/document.xml |sed 's##\n\n#g;s#<[^>]*>##g'

http://woozle.org/~neale/papers/docx.html

HOWTO: Show The Resolution / DPI Of An Image
identify -verbose photo.jpg |grep 'Resolution' Resolution: 72x72

Show which programs you've been running the most in current session
hash | sort -n

HOWTO: Convert FLAC to MP3
find -name "*.flac" -exec avconv -i {} -acodec libmp3lame -ab 320k {}.mp3 \;

HOWTO: Convert PDF To JPG
convert /tmp/page1.pdf /tmp/page1.jpg

HOWTO: Extract Single Page From PDF
pdftk ~/path/to/big.pdf cat 1 output /tmp/page1.pdf

HOWTO: Delete An Entry From History
Find the number next to the one you want to delete and run...

history -d $num

HOWTO: Prevent Command From Being Recorded In History
If you want to run a command without saving it in history, prepend it with an extra space.

prompt$ echo saved prompt$ echo not saved \ > #    ^ extra space

For this to work you need either ignorespace or ignoreboth in HISTCONTROL. For example, run...

HISTCONTROL=ignorespace

To make this setting persistent, put it in your .bashrc.

How To Go To A Specific Line In LESS
Put +LINE_NUMBERg in front of the file you want to view...

less +50g /path/to/file

Aliases: How To Add/Edit
Open a terminal and edit the .bashrc file:

Linux Terminal:~$ nano ~/.bashrc

Edit or add the following lines:

alias egrep='egrep --color=auto' alias fgrep='fgrep --color=auto' alias get='get_iplayer/get_iplayer' alias grep='grep --color=auto' alias hg='history |grep' alias install='sudo apt-get install' alias l='ls -CF' alias la='ls -A' alias ll='ls -lah' alias ls='ls --color=auto' alias myip='curl ifconfig.me' alias ping='ping -c3 -n -i 0.2 -W1' alias pingg='ping www.google.co.uk' alias pingp='ping www.paully.co.uk' alias pingm='ping 10.0.0.1' alias pings='ping 192.168.0.1' alias rav='rsync -a -v' alias remove='sudo apt-get autoremove' alias rm='rm -iv' alias search='sudo apt-cache search' alias ss='gksudo software-properties-gtk' alias sshg='ssh username@server1.indie-it.com' alias update='sudo apt-get update' alias upgrade='sudo apt-get upgrade' alias uu='sudo apt-get update && sudo apt-get upgrade' alias uuf='sudo apt-get update && sudo apt-get dist-upgrade'

Reload the file:

Linux Terminal:~$ source ~/.bashrc

To confirm the entries:

Linux Terminal:~$ alias

Checking NTP
ntpstat

or

ntpq -pn

http://www.cyberciti.biz/faq/linux-unix-bsd-is-ntp-client-working/

Display True Memory Usage
Most people use the free command to show RAM usage, but read it wrong. In the example below, it looks like the computer only has 67 MB available. However, Linux keeps data stored in RAM when reading disks and some more for programs just in case they need it, effectively being greedy for better performance.

What the Linux system is actually using or needs to use is shown on the 3rd line!

free -m total     used     free   shared     buffers     cached Mem:     4049      3982       67        0          16       3530 -/+ buffers/cache:  435     3614 Swap:    6142        53     6088

So, a slightly tweaked command would be...

free -m | awk 'NR==3 {print $4 " MB free."}' 3614 MB free.

(The above command for awk translates to "print 4th column of third line" :-)

Thanks to - http://thoughtsbyclayg.blogspot.co.uk/2008/09/display-free-memory-on-linux-ubuntu.html

Securely forward TCP connections on local port 1234 to remote2 port 4321
ssh -L 1234: http://remote2.example.com :4321 username@remote.example.com

Play MP3 Files Over SSH Connection
That will play all mp3 files in the folder /home/user/music/artist on the server, and the sound will be on the client’s speakers.

ssh user@server "cat /home/user/music/artist/*.mp3" | mpg123 -

Play MP3 Files On Server Over SSH Connection
ssh user@server screen mpg123 -C /home/user/music/artist/*.mp3 CTRL+A D (to detach from running screen session)

HOWTO Console Screen Blanking - Disable
setterm -blank 0

To make this change permanent, create a file called 'setterm.start' in the /etc/local.d/ folder.

cat >/etc/local.d/setterm.start setterm -blank 0 CTRL+d chmod +x /etc/local.d/setterm.start

Download An Entire Whole Web Site
wget --quiet --recursive --no-clobber --page-requisites --html-extension --convert-links --domains domain.co.uk --no-parent http://www.domain.co.uk/

Download Multiple Files / URLs Using Wget -i
First, store all the download files or URLs in a text file as:

cat > download-file-list.txt URL1 URL2 URL3 URL4

Next, give the download-file-list.txt as argument to wget using -i option as shown below.

wget -i download-file-list.txt

USB Scanner / Scanning On The Command Line
Example used is a Canon CanoScan N670U/N676U/LiDE20 flatbed scanner...

lsusb lsusb -d 04a9:220d -v sane-find-scanner scanimage -L scanimage --help -d plustek:libusb:006:004 scanimage -d plustek:libusb:006:004 --resolution 75 --format=tiff >/tmp/output.tiff

Thanks - http://theopoon.rinnovative.com/2012/08/22/canon-canoscan-n670u-on-ubuntu-12-04-server/

Array Looping
ARRAY=( one two three four ) for i in "${ARRAY[@]}" do    echo Showing $i... echo done

Fix SSH: stdin: is not a tty
Put this line at the top of your ~/.bashrc

if [ $(expr index "$-" i) -eq 0 ]; then return fi

Add A Zero To The Beginning Of A Filename
$ renamexm -t -v -s/^/0/r [0-9] *.mp3 rename 1 Subdivisions.mp3  => 01 Subdivisions.mp3  : tested rename 2 The Analog Kid.mp3 => 02 The Analog Kid.mp3 : tested rename 3 Chemistry.mp3     => 03 Chemistry.mp3     : tested rename 4 Digital Man.mp3   => 04 Digital Man.mp3   : tested rename 5 The Weapon.mp3    => 05 The Weapon.mp3    : tested rename 6 New World Man.mp3 => 06 New World Man.mp3 : tested rename 7 Losing It.mp3     => 07 Losing It.mp3     : tested rename 8 Countdown.mp3     => 08 Countdown.mp3     : tested

How To Burn A Directory On To A DVD
sudo apt-get install dvd+rw-tools mkisofs cdrecord mkisofs -r -o /tmp/mydvd.iso /path/to/folder growisofs -Z /dev/dvd=/tmp/mydvd.iso

Progress Of DD Command
Begin dd in 1 terminal window. This will wipe an external USB drive...

dd if=/dev/zero bs=1M of=/dev/sdb

In another terminal window, run this...

watch -n5 'sudo kill -USR1 `pgrep ^dd`'

Now switch back to the first window...

4701814784 bytes (4.7 GB) copied, 197.487 s, 23.8 MB/s 4595+0 records in 4595+0 records out 4818206720 bytes (4.8 GB) copied, 202.506 s, 23.8 MB/s 4706+0 records in 4706+0 records out 4934598656 bytes (4.9 GB) copied, 207.578 s, 23.8 MB/s 4818+0 records in 4818+0 records out 5052039168 bytes (5.1 GB) copied, 212.662 s, 23.8 MB/s 4930+0 records in 4930+0 records out 5169479680 bytes (5.2 GB) copied, 217.737 s, 23.7 MB/s 5040+0 records in 5040+0 records out 5284823040 bytes (5.3 GB) copied, 222.771 s, 23.7 MB/s 5151+0 records in 5151+0 records out 5401214976 bytes (5.4 GB) copied, 227.784 s, 23.7 MB/s

Hide File Inside Image
How to hide files within a picture file (especially png and jpeg files) and all you'll need is a program like WinRAR or RAR.

Firstly you'll need to find two things: the first is a picture that you'll use to hide your file in, the second is the actual file you want to hide.

Put both in the same folder, open a command prompt and navigate there.

Once there you'll need to put your file that you want to hide inside a zip file (rar or zip will work just fine, put a password or whatever if you want too). After this type the following into the command prompt...

Windows

copy /b display.png + secret_message.rar fake.png

Linux

cat display.png secret_message.rar > fake.png

...where display.png is the picture in which you want to hide the file, secret_message.rar is the file you want to hide and fake.png is the file name that you want the result to be created as.

After this is done open the newly created image file in your paint package and verify that it opens correctly. To see the hidden file all you need to do is open it in your favorite compression program and your done! One hidden file that can be uploaded to image sites and so forth.

You can also put a password on the rar hidden rar file in order to add extra protection.

Find And Copy Files With Directory Structure
find /path/to/search/ -type f -name '*.mov' -print -exec cp --parents "{}" /path/to/copy/to/ \;

Change User Password One Liner Batch Mode
echo "username:password" | chpasswd

Beautify A Shell Script
http://www.arachnoid.com/linux/beautify_bash/

Convert Tabs To Spaces In a File
expand file.txt

Blink Lights on Network Card
ethtool -p eth0 10

This will blink the lights for 10 seconds. However if you get this message...

Cannot identify NIC: Operation not supported

...you are out of luck because it only works with some chipsets and drivers:-

"-p initiates adapter-specific action intended to enable an operator to easily identify the adapter by sight. Typically this involves blinking one or more LEDs on the specific ethernet port."

ewrk3 s2io sky2 tg3 e100 pcnet32 bnx2 skge e1000 sk98lin ixgb

http://magazine.redhat.com/2007/09/05/tip-from-an-rhce-which-interface-is-eth0/

http://www.linuxjournal.com/content/fun-ethtool

http://linuxtoolkit.blogspot.co.uk/2012/02/using-ethtool-to-manage-ethernet-card.html

Detect IP Address Conflicts
Install the relevant software, for Debian/Ubuntu:

Linux Terminal:~$ sudo apt-get install arp-scan

For CentOS, Fedora or Redhat:

Linux Terminal:~$ sudo yum install arp-scan

Once installed to use:

Linux Terminal:~$ sudo arp-scan -I eth0 -l

This should return something similar to: Linux Terminal:~$ Interface: eth0, datalink type: EN10MB (Ethernet) Starting arp-scan 1.8.1 with 256 hosts (http://www.nta-monitor.com/tools/arp-scan/) 192.168.0.1	1c:c1:de:1c:74:8f	Hewlett Packard 192.168.0.21	00:1b:a9:8a:52:d2	BROTHER INDUSTRIES, LTD. 192.168.0.41	f4:ec:38:a8:d0:de	TP-LINK TECHNOLOGIES CO., LTD. 192.168.0.52	00:1d:fe:df:2c:53	Palm, Inc 192.168.0.86	00:1d:fe:e9:1a:ca	Palm, Inc

Upload File By FTP Command Line
ftp -u ftp://username:password@www.domain.co.uk/remote/dir/file.txt file.txt

Speed Ping
alias ping='ping -c3 -n -i 0.2 -W1' alias pingg='ping www.google.co.uk' alias pingp='ping www.paully.co.uk'

Dictionary Attack On SSH
Oct 16 08:53:30 server2 sshd[23415]: Invalid user amcssa from 88.191.133.21 Oct 16 08:53:32 server2 sshd[23417]: Invalid user wupr from 88.191.133.21 Oct 16 08:53:34 server2 sshd[23419]: Invalid user glbt from 88.191.133.21 Oct 16 08:53:36 server2 sshd[23421]: Invalid user wusgg from 88.191.133.21 Oct 16 08:53:38 server2 sshd[23423]: Invalid user wundergr from 88.191.133.21 Oct 16 08:53:40 server2 sshd[23425]: Invalid user sos from 88.191.133.21 Oct 16 08:53:42 server2 sshd[23427]: Invalid user s0s from 88.191.133.21 Oct 16 08:53:44 server2 sshd[23429]: Invalid user sos1 from 88.191.133.21 Oct 16 08:53:46 server2 sshd[23431]: Invalid user overflow from 88.191.133.21 Oct 16 08:53:48 server2 sshd[23433]: Invalid user mariachi from 88.191.133.21 Oct 16 08:53:50 server2 sshd[23435]: Invalid user fsae from 88.191.133.21 Oct 16 08:53:52 server2 sshd[23437]: Invalid user wuma from 88.191.133.21 Oct 16 08:53:54 server2 sshd[23439]: Invalid user vsa from 88.191.133.21 Oct 16 08:53:56 server2 sshd[23441]: Invalid user pride from 88.191.133.21 Oct 16 08:53:57 server2 sshd[23443]: Invalid user yarn from 88.191.133.21 Oct 16 08:54:00 server2 sshd[23445]: Invalid user mixed from 88.191.133.21 Oct 16 08:54:02 server2 sshd[23447]: Invalid user mix3d from 88.191.133.21 Oct 16 08:54:03 server2 sshd[23449]: Invalid user washucrs from 88.191.133.21 Oct 16 08:54:05 server2 sshd[23451]: Invalid user kungfu from 88.191.133.21 Oct 16 08:54:07 server2 sshd[23453]: Invalid user lnyf from 88.191.133.21

Use IPTables Firewall To Block An IP Address
iptables -I INPUT -s {IP-ADDRESS} -j DROP

Use Conntrack To Block An IP Address
conntrack -L -s {IP-ADDRESS} conntrack -D -s {IP-ADDRESS}

Use Shorewall To Block An IP Address
shorewall drop {IP-ADDRESS}

Use Shorewall To Allow An IP Address
shorewall allow {IP-ADDRESS}

How To Quickly Generate A Large File On The Command Line
To make a 1Mb file...

dd if=/dev/zero of=1mb_file count=1024 bs=1024

http://www.skorks.com/2010/03/how-to-quickly-generate-a-large-file-on-the-command-line-with-linux/

HOWTO Split An MP3 File For Burning Multiple Tracks To A CD
Use the mp3splt command line tool. The example below makes 6 minute long tracks and automatically adjusts the spilt to occur during moments of silence.

mp3splt podcast.mp3 -g %[@N=0,@o] -o "@n_@f" -t 6.0 -a

http://wiki.librivox.org/index.php/How_To_Split_With_Mp3Splt

Now you can use the method below to convert all the MP3 files to WAV files, and then burn them to a CD.

HOWTO Burn MP3 On To An Audio CD
First, you need to convert your MP3 (myfile.mp3) into a WAV (myfile.wav) file. You use the mpg123 command line tool for this. Make sure it is stereo. mpg123 --stereo --wav myfile.wav myfile.mp3

Or, for multiple files. for file in *.mp3; do mpg123 --stereo --wav "${file}".wav "$file"; done

Find your CD Burner cdrecord -scanbus

Then burn your WAV file on to the CD cdrecord dev=2,0,0 speed=4 -pad -audio myfile.wav

Or, burn all your WAV files on to the CD (just make sure they are numbered sequentially) cdrecord dev=2,0,0 speed=4 -pad -audio *.wav

Troubleshooting: If you receive this error, then use the --stereo switch shown above to convert it from mono. Inappropriate audio coding in 'myfile.wav'.

http://www.cyberciti.biz/tips/how-do-i-burn-mp3-onto-an-audio-cd-from-command-prompt.html

Number Of Days Between Two Dates
echo $"(( $(date --date="031122" +%s) - $(date --date="021020" +%s) ))/(60*60*24)"|bc

Show Size Of Directories
Sorted by time...

du --time -s */ |sort -k 2

Sorted by size..

du --time -s */ |sort -k 1 -h

Calculator
echo $[1+1]

or

scale=2; echo "11.45 + 7.95" | bc

Foreach Loop In Script
for i in 1 2 3 do  /usr/bin/nmap -sP -n "192.168.0.$i" |grep 'IP' done
 * 1) !/bin/bash

Extract A Single File From A Tarball Archive
cd /tmp/ tar -xjvpf /path/to/stage4.tar.bz2 etc/conf.d/modules

Create Cool SHA Code From Date (Forum Spam Bot Prevention)
date -u +%jXfce|sha256sum|sed 's/\W//g'

Remove Blank Lines From Text File
cat myfile.txt |sed '/^$/d'

Delete Characters On Just The First Line
This deletes all the quotation (") characters on just the first line of a CSV file...

sed '1s/"//g' /tmp/oldfile.csv > /tmp/newfile.csv

http://sed.sourceforge.net/sed1line.txt

Format A USB Flash Drive With Linux Filesystem
Identify your drive:

cat /proc/partitions dmesg |tail

Repartition drive:

fdisk /dev/sdb d n p 1 [enter] [enter] w

Format drive:

mkfs.ext3 -L "BACKUP-32GB-B" -v /dev/sdb1

Output examples:

thinkpad ~ # dmesg |tail sd 10:0:0:0: [sdb] Assuming drive cache: write through sd 10:0:0:0: [sdb] No Caching mode page present sd 10:0:0:0: [sdb] Assuming drive cache: write through sdb: sdb1 sd 10:0:0:0: [sdb] No Caching mode page present sd 10:0:0:0: [sdb] Assuming drive cache: write through sd 10:0:0:0: [sdb] Attached SCSI removable disk thinkpad ~ # cat /proc/partitions major minor #blocks  name 8       0  312571224 sda 8       1    1228800 sda1 8       2   83103744 sda2 8       3  114118656 sda3 8       4  114109695 sda4 8      16   31696896 sdb thinkpad ~ # fdisk /dev/sdb Command (m for help): p Disk /dev/sdb: 32.5 GB, 32457621504 bytes 64 heads, 32 sectors/track, 30954 cylinders, total 63393792 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0xc3072e18 Device Boot     Start         End      Blocks   Id  System Command (m for help): n Partition type: p  primary (0 primary, 0 extended, 4 free) e  extended Select (default p): p Partition number (1-4, default 1): 1 First sector (2048-63393791, default 2048): Using default value 2048 Last sector, +sectors or +size{K,M,G} (2048-63393791, default 63393791): Using default value 63393791 Command (m for help): p Disk /dev/sdb: 32.5 GB, 32457621504 bytes 64 heads, 32 sectors/track, 30954 cylinders, total 63393792 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0xc3072e18 Device Boot     Start         End      Blocks   Id  System /dev/sdb1           2048    63393791    31695872   83  Linux Command (m for help): w The partition table has been altered! Calling ioctl to re-read partition table. Syncing disks. thinkpad ~ # mkfs.ext3 -L "BACKUP-32GB-B" -v /dev/sdb1 mke2fs 1.42 (29-Nov-2011) fs_types for mke2fs.conf resolution: 'ext3' Filesystem label=BACKUP-32GB-B OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 1982464 inodes, 7923968 blocks 396198 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=4294967296 242 block groups 32768 blocks per group, 32768 fragments per group 8192 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000 Allocating group tables: done Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done thinkpad ~ # umount /media/BACKUP-32GB-B/ thinkpad ~ # fsck.ext3 -v -C0 /dev/sdb1 e2fsck 1.42 (29-Nov-2011) BACKUP-32GB-B: clean, 11/1982464 files, 168470/7923968 blocks

Shell Command Line Calculator
echo 'scale=25;57/43' | bc

http://www.basicallytech.com/blog/index.php?/archives/23-command-line-calculations-using-bc.html

Change History Display Format
export HISTTIMEFORMAT=%Y-%m-%d %H:%M:%S

What Desktop Session Am I Using?
echo $DESKTOP_SESSION

Convert Standard Date And Time To Epoch Time
date +%s

Convert Epoch Time To Standard Date And Time
date --date='@1335309835'

Find And Rename / Add Extension To All Files
find. -type f -exec mv '{}' '{}'.jpg \;

Find Files Owned By A User
find /path/to/search/ -user nobody -print

Find Zero Length Files
find /path/to/search/ -size 0

e.g.

Find any zero length files named tmp.* older than 1 day and delete them...

find /tmp/ -type f -size 0 -name 'tmp.*' -mtime +1 -exec rm -rf {} \;

Find And Delete
Find any files older than 7 days, then delete them but show what you are deleting.

find /path/to/directory -type f -mtime +7 -exec rm {} \; -print

Find And Copy
Find any text files, then copy them to a different directory.

find. -name "*.txt" -exec cp {} /path/to/directory \;

Find And Move
Find any text files, then move them to a different directory.

find. -name "*.txt" -exec mv {} /path/to/directory \;

Find Files Newer Than Another File
touch --date "2011-12-31" /tmp/foo touch /tmp/bar find /tmp/ -type f -newer /tmp/foo

Find Text Files Created In The Last 30 Days
This will find *.txt files...

find ~/Documents/ -type f -mtime -30 -name '*.txt' -print

This will find true ASCII files...

find ~/Documents/ -type f -mtime -30 -print -exec file {} + | grep ASCII

Find The Most Recently Changed Files
find. -type f -printf '%TY-%Tm-%Td %TT %p\n' | sort

Find Multiple File Types
find /path/to/search/ -type f \( -name "*.epub" -or -name "*.mobi" \) -printf '%f\n' |sort |uniq

Find Empty Directories / Folders
find. -empty -type d

Find All Email Forward Files
find /home/ -maxdepth 2 -type f -name '.forward'

Schedule With AT Command
http://www.brunolinux.com/02-The_Terminal/The_at_Command.html

at 8pm

at midnight tonight

at 3pm tomorrow

To view scheduled 'at' jobs:

atq

To delete scheduled 'at' jobs:

atrm 2

Where '2' is the job number found by using the 'atq' command