Showing posts with label Terminal. Show all posts
Showing posts with label Terminal. Show all posts

Wednesday, March 25, 2026

What is a Shell in Linux?

Learn what is a shell in Linux, your shortcut to a successful career with Linux and open source software
Photo by Content Pixie on Unsplash

Commonly mentioned in the Linux (and systems administration) world is the word shell. But what is it?

A shell in the context of Linux is a user interface that allows users to interact with the operating system. It provides a way to execute commands, run programs, and manage files from a command-line interface (CLI) instead of a graphical user interface (GUI). 

Types of Shells

There are several types of shells available in Linux, each with its own features. The most common are listed below.

Bash

The Bourne Again SHell, the default shell for many Linux distributions, known for its rich feature set and scripting capabilities.

Zsh

Z Shell, an extended version of Bash with enhanced features such as improved auto-completion and globbing.

Fish

Friendly Interactive SHell, designed for user-friendliness, with syntax highlighting and automatic suggestions.

Tcsh

An enhanced version of the C shell (csh), offering command-line editing and job control. |

Key Functions of a Shell

Let's review why a shell exists in the first place.

Command Execution

You can run commands to perform tasks such as file manipulation, program execution, and system monitoring.

Scripting

Shells allow users to write scripts to automate repetitive tasks, making system administration more efficient.

Environment Management

Users can set and manage environment variables, affecting how processes behave.

Job Control

You can manage running processes, including background tasks and foreground processes.

How to Access the Shell

So how does one access a shell in Linux?

Open the Terminal

You can typically find the terminal in the applications menu or by using a shortcut like `Ctrl + Alt + T`, using the mouse (click on the terminal icon) or in Gnome, press the Super key -> terminal to start it.

Command Line Interface

Once open, you will see a command prompt where you can type commands.

Basic Commands

Here are some basic commands everyone should know while using the shell.

  • ls Lists files and directories.
  • cd [directory]: Changes the current directory.
  • cp [source] [destination]: Copies files or directories.
  • mv [source] [destination]: Moves or renames files or directories.
  • rm [file]: Deletes files.

What to learn next

We recommend learning Bash next. Bash is the default shell in most Linux distros, and also default on enterprise Linux distributions such as Ubuntu or RHEL. 

Conclusion

The shell is an essential component of Linux, giving users powerful functionalities for interaction without needing a graphical interface. Understanding how to use the shell can greatly enhance productivity and system control. Whether you're a beginner or advanced user, getting comfortable with the shell will improve your efficiency in managing a Linux environment.

Monday, March 2, 2026

Using WebDAV on Linux

Learn to use WebDAV, a networking tool to mount filesystems, a great option for collaborative environments
Photo by Philipp Katzenberger on Unsplash
WebDAV (Web Distributed Authoring and Versioning) is an extension of the HTTP protocol that facilitates collaborative editing and management of files on remote web servers. It provides a framework for users to create, change, and move documents on a server, enabling various functionalities crucial for web collaboration.

Key Features

File Management

WebDAV allows users to manage files on a server, including creating, editing, deleting, and moving files.

Collaborative Editing

Multiple users can edit the same document simultaneously, helping in teamwork and collaboration.

Locking Mechanisms

To prevent conflicts, WebDAV supports file locking, which ensures that only one user can edit a document at a time.

Metadata Support

Users can attach metadata to web resources, enhancing information management.

Cross-Platform Compatibility

Compatible with various operating systems and applications, allowing seamless integration.

Deploying WebDAV

So let's see how to deploy and use WebDAV

1. Install davfs2

