Tag: nohup

Top helpful Linux commands for beginners

Top helpful Linux commands for beginners

Useful Command Line Keyboard Shortcuts

The following keyboard shortcuts are incredibly useful and will save you loads of time:

  • CTRL + U – Cuts text up until the cursor.
  • CTRL + K – Cuts text from the cursor until the end of the line
  • CTRL + Y – Pastes text
  • CTRL + E – Move cursor to end of line
  • CTRL + A – Move cursor to the beginning of the line
  • ALT + F – Jump forward to next space
  • ALT + B – Skip back to previous space
  • ALT + Backspace – Delete previous word
  • CTRL + W – Cut word behind cursor
  • CTRL + Insert – Copy selected text
  • Shift + Insert – Pastes text into terminal

sudo !!

If you don’t know it yet, sudo (super user do) is the prefix to run a command with an elevated privilege (like Run As Administrator in Windows).

sudo !! is a useful trick to save you from retyping the previous command that is “permission denied”.

For example, imagine you have entered the following command:

$ apt-get install ranger

The words “Permission denied” will appear unless you are logged in with elevated privileges.

Now, instead of typing this

$ sudo apt-get install ranger

Just type…

$ sudo !!

… and the previous denied command will be executed with sudo privileges.

Pausing Commands And Running Commands In The Background

I have already written a guide showing how to run terminal commands in the background.

So what is this tip about?

Imagine you have opened a file in nano as follows:

$ sudo nano abc.txt

Halfway through typing text into the file you realise that you quickly want to type another command into the terminal but you can’t because you opened nano in foreground mode.

You may think your only option is to save the file, exit nano, run the command and then re-open nano.

All you have to do is press CTRL + Z and the foreground application will pause and you will be returned to the command line. You can then run any command you like and when you have finished return to your previously paused session by entering “fg” into the terminal window and pressing return.

An interesting thing to try out is to open a file in nano, enter some text and pause the session. Now open another file in nano, enter some text and pause the session. If you now enter “fg” you return to the second file you opened in nano. If you exit nano and enter “fg” again you return to the first file you opened within nano.

Use nohup To Run Commands After You Log Out Of An SSH Session

The nohup command is really useful if you use the ssh command to log onto other machines.

So what does nohup do?

Imagine you are logged on to another computer remotely using ssh and you want to run a command that takes a long time and then exit the ssh session but leave the command running even though you are no longer connected then nohup lets you do just that.

For example, if I started downloading a large file on a remote host using ssh without using the nohup command then I would have to wait for the download to finish before logging off the ssh session and before shutting down the laptop.

To use nohup all I have to type is nohup followed by the command as follows:

$ nohup wget http://mirror.is.co.za/mirrors/linuxmint.com/iso//stable/17.1/linuxmint-17.1-cinnamon-64bit.iso &

Running A Linux Command ‘AT’ A Specific Time

The ‘nohup’ command is good if you are connected to an SSH server and you want the command to remain running after logging out of the SSH session.

Imagine you want to run that same command at a specific point in time.

The ‘at’ command allows you to do just that. ‘at’ can be used as follows.

$ at 10:38 PM Fri
at> cowsay 'hello'
at> CTRL + D

The above command will run the program cowsay at 10:38 PM on Friday evening.

The syntax is ‘at’ followed by the date and time to run.

When the at> prompt appears enter the command you want to run at the specified time.

The CTRL + D returns you to the cursor.

There are lots of different date and time formats and it is worth checking the man pages for more ways to use ‘at’.

Man Pages

Man pages give you an outline of what commands are supposed to do and the switches that can be used with them.

The man pages are kind of dull on their own. (I guess they weren’t designed to excite us).

You can however do things to make your usage of man more appealing.

$ export PAGER=most

You will need to install ‘most; for this to work but when you do it makes your man pages more colourful.

You can limit the width of the man page to a certain number of columns using the following command:

$ export MANWIDTH=80

Finally, if you have a browser available you can open any man page in the default browser by using the -H switch as follows:

