Programming/Linux

From Thalesians Wiki
< Programming
Revision as of 17:14, 22 December 2020 by Admin (talk | contribs)

What is Linux?

Linux is a family of open-source Unix-like operating systems based on the Linux kernel, an operating system kernel first released on 1991.09.17 by Linux Torvalds. Linux is typically packaged in a Linux distribution.

Distributions include the Linux kernel and supporting system software and libraries, many of which are provided by the GNU Project.

Popular Linux distributions include Debian, Fedora, and Ubuntu. Commercial distributions include Red Hat Enterprise Linux and SUSE Linux Enterprise Server.

Learning about the system

Which Linux?

To find out which Linux distribution is running on your machine, you can use

$ hostnamectl
   Static hostname: ip-172-31-24-17
         Icon name: computer-vm
           Chassis: vm
        Machine ID: b54d0220fe634fa4a96fa3d0641ab3ea
           Boot ID: 5208456664c54b09b34be6b541fa7588
    Virtualization: xen
  Operating System: Ubuntu 20.04.1 LTS
            Kernel: Linux 5.4.0-1029-aws
      Architecture: x86-64

More specifically, to find out the Kernel version, you can use

$ uname -r
5.4.0-1029-aws

Working with packages

How to install a package?

Use apt, the command line interface for the package management system.

Before proceeding, run

$ sudo apt update

update is used to download package information from all configured sources. Other commands operate on this data to e.g. perform package upgrades or search in and display details about all packages available for installation.

Once this is done, run

$ sudo apt install emacs

to install the GNU project Emacs editor,

$ sudo apt install mc

to install the GNU Midnight Commander. Other packages are installed in a similar manner.

How to find out which packages can be upgraded?

$ sudo apt list --upgradable

will produce a list of all packages that can be upgraded.

How to upgrade a package?

To upgrade a specific package, say emacs, you can use

sudo apt upgrade emacs

To upgrade all upgradable packages, use

sudo apt upgrade

Working with files and directories

Basics

A file system controls how data is stored and retrieved. Without a file system, data placed in a storage medium would be one large body of data with no way to tell where one piece of data stops and the next begins. By separating the data into pieces and giving each piece a name, the data is easily isolated and identified.

Taking its name from the way paper-based data management system is managed, each group of data is called a "file". A file is a computer resource for recording data discretely in a computer storage device. Just as words can be written to paper, so can information be written to a file. Files can be edited and transferred through the internet on a particular computer system.

A directory is a file system cataloging structure which contains references to other computer files and possibly other directories. Files are organized by storing related files in the same directory. In a hierarchical file system (that is, one in which files and directories are organized in a manner that resembles a tree), a directory contained inside another directory is called a subdirectory. The terms parent and child are often used to describe the relationship between a subdirectory and the directory in which it is cataloged, the latter being the parent.

The top-most directory in such a file system, which does not have a parent of its own, is called the root directory.

A path specifies a unique location in a file system. A path points to a file system location (file or directory) by following the directory tree hierarchy expressed in a string of characters in which path components, separated by a delimiting character (on Linux—"/"), represent each directory.

An absolute or full path is defined as specifying the location of a file or directory from the root directory (/). It points to the same location in a file system regardless of the current working directory. By contrast, a relative path starts from some given working directory, avoiding the need to provide the full absolute path.

For example, /var/log/apache2/error.log is an absolute path to Apache's error log file. Assuming that the current directory is /var/log (another absolute path), the relative path to the same log file is given by apache2/error.log.

What is the current directory?

To find out the current directory on a Linux system, use

$ pwd
/home/ubuntu

How can I change the current directory?

The current directory can be changed using cd, for example:

~$ cd /var/www
/var/www$

To change the current directory to the user's home directory, one can use simply

$ cd

What are the contents of the current directory?

To list the contents of the current directory, you can use ls. In its most basic form, it's simply

$ ls

A useful variant is

$ ls -alt

where -a tells ls not to ignore entries starting with ., -l means that ls should use a long listing format, -t tells is to sort by modification time, newest first. (ls -a -l -t can be compressed into ls -alt.)

Creating an empty file

To create an empty file, you can use touch:

$ touch README.txt

If the file already exists, touch will update its access and modification times to the current time.

Editing a file

Suppose we want to edit the file README.txt. We are spoilt for choice when it comes to choosing an editor.

Many systems come with Nano pre-installed, Nano's ANOther editor, "a small and friendly editor":

$ nano README.txt

If Nano is not installed, you could install it using

$ sudo apt update
...
$ sudo apt install nano

There are two feature-rich, customizable editors popular among software developers: Vim and Emacs.

They can be installed using, respectively,

$ sudo apt update
...
$ sudo apt install vim

and

$ sudo apt update
...
$ sudo apt install emacs

The learning curve for both these editors is quite steep.

DevOps

What is my system currently doing?

To find out what the system is currently doing, including things such as CPU and memory utilization, you can use glances.

To install it, use

$ sudo apt update
...
$ sudo apt install glances

Then run it using

$ glances