Linux Command Line Alternatives – Leave The Mouse To Rest!

By | 13/05/2013

My family bought our first personal computer in the Windows dominated era. So, of course, Windows was the first operating system we started using. Not just that, we even used to enjoy it unless we started learning Linux and its various flavours. Why is it so? Well, I found it better than Windows in most of the cases. (Here is an article which discusses some reasons that make Linux a better operating system for users). But one thing remained insatiable was what makes typing the commands on Linux command line a better experience than clicking impressive GUIs?

 

Linux Command Line vs GUI

As the saying goes, “we learn it best when we do it ourselves”, therefore after switching to Linux I personally felt the efficiency and quickness of tasks getting done through command line verses through graphical user interface (CLI vs GUI). And the major reason being, even a mouse click generates an action which will trigger the execution of the same executable as we do through the command directly. Hence, running the same task through GUI involves an extra overhead of calculating the mouse pointer coordinates, raising a click action etc. In case, there are input options required, it adds on to the overhead. All this handling of the overhead takes some time at the cost of impressive visuals and to avoid typing.

Well, to talk about deep driven merits of using command line as compared to GUI, here is a synopsis of abstract points:

Agile and Time-saving

Since through command line we are just triggering the executable which makes it faster than any GUI operation which involves parsing actions, inputs and displaying outputs. As a simple comparison exercise, install VLC player using its installer, which is GUI download/installation, and through the command line by running the following command.

$sudo apt-get update

$sudo apt-get install vlc

Feel the difference in the amount of time one needs for the installation in both the cases.

Mouse Disability

A Linux command line user will rarely need a mouse device. From my own experience, just using keyboard is much convenient and as we develop the skill, its way more faster than using mouse. Believe it or not, but just using keyboard and typing every damn command sharpens our memory too.

Better Understanding

Running commands offer a better understanding of how system works than any GUI alternative. Moreover, as we use commands, we implicitly memorize many and we give ourselves an opportunity to learn more.

Scripts

Many of the redundant group tasks can be easily scripted and performed using those scripts. For example, if we have a huge set of files that needs to be renamed and then moved to another destination. With the GUI, it might be a tedious one for each one of the file, but with scripts its just about one logic in the script and running the script.

Typing

Do you think typing is a hassle with command line, especially with the long directory paths? There are some interesting conducive ways to avoid that. We shall learn more in the later sections.

Powerful

Commands are any way more powerful in terms of options from any GUI alternative. To conclude, the efficiency and several micro-seconds of time saved in each command, really makes tremendous and precious value addition in the life of Linux users.

Remember for every small task we want out of the operating system, there exist a command or a key combination. Here in further sections we shall learn about certain Linux command line utilities which are not popular but are still a good alternative to GUI for some common tasks.

Assumption All the commands discussed have been tested with bash shell on Ubuntu 12.04.

Shutdown and reboot the system

When we click on the “shutdown..” action menu or button, it actually calls a command internally.

Linux gives us a simple command with the simplest name to remember

$shutdown [TIME]

Here is its man page. The user needs root privileges to run this command.

Now we will discuss what all it has to offer.

1. We can even schedule a shutdown using one of its argument specifying time. The time can be specified in a phrase like ‘now’ or in minutes, minutes or hh:mm where ‘hh’ specifies the hours and ‘mm’ specifies the minutes in the time.

Therefore after/at specified time, the shutdown is initiated.

As an example, try

$shutdown now

2. One can even restart the system through

$shutdown -r 3

It informs and alerts us about the reboot as

Broadcast message from rupali@home-OptiPlex-745

    (/dev/pts/0) at 10:16 ...

The system is going down for reboot in 3 minutes!

Broadcast message from rupali@home-OptiPlex-745

    (/dev/pts/0) at 10:17 ...

The system is going down for reboot in 2 minutes!

Broadcast message from rupali@home-OptiPlex-745

    (/dev/pts/0) at 10:18 ...

The system is going down for reboot in 1 minute!

Broadcast message from rupali@home-OptiPlex-745

    (/dev/pts/0) at 10:18 …

The system is going to reboot now!

There is another way to reboot the system, and that is through the ‘reboot’ command.

Here is how it looks like when we run the command

