Less Popular But Useful Linux Commands

By | 20/06/2013

Ever since from the age of unix to the present unix-like linux distributions, the linux world has added plethora commands to the kitty of linux users. At times it is just too difficult to keep in mind the complete set of available commands. However, we don’t even need to memorize all of them. It is sufficient to just be aware of commands and keep in mind the ones which are related to linux lives. Here I am consolidating a list of less popular but useful linux commands and how they work. I am sure, most of these commands would interest you and make your tasks simpler and efficient in some way.

NOTE – To read more about Linux command line tips, read our articles on Funny Linux commands and Interesting Linux command line tips and tricks.

 

Less Popular But Useful Linux Commands

 

Linux sudo !! command

The keyword ‘sudo’ in linux world implies “super-user do” and hence is used along with the command we want it to be run as a super user. What follows next here is ‘!!’. A pair of exclamation marks instigates the previous run command. Hence, there are scenarios when we run a particular command and after running the command we come to know we don’t have appropriate permissions and hence need the command to be run with ‘sudo’. What we can do next is

$sudo !!

Let us check out an example. We wish to install tool which is a tool for proprietary VOIP. This is how we do that,

$ apt-get install skype

Oops, we get following message which reminds us to use sudo while installation as it needs super-user rights.

E: Could not open lock file /var/lib/dpkg/lock - open (13: Permission denied)
E: Unable to lock the administration directory (/var/lib/dpkg/), are you root?

What we need to do next is, just,

$ sudo !!

And that initiates the installation which should end successfully.

Linux head & tail commands

Well, there are times when we just want to see how a very large file begins. If you can’t think of an example, assume you want to check a header of a video content file. Its just a few initial lines of a huge video data file. We definitely would not like to open the complete file in an editor just to check on its header information. Linux provides a better alternative, that is, the head tool. The way we use it in our example is,

$head s.mp3

OMG, we got a lot more data than we expected, (A lot truncated snapshot)

ID3!vTIT2Sister -Sister 2 SisterPRIV'WM/MediaClassPrimaryID\ufffd}`\ufffd#\ufffd\ufffdK\ufffd\ufffdH\ufffd*(DPRIV)WM/MediaClassSecondaryIDPRIVWM/WMContentID
\ufffdJs@IG\ufffd\ufffd\ufffd+\ufffdlPRIVWM/UniqueFileIdentifier;TPUB
Walt DisneyTCON(13)TALBDisney Popstation Version 2.0TPE2Various ArtistsMCDI\ufffd13+96+4B45+8EF5+CD2D+110E6+15029+18A62+1D4A7+214DF+25677+2C8D2+30129+33E39+3B6FC+3F2C5+42D76+4656E+4A04E+4DF73+51E5CPRIV"WM/WMCollectionID0Lj\u01b0htO\ufffd\u0599\ufffdr\ufffd\ufffdGPRIV'WM/WMCollectionGroupID0Lj\u01b0htO\ufffd\u0599\ufffdr\ufffd\ufffdGPRIVWM/ProviderZACR DBSPRIVPeakValue\ufffdPRIVAverageLevel{%TRCK14TPE1Various ArtistsTLE204066\ufffd\ufffd\ufffd@\ufffdK\ufffd \ufffd\ufffd p
\ufffd. %\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\uf

By default it displays the initial 10 lines of the input file. We do have control on how many lines of beginning information we need from the file through the ‘-n’ option.

$ head -n 1 s.mp3

Now we get the following details as per pur requirement,

ID3!vTIT2Sister -Sister 2 SisterPRIV'WM/MediaClassPrimaryID\ufffd}`\ufffd#\ufffd\ufffdK\ufffd\ufffdH\ufffd*(DPRIV)WM/MediaClassSecondaryIDPRIVWM/WMContentID
\ufffdJs@IG\ufffd\ufffd\ufffd+\ufffdlPRIVWM/UniqueFileIdentifier;TPUB
Walt DisneyTCON(13)TALBDisney Popstation Version 2.0TPE2Various ArtistsMCDI\ufffd13+96+4B45+8EF5+CD2D+110E6+15029+18A62+1D4A7+214DF+25677+2C8D2+30129+33E39+3B6FC+3F2C5+42D76+4656E+4A04E+4DF73+51E5CPRIV"WM/WMCollectionID0Lj\u01b0htO\ufffd\u0599\ufffdr\ufffd\ufffdGPRIV'WM/WMCollectionGroupID0Lj\u01b0htO\ufffd\u0599\ufffdr\ufffd\ufffdGPRIVWM/ProviderZACR DBSPRIVPeakValue\ufffdPRIVAverageLevel{%TRCK14TPE1Various ArtistsTLE204066\ufffd\ufffd\ufffd@\ufffdK\ufffd \ufffd\ufffd p

