I don't care if it works on your machine! We are not shipping your machine! - Vidiu Platon
Terminal, also known as command-line interface (CLI) or console, allows you to run commands on a computer without using a graphical user interface. CLI accepts text-based inputs which then converts into functions that the operating system understands. You can use various commands, from simple ones for switching directories to more complex such as running scripts with multiple flags.
How to open Terminal
Use Spotlight search on your Mac to find it.
- Press Cmd + Space on your keyboard to open Spotlight
- Type in Terminal and hit Enter
Now add it to the Dock to reach it more easily :)
- Right-click on the Terminal icon in the Dock
- Select Options
- Select Keep in Dock
You might want to update the appearance of your Terminal to make it a bit more readable. There are quite a few options to change the color of the background, size and color of the text, cursor, and so on.
- Open Terminal
- Click Terminal in the toolbar
- Select Preferences
- Select the Profiles tab
- Select the Text tab
Change Terminal behavior
There are also various options to edit the Terminal behaviour, spread across multiple tabs: Window, Tab, Shell, Keyboard, Advanced.
For example, under the Shell tab you can specify the command that is run on startup:
- Select the Shell tab under Profiles
- Select the Run command checkbox
- In the input field, type in the command you wish to run, for example:
cd /Usersto open the Terminal positioned to the Users directory
echo $$to run the
echocommand right after the Terminal opens
Another interesting option is to close the Terminal window when the shell exits. This can be useful when you run shell commands from your project and don't want to leave the Terminal open.
- Select the Shell tab under Profiles
- From the dropdown in When the shell exits select Close the window option
- if you run the
exitcommand, the Terminal window will close
- if you run the
The Terminal is not the only app for using the command line on the Mac. There are various alternatives such as iTerm2, Hyper, Upterm and Alacritty, to name a few. Each of these comes with some differences when compared to the Terminal, often adding additional features.
A shell is a computer program that basically allows you to control your computer. You can use it to control other programs, interact with the system, or simply automate repetitive tasks. The commands can be entered directly, or read from a file called the shell script.
To access a shell you need an app that runs it, such as Terminal/iTerm2 on Mac or Command Prompt/GitBash on Windows.
There are various shell programs to choose from, like sh, bash, ksh, tcsh and zsh.
sh or Bourne Shell
- the original shell still used on UNIX systems
- very basic with a few features
bash or Bourne Again Shell
- the GNU Project's shell
- it's compatible with sh, meaning commands that work in sh also work in bash (vice-versa is not always the case)
- provides additional features and improvements over sh
zsh or Z-shell
- extended version of sh, including some bash features
- quite similar to bash but with some improvements and more customizable
- commands that work in bash work in zsh
When reading about command-line arguments, you might come across terms like flag, switch, option, argument, parameter, and so on, which are often used interchangeably.
Arguments tell the process or function to perform a different operation depending on its value. Arguments are often used in command-line programs, and they are basically options that change the behaviour of a program.
There are a couple of types of arguments:
- Arguments that take a value
- Arguments that don't take a value
- Positional arguments
Arguments can start with a single dash (-) or a double dash (--).
A flag argument usually refers to a boolean argument that by including it, it changes the behaviour of a program. If you include a flag argument its boolean value is set to true, if not, it is set to false. For example,
ls - lists all visible files and folders in the current folder, but if we add the flag
-a, making it
ls -a - it lists all visible and invisible files and folders.
In the following example command, using the
--report flag we tell the process to include/activate the report option.
--report flag included a report is generated, and without the flag it is not.
python test.py --report
Arguments that start with a double dash (--) often take an argument themselves.
For example, in a Python script we might have the
env flag that activates a different environment depending on the value we specify when including the
python test.py --env=test_environment
python test.py --env=staging_environment
For more details on arguments, read this blog post.
List of useful commands
The following list of commands works in the Terminal but might not work in other similar apps.
Directory / Folder navigation
|cd path/to/directory||Position to a directory|
|cd ..||Go back to the directory above the current one|
|cd||Go back to the root (Home) directory|
There are three basic file system permissions (also known as modes) on Unix and Unix-like systems:
- read (r)
- write (w)
- execute (x)
You can use the
chmod (short for change mode) command to change the access permissions for a system file or folder.
|man chmod||Open chmod manual in the Terminal|
|chmod +x /path/to/file||Add the executable permission for the file|
|chmod +rwx /path/to/file||Add the permissions for the file|
|chmod -rwx /path/to/file||Remove the permissions for the file|
|echo $$||Get process ID (PID) of the current terminal/tab|
grep is a command used for searching plain text.
It can be used on its own or in combination with other commands, separated by the vertical pipe symbol (
|grep "some text" file_name.txt||Searches for "some text" in the specified file|
|ps -ax | grep Appium||Display processes that contain Appium|
For more on the
grep command, see this article.
List files and folders
|ls||List all visible files and folders in the current folder|
|ls -a||List all visible and invisible files and folders in the current folder|
|ls -l||List all visible files and folders in the current folder with permissions|
List of open files
|lsof||List all open files and processes|
|lsof -i 6||List open files that use IPv6 protocol|
|lsof -p 66460||List open files and processes with PID 66460|
Open file / directory
|open directory_name||Open a directory|
|open directory_name/file_name.txt||Open a file|
|open ~/.zshrc||Open zsh resource file|
|ps -ax||Displays your and other users' processes|
Print working directory
|pwd||Display the path to the current/working directory|
Close / Quit terminal
|python some_script.py; exit||Quit Terminal right after running a command|
|id -un||Get system name|
|system_profiler||Display system information (long version)|
|system_profiler -detailLevel mini||Display system information (short version)|
|arp -a||View a list of all active devices on a local network|