Broadcast message from rupali@home-OptiPlex-745

    (/dev/pts/0) at 10:18 …

The system is going to reboot now!

 

Web Browsing

Not one, but there are many text-based command line web browsers available for Linux. Such kind of command line web browsers may not be as fancy as our usual browsers. As a user, we all know fancy stuff comes with a compromise on efficiency. However, such simplistic command line browsers are pretty suitable for normal browsing and study.

One of such web browser is Lynx. The first and foremost step is to install it

$sudo apt-get install lynx-cur

After the installation is complete, launch the web browser by

$lynx

And we get the following screen

ll1(Click to Enlarge)

We need to know following basic help information to starting using the ‘lynx’ text based browser

Commands: Use arrow keys to move, '?' for help, 'q' to quit, '<-' to go back.

 Arrow keys: Up and Down to move.  Right to follow a link; Left to go back.

H)elp O)ptions P)rint G)o M)ain screen Q)uit /=search [delete]=history list

To enter a URL, press ‘g’. Type the website URL one wishes to open. Lets type and enter mylinuxbook.com
Check out the following snapshot with our input URL

ll2

(Click to Enlarge)

We get the website opened in our browser which looks like:

ll3

(Click to Enlarge)

Navigate through the website by using up and down arrows. As we move up/down, the selected link gets highlighted. And we click a particular link by pressing ‘enter’.

For me, I select the ‘commands’ link from the menu available

ll4

After selecting ‘commands’ menu item, I press ‘enter’, which leads me to the relevant web-page.

ll5

(Click to Enlarge)

Note that, the top header menu remains the same for all the web pages of this website.

To go back, use left arrow key. Any time, we need to open a different URL, press ‘g’ and enter the URL. Lynx comes with a man page for its usage information.

However, we shall not go much in the details of the usage of web browsers as every text based web browser would have its own different ways to use.

A few known browsers are:

I don’t recommend any specific browser, feel free to explore the available ones and set your preference.

 

Email Client

In this connected world, are we too addicted email clients? In our CLI Linux world, we can’t afford not to have a command line based email clients on Linux. Command line email client tools are powerful in terms of performance, and very easy to configure and use. However, to be candid, for someone who needs an interaction-impressive email client, command line based email client tools are not for them.

First of all, let us go ahead installing ‘mutt’ on our linux system, which can be done by following command

sudo apt-get install mutt

While we run this command, on my ubuntu 12.04 system, it asks

Need to get 2,682 kB of archives.

After this operation, 7,523 kB of additional disk space will be used.

Do you want to continue [Y/n]?

Type ‘y’ and press enter to the above prompt. And then it asks for certain basic configurations with a text based in-terminal screen. Following is a snapshot

ll6

(Click to Enlarge)

Since it is purely text based, mouse won’t work here. To select ‘OK’, press right arrow and then press ‘enter’. Further we get following screen, where we need to select a general type of mail configuration

ll7

(Click to Enlarge)

Since, in this article we aim to configure our ‘www.gmail.com’ account email to this email client, hence we need to select “Internet Site”. Here is a link to know more about postfix configurations.

Similarly select ‘OK’ by right arrow and pressing enter.

Next it asks us the system mail name. The information on the screen also explains

│ Thus, if a mail address on the local host is foo@example.org, the         │  

│ correct value for this option would be example.org.

Therefore, in case I, type ‘gmail.com’. After typing, select ‘OK’ and press enter, which completes the ‘mutt’ installation and basic configuration.

However, we are still one step away from using the mutt email client. What is that one step? It is the client configuration and customization. Creating the directories for caching headers and bodies along with certificates

$ mkdir -p ~/.mutt/cache/headers

$ mkdir ~/.mutt/cache/bodies

$ touch ~/.mutt/certificates

Thereafter, creating a ‘.muttrc’ file in the home directory having the following customised settings

Notes (Before you proceed further)

  • We are connecting it to the Gmail mail, which is an IMAP mail server
  • Replace all ‘rupali.s@gmail.com’ with your email account
  • One can also configure it with our password, but I won’t recommend the password to be mentioned in any clear form in any file on our system. Hence, leaving it to be prompted for whenever required.
# The gmail account details. Please change it to suit you.

set imap_user = "rupali.s@gmail.com"

