Best 15 Linux Tips and Tricks for Developers
Author - Sanjay
Introduction
We use unix almost on most of the production servers in IT world . Wheather Cetos7 or Redhat or any other falvours of linux.Unix command line has varities of options which makes our life easier .Here are the 15 tricks i use to make things quick for me . Lets share the secrets .
Table of Contents
- Introduction
- Display Last Word in File
- Remove the Nth line from All the lines
- How to Remove Blank Lines from File
- How to replace all instances of a word with another word
- Count how many times a word appears in file
- How to reverse string in Shell Script
- Find architecture (32 or 64 bit) of your system
- Make variables available to subshell
- Find What Process is Using a File
- Find Network and Network Interface Load
- Conclusion
Display Last Word in File
If you want to display last word of every line of a file then one of the best way to use is $NF
with awk command . Have alook at how we can do that . I was using awak for almost every purpose.
sudo awk '{print $NF}
sudo awk -F: '{print $NF}
Now lets take an example where i have a file names.txt
with following text
John Adam Bob Archer
Ricky Cornell Aish Annie
Now in order to get the result as archer and annie
i will execute the below command .
cat file.txt |awk '{print $NF}'
Output:-
Archer
Annie
If you want to select next to last field then use NF-1
.
cat file.txt |awk '{print $(NF-1) }'
Output:
Bob
Alish
Remove the Nth line from All the lines
In order to remove a particular line from a line is a stuff that sed command handles easily .
Lets say we have a file with 12 lines and we want to remove few lines and i want 10th line to be skipped . You can use the Sed command in thi case as below .
$ sed -i '10 d' file.txt
How to Remove Blank Lines from File
There are multiple ways to remove blank lines from a file. One of the most common is to use sed. In case of sed command , we use ^$ to represent a blank line , where ^ represents the start of a line and $ represents the end of the line. So how blank is treated in unix coomand ? If a line with a start and an end with no text between is treated as blank .
lets consider the below line in a text file as below
first line
third line
Now we will use the command below to remove the empty lines in the text file.
$ sed -i /^$/d file.txt
A grep command, similar to sed commands shown above, also uses the ^$ to select blanks lines and the -v to select anything BUT these lines. This command then displays the text without the blank lines but doesn’t change the original file.
grep -v ‘^$’ file.txt
One of the alternative is using awk command . This command will also display the text and ignore the blank lines . But unlike grep command , it won’t change the original file.
Why this ?
It is because $0 has all of the words on the line . What if you want to store the output ? We should redirect the output and store it in a new file.
How to replace all instances of a word with another word
For this kind of , I will use a simple command like this below .
$ sed s/Adam/Arep/g file.txt
That will work gret but it will change occurences of "Adam" to "Arep" irrespective of it apears in words or lines or in a part of words .This gets really complex with sed command .
Here’s an example below . It uses the \b (word boundary) marker to ensure we only change “adam” to “arep” and alos makes sure it’s an entire word.
$ $ sed -e ‘s/\badam\b/arep/g’ file.txt
But If you want the change to be case insensitive yopu can add !
ignore case option in your sed command as below .
$ $ sed -e ‘s/\bAdam\b/Arep/g!’ file.txt
Note:-
The SED command -i
option actually changes the original content of the file , so be cautious while using it .
Count how many times a word appears in file
In order to count number of occurences of a word in a file , basically i am specific to log files is using grep command . I use grep command to find the number of occurences of a word as below .
$grep -c 'test' file.txt
it returns the count of occurences of the word test
in any log file or text .
How to reverse string in Shell Script
If you want to reverse a string from console , just use rev
command . This will reverse any string .
echo "lanimretxunileht" | rev
this will return the output as
thelinuxterminal
.
Alternatively rev
command can be directly used as below.
$ rev lanimretxunileht
Find architecture (32 or 64 bit) of your system
This one’s pretty easy. Use the arch
command and we can get the system architecture details in unix or linux distros.
$ arch
i386
Make variables available to subshell
In order to make variables available to a subshell you should define the variable globally in your partent shell.
create a shell script to print the variable
//script.sh
#!/bin/bash
echo $price
$ price=”12.0”
In the above code we are just setting the value tto the variable , now we will ryun and try to acess it wont get accessed below .
$ ./script
$ export $price
As it wont get accessed we are now exporting the variable , now we will be able to acess the variable from any subshell.
Find What Process is Using a File
The lsof command was nothing short of an amazing when I came around it ten years or so ago. LSOF stands for for"list open files", the lsof command comes in extremely handy once you want information regarding your devices or to learn what a specific user is getting at some point in time.
Have a look at lsof manual page
$ lsof more
If you want to find out what all processess are using a file
$ lsof /bin/bash
If you want to get the count of open files open by a particular process and a particular user use lsof command with grep and wc parameter .
$ lsof | grep root | wc -l
This will list down all open files opened by a particular user in your server , one of the most important linux tips while debugging unwanted performance issuess on your server.
Assume you are aware that a process is taking load and want to list all the network files and sockets opened by that process then use the below command to accomplish that.
$ lsof -i -a -p <PID>
Replace the
Find Network and Network Interface Load
The best solution will install a tool which does this for you. One thing you can do is look at the output of the ifconfig command. Along with all the addressing information, you are going to find some stats that tell you how many packets have been received and sent. That will provide you some idea how busy the port continues to be.
$ifcfg -a
Output:-
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 95.111.242.12 netmask 255.255.240.0 broadcast 95.111.255.255
ether 00:50:56:40:8c:99 txqueuelen 1000 (Ethernet)
RX packets 546052993 bytes 1253764871488 (1.1 TiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 468515269 bytes 443271432103 (412.8 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
loop txqueuelen 1000 (Local Loopback)
RX packets 137380783 bytes 1305217368261 (1.1 TiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 137380783 bytes 1305217368261 (1.1 TiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
Conclusion
We have listed down few most common tips and tricks that is used by me as a developer . Please let me know your frequently used tricks , so that it can help the community Cheers !!!