LINUX

Linux commandline is absolutely amazing loved by almost all system administrators. Here you will discover powerful and impossible things you can do, just using a command line terminal.

1. Searching files

Searching for certain files are inevitable for admins.  

find /home -type f -name "*.conf"

and to use locate, which is the easiest

sudo updatedb
locate mickey.cpp

Search file contents using grep

$ cat /etc/ hosts | grep -i  "localhost"

To list files that are greater than 500mb, run this. V

find /home/ -type f -size +500M -exec ls -lh {} \;

2. Zip and Unzip

You can easily compress and uncompress .tar.gz and .bz2. Please note that .bz2 takes long time as it is high compression using “j” flag

tar cvfj example.tar.bz2 /home/example (create .bz2 using j flag)
 tar cvzf example.tar.gz  /home/images (create .tar.gz using z flag)
 tar -xzf example.tar.gz -C /home/justin (extract .tar.gz using x and z flag)
 tar -xjf example.bz2 -C /home/melissa (extract .bz2 using x and j flag)

3. Cleaning up files

You can clean up file contents using sed, tr and awk commands in a command line (faster than writing a script).

This tr command will clean up all alpha, numeric and special chars from input file

tr -c "A-Za-z0-9@-._ \n" " " < input.txt > output.txt

This will translate uppercase to lowercase

tr '[:upper:]' '[:lower:]' < rawfiltered.txt > data.txt

Sed command to substitute a word or string in a file.

sed 's/unix/linux/g' myfile.txt

and this will remove blank lines in a file.

sed '/^$/d' input.txt > output.txt

Also you can use sort to sort contents in a file, which also can be merged with sed

sort data.txt > output.txt

You can find more sed examples here: http://www.folkstalk.com/2012/01/sed-command-in-unix-examples.html

4. Security

Check connections from same IPs on Port 80 (http) for multiple ddos attacks

netstat -plan|grep :80|awk {'print $5'}|cut -d: -f 1|sort|uniq -c|sort -nk 1
 netstat -apn | grep ":80"

and also check for http processes

netstat -n | grep :80 |wc -l

5. Hard drive errors

You can look for problems with hard drive using smartctl

$ smartctl -q errorsonly -H -l selftest -l error /dev/sda
 Warning: ATA error count 17 inconsistent with error log pointer 1
 ATA Error Count: 17 (device log contains only the most recent five errors)
 Error 17 occurred at disk power-on lifetime: 47355 hours (1973 days + 3 hours)
 Error 16 occurred at disk power-on lifetime: 47355 hours (1973 days + 3 hours)
 Error 15 occurred at disk power-on lifetime: 47355 hours (1973 days + 3 hours)
 Error 14 occurred at disk power-on lifetime: 47355 hours (1973 days + 3 hours)
 Error 13 occurred at disk power-on lifetime: 47355 hours (1973 days + 3 hours)

You can also use iostat to monitor I/O performance for local hard drive and remote disks

# iostat
 Linux 2.6.18-308.1.1.el5 (server1.example.com)     02/24/2016
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
 2.72    0.05    1.11    0.22    0.00   95.89

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sda              10.71       390.59       208.68  301731339  161206205
sda1              0.00         0.27         0.00     210670          4
sda2              4.81       112.90        94.88   87211079   73297681
sda3              2.23        67.60        37.70   52217183   29124792
sda4              0.00         0.00         0.00        134          0
sda5              1.02        29.13        42.69   22504042   32978328
sda6              0.04         5.43         0.00    4195402       1200
sda7              2.45       175.25        29.83  135379849   23041280
sda8              0.16         0.02         3.58      12282    2762920

6. Cpanel backup and restore

You can pack and restore cpanel account files in a fly using these handy commands in command terminal

/scripts/pkgacct username
 /scripts/restoracct username

7. Remote File Transfer

You can transfer files remotely using SCP from one host to another

scp /home/file.tar.gz user@host.example.com:21Feb16/

8. Server Loads

Check users load, http processes, CPU usage and server load using these commands.

$ uptime
 19:07  up 29 mins, 2 users, load averages: 0.48 0.59 0.55
$ w
18:27  up  2:08, 2 users, load averages: 1.25 1.53 1.44
 USER     TTY      FROM              LOGIN@  IDLE WHAT
 prabhubalakrishnan console  -                16:20    2:06 -
 prabhubalakrishnan s000     -                17:21       - w
$ iostat
disk0       cpu     load average
 KB/t tps  MB/s  us sy id   1m   5m   15m
 51.45  12  0.60   4  1 94  1.06 1.42 1.40

Check for running processes to see if any process takes too much memory or cpu load.

$ ps aux | more

9. Free Disk Space

First, check disk space using this command