On the similar lines we have the linux command ‘tail’. ‘Tail’ is used where we the user wants to check the last few lines of a file. It saves a lot of effort if we want to check the ending lines of a large file, as we don’t need to open the file and then scroll/move to the end. Extremely useful for checking out the newer logs in an appendable log file.

$tail vbox-install.log

I get the last 10 lines of the log file

gcc -Wp,-MD,/tmp/vbox.0/math/gcc/.udivdi3.o.d -nostdinc -isystem /usr/lib/gcc/i686-linux-gnu/4.4.5/include -I/usr/src/linux-headers-2.6.35-22-generic/arch/x86/include -Iinclude -include include/generated/autoconf.h -Iubuntu/include -D__KERNEL__ -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -Werror-implicit-function-declaration -Wno-format-security -fno-delete-null-pointer-checks -O2 -m32 -msoft-float -mregparm=3 -freg-struct-return -mpreferred-stack-boundary=2 -march=i686 -mtune=generic -maccumulate-outgoing-args -Wa,-mtune=generic32 -ffreestanding -fstack-protector -DCONFIG_AS_CFI=1 -DCONFIG_AS_CFI_SIGNAL_FRAME=1 -DCONFIG_AS_CFI_SECTIONS=1 -pipe -Wno-sign-compare -fno-asynchronous-unwind-tables -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -Wframe-larger-than=1024 -fno-omit-frame-pointer -fno-optimize-sibling-calls -pg -Wdeclaration-after-statement -Wno-pointer-sign -fno-strict-overflow -fconserve-stack -include /tmp/vbox.0/include/VBox/SUPDrvMangling.h -I/lib/modules/2.6.35-22-generic/build/include -I/tmp/vbox.0/ -I/tmp/vbox.0/include -I/tmp/vbox.0/r0drv/linux -I/tmp/vbox.0/vboxnetadp/ -I/tmp/vbox.0/vboxnetadp/include -I/tmp/vbox.0/vboxnetadp/r0drv/linux -D__KERNEL__ -DMODULE -DRT_OS_LINUX -DIN_RING0 -DIN_RT_R0 -DIN_SUP_R0 -DVBOX -DRT_WITH_VBOX -DVBOX_WITH_HARDENING -DRT_ARCH_X86 -DVBOX_WITH_64_BITS_GUESTS -DMODULE -D"KBUILD_STR(s)=#s" -D"KBUILD_BASENAME=KBUILD_STR(udivdi3)" -D"KBUILD_MODNAME=KBUILD_STR(vboxnetadp)" -c -o /tmp/vbox.0/math/gcc/.tmp_udivdi3.o /tmp/vbox.0/math/gcc/udivdi3.c
set -e ; perl /usr/src/linux-headers-2.6.35-22-generic/scripts/recordmcount.pl "i386" "little" "32" "objdump" "objcopy" "gcc" "ld" "nm" "" "" "1" "/tmp/vbox.0/math/gcc/udivdi3.o";
gcc -Wp,-MD,/tmp/vbox.0/math/gcc/.umoddi3.o.d -nostdinc -isystem /usr/lib/gcc/i686-linux-gnu/4.4.5/include -I/usr/src/linux-headers-2.6.35-22-generic/arch/x86/include -Iinclude -include include/generated/autoconf.h -Iubuntu/include -D__KERNEL__ -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -Werror-implicit-function-declaration -Wno-format-security -fno-delete-null-pointer-checks -O2 -m32 -msoft-float -mregparm=3 -freg-struct-return -mpreferred-stack-boundary=2 -march=i686 -mtune=generic -maccumulate-outgoing-args -Wa,-mtune=generic32 -ffreestanding -fstack-protector -DCONFIG_AS_CFI=1 -DCONFIG_AS_CFI_SIGNAL_FRAME=1 -DCONFIG_AS_CFI_SECTIONS=1 -pipe -Wno-sign-compare -fno-asynchronous-unwind-tables -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -Wframe-larger-than=1024 -fno-omit-frame-pointer -fno-optimize-sibling-calls -pg -Wdeclaration-after-statement -Wno-pointer-sign -fno-strict-overflow -fconserve-stack -include /tmp/vbox.0/include/VBox/SUPDrvMangling.h -I/lib/modules/2.6.35-22-generic/build/include -I/tmp/vbox.0/ -I/tmp/vbox.0/include -I/tmp/vbox.0/r0drv/linux -I/tmp/vbox.0/vboxnetadp/ -I/tmp/vbox.0/vboxnetadp/include -I/tmp/vbox.0/vboxnetadp/r0drv/linux -D__KERNEL__ -DMODULE -DRT_OS_LINUX -DIN_RING0 -DIN_RT_R0 -DIN_SUP_R0 -DVBOX -DRT_WITH_VBOX -DVBOX_WITH_HARDENING -DRT_ARCH_X86 -DVBOX_WITH_64_BITS_GUESTS -DMODULE -D"KBUILD_STR(s)=#s" -D"KBUILD_BASENAME=KBUILD_STR(umoddi3)" -D"KBUILD_MODNAME=KBUILD_STR(vboxnetadp)" -c -o /tmp/vbox.0/math/gcc/.tmp_umoddi3.o /tmp/vbox.0/math/gcc/umoddi3.c
set -e ; perl /usr/src/linux-headers-2.6.35-22-generic/scripts/recordmcount.pl "i386" "little" "32" "objdump" "objcopy" "gcc" "ld" "nm" "" "" "1" "/tmp/vbox.0/math/gcc/umoddi3.o";
ld -m elf_i386 -r -o /tmp/vbox.0/vboxnetadp.o /tmp/vbox.0/linux/VBoxNetAdp-linux.o /tmp/vbox.0/VBoxNetAdp.o /tmp/vbox.0/math/gcc/divdi3.o /tmp/vbox.0/math/gcc/moddi3.o /tmp/vbox.0/math/gcc/qdivrem.o /tmp/vbox.0/math/gcc/udivdi3.o /tmp/vbox.0/math/gcc/umoddi3.o 
(cat /dev/null; echo kernel//tmp/vbox.0/vboxnetadp.ko;) > /tmp/vbox.0/modules.order
make -f /usr/src/linux-headers-2.6.35-22-generic/scripts/Makefile.modpost
scripts/mod/modpost -m -a -i /usr/src/linux-headers-2.6.35-22-generic/Module.symvers -I /tmp/vbox.0/Module.symvers -o /tmp/vbox.0/Module.symvers -S -w -s
gcc -Wp,-MD,/tmp/vbox.0/.vboxnetadp.mod.o.d -nostdinc -isystem /usr/lib/gcc/i686-linux-gnu/4.4.5/include -I/usr/src/linux-headers-2.6.35-22-generic/arch/x86/include -Iinclude -include include/generated/autoconf.h -Iubuntu/include -D__KERNEL__ -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -Werror-implicit-function-declaration -Wno-format-security -fno-delete-null-pointer-checks -O2 -m32 -msoft-float -mregparm=3 -freg-struct-return -mpreferred-stack-boundary=2 -march=i686 -mtune=generic -maccumulate-outgoing-args -Wa,-mtune=generic32 -ffreestanding -fstack-protector -DCONFIG_AS_CFI=1 -DCONFIG_AS_CFI_SIGNAL_FRAME=1 -DCONFIG_AS_CFI_SECTIONS=1 -pipe -Wno-sign-compare -fno-asynchronous-unwind-tables -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -Wframe-larger-than=1024 -fno-omit-frame-pointer -fno-optimize-sibling-calls -pg -Wdeclaration-after-statement -Wno-pointer-sign -fno-strict-overflow -fconserve-stack -include /tmp/vbox.0/include/VBox/SUPDrvMangling.h -I/lib/modules/2.6.35-22-generic/build/include -I/tmp/vbox.0/ -I/tmp/vbox.0/include -I/tmp/vbox.0/r0drv/linux -I/tmp/vbox.0/vboxnetadp/ -I/tmp/vbox.0/vboxnetadp/include -I/tmp/vbox.0/vboxnetadp/r0drv/linux -D__KERNEL__ -DMODULE -DRT_OS_LINUX -DIN_RING0 -DIN_RT_R0 -DIN_SUP_R0 -DVBOX -DRT_WITH_VBOX -DVBOX_WITH_HARDENING -DRT_ARCH_X86 -DVBOX_WITH_64_BITS_GUESTS -D"KBUILD_STR(s)=#s" -D"KBUILD_BASENAME=KBUILD_STR(vboxnetadp.mod)" -D"KBUILD_MODNAME=KBUILD_STR(vboxnetadp)" -DMODULE -c -o /tmp/vbox.0/vboxnetadp.mod.o /tmp/vbox.0/vboxnetadp.mod.c

To be specific on how many lines of output one wants, use option -n as

$ tail -n 3 vbox-install.log

Now we get a short three line output

scripts/mod/modpost -m -a -i /usr/src/linux-headers-2.6.35-22-generic/Module.symvers -I /tmp/vbox.0/Module.symvers -o /tmp/vbox.0/Module.symvers -S -w -s
gcc -Wp,-MD,/tmp/vbox.0/.vboxnetadp.mod.o.d -nostdinc -isystem /usr/lib/gcc/i686-linux-gnu/4.4.5/include -I/usr/src/linux-headers-2.6.35-22-generic/arch/x86/include -Iinclude -include include/generated/autoconf.h -Iubuntu/include -D__KERNEL__ -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -Werror-implicit-function-declaration -Wno-format-security -fno-delete-null-pointer-checks -O2 -m32 -msoft-float -mregparm=3 -freg-struct-return -mpreferred-stack-boundary=2 -march=i686 -mtune=generic -maccumulate-outgoing-args -Wa,-mtune=generic32 -ffreestanding -fstack-protector -DCONFIG_AS_CFI=1 -DCONFIG_AS_CFI_SIGNAL_FRAME=1 -DCONFIG_AS_CFI_SECTIONS=1 -pipe -Wno-sign-compare -fno-asynchronous-unwind-tables -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -Wframe-larger-than=1024 -fno-omit-frame-pointer -fno-optimize-sibling-calls -pg -Wdeclaration-after-statement -Wno-pointer-sign -fno-strict-overflow -fconserve-stack -include /tmp/vbox.0/include/VBox/SUPDrvMangling.h -I/lib/modules/2.6.35-22-generic/build/include -I/tmp/vbox.0/ -I/tmp/vbox.0/include -I/tmp/vbox.0/r0drv/linux -I/tmp/vbox.0/vboxnetadp/ -I/tmp/vbox.0/vboxnetadp/include -I/tmp/vbox.0/vboxnetadp/r0drv/linux -D__KERNEL__ -DMODULE -DRT_OS_LINUX -DIN_RING0 -DIN_RT_R0 -DIN_SUP_R0 -DVBOX -DRT_WITH_VBOX -DVBOX_WITH_HARDENING -DRT_ARCH_X86 -DVBOX_WITH_64_BITS_GUESTS -D"KBUILD_STR(s)=#s" -D"KBUILD_BASENAME=KBUILD_STR(vboxnetadp.mod)" -D"KBUILD_MODNAME=KBUILD_STR(vboxnetadp)" -DMODULE -c -o /tmp/vbox.0/vboxnetadp.mod.o /tmp/vbox.0/vboxnetadp.mod.c
ld -r -m elf_i386 -T /usr/src/linux-headers-2.6.35-22-generic/scripts/module-common.lds --build-id -o /tmp/vbox.0/vboxnetadp.ko /tmp/vbox.0/vboxnetadp.o /tmp/vbox.0/vboxnetadp.mod.o

Another very interesting feature is if we want to observe the latest appended lines as the file grows in run-time, we use the option ‘-f’. Hence, it is like watching the logs in real time.

$sudo tail -f /var/log/syslog

Here we are monitoring the system logs in run time. To check out new logs, just insert a USB device to your machine. You’ll see a new set of logs being added and scrolling on your terminal in real time.

Jun 16 08:32:21 home-OptiPlex-745 kernel: [110122.620028] usb 1-2: new high speed USB device number 7 using ehci_hcd
Jun 16 08:32:22 home-OptiPlex-745 kernel: [110122.755022] scsi6 : usb-storage 1-2:1.0
Jun 16 08:32:22 home-OptiPlex-745 kernel: [110122.755429] cdc_acm 1-2:1.1: This device cannot do calls on its own. It is not a modem.
Jun 16 08:32:22 home-OptiPlex-745 kernel: [110122.755543] cdc_acm 1-2:1.1: ttyACM0: USB ACM device
Jun 16 08:32:22 home-OptiPlex-745 modem-manager[839]:  (ttyACM0) opening serial port...
Jun 16 08:32:23 home-OptiPlex-745 kernel: [110123.752938] scsi 6:0:0:0: Direct-Access Android UMS Composite 00 PQ: 0 ANSI: 2
Jun 16 08:32:23 home-OptiPlex-745 kernel: [110123.753549] scsi 6:0:0:1: Direct-Access Android UMS Composite 00 PQ: 0 ANSI: 2
Jun 16 08:32:23 home-OptiPlex-745 kernel: [110123.757447] sd 6:0:0:0: Attached scsi generic sg2 type 0
Jun 16 08:32:23 home-OptiPlex-745 kernel: [110123.760551] sd 6:0:0:0: [sdb] Attached SCSI removable disk
Jun 16 08:32:23 home-OptiPlex-745 kernel: [110123.762916] sd 6:0:0:1: Attached scsi generic sg3 type 0
Jun 16 08:32:23 home-OptiPlex-745 kernel: [110123.764583] sd 6:0:0:1: [sdc] Attached SCSI removable disk
Jun 16 08:32:29 home-OptiPlex-745 modem-manager[839]:  (ttyACM0) closing serial port...
Jun 16 08:32:29 home-OptiPlex-745 modem-manager[839]:  (ttyACM0) serial port closed
Jun 16 08:32:29 home-OptiPlex-745 modem-manager[839]:  (ttyACM0) opening serial port...
Jun 16 08:32:29 home-OptiPlex-745 modem-manager[839]:  (Generic): GSM modem /sys/devices/pci0000:00/0000:00:1a.7/usb1/1-2 claimed port ttyACM0
Jun 16 08:32:29 home-OptiPlex-745 modem-manager[839]:  (ttyACM0) closing serial port...
Jun 16 08:32:29 home-OptiPlex-745 modem-manager[839]:  (ttyACM0) serial port closed
Jun 16 08:32:29 home-OptiPlex-745 NetworkManager[770]:  (ttyACM0): failed to look up interface index
Jun 16 08:32:29 home-OptiPlex-745 NetworkManager[770]:  (ttyACM0): new GSM device (driver: 'cdc_acm' ifindex: -1)
Jun 16 08:32:29 home-OptiPlex-745 NetworkManager[770]:  (ttyACM0): exported as /org/freedesktop/NetworkManager/Devices/3
Jun 16 08:32:29 home-OptiPlex-745 NetworkManager[770]:  (ttyACM0): now managed
Jun 16 08:32:29 home-OptiPlex-745 NetworkManager[770]:  (ttyACM0): device state change: 1 -> 2 (reason 2)
Jun 16 08:32:29 home-OptiPlex-745 NetworkManager[770]:  (ttyACM0): deactivating device (reason: 2).
Jun 16 08:32:29 home-OptiPlex-745 NetworkManager[770]:  (ttyACM0): device state change: 2 -> 3 (reason 0)

Likewise, one can monitor logs as an event occurs and determine the internal working of the system at runtime.

Linux look command

Well, it may sound strange but Linux has an english vocabulary too. One can check any english word on the command prompt using the ‘look’ command. The ‘look’ command, as an input takes a string and as output displays all the word strings which start with that input string. The general syntax looks like

look [options]

It may also take a file in where to look at for reference, though it should be sorted as in the implementation it uses binary search. However, if we don’t provide any file, it refers from the file – /usr/share/dict/words Further, let us experience how this command works using a few examples,

$look stuff

Now, this will list down all the english words which starts with the string ‘stuff’.

stuff
stuffed
stuffier
stuffiest
stuffily
stuffiness
stuffiness's
stuffing
stuffing's
stuffs

This linux command works great if we wish to check spellings of an english word. For example, we need to refer the spellings of the word ‘proprietary’. So, we give an incomplete string to the look command

$ look propr

As an output we get a list

proprietaries
proprietary
proprietor
proprietor's
proprietors
proprietorship
proprietorship's
proprietress
proprietress's
proprietresses
propriety
propriety's

Our word is the second one in the list and now we know the correct spelling without any doubt. One can make an effort to form a separate dictionary and use it for looking the words. The syntax would be

$look

More details at its man page.

[MORE COMMANDS ON NEXT PAGE]

Leave a Reply

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