Windows 10 (Microsoft), MacOSX (Apple), Android (Google), etc
UNIX is a (family of) Operating System
Invented by AT&T Bell Labs in late 60's
Currently there are different versions and variants of UNIX
Solaris, AIX, HP-UX, etc.
UNIX is not free or Open Source: "GNU is Not UNIX"
What is Linux ?
GNU (80's) is a free, open source version of the UNIX OS, but without the most important element: the kernel
Linux kernel was developed in 1991 by Linus Torvalds, a Finnish graduate student
The association GNU/Linux is an operating system (say just "Linux") and provides an alternative to commercial operating systems
Linux exists without GNU (eg Android) : used to power a multitude of systems... from your phone to your smart fridge
What is a Linux distribution ?
Many versions of Linux
Red Hat, Debian, Suse, etc
But one common linux kernel: kernel is like an engine. A distribution is an actual car that hosts the engine
Distributions differ from
the application/management layer
GUI (Graphical User Interface = desktop environment)
software packages
help-desk, support, language
Why Linux ?
Linux is free
Linux is supported on older computers (perf & updates)
Linux has many more free applications
Security: there are very few viruses for Linux Privacy: most Linux distributions don't collect your data at all Reliability: if you want to stop something, you really can Updates: package manager Customisation: you can make Linux look, feel and behave as you want it to Command Line Interface: faster & efficient
Linux Statistics
47% of professional developers use Linux-based operating systems (Statista)
Linux powers 39.2% of websites whose operating system is known (W3Techs)
Linux powers 85% of smartphones (Hayden James)
Why not Linux ?
Hardware compatibility (printers, etc)
Missing famous software (MS Office, Adobe, CAO, etc)
A Linux distribution contains a display server, a window manager (manage windows, panel, menus, dash interfaces and core applications), and a desktop environment (eg status bars, drag-and-drop capabilities, etc)
These 3 items are bundled together to make what is known as a GUI environment
Using Linux
Using Linux through a GUI environment is similar to Windows or MacOSX
Linux users do not install software the same way that Windows users do: Linux has a tool known as a package manager
A package manager provides a way to search for software, install software, keep the software up to date and remove the software
Similar to Google or Apple store
Linux CLUI
Using Linux with GUI, it's already great ! Using CLUI = unlock the power of Linux !
Each Linux system contains a terminal
A terminal is where you enter Linux commands
It's called the Command Line User Interface
CLUI is one of the many strengths of Linux and can be more efficient than using the GUI
Linux CLUI
CLUI allows users to be independent of distros (or UNIX systems like OSX)
CLUI saves system resources which are consumed by GUIs
CLUI allows users to easily work at distance (SSH)
CLUI allows developers to join together simple (and less simple) commands to do complex things and automate... whatever you want to
People tend to think command line is difficult. It's not.
Linux Shell
A shell is a program that takes commands from the keyboard and gives them to the operating system to perform
The main function is to interpret your commands = language
The bash shell is one of several shells available for Linux
Learning the shell:
"When you are a child you use a computer by looking at the pictures. When you grow up, you learn to read and write"
It's more or less like SMSing to your PC, telling it what to do
Linux Shell
Shells have some built-in commands
A shell also supports programming constructs, allowing complex commands to be built from smaller parts = scripts
Scripts can be saved as files to become new commands
many commands on a typical Linux system are scripts
An open terminal show you a PROMPT waiting for your commands
Get up and running with the CLUI by navigating directories and files
Viewing and Changing Files and Directories
Learn to manipulate directories and files from the CLUI
Configuring the Environment
Learn to configure the environment using the CLUI
Accessing Linux remotely
Learn to use SSH (basics)
Navigating the File System
A file system is a section of hard disk that has been allocated to contain files
it's arranged like hierarchical tree structure
Files are grouped in the directory structure
The top of the tree is called root and / is used to present the root
Absolute paths
In the tree /users/usern/file1 is an absolute pathname
Relative paths
If you are already in the users directory, the relative pathname for file1 is usern/file1
~ (tilda) points to the user's home directory. Useful if you are logging into a workstation with many users. It's the default working directory when you log in. If you are user usern, then /users/usern/file1 is the same as ~/file1
. refers to the current directory
.. refers to the parent directory
Basic commands
ls : lists folders/files in a directory
cd : change directory
use cd name to navigate to directory name
pwd : print working directory. Prints the path of the current directory
du : disk usage. Shows the disk usage of the current directory
man : manual
use man name to bring up a manual entry for command or program called name
Creation
mkdir : use mkdir name to create a new directory named name in the current directory
cp : use cp file1 file2 to create file2 which is a copy of file1
can also use cp -r to copy whole directories
mv : move = same as copy, but deletes the original file
Deletion
rm : delete files ( cannot recover your files after removed them ! )
can also use rm -rf to remove whole directories
Be careful : there is no trash in CLUI
tab is used for auto-complete
If a file/directory name was partly typed in, tab will auto-complete it
If there are multiple options, tab will auto-complete up to the point where the options branch and show you a list of possible options
* is used as a wild card
rm blah* removes all files which start with blah: eg blah1, blah2, and blahblah would all be removed
using cp public/* private/ copies all files in a public directory into a private directory, and keeps all file names intact
File permissions
Groups
Each file and directory has three user based permission groups
owner :the owner permissions apply only the owner of the file or directory, they will not impact the actions of other users
group : the group permissions apply only to the group that has been assigned to the file or directory, they will not effect the actions of other users
all users : the all users permissions apply to all other users on the system, this is the permission group that you want to watch the most
Types
Each file or directory has three basic permission types
read : the read permission refers to a user's capability to read the contents of the file
write : the write permission refer to a user's capability to write or modify a file or directory
execute : the execute permission affects a user's capability to execute a file or view the contents of a directory
The following command :
ls -l
gives :
1
2
3
4
5
6
7
-rwxr-xr-x
1
dupont
grpelic
3528
2022-08-04
file_1
drwxr-xr-x
3
dupont
grpelic
512
2022-01-02
dir_1
lrwxr-xr-x
2
dupont
grpelic
210
2020-12-16
short -> /data
-rw-------
1
dupont
grpelic
4587
2022-12-04
file_2
Linux privileges
Linux has a robust permissions system: this is a very good thing, as it enables a clear separation of roles among users
Especially between the root user and your standard user
Sometimes, though, you might want your standard user to have some or all of root's privileges : this is accomplished with sudo
Shell syntax rules
Shells use three "standard I/O streams"
stdin is the standard input stream, which provides input to commands.
stdout is the standard output stream, which displays output from commands.
stderr is the standard error stream, which displays error output from commands.
Shell has several meta-characters and control operators
|, &, >, ; , etc.
Environment
In a bash shell many things constitute your environment
the form of your prompt
your home directory and your working directory
the name of your shell
functions that you have defined
etc.
Environment includes many variables that may have been set by bash or by you
Access the value of a variable by prefixing its name with $
Environment variables
USER : the name of the logged-in user
UID : the numeric user id of the logged-in user
HOME : the user's home directory (similar to ~ )
PWD : the current working directory
SHELL : the name of the shell
Set a shell variable : typing a name followed immediately by an equal sign ( = )
if the variable exists, you will modify it to assign the new value
You can use special files to control bash variables : $HOME/.bashrc
Remote Linux Access
SSH (or Secure SHell) is a protocol used to securely log onto remote systems
the most common way to access remote Linux and Unix-like servers
VNC (or Virtual Network Computing) is a software that allows a personal computer's desktop environment to be run
Aside from bandwidth, latency and security issues (which can vary a bit), the big differences are the functionality
VNC exports a whole session, desktop and all (GUI)
SSH runs a single program (CLUI) and show its windows on your machine
Remote Linux using SSH
You need:
an access to the distant machine : login/password
or a login with SSH keys (with passphrase)
the hostname or the IP address of the distant machine