DEV Community

Cover image for 6 Unix tools you need to know about
Mithil Poojary
Mithil Poojary

Posted on • Edited on

6 Unix tools you need to know about

1. column

I, as a programmer, do not mind those nastily formatted tabular data, like...

Pid Name %CPU
1230 Firefox 15
600 Code 12
809 Terminal 1.2
Enter fullscreen mode Exit fullscreen mode

But when I learnt about column, I was pretty fascinated by how easy it is to make it neat!

column <file_name> -t

Pid   Name       %CPU
1230  Firefox    15
600   Code       12
809   Terminal  1.2
Enter fullscreen mode Exit fullscreen mode

2. less

How many times did you feel disgusted by the mess you made on your terminal screen? Maybe you printed a huge file or did ps aux. I have been there.
A very neat solution is to use less. The text is displayed upon applying a filter for paging through text one screenful at a time.

You don't have any clutter on your terminal once you exit less.

3. sort

Imagine having a file with ID and Names like this.

16  Siri
20  Cortana
13  Mithil
9   Jarvis
Enter fullscreen mode Exit fullscreen mode

A quick sort on the IDs would be super helpful right?

sort <file_name> -n

9   Jarvis
13  Mithil
16  Siri
20  Cortana
Enter fullscreen mode Exit fullscreen mode

4. tr

I can't really think of a better situation to use this right now, but hey it works.
Say you have to replace the occurence of a character. tr (translate) does this for you.

echo "This is a sentence" | tr " " "\n"

This
is
a
sentence
Enter fullscreen mode Exit fullscreen mode

5. head and tail

Head and tail themselves are pretty solid tools, but together they have their own use case.

Say you want the 11th line in a text file. You can do this by :

head <file_name> -n 11 | tail -n 1
Enter fullscreen mode Exit fullscreen mode

That was all for this post. What are your preferred helpful Unix tools?

Photo by Karl Pawlowicz on Unsplash

Top comments (5)

Collapse
 
_garybell profile image
Gary Bell

I'm a huge fan of the (relatively) straight forward find command. When coupled with -exec, you can do some pretty creative things, fairly quickly.

I've used find historically for getting backup files which are more than 2 weeks old, and deleting them. It's a simple way of keeping backups from taking over hard drive space, without needing to do everything manually

Collapse
 
geekypandey profile image
Anurag Pandey

That coupling with exec takes it to another level. What are your other favourites?

Collapse
 
_garybell profile image
Gary Bell

Going to be boring and say grep. I think a lot of people have it as a go-to tool to filter the returned output of a command into something useful.

I don't spend a lot of time in the terminal using Linux/Unix specific commands. Most of my time on the terminal is spend using Git, and increasingly more often, redis-cli

Thread Thread
 
geekypandey profile image
Anurag Pandey

Yeah. git grep is super handy to find files with particular snippets of code.

I started with competitive programming recently and I used to save code as filename.py and then testcase_filename for the testcases. ls | grep -v testcase came in handy to code files and clear the noise.

Collapse
 
josephj11 profile image
Joe

I don't use tr very often, but it's very handy for getting rid of odd binary codes in text files and translating between upper and lower case. I have seen much fancier uses of it, but don't recall any at the moment.

Here's a quick way to show someone the format of a data file without revealing any sensitive data.

#!/bin/bash
## Obsfucate a text file
## 11/25/2013
## Thanks to D. Joe on the WNYLUG list
## For sharing the format of a text file with sensitive data in it

if [ -z "${1}" ]
then
  IN="/dev/stdin"
else
  if [ ! -r "${1}" ]
  then
    echo "Can't read [${1}]"
    exit 1
  fi

  IN="${1}"
fi

if [ -z "${2}" ]
then
  OUT="/dev/stdout"
else
  OUT="${2}"
fi

tr 'a-z' 'A-Z' < "${IN}" | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'AAAAAAAAAAAAAAAAAAAAAAAAAA' | tr '0123456789' '9999999999' > "${OUT}"