set smtp_url = "smtp://rupali.s@smtp.gmail.com:587/"

set from = "rupali.s@gmail.com"

set realname = "Rupali"

# Set your favourite editor here

set editor = "vi"

# Certain configurations

set folder = "imaps://imap.gmail.com:993"

set spoolfile = "+INBOX"

set imap_check_subscribed

set hostname = gmail.com

set mail_check = 120

set timeout = 300

set imap_keepalive = 300

set postponed = "+[GMail]/Drafts"

set record = "+[GMail]/Sent Mail"

set header_cache=~/.mutt/cache/headers

set message_cachedir=~/.mutt/cache/bodies

set certificate_file=~/.mutt/certificates

set move = no

set include

set sort = 'threads'

set sort_aux = 'reverse-last-date-received'

set auto_tag = yes

ignore "Authentication-Results:"

ignore "DomainKey-Signature:"

ignore "DKIM-Signature:"

hdr_order Date From To Cc

alternative_order text/plain text/html *

auto_view text/html

bind editor  complete-query

bind editor ^T complete

bind editor  noop

# Gmail-style keyboard shortcuts

macro index,pager y "unset trash\n " "Gmail archive message"

macro index,pager d "set trash=\"imaps://imap.googlemail.com/[GMail]/Bin\"\n " "Gmail delete message"

macro index,pager gi "=INBOX" "Go to inbox"

macro index,pager ga "=[Gmail]/All Mail" "Go to all mail"

macro index,pager gs "=[Gmail]/Starred" "Go to starred messages"

macro index,pager gd "=[Gmail]/Drafts" "Go to drafts"

Now we are all set to use the email client ‘mutt’. Run it by running following command

$mutt

A blank screen turns up, which prompts for the password at its bottom-most list

Password for rupali.s@gmail.com@imap.gmail.com:

Enter your password and it will start loading your mails for you to access. Here is how it showcases your mails.

ll8

Check out the top highlighted line which is a basic help segment always available, intimating basic key options. Here are the commonly used ones

Up/Down Arrow:    Navigate the messages

Enter:            Select the message

q:             To Quit the tool or return to the message list view

d:            Delete a message

u:            To Undelete a mail

s:            To Save a mail  

m:            Initiate composing a mail

r:            To Reply

g:            A group reply

?:            Need a Help

While composing a mail/reply, your favourite editor shall be opened as mentioned in the ‘.muttrc’ by us.

Well, mutt client agent has a lot more options and customisations as we start using it. This article shall not delve into all those usage information details which can be referred here.

However, there are other such command line email clients also available, such as

Pine

Alpine

mailx

 

Imagemagick

Editing images is no longer a professional’s effort in this era of social networking websites, most of us are living in. Of course, GUI has enhanced certain editing features as for example, say cropping. No doubt about that. However, think of cropping like hundreds of images to the same size. I am pretty sure, it wouldn’t be a pleasant experience with GUI applications any more. Besides, still most of the other image editing features are efficiently done through command line, without depending on any GUI application functionalities. Moreover, if the image editing is to be done on a number of images, command line tools is the most convenient rescue.

Linux gives us one such superb image format converter and editor which is imagemagick.

It is installed with the package ‘imagemagick’

$sudo apt-get install imagemagick

Imagemaick is like a suite of command line utilities for image operations. Here is a list of all the utilities which come within, descriptions taken from the man page.

Note: As an example image for all the illustrated example usage, we have taken following image called ‘orig.png’

ll9

display

displays an image or image sequence on any X server.

So, lets ask it to display the image, which can be done by

$display orig.png

And here is what we get, A dialog window with the image displayed.

ll10

convert

convert between image formats as well as resize an image, blur, crop, despeckle, dither, draw on, flip, join, re-sample, and much more. The umbrella of benefits also includes the scenario where a thumbnail picture can be dexterously created in an autoscript of any application by just resizing any picture. Now we know, how might facebook has the thumbnail ready as soon as we upload our profile picture.

convert -resize 30x30 orig.png resized.png

The resulting thumbnail is:

ll11

To check out an example of the image effects it can do, try

convert -monochrome orig.png m.png

Here it edits the image to convert into a black and white monochrome effect, and save it to a separate ourput file m.png. Here is how the output file looks like

ll12

