You are reading Morning Coffee, a blog about software engineering written by Igor Šarčević.
Have a nice day!

Linux utils that you might not know

Igor Sarcevic Igor wrote this in May 2017

I’ve used Linux as my primary operating system for well over ten years, yet I still stumble upon things that are completely unknown to me. For example, several days ago, I wanted to display a formated table in my terminal.

# I had a long comma separated list

id,name,count
31232,test-1,21
31,window,2
2121,update-attributes,432

# and I wanted to display it as a table

id     name               count
31232  test-1             21
31     window             2
2121   update-attributes  432

I know that in Ruby, I have an excellent library Terminal Table for generating nice terminal tables, however, parsing the input, mapping the values and writing a Ruby script just for this task seemed like a huge overhead. After googling around for a quick and easy solution, I’ve learned that there is a tool in my Linux environment — column — that does just that.

$ cat data.txt | column -t -s ','

id     name               count
31232  property-a         21
31     window             2
2121   update-attributes  432

Whoa! That was super simple. I was baffled by the fact that this program was part of the standard utilities set on Linux, and yet I’ve never used it. So I wondered what else is part of coreutils or util-linux packages that I don’t know about. I’ve found several interesting and usable tools.

For example, did you know that you have a built in calendar?

$ cal

      May 2017
Su Mo Tu We Th Fr Sa
    1  2  3  4  5  6
 7  8  9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31

$ cal -3

                            2017
       April                  May                   June
Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa
                   1      1  2  3  4  5  6               1  2  3
 2  3  4  5  6  7  8   7  8  9 10 11 12 13   4  5  6  7  8  9 10
 9 10 11 12 13 14 15  14 15 16 17 18 19 20  11 12 13 14 15 16 17
16 17 18 19 20 21 22  21 22 23 24 25 26 27  18 19 20 21 22 23 24
23 24 25 26 27 28 29  28 29 30 31           25 26 27 28 29 30
30

Or, did you know that you can factor numbers with the factor program?

$ factor 234123421341
234123421341: 3 67 1601 727541

$ factor $(date +%s) # factor current timestamp
1495329393: 3 19 47 558167

Or, that you can find out how many terabytes are in 4123412312312 bytes:

$ numfmt --to=iec 4123412312312
3.8T

Or that there is a hardcore version of rm that makes it much harder to retrieve deleted files:

$ shred a.txt

So many interesting things to learn! I encourage you to read through the documentation and update your knowledge on these wonderful tools that are installed out of box on our modern Linux distributions.

Happy hacking!