Screen Command Examples: Get Control of Linux / Unix Terminal

by SathiyaMoorthy on July 6, 2010

Screen command offers the ability to detach a long running process (or program, or shell-script) from a session and then attach it back at a later time.

When the session is detached, the process that was originally started from the screen is still running and managed by the screen. You can then re-attach the session at a later time, and your terminals are still there, the way you left them.

In this article, let us review the how to manage the virtual terminal sessions using screen command with examples.

Screen Command Example 1: Execute a command (or shell-script), and detach the screen

Typically you’ll execute a command or shell-script as shown below from the command.

$ unix-command-to-be-executed

$ ./unix-shell-script-to-be-executed

Instead, use the screen command as shown below.

$ screen unix-command-to-be-executed

$ screen ./unix-shell-script-to-be-executed

Once you’ve used the screen command, you can detach it from the terminal using any one of the following method.

Screen Detach Method 1: Detach the screen using CTRL+A d

When the command is executing, press CTRL+A followed by d to detach the screen.

Screen Detach Method 2: Detach the screen using -d option

When the command is running in another terminal, type the command as following.

$ screen -d SCREENID

Screen Command Example 2: List all the running screen processes

You can list all the running screen processes using screen -ls command.

For example:

On terminal 1 you did the following:

$ screen ./myscript.sh

From terminal 2 you can view the list of all screen processes. You can also detach it from terminal 2 as shown below.

$ screen -ls
There is a screen on:
	4491.pts-2.FC547	(Attached)
1 Socket in /var/run/screen/S-sathiya.

$ screen -d 4491.pts-2.FC547
[4491.pts-2.FC547 detached.]

Screen Command Example 3: Attach the Screen when required

You can attach the screen at anytime by specifying the screen id as shown below. You can get the screen id from the “screen -ls” command output.

$ screen -r 4491.pts-2.FC547

Screen Command Usage Scenario 1

When you have access to only one terminal, you can use screen command to multiplex the single terminal into multiple, and execute several commands. You might also find it very useful to combine the usage of screen command along with the usage of SSH ControlMaster.

Screen Command Usage Scenario 2

When you are working in a team environment, you might walk over to your colleagues desk and get few things clarified. At that time, if needed, you can even start some process from their machine using screen command and detach it when you are done. Later when you get back to your desk, you can login and attach the screen back to your terminal.


Linux Sysadmin Course Linux provides several powerful administrative tools and utilities which will help you to manage your systems effectively. If you don’t know what these tools are and how to use them, you could be spending lot of time trying to perform even the basic administrative tasks. The focus of this course is to help you understand system administration tools, which will help you to become an effective Linux system administrator.
Get the Linux Sysadmin Course Now!

If you enjoyed this article, you might also like..

  1. 50 Linux Sysadmin Tutorials
  2. 50 Most Frequently Used Linux Commands (With Examples)
  3. Top 25 Best Linux Performance Monitoring and Debugging Tools
  4. Mommy, I found it! – 15 Practical Linux Find Command Examples
  5. Linux 101 Hacks 2nd Edition eBook Linux 101 Hacks Book

Bash 101 Hacks Book Sed and Awk 101 Hacks Book Nagios Core 3 Book Vim 101 Hacks Book

{ 12 comments… read them below or add one }

1 Psychokiller July 6, 2010 at 4:41 am

Why not tmux instead?

http://tmux.sourceforge.net/

It might seem a clone at first, but definitely better after some time…

2 RO July 6, 2010 at 6:20 am

A really huge advantage with using screen (or VNC as I more commonly do), is that when doing work that must not be interrupted, such as an installation or complex update, and your connection may be erratic, you can work from a screen session on a more reliable server, such as inside a corporate data center. That way, if your PC loses its connection, your work is not lost, and you do not face the tedious process of a backout/restart – instead, you just re-connect to your still-running screen session. That approach has saved me a lot of grief over the years in supporting important business applications.

3 Lakshmanan July 6, 2010 at 10:54 pm

Hi,
There is another important usage of screen command, which is sharing a session between multiple users.
Here is the step to achieve that:

* The screen executable has to setuid
chmod u+s /usr/bin/screen
* Launch a screen session
screen
Type ctrl + a and : ( You will get a prompt at the bottom of the screen to type screen commands)
Type “multiuser on” ( We enabled multiuser session ).
Press ctrl + a and : again.
Type aclchg user5 -w “#” ( username is the name of the user to whom we have to share with. -w is to disable write permission to the user )

Now login as user5 and type
screen -x lakshmanan/

Now the user5 will be able to see what the user lakshmanan is doing in the screen.

4 Dave July 7, 2010 at 8:49 pm

So, is this isolated to a per user instance? If I log in as bob, then log into the same machine as sam, does sam get bob’s screen activity when doing screen -ls?

Also if I sudo to root, does root own the screen instance. If bob sudos to root, then sam logs in and sudos to root, could sam see the items that bob started after sudo’ing, or is it on a per sudo basis?

5 Jim Plush July 13, 2010 at 10:07 am

you can also name the screen so when you’re doing screen -ls or screen -r you can use a simple name

screen -S jimtest

screen -r jimtest

6 Jeremy Impson August 9, 2010 at 11:41 am

In general I recommend against starting screen like “screen ./unix-command”. When the unix-command exits, the controlling screen will also exit. This will prevent you from seeing any errors, warnings, or output messages. Instead, run “screen” by itself which will cause it to spawn a subshell prompt, then run “unix-command” in the subshell. I do this as my default behaviour so I don’t have to think about whether I need the screen to persist or not.

My logic is that since most things you want to run in screen are long-running tasks that you don’t want interrupted, it’s usually true that you want to see what messages it left on the terminal, especially if it crashed or was killed.

The downside of this approach is that you can’t start screen sessions programmatically (say, at boot). That hasn’t been a problem for me, but as a work around I suppose you could write a shell script that runs your command then blocks on input (“read X”), then run that script as the article originally describes.

7 HakunX3 November 9, 2010 at 9:22 am

Thank you for a great blog. I have a question.
How can we see exactly the command (name, arguments, etc) which is being handled by screen instead of screen ID? If so, I don’t have to attempt to attach into all ID to find expected handled command.

8 Gaurav January 8, 2011 at 5:36 pm

Hi,

I want to group 10 unix commands in one shell script which while invoked can run these 10 jobs in parallel, as one job serves the input to the other.

So can I use “screen” command to open a new window each time running a job? and if yes then how should i handle the authentication as it need username and password at every login.

thanks in advance.

9 sage May 4, 2011 at 1:28 am

thanks for this great article actually it helped me a lot to understand this easy and powerful unix command

10 Anton April 7, 2012 at 1:48 am

Nice. Thank you.

11 surendra October 15, 2012 at 6:58 am

Thanks a lot

12 Navnath November 21, 2012 at 7:10 pm

It’s really nice read this 101 hacks..more useful at time of administration
Thanks

Leave a Comment

Previous post:

Next post: