Linux commands are an essential part of managing and operating Linux systems, providing users with the ability to perform a wide range of tasks from file manipulation to system monitoring. These commands can be categorized into two types: internal and external commands. Internal commands are built into the shell itself, enabling quick execution without the need for external binaries. In contrast, external commands are separate executable files located in the system’s file hierarchy. Understanding the differences between these commands, as well as knowing how to identify and use them effectively, can significantly enhance a user’s efficiency and proficiency in navigating and managing a Linux environment.
In this tutorial you will learn:
- What are internal Linux shell commands
- What are external Linux shell commands
- Examples of both types of commands
- How to identify whether a command is internal or external

| Category | Requirements, Conventions or Software Version Used |
|---|---|
| System | Linux-based operating system |
| Software | Any Linux shell (e.g., bash, zsh) |
| Other | Basic understanding of Linux commands |
| Conventions | # – requires given linux commands to be executed with root privileges either directly as a root user or by use of sudo command$ – requires given linux commands to be executed as a regular non-privileged user |
Internal vs External Linux Shell Commands
Linux commands are essential tools for system administrators and developers alike. These commands can be categorized into two main types: internal and external commands. Internal commands are built into the shell itself, meaning they do not require an external executable file to run. External commands, on the other hand, are executable files stored in the file system.
Understanding the difference between these two types of commands is crucial for efficient system management and troubleshooting. Internal commands are typically faster because they are executed directly by the shell, while external commands might involve more overhead as the shell needs to locate and execute the corresponding file.
Identifying Internal and External Commands
To determine whether a command is internal or external, you can use the type command. The type command provides information about how a command name is interpreted. Here is how you can use it:
type command_name
For example:
$ type cd
This will output: cd is a shell builtin. Indicating that cd is an internal command.
$ type ls
This will output: ls is hashed (/usr/bin/ls). Indicating that ls is an external command located in the /bin directory.

- Internal Command Example: cd: The cd command is used to change the current directory. It is an internal command because it is built into the shell.
$ cd /home/user
In this example, the cd command changes the current directory to
/home/user. Since it is an internal command, it is executed quickly by the shell without the need to search for an external executable. - External Command Example: ls: The
lscommand lists the contents of a directory. It is an external command because it is an executable file located in the file system.$ ls -l /home/user
In this example, the
lscommand lists the contents of the/home/userdirectory in long format. The shell locates thelsexecutable file in the directories listed in thePATHenvironment variable and runs it.
Top 5 Internal Commands
| Command | Description |
|---|---|
| cd | Changes the current directory. |
| echo | Displays a line of text or variable value. |
| exit | Exits the current shell session. |
| pwd | Prints the current working directory. |
| alias | Creates an alias for a command. |
Top 5 External Commands
| Command | Description |
|---|---|
| ls | Lists the contents of a directory. |
| grep | Searches for patterns in files. |
| find | Searches for files in a directory hierarchy. |
| cp | Copies files and directories. |
| mv | Moves or renames files and directories. |
Conclusion
Understanding the distinction between internal and external Linux shell commands can enhance your efficiency in using the command line. Internal commands are built into the shell and generally execute faster, while external commands are standalone executable files. Recognizing whether a command is internal or external helps in troubleshooting and optimizing script performance.