‘convert’ is also capable of converting from one image file format to another. Here is how that works specifying the compression level of the converted format JPEG.

$ convert -quality orig.png converted.jpg

Using ‘convet’ tool, the linux users have the capability to do image effects, resize and even rotate the image. Checkout this interesting set of effects of our image.

$ convert orig.png -rotate 180 -emboss 1 -quality 90  new.jpg

Our output image is, the penguin looks beautiful to me

ll13

More effects and options of ‘convert’ can be referred to from its man page.

identify

describes the format and characteristics of one or more image files.

Trying it out on our original image,

$ identify orig.png

What I get is,

orig.png PNG 198x264 198x264+0+0 8-bit DirectClass 62.5KB 0.000u 0:00.000

If one doesn’t understand, what the output means, verbose output is obtained by

$ identify -verbose orig.png

A detailed output looks like,

Image: orig.png

 Format: PNG (Portable Network Graphics)

 Class: DirectClass

 Geometry: 198x264+0+0

 Resolution: 72x72

 Print size: 2.75x3.66667

 Units: Undefined

 Type: TrueColorMatte

 Endianess: Undefined

 Colorspace: RGB

 Depth: 8-bit

 Channel depth:

   red: 8-bit

   green: 8-bit

   blue: 8-bit

   alpha: 1-bit

 Channel statistics:

   Red:

     min: 0 (0)

     max: 255 (1)

     mean: 141.496 (0.554886)

     standard deviation: 61.8626 (0.242598)

     kurtosis: 0.0347628

     skewness: -0.547966

   Green:

     min: 0 (0)

     max: 255 (1)

     mean: 147.828 (0.579719)

     standard deviation: 60.3165 (0.236535)

     kurtosis: 0.504549

     skewness: -0.947011

   Blue:

     min: 0 (0)

     max: 255 (1)

     mean: 140.783 (0.552089)

     standard deviation: 66.8083 (0.261993)

     kurtosis: -0.311562

     skewness: -0.855471

   Alpha:

     min: 255 (1)

     max: 255 (1)

     mean: 255 (1)

     standard deviation: 0 (0)

     kurtosis: 0

     skewness: 0

 Image statistics:

   Overall:

     min: 0 (0)

     max: 255 (1)

     mean: 107.527 (0.421673)

     standard deviation: 82.7262 (0.324416)

     kurtosis: -1.45325

     skewness: -0.185137

 Rendering intent: Undefined

 Interlace: None

 Background color: white

 Border color: rgba(223,223,223,1)

 Matte color: grey74

 Transparent color: none

 Compose: Over

 Page geometry: 198x264+0+0

 Dispose: Undefined

 Iterations: 0

 Compression: Zip

 Orientation: Undefined

 Properties:

   date:create: 2013-05-10T22:14:27-07:00

   date:modify: 2013-05-10T22:14:27-07:00

   signature: 4fa517adcf20cdc524027ac621ba437e38635f21443781678830f3e75d890f15

 Artifacts:

   verbose: true

 Tainted: False

 Filesize: 62.5KB

 Number pixels: 52.3K

 Pixels per second: 5.227M

 User time: 0.010u

 Elapsed time: 0:01.009

 Version: ImageMagick 6.6.2-6 2011-03-16 Q16 http://www.imagemagick.org

mogrify

resize an image, blur, crop, despeckle, dither, draw on, flip, join, re-sample, and much more. Mogrify overwrites the original image file, whereas, convert writes to a different image file.

To see how it works differently as compared to ‘convert’, do the following :

First of all, because we are expecting the original image to be overwritten, lets create a copy of our original one, as we need to use the original one for other imagemagick tools too.

$cp orig.png oimg.png

$mogrify -monochrome oimg.png

$display oimg.png

As a result of ‘display’ command, we get

ll14

Most of the mogrify options are similar to the ‘convert’ ones.

composite

overlaps one image over another.

This is going to be really amazing. It takes a lot of mouse click efforts to overlap two images in any image editor, here it just takes the following command

$composite thumbnail.png new.jpg overlapped.png

The output image ‘overlapped.png’ is

ll15

montage

Create a composite image by combining several separate images. The images are tiled on the composite image optionall adorned with a border, frame, image name, and more.