$ man -H 

Note this only works if you have a default browser set up within the $BROWSER environment variable.

Use htop To View And Manage Processes

Which command do you currently use to find out which processes are running on your computer? My bet is that you are using ps and that you are using various switches to get the output you desire.

Install htop. It is definitely a tool you will wish that you installed earlier.

htop provides a list of all running processes in the terminal much like the file manager in Windows.

You can use a mixture of function keys to change the sort order and the columns that are displayed. You can also kill processes from within htop.

To run htop simply type the following into the terminal window:

$ htop

Navigate The File System Using ranger

If htop is immensely useful for controlling the processes running via the command line then ranger is immensely useful for navigating the file system using the command line.

You will probably need to install ranger to be able to use it but once installed you can run it simply by typing the following into the terminal:

$ ranger

The command line window will be much like any other file manager but it works left to right rather than top to bottom meaning that if you use the left arrow key you work your way up the folder structure and the right arrow key works down the folder structure.

It is worth reading the man pages before using ranger so that you can get used to all keyboard switches that are available.

Cancel A Shutdown

So you started the shutdown either via the command line or from the GUI and you realised that you really didn’t want to do that.

$ shutdown -c

Note that if the shutdown has already started then it may be too late to stop the shutdown.

Another command to try is as follows:

$ pkill shutdown

Killing Hung Processes The Easy Way

Imagine you are running an application and for whatever reason it hangs.

You could use ps -ef to find the process and then kill the process or you could use htop.

There is a quicker and easier command that you will love called xkill.

Simply type the following into a terminal and then click on the window of the application you want to kill.

$ xkill

What happens though if the whole system is hanging?

Hold down the alt and sysrq keys on your keyboard and whilst they are held down type the following slowly:


This will restart your computer without having to hold in the power button.

Download Youtube Videos

Generally speaking most of us are quite happy for Youtube to host the videos and we watch them by streaming them through our chosen media player.

If you know you are going to be offline for a while (i.e. due to a plane journey or travelling between the south of Scotland and the north of England) then you may wish to download a few videos onto a pen drive and watch them at your leisure.

All you have to do is install youtube-dl from your package manager.

You can use youtube-dl as follows:

$ youtube-dl url-to-video

You can get the url to any video on Youtube by clicking the share link on the video’s page. Simply copy the link and paste it into the command line (using the shift + insert shortcut).

Download Files From The Web With wget

The wget command makes it possible for you to download files from the web using the terminal.

The syntax is as follows:

$ wget path/to/filename

For example:

$ wget http://sourceforge.net/projects/antix-linux/files/Final/MX-krete/antiX-15-V_386-full.iso/download

There are a large number of switches that can be used with wget such as -O which lets you output the filename to a new name.

In the example above I downloaded  AntiX Linux from Sourceforge. The filename antiX-15-V_386-full.iso is quite long. It would be nice to download it as just antix15.iso. To do this use the following command:

$ wget -O antix.iso http://sourceforge.net/projects/antix-linux/files/Final/MX-krete/antiX-15-V_386-full.iso/download

Downloading a single file doesn’t seem worth it, you could easily just navigate to the webpage using a browser and click the link.

If however you want to download a dozen files then being able to add the links to an import file and use wget to download the files from those links will be much quicker.

Simply use the the -i switch as follows:

$ wget -i /path/to/importfile

For more about wget visit http://www.tecmint.com/10-wget-command-examples-in-linux/.

Monitor your server performance with top command

When your machine is running slow and you want to find out what are the causes or what processes are eating a lot of resource, just type top in the command line:

$ top

This will bring up a real-time resource monitoring screen showing CPU usage, disk I/O bottlenecks, RAM usage of every running process and the whole system in general.

To show the full path of running processes, press “c”. To show only the processes’ names, press “c” again.

To show usage of each separate CPU core, press “1”. To show CPU usage as a total, press “1” again.

To kill a process, press “k”, type in the process’s id and press “ENTER”.

