2. Prerequisites
CS213 Data Structure & Algorithms
CS231 Operating Systems
Linux Basics
Why You should study this course?
To become a better C Programmer
To become a Linux Developer
To become a System Level Programmer
Recommendations
9. The UNIX operating system was developed in the 1960s and 1970s at Bell
Labs, primarily by Ken Thompson, Dennis Ritchie, and others.
It was a very popular multi-user (many users can simultaneously use a single
machine), multi-tasking (it can run multiple programs simultaneously)
operating system for different platforms, from PC workstations to
multiprocessor servers and supercomputers.
Over time, various versions of UNIX have been developed, and it has
influenced the design of many other operating systems, including Linux and
BSD (Berkeley Software Distribution).
UNIX
10. Linux was developed by Linus Torvalds (Finland)
He started working on the project in 1991 while he
was a student at the University of Helsinki.
Linus Torvalds initially created Linux as a hobby and released the first version
of the Linux kernel (the core of the operating system) to the public on
September 17, 1991.
The development of Linux has since evolved into a collaborative effort with
contributions from a global community of developers.
The Linux operating system is now widely used in various forms, powering
servers, embedded systems, and serving as the basis for many distributions
like Ubuntu, Fedora, Debian, CentOS, Knoppix, Kali Linux and many others.
The name LINUX stands for the recursive LINUX Is Not Unix.
LINUX
11. The name GNU stands for the recursive GNU’s Not Unix.
The Free Software Foundation GNU was set up by Richard Stallman.
Free Software means “there may be a cost involved in obtaining the software,
it can thereafter be used in any way desired and is usually distributed in
source form”
Some of the free software from the GNU Project:
LINUX: a free UNIX-like system. (KDE, GNOME Desktop)
GCC: The GNU Compiler Collection, containing the GNU C compiler
G++: A C++ compiler, included as part of GCC
GDB: A source code–level debugger
GNU make: A version of UNIX make
Gimp: A graphical image manipulation tool
bash: A command shell
GNU
12. There are two special types of files: executables and scripts
Executable files are programs that can be run directly by the
computer; they correspond to Windows .exe files.
Scripts are collections of instructions for another program or an interpreter, to
follow. These correspond to Windows .bat or .cmd files.
In Linux executables or scripts to do not require to have a specific filename or
any extension whatsoever.
File system attributes, (discuss later), are used to indicate that a file is a
program that may be run.
A shell program (often bash) like command prompt in windows is used to run
our programs or commands.
Linux uses Environment Variable, PATH to search command on different
paths. e.g. In Linux run this command and see the output echo $PATH
Linux Programs
13. The purpose of different paths
/usr/local/bin: programs added by administrators for a specific host
computer or local network are found here
/usr/bin: programs supplied by the system for general use
/bin: Binaries, programs used in booting the system
/sbin: for system administrator root
/usr/sbin: for system administrator root
Use env command to show all the environment variables.
env
env | grep USER
Linux Programs
16. ls: List files and directories. ls, ll, ls –al, man ls
cd: change directory command cd, cd .., cd folder, relative and absolute path, pwd
cp: Copy files or directories. man cp, cp file1 fl2, cp –rv folder1 fld2
mv: Move or rename files and directories.
man mv, mv file1 file2, mv folder1 folder2
rm: Remove/delete files or directories.
rm file, rm –r dir, rm –f file, rm –rfv dir, rmdir folder_name
mkdir: Create a new directory. mkdir folder_name
touch: Create an empty file or update modification times of a file.
touch file_name, touch folder_name
clear: clear screen like cls command in windows
File and Directory Commands
17. cat: Displays the entire content of a file. cat myfile.txt
more: Displays the content of a file one screen at a time. You can navigate
using the spacebar. more myfile.txt
less: Similar to more, but allows both forward and backward navigation
through the file. less myfile.txt
head: Displays the first few lines of a file. By default, it shows the first 10 lines.
head –n 10 myfile.txt
tail: Displays the last few lines of a file. By default, it shows the last 10 lines.
tail –n 20 myfile.txt
File View Commands
18. nano: A simple and user-friendly text editor. nano myfile.txt
micro: A modern terminal based text editor. micro myfile.txt
vi: A powerful and versatile text editor with modes for navigation and editing.
vim myfile.txt
emacs: Another powerful text editor with extensive features.
emacs filename
gedit (GNOME Text Editor): A graphical text editor for systems using the
GNOME desktop environment. gedit myfile.txt
File Editing Commands
19. df: Displays information about disk space usage on mounted file systems.
df -h
du: Shows the disk usage of files and directories. du –h file_name
fdisk: Displays information about disk partitions on a system.
sudo fdisk –l, sudo fdisk /dev/sdb
mount: Displays information about currently mounted file systems.
mount | grep sda, sudo mount /dev/cdrom /cdrom
pwd: Prints the current working directory. pwd
File Information Commands
20. uname: Displays system information such as kernel name, network node
hostname, kernel release, kernel version, and machine hardware. uname -a
hostname: Shows or sets the name of the current host. hostname
uptime: Shows how long the system has been running, as well as load
averages.
free: Displays information about system memory usage. free -h
lscpu: Displays information about the CPU architecture and cores. lscpu
lsusb: Displays information about the CPU architecture and cores. lscpu
date: Displays the current date and time. date
cal: Displays a calendar for the current month. cal
w: Shows who is logged in and what they are doing. w
System Information Commands
21. ps: Shows information about currently running processes. ps aux
top: Gives a dynamic view of system processes and resource usage. top
pstree: Displays a tree diagram of processes. pstree -p | less
kill: Sends a signal to terminate a process. The -9 option forcefully kills the
process kill -9 1234, killall -9 firefox
killall: Sends a signal to terminate all processes with the specified name.
Command_name &: Runs a command in background sleep 10 &, (sleep 5; echo "Done") &
job: Displays the status of jobs running in the background. job
bg: Puts a job in the background. bg
fg: Brings a job to the foreground. fg
nice: Runs a command with a specified priority. nice -n 10 my_process
renice: Changes the priority of an already running process. renice +5 1234
Process Management Commands
22. In Linux, runlevels are predefined operating states in which a system can operate. Each
runlevel is associated with a specific set of services and configurations.
Here are the commonly used runlevels
Runlevel 0: Halt/Shut down the system.
Runlevel 1: Single-user mode, also known as rescue mode, used for system maintenance
tasks. Typically, only a minimal set of services are started.
Runlevel 2: Multi-user mode with networking, but without graphical user interface (GUI).
It's similar to runlevel 3 but may have fewer services enabled.
Runlevel 3: Multi-user mode with networking and a text-based user interface. This runlevel
is often used for servers and systems where a graphical interface is not required.
Runlevel 4: Not used by default, can be defined by the system administrator.
Runlevel 5: Multi-user mode with networking and a graphical user interface (GUI). This
runlevel is typically used for desktop systems.
Runlevel 6: Reboot the system.
Linux Run Levels
23. To switch to single-user mode (equivalent to runlevel 1), you can use:
sudo systemctl isolate rescue.target
To switch to multi-user text mode (equivalent to runlevel 3), you can use:
sudo systemctl isolate multi-user.target
To switch to graphical mode (equivalent to Run Level 5), you can use:
sudo systemctl isolate graphical.target
Use the following command to set the default target to multi-user.target:
sudo systemctl set-default multi-user.target
Linux Run Levels
24. useradd: Creates a user sudo useradd -m -s /bin/bash -c "Rashid Farid Chishti" Chishti
passwd: Changes password of a user sudo passwd Chishti
whoami: print effective userid whoami
w: shows who is logged in and what they are doing w
finger: displays information about the user finger Chishti
userdel: Delete a user account and related files sudo userdel -r Chishti
groupadd: Create a new group. sudo groupadd Teachers
usermod: Modify a user account. sudo usermod -aG Teachers Chishti
id: Shows user id and group id id Chishti
Linux Files: /etc/passwd /etc/groups /etc/shadow
chown: Change ownership sudo chown -r newowner:newgroup directory
chmod: Change file permissions chmod 755 filename, chmod -R 644 directory
User Management Commands
25. Assumptions: At the end of commands, if nothing happens press the ENTER key.
Linux is case sensitive (a" is not the same as A").
Entering vi
vimtutor Invokes a tutorial for vi
vi filename Normal way of entering vi
Saving and Exiting
ZZ Quit and Save
:wq Quit and Save
:q! Force quit and ignore changes
:w Save changes and stay in file
:f file Change current filename to file
Using Vi Editor (1/3)
Positioning the Cursor
ZZ Quit and Save
G Go to last line in file
nG Go to line number n
:n Go to line number n
b Back one word
w Start of next word
( Beginning of previous sentence
) Beginning of next sentence
f Beginning of previous paragraph
g Beginning of next paragraph
H Home-top line on screen
L Last line on screen
26. Inserting New Text
i Insert before cursor
I Insert at beginning of line
a Insert after line
A Append to end of line
o Insert one line below cursor
O Insert one line above cursor
Esc Terminate insert mode
Searching
/string Search forward for string
?string Search backward for string
:s/old/new/n Search and replace n times
Using Vi Editor (2/3)
Deleting and Copying Text
x Delete character at current cursor
position
dd Delete current line
dw Delete a word
ndd Delete n lines
ndw Delete n words
D Delete remainder of line
Y or yy Copy current line to new bffer
p Place buffer contents after cursor or
Place last deleted text after cursor
P Place buffer contents before cursor or
Place last deleted text before cursor
27. Changing Text
rx Replace character with x
R Replace beginning at cursor
cw Change word
cc Change line
C Change to end of line
Miscellaneous Commands
:!command Issue LINUX command
J Join two lines
:r file Append file into vi
Z Redraw the screen
. Repeat last command
u Undo last command
Using Vi Editor (3/3)
Positioning the Cursor
k Move up one line
j Move down one line
l Move right one character
h Move left one character h
(You can use arrow keys for above functions)
^BScroll back one screen
^F Scroll forward one screen
^UScroll back half screen
^D Scroll forward half screen
0 Go to first position on current line
$ Go to last position on current line
28. Mount CDROM sudo mount /dev/cdrom /cdrom
Install gcc, g++ and make sudo apt-get update
sudo apt install build-essential
Install Vim Editor sudo apt install vim
sudo apt install vim-gtk
Problem: in Vim Editor Arrow keys show characters:
If you don't already have a .vimrc file in your home directory, create one using this:
vim ~/.vimrc Add this line to the top of the file: set nocompatible
Press i for Editing Mode and Esc for Command Mode, Press :wq for save and quit
Add indentation in C/C++ program sudo apt install indent
indent program.c
change the appearance of a C program by inserting
or deleting whitespace
search indent related commands apropos indent
Problems and Solution
29. Configure Proxy sudo vi /etc/apt/apt.conf.d/proxy.conf
add the following lines.
Acquire {
HTTP::proxy "http://192.168.10.9:8080";
HTTPS::proxy "http://192.168.10.9:8080";
}
To use wget behind proxy
sudo vi /etc/wgetrc
https_proxy = http://username:password@proxy:port
http_proxy = http://username:password@proxy:port
ftp_proxy = http://username:password@proxy:port
Uncomment 'use_proxy = on'
Proxy Settings
30. First update the system using the apt command or apt-get command:
$ sudo apt update
$ sudo apt upgrade
Install ifconfig command sudo apt install net-tools
install the manual pages about using GNU/Linux for development:
sudo apt install manpages-dev
To validate that the GCC compiler is successfully installed use the gcc --version
$ sudo apt install g++
Search for pthread library sudo apt search pthread
Using apt command
31. whoami Who you are logged in as
w Display who is online
prevent user from changing his password for almost 274 years. passwd -n 9999 user
make a file data.txt of size 5MB truncate -s 5M data.txt
make default shell as bash for user sudo vi /etc/passwd
change the appearance of a C program by inserting or deleting whitespace
replace /bin/sh with /bin/bash
wall this is msg to all Send msg to all Linux user
mesg n Block messages
mesg y Enable lock broadcast messages
write user_name your_message Ctrl+C Send msg to a specific user
User Management
32. date Show current date and time
Show Applications > Language Support > Regional Formats > English (United States) > Close
reboot Restart Computer
sudo apt install ncal
cal Show this month’s calander
uptime Show current uptime
sudo date -s "16 OCT 2019 13:16:00" Set software clock
sudo date --set="2019-10-18 10:25:30" Set software clock
sudo hwclock --systohc Sync with hardware clock
Setting Date and Time
33. To install openssh-server package, run:
$ sudo apt search openssh-server
$ sudo apt install openssh-server
Verify that ssh service is running: $ sudo systemctl status ssh
Configure firewall and open port 22
You must configure the Ubuntu Linux firewall called ufw.
$ sudo ufw allow ssh
$ sudo ufw enable
$ sudo ufw status
$ sudo systemctl restart ssh
Testing it: You can login from another computer using MS-Windows (putty client) or Unix-
like system using the ssh command: $ ssh student@10.16.3.233
Installing SSH Server
34. Install ftp server sudo apt install vsftpd
Show version of installed ftp server vsftpd –v
Enable ftp server when system starts sudo systemctl enable vsftpd
Make backup of configuration file
sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.orig
Open configuration file if you need it sudo vi /etc/vsftpd.conf
write_enable=YES Uncomment this line to allow uploading data
ssl_enable=YES Enable ftp over ssh (port 22)
Restart ftp server sudo systemctl restart vsftpd
Installing FTP Server
35. To install apache2 package, run:
update the local package index $ sudo apt update
install the apache2 package $ sudo apt install apache2
List the ufw application profiles $ sudo ufw app list
Verify that apache is running: $ sudo systemctl status apache2
Configure firewall and open port 22
You must configure the Ubuntu Linux firewall called ufw.
$ sudo ufw allow Apache
$ sudo ufw enable
$ sudo ufw status
$ sudo systemctl restart apache2
Testing it: Write down ip address of Linux server in a web browser.
Installing Apache Web Server
36. Add DNS Server IP Address in /etc/resolv.conf
sudo vi /etc/resolv.conf
Add these two lines
nameserver 1.1.1.1
nameserver 8.8.8.8
Apt-get Issues
37. Type vi hello.c on shell, press i
Type following code in hello.c file.
Press Esc key
To save and exit write :wq and then press Enter Button
Now compile the code using command gcc hello.c
Run the Program using command ./a.out
Your First Linux C Program
#include <stdio.h>
int main()
{
printf("Hello Worldn");
exit(0);
}
hello.c
38. Type this command ll to see list for files
Now compile in this way gcc –o hello hello.c
Run the Program ./hello
Header Files are placed at /usr/include
To see which of the header files contains EXIT_ word type following
commands.
cd /usr/include
grep EXIT_ *.h
Library Files are usually placed in /lib and /usr/lib directory
A library filename always starts with lib
Then follows the part indicating what library is this
(like c for the C library, or m for the mathematical library).
Using gcc Compiler
39. The last part of the name starts with a dot (.) and specifies the type of the
library
.a for static libraries .so for shared libraries
Examples
/usr/lib/libc.so.6 is a standard C shared library in version 6
/usr/lib/libm.a is a standard C static library for math functions
When a shared library is linked into a program, the final executable does not
actually contain the code that is present in the shared library.
The executable merely contains a reference to the shared library.
If several programs on the system are linked against the same shared library,
they will all reference that library, but none will actually be included. Thus, the
library is “shared” among all the programs that link with it. So the size of
Library Files
40. program is reduced and the space is saved.
Type following command ldd a.out and see the output
When a code is compiled against a statically linked library, the code for any
referenced library routine is included directly in the resulting program binary.
This results in very large application executables because each one contains a
duplicate of standard routines.
Analogies between Windows and Linux
Item Linux Windows
object module func.o func.obj
static library lib.a lib.lib
shared library lib.so lib.dll
program program program.exe
Library Files
41. In this example, you create your own small library containing two functions
and then use one of them in an example program. The functions are called
fred and bill and just print greetings.
1. First, create separate source files (imaginatively called fred.c and bill.c) for
each function.
Try It Out Static Libraries 1/3
// this is fred.c
#include <stdio.h>
void fred(int arg){
printf("fred: we passed %dn",
arg);
}
fred.c
// this is bill.c
#include <stdio.h>
void bill(char *arg){
printf("Bill: we passed %sn",
arg);
}
bill.c
42. 2. Produce object files of both fred.c and bill.c
gcc –c fred.c bill.c
ll *.o
3. Create a header file for our library.
This will declare the functions fred()
and bill() present in our library
4. Include the library header file in our
calling program and calls one of the
functions from the library
Try It Out Static Libraries 2/3
void fred(int arg);
void bill(char *arg);
lib.h
// this is program.c
#include <stdlib.h>
#include "lib.h"
int main(){
bill("Hello World");
exit(0);
}
program.c
43. 5. Compile our file program.c and link it with the previously compiled object module
bill.o
gcc -c program.c
gcc -o program program.o bill.o
./program
5. create our own library called libfoo.a
ar crv libfoo.a bill.o fred.o
6. create a table contents for the library, make the library ready to use
ranlib libfoo.a
7. use this library to link to program.o */
gcc -o program program.o libfoo.a
./program
7. OR You can use a shorthand notation
gcc -o program program.o -L. -lfoo
Try It Out Static Libraries 3/3
44. Section contents
1 user commands
2 system calls
3 C library functions
4 devices and network interfaces
5 file formats
6 games and demos
7 environments, tables and macros
8 system maintenance
e.g.
man 1 printf indent program.c
man 3 printf man indent
man for help
45. 1. Make a static library with the name libYourName.a. This library will contain following functions
void YourName_Get (double Mat[][3]) // Gets data for a 3x3 Matrix
void YourName_Show(double Mat[][3]) // Shows a 3x3 Matrix
// Adds two 3x3 matrices Mat_A and Mat_B and saves the result in Mat_C
void YourName_Add (double Mat_A[][3], double Mat_B[][3], double Mat_C[][3])
// Multiplies two 3x3 matrices Mat_A and Mat_B and saves the result in Mat_C
void YourName_Mul (double Mat_A[][3], double Mat_B[][3], double Mat_C[][3])
// Takes inverse of a 3x3 Mat_A and save the inverse matrix in Mat_B.
void YourName_Inv(double Mat_A[][3], double Mat_B[][3])
// Calculates and returns Mod of a 3x3 matrix Mat_A.
double YourName_Mod(double Mat_A[][3])
Write all the steps to compile your library
Call these library functions in your main program to show the functionality
Assignment #1