With ‘montage’, it creates a collage kind of collection of images in a geometrical way. The generic syntax to use ‘montage’ is

      montage input-file [options] output-file

Note, the input file in above can be a set of files separated by spaces

For example, we shall be creating a composite image with all the effects and editing on our original image. Initially lets create several images with different effects using following simple ‘convert’ command

$ convert -implode 1 orig.png implode.png

$ convert -monochrome orig.png mono.png

$ convert -charcoal 3 orig.png charc.png

$ convert -emboss 6 orig.png emboss.png

$ convert -resize 60x60 orig.png resized.png

With each of the above five commands, we get five differently edited images, and including the original, we have total six images in total to create a composite image.

Now, we use the ‘montage’ tool to create a collage as follows:

$montage *.png montage.png

The figure below is how our output image looks like

ll16

Note, the way the images have been composited to create the final output image. It offers various options, including to change the geometry of the images, more details of which can be referred through its man page.


compare

Mathematically and visually annotate the difference between an image and its reconstruction.. This is a very useful tool, especially for image processing professionals who need to monitor every pixel variation. As an example, let us compare two different formats of same image.

$compare orig.png converted.jpg diff.png

The way it illustrates a comparison visually is in the form of a diff image,

ll17

Mathematically, it compares two images as

$compare -metric AE  orig.png converted.jpg diff.png

We use the option -metric which needs a metric type. In this example, we use ‘AE’ which corresponds to Absolute Error. More information regarding metric and metric types is here

For the metric type = AE, we get difference output as,

6707

animate

Animates an image sequence on any X server.

I am pretty sure you would love this tool. Remember the earlier days, where animations were created by drawing several and several drawings depicting a change in the overall movement. Similarly, this tool works on the same concept of principle. As a simplest example, lets create certain images of varying sizes in a separate directory.

$mkdir animation

$cp orig.png animation/0.png

$cd animation

$convert -resize 10x10 0.png 1.png

$convert -resize 20x20 0.png 2.png

$convert -resize 30x30 0.png 3.png

$convert -resize 40x40 0.png 4.png

$convert -resize 50x50 0.png 5.png

$convert -resize 60x60 0.png 6.png

$convert -resize 70x70 0.png 7.png

$convert -resize 80x80 0.png 8.png

$convert -resize 90x90 0.png 9.png

$convert -resize 100x100 0.png 91.png

$convert -resize 110x110 0.png 92.png

$convert -resize 120x120 0.png 93.png

Now, run the animation as

$animate *.png

Use your creativity cells to create such animations and we would love to hear about them.

Command Line Terminal Shortcuts

In the initial section above, we discussed that for using command line for all kinds of tasks will result in a lot of typing. I never denied that a lot of typing can be cumbersome, especially when it comes to long file names, at times re-typing commands, etc. Although, we cannot completely avoid typing but Linux does come with a way to minimize certain difficulties. In this section we shall be discussing a few fantastic key combination short cuts which can be used while working on Linux terminal.

CTRL + r

This is an exciting short cut to search through the list of commands we’ve run in a terminal. We can even edit the already run command and then run it with the modification. As in, suppose we once copied a file ‘f1’ from a directory path to another destination path. Now we would like to copy file ‘f2’ from the same source path to the same directory path.

We can re-use are earlier used command as

1. Press key combination ‘Ctrl + r’

We get following just below command prompt

$

(reverse-i-search)`':

2. Type cp.

Basically, type the initial matching characters of the relevant command. More the relevant characters we type, quicker we’ll encounter the matching needed command from the already run commands.

3. Keep pressing ‘Ctrl + r’ until it displays our needed ‘cp’ command from the list of earlier used commands.

$

(reverse-i-search)`cp': cp /home/rupali/programs/cstatic/f1 /home/rupali/out/dest/

4. Once it shows our relevant command, press right arrow key (or left arrow key) to come out.

5. Make modification to change the filename from ‘f1’ to ‘f2’ and then run the new modified command.

cp /home/rupali/programs/cstatic/f2 /home/rupali/out/dest/

Therefore, it helped us to avoid re-writing the complete ‘cp’ command. It is an immensely useful key combination in Linux.

Up Arrow