You can find more control keys by pressing “h” to bring up the help document. Go back to “top” screen by pressing “ESC”.

Monitor your disk free space with df command

To know how much free space are available on your disks, type

$ df -h

-h argument tells the df command to show the size in a human readable format (2.0GB instead of 2000000000).

Monitor your disk usage of each folder with du command

To know how much space is used up by each file/folder, type

$ du -h -c -d 1 ./*
  • -h tells the command to show the size in a human readable format  (2.0GB instead of 2000000000).
  • -c tells the command to show the total size of the folder, including subfolders and files (instead of showing that folder size only)
  • -d 1 tells the command to list the size of folders and subfolders up to child level 1. You can change it to 0 or 2 or whatever you are interested in.
  • ./* tells the command to do this to all the folders and files that are the children of current folder. You can change this param to any path you want, with or without wildcard (*).

Monitor your server traffic with iftop command

To monitor in real-time how much traffic is going in and out of your server, for each external IP, and each port, type the following command

$ iftop -n -B

If you get permission denied, try running it with sudo privilege.

  • -n tells the command not to try to translate the remote host to domain names but instead leave those as IPs.
  • -B tells the command to show traffic in bytes instead of bits.

If you don’t have iftop installed in your system, you can install it

For Ubuntu users

$ apt install iftop

For Centos/Fedora users

# Install epel-release if not yet available
$ yum install epel-release
# Install iftop
$ yum install iftop

Monitor log file in real-time with watch and tail command

If you have an application that logs to a file and you want to monitor that log in real-time, type the following command

$ watch tail /path/to/log/file.log

The watch command will watch for any update in the output of the tail command and keep printing the latest tail of that log file to the terminal console.

If you want to change the number of lines to print out, change the command to

$ watch tail -n 15 /path/to/log/file.log

Remember to replace 15 with the number of lines that you want.

List all running processes with ps command

To list all running process in your system, type the following command

$ ps aux

To filter the list with only the processes that you are interested in, add a grep command

$ ps aux | grep abc | grep xyz

To count how many processes are running, add a -c argument

$ ps aux | grep abc | grep xyz -c

List all connections with netstat command

To list all connections in your system, type the following command

$ netstat -naltp

To filter the result, add a grep command. For example, to filter all http connection (port 80) that is currently open (ESTABLISHED), type the following command

$ netstat -naltp | grep :80 | grep ESTABLISHED

To count how many results matches the filter, add -c argument

$ netstat -naltp | grep :80 | grep ESTABLISHED -c
How to use nohup to execute commands in the background and keep it running after you exit from a shell promt

How to use nohup to execute commands in the background and keep it running after you exit from a shell promt

Most of the time you login into remote server via ssh. If you start a shell script or command and you exit (abort remote connection), the process/command will get killed. Sometimes a job or command takes a long time. If you are not sure when the job will finish, then it is better to leave job running in background. But, if you log out of the system, the job will be stopped and terminated by your shell. What do you do to keep job running in the background when process gets SIGHUP?

nohup command to the rescue

In these situations, we can use nohup command line-utility which allows to run command/process or shell script that can continue running in the background after we log out from a shell.

nohup is a POSIX command to ignore the HUP (hangup) signal. The HUP signal is, by convention, the way a terminal warns dependent processes of logout.

Output that would normally go to the terminal goes to a file called nohup.out if it has not already been redirected.

nohup command syntax:

The syntax is as follows

$ nohup command-name &
$ exit


$ nohup /path/to/command-name arg1 arg2 > myoutput.log &
$ exit


  • command-name: is name of shell script or command name. You can pass argument to command or a shell script.
  • &: nohup does not automatically put the command it runs in the background; you must do that explicitly, by ending the command line with an & symbol.
  • exit: after nohup and & start the command in the background, you will still have to type exit or CTRL-D to go back to bash cursor.

Use jobs -l command to list all jobs:

$ jobs -l

nohup command examples

First, login to remote server using ssh command:

$ ssh user@remote.server.com

I am going to execute a shell script called pullftp.sh:

$ nohup pullftp.sh &

Type exit or press CTRL + D to exit from remote server:

> exit

In this example, I am going to find all programs and scripts with setuid bit set on, enter:

$ nohup find / -xdev -type f -perm +u=s -print > out.txt &

Type exit or press CTRL + D to exit from remote server. The job still keeps on running after you exit.

> exit

nohup is often used in combination with the nice command to run processes on a lower priority.

Please note that nohup does not change the scheduling priority of COMMAND; use nice command for that purpose. For example:

$ nohup nice -n -5 ls / > out.txt &

As you can see nohup keep processes running after you exit from a shell. Read man page of nohup(1) and nice(1) for more information. Please note that nohup is almost available on Solaris/BSD/Linux/UNIX variants.

What’s the difference between nohup and ampersand (&)

Both nohup myprocess.out & or myprocess.out & set myprocess.out to run in the background. After I shutdown the terminal, the process is still running. What’s the difference between them?

nohup catches the hangup signal (see man 7 signal) while the ampersand doesn’t (except the shell is confgured that way or doesn’t send SIGHUP at all).

Normally, when running a command using & and exiting the shell afterwards, the shell will terminate the sub-command with the hangup signal (kill -SIGHUP <pid>). This can be prevented using nohup, as it catches the signal and ignores it so that it never reaches the actual application.

In case you’re using bash, you can use the command shopt | grep hupon to find out whether your shell sends SIGHUP to its child processes or not. If it is off, processes won’t be terminated, as it seems to be the case for you. More information on how bash terminates applications can be found here.

There are cases where nohup does not work, for example when the process you start reconnects the SIGHUP signal, as it is the case here.

Advanced topics

Existing jobs, processes

Some shells (e.g. bash) provide a shell builtin that may be used to prevent SIGHUP being sent or propagated to existing jobs, even if they were not started with nohup. In bash, this can be obtained by using disown -h job; using the same builtin without arguments removes the job from the job table, which also implies that the job will not receive the signal. Before using disown on an active job, it should be stopped by Ctrl-Z, and continued in the background by the bg command.[2] Another relevant bash option is shopt huponexit, which automatically sends the HUP signal to jobs when the shell is exiting normally.[3]

The AIX and Solaris versions of nohup have a -p option that modifies a running process to ignore future SIGHUP signals. Unlike the above-described disown builtin of bash, nohup -p accepts process IDs.[4]

Overcoming hanging

Note that nohupping backgrounded jobs is typically used to avoid terminating them when logging off from a remote SSH session. A different issue that often arises in this situation is that ssh is refusing to log off (“hangs”), since it refuses to lose any data from/to the background job(s).[5][6] This problem can also be overcome by redirecting all three I/O streams:

$ nohup ./myprogram > foo.out 2> foo.err < /dev/null &

Also note that a closing SSH session does not always send a HUP signal to depending processes. Among others, this depends on whether a pseudo-terminal was allocated or not.[7]


Terminal multiplexer

A terminal multiplexer can run a command in a separate session, detached from the current terminal, which means that if the current session ends, the detached session and its associated processes keeps running. One can then reattach to the session later on.

For example, the following invocation of screen will run somescript.sh in the background of a detached session:

screen -A -m -d -S somename ./somescript.sh &

disown command

The disown command is used to remove jobs from the job table, or to mark jobs so that a SIGHUP signal is not sent on session termination.

Here is how you can try it out:

$ pullftp.sh &
$ disown -h
$ exit

From the bash bash(1) man page:

By default, removes each JOBSPEC argument from the table of active jobs. If the -h option is given, the job is not removed from the table, but is marked so that SIGHUP is not sent to the job if the shell receives a SIGHUP. The -a option, when JOBSPEC is not supplied, means to remove all jobs from the job table; the -r option means to remove only running jobs.

at command

You can use at command to queue a job for later execution. For example, you can run pullftp.sh script to queue (one minute) later execution:

$ echo "pullftp.sh" | at now + 1 minute