# df -h
 Filesystem            Size  Used Avail Use% Mounted on
 /dev/sda5             9.7G  533M  8.7G   6% /
 /dev/sda8             996M   34M  911M   4% /tmp
 /dev/sda7             194G  4.2G  180G   3% /home
 /dev/sda3             9.7G  2.1G  7.2G  23% /var
 /dev/sda2             9.7G  6.0G  3.2G  66% /usr
 /dev/sda1              99M   17M   77M  18% /boot
 tmpfs                1014M     0 1014M   0% /dev/shm

then search for files greater than 100 mb using this command

find /var/www/ -size +100000000c | more

10. DNS Settings

You can check dns settings for your server for correct IP address (A and AAA ipv6).

dig example.com
 host -t  A example.com (ipv4)
 host -t   AAAA example.com (ipv6)

11. Tracing Network Route

Traceroute is an extremely useful tool to fix network path problems.  It shows the transmission path across networks for different continents.

$ traceroute example.com
traceroute to example.com (93.184.216.34), 64 hops max, 52 byte packets
 1  192.168.0.1 (192.168.0.1)  1.267 ms  1.601 ms  1.009 ms
 2  10.23.240.1 (10.23.240.1)  7.628 ms  15.619 ms  11.351 ms
 3  113.193.5.169 (113.193.5.169)  9.953 ms  19.261 ms  8.973 ms
 4  59.163.111.81.static-chennai.vsnl.net.in (59.163.111.81)  9.017 ms  13.421 ms  9.451 ms
 5  172.25.81.134 (172.25.81.134)  56.100 ms  59.540 ms
 172.31.29.245 (172.31.29.245)  52.476 ms
 6  ix-0-100.tcore1.mlv-mumbai.as6453.net (180.87.38.5)  69.474 ms  67.030 ms  47.591 ms
 7  if-9-5.tcore1.wyn-marseille.as6453.net (80.231.217.17)  157.941 ms  153.891 ms  159.319 ms
 8  if-8-1600.tcore1.pye-paris.as6453.net (80.231.217.6)  164.418 ms  170.447 ms  159.127 ms
 9  if-2-2.tcore1.pvu-paris.as6453.net (80.231.154.17)  183.550 ms  158.083 ms  166.330 ms
 10  ae-7.r04.parsfr01.fr.bb.gin.ntt.net (129.250.8.1)  165.362 ms  171.770 ms  167.023 ms
 11  ae-8.r23.londen03.uk.bb.gin.ntt.net (129.250.6.206)  162.218 ms  164.905 ms  165.397 ms
 12  ae-0.r22.londen03.uk.bb.gin.ntt.net (129.250.4.85)  168.716 ms  176.386 ms  173.211 ms
 13  ae-5.r24.nycmny01.us.bb.gin.ntt.net (129.250.2.18)  262.749 ms  305.414 ms  307.083 ms
 14  ae-1.r07.nycmny01.us.bb.gin.ntt.net (129.250.3.181)  307.158 ms  306.288 ms  307.215 ms
 15  ae-0.edgecast.nycmny01.us.bb.gin.ntt.net (129.250.196.174)  308.608 ms  302.816 ms  307.224 ms
 16  93.184.216.34 (93.184.216.34)  306.972 ms  243.375 ms  261.559 ms

12. Bootable drive

You can create a usb bootable drive from iso with single terminal command

$ dd if=/home/user/Downloads/ubuntu.iso of=/dev/sdb1 bs=512M; sync

This creates /dev/sdb1 (USB drive) into a debian bootable.

13. MySQL database

You can interact and manage mysql database directly from the the commandline, cant be easier than this. You dont need phpmyadmin.

mysql -u root -p
create database mydatabase;
create user 'myuser'@'localhost' identified by 'password';
grant all previleges on * . * to 'newuser'@'localhost';
Flush previleges

This will be helpful if you install any CMS and want to create a database in a hurry without any additional software.

14. Github

To download local copy the git project just copy the git url and clone it.

$ git clone https://github.com/example/project.git

You can also upload git files to your project easily with few commands in your command line. No need to download any client. Just clone the directory, edit the files or add and commit to master.

$ git clone https://github.com/example/example.git
$ cd example
$ git add .
$ git commit -m "Final commit"
$ git push origin master

You can find more information https://help.github.com/articles/adding-a-file-to-a-repository-from-the-command-line/

Thats it!

15. Mass Deletion

Removing all files and sub directories  is very easy with R (recursive)  and f (force) flag with the rm command

rm -Rf /home/temp *.tar.gz

Please use this command carefully as it will delete all files and subfolders recursively without any warning. You can undelete and recover all files in the partition using the extundelete utility for ext3/ext4 file systems

