35 Tricky and Complex Unix Interview Questions and Commands
35 Tricky and Complex Unix Interview Questions and Commands
Here is the list of 35 complex and tricky unix interview questions and answers. A lot
of complex unix commands which are asked in unix interviews are SED, AWK, DU,
HEAD, TAIL, WATCH, GREP, CUT, PS, ZIP, UNZIP etc. A lot of tips and tricks are
asked about these unix commands during interview. Following questions and unix
commands might help you in your unix interview.
By using lsof command in UNIX. It will list down PID of all the processes which are
using a particular file.
2. How do you find which remote hosts are connecting to your host on a
particular port say 10123?
For example: execute netstat -a | grep "port" and it will list the entire hosts which are
connected to this host on port 10123.
You can list down all the running processes using [ps] command. Then you can “grep”
your user name or process name to see if the process is running.
Ephemeral ports are port used by Operating system for client sockets. There is a
specific range on which OS can open any port specified by ephemeral port range.
Normally [ls –lt] command lists down file/folder list sorted by modified time. If you
want to list then alphabetically, then you should simply specify: [ls –l]
6. If one process is inserting data into your MySQL database? How will you
check how many rows inserted into every second?
7. There is a file Unix_Test.txt which contains words "Unix". How will you
replace all Unix to UNIX?
To check the status of last executed command in UNIX, you can check the value of
an inbuilt bash variable [$?]. See the below example:
$> echo $?
The standard command to see this is [ps]. But [ps] only shows you the snapshot of
the processes at that instance. If you need to monitor the processes for a certain
period of time and need to refresh the results in each interval, consider using the
[top] command.
$> ps –ef
If you wish to see the % of memory usage and CPU usage, then consider the below
switches:
$> ps aux
If you wish to use this command inside some shell script, or if you want to customize
the output of [ps] command, you may use “-o” switch like below. By using “-o” switch,
you can specify the columns that you want [ps] to print out.
$>ps -e -o stime,user,pid,args,%mem,%cpu
11 Your application home directory is full? How will you find which directory
is taking how much space?
For example du –sh . | grep G will list down all the directories which have GIGS in
Size.
12. How do you find for how many days your Server is up?
Using command, we can do it in many ways. Based on what we have learnt so far,
we can make use of [ls] and [$?] command to do this. See below:
If the file exists, the [ls] command will be successful. Hence [echo $?] will print 0. If
the file does not exist, then [ls] command will fail and hence [echo $?] will print 1.
14. You have an IP address in your network. How will you find hostname
and vice versa?
In a bash shell, you can access the command line arguments using $0, $1, $2, …
variables, where $0 prints the command name, $1 prints the first input parameter of
the command, $2 the second input parameter of the command and so on.
Just put an [exit] command in the shell script with return value other than 0. This is
because the exit code of successful Unix program is zero. So, suppose if you write
exit -1 inside your program, then your program will throw an error and exit
immediately.
There are many ways to do this. However the easiest way to display the first line of
a file is using the [head] command.
If you specify [head -2] then it would print first 2 records of the file.
Another way can be by using [sed] command. [Sed] is a very powerful text editor
which can be used for various text manipulation purposes like this.
How does the above command work? The 'd' parameter basically tells [sed] to delete
all the records from display from line 2 to last line of the file (last line is represented
by $ symbol). Of course it does not actually delete those lines from the file, it just
does not display those lines in standard output screen. So you only see the remaining
line which is the 1st line.]
If you want to do it using [sed] command, here is what you should write:
From our previous answer, we already know that '$' stands for the last line of the
file. So '$ p' basically prints (p for print) the last line in standard output screen. '-n'
switch takes [sed] to silent mode so that [sed] does not print anything else in the
output.
The easiest way to do it will be by using [sed]. Based on what we already know about
[sed] from our previous examples, we can quickly deduce this command:
You need to replace <n> with the actual line number. So if you want to print the 4th
line, the command will be
Of course you can do it by using [head] and [tail] command as well like below:
You need to replace <n> with the actual line number. So if you want to print the 4th
line, the command will be
We already know how [sed] can be used to delete a certain line from the output – by
using the'd' switch. So if we want to delete the first line the command should be:
But the issue with the above command is, it just prints out all the lines except the
first line of the file on the standard output. It does not really change the file in-place.
So if you want to delete the first line from the file itself, you have two options.
Either you can redirect the output of the file to some other file and then rename it
back to original file like below:
Or, you can use an inbuilt [sed] switch '–i' which changes the file in-place. See below:
Always remember that [sed] switch '$' refers to the last line. So using this knowledge
we can deduce the below command:
If you want to remove line <m> to line <n> from a given file, you can accomplish
the task in the similar method shown above. Here is an example:
The above command will delete line 5 to line 7 from the file file.txt
This is bit tricky. Suppose your file contains 100 lines and you want to remove the
last 5 lines. Now if you know how many lines are there in the file, then you can simply
use the above shown method and can remove all the lines from 96 to 100 like below:
$> sed –i '96,100 d' file.txt # alternative to command [head -95 file.txt]
But not always you will know the number of lines present in the file (the file may be
generated dynamically, etc.) In that case there are many different ways to solve the
problem. There are some ways which are quite complex and fancy. But let's first do
it in a way that we can understand easily and remember easily. Here is how it goes:
$> tt=`wc -l file.txt | cut -f1 -d' '`;sed –i "`expr $tt - 4`,$tt d" test
As you can see there are two commands. The first one (before the semi-colon)
calculates the total number of lines present in the file and stores it in a variable called
“tt”. The second command (after the semi-colon), uses the variable and works in the
exact way as shown in the previous example.
We already know how to print one line from a file which is this:
Where <n> is to be replaced by the actual line number that you want to print. Now
once you know it, it is easy to print out the length of this line by using [wc] command
with '-c' switch.
The above command will print the length of 35th line in the file.txt.
26. How to get the nth word of a line in Unix?
Assuming the words in the line are separated by space, we can use the [cut]
command. [cut] is a very powerful and useful command and it's real easy. All you
have to do to get the n-th word from the line is issue the following command:
'-d' switch tells [cut] about what is the delimiter (or separator) in the file, which is
space ' ' in this case. If the separator was comma, we could have written -d',' then.
So, suppose I want find the 4th word from the below string: “A quick brown fox
jumped over the lazy cat”, we will do something like this:
$> echo “A quick brown fox jumped over the lazy cat” | cut –f4 –d' '
xinu
28. How to get the last word from a line in Unix file?
We will make use of two commands that we learnt above to solve this. The commands
are [rev] and [cut]. Here we go.
Let's imagine the line is: “C for Cat”. We need “Cat”. First we reverse the line. We
get “taC rof C”. Then we cut the first word, we get 'taC'. And then we reverse it again.
$>echo "C for Cat" | rev | cut -f1 -d' ' | rev
Cat
29. How to get the n-th field from a Unix command output?
We know we can do it by [cut]. Like below command extracts the first field from the
output of [wc –c] command
But I want to introduce one more command to do this here. That is by using [awk]
command. [awk] is a very powerful command for text pattern scanning and
processing. Here we will see how may we use of [awk] to extract the first field (or
first column) from the output of another command. Like above suppose I want to
print the first column of the [wc –c] output. Here is how it goes like this:
In the action space, we have asked [awk] to take the action of printing the first
column ($1).
30. How to replace the n-th line in a file with a new line in Unix?
This can be done in two steps. The first step is to remove the n-th line. And the
second step is to insert a new line in n-th line position. Here we go.
$>sed -i'' '10 i This is the new line' file.txt # i stands for insert
Open the file in VI editor. Go to VI command mode by pressing [Escape] and then
[:]. Then type [set list]. This will show you all the non-printable characters, e.g. Ctrl-
M characters (^M) etc., in the file.
In order to know the file type of a particular file use the [file] command like below: