Sign In
Sign In

Port Forwarding in Linux with Iptables

Port Forwarding in Linux with Iptables
Hostman Team
Technical writer
Linux Network
09.04.2025
Reading time: 10 min

Have you ever hosted a server (game or web) on your home computer and shared your IP address with friends, but no one could connect?

The issue lies in your router, which hides connected devices behind its own IP address. Everything within the router is a local network, while everything outside is a global network. However, there is no direct mediator between them, only a barrier preventing external connections.

The solution is port forwarding, a technology that directs external requests to an internal device and vice versa. In Linux operating systems, the iptables utility is used for this purpose, which will be the focus of this article.

And if you’re looking for a reliable, high-performance, and budget-friendly solution for your workflows, Hostman has you covered with Linux VPS Hosting options, including Debian VPS, Ubuntu VPS, and VPS CentOS.

The commands shown in this guide were executed on a Hostman cloud server running Ubuntu 22.04.

What Is Port Forwarding?

Port forwarding (also known as port mapping) redirects network traffic from one port to another, either through a router (hardware-level) or a firewall (software-level).

With port forwarding, devices within a local network become accessible from the global network. Without it, external requests cannot reach internal devices.

Common scenarios where port forwarding is needed:

  • Connecting to a home server (game server, surveillance cameras, data storage).
  • Hosting game servers or websites on a home PC.
  • Accessing a remote desktop.
  • Remote device management.

For example, if a server in a local network operates on port 8080, port forwarding allows it to be accessed from the global network through port 80.

Example Setup:

  1. A computer with IP 192.168.1.100 (internal/gray IP) runs a web server listening on port 8080.
  2. The computer is within a Wi-Fi router’s local network, which has an external IP 203.0.113.10 (public/white IP), listening on port 80.
  3. All global network requests to port 80 on the router are forwarded to port 8080 on the internal computer.

This setup allows us to redirect incoming traffic from the global network to the local network.

How Does Port Forwarding Work in Linux?

Linux has built-in tools for handling incoming and outgoing traffic. These tools act as a packet filtering and modification pipeline.

Port forwarding in Linux is based on NAT (Network Address Translation), configured using the iptables system utility.

What Is NAT?

NAT (Network Address Translation) is a technique that converts external requests from the global network into internal requests within the local network (and vice versa).

Technically, NAT modifies IP addresses and ports in data packets. It is not a standalone utility but a concept or approach.

There are two main types of NAT:

  • SNAT (Source NAT) – Modifies the source IP address in outgoing packets.
  • DNAT (Destination NAT) – Modifies the destination IP address in incoming packets.

While NAT protects the local network from external access, it requires port forwarding for incoming connections.

What Is Iptables and How Does It Work?

Iptables is a Linux utility used to configure NAT (and more) by modifying tables with rule chains that control traffic.

Iptables has five main rule chains:

  • INPUT – Handles incoming packets.
  • FORWARD – Handles forwarded packets.
  • OUTPUT – Handles outgoing packets.
  • PREROUTING – Handles packets before routing.
  • POSTROUTING – Handles packets after routing.

Iptables has five tables, each using specific rule chains:

  • filter – Allows or blocks packets (INPUT, FORWARD, OUTPUT).
  • nat – Modifies IP addresses and ports (OUTPUT, PREROUTING, POSTROUTING).
  • mangle – Alters packet headers (INPUT, FORWARD, OUTPUT, PREROUTING, POSTROUTING).
  • raw – Controls connection filtering (OUTPUT, PREROUTING).
  • security – Applies additional security policies (INPUT, FORWARD, OUTPUT).

The rule chains act as hooks in the packet processing pipeline, allowing iptables to implement port forwarding in Linux.

How Port Forwarding Works in Iptables

Port forwarding in iptables follows a standard packet processing flow based on three possible directions:

  • Incoming (INPUT) – Packets sent to the local system.
  • Outgoing (OUTPUT) – Packets sent from the local system.
  • Forwarded (FORWARD) – Packets routed through the system.

Incoming Packets (INPUT) Processing Order

  1. raw (PREROUTING) – Connection filtering.
  2. mangle (PREROUTING) – Packet modification.
  3. nat (PREROUTING) – Changes the destination address.
  4. If the packet is for this system, continue to INPUT processing. Otherwise, forward it.
  5. mangle (INPUT) – Final packet modification.
  6. filter (INPUT) – Packet filtering.
  7. security (INPUT) – Security policy enforcement.

Outgoing Packets (OUTPUT) Processing Order

  1. raw (OUTPUT) – Connection filtering.
  2. mangle (OUTPUT) – Packet modification.
  3. nat (OUTPUT) – Changes the destination address.
  4. filter (OUTPUT) – Final packet filtering.
  5. security (OUTPUT) – Security policy enforcement.
  6. mangle (POSTROUTING) – Final packet modification.
  7. nat (POSTROUTING) – Changes the source address.

Forwarded Packets (FORWARD) Processing Order

  1. raw (PREROUTING) – Connection filtering.
  2. mangle (PREROUTING) – Packet modification.
  3. nat (PREROUTING) – Changes the destination address.
  4. Forwarding decision is made.
  5. mangle (FORWARD) – Packet modification.
  6. filter (FORWARD) – Packet filtering.
  7. security (FORWARD) – Security policy enforcement.
  8. mangle (POSTROUTING) – Final packet modification.
  9. nat (POSTROUTING) – Changes the source address.

General Processing Order of Tables:

  1. raw
  2. mangle
  3. nat
  4. filter
  5. security

Types of Port Forwarding

Common types of port forwarding include:

  1. Local Forwarding – Redirects traffic within the same machine. Example: An application on a local server sends a request to a specific port.
  2. Interface Forwarding – Redirects traffic between different network interfaces. Example: A packet from the global network arrives on one interface and is forwarded to another.
  3. Remote Host Forwarding – Redirects traffic from a remote server to a local host. Example: A request from a remote server is forwarded to a local machine.

Each type of port forwarding is implemented using a specific set of rules in the iptables tables.

Using the Iptables Command

In most Linux distributions, the iptables utility is already installed. You can check this by querying its version:

iptables --version

If iptables is not installed, you need to install it manually. First, update the package list:

sudo apt update

Then, install it:

sudo apt install iptables -y

By default, Linux uses the ufw firewall, which automatically configures iptables. To avoid conflicts, you must stop the ufw service first:

sudo systemctl stop ufw

Then, disable it:

sudo systemctl disable ufw

Iptables Command Structure

The basic syntax of the iptables command is as follows:

iptables [TABLE] [COMMAND] [CHAIN] [NUMBER] [CONDITION] [ACTION]

In each specific command, only some of these parameters are used:

  • TABLE: The name of one of the five tables where the rule is added.
  • COMMAND: The operation to perform on a specific rule or chain.
  • CHAIN: The name of the chain where the operation is performed.
  • NUMBER: The rule number to manipulate.
  • CONDITION: The condition under which the rule applies.
  • ACTION: The transformation to be applied to the packet.

Selecting a Table

The -t flag specifies the table to operate within:

For filter:

iptables -t filter

For nat:

iptables -t nat

For mangle:

iptables -t mangle

For raw:

iptables -t raw

For security:

iptables -t security

If the -t flag is not specified, the default table is filter. The security table is rarely used.

Manipulating Rules

We can perform different operations on rules within each chain:

Add a rule to the end of a chain (-A):

iptables -A INPUT -s 192.168.123.132 -j DROP

This rule blocks incoming connections from the specified IP address.

Delete a rule by its number (-D):

iptables -D OUTPUT 7

Insert a rule at a specific position (-I):

iptables -I INPUT 5 -s 192.168.123.132 -j DROP

Replace a rule (-R):

iptables -R INPUT 5 -s 192.168.123.132 -j ACCEPT

This replaces a previously added blocking rule with an allow rule.

Flush all rules in a chain (-F):

iptables -F INPUT

Manipulating Chains

We can also perform operations on entire chains:

Create a new chain (-N):

iptables -N SOMENAME

Delete a chain (-X):

iptables -X SOMENAME

Rename a chain (-E):

iptables -E SOMENAME NEWNAME

Set default policy for a chain (-P):

iptables -P INPUT DROP

This blocks all incoming connections to the server.

Reset statistics for a chain (-Z):

iptables -Z INPUT

Setting Conditions

Each rule can have conditions for its execution:

Specify the protocol (-p):

iptables -A INPUT -p tcp -j ACCEPT

This allows incoming connections using the TCP protocol.

Specify the source address (-s):

iptables -A INPUT -s 192.168.123.132 -j DROP

Specify the destination address (-d):

iptables -A OUTPUT -d 192.168.123.132 -j DROP

Specify network interface for incoming traffic (-i):

iptables -A INPUT -i eth2 -j DROP

Specify network interface for outgoing traffic (-o):

iptables -A OUTPUT -o eth3 -j ACCEPT

Specify the destination port (--dport):

iptables -A INPUT -p tcp --dport 80 -j ACCEPT

Specify the source port (--sport):

iptables -A INPUT -p tcp --sport 1023 -j DROP

Negate a condition (!):

iptables -A INPUT ! -s 192.168.123.132 -j DROP

This blocks all incoming connections except from the specified IP address.

Specifying Actions

Each table supports different actions:

For the filter table:

  • ACCEPT – Allow the packet.
  • DROP – Block the packet.
  • REJECT – Block the packet and send a response.
  • LOG – Log packet information.
  • RETURN – Stop processing in the current chain.

For the nat table:

  • DNAT – Change the packet’s destination address.
  • SNAT – Change the packet’s source address.
  • MASQUERADE – Change the source address dynamically.
  • REDIRECT – Redirect traffic to the local machine.

Port Forwarding with Iptables

Local Port Forwarding

To redirect local traffic from one port to another:

sudo iptables -t nat -A PREROUTING -p tcp --dport 8080 -j REDIRECT --to-port 80

To remove the rule:

sudo iptables -t nat -D PREROUTING -p tcp --dport 8080 -j REDIRECT --to-port 80

Forwarding Between Interfaces

To forward port 8080 from interface eth0 to port 80 on eth1:

sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8080 -j DNAT --to-destination 10.0.0.100:80

Then, allow packet forwarding:

sudo iptables -A FORWARD -p tcp -d 10.0.0.100 --dport 80 -j ACCEPT

Forwarding to a Remote Host

To forward incoming packets to a remote server:

Enable packet forwarding in the system settings:

echo 1 > /proc/sys/net/ipv4/ip_forward

Add a port forwarding rule:

sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.100:80

Allow forwarded packets to be sent out:

sudo iptables -t nat -A POSTROUTING -p tcp -d 192.168.1.100 --dport 80 -j MASQUERADE

Alternatives to iptables for Port Forwarding

It should be noted that iptables is not the only tool for traffic management. There are several popular alternatives.

nftables

nftables is a more modern tool for managing traffic in Linux. Unlike iptables, it does not have predefined tables, and its syntax is more straightforward and concise.

Additionally, this utility uses a single command, nft, to manage all types of traffic: IPv4, IPv6, ARP, and Ethernet. In contrast, iptables requires additional commands such as ip6tables, arptables, and ebtables for these tasks.

firewalld

firewalld is a more complex traffic management tool in Linux, built around the concept of zones and services. This allows network resources to be assigned different levels of security.

The configuration of firewalld is broader and more flexible. For example, instead of manually defining rules for each port, we can specify specific services.

Additionally, firewalld provides a more interactive command-line interface, allowing real-time traffic management.

Conclusion

While there are alternatives, iptables remains the primary tool for traffic control in Linux. It provides a structured way to filter, modify, and forward packets, making it a powerful solution for managing network traffic.

Linux Network
09.04.2025
Reading time: 10 min

Similar

Linux

How to Create a Text File in Linux Terminal

In Linux, you can access and edit text files using a text editor that is designed to work with plain text. These files are not specifically coded or formatted. Choose your server now! There are several different ways to create a file in Linux. The Linux Command Line or Terminal is most likely the fastest. This is a crucial skill for any user, but especially for server administrators, who need to create text files, scripts, or configuration files quickly for their jobs. Let's proceed to the guide on four standard techniques for creating a text file on the terminal. And if you’re looking for a reliable, high-performance, and budget-friendly solution for your workflows, Hostman has you covered with Linux VPS Hosting options, including Debian VPS, Ubuntu VPS, and VPS CentOS. File Creation in Linux Can be Frustrating Sometimes Prerequisites for File Creation in Linux Ensure these prerequisites are met before generating files in a Linux environment using the command-line interface: Access to a Functional Linux System: You must either have a Linux-based operating system installed on your computer or secure access to a Linux server via SSH (Secure Shell) protocol. Operational Terminal Interface: Confirm that your terminal application is accessible and fully operational. The terminal serves as your primary gateway to executing commands. Adequate User Permissions: Verify you can create files within the chosen directory. You may need to use sudo (for directories with access restrictions) to escalate privileges. Fundamental Commands Proficiency: You must get familiar with essential commands, such as touch for file creation, echo for printing text, cat for viewing file contents, and text editors like nano, vim, or vi for editing files directly. Text Editing Utilities: Ensure your system includes text editing tools: nano for command line simplicity, vim for advanced configurations, or graphical options like gedit for user-friendly navigation. Directory Management Expertise: Develop familiarity with directory navigation commands like cd for changing the working directory and ls for listing directory contents. This knowledge streamlines your workflow and avoids potential errors. Using the touch Command Generally, we use the touch command to create empty files and change timestamps. It will create an empty file if it doesn't exist already.  To create a text file in the current directory with the touch command: Open your terminal emulator. Type the command: touch filename.txt Start with "touch" command Replace "filename" with the name you picked for the file. If the file with the same name already exists, the access and modification timestamps will be updated without affecting the content of the file. If not, a blank file with the specified name will be generated. Press Enter—if it is successful, there will be no output. Use the ls command to list the directory content and verify file creation. "LS" command is also important of you want to generate text file in Linux Using the echo Command Redirection The echo command is widely used to display text on the terminal. But its capabilities go beyond that; it may also be used to write content to a file or create an empty file. For this, combine the echo command with double redirect symbols (you can also use a single >) and the desired filename. A text file can be created by redirecting the output of the echo command to a file. See how it works: Open your terminal emulator. Type the command: echo “Your text content here” > filename.txt "Echo" command is also important in the process Replace the text in double quotations (do not delete them) with yours to add it to the file.  After you press Enter, your text will be added to the file filename.txt. It will overwrite an existing file, if there is one. Otherwise, it will just create a new one. Press Enter. To verify that the file has been created and contains the desired content, use cat command to display the content.  "Cat" command can help you to display your file you just created Using the cat Command Redirection In Linux, the cat command is mostly used to concatenate and show file contents. It can, however, also be used to generate a text document by redirecting the standard output of cat to a file. Open your terminal emulator. Type the following command: cat > filename.txt This is what you'll see after "cat" command Replace filename.txt with the name for your text file. This command instructs cat to receive input rom the terminal and to redirect it into the filename.txt. Press Enter. The terminal will be waiting for input.  Enter the text you want in the file. Press Enter after each line. Press Ctrl + D when you are done. This signals the end of input to the cat and saves the content.  Run the cat command to check that the file has been created and contains the desired content. This is how you can check how your file in Linux is created Using printf for Advanced File Creation The printf utility is a powerful alternative to echo, offering enhanced formatting options for structuring text. It allows users to create files with precisely formatted content. Open the terminal. Use printf to define the text layout, incorporating formatting elements like newlines (\n) or tabs (\t). Redirect the output to a file using the > operator. Example: printf "First Line\nSecond Line\nIndented\tThird Line\n" >  formatted_file.txt Run the cat command to inspect the file's content and ensure the formatting matches expectations. Append Without Overwriting: To add content to an existing file without overwriting its current data, replace > with the append operator >>: printf "Additional content here.\n" >> formatted_file.txt Using a Text Editor You can also create new files in linux text editors. There is always at least one integrated command-line text editor in your Linux distribution. But you can choose and install a different one according to your preferences, for example, Vim, Nano, or Emacs. Each of them has its own features and advantages. Vim vim, which stands for "Vi IMproved," is a very flexible and adaptable text editor. It is well-known for its modal editing, which allows for distinct modes for various functions like text entry, navigation, and editing. It allows split windows, multiple buffers, syntax highlighting, and a large selection of plugins for extra features. To create a text file using vim, follow the steps below: Open vim, with the desired filename as an argument. "Vim" command is one of the key steps in file creation Press i to switch to Insert mode. Start typing and editing the filename.txt.  To save and exit, press Esc to ensure that command mode is running. Type: wq (write and quit) and press Enter. Simple command to finish your work Nano nano is ideal for short adjustments and straightforward text files because it is lightweight and requires little setup. It provides support for basic text manipulation functions, search and replace, and syntax highlighting. To create a text file using nano, follow the steps below:  Run nano with the desired filename as an argument. It will open a new buffer for editing the file filename.txt. Nano is useful in you want to fix something in your text file Start typing and editing the filename.txt.  To save and exit, press Ctrl + O to write the file, confirm the filename, and then press Ctrl + X to exit Nano. Click "yes" to exit Emacs emacs is a powerful and flexible text editor that supports syntax highlighting, multiple buffers, split windows, and integration with external tools and programming languages. To create a text file using emacs, follow the steps below:  Open emacs, with the desired filename as an argument. Start typing and editing the filename.txt.  "Emacs" is more flexible text editor To save and exit, press Ctrl + X, followed by Ctrl + S to save the file, and then Ctrl + X, followed by Ctrl + C to exit Emacs. Note: If a message states that "VIM command not found", "nano command not found" or "emacs command not found" in Linux, it typically means that the vim, nano or emacs text editor is not installed on the system, or it's not included in the PATH environment variable, which is a list of directories where the operating system looks for executable files. Don't forget to install necessary command in Linux To resolve this, install the text editor first using the command:  apt-get install vim apt-get install nano  apt-get install emacs Gedit An intuitive text editor that supports working with plain text and has syntax highlighting for programming languages. A straightforward graphical interface makes it usable for various tasks, from quick edits to complex document preparation. Open the Gedit Application: Launch Gedit either through the applications menu or by executing the following command in the terminal: gedit example.txt Gedit will create a new file if the specified one does not exist. Input Your Text: Type or paste your desired content into the editor. Save the File: Save your work with Ctrl + S or select File > Save. If creating a new file, specify a filename and a location. Verify: Return to the terminal and confirm the file exists with the ls command or review its content with cat. Linux File Creation Recommendations Ensure you have sufficient permissions to create files in the target directory. If they are insufficient, consider working in a directory where you have full rights (or elevate privileges with sudo). Check if a file with the identical name is already present before using the > operator, as the command will overwrite existing content. To prevent data loss, opt for the append operator >>. Familiarize yourself with the printf, echo, and text editors like vim or nano. These tools will help you reduce errors when working with files in Linux, as well as boost productivity. Use printf for creating files requiring structured content, such as configuration files or scripts with precise formatting needs. Choose your server now! Conclusion Now you have acquainted yourself with the fundamental skill of creating a file in Linux using the terminal! Using the Linux command line, several fast and efficient methods exist to create and manage text files. Apply several techniques to meet a different requirement using the touch, echo, cat, printf commands, or text editors like vim, nano, gedit, or emacs. Users can select the method that sufficiently meets their requirements, such as creating empty files, appending text, or significantly modifying material. In summary, any of these methods enable Linux users to easily and quickly handle text files straight from the command line. Frequently Asked Questions (FAQ) How do I create an empty text file in Linux?  The standard command is touch. Simply run: touch filename.txt This creates a blank file immediately. How do I create a file and add content at the same time?  You can use the echo command with the redirection operator (>). echo "Hello World" > filename.txt This creates the file and puts "Hello World" inside it. How do I create and open a file for editing?  Use a terminal text editor like nano or vi. When you run: nano filename.txt Linux will open a blank editor screen. Once you type your text and save (Ctrl+O in nano), the file is created on your disk. What is the fastest way to create a file?  The redirection symbol alone is the quickest method for creating an empty file:> filename.txt This tells the shell to redirect "nothing" into a new file, creating it instantly. How do I create a large file for testing?  Use the fallocate command. For example, to create a 1GB file instantly:fallocate -l 1G bigfile.img How do I view the content of a text file?  Use the cat command to print the text to your terminal: cat filename.txtFor longer files, use less filename.txt to scroll through pages.
21 January 2026 · 10 min to read
Linux

Creating Symbolic Links in Linux: A Step-by-Step Tutorial

Symlinks, also known as symbolic links, are like shortcuts in the Linux world. They allow you to create a new name (or link) that points to another file, directory, or any object within the file system. Their primary advantage lies in reducing redundancy by avoiding the need for multiple copies of the same file. When you have a symlink, changes made to the original file reflect across all its symbolic links. This eliminates the hassle of updating numerous copies individually. Additionally, symlinks offer a flexible way to manage access permissions. For instance, different users with directories pointing to subsets of files can limit visibility beyond what standard file system permissions allow. In essence, symlinks are indispensable for efficient file management and organization, streamlining updates and access control in complex systems. Prerequisites To follow this tutorial, you will need: A cloud server, virtual machine or computer running a Linux operating system. On Hostman, you can deploy a server with Ubuntu, CentOS or Debian in under a minute. Creating Symbolic Links with the ln Command The ln command is used to create symbolic links in Linux. Follow these steps: Open a terminal window. Navigate to the directory where you want to create the symbolic link. Use the following command syntax to create a symlink: ln -s /path/to/source /path/to/symlink Replace /path/to/source with the actual path of the file or directory you want to link, and /path/to/symlink with the desired name/location of the symlink. Understanding the ln Command Options The ln command offers various options to customize symlink creation:  -s: Creates a symbolic link.  -f: Overwrites an existing symlink.  -n: Treats symlink targets as normal files. Explore these options based on your linking needs. Creating Symbolic Links to Files To create a symlink to a file, use the ln command with the -s option. Here's an example of how you can create a symbolic link to a file using the ln command. The command below creates a symbolic link named symlink_file in the current directory, pointing to the file /path/to/file: ln -s /path/to/file /path/to/symlink_file Replace /path/to/file with the actual file path and /path/to/symlink_file with the desired symlink name. In this example, the file path is absolute. You can also create a symbolic link with a relative path. However, keep in mind that for the symlink to work correctly, anything accessing it must first set the correct working directory, or the link may appear broken. Creating Symbolic Links to Directories You can use the ln command to create a symbolic link that points to a directory. For instance, the command below creates a symbolic link called symlink_directory in the current directory, which points to the directory /path/to/directory: ln -s /path/to/directory /path/to/symlink_directory This command creates a symbolic link named symlink_directory in your current location, linking it to the /path/to/directory directory. Forcefully overwrite a symbolic link You can use the -f flag with the ln command. For example, if the path in a symlink is incorrect due to a typo or if the target has moved, you can update the link like this: ln -sf /path/to/new-reference-dir symlink_directory Using the -f flag ensures that the old symlink's contents are replaced with the new target. It also automatically removes any conflicting files or symlinks if there's a conflict. If you attempt to create a symlink without the -f flag and the symlink name is already in use, the command will fail. Verifying Symbolic Links You can display the contents of a symlink using the ls -l command in Linux: ls -l symlink_directory The output will show the symlink and its target: symlink_file -> /path/to/reference_file Here, symlink_file is the name of the symlink, and it points to the file /path/to/reference_file. ls -l /path/to/symlink The output will show the symlink and its target. Symbolic Link Best Practices Use descriptive names for symbolic links. Avoid circular links to prevent system confusion. Update symlinks if the target's location changes. Use Cases for Symbolic Links Managing Configuration Files: Linking configuration files across systems. Version Control: Symbolic linking common libraries for development projects. Data Backup: Creating symbolic links to backup directories. Potential Pitfalls and Troubleshooting Permission Issues: Ensure proper permissions for source and symlink. Broken Links: Update symlinks if target files are moved or deleted. Cross-Filesystem Links: Symlinks may not work across different filesystems. Conclusion Symlinks are valuable for streamlining file management and system upkeep. They simplify updates across multiple applications sharing a common file, reducing maintenance complexity. They also offer an alternative to directories like /etc, often requiring root access for file modifications. Developers find symlinks useful for transitioning between local testing files and production versions seamlessly. By following this tutorial, you've mastered the art of creating symbolic links in Linux. Leverage symlinks for efficient file management and customization. By the way, with Hostman, you can run your workloads on efficient NL VPS that support low latency for EU-based users. Check this out, we have plenty of budget VPS hosting options for your projects. Frequently Asked Questions (FAQ) How do you create a symbolic link in Linux?  Use the ln command with the -s flag. The syntax is ln -s [path_to_target] [path_to_link]. For example: ln -s /var/www/html/mysite ~/mysite-shortcut. What is an example of a symlink?  A desktop shortcut is the most common example. It is a small file that points to a program or document stored elsewhere on your drive, allowing you to open it without moving the original file. How do I find symbolic links in Ubuntu?  To see links in your current directory, run ls -la and look for files marked with an l permission (e.g., lrwxrwxrwx). To search for all symlinks in a directory and its subfolders, use find . -type l. How do I remove a symbolic link?  You can remove a symlink just like a regular file using rm [link_name] or unlink [link_name]. This deletes the link but leaves the original file untouched. What is the difference between a hard link and a symbolic (soft) link?  A symbolic link points to the location of a file (like a shortcut). If the original file is deleted, the link breaks. A hard link points to the actual data on the disk; even if you delete the original file name, the data remains accessible through the hard link.
19 January 2026 · 6 min to read
Linux