Install from your package manager (in Ubuntu it's named davfs2) or download the latest version of davfs2 from the davfs2 download page.

2. Configure the davfs2.conf file.

Make sure the following properties in the file are configured as shown below:if_match_bug 1 delay_upload 0 use_locks 0

3. Create the mount point.mkdir

$ sudo mkdir /mnt/dav

4. Mount a share in the dav directory on your server.

For example, to set up a WebDAV connection to dotcms.org at the mount point /mnt/dav on your local host, use the following command:

mount -t davfs http://<IP>/webdav/live/1 /mnt/dav

You will then be prompted for your username and password which will give you access to your WebDAV server.

Unmounting

You must manually unmount the WebDAV folders when you are finished:
$ sudo umount /mnt/dav

Common Use Cases

Content Management Systems (CMS)

WebDAV is often used in CMSs for file management and editing.

Cloud Storage Solutions

Many cloud storage services use WebDAV for file access and editing.

Version Control

WebDAV can be integrated with version control systems to manage document versions effectively. Today, this would be more common to host documents (think Word, Excel, etc) than to replace Git.

Conclusion

WebDAV enhances the capabilities of web servers by providing a structured way to deal with resources, making it an essential tool for collaborative environments.

Monday, February 23, 2026

Using the ip command in Linux

Why you have to stop using ifconfig and start using ip, the modern method for configuring a Linux network interface.
Photo by Tianyi Ma on Unsplash

For a long time, the ifconfig command was the default method for configuring a network interface. It served Linux users well, but networking is complex, and the commands to configure it must be robust. The ip command is the new default networking command for modern systems, and in this article, I'll show you how to use it.

The ip command is functionally organized on two layers of the OSI networking stack: Layer 2 (data link layer) and Layer 3 (network or IP layer). It does all the work in the old net-tools package.

Installing ip

The ip command is included in the iproute2util package. It's probably already included in your Linux distribution. If it's not, you can install it from your distro's software repository.

Comparing ipconfig and ip usage

The ip and ipconfic commands can be used to configure a network interface, but they do things differently. I'll compare how to do common tasks with the old (ipconfig) and new (ip) commands.

View network interface and IP address

If you want to see the IP address of a host or view network interface information, the old ifconfig command, with no arguments, provides a good summary:

$ ifconfig
eth0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
       ether bc:ee:7b:5e:7d:d8  txqueuelen 1000  (Ethernet)                                                       
       RX packets 0  bytes 0 (0.0 B)
       RX errors 0  dropped 0  overruns 0  frame 0
       TX packets 0  bytes 0 (0.0 B)
       TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
       inet 127.0.0.1  netmask 255.0.0.0
       inet6 ::1  prefixlen 128  scopeid 0x10<host>
       loop  txqueuelen 1000  (Local Loopback)
       RX packets 41  bytes 5551 (5.4 KiB)
       RX errors 0  dropped 0  overruns 0  frame 0
       TX packets 41  bytes 5551 (5.4 KiB)
       TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
       inet 10.1.1.6  netmask 255.255.255.224  broadcast 10.1.1.31
       inet6 fdb4:f58e:49f:4900:d46d:146b:b16:7212  prefixlen 64  scopeid 0x0<global>
       inet6 fe80::8eb3:4bc0:7cbb:59e8  prefixlen 64  scopeid 0x20<link>
       ether 08:71:90:81:1e:b5  txqueuelen 1000  (Ethernet)
       RX packets 569459  bytes 779147444 (743.0 MiB)
       RX errors 0  dropped 0  overruns 0  frame 0
       TX packets 302882  bytes 38131213 (36.3 MiB)
       TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

The new ip command provides similar results, but the command is ip address show, or just ip a for short:

$ ip a

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
   link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
   inet 127.0.0.1/8 scope host lo
      valid_lft forever preferred_lft forever
   inet6 ::1/128 scope host  
      valid_lft forever preferred_lft forever
2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
   link/ether bc:ee:7b:5e:7d:d8 brd ff:ff:ff:ff:ff:ff
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
   link/ether 08:71:90:81:1e:b5 brd ff:ff:ff:ff:ff:ff
   inet 10.1.1.6/27 brd 10.1.1.31 scope global dynamic wlan0
      valid_lft 83490sec preferred_lft 83490sec
   inet6 fdb4:f58e:49f:4900:d46d:146b:b16:7212/64 scope global noprefixroute dynamic  
      valid_lft 6909sec preferred_lft 3309sec
   inet6 fe80::8eb3:4bc0:7cbb:59e8/64 scope link  
      valid_lft forever preferred_lft forever

Add IP address

To add an IP address to an interface with ifconfig, the command is:

$ ifconfig eth0 add 192.9.203.21

The command is similar for ip:

$ ip address add 192.9.203.21 dev eth0

Subcommands in ip can be shortened, so this command is equally valid:

$ ip addr add 192.9.203.21 dev eth0

You can make it even shorter:

$ ip a add 192.9.203.21 dev eth0

Remove an IP address

The inverse of adding an IP address is to remove one.

With ifconfig, the syntax is:

$ ifconfig eth0 del 192.9.203.21

The ip command syntax is:

$ ip a del 192.9.203.21 dev eth0

Enable or disable multicast

Enabling (or disabling) multicast on an interface with ifconfig happens with the multicast argument:

# ifconfig eth0 multicast

With ip, use the set subcommand with the device (dev) and a Boolean or toggle multicast option:

# ip link set dev eth0 multicast on

Enable or disable a network

Every sysadmin is familiar with the old "turn it off and then on again" trick to fix a problem. In terms of networking interfaces, that translates to bringing a network up or down.

The ifconfig command does this with the up or down keywords:

# ifconfig eth0 up

Or you could use a dedicated command:

# ifup eth0

The ip command uses the set subcommand to set the interface to an up or down state:

# ip link set eth0 up

Enable or disable the Address Resolution Protocol (ARP)

With ifconfig, you enable ARP by declaring it:

# ifconfig eth0 arp

With ip, you set the arp property as on or off:

# ip link set dev eth0 arp on

Pros and cons of ip and ipconfig

The ip command is more versatile and technically more efficient than ifconfig because it uses Netlink sockets rather than ioctl system calls.

The ip command may appear more verbose and more complex than ifconfig, but that's one reason it's more versatile. Once you start using it, you'll get a feel for its internal logic (for instance, using set instead of a seemingly arbitrary mix of declarations or settings).

Ultimately, ifconfig is outdated (for instance, it lacks full support for network namespaces), and ip is designed for the modern network. Try it out, learn it, use it. You'll be glad you did!

Tuesday, April 6, 2021

Why use the Linux terminal

The command-line (aka terminal) is a scary thing for new Linux users. But understanding it can be a huge step in your Linux journey and a significant step in your career
Photo by Tianyi Ma on Unsplash

If you're new to Linux, the command-line interface (also known as CLI or terminal) may look scary. But it shouldn't. The CLI is a powerful and resourceful tool that every aspiring Linux user should learn and be comfortable with. On this article, let's review many reasons why you should learn and use the command line, commonly (and often incorrectly) referred to as terminal, shell, bash and CLI. 

Ubiquitous

The command-line interface (CLI) is available in every operating system, not only in Linux. Very frequently, developers and system administrators spend most of the time in them. If you want to work with Linux and technology in general, better start learning it.

Terminals are available in every operating system including Linux, Windows and Macs

Powerful

CLI-based apps are much more powerful than their GUI-based equivalents. That happens because usually GUIs are wrappers around libraries developed by developers. Very frequently, these libraries contain way more functionality than what's available in the graphical interface because, as you might expect, since software development takes time and costs money to produce, developers only add to GUI apps the most popular features. 

For example, these are some of the options that the GNU find tool provides us:

Does your GUI-based find tool has all those options?

Quicker

Common and repetitive tasks are also faster in the terminal with the advantage that you will be able to repeat and even schedule these tasks so they run automatically, releasing you to do actual work, leaving the repetitive tasks to computer.

For example, consider this standard development workflow:

  1. download code from GitHub
  2. make changes
  3. commit code locally
  4. push changes back to GitHub

If you were doing the above using a GUI-based git client (for example, Tortoise Git), the workflow would be similar to the below, taking you approximately 20 minutes to complete:

  1. Open Tortoise Git's web page
  2. Click Download
  3. Next -> Next -> Next -> Finish
  4. Right-click a folder in Nautilus (or Windows Explorer, or Finder) -> Select clone -> Paster the Url -> Click OK
  5. Wait for the download to Complete -> Click OK
  6. Back to Nautilus -> Find File -> Open it
  7. Make your changes (by probably using GEdit, KEdit or Visual Studio Code) -> Save
  8. Back to Nautilus
  9. Right Click -> Commit
  10. Right Click -> Push
  11. Take a deep breath

In the terminal (for example, in Ubuntu), the workflow would be equivalent to the below and could be completed in less than 2 minutes:

sudo apt update && sudo apt install git -y   # install git
git clone <url>     # clone the GitHub repo locally
vim/nano file -> save  # edit the file using a text-based editor
git commit -m <msg> # commits the file locally
git push  # push the changes back to our GitHub repo

Scriptable

Terminal/CLI-based tasks can be scripted (automated) and easily repeated meaning that you will be able to optimize a big part of your workflow. Another benefit is that these scripts can be easily shared, exactly as business and professional developers do!

So let's continue the above example. Our developer realized she is wasting too much time in the GUI and would like to speed up her workflow even more. She learned some bash scripting and wrote the function below:

gcp ()
{
    msg="More updates";
    if [ -n "$1" ]; then
        msg=$1;
    fi;
    git add ./ && git commit -m "$msg" && git push

She's happy because now she can run from the terminal, the below command as soon as she finishes her changes:

gcp <commit-msg>

What previously took 5 minutes is now is done in 2 seconds (1.8 seconds to write the commit message and 0.2 to push the code upstream). A huge advantage in her workflow. Imagine how much more productive she would be during the course of her career!

It's important to always think how can you optimize your workflow. These small optimizations add up to your productivity significantly over time.

Lightweight

Not only the CLI is faster and more lightweight than equivalent GUI-based applications but it's quicker to run the same commands. For example, consider a Git client like Tortoise Git. It was supposed to be lightweight (what most GUI apps aren't) but it takes 3s to completely load and uses 10Mb of memory:

Our GUI-based git client TortoiseGit

Meanwhile, its CLI equivalent, git status runs in 0.3s and consumes less than 1Mb. In other words, 20 times more efficient memory-wise and 10 times faster. 

A simple CLI command is 20x more efficient and 10x faster then its GUI equivalent

Disk Space Efficient

Another advantage of terminal apps over their GUI-equivalents is reduced disk space. For example, contrast these two popular apps. Can you spot the differences?

Application    Installation Size       Total Size       Memory Usage   
Visual Studio Code        80Mb 300Mb 500Mb (on sunny days)
Nano 0.2 Mb 0.8 Mb 3 Mb
400x more efficient 375x more efficient 160x more efficient

Extensible

Another important aspect is that the CLI is extensible. From it, skilled users could easily either extend its basic functionality using its built-in features like pipes and redirections combining inputs and outputs from different tools.

For example, sysadmins could list the first two users in the system who use Bash as a shell, ordered alphabetically with:

cat /etc/passwd | grep bash | cut -d : -f 1 | sort | head -2

What's interesting from the above command is how we combined 5 different tools to get the results we need. Once you master the Linux terminal, you'll too will be able to utilize these tools effectively to get work done significantly faster!

This is a more advanced topic. We'll see in future posts more details about it.

Customizable

As you might expect, the terminal is extremely customizable. Everything from the prompt to functions (as seen above) and even custom keybindings can be customized. For example, want to bind Ctrl+E to open the Nano text editor on the terminal? Simple. Add this to your .bashrc file:

bind '"\C-E":"nano\n"'

Extensive range of Apps

Contrary to what most newcomers thing, the terminal has apps too! You will find apps for pretty much any use case. For example:

Note: The above list is far from comprehensive. It's just to give you an idea of what you'd be able to find in there

For example, here's the Castero Podcast app running on a terminal:

Source; GitHub

Professional Development

Want to work with Linux? Another important aspect of using the terminal is that it will make you more ready for the job market. Since Linux servers usually don't have GUIs, you will end up having to use some of the above tools on your day-to-day work. So why not start now?

Learn more about Linux

Hopefully at this point you realize that you will learn way more about your Linux system and computers in general when you use the terminal. This is the secret sauce that the most productive developers want you to know!

It's also a huge win for testing new tools, maintaining your system, installing software, fixing issues and tweaking as you wish.

Getting Started

Ready to get started on your terminal/CLI journey? Watch the video below:

Note: We don't have any affiliation with the video above. We just want you to learn the terminal 😊

Conclusion

Every modern computer has a terminal. Learning it will save you time, allow you to automate common actions, make you learn more about your system, save time, grow professionally and be more comfortable with Linux. Well worth the effort, isn't it?

See Also

Featured Article

What is a Shell in Linux?

Learn what is a shell in Linux, your shortcut to a successful career with Linux and open source software ...