Suppose want to install Ubutun Linux
1-download unetbootin
https://unetbootin.github.io/
2-download OS image (iso) file.
https://ubuntu.com/download/desktop
3-open unetbootin and make bootable pendrive for other machine/ make bootable folder for self machine.
4- restart system and follow screen steps.
1) Make sure ssh client is installed on your Linux. If not,install ssh client.
amir@amir-VirtualBox:~$ ssh -V
OpenSSH_7.6p1 Ubuntu-4ubuntu0.3, OpenSSL 1.0.2n 7 Dec 2017
if not exist please install using below command.
sudo apt update
sudo apt install openssh-server
2) Power off the OS.
3) Now on your VirtualBox(used- Version 6.0.6 r130049 (Qt5.6.2))
go to Settings -> Network -> Adapter1
a) checked enable network adapter
b) Attached to : Bridge Adapter
c) Name: Intel(R) Ethernet connection./Wireless LAN
4) Now start your OS. Run ifconfig /ip a , now the inet address is your IP from enp0s3 section.
Use this and run it on your putty. Login with your credentials.
There are two type of distrubution based on core package manager in linux
- dpkg OS like (Debian,ubuntu)
- rpm OS like (Centos,Fedora)
apt-get(all except searching) ,apt-cache ( for searching and showing details)
0) update the package index file
sudo apt-get update
When this command is run, all available packages are fetched and re-indexed from the locations specified in /etc/apt/sources.list and /etc/apt/sources.list.d/.
0) how to checked installed package in system
dpkg -l 'pattern'
example :
dpkg -l '*mysql*'
1) for seraching all available package for your system
apt-cache pkgnames
2) for seraching perticular package
apt-cache search [pkg-name-pattern]
3) for perticular package information (like size & all)
apt-cache show [package-name]
4) for Installing package
sudo apt-get install [package-name]
5) remove package without configuration.
sudo apt-get remove [package-name]
6) remove package with all configuration.
sudo apt-get --purge remove [package-name]
if you have file called .tar.gz file or .tar file
1) tar xvfz filename.tar.gz or tar xvf filename.tar
2) goto extract file and run ./configure (if configure file is not there check readme file)
3) make
4) make install
It is case sensitive ..means PATH and path both are different
1) how to see/check all
a) printenv
b)env
2) how to see perticular
printenv name or echo $name
example :
a) printenv PATH
b) echo $PATH
TEMPORARY adding new env variable
----------------------------------
command: var_name=var_value
example: MYVAR=test123
TEMPORARY modifying env variable
----------------------------------
command: var_name=$var_name:var_value
example: MYVAR=$MYVAR:test456
TEMPORARY removing env variable
----------------------------------
command: unset var_name
example: uset MYVAR
PERMANENT adding new env variable
----------------------------------
1) open .bashrc file from user's home dir
2) write at end one file export var_name='var_value'
example: export MYVAR='test123'
PERMANENT modifying env variable
----------------------------------
1) open .bashrc file from user's home dir
2) write at end one file export var_name=$var_name:'var_value'
example: export MYVAR=$MYVAR:'test123'
PERMANENT removing env variable
----------------------------------
1) open .bashrc file from user's home dir
2) delete export line of that variable.
GLOBAL PERMANENT env variable
----------------------------------
1)sudo touch /etc/profile.d/app_env.sh
2)write into file app_env.sh, export var_name=$var_name:'var_value'
example: export MYVAR=$MYVAR:'test123'
https://blog.packagecloud.io/eng/2015/03/30/apt-cheat-sheet/
iptables having manay tables like nat,etc and each tables contain multiple filter pipe like like INPUT,FORWARD, PREROUTING,POSTROUTING etc.
start filtering form 0 to last if packet filtermatch execute the actionCommand and does not search next and doest match execute default actionCommand.
1) To select other tables except default
iptables -t nat
to see all entries of tables
---------------------------
1) iptables -L ( for default)
2) iptables -t nat -L ( for nat tables)
BASIC SYNTAX ( for existing pipe)
---------------
IPTABLE_PRE -A PIPE_NME filterCommand -j actionCommand
TO append any iptables entry you must use -A PipeName and commandName
like
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
IPTABLE_PRE = iptables -t nat
PIPE_NME= PREROUTING
filterCommand= -p tcp --dport 80
actionCommand = REDIRECT --to-port 8080
-A for appending iptables entries
-L for showing iptables entries
-D for deleting ip tables entries
-------------------------------------------------------
1) displaying all entries of tables nat
------------------------------------------
iptables -t nat -L
2) displaying all entries of tables nat OF PIPE PREROUTING
------------------------------------------
iptables -t nat -L PREROUTING
3) displaying all entries of tables nat OF PIPE PREROUTING OF PERTICULAR POSITION ( FOR EXAMPLE 1)
------------------------------------------
iptables -t nat -L PREROUTING 1
4)same also work for -D ( deleting command )
to delete perticular entries --example tables nat OF PIPE PREROUTING OF PERTICULAR POSITION ( FOR EXAMPLE 1)
-----------------------------------------------------------
iptables -t nat -D PREROUTING 1
TO DO OPERATION ON FILTER COMMAND WE MUST USE -j ( jump commnad)
----------------------------------------------------------
to see the command permission of users
------------------------------------------
sudo -lU usrname
Docker is a set of platform-as-a-service products that use operating-system-level virtualization to deliver software in packages called containers
it is place where we store docker image and used to setup application anywhere without worrying the app dependency.
- setup docker clinet into machine
- create image application along with required dependency
- copy this image to target machine
- make setup of application quickly with the help of image .
1) to get update the repository of packages
sudo apt-get update
2) uninstall exiting old one
sudo apt-get remove docker docker-engine docker.io
3) install new one
sudo apt install docker.io
4) check install version
docker --version
5)start stop status of docker
sudo systemctl status docker
sudo systemctl stop docker
sudo systemctl start docker
docker pull image-name
example: sudo docker pull busybox
docker rmi image-name
example: sudo docker rmi busybox
sudo docker images
sudo docker run image-name
example :
sudo docker run busybox
run wtih --rm so we can remove container when it stopped
example:
sudo docker run --rm busybox
docker ps -a
docker system prune
docker container rm cc3f2ff51cab cd20b396a061
or
docker rm cc3f2ff51cab cd20b396a061
1) create Dockerfile
this file will have set of instruction to build a image file
for sample i used 2 commands
a) FROM this will use to take base image from dockerhub
b) RUN this will execute while running docker containers
I created Dockerfile and put below command inside file.
FROM ubuntu
RUN apt-get update && apt-get install tree
after that i hit docker build command
2) sudo docker build -t mytree .
Note:
-t use to give tagname of image . is directory location where Dockerfile will be present.
3) To See build images
amir@amir-VirtualBox:~/docker-rnd$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mytree latest 8c240bfdd1ca About a minute ago 92.1MB
ubuntu latest a2a15febcdf3 4 days ago 64.2MB
4) How to run Images
sudo docker run -it imageid/name
example:
sudo docker run -it 8c240bfdd1ca
sudo docker exec -it containerId /bin/bash
Example:
amir@amir-VirtualBox:~$ sudo docker exec -it c9669fe22657 /bin/bash
root@c9669fe22657:/# ls -l
exit
This is used to get base template of docker container
Example:
FROM ubuntu
This is used to run command once at build time of images. basically used to install package and created dir structure
Example:
RUN apt-get update
This is used to run command everytime when container get started..
Example:
CMD ls -l
CMD + cant override command from root machine.
Example:
ENTRYPOINT ls -l
This is used to copy folder/file from machine to container
Example:
COPY /root/test /root/amir
ADD =COPY+
1)First, you can use a URL instead of a local file / directory.
2)Secondly, you can extract a tar file from the source directly into the destination.
This is used to set default workdir for container
Example:
WORKDIR /path/to/workdir
WORKDIR /a
WORKDIR b
WORKDIR c
This is used to set envirement variable
Example:
ENV workdir /path/to/workdir
ENV workdir=/path/to/workdir
It Linux Scheduler having five part in complete expression
Syntax: mm hh dom mo dow commands
Here
mm = minuts (0-59)
hh = hours (0-23)
dom = days of months (1-31)
mo = month 1-12 (or names; see example jan,feb,mar...)
dow = day of week(0-7 ,7 is Sunday, or use names like Mon,Tue,Wed,Thu,Fri)
1) * This is use for all possible value.(means every)
2) - This is use for specify range like for mm 00-05 means (00,01,02,03,04,05)
3) / Thus is use for increment by specify number ...like for mm ---0/2 means 0,2,4,6,...so minuts
4) , This is use to tell set of values
commands = single or multiple commnd
single-command example
1) java -jar app.jar
2) java -jar app.jar
Multiple-command example
1) java -jar app.jar ; python app.py
2) java -jar app.jar && python app.py
Note ; or && both can be use to add multiple in single cronjob && means 2nd will only excute if first run successfully.
> and >> use to store output of command into log file.
> means adding only , not appending with old one
>> means adding and appeding with old one.
Notes: In Cronjob we use 2>&1 at the end of log file.
* * * * * date >> /home/amir/cronLog.txt 2>&1
Each user have their own crontab space to configure cronjob
1) to see configured cronjob
crontab -l
2) to modify list
crontab -e
3) to see crontab service is running or not.
service cron status/start/stop ( working for ubuntu)
service crond status/start/stop
1) i Insert at cursor (goes into insert mode)
2) a Write after cursor (goes into insert mode)
3) A Write at the end of line (goes into insert mode)
4) ESC Terminate insert mode
5) u Undo last change
6) U Undo all changes to the entire line
7) o Open a new line (goes into insert mode)
8) dd Delete line
9) D Delete contents of line after the cursor
10) C Delete contents of a line after the cursor and insert new text. Press ESC key to end insertion.
11) dw Delete word
12) cw Change word
13) x Delete character at the cursor
14) r Replace character
15) R Overwrite characters from cursor onward
16) s Substitute one character under cursor continue to insert
17) S Substitute entire line and begin to insert at the beginning of the line
18) ~ Change case of individual character
1) i Insert at cursor (goes into insert mode)
2) a Write after cursor (goes into insert mode)
3) A Write at the end of line (goes into insert mode)
4) o Open a new line (goes into insert mode)
Vagrant is an open-source software product for building and maintaining portable virtual software development environments, e.g. for VirtualBox, KVM, Hyper-V, Docker containers, VMware, and AWS.
it runs on top of virtul provider (virtualbox or vmware). it simplyfy the setup for virtual os.
How to Use vagrant
--------------
1) download the setup exe file. (https://www.vagrantup.com/downloads.html)
2) install the vagrant software.
3) create seperate folder "called" box.
4) go to the folder and hit command: vagrant init
init command create file called Vagrantfile. open the file and configure guest/target os like
config.vm.box = "bento/ubuntu-16.04"
5) to start guest os -- run vagrant up (it will downlaod the os file vagrant clound and install inside once)
how to check status of vagrant running os
------------------------------------------
1) locally inside the box dir
vagrant status
2) from outside the box dir
vagrant global-status
how to stop vagrant-os
-----------------------------
vagrant halt or vagrant halt identifier.
how to destroy the complete vagrant os setup
--------------------------------------------------
vagrant destroy
--------------------------------------------
how to connenct os
---------------------------
vagrant ssh
default user & password is vagrant
how to exit from os
--------------------------
vagrant exit
switch to root user
-------------------------
sudo su -
bydefault VAGRANT_HOME path is ~/.vagrant.d but you can set using env variable of VAGRANT_HOME.
vagrant store all os releated files inside VAGRANT_HOME.
How to Connect Vagrant VM(guest)
--------------------------------------
there are 2 ways (UBUNTU Tested)
1) using port forwarding with local host
bedefault Guest(VM) port :22 forward with Host(Local) with port 2222.
use ip: 127.0.0.1 usr= vagrant pss=vagrant port:2222
3) using private ip
config.vm.network "private_network", ip: "192.168.33.10"
used given ip with usr=vagrant pass=vagrant
In Linux we have many times of interpretor to run linux command/script
most widly use interpretor called as bash
location of bash shell is /bin/bash
1) To see the location : which bash
/bin/bash
2) to see the all possible names of interpretors
cat /etc/shells
3) sh is soft link to bash interpretor
amir@local:/home/amir> which sh
/usr/bin/sh
amir@local:/home/amir> ll /usr/bin/sh
lrwxrwxrwx 1 root root 9 Sep 10 2019 /usr/bin/sh -> /bin/bash
# Used to provide comment in bash/shells script
# This is for qa env
#! Used to inform the os which interpretor you need to use while executin script.
#!/bin/bash --location of bash /bin/bash
In a Bash Shell, they are used with the reference of the following default-parameters or the special variables.
$0 specifies the name of the script to be invoked.
$1-$9 stores the names of the first 9 arguments or can be used as the arguments' positions.
$# specifies the total number (count) of arguments passed to the script.
$* stores all the command line arguments by joining them together.
$@ stores the list of arguments as an array.
$? specifies the process ID of the current script.
$$ specifies the exit status of the last command or the most recent execution process.
$! shows ID of the last background job
read <variable_name>
example:
echo "Enter the user name: "
read first_name
echo $first_name
date +formatcode
list of code
------------
%d Day of the month (e.g., 01 - 31)
%m Month Number of month (01 to 12 where 01 is January)
%Y Year Displays full year (i.e., YYYY) 2020
%H Hour Hour in 24-hour clock format
%M Minutes Minutes (00 to 59)
%S Seconds Seconds (00 to 59)
%N Nanoseconds Nanoseconds (000000000 to 999999999)
Example : 2020-02-23
command: date +%Y-%m-%d
output: 2021-02-23
syntax:
sleep number[suffix]
default-suffix is s
like sleep 9 or sleep 9s
suffix list
------------------------
s - seconds
m - minutes
h - hours
d - days
complex example:
sleep 2d 9h 5m 55s
1) how to create
----------------------
varName="literals"
example:
count=10; # makesure no space before/after ==
name="Amir";
MYDIR="/home/amir/"
2) how to access
-----------------
$varName or "$varName"
example;
echo "The count="$count""
echo "The count: "$count
amir@localhost:~> count=10;
amir@localhost:~> echo "The Count="$count
The Count=10
amir@localhost:~> echo "The Count="$count""
The Count=10
assigning command_output value into variables called command substitution
how to assign
------------------
varName=$(command) -- recommend one
varName=`command` -- can use openquote also not recommended --openquote is not single quote
example
fileList=$(ls)
echo "List of files: "$fileList
how to access
----------------
same as variable rules above
source /etc/app/myconfig.sh
1) decision conditional
2) loop conditional
if [ expression1 ]
then
//code
elif [ expression2 ]
then
//code
else
//code
fi
for name in $names
do
//code like echo $name
done
while [ condition] ;
do
//code
done
function functionName () {
Commands to be executed
}
// to call
functionName
-z string
True if the length of string is zero.
-n string
True if the length of string is non-zero.
string1 == string2
string1 != string2
True if the strings are not equal.
string1 < string2
True if string1 sorts before string2 lexicographically.
string1 > string2
True if string1 sorts after string2 lexicographically.
arg1 OP arg2 --mainly use for numeric things
OP is one of ‘-eq’, ‘-ne’, ‘-lt’, ‘-le’, ‘-gt’, or ‘-ge’.
1) right click menu on selected file
---------------------------------
1) open below path
Computer\HKEY_CLASSES_ROOT\*\shell\
2) rightclick on shell and create new key as <ur option name>
3) rightclick on this key folder and create one key name command
4) double click on command put command<batfilepath> in value box.
5) reboot os
2) right click menu inside dir without selection of file
-----------------------------------------------------
1) open below path
Computer\HKEY_CLASSES_ROOT\Directory\Background\shell\
repeat above path
1) create <servicename>.sh file with below content and replace few service associated 4 below.
SCRIPT=mycmd.sh
RUNAS=vagrant
PIDFILE=/var/run/myservice.pid
LOGFILE=/var/log/myservice.log
2) file content
#!/bin/sh
### BEGIN INIT INFO
# Provides: <NAME>
# Required-Start: $local_fs $network $named $time $syslog
# Required-Stop: $local_fs $network $named $time $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Description: <DESCRIPTION>
### END INIT INFO
SCRIPT=mycmd.sh
RUNAS=vagrant
PIDFILE=/var/run/myservice.pid
LOGFILE=/var/log/myservice.log
start() {
if [ -f /var/run/$PIDNAME ] && kill -0 $(cat /var/run/$PIDNAME); then
echo 'Service already running' >&2
return 1
fi
echo 'Starting service…' >&2
local CMD="$SCRIPT &> \"$LOGFILE\" & echo \$!"
sudo -c "$CMD" -u $RUNAS > "$PIDFILE"
echo 'Service started' >&2
}
stop() {
if [ ! -f "$PIDFILE" ] || ! kill -0 $(cat "$PIDFILE"); then
echo 'Service not running' >&2
return 1
fi
echo 'Stopping service…' >&2
sudo kill -9 $(cat "$PIDFILE") && rm -f "$PIDFILE"
echo 'Service stopped' >&2
}
case "$1" in
start)
start
;;
stop)
stop
;;
uninstall)
uninstall
;;
retart)
stop
start
;;
*)
echo "Usage: $0 {start|stop|restart|uninstall}"
esac
3) sudo systemctl daemon-relaod
4) sudo systemctl status/start/stop <servicename>