$ extundelete /dev/sda4 --restore-all

This will restore all files in partition.

16. Install Development tools

Before you start to compile any new software or packages, be sure to prepare your server with all the latest GNU c/c++ compiler and development libraries. An useful one liner, atleast works well in amazon linux.

yum groupinstall "Development Tools"

17. Command History

Very often you want to take a look at the command history. Just this one simple command will show you the terminal command history

$ history

18. Dropbox

You can install dropbox from the linux command line and start the daemon

cd ~ && wget -O - "https://www.dropbox.com/download?plat=lnx.x86_64" | tar xzf -
 ~/.dropbox-dist/dropboxd

19. Screenshot server

You can take screenshots of a webpage using a headless Xvfb server running. Although you cant see, the script will capture the screenshot and will create a PNG locally

./screenshot.sh urls.txt

Screenshots using Firefox and Xvfb in Amazon EC2

20. Image Conversion

You can resize, convert images to various formats using imagemagick’s convert utility. Other features include blur, threshold, morphology and tonnes of things to do with this tool.

convert rose.jpg -resize 50% rose.png
convert dragon.gif    -resize 64x64  resize_dragon.gif

You can also convert image to pdf

convert -density 300 -trim example.pdf -quality 100 pdf.jpg

Convert bunch of images to PDF

 convert *.JPG  output.pdf

Refer to imagemagick for more examples http://www.imagemagick.org/script/index.php

21. Cron Jobs

You can schedule run certain scripts daily or weekly or on certain days using CRON. If you have high traffic server, you can schedule backups automatically when there during low traffic days such as sunday.

Edit the cron file and place the command

$crontab -e

The format is

a b c d e /home/backup.sh
  • a: Minute (0-59)
  • b: Hours (0-23)
  • c: Day (0-31)
  • d: Month (0-12)
  • e: Day of the week(0-7 starts Sunday as 0)
  • * denotes every day

This script will run daily only at 12.00 AM start of day

 0 24 * * * /scripts/shell.py 

This script runs every sunday early morning 5 PM

 0 5 * * 0 /scripts/backups.php 

22. Convert Doc to PDF

You can convert document files to pdf using this wv utility

sudo apt-get install wv tetex-extra ghostscript  
wvPDF test.doc test.pdf

or using cups pdf utility

sudo apt-get install cups-pdf
 oowriter -pt pdf your_word_file.doc

23. Youtube videos

You can download youtube videos in a commandline using youtube-dl utility

yum install youtube-dl
youtube-dl <url>

You can download just audio mp3 without the need for ffmpeg

youtube-dl --extract-audio --audio-format mp3 <video URL>

If you have ffmpeg installed, you can convert that flv (downloaded from youtube) to mp3

ffmpeg -i example.flv -acodec libmp3lame mytune.mp3

24. USB drive

Just plug your memory stick to your usb and copy files. This is what you have to do. First you have to mount the disk. To find out the device name (we assume it is /dev/sdb1)

fdisk -l
 mkdir /media/usb
 mount /dev/sdb1 /media/usb
 cp /home/*.tar.gz /media/usb

Formatting the usb drive is also easy

sudo mkfs.msdos /dev/sdb1

Thats it.

25. Hard drive Partitions

You can create partitions in your storage drive using the fdisk command. To view existing partitions, use this command

fdisk -l /dev/sda

To start partitioning the disk, use fdisk and will prompt for a command. n to add new partition, w to write. After partition is created you can format to ext4 file system.

fdisk /dev/sda

Command (m for help): m

Command action
   a   toggle a bootable flag
   b   edit bsd disklabel
   c   toggle the dos compatibility flag
   d   delete a partition
   l   list known partition types
   m   print this menu
   n   add a new partition
   o   create a new empty DOS partition table
   p   print the partition table
   q   quit without saving changes
   s   create a new empty Sun disklabel
   t   change a partition's system id
   u   change display/entry units
   v   verify the partition table
   w   write table to disk and exit
   x   extra functionality (experts only)

You can refer to http://tldp.org/HOWTO/Partition/fdisk_partitioning.html

26. Simple Firewall

You can setup simple IP tables firewall in command line. We open web traffic on port 80 (http), 443 (https), SSH (port 22) and close all other ports

iptables -F (to flush existing rules)
iptables -A INPUT -p tcp -m tcp --dport 25 -j ACCEPT 
iptables -A INPUT -p tcp -m tcp --dport 465 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT

and see the rules

$ iptables -L

You can save rules to

Keep in mind that when you restart the server, these rules are gone. You can save Ip tables rule to /etc/sysconfig/iptables

# service iptables stop
 # service iptables start
 # service iptables restart

Warning dont lock yourself out!