To check and run the recently run commands in a terminal. As an example, we are debugging an application and every time we make a change in the source, we have to run our ‘make’ command. We don’t need to type ‘make target’ again and again as it is the one of the most recent command in the command history. Just use up arrow to browse through recently run commands and run it from there.

The same can also be done using key combination ‘CTRL + p’.

To see how that works, run command ‘ls’ on your command prompt. After the command output, press up arrow key. You’ll find ‘ls’ command, which is the recent command which we just ran.

CTRL + a and CTRL + e

At times, we are typing our command and then notice we need to add ‘sudo’ in front of the command. We can use the key combination ‘Ctrl + a’ to reach the beginning of the command. The same can be achieved by ‘home’ key.

Similarly, we can use the key combination ‘Ctrl + e’ to reach the end of the command. Again, the same can also be done by ‘end’ key.

Tab key

Tab key is the most used among the Linux users. When we are typing a file/directory path, ‘tab’ key assists in auto-complete as we move along with the path.

The way how it works is, type the initial characters identifying the directory name in the path of the filename, and press ‘tab’ key. It will be auto-completed in case the initial few typed characters uniquely identify it. Otherwise, it will suggest the possible names.

For example, try

$gedit /h

and then press tab key. It will be be auto-completed to

$ls/home

In this way, we can easily type and auto-complete a long path as well conveniently.

CTRL + l

One can clear the terminal using ‘ctrl + l’ key combination. It has the same effect as the clear command. So, no need to type ‘clear’ command again and again.

CTRL + u

Clears all the text to the left of the current cursor on the command prompt.
For example,

ll18

On pressing Ctrl + u, we get
ll19

CTRL + k

Similar to the above discussed key combination, ‘ctrl + k’ removes all the text to the right of the current cursor on the command prompt
ll20

On pressing ‘ctrl + k’, we get
ll21

ALT + d

This key combination clears the word from the command prompt. Though the cursor should be at the beginning of the word before pressing ‘alt +d’.
As in,
ll22

On pressing ‘Alt + d’, we get
ll23

Note, this involves ‘Alt’ key and not the ‘Ctrl’.

Other keyboard shortcuts

The other keyboard shortcuts like opening a terminal, searching in the filesystem, etc can depend upon the distribution of the linux used. However, they are even changeable from the system preferences.

As in, in case of ubuntu, we the keyboard shortcuts can be found under

System > Preferences >Keyboard Shortcuts
Following is the snapshot depicting the same.

ll24

Well, from the above key shortcuts, we see Linux really values our typing and helps us in all ways in saving our effort of typing something which has been typed once.

NOTE – To learn some amazing Linux command line tricks, read our article on 20 interesting and extremely helpful Linux command line tricks

Conclusion

This article is an effort to widen the scope of using more and more Linux command line which is much faster and effective along with aiding self learning. Believe me, there are plethora of command line Linux utilities and tricks available for each and everything that can be done on an operating system. So, it is an endless topic. Would love to hear about more command line Linux powerful tools.

4 thoughts on “Linux Command Line Alternatives – Leave The Mouse To Rest!

  1. dgrb

    Not sure what you mean by “insatiable” in the first paragraph….but

    I am in complete agreement, the CLI is an essential piece of knowledge for anyone but the most casual user.

    Or, as I like to pt it to my students: you have a directory (folder, if you insist) with 1,000 files and you need to remover every file with “abc” *somewhere* in its name.

    Command line: rm *abc*

    GUI: well, I guess you with a find, then…..

    BTW on this topic, if you haven’t read Neal Stephenson’s In the Beginning was the Command Line (http://www.cryptonomicon.com/beginning.html) you should.

    Reply
  2. rdchin

    I like the CLI (command line interface) because once you’ve learned a command and its options, the knowledge is good for decades. With Microsoft Windows, the GUI changes every few years and in 5-8 years everything you’ve learned is obsolete.

    To help newbies with CLI, I started a project on github to familiarize people with various CLI applications. It is at https://github.com/rdchin/CLI-app-menu and I hope it helps someone to discover the world of CLI.

    Reply
  3. Elex

    Really useful Post…
    Explain hard part very simply…

    Reply
  4. Patrick

    Thank you. The portion about your .muttrc saved my butt.

    Reply

Leave a Reply

Your email address will not be published. Required fields are marked *