Linux Keyboard Shortcuts: Top Combinations for Users

Keyboard shortcuts in Linux are a great tool that can help you work more efficiently. Instead of using the mouse and navigating the menus, you can often press a couple of buttons to get you to the same result much quicker. Linux operating systems support a wide range of these shortcuts, or hotkeys. It’s important to note that each OS can have specific hotkeys that might not work in other distributions. However, you can fix that as users can add new or modify existing combinations in their system settings. Choose your server now! In this article, we will cover universal key combinations that are universal across different desktop environments. Most of the Linux hotkeys we examine are focused on working with the terminal. The commands in this article sometimes use the Super key, which corresponds to the Windows key in Windows OS or the Cmd key in macOS. For example, the shortcut to switch keyboard layouts Super + Space in Linux is similar to Windows + Space or Cmd + Space. Basic Linux Shortcuts Let’s start with basic general-purpose shortcuts. They help perform repetitive tasks more quickly. Alt + Tab or Super + Tab: Switches between windows. Similar to the function in Windows and other OSes. Super + Space: Switches between multiple keyboard layouts. Super + A: Opens the applications menu (usually located in the bottom left corner). F2: Used to rename files. Navigate to the file, click it once, then press F2 to rename. Ctrl + Alt + T: One of the most important and popular Linux shortcuts that opens the terminal window. Alt + F2: Opens a command prompt window in the center of the screen, where you can run a command or open a program. Super + D: Minimizes all windows to show the desktop. Ctrl + Alt + Del: Brings up a prompt with “Cancel” and “Log Out” options. The system logs out automatically if no selection is made within 60 seconds. These combinations help any specialist work more efficiently in Linux. But let’s move on to the more useful terminal-related hotkeys. Linux Terminal Shortcuts The terminal in Linux is the primary tool for interacting with the command shell. Below are terminal hotkeys that will help you work more efficiently. Terminal Window Management These shortcuts help open, switch, and close terminal tabs and windows quickly: Ctrl + Shift + Q: Completely closes the terminal window. Ctrl + Shift + T: Opens a new terminal tab. Ctrl + Shift + W: Closes the current terminal tab (or window if only one tab is open). Ctrl + Shift + D: Detaches the terminal tab into a separate window. Ctrl + PgUp / PgDown: Switches between terminal tabs (previous/next). Cursor Movement in a Line Linux users primarily use the keyboard in the terminal. To avoid switching to the mouse, here are some shortcuts for faster cursor navigation: Ctrl + A (or Home): Moves the cursor to the beginning of the line. Ctrl + E (or End): Moves the cursor to the end of the line. Ctrl + XX: Quickly moves the cursor to the beginning of the line; using it again returns it to the original position. Ctrl + → / ← or Alt + F / B: The first pair moves the cursor one word forward or backward. The second pair does the same using the Alt key. Input and Editing In addition to quickly moving the cursor along the line, you can also simplify input and editing of commands.  TAB: One of the main hotkeys in the Linux terminal, used for auto-completing commands or file paths. Pressing once completes the command; pressing twice suggests multiple completion options if available. Ctrl + T: Swaps the last two characters before the cursor. Alt + T: Similar to the previous shortcut but swaps the last two words before the cursor. Alt + Backspace: Deletes the word before the cursor. Alt + D: Deletes all characters after the cursor up to the next space. Alt + U / Alt + L: The first changes all characters to the right of the cursor to uppercase; the second to lowercase. Clipboard Operations These shortcuts allow interaction with the clipboard in the terminal: copying, cutting, or pasting parts of a line or the entire line. Ctrl + W: Deletes the word before the cursor. Ctrl + U: Deletes everything from the cursor to the beginning of the line. Ctrl + K: Deletes everything from the cursor to the end of the line. Ctrl + Y: Pastes the last deleted text from the clipboard using one of the three commands above. Command History Navigation Hotkeys also help interact with the command history in the terminal. This is useful when searching for previously used commands. To view the list of executed commands, use: history To quickly find and execute a previously used command, use the shortcuts below: Ctrl + R: Opens a search prompt to find a previously used command. Press Enter to run it, or Esc to edit or exit. Ctrl + O: Executes the command found using the shortcut above. Alt + <: Loads the first command from the command history. Screen Output Management The following shortcuts control the amount of information displayed in the terminal window and help focus on specific data even during a running process. Ctrl + C: Sends the SIGINT signal to the active process, immediately interrupting it. Ctrl + D: An alternative to exit, used to close the terminal. Often used in SSH sessions to disconnect from a remote host. Ctrl + Z: Suspends the active process and sends it to the background. Use the fg command to bring it back. Use jobs to list background processes. Ctrl + L: An alternative to the clear command, clears the terminal screen. Ctrl + S / Ctrl + Q: Ctrl + S pauses the terminal output; Ctrl + Q resumes it. Useful for stopping the screen output temporarily to examine or copy information. Adding and Modifying Hotkeys A Linux user may find that some combinations do not work or are missing entirely. Hotkeys may differ depending on the distribution as each system includes a default list of predefined shortcuts. However, in most Linux environments, users can create new shortcuts or modify existing ones.  Use Super + A to open the application menu. Use the search bar to find and open Settings. In the opened window, find and go to the Devices tab. Go to the Keyboard section. On the right side, a list of default hotkeys will appear. Click on any command to open the editing window and assign a new shortcut. If the desired command is not listed, you can add a custom one by clicking the + at the bottom. Enter its name, the command to execute, and the key combination. Choose your server now! Conclusion This article reviewed the main Linux hotkeys that simplify and speed up user workflow. It’s important to note that this is not a complete list. In addition to those listed, there are other combinations that cover different functionalities in Linux distributions. And if you’re looking for a reliable, high-performance, and budget-friendly solution for your workflows, Hostman has you covered with Linux VPS Hosting options, including Debian VPS, Ubuntu VPS, and VPS CentOS. Frequently Asked Questions (FAQ) What are the common shortcut keys for Linux?  While they vary by desktop environment (GNOME, KDE, etc.), standard global shortcuts include: Ctrl+Alt+T: Open a new Terminal window. Alt+Tab: Switch between open applications. Super Key (Windows Key): Open the Activities overview or Application menu. Alt+F4: Close the current window. What are the Linux shortcut keys for the terminal?  Terminal shortcuts differ from standard text editors. Key commands include: Ctrl+Shift+C / V: Copy and Paste text (standard Ctrl+C/V won't work). Ctrl+C: Interrupt (kill) the currently running process. Ctrl+L: Clear the terminal screen. Ctrl+A / Ctrl+E: Jump the cursor to the start or end of the line. How to set keyboard shortcuts in Linux?  Open your system Settings and select Keyboard. Scroll to the "Keyboard Shortcuts" section (sometimes under "View and Customize Shortcuts"). Here you can modify existing keys or add a custom shortcut by defining a command and pressing the desired key combination. How to use shortcuts on Linux?  Simply press the modifier keys (like Ctrl, Alt, or Super) and the action key simultaneously. Note that Linux shortcuts are case-sensitive regarding the Shift key; for example, Ctrl+c is different from Ctrl+Shift+C.
16 January 2026 · 7 min to read

Do you have questions,
comments, or concerns?

Our professionals are available to assist you at any moment,
whether you need help or are just unsure of where to start.
Email us
Hostman's Support