ls -hl 顯示詳細信息 -a 顯示所有文件
cd 切換目錄
pwd 顯示當前路徑
mkdir 建立目錄 -p 遞歸建立目錄
rm 刪除目錄 -r強制 f不提示
alias別名設置 /etc/bashre /root/.bashre /用戶/.bashre
hostnamectl 查看主機名 hostnamectl set-hostname 永久修改
ifconfig eth0 //查看eth0網卡信息
5.cat /proc/cpuinfo //查看cpu信息
6.cat /proc/meminfo //查看內存信息
看文件類型 file 文件名
查看內容 cat -n head tail more 按行顯示 less 分屏可控
touch 建立文件
find 查找內容
mv 移動
cp -r 遞歸
tar -cf 要壓縮到的路徑和名字 要壓縮文件的目錄和路徑
tar -xf 要解壓的文件 要解壓文件的路徑
gz --gzip 速度快
.bz2---bzip2 中間
.xz----xz 慢 小
vim 有三種工做模式 命令模式默認 末行模式 輸入模式
i光標起始 o光標下另起一行 a光標後起始位置
gg首 G末 3G指定幾行
p粘貼
u撤銷
x刪除
/查找替換文字
dd 刪除一行 3dd指定刪除
/s/原內容/先內容
:set nu行號
######################################################
nmcli device show 網卡名字
nmcil device staus 查看網卡和連接
nmcil connection show 看設備名稱和Mac地址
cat /etc/resolv.conf 檢查DNS地址
ping -c 2 ping兩次
##########################################
useradd
userdcl
/etc/passwd 用戶名 密碼佔位符 uid gid 用戶描述 用戶家目錄 解釋器
echo 123 | passwd --stdin 用戶名
usermod -d 移動家目錄-m聯合使用 -s解釋器
id 用戶名
看登陸who
pkill -kill -t pts/0
su - 用戶名
sudo提權
groupadd 組名
gpasswd -a 添加
gpasswd -b 刪除 用戶 組
/etc/grouop 組的基本信息
groupdel 刪除
yum -y install
crounteb -e 編輯
crounteb -r 刪除
crounteb -l 查看
分 時 日 月 周 任務命令行(絕對路徑)
* * * * * #每分鐘都執行
date 系統時間
chown 屬主:屬組 /文件名 -R
chmod ugo=rwx /文件名 /文件 -R
ls -l 查看權限
grep nsd01 /etc/查看用戶對文件夾的權限
#################################
wget 下載
rpm -ivh 安裝
rpm -q 軟件名 查看
rpm -e 軟件名 卸載
rpm -ql 詳細詳細
############################
YUM
rm -rf /etc/yumm.repos.d/dc.repo
vim /etc/yum.repos.d/dc.repo
[名字]3
name= 描述
baseurl=指定服務端
enabled=1 是否啓用
gpgcheck=0 是否檢查
yum repolist 顯示廠庫信息
yum -y install 安裝
yum -y info 查詢
yum remove 刪除
清除yum緩存 yum clean all
升級linux內核 wget kernel
reboot重啓
######################################
磁盤
lsblk #查看當前系統的磁盤信息
fdisk #磁盤分區
mkfs,xfs 格式化
mkfs.ext4 格式化
blkid 查看格式化類型
mkdir /要掛載的文件
mount 掛載的磁盤 掛載到的路徑
/etc/fstab
設備路徑 掛載點 格式類型 參數 0 0 ## 設備路徑 掛載點 類型 參數 備份標記 檢測順序
mount -a 運行開機文件
umount 卸載掛載的磁盤
df -h 查看
#############################
刷新 partprobe
############################################
lvm邏輯卷
PV 物理 s查看 remove刪除 create建立
vG 卷組
LV 邏輯卷
successfully 成功
pvcreate 建立物理卷
vgcreate 名字 物理卷 建立卷組
vgextend 卷組名字 要加入的物理卷 擴展
vgdisplay 詳細信息
vgchange -s 1M 卷組名字 改變PE大小 PE 默認爲(4)
vgremove 刪除
lvreate -L(-l改PE大小) 大小(M G) -n 邏輯卷名字 卷組
#########################################
1 空間大小:擴展lvextend -L 要擴展到的大小 路徑邏輯卷
lvs空間
2 文件系統大小擴展:
擴展ext4:resize2fs
擴展xfs:xfs_growfs
df -h系統空間也叫格式化的空間
#######################################
3 縮小ext4支持
ls -l /dev/卷組名/邏輯卷快捷方式
ls /1dev/dm-0邏輯卷存放路徑
######################################
find 目錄 條件 [-a|-o] 條件2
-type 類型(f文件,d目錄,l快捷方式)
-name 名字
-mtime [+-天數]
-user 用戶擁有的文件
find /root -mtime +1000
高級使用find
find .. ... .. -exec 命令 {} \;
grep用法
grep -v ^# /etc/login.defs | grep -v ^$ > /opt.txt
顯示文件的有效信息(去除註釋行 去除空行)
去除
-v ^$匹配空行
-v ^#註釋
#########################################
NTP時間同步
date -s '年-月-日 時:分:秒'
rpm -q chront
yum -y install chrony
配置文件
vim /etc/chrony.conf
將不須要的註釋掉
server classroom.example.com iburst #寫入須要的
重啓程序(重啓服務)
systemctl restart chronyd
systemctl enable chronyd
查看結果
date
LDAP認證
yum -y install sssd
dc=example,de=com
classroom.example.com
#######################################################
shell腳本
重定向輸出
>:只收集前面命令的正確輸出
2>只收集前面命令的錯誤輸出
&>正確錯誤都收集
'':取消特殊字符和命令的意義
``或$()將命令的輸出作爲字符 例:mkdir nsd-`date +%F`
變量:會變化的量
變量名要求
位置變量:$1 $2 $3 腳本後直接加參數 第一個參數爲$1.........
系統變量 $# 你輸入數值的個數 $? 命令是否爲真 &2讓輸出爲報錯輸出
$()變成一個總體的命令
if判斷:
-f 判斷文件存在爲真
-e 存在就是真
-d 判斷目錄存在爲真
-eq等於,-lt小於,-le小於等於,-gt大於,-ge大於等於
1 字符串判斷
str1 = str2 當兩個串有相同內容、長度時爲真
str1 != str2 當串str1和str2不等時爲真
-n str1 當串的長度大於0時爲真(串非空)
-z str1 當串的長度爲0時爲真(空串)
str1 當串str1爲非空時爲真
2 數字的判斷
int1 -eq int2 兩數相等爲真
int1 -ne int2 兩數不等爲真
int1 -gt int2 int1大於int2爲真
int1 -ge int2 int1大於等於int2爲真
int1 -lt int2 int1小於int2爲真
int1 -le int2 int1小於等於int2爲真
3 文件相關的if判斷條件語句
-r file 用戶可讀爲真
-w file 用戶可寫爲真
-x file 用戶可執行爲真
-f file 文件爲正規文件爲真
-d file 文件爲目錄爲真
-c file 文件爲字符特殊文件爲真
-b file 文件爲塊特殊文件爲真
-s file 文件大小非0時爲真
-t file 當文件描述符(默認爲1)指定的設備爲終端時爲真
3 複雜邏輯判斷
-a 與
-o 或
! 非
容器:
a=1000
echo $a
echo ${a}${b}
read -p
for [ $變量 函數 1]//
運行
elif [ $變量 函數 1]
運行
else
運行
for 變量名 in 循環列表 ###列表能夠不參與\執行
do
要作的操做
don
造數工具 {1..20}
設置每次循環隔開的時間sleep 0.5
vim錯誤產生交換文件
能夠刪除緩存文件 在同父目錄下.文件名
#######################################################
## 安全保護防火牆配置和搭建服務##
知識點:
系統安全防禦:SELinux 美國NSA國家安全局主導開發 一套加強Linux系統安全的強制訪問控制體系
SELinux狀態: enforcing(強制) perminssive(寬鬆) disabled(完全禁用)
切換運行模式 setenforce1/2(1強制0寬鬆) /etc/selinux/config文件 ##切換disbled必須重啓
查看運行模式:getenforce
搭建服務:
一 web服務提供網頁內容
實現web服務的軟件: httpd ##最久的web軟件 nginx ##中國使用最多 tomcat
實現web服務的協議: http(超文本傳輸服務)
安裝httpd:yum -y install httpd
重啓服務:systemctl restart httpd
本機測試:firefox 加IP地址
書寫頁面文件
默認存放路徑:/var/www/html
默認首頁文件名稱:index.html
二 FTP服務:傳輸數據
FTP協議:文件傳輸協議
實現FTP服務軟件:vsftpd
安裝 yum -y install vsftpd
重啓服務:systemctl restart vsftpd
本機測試:firefox ftp://加IP地址
默認共享地址/var/ftp/
防火牆:默認禁止全部人去訪問本機web服務
做用: 隔離 擁有衆多的策略 容許出站 嚴格控制入站
載體: 硬件防火牆 貴的一匹
軟件防火牆:firewalld服務基礎
管理工具:firewall-cmd(命令),firewall-cofig(圖形)
防火牆預設四個區域:
public:只容許服務主機的ssh dhcp ping服務
trusted:容許任何訪問
block:阻塞任何來訪請求(明確拒絕,有迴應客服端)
drop:丟棄任何來訪的數據包 (不迴應 節省服務端資源)
根據數據包的原ip地址
防火牆斷定原則
1查看數據包的源ip地址,而後查看本身全部的區域,那個區域中有該源Ip地址規則,則進去該區域
2默認區域 firewall-cmd --get-default-zone(查看默認區域)
firewall-cmd --set-default-zone=block (修改)###能夠通訊,有迴應
firewall-cmd --set-default-zone=drop(不通訊 無迴應)
##########################################################
互聯網常見的協議:
http:超文本傳輸協議 默認端口:80
https:安全的超文本傳輸協議 默認端口:443
DNS:域名解析協議 默認端口:53
FTP:文件傳輸協議 默認端口:21
tftp:簡單的文件傳輸協議 默認端口:69
telnet:遠程管理協議(明文傳輸) 默認端口:23
shh:遠程管理協議(加密傳輸) 默認端口:22
SMTP:郵件協議(收取郵件) 默認端口:25
pop3:用戶發郵件協議 默認端口:110
snmp:簡單的網絡管理協議 默認端口:161
##############################################################
防火牆區域添加規則
firewall-cmd --set-default-zone=public #修改默認區域
firewall-cmd --zone=public --list-all #查看區域規則
firewall-cmd --zone=public --add-servis=ftp #添加協議
firewall-cmd --zone=public --add-servis=http #添加協議
firewall-cmd --zone=public --list-all #查看區域規則
防火牆規則永久設置
--permanent ##加入配置防火牆命令中
從新加載防火牆配置文件
firewall-cmd --reload
單獨拒絕虛擬機desktop訪問
firewall-cmd --zone=block --add-source=172.25.0.10
firewall-cmd --zone=block --list-all
firewall-cmd --zone=block --remove-source=172.25.0.10 #刪除規則
#################################################################
實現本機端口映射
本地應用的端口重定向(端口1->>端口2)
端口重定向對本機無效
firewall-cmd -permanent --zone=public --add-forward-port=port=5423:proto=tcp:toport=80 #配置http默認端口80改成5423
firewall-cmd --reload #重置配置文件
firefox 172.25.0.11:5423 #用desktop訪問http成功
#########################################################
互聯網常見的協議:
http:超文本傳輸協議 默認端口:80
https:安全的超文本傳輸協議 默認端口:443
DNS:域名解析協議 默認端口:53
FTP:文件傳輸協議 默認端口:21
tftp:簡單的文件傳輸協議 默認端口:69
telnet:遠程管理協議(明文傳輸) 默認端口:23
shh:遠程管理協議(加密傳輸) 默認端口:22
SMTP:郵件協議(收取郵件) 默認端口:25
pop3:用戶發郵件協議 默認端口:110
snmp:簡單的網絡管理協議 默認端口:161
端口:利用root能夠改變端口,並且一個程序能夠具有多個端口
監聽端口:端口隨時待命 # https 443
#########################################################
交換空間(虛擬內存)
一 fdisk分區
二 格式化爲交換文件系統
mkswap 加設備路徑 !!#一次只能一個
三 啓用交換分區(交換空間)
swapon 加設備路徑 !!#一次只能一個
查看 swapon -s
四 停用
swapoff 加設備路徑 !!#一次只能一個
五 開機自動啓用交換分區
/etc/fstab
設備路徑 swap swap defaults 0 0
swapon -a #運行掛載文件vim
#########################################################
觸發掛載(autofs)
partprob ##刷新分區表
mkfs.xfs ##格式化爲文件系統
一 安裝觸發掛載的軟件包
yum -y install autofs #安裝
二 重啓autofs程序
systemctl restart autofs #重啓服務
systemctl enable autofs #設置爲開機自啓
systemctl
## 啓動服務以後會在/下自動建立一個目錄/misc 若是有光盤設備直接cd/ls /misc/cd 這個軟件會自動有一條光盤的配置
三 完成對/dev/vdb3觸發掛載的配置
訪問路徑:能夠隨意設置 掛載設備/dev/vdb3 到/liujia/lj(隨意設置)
#### 設置兩級目錄 主配置文件爲監控目錄 掛載配置文件能夠自定義 ####
主配置文件:定義監控目錄 ### /etc/auto.master ###
格式: 監控目錄 掛載配置文件的路徑
掛載配置文件:掛載目錄與設備
cd -fstype=iso9660,ro,nosuid,nodev :/dev/cdrom
掛載點目錄 文件系統類型(格式化類型) 掛載設備
實現步驟 1 首先安裝軟件包 2 重啓服務 3 修改/etc/auto.master配置文件 將/一級文件 和掛載配置文件(/liujia /etc/liu.txt)寫入 #都須要手動建立 4 把 (/etc/auto.misc) 複製到 /etc/更名爲liu.txt 進入修改 (掛載點目錄 #隨便寫) -fstype=(格式化類型) 掛載設備 五.重啓服務 六.測試(ls /liujia/本身建立掛載點目錄)
#############################################################
iSCSI網絡磁盤
• Internet SCSI,網際SCSI接口 默認端口:3260
– 一種基於C/S架構的虛擬磁盤技術
– 服務器提供磁盤空間,客戶機鏈接並當成本地磁盤使用
• backstore,後端存儲
– 對應到服務端提供實際存儲空間的設備,須要起一個管理名稱
• target,磁盤組
– 是客戶端的訪問目標,做爲一個框架,由多個lun組成
• lun,邏輯單元
– 每個lun須要關聯到某一個後端存儲設備,在客戶端
會視爲一塊虛擬硬盤
冰箱---->紙質包裝 木質箱子
• ISCSI Qualified Name 名稱規範(iqn)
– iqn.yyyy-mm.倒序域名:自定義標識
– 用來識別 target 磁盤組,也用來識別客戶機身份
一 修改防火牆默認區域
虛擬機server
]# firewall-cmd --set-default-zone=trusted
虛擬機desktop
]# firewall-cmd --set-default-zone=trusted
二 劃分一個5G的主分區
[root@server0 ~]# fdisk /dev/vdb
[root@server0 ~]# lsblk
虛擬機server服務端:
1.安裝軟件包targetcli
[root@server0 ~]# yum -y install targetcli
2.運行targetcli命令進行配置
[root@server0 ~]# targetcli
/> ls #查看相關配置
1)創建後端存儲backstore,後端存儲
/> backstores/block create name=nsd dev=/dev/vdb1
/> ls
2)創建target磁盤組
/> iscsi/ create iqn.2019-07.com.example:server
/> ls
3)進行lun關聯
/> iscsi/iqn.2019-07.com.example:server/tpg1/luns create /backstores/block/nsd
/> ls
/> exit #退出
4)設置訪問控制,客戶端聲稱的名字,符合iqn名稱規範
[root@server0 ~]# targetcli
/> ls
/> iscsi/iqn.2019-07.com.example:server/tpg1/acls create iqn.2019-07.com.example:desktop
/> ls
5)設置監聽的IP地址
/> iscsi/iqn.2019-07.com.example:server/tpg1/portals create ip_address=172.25.0.11
/> ls
/> exit #退出
三 重啓服務(重啓程序)
[root@server0 ~]# systemctl restart target
[root@server0 ~]# systemctl enable target #設置爲開機自啓
ln -s '/usr/lib/systemd/system/target.service' '/etc/systemd/system/multi-user.target.wants/target.service'
####################################################
虛擬機desktop
1.安裝軟件包(客戶端軟件)
• 所需軟件包:iscsi-initiator-utils
Yum倉庫能夠補全軟件名:
前提1:當前系統沒有安裝此軟件
前提2:必須具有Yum緩存 (yum repolist 能夠直接生成緩存)
[root@desktop0 ~]# yum repolist
[root@desktop0 ~]# rpm -q iscsi-initiator-utils
iscsi-initiator-utils-6.2.0.873-21.el7.x86_64
[root@desktop0 ~]# yum -y install iscsi(tab)
2.設置客戶端生成的名字
[root@desktop0 ~]# vim /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.2019-07.com.example:desktop
3.客戶端刷新聲稱名字的服務
[root@desktop0 ~]# systemctl restart iscsid
Warning: Unit file of iscsid.service changed on
disk, 'systemctl daemon-reload' recommended.
[root@desktop0 ~]# systemctl daemon-reload
[root@desktop0 ~]# systemctl restart iscsid
4.發現共享存儲
Linux查看命令幫助的方法 : man iscsiadm
全文查找/example 按n項下跳轉匹配,看到EXAMPLES
Ctrl - :減少字體
Ctrl Shift + :變大字體
[root@desktop0 ~]# iscsiadm --mode discoverydb --type sendtargets --portal 172.25.0.11 --discover
方法二:發現iSCSI磁盤
– iscsiadm -m discovery -t st -p 服務器地址[:端口]
5.加載共享存儲
[root@desktop0 ~]# systemctl restart iscsi
[root@desktop0 ~]# systemctl enable iscsi
[root@desktop0 ~]# lsblk
###################################################
數據庫服務基礎
什麼是數據庫: 存放數據的倉庫
數據庫中有衆多庫,在每個庫中有衆多的表格
• 常見的關係型 數據庫管理系統
– 微軟的 SQL Server
– IBM的 DB2
– 甲骨文的 Oracle、MySQL
– 社區開源版 MariaDB
database:數據庫
####################################################
虛擬機server:部署mariadb數據庫服務器
• RHEL7 中的 MariaDB相關包
– mariadb-server :提供服務端有關的系統程序
[root@server0 ~]# systemctl restart mariadb
[root@server0 ~]# systemctl enable mariadb
ln -s '/usr/lib/systemd/system/mariadb.service' '/etc/systemd/system/multi-user.target.wants/mariadb.service'
[root@server0 ~]#
####################################################
數據庫的基本操做:
[root@server0 ~]# mysql #進入數據庫
MariaDB [(none)]> show databases; #查看全部的庫
MariaDB [(none)]> create database nsd; #建立nsd庫
MariaDB [(none)]> show databases;
MariaDB [(none)]> drop database nsd; #刪除nsd庫
MariaDB [(none)]> show databases;
MariaDB [(none)]> create database nsd1906;
MariaDB [(none)]> show databases;
MariaDB [(none)]> use mysql; #切換到mysql庫
MariaDB [mysql]> use nsd1906;
MariaDB [nsd1906]> use mysql;
MariaDB [mysql]> show tables; #查看當前庫中有哪些表格
MariaDB [mysql]> exit #退出整個數據庫
###################################################
在Linux命令行,爲數據庫管理員設置密碼
數據庫管理員爲root,對數據庫有最高權限用戶,存放在mysql庫user表
Linux系統管理員爲root,對系統有最高權限用戶,存放/etc/passwd
• 爲數據庫帳號修改密碼
– mysqladmin [-u用戶名] [-p[舊密碼]] password '新密碼'
]# mysqladmin -u root password '123' #首次設置密碼
]# mysql -u root -p #交互式進入
Enter password:
]# mysql -u root -p123 #非交互式進入
已知舊密碼修改新密碼
]# mysqladmin -u root -p123 password '456'
##################################################
MariaDB主配置文件:
[root@server0 ~]# ls /etc/my.cnf
##################################################
表格 : 增(insert) 刪(delete) 改(update) 查(select)
表記錄 表字段
編號 姓名 聯繫方式 居住地址
1 dc 138..... 東村
2 tc 138..... 西村
• 導入/恢復到數據庫
– mysql [-u用戶名] [-p[密碼]] 數據庫名 < 備份文件.sql
[root@server0 ~]# wget http://classroom.example.com/pub/materials/users.sql
[root@server0 ~]# ls
]# mysql -u root -p123 nsd1906 < /root/users.sql
]# mysql -u root -p123 #進入到數據庫
MariaDB [(none)]> use nsd1906; #切換到nsd1906庫
MariaDB [nsd1906]> show tables; #顯示全部表格
+-------------------+
| Tables_in_nsd1906 |
+-------------------+
| base |
| location |
+-------------------+
################################################
查(select)
格式: select 表字段 from 庫名.表名 where 條件 ;
]# mysql -u root -p123 #進入到數據庫
> use nsd1906; #切換到nsd1906庫
> show tables; #顯示全部表格
> select * from base; #查看錶全部字段及全部記錄內容
> select * from location; #查看錶全部字段及全部記錄內容
> use mysql;
> select * from nsd1906.base;
> use nsd1906;
> select id,name from base;
> select * from base where name='tom';
> select * from base where password='456';
> select * from base where id='3';
###################################################
查詢表結構: desc 表名;
MariaDB [(none)]> use nsd1906;
MariaDB [nsd1906]> desc base;
+----------+--------
| Field |
+----------+---------
| id |
| name |
| password |
+----------+----------
MariaDB [nsd1906]> use mysql;
MariaDB [mysql]> desc user;
MariaDB [mysql]> select user,host,password from user;
####################################################
數據庫受權
用戶受權設置
• MariaDB [(none)]> 交互指令
– GRANT 權限列表 ON 數據庫名.表名 TO 用戶名@
客戶機地址 IDENTIFIED BY '密碼';
– 除了 root 用戶,此nsd1906數據庫只能被用戶 lisi 查詢,
此用戶的密碼爲123
> grant select on nsd1906.* to lisi@localhost identified by '123';
當lisi從localhost本地登陸,輸入密碼123,將會得到nsd1906庫中全部表格的查詢權限;
> select user,host,password from user;
####################################################
案例4:使用數據庫查詢
2. 在系統 server0 上使用數據庫 nsd1906,並使用相
應的 SQL 查詢以回答下列問題:
1)密碼是 solicitous 的人的名字?
[root@server0 ~]# mysql -u root -p123
> use nsd1906;
> select * from base;
> select * from base where password='solicitous';
> select name from base where password='solicitous';
2)有多少人的姓名是 Barbara 同時居住在 Sunnyvale?
> select * from base,location
where base.name='Barbara' and
location.city='Sunnyvale' and base.id=location.id;
> select count(*) from base,location
where base.name='Barbara' and
location.city='Sunnyvale' and base.id=location.id;
> insert base values('6','Barbara','xixi'); #插入記錄
> select * from base;
> insert location values('6','Sunnyvale'); #插入記錄
> select * from location;
##################################################
1. 禁止空密碼root用戶訪問 mariadb 數據庫
> use mysql;
> select user,host,password from user;
> select user,host,password from user where password='';
> delete from user where password=''; #刪除記錄
> select user,host,password from user;
> flush privileges; #刷新user表記錄
驗證登陸失敗:
[root@server0 ~]# mysql -u root -h server0.example.com
#####################################################################33\
NFS共享概述
• Network File System,網絡文件系統
– 用途:爲客戶機提供共享使用的文件夾
– 協議:NFS(TCP/UDP 2049)、RPC(TCP/UDP 111)
• 所需軟件包:nfs-utils
• 系統服務:nfs-server
虛擬機server:構建NFS服務
1.安裝nfs-utils軟件包
[root@server0 ~]# rpm -q nfs-utils
nfs-utils-1.3.0-0.el7.x86_64
2.配置共享
[root@server0 ~]# mkdir /nsd
[root@server0 ~]# echo 123 > /nsd/1.txt
[root@server0 ~]# ls /nsd/
[root@server0 ~]# vim /etc/exports
– 文件夾路徑 客戶機地址(權限) 客戶機地址(權限) .. ..
/nsd *(ro)
/opt *(ro)
3.重啓服務(重啓程序)
[root@server0 ~]# systemctl restart nfs-server
虛擬機desktop:訪問共享文件夾
1.掛載共享目錄
]# mkdir /mnt/a /mnt/b
]# showmount -e 172.25.0.11 #查看服務端共享內容
]# mount 172.25.0.11:/nsd /mnt/a/ | mount /dev/sdb1 /nsd
]# df -h
]# ls /mnt/a
]# mount 172.25.0.11:/opt/ /mnt/b
]# ls /mnt/b
]# df -ah #顯示當前所有的掛載
2.開機自動掛載/etc/fstab
_netdev:聲明網絡設備
指明掛載本設備須要有網絡參數再進行掛載
[root@desktop0 ~]# vim /etc/fstab
172.25.0.11:/nsd /mnt/a nfs defaults,_netdev 0 0
172.25.0.11:/opt /mnt/b nfs defaults,_netdev 0 0
[root@desktop0 ~]# umount /mnt/a
[root@desktop0 ~]# umount /mnt/b
[root@desktop0 ~]# df -ah
[root@desktop0 ~]# mount -a
[root@desktop0 ~]# df -ah
###################################################
HTTP服務基礎
Web服務:提供網頁內容
• 基於 B/S (Browser/Server)架構的網頁服務
– 服務端提供網頁
– 瀏覽器下載並顯示網頁
• Hyper Text Markup Language(html),超文本標記語言
• Hyper Text Transfer Protocol(http),超文本傳輸協議
• 軟件包:httpd(Apache組織) #專門實現Web服務的軟件
虛擬機server:
1.安裝httpd軟件
[root@server0 ~]# yum -y install httpd
2.重啓服務
[root@server0 ~]# systemctl restart httpd
3.訪問測試
[root@server0 ~]# firefox 172.25.0.11
4.書寫頁面文件
]# echo '<h1>NSD1906 Web' > /var/www/html/index.html
]# cat /var/www/html/index.html
]# firefox 172.25.0.11
#####################################################
主配置文件配置字段:
– Listen:監聽地址:端口(80)
– ServerName:本站點註冊的DNS名稱(空缺)
– DocumentRoot:網頁根目錄(/var/www/html)
– DirectoryIndex:起始頁/首頁文件名(index.html)
虛擬機classroom:
DNS服務器的解析:將域名解析爲IP地址
server0.example.com----->172.25.0.11
www0.example.com----->172.25.0.11
webapp0.example.com----->172.25.0.11
[root@desktop0 ~]# nslookup webapp0.example.com
[root@desktop0 ~]# nslookup server0.example.com
[root@desktop0 ~]# nslookup www0.example.com
##################################################
– DocumentRoot:網頁文件的根目錄(/var/www/html)
虛擬機server
]# mkdir /var/www/myweb
]# echo '<h1>wo shi myweb' > /var/www/myweb/index.html
]# cat /var/www/myweb/index.html
]# vim /etc/httpd/conf/httpd.conf
DocumentRoot "/var/www/myweb"
]# systemctl restart httpd
虛擬機desktop:測試
[root@desktop0 ~]# firefox 172.25.0.11
#####################################################
網絡路徑與實際服務器路徑 網頁文件的根目錄
客戶端:firefox http://172.25.0.11:80---->服務端172.25.0.11
----->httpd 80----->DocumentRoot /var/www/myweb--->index.html
客戶端: firefox 172.25.0.11
服務端: /var/www/myweb
客戶端: firefox 172.25.0.11/abc
服務端: /var/www/myweb/abc/index.html
DocmentRoot /var/www/myweb
客戶端: firefox 172.25.0.11/var/www/myweb/abc
服務端: /var/www/myweb/var/www/myweb/abc
虛擬機server:
]# mkdir /var/www/myweb/abc
]# echo '<h1>wo shi abc' > /var/www/myweb/abc/index.html
]# firefox 172.25.0.11/abc
vsftpd----->/var/ftp
httpd------>/var/www/html
####################################################
虛擬Web主機
• 虛擬Web主機
– 由同一臺服務器提供多個不一樣的Web站點
• 區分方式
– 基於域名的虛擬主機
– 基於端口的虛擬主機
– 基於IP地址的虛擬主機
• 配置文件路徑
– /etc/httpd/conf/httpd.conf #主配置文件
– /etc/httpd/conf.d/*.conf #調用配置文件
#####################################################
• 爲每一個虛擬站點添加配置
<VirtualHost IP地址:端口>
ServerName 此站點的DNS名稱
DocumentRoot 此站點的網頁根目錄
</VirtualHost>
虛擬機server: vim命令模式下 u 能夠撤銷
]# vim /etc/httpd/conf.d/nsd01.conf #創建調用配置文件
<VirtualHost *:80> #啓用虛擬Web主機功能
ServerName server0.example.com #指定網站DNS名稱
DocumentRoot /var/www/qq #指定網頁文件根目錄
</VirtualHost>
<VirtualHost *:80>
ServerName www0.example.com
DocumentRoot /var/www/baidu
</VirtualHost>
]# mkdir /var/www/qq /var/www/baidu
]# echo '<h1>QQ 企鵝' > /var/www/qq/index.html
]# echo '<h1>baidu 百度' > /var/www/baidu/index.html
]# systemctl restart httpd
####################################################
虛擬Web主機優先級,由上到下依次匹配,匹配即中止
一旦使用虛擬Web主機功能,全部的網站都必須利用虛擬Web主機實現
[root@server0 ~]# vim /etc/httpd/conf.d/nsd01.conf
<VirtualHost *:80>
ServerName www0.example.com
DocumentRoot /var/www/baidu
</VirtualHost>
<VirtualHost *:80>
ServerName server0.example.com
DocumentRoot /var/www/qq
</VirtualHost>
<VirtualHost *:80>
ServerName webapp0.example.com
DocumentRoot /var/www/myweb
</VirtualHost>
[root@server0 ~]# systemctl restart httpd
##################################################
Web訪問控制,針對存放網頁文件的目錄
子目錄默認繼承父目錄的Web訪問控制
<Directory />
Require all denied #拒絕全部人訪問
</Directory>
<Directory "/var/www">
Require all granted #容許全部人訪問
</Directory>
案例:自定義Web的網頁文件根目錄
1.實現server0.example.com訪問網頁文件根目錄修改成/webroot
]# vim /etc/httpd/conf.d/nsd01.conf
<VirtualHost *:80>
ServerName server0.example.com
DocumentRoot /webroot
</VirtualHost>
]# mkdir /webroot
]# echo '<h1>wo shi webroot' > /webroot/index.html
2.修改訪問控制
[root@server0 ~]# vim /etc/httpd/conf/httpd.conf
[root@server0 ~]# vim /etc/httpd/conf.d/nsd02.conf
<Directory "/webroot"> #針對/webroot路徑
Require all granted #容許全部人訪問
</Directory>
[root@server0 ~]# systemctl restart httpd
3.SELinux策略
[root@server0 ~]# setenforce 0
[root@server0 ~]# getenforce
Permissive
[root@server0 ~]# vim /etc/selinux/config
SELINUX=permissive
[root@server0 ~]# firefox server0.example.com
###############################################
環境準備:防火牆設置
虛擬機server
]# firewall-cmd --set-default-zone=trusted
虛擬機desktop
]# firewall-cmd --set-default-zone=trusted
###################################################
案例:爲虛擬機server配置如下虛擬Web主機
- 實現三個網站的部署
- 實現客戶端訪問server0.example.com網頁內容爲 賣女孩的小火柴
- 實現server0.example.com網頁根目錄爲/var/www/abc01
- 實現客戶端訪問www0.example.com網頁內容爲 奔跑吧駱駝
- 實現www0.example.com網頁根目錄爲/var/www/abc02
- 實現客戶端訪問webapp0.example.com網頁內容爲 20裏春風不如你
- 實現webapp0.example.com網頁根目錄爲/var/www/abc03
###################################################
文件夾權限
• 針對 DocumentRoot 網頁目錄的權限控制
– httpd 運行身份(用戶/組):apache
客戶機地址限制
• 使用 <Directory> 配置區段
– 每一個文件夾自動繼承其父目錄的ACL訪問權限
– 除非針對子目錄有明確設置
<Directory 目錄的絕對路徑>
.. ..
Require all denied|granted
Require ip IP或網段地址 .. ..
</Directory>
案例1:配置網頁內容訪問
在 Web 網站 http://server0.example.com 的
DocumentRoot 目錄下建立一個名爲 private 的子目錄,要求以下:
1.建立目錄
]# cat /etc/httpd/conf.d/nsd01.conf #查看DocumentRoot
]# mkdir /var/www/abc01/private
2.從 http://classroom.example.com/pub/materials/private.html下載一個文件副本到這個目錄,重命名爲 index.html
不要對文件 index.html 的內容做任何修改
]# cd /var/www/abc01/private
]# wget http://classroom.example.com/pub/materials/private.html
]# mv private.html index.html
]# firefox server0.example.com/private
3)從虛擬機server0 上,任何人均可以瀏覽 private 的內容,
可是從其餘系統不能訪問這個目錄的內容
[root@server0 /]# vim /etc/httpd/conf/httpd.conf
[root@server0 /]# vim /etc/httpd/conf.d/nsd02.conf
<Directory "/var/www/abc01/private">
Require ip 172.25.0.11 #僅容許172.25.0.11訪問
</Directory>
[root@server0 /]# systemctl restart httpd
虛擬機desktop:
[root@desktop0 ~]# firefox server0.example.com/private
Forbidden
You don't have permission to access /private on this server.
####################################################
案例2:使用自定Web根目錄
調整 Web 站點 http://server0.example.com 的網頁目錄,要求以下:
1)新建目錄 /webroot,做爲此站點新的網頁目錄
]# mkdir /webroot
]# echo '<h1> wo shi webroot' > /webroot/index.html
[root@server0 /]# vim /etc/httpd/conf.d/nsd01.conf
<VirtUalHost *:80>
ServerName server0.example.com
DocumentRoot /webroot
</VirtUalHost>
2)修改訪問控制
[root@server0 /]# vim /etc/httpd/conf.d/nsd02.conf
<Directory "/webroot">
Require all granted #容許全部人能夠訪問
</Directory>
[root@server0 /]# systemctl restart httpd
############################################################
3)修改SELinux策略:安全上下文值(打標籤) 布爾值策略 非默認端口開放
神州旅遊: 紅色帽子
達內旅遊: 綠色帽子
]# semanage --help
]# semanage fcontext -l | less #查看全部上下文值
]# ls -Zd /var/www/ #專查看目錄上下文值
]# ls -Zd /webroot/
• 方式1:參照標準目錄,重設新目錄的屬性
– chcon [-R] --reference=模板目錄 新目錄
]# chcon -R --reference=/var/www /webroot/
]# ls -Zd /webroot/
測試:
[root@desktop0 ~]# firefox server0.example.com
###################################################
部署動態網站
靜態網站的運行
• 服務端的原始網頁 = 瀏覽器訪問到的網頁
– 由Web服務軟件處理全部請求
– 文本(txt/html)、圖片(jpg/png)等靜態資源
動態網站的運行
• 服務端的原始網頁 ≠ 瀏覽器訪問到的網頁
– 由Web服務軟件接受請求,動態程序轉後端模塊處理
– PHP網頁、Python網頁、JSP網頁......
################################################
爲站點 webapp0.example.com 配置提供動態Web內容,要求以下:
1.部署Python頁面文件
]# cat /etc/httpd/conf.d/nsd01.conf #查看DocumentRoot
]# cd /var/www/abc03
]# wget http://classroom.example.com/pub/materials/webinfo.wsgi
]# ls
2.頁面跳轉(頁面別名 地址重寫)方便用戶的訪問
當用戶訪問 webapp0.example.com將webinfo.wsgi頁面進行呈現
格式: Alias 網絡路徑 實際路徑
Alias / /var/www/abc03/webinfo.wsgi
當用戶訪問的時網頁文件根目錄時,跳轉到/var/www/abc03/webinfo.wsgi
[root@server0 /]# vim /etc/httpd/conf.d/nsd01.conf
<VirtUalHost *:80>
ServerName webapp0.example.com
DocumentRoot /var/www/abc03
Alias / /var/www/abc03/webinfo.wsgi
當用戶訪問的是網頁文件根目錄時,跳轉到/var/www/abc03/webinfo.wsgi
</VirtUalHost>
[root@server0 /]# systemctl restart httpd
[root@desktop0 ~]# firefox webapp0.example.com
3.翻譯Python頁面代碼
[root@server0 /]# yum -y install mod_wsgi
[root@server0 /]# vim /etc/httpd/conf.d/nsd01.conf
<VirtUalHost *:80>
ServerName webapp0.example.com
DocumentRoot /var/www/abc03
WsgiScriptAlias / /var/www/abc03/webinfo.wsgi
</VirtUalHost>
[root@server0 /]# systemctl restart httpd
頁面內容顯示:
UNIX時間戳:從1970-1-1 0:0:0到達如今時間,所經歷的秒數
[root@desktop0 ~]# firefox webapp0.example.com
4.此虛擬Web主機偵聽在端口8909
[root@server0 /]# vim /etc/httpd/conf.d/nsd01.conf
Listen 8909 #設置httpd程序監聽8909端口
<VirtUalHost *:8909> #設置虛擬Web主機監聽8909端口
ServerName webapp0.example.com
DocumentRoot /var/www/abc03
WsgiScriptAlias / /var/www/abc03/webinfo.wsgi
</VirtUalHost>
]# semanage port -l | grep http #查看關於http開放的端口
]# semanage port -a -t http_port_t -p tcp 8909
此命令會佔用較多內存, -a 添加 -t 類型 -p 協議
]# systemctl restart httpd
測試驗證: firefox webapp0.example.com:8909
總結:訪問時端口優先級最高
####################################################
安全Web服務
PKI公鑰基礎設施
• Public Key Infrastructure,公鑰基礎設施
– 公鑰:主要用來加密數據
– 私鑰:主要用來解密數據(與相應的公鑰匹配)
– 數字證書:證實擁有者的合法性/權威性(單位名稱、
有效期、公鑰、頒發機構及簽名、......)
– Certificate Authority,數字證書受權中心:負責證書
的申請/審覈/頒發/鑑定/撤銷等管理工做
數據證書受權中心:虛擬機classroom
#################################################
虛擬機server:
爲站點 www0.example.com 配置安全加密的Web內容
1.部署網站證書(營業執照)
]# cd /etc/pki/tls/certs/
]# wget http://classroom.example.com/pub/tls/certs/server0.crt
]# ls
2.部署網站的根證書(工商局的信息)
]# cd /etc/pki/tls/certs/
]# wget http://classroom.example.com/pub/example-ca.crt
]# ls
3.部署解密數據的私鑰
]# cd /etc/pki/tls/private/
]# wget http://classroom.example.com/pub/tls/private/server0.key
]# ls
4.安裝能夠進行加密支持的軟件mod_ssl
[root@server0 /]# yum -y install mod_ssl
[root@server0 /]# vim /etc/httpd/conf.d/ssl.conf
補充:vim末行模式 輸入set nu 能夠開啓行號
59 DocumentRoot "/var/www/abc02"
60 ServerName www0.example.com:443
指定網站證書
100 SSLCertificateFile /etc/pki/tls/certs/server0.crt
指定解密的私鑰
107 SSLCertificateKeyFile /etc/pki/tls/private/server0.key
指定網站的根證書
122 SSLCACertificateFile /etc/pki/tls/certs/example-ca.crt
[root@server0 /]# systemctl restart httpd
[root@server0 /]# firefox https://www0.example.com
我已瞭解可能的風險--->添加例外---->確認安全例外
###################################################
補充:Samba共享服務(Windows與Linux跨平臺的共享)
smb(用戶驗證通訊協議) cifs(Samba獨有文件系統)
程序名(服務名):smb
虛擬機server:
1.安裝軟件包
[root@server0 /]# yum -y install samba
2.建立Samba共享賬號
1.創建在本地用戶的基礎上
2.採用獨立的密碼,與用戶登陸系統的密碼不一樣
[root@server0 /]# useradd harry
[root@server0 /]# pdbedit -a harry #添加爲samba賬號
new password:
retype new password:
[root@server0 /]# pdbedit -L #查看全部的samba賬號
[root@server0 /]# pdbedit -x harry #刪除samba賬號harry
[root@server0 /]# pdbedit -a harry
3.建立共享目錄及配置共享
[root@server0 /]# mkdir /public
[root@server0 /]# echo haha > /public/1.txt
[root@server0 /]# vim /etc/samba/smb.conf
命令模式: G(大寫) 到全文的末行
[nsd] #設置共享名
path = /public #設置實際共享的路徑
[root@server0 /]# systemctl restart smb
4.修改SELinux策略: 布爾值策略(服務功能的開關)
[root@server0 /]# getsebool -a | grep samba
[root@server0 /]# setsebool samba_export_all_ro on
[root@server0 /]# getsebool -a | grep samba
客戶端:虛擬機desktop0
1.安裝軟件包,支持cifs文件系統
[root@desktop0 ~]# yum -y install cifs-utils
2.進行掛載訪問
]# mkdir /mnt/smb
格式:mount -o user=用戶名,pass=密碼 //服務器IP地址/共享名 掛載點目錄
]# mount -o user=harry,pass=123 //172.25.0.11/nsd /mnt/smb/
]# df -h
]# ls /mnt/smb/
3.開機自動掛載/etc/fstab
//172.25.0.11/nsd /mnt/smb cifs defaults,user=harry,pass=123,_netdev 0 0
[root@desktop0 ~]# umount /mnt/smb/
[root@desktop0 ~]# df -h
[root@desktop0 ~]# mount -a
[root@desktop0 ~]# df -h
###################################################
網絡配置
設置網絡參數
一 設置永久的主機名,配置文件爲/etc/hostname
[root@server0 ~]# echo 'nsd.tedu.cn' > /etc/hostname
[root@server0 ~]# cat /etc/hostname
nsd.tedu.cn
[root@server0 ~]# hostname
nsd.tedu.cn
[root@server0 ~]# exit
登出
Connection to 172.25.0.11 closed.
[student@room9pc01 ~]$ gos
Last login: Sat Jul 13 08:35:21 2019 from 172.25.0.250
[root@nsd ~]#
二 永久設置設置IP地址 子網掩碼 網關地址
1.查看識別的網卡名
[root@nsd ~]# nmcli connection show
名稱
System eth0
2.設置永久的IP地址 子網掩碼 網關地址
]# nmcli connection modify 'System eth0'
ipv4.method manual
ipv4.addresses '172.25.0.110/24 172.25.0.254'
connection.autoconnect yes
]# nmcli connection 修改 '網卡名'
ipv4.方法 手工設置
ipv4.地址 'IP地址/子網掩碼 網關地址'
每次開機自動啓用配置
3.激活配置
[root@nsd ~]# nmcli connection up 'System eth0'
[root@nsd ~]# ifconfig | head -2
[root@nsd ~]# route #查看網關地址
Gateway
172.25.0.254
三 DNS服務器的地址
永久配置文件:/etc/resolv.conf
]# echo 'nameserver 172.25.254.254' > /etc/resolv.conf
]# cat /etc/resolv.conf
nameserver 172.25.254.254
]# nslookup server0.example.com
##################################################
IPv6地址的組成
• IPv4 地址表示
– 32個二進制位,點分隔的十進制數
– 例如:172.25.0.十一、127.0.0.1
• IPv6 地址表示
– 128個二進制位,冒號分隔的十六進制數
– 每段內連續的前置 0 可省略、連續的多個 : 可簡化爲 ::
– 例如:
2003:ac18:0000:0000:0000:0000:0000:0305
2003:ac18::305
[root@nsd ~]# nmcli connection modify 'System eth0' ipv6.method manual ipv6.addresses 2003:ac18::305/64 connection.autoconnect yes
[root@nsd ~]# nmcli connection up 'System eth0'
successfully(成功)
[root@nsd ~]# ifconfig | head -4
[root@nsd ~]# ping6 2003:ac18::305
###################################################
聚合鏈接(鏈路聚合 網卡綁定)
做用:實現網卡的高可用
eth1 eth2
虛擬網卡:team0 192.168.1.1
1.生成虛擬的網卡team0 參考:man teamd.conf
全文搜索/example 按 n跳轉匹配
]# nmcli connection add type team
con-name team0 ifname team0 autoconnect yes
config '{"runner": {"name": "activebackup"}}'
]# nmcli connection 添加 類型 組隊
配置文件名 team0 網卡名 team0 開機自動啓用
配置運行方式爲 活躍備份方式
]# ifconfig team0
2.添加成員
]# nmcli connection add type team-slave
con-name team0-1 ifname eth1 master team0
]# nmcli connection add type team-slave
con-name team0-2 ifname eth2 master team0
]# nmcli connection 添加 類型 team-成員
配置文件名 team0-2 網卡名爲 eth2 主設備 team0
3.team0配置IP地址
]# nmcli connection modify team0
ipv4.method manual ipv4.addresses 192.168.1.1/24
connection.autoconnect yes
]# nmcli connection up team0
]# teamdctl team0 state #專用於查看team0信息
]# ifconfig eth2 down
]# teamdctl team0 state
若是有敲錯,刪除全部從新開始
]# nmcli connection delete team0 #刪除配置文件
]# nmcli connection delete team0-1 #刪除配置文件
]# nmcli connection delete team0-2 #刪除配置文件
##################################################
基礎郵件服務
前提:修改IP地址,符合DNS解析結果
[root@nsd ~]# nmcli connection modify 'System eth0'
ipv4.method manual
ipv4.addresses '172.25.0.11/24 172.25.0.254'
connection.autoconnect yes
[root@nsd ~]# nmcli connection up 'System eth0'
查看DNS服務器地址:
[root@nsd ~]# cat /etc/resolv.conf
nameserver 172.25.254.254
[root@nsd ~]# nslookup server0.example.com #測試解析
##################################################
電子郵件通訊
• 電子郵件服務器的基本功能
– 爲用戶提供電子郵箱存儲空間(用戶名@郵件域名)
– 處理用戶發出的郵件 —— 傳遞給收件服務器
– 處理用戶收到的郵件 —— 投遞到郵箱
DNS服務器:虛擬機classroom
yg@qq.com
yg@server0.example.com
###############################################
虛擬機server:構建郵件服務器
1.安裝postfix軟件,實現郵件服務
[root@nsd ~]# rpm -q postfix
postfix-2.10.1-6.el7.x86_64
2.修改配置文件
[root@nsd ~]# vim /etc/postfix/main.cf
vim末行模式: set nu 開啓行號
99 myorigin = server0.example.com #默認補全的域名後綴
116 inet_interfaces = all #在本機全部網卡啓用郵件功能
164 mydestination = server0.example.com
#判斷爲本域郵件的依據
3.重啓郵件服務
[root@nsd ~]# systemctl restart postfix
使用mail命令發信/收信
• mail 發信操做
– mail -s '郵件標題' -r 發件人 收件人
[root@nsd ~]# useradd yg
[root@nsd ~]# useradd xln
[root@nsd ~]# mail -s 'test01' -r yg xln
hahaxixihehelele
.
EOT
[root@nsd ~]# mail -u xln #查看xln的郵件
>N 1 yg@server0.example.c Sat Jul 13 14:2118/569
& 1 #輸入郵件編號1查看郵件內容
[root@nsd ~]# echo '123' | mail -s 'abc' -r yg xln
[root@nsd ~]# mail -u xln
##################################################
parted分區工具,進行GPT分區模式
MBR分區模式: fdisk分區工具
最多有4個主分區,劃分3個主分區,1個擴展分區,n個邏輯分區
最大的空間支持:2.2TB
GPT分區模式:parted分區工具
最多有128個主分區
最大的空間支持:18EB
1EB=1024PB
1PB=1024TB
[root@nsd ~]# lsblk
[root@nsd ~]# parted /dev/vdb
(parted) mktable gpt #指定分區模式gpt
(parted) print #輸出分區表信息
(parted) mkpart #劃分新的分區
分區名稱? []? nsd #隨意起名字
文件系統類型? [ext2]? xfs #隨意寫不起決定性做用
起始點? 0
結束點? 2G
忽略/Ignore/放棄/Cancel? Ignore #輸入 i 忽略
(parted) unit GB #使用GB做爲單位顯示
(parted) print
(parted) mkpart
分區名稱? []? nsd
文件系統類型? [ext2]? xfs
起始點? 2G
結束點? 4G
(parted) print
###################################################################
構建新的教學環境
構建新的教學環境
1.構建兩臺虛擬機,操做系統爲CentOS7.5
[student@room9pc01 ~]$ clone-vm7
Enter VM number: 8
Creating Virtual Machine disk image...... [OK]
Defining new virtual machine...... [OK]
[student@room9pc01 ~]$ clone-vm7
Enter VM number: 9
Creating Virtual Machine disk image...... [OK]
Defining new virtual machine...... [OK]
#修改兩臺虛擬機名爲A與B
2.利用root進入兩臺虛擬機,密碼爲:123456
3.配置永久主機名
虛擬機A:svr7.tedu.cn
虛擬機B:pc207.tedu.cn
4.配置IP地址
虛擬機A:爲eth0配置 192.168.4.7/24
虛擬機B:爲eth0配置 192.168.4.207/24
5.利用真機進行遠程管理兩臺虛擬機
[student@room9pc01 ~]$ ping 192.168.4.7
[student@room9pc01 ~]$ ping 192.168.4.207
[student@room9pc01 ~]$ ssh -X root@192.168.4.7
[student@room9pc01 ~]$ ssh -X root@192.168.4.207
6.爲真機上設置永久別名
[student@room9pc01 ~]$ vim /home/student/.bashrc
alias goa='ssh -X root@192.168.4.7'
alias gob='ssh -X root@192.168.4.207'
新開一個終端驗證
7.構建Yum倉庫
服務端:真機構建FTP服務器,共享光盤全部內容
1)真機檢測軟件包vsftpd的安裝
[student@room9pc01 ~]$ rpm -q vsftpd
vsftpd-3.0.2-22.el7.x86_64
[student@room9pc01 ~]$ systemctl status vsftpd
2)共享光盤全部內容
默認共享的路徑:/var/ftp
]$ mkdir /var/ftp/centos-1804/
]$ mount /iso/CentOS7-1804.iso /var/ftp/centos-1804/
]$ ls /var/ftp/centos-1804/
]$ vim /etc/fstab
/var/lib/libvirt/images/iso/CentOS7-1804.iso /var/ftp/centos-1804 iso9660 defaults 0 0
]$ firefox ftp://192.168.4.254/centos-1804
客戶端:兩臺虛擬機
[root@svr7 ~]# vim /etc/yum.repos.d/local.repo
[local_repo]
name=CentOS-$releasever - Base
baseurl="ftp://192.168.4.254/centos-1804"
enabled=1
gpgcheck=0
[root@svr7 ~]# yum -y install httpd
#####################################################
虛擬機C
1.配置主機名爲:svr10.tedu.cn
2.配置eth0的IP地址:192.168.4.10/24
3.配置Yum倉庫,指向服務端爲真機的FTP服務
虛擬機D
1.配置主機名爲:pc20.tedu.cn
2.配置eth0的IP地址:192.168.4.20/24
3.配置Yum倉庫,指向服務端爲真機的FTP服務
##################################################
擴展的幾個應用
目錄結構
• 認識Linux的目錄層次:
– man hier
• 常見一級目錄的用途
/boot 存放系統引導必需的文件,包括內核、啓動配置
/bin、/sbin 存放各類命令程序
/dev 存放硬盤、鍵盤、鼠標、光驅等各類設備文件
/etc 存放Linux系統及各類程序的配置文件
/root、/home/用戶名 分別是管理員root、普通用戶的默認家目錄
/var 存放日誌文件、郵箱目錄等常常變化的文件
/proc 存放內存中的映射數據,不佔用磁盤
/tmp 存放系統運行過程當中使用的一些臨時文件
[root@svr7 ~]# ls -ld /tmp
drwxrwxrwt. 8 root root 172 7月 15 10:34 /tmp
權限的數值表示
• 權限的數值化
– 基本權限:r = 4,w = 2,x = 1
– 附加權限:SUID = 4,SGID = 2,Sticky Bit = 1
[root@svr7 ~]# mkdir /nsd01
[root@svr7 ~]# ls -ld /nsd01
[root@svr7 ~]# chmod 750 /nsd01
[root@svr7 ~]# ls -ld /nsd01
[root@svr7 ~]# chmod 700 /nsd01
[root@svr7 ~]# ls -ld /nsd01
[root@svr7 ~]# chmod 007 /nsd01
[root@svr7 ~]# ls -ld /nsd01
[root@svr7 ~]# chmod 755 /nsd01
[root@svr7 ~]# ls -ld /nsd01
歷史命令
• 管理/調用曾經執行過的命令
– history:查看歷史命令列表
– history -c:清空歷史命令
– !n:執行命令歷史中的第n條命令
– !str:執行最近一次以str開頭的歷史命令
• 調整歷史命令的數量
[root@svr7 ~]# vim /etc/profile
HISTSIZE=1000 //默認記錄1000條
[root@svr7 ~]# history #顯示歷史命令列表
[root@svr7 ~]# history -c #清空全部的歷史命令
[root@svr7 ~]# history
1 history
[root@svr7 ~]# cat -n /etc/redhat-release
[root@svr7 ~]# ls /root/
[root@svr7 ~]# cat /etc/hosts
[root@svr7 ~]# history
[root@svr7 ~]# !cat #執行臨時命令中最近以cat開頭的命令
[root@svr7 ~]# !ls
實用小命令工具
• du,統計文件的佔用空間
– du [選項]... [目錄或文件]...
– -s:只統計每一個參數所佔用的總空間大小
– -h:提供易讀容量單位(K、M等)
[root@svr7 ~]# du -sh /root
[root@svr7 ~]# du -sh /root/ /etc/ /boot/
[root@svr7 ~]# du -sh /
[root@svr7 ~]# du -sh /var
[root@svr7 ~]# du -sh /home
[root@svr7 ~]# du -sh /tmp
• date,查看/調整系統日期時間
– date +%F、date +%R
– date +"%Y-%m-%d %H:%M:%S"
– date -s "yyyy-mm-dd HH:MM:SS"
[root@svr7 ~]# date +%F #顯示 年-月-日
2019-07-15
[root@svr7 ~]# date +%Y #顯示 年
2019
[root@svr7 ~]# date +%m #顯示 月
07
[root@svr7 ~]# date +%d #顯示 日期
15
[root@svr7 ~]# date +%H #顯示 時
11
[root@svr7 ~]# date +%M #顯示 分
42
[root@svr7 ~]# date +%S #顯示 秒
####################################################
製做快捷方式 製做鏈接(連接)文件
製做軟鏈接
格式: ln -s /路徑/源文件 /路徑/快捷方式名 #必須時絕對路徑
]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
]# ln -s /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/net0
]# ls /etc/net0
]# cat /etc/net0
]# ls -l /etc/net0
]# ln -s /etc/passwd /opt/
]# ls /opt/
]# ls -l /opt/passwd
軟鏈接特色:
若原始文件或目錄被刪除,鏈接文件將失效
軟鏈接可存放在不一樣分區/文件系統
硬鏈接特色:
若原始文件被刪除,鏈接文件仍可用
硬鏈接與原始文件必須在同一分區/文件系統
[root@svr7 ~]# rm -rf /opt/*
[root@svr7 ~]# echo 123456 > /opt/A
[root@svr7 ~]# cat /opt/A
[root@svr7 ~]# ln -s /opt/A /opt/B #製做軟鏈接
[root@svr7 ~]# ls /opt/
[root@svr7 ~]# cat /opt/B
[root@svr7 ~]# ln /opt/A /opt/C #製做硬鏈接
[root@svr7 ~]# ls /opt/
[root@svr7 ~]# rm -rf /opt/A
[root@svr7 ~]# ls /opt/
[root@svr7 ~]# cat /opt/B #軟鏈接不可用
[root@svr7 ~]# cat /opt/C #硬鏈接可使用
##################################################
獲取命令幫助
[root@svr7 ~]# man 5 passwd #5表明配置文件類型幫助信息
#################################################
zip歸檔工具,跨平臺的壓縮格式
• 歸檔+壓縮操做
– zip [-r] 備份文件.zip 被歸檔的文檔...
[root@svr7 ~]# yum -y install zip
[root@svr7 ~]# zip -r /opt/file.zip /root/ /etc/passwd
[root@svr7 ~]# ls /opt
[root@svr7 ~]# zip -r /opt/nsd.zip /boot/
[root@svr7 ~]# ls /opt
• 釋放歸檔+解壓操做
– unzip 備份文件.zip [-d 目標文件夾]
[root@svr7 ~]# yum -y install unzip
[root@svr7 ~]# unzip /opt/nsd.zip -d /mnt/
[root@svr7 ~]# ls /mnt/
[root@svr7 ~]# ls /mnt/boot/
###################################################
自定義Yum源
1.具有從互聯網下載一些軟件包
[student@room9pc01 ~]$ ls /linux-soft/01/
2.將tools.tar.gz傳遞到虛擬機A
[student@room9pc01 ~]$ scp /linux-soft/01/tools.tar.gz root@192.168.4.7:/root/
3.在虛擬機A查看
]# ls /root
]# tar -xf /root/tools.tar.gz -C /
]# ls /
]# ls /tools/
]# ls /tools/other/
4.在虛擬機A生成倉庫數據文件
[root@svr7 ~]# yum -y install createrepo
[root@svr7 ~]# createrepo /tools/other/
[root@svr7 ~]# ls /tools/other/
[root@svr7 ~]# ls /tools/other/repodata
5.書寫客戶端配置文件
[root@svr7 ~]# vim /etc/yum.repos.d/local.repo
[local_repo]
name=CentOS-$releasever - Base
baseurl="ftp://192.168.4.254/centos-1804"
enabled=1
gpgcheck=0
[myrpm]
name=other rpm
baseurl=file:///tools/other #指定爲本機爲Yum服務端
enabled=1
gpgcheck=0
[root@svr7 ~]# yum repolist
[root@svr7 ~]# yum -y install cmatrix
[root@svr7 ~]# cmatrix
[root@svr7 ~]# cmatrix -C red
[root@svr7 ~]# yum -y install sl
[root@svr7 ~]# sl
[root@svr7 ~]# yum -y install oneko
[root@svr7 ~]# oneko
[root@svr7 ~]# oneko & #將程序放入後臺
################################################
vim編輯技巧
命令模式操做
[root@svr7 ~]# cp /etc/passwd /opt/a.txt
[root@svr7 ~]# vim /opt/a.txt
光標跳轉
Home 鍵 或 ^、數字 0 跳轉到行首
End 鍵 或「$」鍵 跳轉到行尾
PgUp 鍵、PgDn 鍵 向上翻頁、向下翻頁
1G 或 gg 跳轉到文件的首行
G 跳轉到文件的末尾行
複製/粘貼/刪除
複製 yy、3yy 複製光標處的一行、3行
粘貼 p、P 粘貼到光標處以後、以前
x 或 Delete鍵 刪除光標處的單個字符
dd、#dd 刪除光標處的一行、#行
d^ 從光標處以前刪除至行首
d$或D(大寫) 從光標處刪除到行尾
C(大寫) 從光標處刪除到行尾,進入插入模式
查找/撤銷/保存
/word 向後查找字符串「word」
n、N 跳至後/前一個結果
u 撤銷最近的一次操做
U(大寫) 撤銷對當前行的全部修改
Ctrl + r 取消前一次撤銷操做
ZZ(大寫) 保存修改並退出
##################################################
末行模式操做
:r /etc/filesystems 讀入其餘文件內容
[root@svr7 ~]# echo 123456 > /opt/2.txt
[root@svr7 ~]# echo hahaxixi > /opt/3.txt
[root@svr7 ~]# vim /opt/3.txt
:r /opt/2.txt #讀入/opt/2.txt到當前文件
:r /etc/passwd #讀入/etc/passwd到當前文件
字符串替換
:s/root/admin 替換當前行第一個「root」
:s/root/admin/g 替換當前行全部的「root」
:1,10 s/root/admin/g 替換第1-10行全部的「root」
:% s/root/admin/g 替換文件內全部的「root
[root@svr7 ~]# cat /etc/passwd > /opt/a.txt
[root@svr7 ~]# vim /opt/a.txt
開關參數的控制
:set nu或nonu 顯示/不顯示行號
:set ai或noai 啓用/關閉自動縮進
#################################################
源碼編譯安裝
RPM包: rpm -ivh yum -y install
源碼包----gcc make---->能夠執行的程序-------->運行安裝
• 主要優勢
– 得到軟件的最新版,及時修復bug
– 軟件功能可按需選擇/定製,有更多軟件可供選擇
– 源碼包適用各類平臺
步驟一:安裝gcc與make開發工具
[root@svr7 ~]# yum -y install gcc
[root@svr7 ~]# yum -y install make
步驟二:進行tar解包
]# tar -xf /tools/inotify-tools-3.13.tar.gz -C /s
]# ls /
]# cd /inotify-tools-3.13/
]# ls
步驟三:運行configure腳本
做用1:檢測是否安裝gcc
做用2:能夠選擇軟件的功能,也能夠指定軟件安裝的路徑
--prefix=指定安裝的位置
]# cd /inotify-tools-3.13/
]# ./configure --prefix=/opt/myrpm
常見提示:沒有安裝gcc
checking for gcc... no
checking for cc... no
checking for cl.exe... no
configure: error: no acceptable C compiler found in $PATH
See `config.log' for more details.
步驟四:make編譯生成能夠執行的程序
]# cd /inotify-tools-3.13/
]# make
步驟五:make install將能夠執行的程序運行安裝
]# cd /inotify-tools-3.13/
]# make install
]# ls /opt/
]# ls /opt/myrpm/
]# ls /opt/myrpm/bin/
###############################################
虛擬化概述
virtualization
-x個物理資源 -y個邏輯資源
實現程序 徹底,部分,硬件輔助(cpu)
cpu支持虛擬化全部指令集(vmx)
lscpu | grep vmx
###########################
安裝軟件
qemu-kvm :爲提供底層仿真支持
libvirt-daemon :libvirtd 守護進程,管理虛擬機
libvirt-client :用戶端軟件 挺供客戶端管理軟件
libvirt-daemon-drier-qemu : libvirt 鏈接qemu的驅動
virt-manager :圖形管理工具
虛擬化服務:libvirtd
systemctl status libvirtd
##############################
經過指令管理虛擬機
virsh 控制工具
virsh 控制指令 [虛擬機名稱] [參數]
查看kvm節點 查看安裝虛擬機的電腦的信息
virsh nodeinfo
查看運行中的 [查看全部]
virsh list [--all]
列出虛擬網絡
virsh net-list
查看虛擬機信息
virsh dominfo 虛擬機名
設置開機隨機啓動
virsh autostart 虛擬機名字
virsh autostart --disable 名字
開機/重啓/關機
virsh start|reboot|shutdown
強制關閉指定的虛擬機
virsh destroy 虛擬機名字
刪除虛擬機
1 virsh destony 名字 #關機
virsh undefine 名字 #取消定義域 /只是刪除xml文件 不刪除qcow2文件
virsh list --all #查看
2 可是沒有刪除磁盤文件
rm -rf /var/lib/libvirt/qemu/磁盤文件名字
一臺kvm虛擬機的組成
一 xml配置文件:定義虛擬機名稱,UUID,CPU,內存,虛擬磁盤,網卡等各類參數設置
(xml表明一種格式)
路徑:/etc/libvirt/qemu/***.xml
二 磁盤鏡像文件 :保存虛擬機的操做系統及文檔數據
鏡像路徑取決於xml配置文件中的定義
路徑:/var/lib/libvirt/images
查看虛擬機配置文件 xml
virsh dumpxml C
使用>把內容重定向到新的文件
虛擬機名稱 <name>E</name>
虛擬機的UUID惟一標識 方法:使用uuidgen 方法2 刪除這行
虛擬機磁盤文件路徑 <source file='/var/lib/libvirt/images/E.qcow2'/>
修改虛擬機的磁盤mac地址 刪除這行
導入文件
virsh define /ect/libvirt/qemu/新文件
virsh list --all
##############################################################
在命令行手動建立虛擬機
1 建新一個磁盤文件
cp /虛擬機磁盤文件路徑 <source file='/var/lib/libvirt/images/E.pcow2'/> /tmp/F.qcow2 #拷貝一個原有的 而後改個名字
du -sh /tmp/F.qcow2 #驗證查看大小
2 建立xml配置文件
三合一命令 導出 修改 導入
一 創建磁盤文件
三 virsh edit nsd01 交互快捷
查看磁盤鏡像文件信息
qemu-img info /var/lib/libvirt/images/nsd01.後綴誰便起專業最好用(.qcow2)
####################################################
cow 技術原理
copy on write 寫時複製
直接映射原始盤的數據內容
qemu-img create -f gcow2 -b 原始盤 前端盤 大小
一 手動圖形安裝虛擬機名爲nsd01
利用光盤鏡像安裝
內存2048M
虛擬機名爲:nsd01
網絡類型選擇爲:private1
軟件包:帶GUI的服務器
分區:自動分區
設置root的密碼爲1,創建lisi用戶設置密碼1
虛擬化概述
• virtualization 資源管理
– x個物理資源 --> y個邏輯資源
– 實現程度:徹底、部分、硬件輔助(CPU)
CPU支持虛擬化全部的指令集(vmx)
[student@room9pc01 ~]$ lscpu | grep vmx
• 虛擬化主要廠商及產品
VMware VMware Workstation、vSphere
Microsoft VirtualPC、Hyper-V
RedHat KVM、RHEV
Citrix Xen
Oracle Oracle VM VirtualBox
###################################################
二 虛擬機nsd01進行配置
1.配置永久主機名:kvm.tedu.cn
[root@localhost ~]# echo kvm.tedu.cn > /etc/hostname
[root@localhost ~]# hostname kvm.tedu.cn
2.配置永久IP地址:192.168.4.30/24
[root@localhost ~]# nmcli connection modify eth0 ipv4.method manual ipv4.addresses 192.168.4.30/24 connection.autoconnect yes
[root@localhost ~]# nmcli connection up eth0
[root@localhost ~]# ifconfig
3.修改防火牆默認區域與SELinux
[root@kvm ~]# firewall-cmd --set-default-zone=trusted
[root@kvm ~]# setenforce 0
[root@kvm ~]# getenforce
Permissive
[root@kvm ~]# vim /etc/selinux/config
SELINUX=permissive
4.構建Yum倉庫
]# cd /etc/yum.repos.d/
]# mkdir repo
]# ls
]# mv *.repo repo
]# ls
]# vim dvd.repo
[dvd]
name=centos7
baseurl=ftp://192.168.4.254/centos-1804
enabled=1
gpgcheck=0
]# yum repolist
]# yum -y install xeyes
##################################################
安裝虛擬化服務器平臺
• 主要軟件包
– qemu-kvm :爲 kvm 提供底層仿真支持
– libvirt-daemon :libvirtd 守護進程,管理虛擬機
– libvirt-client :用戶端軟件,提供客戶端管理命令
– libvirt-daemon-driver-qemu :libvirtd 鏈接 qemu 的驅動
– virt-manager :圖形管理工具
]# yum -y install qemu-kvm
]# yum -y install libvirt-daemon
]# yum -y install libvirt-client
]# yum -y install libvirt-daemon-driver-qemu
]# yum -y install virt-manager
虛擬化服務: libvirtd
[root@kvm /]# systemctl status libvirtd #查看服務的狀態
####################################################
三 經過命令管理虛擬機
virsh命令工具介紹
• 提供管理各虛擬機的命令接口
– 支持交互模式,查看/建立/中止/關閉 .. ..
– 格式:virsh 控制指令 [虛擬機名稱] [參數]
• 查看KVM節點(服務器)信息
]$ virsh nodeinfo
• 列出虛擬機
]$ virsh list [--all] #重點
• 列出虛擬網絡
]$ virsh net-list [--all]
• 查看指定虛擬機的信息
]$ virsh dominfo 虛擬機名稱 #重點
]$ virsh autostart nsd01 #設置虛擬機開機自啓動
]$ virsh dominfo nsd01
]$ virsh autostart --disable nsd01 #禁止虛擬機開機自啓動
]$ virsh dominfo nsd01
• 開關機操做
]$ virsh start或reboot或shutdown 虛擬機名稱 #重點
• 強制關閉指定的虛擬機
]$ virsh destroy 虛擬機名稱 #重點
#################################################
• 一臺KVM虛擬機的組成
– xml配置文件(虛擬機描述文件):定義虛擬機的名稱、UUID、CPU、內
存、虛擬磁盤、網卡等各類參數設置
[student@room9pc01 ~]$ ls /etc/libvirt/qemu/
– 磁盤鏡像文件:保存虛擬機的操做系統及文檔數據,
鏡像路徑取決於xml配置文件中的定義
[student@room9pc01 ~]$ ls /var/lib/libvirt/images/
##################################################
查看虛擬機xml文件內容
[student@room9pc01 /]$ virsh dumpxml nsd01
虛擬機名稱
虛擬機的UUID惟一標識
虛擬機磁盤文件路徑
<source file='/var/lib/libvirt/images/nsd01.qcow2'/>
虛擬機網卡信息
<interface type='network'>
<mac address='52:54:00:d4:fe:59'/>
[student@room9pc01 /]$ virsh dumpxml nsd01 | less
##################################################
在命令行手動製做一臺虛擬機
1.磁盤鏡像文件
]$ cd /var/lib/libvirt/images/
]$ du -sh .node_base.qcow2
]$ cp .node_base.qcow2 nsd02.qcow2
]$ du -sh nsd02.qcow2
2.創建新的xml配置文件, uuidgen能夠生成隨機的UUID值
]$ cd /etc/libvirt/qemu/
]$ virsh dumpxml nsd01 > /etc/libvirt/qemu/nsd02.xml
]$ vim /etc/libvirt/qemu/nsd02.xml
1)虛擬機名稱 <name>nsd02</name>
2)虛擬機的UUID惟一標識 刪除整行內容 UUID
3)虛擬機磁盤文件路徑 <source file='/var/lib/libvirt/images/nsd02.qcow2'/>
4)虛擬機網卡信息
<mac address='52:54:00:d4:fe:59'/> 刪除整行內容
3.導入虛擬機配置信息
]$ virsh define /etc/libvirt/qemu/nsd02.xml
]$ virsh list --all
]$ virsh start nsd02
#################################################
命令行刪除虛擬機
]$ virsh list --all
]$ virsh destroy nsd02 #強制關閉虛擬機
域 nsd02 被刪除
]$ virsh list --all
]$ virsh undefine nsd02 #刪除虛擬機xml配置文件
域 nsd02 已經被取消定義
]$ virsh list --all
]$ rm -rf /var/lib/libvirt/images/nsd02.qcow2 #手動刪除
##################################################
在命令行手動建立虛擬機
1.創建新的磁盤文件
]$ cp /var/lib/libvirt/images/.node_base.qcow2 /tmp/nsd03.qcow2
]$ du -sh /tmp/nsd03.qcow2
2.創建xml配置文件
]$ virsh dumpxml nsd01 > /home/student/nsd03.xml
]$ ls /home/student/nsd03.xml
]$ vim /home/student/nsd03.xml
1)虛擬機名稱 <name>nsd03</name>
2)虛擬機的UUID惟一標識 刪除整行內容 UUID
3)虛擬機磁盤文件路徑 <source file='/tmp/nsd03.qcow2'/>
4)虛擬機網卡信息
<mac address='52:54:00:d4:fe:59'/> 刪除整行內容
3.導入虛擬機配置信息
]$ ls /etc/libvirt/qemu
]$ virsh define /home/student/nsd03.xml #導入虛擬機信息
]$ ls /etc/libvirt/qemu
]$ virsh start nsd03
]$ virsh list
#####################################################
三合一:導出 修改 導入
• 對虛擬機的配置進行調整
– 編輯:virsh edit 虛擬機名
1.創建磁盤文件
]$ cp /var/lib/libvirt/images/.node_base.qcow2 /var/lib/libvirt/images/nsd04.qcow2
]$ du -sh /var/lib/libvirt/images/nsd04.qcow2
2.創建xml配置文件
[student@room9pc01 /]$ virsh edit nsd01
1)虛擬機名稱 <name>nsd04</name>
2)虛擬機的UUID惟一標識 刪除整行內容 UUID
3)虛擬機磁盤文件路徑 <source file='/var/libvirt/images/nsd04.qcow2'/>
4)虛擬機網卡信息
<mac address='52:54:00:d4:fe:59'/> 刪除整行內容
[student@room9pc01 /]$ virsh list --all
#################################################
經常使用鏡像盤類型
• 虛擬機的磁盤鏡像文件格式
特色\類型 RAW QCOW2
KVM默認 否 是
I/O效率 高 較高
佔用空間 大 小
壓縮 不支持 支持
後端盤複用 不支持 支持
快照 不支持 支持
查看磁盤鏡像文件信息
]$ qemu-img info /var/lib/libvirt/images/nsd04.qcow2
virtual size: 2.0G (2147483648 bytes) #虛擬大小
disk size: 633M #實際佔用空間
#################################################
COW技術原理
• Copy On Write,寫時複製
– 直接映射原始盤的數據內容
– 當原始盤的舊數據有修改時,在修改以前自動將舊數據存入前端盤
– 對前端盤的修改不回寫到原始盤
– 原始盤的數據不能作修改
快速建立qcow前端盤
• qemu-img 經過 -b 選項複用指定原始盤
– qemu-img create -f qcow2 -b 原始盤 前端盤 大小
1.命令手動建立虛擬機磁盤文件
]$ cd /var/lib/libvirt/images/
]$ qemu-img create -f qcow2 -b .node_base.qcow2 nsd05.qcow2 5G #經過原始盤產生前端盤
]$ qemu-img info nsd05.qcow2 #查看虛擬磁盤文件信息
virtual size: 5.0G (5368709120 bytes) #虛擬大小
disk size: 196K #實際佔用空間大小
backing file: .node_base.qcow2 #原始盤
2.創建xml文件
]$ virsh dumpxml nsd01 > /tmp/nsd05.xml #導出虛擬機信息
]$ vim /tmp/nsd05.xml #修改 虛擬機名 UUID 磁盤路徑 網卡MAC
]$ virsh define /tmp/nsd05.xml
##################################################
離線訪問虛擬機
• 使用 guestmount 工具
– 支持離線掛載 raw、qcow2 格式虛擬機磁盤
– 能夠在虛擬機關機的狀況下,直接修改磁盤中的文檔
– 方便對虛擬機定製、修復、腳本維護
]$ virsh destroy nsd01
]$ guestmount -a /var/lib/libvirt/images/nsd01.qcow2 -i /mnt/
##################################################
• DNS服務器的功能
– 正向解析:根據註冊的域名查找其對應的IP地址
– 反向解析:根據IP地址查找對應的註冊域名,不經常使用
域名結構: 樹型結構
全部的域名都必須以點結尾
www.qq.com. www.baidu.com.
根域名: .
一級域名: .cn .us .kr .tw .hk .jp .......
二級域名: .com.cn .tedu.cn .net.cn .org.cn ......
三級域名: nb.com.cn dc.com.cn tc.com.cn ........
徹底合格的域名(FQDN)=主機頭部+註冊的域名
Full Qualified Domain Name,徹底合格主機名
###################################################
– 系統服務:named
– 默認端口:TCP/UDP 53
– 運行時的虛擬根環境:/var/named/chroot/
• 主配置文件:/etc/named.conf #本機負責解析的域名
• 地址庫文件存放路徑:/var/named/ #域名的解析結果
構建基本DNS服務
虛擬機A:
1.安裝軟件包
[root@svr7 ~]# yum -y install bind-chroot bind
bind-9.9.4-29.el7.x86_64 //域名服務包
bind-chroot-9.9.4-29.el7.x86_64 //提供虛擬根支持,牢籠
2.修改主配置文件
[root@svr7 ~]# cp /etc/named.conf /etc/named.bak
[root@svr7 ~]# vim /etc/named.conf
options {
directory "/var/named"; #指定地址庫文件位置
};
zone "tedu.cn" IN { #設置本機負責的域名
type master; #設置本機爲權威主DNS服務器
file "tedu.cn.zone"; #設置地址庫文件名稱
};
3.創建地址庫文件tedu.cn.zone
]# cd /var/named/
]# cp -p named.localhost tedu.cn.zone #-p保持權限不變
]# ls -l tedu.cn.zone
]# vim tedu.cn.zone
全部的域名在地址庫文件必須以點結尾
當沒有以點結尾時,自動補全地址庫負責的域名
tedu.cn. NS svr7 #聲明區域DNS服務器
svr7 A 192.168.4.7 #聲明DNS服務器IP地址
www A 1.1.1.1 #常規DNS正向解析
ftp A 2.2.2.2
[root@svr7 /]# systemctl restart named
虛擬機B:客戶端驗證
]# echo nameserver 192.168.4.7 > /etc/resolv.conf
]# cat /etc/resolv.conf
]# nslookup www.tedu.cn
]# nslookup ftp.tedu.cn
###################################################
多域名的DNS服務器,負責解析qq.com域名
虛擬機A:
1.修改主配置文件
[root@svr7 /]# vim /etc/named.conf
options {
directory "/var/named";
};
zone "tedu.cn" IN {
type master;
file "tedu.cn.zone";
};
zone "qq.com" IN {
type
• DNS服務器的功能
– 正向解析:根據註冊的域名查找其對應的IP地址
– 反向解析:根據IP地址查找對應的註冊域名,不經常使用
域名結構: 樹型結構
全部的域名都必須以點結尾
www.qq.com. www.baidu.com.
根域名: .
一級域名: .cn .us .kr .tw .hk .jp .......
二級域名: .com.cn .tedu.cn .net.cn .org.cn ......
三級域名: nb.com.cn dc.com.cn tc.com.cn ........
徹底合格的域名(FQDN)=主機頭部+註冊的域名
Full Qualified Domain Name,徹底合格主機名
###################################################
– 系統服務:named
– 默認端口:TCP/UDP 53
– 運行時的虛擬根環境:/var/named/chroot/
• 主配置文件:/etc/named.conf #本機負責解析的域名
• 地址庫文件存放路徑:/var/named/ #域名的解析結果
構建基本DNS服務
虛擬機A:
1.安裝軟件包
[root@svr7 ~]# yum -y install bind-chroot bind
bind-9.9.4-29.el7.x86_64 //域名服務包
bind-chroot-9.9.4-29.el7.x86_64 //提供虛擬根支持,牢籠
2.修改主配置文件
[root@svr7 ~]# cp /etc/named.conf /etc/named.bak
[root@svr7 ~]# vim /etc/named.conf
options {
directory "/var/named"; #指定地址庫文件位置
};
zone "tedu.cn" IN { #設置本機負責的域名
type master; #設置本機爲權威主DNS服務器
file "tedu.cn.zone"; #設置地址庫文件名稱
};
3.創建地址庫文件tedu.cn.zone
]# cd /var/named/
]# cp -p named.localhost tedu.cn.zone #-p保持權限不變
]# ls -l tedu.cn.zone
]# vim tedu.cn.zone
全部的域名在地址庫文件必須以點結尾
當沒有以點結尾時,自動補全地址庫負責的域名
tedu.cn. NS svr7 #聲明區域DNS服務器
svr7 A 192.168.4.7 #聲明DNS服務器IP地址
www A 1.1.1.1 #常規DNS正向解析
ftp A 2.2.2.2
[root@svr7 /]# systemctl restart named
虛擬機B:客戶端驗證
]# echo nameserver 192.168.4.7 > /etc/resolv.conf
]# cat /etc/resolv.conf
]# nslookup www.tedu.cn
]# nslookup ftp.tedu.cn
###################################################
多域名的DNS服務器,負責解析qq.com域名
虛擬機A:
1.修改主配置文件
[root@svr7 /]# vim /etc/named.conf
options {
directory "/var/named";
};
zone "tedu.cn" IN {
type master;
file "tedu.cn.zone";
};
zone "qq.com" IN {
type master;
file "qq.com.zone";
};
[root@svr7 /]# cd /var/named/
[root@svr7 named]# cp -p tedu.cn.zone qq.com.zone
[root@svr7 named]# vim qq.com.zone
qq.com. NS svr7
svr7 A 192.168.4.7
www A 3.3.3.3
[root@svr7 named]# systemctl restart named
###############################################
特殊解析記錄
1.基於DNS解析記錄負載均衡
[root@svr7 /]# vim /var/named/tedu.cn.zone
tedu.cn. NS svr7
svr7 A 192.168.4.7
www A 192.168.4.10
www A 192.168.4.20
www A 192.168.4.30
ftp A 2.2.2.2
[root@svr7 /]# systemctl restart named
2.泛域名解析
虛擬機A
[root@svr7 /]# vim /var/named/tedu.cn.zone
tedu.cn. NS svr7
svr7 A 192.168.4.7
www A 192.168.4.10
ftp A 2.2.2.2
* A 1.2.3.4
[root@svr7 /]# systemctl restart named
虛擬機B:測試 nslookup haha.tedu.cn
3.解析記錄的別名
虛擬機A:
[root@svr7 /]# vim /var/named/tedu.cn.zone
tedu.cn. NS svr7
svr7 A 192.168.4.7
www A 192.168.4.10
ftp A 2.2.2.2
* A 1.2.3.4
mail CNAME ftp
[root@svr7 /]# systemctl restart named
虛擬機B測試:
[root@pc207 ~]# nslookup mail.tedu.cn
4.有規律的泛域名解析
pc1.tedu.cn -----> 192.168.10.1
pc2.tedu.cn -----> 192.168.10.2
pc3.tedu.cn -----> 192.168.10.3
pc4.tedu.cn -----> 192.168.10.4
.......
pc50.tedu.cn -----> 192.168.10.50
內置函數:$GENERATE 製造連續範圍的數字
虛擬機A
[root@svr7 ~]# vim /var/named/tedu.cn.zone
$GENERATE 1-50 pc$ A 192.168.10.$
[root@svr7 ~]# !sys
systemctl restart named
[root@svr7 ~]#
虛擬機B測試:
[root@pc207 ~]# nslookup pc1.tedu.cn
[root@pc207 ~]# nslookup pc2.tedu.cn
[root@pc207 ~]# nslookup pc3.tedu.cn
##################################################
DNS資源解析記錄有哪些?
正向解析記錄(A記錄)
DNS聲明記錄(NS記錄)
解析記錄的別名(CNAME記錄)
###################################################
DNS子域受權
父域:qq.com 由虛擬機A進行解析
子域:bj.qq.com 由虛擬機B進行解析
虛擬機B,構建DNS服務器,負責解析bj.qq.com
[root@pc207 ~]# yum -y install bind bind-chroot
[root@pc207 ~]# cp /etc/named.conf /etc/named.bak
[root@pc207 ~]# vim /etc/named.conf
options {
directory "/var/named";
};
zone "bj.qq.com" IN {
type master;
file "bj.qq.com.zone";
};
[root@pc207 ~]# cd /var/named/
[root@pc207 named]# cp -p named.localhost bj.qq.com.zone
[root@pc207 named]# vim bj.qq.com.zone
bj.qq.com. NS pc207
pc207 A 192.168.4.207
www A 50.60.70.80
[root@pc207 /]# systemctl restart named
[root@pc207 /]# nslookup www.bj.qq.com 192.168.4.207
[root@pc207 /]# nslookup www.qq.com 192.168.4.7
################################################
子域受權: 讓父域的DNS服務器知曉子域DNS服務器
讓父域的DNS服務器能夠解析子域的域名
虛擬機A:
[root@svr7 ~]# vim /var/named/qq.com.zone
qq.com. NS svr7
bj.qq.com. NS pc207
svr7 A 192.168.4.7
pc207 A 192.168.4.207
www A 3.3.3.3
[root@svr7 ~]# systemctl restart named
[root@pc207 /]# nslookup www.bj.qq.com 192.168.4.7
Server: 192.168.4.7
Address: 192.168.4.7#53
Non-authoritative answer: #非權威解答
Name: www.bj.qq.com
Address: 50.60.70.80
##################################################
遞歸解析:
由客戶端發出請求,首選DNS服務器接受請求,將解析結果帶回過程
[root@svr7 ~]# vim /etc/named.conf
options {
directory "/var/named";
recursion no; #禁止遞歸解析:
};
迭代解析:首選DNS服務器與其餘DNS服務器交互過程
專業測試DNS工具
[root@pc207 /]# dig www.bj.qq.com 192.168.4.7
#################################################
主機名映射文件:/etc/hosts
沒有DNS服務器前提下,解析域名,只能爲本機作域名解析
[root@svr7 ~]# vim /etc/hosts
192.168.4.110 www.nb.com
[root@svr7 ~]# ping www.nb.com
域名解析過程當中最高優先級爲/etc/hosts 匹配即中止
而後在讀取/etc/resolv.conf
#################################################
緩存DNS,緩存解析結果,加快解析過程
三個角色:客戶端 緩存DNS服務 真DNS服務器
虛擬機A:真DNS服務器
虛擬機B:緩存DNS服務
虛擬機C:客戶端
1.創建虛擬機C
配置IP地址192.168.4.10/24,主機名爲svr10.tedu.cn
虛擬機B:緩存DNS服務
[root@pc207 /]# vim /etc/named.conf
options {
directory "/var/named";
forwarders { 192.168.4.7; }; #轉發給虛擬機A的IP地址
};
[root@pc207 /]# systemctl restart named
虛擬機C上驗證:
[root@svr10 ~]# nslookup www.tedu.cn 192.168.4.207
##################################################
;
file "qq.com.zone";
};
[root@svr7 /]# cd /var/named/
[root@svr7 named]# cp -p tedu.cn.zone qq.com.zone
[root@svr7 named]# vim qq.com.zone
qq.com. NS svr7
svr7 A 192.168.4.7
www A 3.3.3.3
[root@svr7 named]# systemctl restart named
###############################################
特殊解析記錄
1.基於DNS解析記錄負載均衡
[root@svr7 /]# vim /var/named/tedu.cn.zone
tedu.cn. NS svr7
svr7 A 192.168.4.7
www A 192.168.4.10
www A 192.168.4.20
www A 192.168.4.30
ftp A 2.2.2.2
[root@svr7 /]# systemctl restart named
2.泛域名解析
虛擬機A
[root@svr7 /]# vim /var/named/tedu.cn.zone
tedu.cn. NS svr7
svr7 A 192.168.4.7
www A 192.168.4.10
ftp A 2.2.2.2
* A 1.2.3.4
[root@svr7 /]# systemctl restart named
虛擬機B:測試 nslookup haha.tedu.cn
3.解析記錄的別名
虛擬機A:
[root@svr7 /]# vim /var/named/tedu.cn.zone
tedu.cn. NS svr7
svr7 A 192.168.4.7
www A 192.168.4.10
ftp A 2.2.2.2
* A 1.2.3.4
mail CNAME ftp
[root@svr7 /]# systemctl restart named
虛擬機B測試:
[root@pc207 ~]# nslookup mail.tedu.cn
4.有規律的泛域名解析
pc1.tedu.cn -----> 192.168.10.1
pc2.tedu.cn -----> 192.168.10.2
pc3.tedu.cn -----> 192.168.10.3
pc4.tedu.cn -----> 192.168.10.4
.......
pc50.tedu.cn -----> 192.168.10.50
內置函數:$GENERATE 製造連續範圍的數字
虛擬機A
[root@svr7 ~]# vim /var/named/tedu.cn.zone
$GENERATE 1-50 pc$ A 192.168.10.$
[root@svr7 ~]# !sys
systemctl restart named
[root@svr7 ~]#
虛擬機B測試:
[root@pc207 ~]# nslookup pc1.tedu.cn
[root@pc207 ~]# nslookup pc2.tedu.cn
[root@pc207 ~]# nslookup pc3.tedu.cn
##################################################
DNS資源解析記錄有哪些?
正向解析記錄(A記錄)
DNS聲明記錄(NS記錄)
解析記錄的別名(CNAME記錄)
###################################################
DNS子域受權
父域:qq.com 由虛擬機A進行解析
子域:bj.qq.com 由虛擬機B進行解析
虛擬機B,構建DNS服務器,負責解析bj.qq.com
[root@pc207 ~]# yum -y install bind bind-chroot
[root@pc207 ~]# cp /etc/named.conf /etc/named.bak
[root@pc207 ~]# vim /etc/named.conf
options {
directory "/var/named";
};
zone "bj.qq.com" IN {
type master;
file "bj.qq.com.zone";
};
[root@pc207 ~]# cd /var/named/
[root@pc207 named]# cp -p named.localhost bj.qq.com.zone
[root@pc207 named]# vim bj.qq.com.zone
bj.qq.com. NS pc207
pc207 A 192.168.4.207
www A 50.60.70.80
[root@pc207 /]# systemctl restart named
[root@pc207 /]# nslookup www.bj.qq.com 192.168.4.207
[root@pc207 /]# nslookup www.qq.com 192.168.4.7
################################################
子域受權: 讓父域的DNS服務器知曉子域DNS服務器
讓父域的DNS服務器能夠解析子域的域名
虛擬機A:
[root@svr7 ~]# vim /var/named/qq.com.zone
qq.com. NS svr7
bj.qq.com. NS pc207
svr7 A 192.168.4.7
pc207 A 192.168.4.207
www A 3.3.3.3
[root@svr7 ~]# systemctl restart named
[root@pc207 /]# nslookup www.bj.qq.com 192.168.4.7
Server: 192.168.4.7
Address: 192.168.4.7#53
Non-authoritative answer: #非權威解答
Name: www.bj.qq.com
Address: 50.60.70.80
##################################################
遞歸解析:
由客戶端發出請求,首選DNS服務器接受請求,將解析結果帶回過程
[root@svr7 ~]# vim /etc/named.conf
options {
directory "/var/named";
recursion no; #禁止遞歸解析:
};
迭代解析:首選DNS服務器與其餘DNS服務器交互過程
專業測試DNS工具
[root@pc207 /]# dig www.bj.qq.com 192.168.4.7
#################################################
主機名映射文件:/etc/hosts
沒有DNS服務器前提下,解析域名,只能爲本機作域名解析
[root@svr7 ~]# vim /etc/hosts
192.168.4.110 www.nb.com
[root@svr7 ~]# ping www.nb.com
域名解析過程當中最高優先級爲/etc/hosts 匹配即中止
而後在讀取/etc/resolv.conf
#################################################
緩存DNS,緩存解析結果,加快解析過程
三個角色:客戶端 緩存DNS服務 真DNS服務器
虛擬機A:真DNS服務器
虛擬機B:緩存DNS服務
虛擬機C:客戶端
1.創建虛擬機C
配置IP地址192.168.4.10/24,主機名爲svr10.tedu.cn
虛擬機B:緩存DNS服務
[root@pc207 /]# vim /etc/named.conf
options {
directory "/var/named";
forwarders { 192.168.4.7; }; #轉發給虛擬機A的IP地址
};
[root@pc207 /]# systemctl restart named
虛擬機C上驗證:
[root@svr10 ~]# nslookup www.tedu.cn 192.168.4.207
##################################################
##################################################################################
Split 分離解析(視圖解析)
當收到客戶機的DNS查詢請求的時候
(1)可以區分客戶機的來源地址
(2)爲不一樣類型的客戶機提供不一樣的解析結果
(3)不一樣的客戶端解析同一個域名,解析結果不一樣
做用:
爲客戶端就近提供服務器
BIND的view視圖
根據原地址集合將用戶分離
全部的zone都必須在view中
匹配原則:
由上到下,匹配即中止 全部客戶端都要找到本身的分類
#配置方法######################################
view '名字' {
match-clients {來源地址;........;} #匹配客戶機來源地址Split 分離解析(視圖解析)
zone 'xxx.com' IN { #設置域名
.....地址庫1; #地址庫的名字
};};
view '名字2' {
match-clients {來源地址;........;} #匹配客戶機來源地址
zone 'xxx.com' IN { #設置域名
.....地址庫2; #地址庫的名字
};};Split 分離解析(視圖解析)
最後一類: 以上沒有匹配的以
view 'other' {
match-clients {any;} #匹配客戶機來源地址
zone 'xxx.com' IN { #設置域名
.....地址庫3; #地址庫的名字
};};
案例需求及要求
配置主配置文件:/etc/named.conf
view 'jx1'{
match-clients { 192.168.4.207; };
zone "sina.com" IN {
type master;
file "sina.com.zone"; ------>解析ip爲192.168.1.1
};
'};
view "jx2"{
match-clients { 192.168.4.10; };
zone "sina.com" IN {
type master;
file "sina.com.zone1"; ------>解析IP爲192.168.2.1
};
'};
view "other"{
match-clients { any; };
zone "sina.com" IN {
type master;
file "sina.com.other"; ------解析IP爲192.168.3.1
};
};
創建地址庫 sina.com.zone # sina.com.zone1 # sina.com.other寫入不一樣的解析效果
實現B,C,D 客戶機訪問www.sina.com分別爲#1.1.1.1 #2.2.2.2 #3.3.3.3 和 訪問www.tedu.com 分別爲
10.10.10.10 #
options {
directory "/var/named";
};
view "jx1"{
match-clients { 192.168.4.207; }; #指定客戶端ip地址
zone "sina.com" IN { #設置第一個域名
type master;
file "sina.com.zone"; #指定倉庫文件
};
zone "tedu.com" IN { #設置第二個域名
type master;
file "tedu.com.zone"; #指定第二個倉庫文件
};
};
###########other必須在最後 匹配及中止 ##########################
view "jx2"{
match-clients { 192.168.4.10; }; #設置第二個客戶端的IP地址
zone "sina.com" IN { #設置此IP的一個域名
type master;
file "sina.com.zone1"; #指定倉庫
};
zone "tedu.com" IN { #設置此IP第二個域名
type master;
file "tedu.com.zone1"; #指定第二個倉庫文件
};
};
view "other"{ #設置其餘客戶端的訪問
match-clients { any; };
zone "sina.com" IN { #設置第一個域名
type master;
file "sina.com.other"; #指定倉庫
};
zone "tedu.com" IN { #設置第二個域名
type master;
file "tedu.com.other"; #指定第二個倉庫
};
};
步驟詳情 : 1,設置第一個客戶端 IP 而後 設置域名sina.com 設置倉庫 sina.com.zone 在同一個view下設置第二個 域名tedu.com 第二個倉庫 tedu.zone
2. 設置第二個客戶端IP地址 而後 設置域名 sina.com (域名不變 ) 設置倉庫 sina.com.zone1 (倉庫變) 在同一個view下設置 剛剛設置的第二域名 tedu.com 設置第二個倉庫tedu.com.zone1
3 設置最後一個,爲其餘客戶端域名解析 view 爲'other' 設置 設置IP爲 any 域名爲sina.com 倉庫爲sina.com.other 在同一個view下設置 剛剛設置的第二域名 tedu.com 設置第二個倉庫tedu.com.other
##################################################################
分離解析
acl訪問控制
acl "xxx" { 192.168.4.10; }; #定義一個acl函數
view "jx2"{
match-clients { xxx; };
zone "sina.com" IN {
type master;
file "sina.com.zone1";
};
zone "tedu.com" IN {
type master;
file "tedu.com.zone1";
};
};
#######################################################################
RAID 陣列實現方式
RAID磁盤陣列
• 廉價冗餘磁盤陣列
– 經過硬件/軟件技術,將多個較小/低速的磁盤整合成一個大磁盤
– 陣列的價值:提高I/O效率、硬件級別的數據冗餘
– 不一樣RAID級別的功能、特性各不相同
• RAID 0,條帶模式
– 同一個文檔分散存放在不一樣磁盤
– 並行寫入以提升效率
– 至少須要兩塊磁盤組成
• RAID 1,鏡像模式
– 一個文檔複製成多份,分別寫入不一樣磁盤
– 多份拷貝提升可靠性,效率無提高
– 至少須要兩塊磁盤組成
• RAID5,高性價比模式
– 至關於RAID0和RAID1的折中方案
– 須要至少一塊磁盤的容量來存放校驗數據
– 至少須要三塊磁盤組成
• RAID6,高性價比/可靠模式
– 至關於擴展的RAID5陣列,提供2份獨立校驗方案
– 須要至少兩塊磁盤的容量來存放校驗數據
– 至少須要四塊磁盤組成
• RAID 0+1/RAID 1+0
– 整合RAID 0、RAID 1的優點
– 並行存取提升效率、鏡像寫入提升可靠性
– 至少須要四塊磁盤組成
################################################################
進程管理
程序: 靜態的代碼 佔用磁盤空間
進程: 動態執行的代碼 佔用CPU 內存
父進程/子進程 樹型結構 殭屍進程 孤兒進程
進程惟一標識: PID 進程的編號
systemd:上帝進程,全部進程的父進程
查看進程樹
• pstree — Processes Tree 15:15上課
– 格式:pstree [選項] [PID或用戶名]
• 經常使用命令選項
– -a:顯示完整的命令行
– -p:列出對應PID編號
[root@svr7 /]# pstree
[root@svr7 /]# useradd lisi
[root@svr7 /]# pstree lisi
bash───vim
[root@svr7 /]# pstree -a lisi
bash
└─vim a.txt
[root@svr7 /]# pstree -ap lisi
• ps aux 操做,信息全面
– 列出正在運行的全部進程
用戶 進程ID %CPU %內存 虛擬內存 固定內存 終端 狀態 起始時間 CPU時間 程序指令
• ps -elf 操做,有進程的父進程的PID值
– 列出正在運行的全部進程
PPID:父進程的PID號
統計正在運行的進程有多少?
[root@svr7 /]# ps aux
[root@svr7 /]# ps aux | wc -l
[root@svr7 /]# ps -elf | wc -l
進程動態排名
• top 交互式工具
– 格式:top [-d 刷新秒數] [-U 用戶名]
[root@svr7 /]# top -d 1
按P(大寫)能夠進行CPU的排序
按M(大寫)能夠進行內存的排序
load average: 0.00, 0.01, 0.05 #CPU負載量 1分 5分鐘 15 分鐘
檢索進程
• pgrep — Process Grep
– 用途:pgrep [選項]... 查詢條件
• 經常使用命令選項
– -l:輸出進程名,而不只僅是 PID
– -U:檢索指定用戶的進程
– -x:精確匹配完整的進程名
[root@svr7 /]# pgrep -l a #檢索全部進程名帶a的
[root@svr7 /]# pgrep -lU lisi #檢索lisi的全部進程
[root@svr7 /]# pstree -ap lisi #檢索lisi的全部進程
進程的先後臺調度
• 後臺啓動,正在運行放入後臺
– 在命令行末尾添加「&」符號,不佔用當前終端
• Ctrl + z 組合鍵
– 掛起當前進程(暫停並轉入後臺)
• jobs 命令
– 查看後臺任務列表
• fg 命令
– 將後臺任務恢復到前臺運行
• bg 命令
– 激活後臺被掛起的任務
[root@svr7 /]# sleep 9000 & #正在運行放入後臺
[root@svr7 /]# jobs #查看後臺運行的進程
[root@svr7 /]# sleep 8000
^Z #輸入Ctrl+z 暫停放入後臺
[2]+ 已中止 sleep 8000
[root@svr7 /]# jobs
[root@svr7 /]# bg 2 #將後臺編號爲2的進程繼續運行
[root@svr7 /]# jobs
[root@svr7 /]# fg 1 #將後臺編號爲1的進程恢復到前臺
sleep 9000
^C #輸入Ctrl+C 結束
[root@svr7 /]# jobs
[root@svr7 /]# fg 2 #將後臺編號爲2的進程恢復到前臺
sleep 8000
^C #輸入Ctrl+C 結束
[root@svr7 /]# jobs
###################################################
殺死進程
• 幹掉進程的不一樣方法
– Ctrl+c 組合鍵,中斷當前命令程序
– kill [-9] PID... 、kill [-9] %後臺任務編號
– killall [-9] 進程名...
– pkill 查找條件
[root@svr7 /]# sleep 1000 &
[root@svr7 /]# jobs -l
[root@svr7 /]# kill 4013 #按照PID進行殺死
[root@svr7 /]# sleep 1000 &
[root@svr7 /]# jobs -l
[root@svr7 /]# kill -9 4015 #按照PID強制殺死
[root@svr7 /]# jobs -l
[root@svr7 /]# sleep 1000 &
[root@svr7 /]# sleep 1000 &
[root@svr7 /]# sleep 1000 &
[root@svr7 /]# jobs
[root@svr7 /]# killall sleep #殺死全部sleep進程
殺死一個用戶開啓的全部進程(強制踢出一個用戶)
[root@svr7 /]# killall -9 -u 用戶名
#################################################
日誌管理
日誌的功能
• 系統和程序的「日記本」
– 記錄系統、程序運行中發生的各類事件
– 經過查看日誌,瞭解及排除故障
– 信息安全控制的 依據
• 由系統服務rsyslog統一記錄/管理
– 日誌消息採用文本格式
– 主要記錄事件發生的時間、主機、進程、內容
• 常見的日誌文件
/var/log/messages 記錄內核消息、各類服務的公共消息
/var/log/dmesg 記錄系統啓動過程的各類消息
/var/log/cron 記錄與cron計劃任務相關的消息
/var/log/maillog 記錄郵件收發相關的消息
/var/log/secure 記錄與訪問限制相關的安全消息
日誌分析
• 通用分析工具
– tail、tailf、less、grep等文本瀏覽/檢索命令
– awk、sed等格式化過濾工具
tailf:實時跟蹤日誌消息
[root@svr7 /]# echo 123 > /opt/1.txt
[root@svr7 /]# cat /opt/1.txt
123
[root@svr7 /]# tailf /opt/1.txt
123
################################################
用戶登陸分析
• users、who、w 命令
– 查看已登陸的用戶信息,詳細度不一樣
pts:圖形命令行終端
• last、lastb 命令
– 查看最近登陸成功/失敗的用戶信息
[root@svr7 /]# last -2 #最近登陸的2條成功信息
[root@svr7 /]# lastb -2 #最近登陸的2條失敗信息
[root@svr7 /]# users #查看已登陸的用戶信息
[root@svr7 /]# who #查看已登陸的用戶信息
[root@svr7 /]# w #查看已登陸的用戶信息
###################################################
日誌消息的優先級
• Linux內核定義的事件緊急程度
– 分爲 0~7 共8種優先級別
– 其數值越小,表示對應事件越緊急/重要
0 EMERG(緊急) 會致使主機系統不可用的狀況
1 ALERT(警告) 必須立刻採起措施解決的問題
2 CRIT(嚴重) 比較嚴重的狀況
3 ERR(錯誤) 運行出現錯誤
4 WARNING(提醒) 可能會影響系統功能的事件
5 NOTICE(注意) 不會影響系統但值得注意
6 INFO(信息) 通常信息
7 DEBUG(調試) 程序或系統調試信息等
使用journalctl工具
• 提取由 systemd-journal 服務蒐集的日誌
– 主要包括內核/系統日誌、服務日誌
• 常見用法
– journalctl | grep 關鍵詞
– journalctl -u 服務名 [-p 優先級]
– journalctl -n 消息條數
– journalctl --since="yyyy-mm-dd HH:MM:SS" --
until="yyyy-mm-dd HH:MM:SS"
##################################################
systemctl控制
• Linux系統和服務管理器
– systemd是內核引導以後加載的第一個初始化進程(PID=1)
– 負責掌控整個Linux的運行/服務資源組合
systemd
• 一個更高效的系統&服務管理器
– 開機服務並行啓動,各系統服務間的精確依賴
– 配置目錄:/etc/systemd/system/
– 服務目錄:/lib/systemd/system/
– 主要管理工具:systemctl
對於服務的管理
systemctl restart 服務名 #重起服務
systemctl start 服務名 #開啓服務
systemctl stop 服務名 #中止服務
systemctl status 服務名 #查看服務當前的狀態
systemctl enable 服務名 #設置服務開機自啓動
systemctl disable 服務名 #設置服務不開機自啓動
systemctl is-enabled 服務名 #查看是否爲開機自啓
RHEL6 運行級別 不一樣級別,開啓的服務不一樣
0:關機
1:單用戶模式(基本功能的實現,破解Linux密碼)
2:多用戶字符界面(不支持網絡)
3:多用戶字符界面(支持網絡)服務器默認的運行級別
4:未定義
5:圖形界面
6:重起
切換運行級別:init 5
RHEL7 運行模式
字符模式:multi-user.target
圖形模式:graphical.target
[student@room9pc01 ~]$ rht-vmctl reset classroom
classroom [OK]
域 classroom 已開始
[student@room9pc01 ~]$ rht-vmctl reset server
server [OK]
域 server 已開始
[root@svr7 /]# ls -l /lib/systemd/system/
當前直接切換到字符模式
]# systemctl isolate multi-user.target = init 3
當前直接切換到圖形模式
]# systemctl isolate graphical.target = init 5
查看每次開機默認進入模式
[root@svr7 /]# systemctl get-default
multi-user.target
設置永久策略,每次開機自動進入graphical.target
# systemctl set-default graphical.target
# reboot
#################################################
DNS分離解析與Web結合
虛擬機C:構建Web服務
[root@svr10 ~]# yum -y install httpd
[root@svr10 ~]# cat /etc/httpd/conf.d/nsd01.conf
<VirtualHost *:80>
ServerName www.qq.com
DocumentRoot /var/www/qq
</VirtualHost>
<VirtualHost *:80>
ServerName www.163.com
DocumentRoot /var/www/163
</VirtualHost>
[root@svr10 ~]#
[root@svr10 ~]# mkdir /var/www/qq /var/www/163
[root@svr10 ~]# echo '<h1>Web1 QQ' > /var/www/qq/index.html
[root@svr10 ~]# echo '<h1>Web1 163' > /var/www/163/index.html
[root@svr10 ~]# systemctl restart httpd
##################################################
虛擬機D構建Web服務
[root@pc20 ~]# yum -y install httpd
[root@pc20 ~]# cat /etc/httpd/conf.d/nsd01.conf
<VirtualHost *:80>
ServerName www.qq.com
DocumentRoot /var/www/qq
</VirtualHost>
<VirtualHost *:80>
ServerName www.163.com
DocumentRoot /var/www/163
</VirtualHost>
[root@pc20 ~]# mkdir /var/www/qq /var/www/163
[root@pc20 ~]# echo '<h1>Web2 QQ' > /var/www/qq/index.html
[root@pc20 ~]# echo '<h1>Web2 163' > /var/www/163/index.html
[root@pc20 ~]# systemctl restart httpd
[root@pc20 ~]#
#############################################
虛擬機A實現DNS分離解析
[root@svr7 /]# yum -y install bind bind-chroot
[root@svr7 /]# cat /etc/named.conf
options {
directory "/var/named";
};
view "nsd" {
match-clients { 192.168.4.7; };
zone "qq.com" IN {
type master;
file "qq.com.zone";
};
zone "163.com" IN {
type master;
file "163.com.zone";
};
};
view "other" {
match-clients { any; };
zone "qq.com" IN {
type master;
file "qq.com.other";
};
zone "163.com" IN {
type master;
file "163.com.other";
};
};
[root@svr7 /]# cat /var/named/qq.com.zone
qq.com. NS svr7
svr7 A 192.168.4.7
www A 192.168.4.10
[root@svr7 /]# cat /var/named/163.com.zone
163.com. NS svr7
svr7 A 192.168.4.7
www A 192.168.4.10
[root@svr7 /]# cat /var/named/qq.com.other
qq.com. NS svr7
svr7 A 192.168.4.7
www A 192.168.4.20
[root@svr7 /]# cat /var/named/163.com.other
163.com. NS svr7
svr7 A 192.168.4.7
www A 192.168.4.20
[root@svr7 /]# systemctl restart named
爲四臺虛擬機指定DNS服務器地址
[root@svr7 /]# echo nameserver 192.168.4.7 > /etc/resolv.conf
[root@pc207 ~]# echo nameserver 192.168.4.7 > /etc/resolv.conf
[root@svr10 ~]# echo nameserver 192.168.4.7 > /etc/resolv.conf
[root@pc20 ~]# echo nameserver 192.168.4.7 > /etc/resolv.conf
####################################################
部署DHCP服務器
• Dynamic Host Configuration Protocol
– 動態主機配置協議,由 IETF(Internet 網絡工程師任
務小組)組織制定,用來簡化主機地址分配管理
• 主要分配如下入網參數
– IP地址/子網掩碼/廣播地址
– 默認網關地址、DNS服務器地址
• DHCP地址分配的四次會話,以廣播進行,先到先得
– DISCOVERY --> OFFER --> REQUEST -->ACK
一個網絡中,只能有一臺DHCP服務器
• 服務端基本概念
– 租期:容許客戶機租用IP地址的時間期限,單位爲秒
– 做用域:分配給客戶機的IP地址所在的網段
– 地址池:用來動態分配的IP地址的範圍
虛擬機A:
1.安裝軟件包dhcp
[root@svr7 /]# yum -y install dhcp
2.修改配置文件
[root@svr7 /]# vim /etc/dhcp/dhcpd.conf
:r /usr/share/doc/dhcp*/dhcpd.conf.example
subnet 192.168.4.0 netmask 255.255.255.0 { #分配網段
range 192.168.4.100 192.168.4.200; #分配IP地址範圍
option domain-name-servers 192.168.4.7; #分配DNS地址
option routers 192.168.4.254; #網關地址
default-lease-time 600;
max-lease-time 7200;
}
3.重啓服務
[root@svr7 /]# systemctl restart dhcpd
#################################################
網絡裝機概述
網絡裝機的優點
• 規模化:同時裝配多臺主機
• 自動化:裝系統、配置各類服務
• 遠程實現:不須要光盤、U盤等物理安裝介質
什麼是PXE網絡
• PXE,Pre-boot eXecution Environment
– 預啓動執行環境,在操做系統以前運行
– 可用於遠程安裝
• 工做模式
– PXE client 集成在網卡的啓動芯片中
– 當計算機引導時,從網卡芯片中把PXE client調入內存
執行,獲取PXE server配置、顯示菜單,根據用戶選
擇將遠程引導程序下載到本機運行
PXE組件及過程分析
• 須要哪些服務組件?
– DHCP服務,分配IP地址、定位引導程序
– TFTP服務,提供引導程序下載
– HTTP服務(或FTP/NFS),提供yum安裝源
• 客戶機應具有的條件
– 網卡芯片必須支持PXE協議
– 主板支持從網卡啓動
##################################################
一 構建DHCP服務,指定tftp服務器地址以及網卡引導文件名稱
[root@svr7 /]# vim /etc/dhcp/dhcpd.conf
subnet 192.168.4.0 netmask 255.255.255.0 {
range 192.168.4.100 192.168.4.200;
option domain-name-servers 192.168.4.7;
option routers 192.168.4.254;
default-lease-time 600;
max-lease-time 7200;
next-server 192.168.4.7; #指定下一個服務器tftp服務器地址
filename "pxelinux.0"; #指定網卡引導文件名稱
}
[root@svr7 /]# systemctl restart dhcpd
pxelinux.0:網卡引導文件(網絡裝機說明書) 二進制文件
安裝一個軟件便可得到該文件
#####################################################
二 構建tftp服務,提供衆多的引導文件
tftp:簡單的文件傳輸協議 默認端口 69
默認共享路徑:/var/lib/tftpboot/
1.安裝軟件tftp-server
[root@svr7 /]# yum -y install tftp-server
[root@svr7 /]# systemctl restart tftp
2.部署pxelinux.0文件
]# yum provides */pxelinux.0 #查詢那個軟件包產生該文件
]# yum -y install syslinux
]# rpm -ql syslinux | grep pxelinux.0 #查詢軟件安裝清單
]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
]# ls /var/lib/tftpboot/
pxelinux.0-->讀取菜單文件
/var/lib/tftpboot/pxelinux.cfg/default
3.部署菜單文件
]# poweroff #關閉機器,圖形添加光驅設備,放入光盤文件
]# mount /dev/cdrom /mnt/
]# ls /mnt/
]# mkdir /var/lib/tftpboot/pxelinux.cfg
]# cp /mnt/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
]# ls /var/lib/tftpboot/
]# ls /var/lib/tftpboot/pxelinux.cfg/
4.部署圖形模塊與背景圖片
vesamenu.c32(圖形模塊)
splash.png(背景圖片)
[root@svr7 ~]# cp /mnt/isolinux/vesamenu.c32 /mnt/isolinux/splash.png /var/lib/tftpboot/
[root@svr7 ~]# ls /var/lib/tftpboot/
pxelinux.0 pxelinux.cfg splash.png vesamenu.c32
5.部署啓動內核與驅動程序
vmlinuz(啓動內核)
initrd.img(驅動程序)
[root@svr7 ~]# cp /mnt/isolinux/vmlinuz /mnt/isolinux/initrd.img /var/lib/tftpboot/
[root@svr7 ~]# ls /var/lib/tftpboot/
initrd.img pxelinux.cfg vesamenu.c32
pxelinux.0 splash.png vmlinuz
6.修改菜單文件
]# vim /var/lib/tftpboot/pxelinux.cfg/default
末行模式 開啓行號 :set nu
1 default vesamenu.c32 #默認加載圖形的模塊
2 timeout 600 #讀秒時間 1/10秒
10 menu background splash.png #背景圖片
11 menu title NSD1906 PXE Server #標題
61 label linux
62 menu label ^Install CentOS 7 #菜單的顯示內容
63 menu default #讀秒結束後默認選擇
64 kernel vmlinuz #加載啓動內核
65 append initrd=initrd.img #加載驅動程序
##################################################
總結:
1.DHCP---> IP地址 next-server filename
2.tftp---> pxelinux.0
3.pxelinux.0---> 訪問菜單文件
/var/lib/tftpboot/pxelinux.cfg/default
4.default--->圖形的模塊 背景圖片 啓動內核 驅動程序
測試驗證:
[root@svr7 ~]# systemctl restart dhcpd
[root@svr7 ~]# systemctl restart tftp
建立一臺新的虛擬機進行測試驗證
1.安裝方式: 網絡引導安裝(PXE)
2.內存須要: 2048M
3.網絡類型: private1
####################################################
構建Web服務器,共享衆多的軟件包
1.安裝軟件包
[root@svr7 ~]# yum -y install httpd
2.重啓httpd服務
[root@svr7 ~]# systemctl restart httpd
3.掛載光驅設備
[root@svr7 ~]# mkdir /var/www/html/centos
[root@svr7 ~]# mount /dev/cdrom /var/www/html/centos
mount: /dev/sr0 寫保護,將以只讀方式掛載
[root@svr7 ~]# ls /var/www/html/centos
[root@svr7 ~]# systemctl restart httpd
[root@svr7 ~]# firefox 192.168.4.7/centos
###################################################
實現無人值守安裝,生成應答文件
1.安裝能夠生成應答文件的軟件包
[root@svr7 ~]# yum -y install system-config-kickstart
2.運行system-config-kickstart
]# LANG=en system-config-kickstart #英文進行運行
點擊 "軟件包選擇(Package Selection)" 查看是否能夠進行選擇
須要Yum倉庫的支持:指向光盤的內容倉庫,標識必須爲[development]
[root@svr7 ~]# vim /etc/yum.repos.d/local.repo
[development]
name=CentOS-$releasever - Base
baseurl=ftp://192.168.4.254/centos-1804
enabled=1
gpgcheck=0
[root@svr7 ~]# LANG=en system-config-kickstart
點擊 "軟件包選擇(Package Selection)" 查看是否能夠進行選擇
[root@svr7 ~]# ls /root/ks.cfg
/root/ks.cfg
[root@svr7 ~]# vim /root/ks.cfg
3.利用Web服務器將ks.cfg進行共享
[root@svr7 ~]# cp /root/ks.cfg /var/www/html/
[root@svr7 ~]# ls /var/www/html/
4.修改菜單文件,指定應答文件位置
]# vim /var/lib/tftpboot/pxelinux.cfg/default
label linux
menu label ^Install CentOS 7
menu default
kernel vmlinuz
append initrd=initrd.img ks=http://192.168.4.7/ks.cfg
###################################################
rsync 同步控制
-n 測試同步 不作修改
--delete 刪除目標文件夾內多餘的文檔
-a 把目錄和文件保持原封不動的同步
-z 同步時壓縮
-v 顯示傳輸過程
rsyc -av /nsd/ /opt/ #
#/ 加/是把源目錄數據同步到目標目錄下 不一樣步源目錄自己
#######################################################
運程同步
rsync+ssh (遠程同步)
列出
格式:
下行 (下載):rsync [...] user@host :遠程目錄 本地目錄
rsync -av /etc root@192.168.4.207:/etc/passwd /opt/
上行(上傳) rsync [參數] 本地目錄 user@host 遠程目錄
rsync -av /etc/passwd root@192.168.4.207:/opt/
#######################################################
實時遠程同步
-經過公私鑰,實現無密碼驗證
ssh-keygen 所有回車
ssh-copy-id root@192.168.4.207 傳遞公鑰
二 監控目錄
安裝軟件
步驟一:安裝gcc與make開發工具
[root@svr7 ~]# yum -y install gcc
[root@svr7 ~]# yum -y install make
步驟二:進行tar解包
]# tar -xf /tools/inotify-tools-3.13.tar.gz
]# cd /inotify-tools-3.13/
步驟三:運行configure腳本
]# cd /inotify-tools-3.13/
]# ./configure
步驟四:make編譯生成能夠執行的程序
]# cd /inotify-tools-3.13/
]# make install
步驟五:檢查軟件安裝
]# ls /usr/local/bin/inotifywait
inotifywait
-m 持續監控(捕捉事件後不退出)
-r 遞歸監控,包括子目錄文件
-q 減小屏幕輸出信息
-e 指定監控的 modify move create delete attrib 等事件類別
## 默認所有監控 (權限變化)
建立一個腳本 實現同步 rsync.sh
循環:for循環適合寫有次數的循環
死循環:while循環適合寫無線次數的循環
格式: while [條件]
do?
要重複的代碼
done
vim /rsync.sh
#!/bin/bash
while inotifywait -rqq /lj/
#while會自動運行命令 當命令有輸出時執行do和done之間的命令
do
rsync -a --delete /lj root@192.168.4.207:/lj
done
sh /rsync.sh & #後臺運行 同步
######################################
Cobbler
概念 :
-cobbler是一款快速的網絡系統部署工具
-集中管理所須要的服務,如DHCP,DNS,TFTP,Web
-Cobbler內容集成了一個鏡像版本倉庫
-Cobbler內部集成一個ks應答文件倉庫
-Cobbler還提供了包括yum源管理,web界面管理,API接口,電腦管理等功能
利用rsync 從真機下載cobbler
rsync -av student@192.168.4.254:/home/student/桌面/cobbler.zip /cobbler
安裝 cobbler主程序,工具包
yum -y install dhcp httpd mod_ssl #安裝服務程序
yum -y install /cobbler/*rpm #利用yum安裝目錄下全部rpm包
rpm -q cobbler #檢測安裝結果
cobbler-2.8.2-1.el7.x86_64
2配置cobbler
vim /etc/cobbler/wettings
next_server:192.168.4.33 #設置下一個服務還爲本機
server :192.168.4.33 #設置本機爲cobler的服務器
manage_decp :1 #設置cobbler管理dhcp服務器
pxe_just_once :1 #防止客戶端重複安裝操做系統
開機啓動項 : 匹配及中止
1 硬盤啓動 2光驅設備 3U盤 4網絡引導
3 配置cobbler的dhcp服務
vim /etc/cobbler/dhcp.template
格式: :%s /新.../舊.../g
:%s /192.168.1/192.168.4/g #替換字符
5 次替換,共 4 行
4 絕對路徑解壓 cobbler_boot.tar.gz #衆多引導文件
壓縮包若是壓縮時用-P選項,解壓時會以絕對路徑解壓到目錄下,不須要指定目錄
- tar -tf /cobbler/cobbler_boot.tar.gz #查看壓縮的默認絕對路徑
- tar -xPf /cobbler/cobbler_boot.tar.gz #-P是以絕對路徑解壓
tar: 從成員名中刪除開頭的「/」
- ls /var/lib/cobbler/loaders/ #查看解壓結果
COPYING.elilo COPYING.yaboot grub-x86_64.efi menu.c32 README
COPYING.syslinux elilo-ia64.efi grub-x86.efi pxelinux.0 yaboot
3 重啓cobbler服務 開機自啓
systemctl restart cobbler #啓動cobbler
systemctl enable cobbler
systemctl restart httpd #啓動httpd服務
systemctl enable
systemctl restart tftp #啓動tftp服務
systemctl enable
systemctl restart rsyncd #啓動rsyncd同步服務
systemctl enable
4同步刷新cobbler配置
cobbler sync #檢測全部配置是否正確
.....
*** TASK COMPLETE ***
5訪問測試
firefox https://192.168.4.33/cobbler_web
###################################3
cobbler應用
mkdir /dvd
掛載光盤到 /dvd
mount /dev/cdrom /dvd
ls /dvd
cobbler import --path=掛載點 --name=菜單名字
# cobbler import --path=/dvd --name=CentOS7#光盤鏡像導入
cobbler導入的鏡像放在:/var/www/cobbler/ks_mirror
#####################################################
######################################################
環境變量PATH
PATH:存放執行命令程序的搜尋路徑
echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
能夠將本身編寫的腳本變爲一條能夠tab的命令
echo $PATH
vim /opt/xxx.sh
#!/bin/bash
echo 'haha'
cp /opt/xxx.sh /usr/bin
~]#xxx.sh
haha
#####################################
權限掩碼 umask值
root建立目錄的默認權限
[root@localhost ~]# umask
0022
[root@localhost ~]# mkdir /ljx
[root@localhost ~]# ls -ld /ljx
drwxr-xr-x. 2 root root 6 7月 22 17:35 /ljx
[root@localhost ~]# umask 777
[root@localhost~]#mkdir ljxx
[root@localhost ~]# ls -ld /ljxx
d---------. 2 root root 6 7月 22 17:36 /ljxx
[root@localhost ~]# umask 000
[root@localhost ~]# mkdir /ljxxx
[root@localhost ~]# ls -ld /ljxxx
drwxrwxrwx. 2 root root 6 7月 22 17:37 /ljxxx
#######################################################################################
網絡的功能
信息傳遞,資源共享,提升可靠性,增長系統處理性能
60年代 分組交換 提升傳輸效率
70~80年代 tcp/ip 統一標準
90年代 web
wan 廣域網 幾十~幾千公里
lan 局域網 1公里之內 辦公室, 教室, 機房,宿舍
cisco 思科
華爲
路由器 交換機
拓撲結構:
點對點 廣域網
星形 局域網 易於實現,易於擴展,易於故障排查
網狀 局域網 增長可靠,提供容錯
iso 國際標準化組織
osi 七層參考模型,理論框架
tcp/ip 五層 實際應用
1000Mbit
1000=1k
1000k=1M
1000000000
傳輸層 數據段
網絡層 數據包
數據鏈路層 數據幀
物理層 比特流
視圖
用戶視圖 保存
系統視圖
接口視圖
協議視圖
ctrl+z 等於 return
[Huawei]sysname SW1 //修改主機名
[Huawei]display version //查看軟硬件版本
[Huawei]display current-configuration //查看正在運行的配置,按空格翻頁
aaa模式,負責受權認證審計,能夠在此模式建立帳戶和密碼
ctrl + ] 完全退出系統
<Huawei>save //保存設置
<Huawei>reboot //重啓設備
<Huawei>reset saved-configuration //重置配置文件(恢復出廠)
<Huawei>reboot //重啓設備
ip
mac 硬件地址 物理地址 ,全球惟一不重複 48bit
0123456789ABCDEF
關閉各類信息提示(控制檯超時後失效)
undo terminal debugging
undo terminal monitor
undo terminal logging
undo terminal trapping
設置控制檯永不超時
sys
user-interface console 0
idle-timeout 0
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1.計算機網絡有哪兩種實現方式?
2.計算機網絡的功能是哪四種?
資源共享,信息傳遞,增長可靠性,提升系統處理能力
4.0Si七層模型以及tcp/ip五層模型分別是?
應用層 應用層
傳輸層 表示層
網絡層 會話層
數據鏈路層 傳輸層
物理層 網絡層
數據鏈路層
物理層
5.設備與層的對應關係分別是?對應的單位分別是?
應用層 :計算機 pdu
傳輸層 :防火牆 數據端
網絡層 :路由器 數據包
數據鏈路層:交換機 數據幀
物理層 :網卡 比特流
6.網絡設備生產廠商?
思科 華爲
7.交換機的命令行視圖有哪些?以及如何轉變?
用戶視圖 sys到系統
系統視圖 quit 到用戶 cilt z 到用戶
接口視圖 inter+tab gix/x/x
協議視圖 ospf
8.0/0/1分別表明什麼?
第一個0表示槽位號
第二個0表示子卡號
1表示接口號
9.在那個視圖下改主機名?如何改?
sysname 主機名
10.如何查看交換機配置?
display current-configuration
11.如何保存交換機的配置?
save
12.交換機的工做原理?
學習 廣播 接收回應 實現單播通訊
13.如何查看MAC地址表?
display mac-address
14.MA地址長度,前24位和後24位分別表明什麼?
供應商標識 供應商對網卡的惟一編號
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
#######################################################################
網絡的功能
信息傳遞 資源共享 提升可靠 增長系統處理性能
60年代 分組交換
70~80 tcp/ip
拓撲結構
點對點 wan
星形 lan
網狀 lan
osi七層參考模型
tcp/ip五層參考模型
應用層
傳輸層 防火牆
網絡層 路由器
數據鏈路層 交換機
物理層 網卡
用戶視圖
系統視圖
接口視圖
協議視圖
交換機工做原理
學習,廣播,轉發,更新
廣播氾濫
廣播域
vlan 虛擬局域網
virtual
控制廣播
增長安全
提升帶寬的利用率
下降數據傳遞的延遲
50~60ms 100ms
20ms
1s=1000ms
vlan 最大數量4096個
vlan1 默認vlan,無需建立,不能刪除
1, 建立vlan
進入系統視圖
vlan 2 //建立vlan2
undo vlan 2 //刪除vlan 2
2, 將接口加入相關vlan
in e0/0/3 //進入接口3
port link-type access //接口類型更改成接入,表示即將爲某一個vlan傳輸數據
port default vlan 2 //修改接口服務的vlan
display vlan 查看vlan列表驗證以前的操做
vlan batch 10 20 30
undo vlan batch 10 20 30
[Huawei]vlan batch 2 3 //建立VLAN二、3
[Huawei]port-group 1 //建組,組號是1
[Huawei-port-group-1]group-member Ethernet0/0/3 Ethernet0/0/4 //組中加入3口和4口
[Huawei-port-group-1]port link-type access //在組1中所敲的命令,等於對該組中全部接口敲
[Huawei-port-group-1]port default vlan 2
網段
vlan1
192.168.1.1
192.168.1.2
vlan2
192.168.2.1
192.168.2.2
vlan3
192.168.3.1
192.168.3.2
access 接入鏈路 承載1個vlan
trunk 中繼鏈路 承載多個vlan 打vlan標記
in e0/0/7
port default vlan 1 //恢復默認vlan
port link-type trunk //修改成中繼鏈路
port trunk allow-pass vlan all //容許經過全部vlan
鏈路聚合,增長可靠,增長帶寬
進入系統視圖
clear configuration interface ethernet0/0/7 //清空全部配置,恢復默認,此時接口會自動關閉
[Huawei]interface ethernet0/0/7
undo shutdown //打開接口##########################
[Huawei]interface Eth-trunk 1 //進入(建立)鏈路聚合接口1
[Huawei- Eth-trunk1]trunkport e 0/0/7 0/0/8 //捆綁7口和8口,此步驟若是接口不是默認狀態,會提示報錯,要求恢復默認.
port link-type trunk //將鏈路聚合接口修改成中繼鏈路
port trunk allow-pass vlan all //放行全部vlan
網絡層 路由器 ip
數據鏈路層 交換機 mac
不一樣部門=不一樣vlan=不一樣網段=不一樣廣播域
2的n次方-2
A 1~127 1677萬+
255.0.0.0
B 128~191 65534
255.255.0.0
C 192~223 254
255.255.255.0
192.168.0.1~192.168.0.254
每一個網段第一個地址是網絡id,最後一個地址是廣播地址
192.168.0.1
172.16.0.0 172.16.255.255
172.16.0.1~172.16.255.254
icmp 英特網控制報文協議 能夠查詢網絡狀態並反饋相應數據
undo ip add 進入接口,刪除ip
在接口中使用 display this 查看配置的ip地址
路由表
直連路由 路由器接口配置ip,並開啓以後自動產生
靜態路由 由管理員手工配置,小規模網絡適用
R1
ip route-static 192.168.3.0 24 192.168.2.2
ip route-static 192.168.4.0 24 192.168.2.2
R2
undo ip route-static 192.168.1.0 24 192.168.2.3
ip route-static 192.168.1.0 24 192.168.2.1
display ip routing-table | include /24 查看路由表包含/24的行
#################################################################
交換機 二層
vlan
控制廣播,增長安全,帶寬利用率提升,下降數據傳遞的延遲
路由器 實現不一樣網段的連接 ,在物理接口配置ip
三層交換機=二層交換+三層路由 ,在虛擬接口配置ip
使用三層交換機搭建網絡:
1,三層交換機建立vlan 2 3
vlan batch 2 3
2,將接口加入對應vlan
in g0/0/2
port link-type access
port default vlan 2
dis vlan
3,進入vlan接口(虛擬接口)配置ip地址,此ip將做爲
終端設備的網關
in vlan 1
ip add 192.168.1.254 24
dis cur
添加S3700交換機, 達到更合理利用三層交換機的目的
1,在S3700建立vlan2 3
2,在S3700將pc所連接的接口加入相應vlan
3,將2臺交換機之間的鏈路配置爲中繼鏈路
port link-type trunk
port trunk allow-pass vlan all
排錯
1,查ip,網關
2,所屬vlan
3,測試與網關的連接
網段 , vlan
爲三層交換機接口配置ip的思路:
1,S5700建立vlan4
2,進入vlan4虛擬接口配置ip
in vlan 4
ip add 192.168.4.1 24
3,將g0/0/2口加入vlan4
動態路由 是由某種動態路由協議實現全網互通的目的,適用於大型網絡
rip,isis,eigrp,bgp,ospf
宣告
三層交換機配置:
ospf //開啓動態路由ospf
area 0 //進入第一個區域,通常超大型網絡才須要多個區域,中小規模只使用第一個也就是0區域便可
network 192.168.1.0 0.0.0.255 //宣告設備自身所連接的網段
network 192.168.2.0 0.0.0.255
network 192.168.3.0 0.0.0.255
network 192.168.4.0 0.0.0.255
路由器:
ospf
area 0
network 192.168.4.0 0.0.0.255
network 192.168.5.0 0.0.0.255
display ip routing-table | include /24 查看最終結果
直連路由 配置ip,並開啓接口自動生成
靜態路由 手工配置 192.168.1.0 24 192.168.1.X
動態路由
默認路由 是特殊的靜態路由,可以匹配任意網段,當路由表中沒法查詢到目標網段時使用,一般用在內部設備訪問公網時使用.
三層交換機
ip route-static 0.0.0.0 0 192.168.4.2 //能夠匹配任意網絡
路由器
ip route-static 0.0.0.0 0 192.168.5.1
傳輸層 端口號 端到端
網絡層 路由器 ip 點到點
數據鏈路層 交換機 vlan trunk mac
http 80 tcp
https 443
mysql 3306 tcp
tcp 傳輸控制協議
可靠性高,效率低,面向連接
syn 打算與對方創建連接
ack 確認
fin 打算與對方斷開連接
三次握手 syn-->ack,syn-->ack
四次斷開 fin-->ack--> fin-->ack
udp 用戶數據報協議
可靠性低,效率高,無連接
acl 訪問控制列表,對匹配的數據進行限制.
基本acl 2000~2999 能夠對源ip限制
高級acl 3000~3999 能夠對源ip,目標ip,協議,端口限制
acl練習1:
[Huawei]interface GigabitEthernet 0/0/0
[Huawei-GigabitEthernet0/0/0] ip address 192.168.1.254 24
[Huawei]acl 2000 //建立acl,列表號是2000,表示即將使用基本acl
[Huawei-acl-basic-2000]rule deny source 192.168.2.1 0 //建立規則,拒絕源ip是192.168.2.1的數據經過
[Huawei]interface GigabitEthernet 0/0/1
[Huawei-GigabitEthernet0/0/1]ip address 192.168.2.254 24
[Huawei-GigabitEthernet0/0/1]traffic-filter inbound acl 2000
//進入g0/0/1接口後,放置acl 2000,用來過濾即將進入路由器的數據.
acl練習2:
acl 2000 //從新進入列表2000
display this //查看4
undo rule 5 //刪除以前的條目,根據序號刪除
rule permit source 192.168.2.1 0 //建立新條目,容許2.1經過
rule deny //拒絕全部人經過
在同接口的同方向,只能放一條acl
#################################################################
nat 網絡地址轉換
1,節約公網ip地址
2,增長安全
A 1~127
B 128~191
C 192~223
內部私有地址
A 10.0.0.0~10.255.255.255
B 172.16.0.0~172.31.255.255
C 192.168.0.0~192.168.255.255
ipv4版本地址總數42億+
ipv6
192.168.0.1 200.0.0.1 200.0.0.2 192.168.0.1
192.168.0.2
192.168.0.3
服務器搭建服務 nat 靜態轉換 1對1
僅僅訪問外部網絡 nat easy ip 多對1
acl
配置靜態nat,實現1對1的內外通信
[Huawei]interface G 0/0/1 //進入路由器外網接口
[Huawei-GigabitEthernet0/0/1] ip address 100.0.0.1 8
[Huawei-GigabitEthernet0/0/1]nat static global 100.0.0.2 inside 192.168.2.1 //開啓靜態nat轉換, 使內部主機2.1出門時將源ip轉換爲100.0.0.2
思考:
1,外部設備如何找到內部設備?
2,2.2也想出門如何作到?
[Huawei-GigabitEthernet0/0/1]nat static global 100.0.0.3 inside 192.168.2.2 //開啓靜態nat轉換, 使內部主機2.2出門時將源ip轉換爲100.0.0.3
配錯的轉換列表要及時刪除
undo nat static global 100.0.0.3 inside 192.168.2.2
使用easy ip達到節約公網ip的目的
[Huawei]acl 2000
[Huawei-acl-basic-2000]rule permit source any //使用acl定義任何內部地址
或者
[Huawei-acl-basic-2000]rule permit source 192.168.2.0 0.0.0.255 //僅容許192.168.2.0網段的主機
[Huawei-acl-basic-2000]rule deny
[Huawei]interface g0/0/1
[Huawei-GigabitEthernet0/0/1]nat outbound 2000 //能夠利用g0/0/1的ip訪問外網,acl列表2000中定義了誰能經過就容許誰能夠訪問外網
stp 生成樹協議
廣播風暴,提供鏈路備份的功能
vrrp 虛擬路由冗餘協議
網關備份,自動切換
SW1
in vlan 1
ip add 192.168.1.252 24
vlan 2
in vlan 2
ip add 192.168.2.2 24
in g0/0/2
port link-type access
port default vlan 2
ospf
area 0
network 192.168.1.0 0.0.0.255
network 192.168.2.0 0.0.0.255
SW2
in vlan 1
ip add 192.168.1.253 24
vlan 3
in vlan 3
ip add 192.168.3.2 24
in g0/0/2
port link-type access
port default vlan 3
ospf
area 0
network 192.168.1.0 0.0.0.255
network 192.168.3.0 0.0.0.255
路由器
ospf
area 0
network 192.168.2.0 0.0.0.255
network 192.168.3.0 0.0.0.255
network 192.168.4.0 0.0.0.255
display ip routing-table | include /24
排錯
在兩臺三層交換機配置vrrp
in vlan 1
vrrp vrid 1 virtual-ip 192.168.1.254
display vrrp brief
主路由器 master
備份路由器 backup
經過多vlan的配置實現vrrp負載均衡
全部交換機建立vlan 10 20
vlan batch 10 20
S5700
port-group 1
group-member g0/0/1 to g0/0/3
port link-type trunk
port trunk allow-pass vlan all
S3700
port-group 1
group-member e0/0/1 e0/0/2
port link-type trunk
port trunk allow-pass vlan all
兩臺S5700配置vrrp
in vlan 10
vrrp vrid 10 virtual-ip 192.168.10.254
in vlan 20
vrrp vrid 20 virtual-ip 192.168.20.254
進入第1臺5700
in vlan 10
vrrp vrid 10 priority 105
進入第2臺5700
in vlan 20
vrrp vrid 20 priority 105
display vrrp brief //最後檢查結果,第1臺5700是vlan10的主,vlan20的備份, 第2臺5700是vlan20的主,vlan10的備則正確
#########################################################################
1,全部交換機建立vlan 10 20
2,全部交換機之間的鏈路設置trunk
3,SW1配置虛擬接口ip
vlan 10 192.168.10.252
vlan 20 192.168.20.252
SW2配置虛擬接口ip
vlan 10 192.168.10.253
vlan 20 192.168.20.253
4,配置vrrp
SW1 vlan 10 主路由器 105
vlan 20 備份路由器
SW2 vlan 20 主路由器 105
vlan 10 備份路由器
===========================================
組建大型企業網絡:
1,全部交換機建立vlan 10 20 30 40
vlan batch 10 20 30 40
display vlan
2,全部交換機之間的鏈路設置trunk
S5700
port-group 1
group-member g0/0/4 g0/0/5
port link-type trunk
port trunk allow-pass vlan all
S3700
port-group 1
group-member e0/0/1 e0/0/2
port link-type trunk
port trunk allow-pass vlan all
3,修改設備名稱 SW1~SW6
4,配置SW1與SW2的虛擬接口地址
SW1
in vlan 30
ip add 192.168.30.252 24
in vlan 40
ip add 192.168.40.252 24
SW2
in vlan 30
ip add 192.168.30.253 24
in vlan 40
ip add 192.168.40.253 24
5,配置vrrp
SW1
vlan 10 主路由器 :
in vlan 10
vrrp vrid 10 virtual-ip 192.168.10.254
vrrp vrid 10 priority 105
vlan 20 備份路由器 :
in vlan 20
vrrp vrid 20 virtual-ip 192.168.20.254
vlan 30 主路由器 :
in vlan 30
vrrp vrid 30 virtual-ip 192.168.30.254
vrrp vrid 30 priority 105
vlan 40 備份路由器 :
in vlan 40
vrrp vrid 40 virtual-ip 192.168.40.254
SW2
vlan 10 備份路由器 :
in vlan 10
vrrp vrid 10 virtual-ip 192.168.10.254
vlan 20 主路由器 :
in vlan 20
vrrp vrid 20 virtual-ip 192.168.20.254
vrrp vrid 20 priority 105
vlan 30 備份路由器 :
in vlan 30
vrrp vrid 30 virtual-ip 192.168.30.254
vlan 40 主路由器 :
in vlan 40
vrrp vrid 40 virtual-ip 192.168.40.254
vrrp vrid 40 priority 105
display vrrp brief 查看結果
爲pc配置對應vlan的網關(192.168.X.254),測試是否全網互通
6,添加路由器並配置ip與三層交換機互聯
7,在三層交換機與路由器開啓ospf實現全網互通
10.0.0.0~10.255.255.255
172.16.0.0~172.31.255.255
192.168.0.0~192.168.255.255
8,路由器鏈接外網的接口配置ip地址,
另外外網的交換機在vlan1配置ip地
址100.0.0.10
9,兩臺路由器配置 nat
1, acl 放行全部人
acl 2000
rule permit source any
2, 在接口開啓nat
in g0/0/2
nat outbound 2000
10,兩臺路由器配置默認路由
ip route-static 0.0.0.0 0 100.0.0.10
在ospf中宣告默認路由
[Huawei]ospf
[Huawei-ospf-1]default-route-advertise
###################################################################
shells 腳本
Shell是在Linux內核與用戶之間的解釋器程序,一般指的是bash,負責向內核翻譯及傳達用戶/程序指令
是liunx系統中的翻譯管,解釋器類型:
~]#cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/tcsh
/bin/csh
############################例:
添加解釋器:ksh
安裝:
yum -y install ksh.x86_64
調用解釋器ksh
[root@server0 ~]# ksh
#
不支持tab
########################
bash優勢
1)支持tab
2)歷史記錄
3)快捷鍵
4)內置別名
5)管道 分號 重定向
工做方式
1)首先由init啓動Linux系統,加載好系列的文件
2)用戶輸入命令,終端捕獲到.
3)進行字符串解析.
4)找到對應的/bin/bash
5)將對應的bash經過fork複製到內存當中
6)bash一般由不少system call接口構成,按其順序壓入棧中,而將數據存入堆中.
7)由內核一個一個調用.
#####################################################
bash-->sh-->ksh
一個規範的腳本格式
1,聲明解釋器 , 做者信息
#!/bin/bash
#做者:
2,編寫註釋,解釋腳本功能,步驟,變量含義等等...
#XXXX
3,編寫代碼
echo 123
#!/bin/bash
#這是一個測試腳本
echo "hello world"
chmod u+x test1.sh
執行腳本的方式
1,添加x權限
2,調用新解釋器執行腳本
bash test1.sh //開啓子進程
3,使用當前解釋器
source test1.sh //不開啓子進程,能夠簡寫爲 .
. test1.sh //效果同上
編寫腳本,在/opt中建立目錄abc,而後進入目錄abc
#!/bin/bash
mkdir /opt/abc
cd /opt/abc
#!/bin/bash
echo 123
exit
/etc/yum.repos.d/XXX.repo
編寫一鍵部署yum倉庫的腳本:
#!/bin/bash
rm -rf /etc/yum.repos.d/*.repo
echo "[abc]
name=test
baseurl=http://172.25.254.254/content/rhel7.0/x86_64/dvd/
enabled=1
gpgcheck=0" > /etc/yum.repos.d/abc.repo
腳本編寫完後,能夠用bash test.sh執行
而後使用yum repolist檢查結果
編寫,一鍵部署ftp服務的腳本:
#!/bin/bash
yum -y install vsftpd &> /dev/null
systemctl restart vsftpd
systemctl enable vsftpd
systemctl stop firewalld //爲了測試腳本,能夠臨時關防火牆
常量 不會變化 腳本功能單一
變量 靈活多變 增長腳本功能, 增長靈活,多用變量可以使腳本更強大!
變量的種類:
1, 自定義變量
變量名稱=變量的值,變量名可使用大小寫字母,數字,下劃線,禁止使用特殊符號,不能以數字開頭.
a=10 //定義變量
echo $a //查看變量
unset a //取消變量
123a=10 //錯誤命名
echo ${a}RMB
2, 環境變量
UID USER HOME HOSTNAME SHELL PWD PS1 一級提示符 PS2
PATH 存放命令的路徑
3, 位置變量
$1 $2 $3 ....
4,預約義變量
$$ $* $# $? $0
#!/bin/bash
echo $1 執行腳本後的第1個參數
echo $2 執行腳本後的第2個參數
echo $3 執行腳本後的第3個參數
echo $0 執行的腳本名
echo $$ 執行腳本時的進程號
echo $* 全部位置變量
echo $# 全部位置變量的個數
echo $? 判斷上一條指令是否成功,0是成功,非0是失敗
編寫腳本,建立用戶tom,配置密碼789
#!/bin/bash
useradd tom
echo 789 | passwd --stdin tom
升級版本
#!/bin/bash
useradd $1
echo $2 | passwd --stdin $1
bash test.sh abcd 1234 //使用腳本建立用戶abcd並配置密碼1234
env 查看全部環境變量
set 查看全部變量
"" 雙引號 界定範圍
touch "a b" //建立1個文件,不加引號則建立2個
a=10
echo "$a" //效果不變
'' 單引號 界定範圍 ,且具備屏蔽特殊符號的做用
touch 'x y'
echo '$a' //$符號調用變量的值失效
`` 反撇號 或 $( ) 獲取命令輸出的結果
a=ls
echo $a
a=`ls` 或 a=$(ls)
echo $a
#!/bin/bash
read -p "請輸入用戶名" u
useradd $u
stty -echo
read -p "請輸入密碼" p
stty echo
echo $p | passwd --stdin $u
stty -echo 屏蔽回顯
stty echo 恢復回顯
export 發佈全局變量,可使子進程使用父進程定義的變量
export a=10 //定義+發佈全局變量
export a //若是變量存在,則直接發佈全局變量
bash //進入子進程
echo $a //可使用父進程定義的變量,覺得已經發布爲全局變量
vim /etc/profile
unset 變量名 //取消變量
export -n 變量名 // 取消全局效果,恢復局部
\ 轉義符號
求模 取餘數
shell中的運算
方法一:
expr 1 + 1 加
expr 2 - 1 減
expr 2 \* 2 乘
expr 4 / 2 除
expr 10 % 3 取餘
a=10
expr $a + $a //也支持變量
方法二:
echo $[1+1]
echo $[1-1]
echo $[a+a] //調用變量不用屢次添加$符號
echo $[1*1] //乘法無需轉義
方法三:
let 不輸出結果,能夠方便的修改變量的值
建立新變量 :
let c=1+1 //經過運算新建立變量c
let c=a+1 //常量變量都可使用
修改現有變量 :
let a=a+1 //常規思路,將a自己加1
let a++ //主流寫法,將a自己加1
let a=a-1 //常規思路,將a自己減1
let a-- //主流寫法,將a自己減1
let a=a+2 //常規思路,將a自己加2
let a+=2 //主流寫法
let a*=100 //修改變量自己,將a乘以100
############################################################
規範的腳本格式
1,聲明解釋器
2,註釋
3,代碼
變量的種類
1,自定義
2,環境 USER UID HOME HOSTNAME SHELL PWD PATH PS1 PS2
3,位置 $1 $2 $3....
4,預約義 $$ $* $# $? $0
"" '' `` $( )
read -p "XXXX" 變量名
stty -echo
stty echo
局部 --> 全局 export
expr 1 + 1
expr 1 \* 1
echo $[1+1]
echo $[1*1]
echo $((1+1))
let c=1+1
let c=x+y
a=10
let a++
let a--
let a+=2
bc //計算器,能夠計算小數
1.1+1
10/3
scale=3 //定義小數點後位數
10/3
quit //退出
非交互式計算
echo "1.1+1" | bc
echo "10/3" | bc
echo "scale=3;10/3" | bc
useradd
條件測試 [ ] test //可以使腳本更智能的工具
1,字符串
== 判斷是否相等 != 判斷是否不相等
-z 判斷是否爲空 ! -z
[ a == b ] 或者 test a == b //判斷a是否等於b
echo $? //0是判斷成功,非0是失敗
[ a == a ]
echo $?
[ a != a ] //判斷a是否不等於a
echo $?
[ $USER == root ] //判斷當前用戶是否爲root
echo $?
a=10
[ -z $a ] //判斷變量a是否爲空
echo $? //若是不是空,返回值是非0
a= //a等於空
[ -z $a ]
echo $? //判斷結果爲0
2,數字
-eq 等於
-ne 不等於
-gt 大於
-ge 大於等於
-lt 小於
-le 小於等於
X=20 //定義一個測試變量
[ $X -eq 20 ] && echo "相等" || echo "不相等"
相等
[ $X -ne 30 ] && echo "不等於" || echo "等於"
不等於
[ $X -gt 20 ] && echo "大於" || echo "否"
否
[ $X -ge 10 ] && echo "大於或等於" || echo "否"
大於或等於
[ $X -lt 30 ] && echo "小於" || echo "否"
小於
[ $X -le 20 ] && echo "小於或等於" || echo "否"
小於或等於
3,文件 ,
-e 判斷文件是否存在,不關心文件類型
-f 判斷文件是否存在,且類型必須是普通文件
-d 判斷文件是否存在,且類型必須是目錄
判斷當前用戶是否擁有相關權限:
-r 是否有讀 對管理員判斷無效
-w 是否有寫 對管理員判斷無效
-x 是否能執行
4,邏輯判斷
&& 而且 以前任務成功,才執行以後任務
|| 或者 以前任務失敗,才執行以後任務
; 先後無邏輯關係, 執行完前面任務,繼續執行後面的
[ a == a ] && echo ok || echo no
[ a == b ] && echo ok || echo no
[ a == b ] || echo ok && echo no
[ a == b ] || echo ok || echo no
[ a == b ] && echo ok && echo no
[ -z $1 ] && echo no && exit
編寫腳本實現如下需求:
每隔2分鐘檢查登陸服務器的帳戶,若是超過3人,則發郵件給管理員報警
非交互式發郵件的兩種方法
echo 123 |mail -s test root
mail -s test root < a.txt //輸入重定向,須要先準備好a.txt
#!/bin/bash
n=`who |wc -l`
[ $n -gt 3 ] && echo "有$n我的入侵服務器啦!隔壁老王來啦" | mail -s test root
chmod u+x test1.sh
crontab -e
*/2 * * * * /opt/test1.sh
rm -rf /var/spool/mail/root //測試前能夠先刪除全部郵件
== != -z ! -z
&& ||
掛載本地yum源文件 && 編寫yum倉庫文件 && 安裝ftp服務 && 開啓ftp服務 &&
if 單分支
if 條件測試 ;then
命令序列
fi
if 雙分支
if 條件測試 ;then
命令序列1
else
命令序列2
fi
if 多分支
#!/bin/bash
x=$[RANDOM%10]
read -p "請輸入一個數字(0-9)" n
if [ $x -eq $n ] ;then
echo "恭喜猜對了"
elif [ $n -gt $x ] ;then
echo "猜大了"
else
echo "猜小了"
fi
ping -c 定義ping次數 -i 定義ping間隔時間,單位秒 -W 1 加快反饋時間,單位秒
$?
測試一個ip地址,若是成功則返回"ok",若是失敗返回"no"
for 循環 ,關心2個點
1, 循環次數
2, 循環過程當中調用的變量
for 變量名 in 值1 值2 值3......
do
循環任務
done
for i in a b c
do
echo $i
done
#!/bin/bash
for i in {1..5} //花括號裏不能放變量再交給for循環
do
echo $i
done
#!/bin/bash
a=5
for i in `seq $a` //seq可使用變量
do
echo $i
done
編寫腳本,測試172.25.0.1~172.25.0.15是否能ping通
#!/bin/bash
x=0
y=0
for i in {1..15}
do
ping -c 3 -i 0.2 -W 1 172.25.0.$i &> /dev/null
if [ $? -eq 0 ];then
echo "172.25.0.$i 通了"
let x++
else
echo "172.25.0.$i 不通"
let y++
fi
done
echo "$x臺通了,$y臺不通"
##########################################
條件測試
test 測試內容 [ 測試內容 ]
1,字符串
== != -z ! -z
2,數字
-eq -ne -gt -ge -lt -le
3,文件
-e -f -d -r -w -x
4,邏輯
&& || ;
單分支
if 條件測試;then
命令序列
fi
雙分支
if 條件測試;then
命令序列1
else
命令序列2
fi
多分支
if 條件測試;then
命令序列1
elif 條件測試;then
命令序列2
else
命令序列3
fi
循環
for 變量名 in 值1 值2 值3...
do
執行指令
done
while 條件測試
do
執行指令
done
case分支,功能相似if,代碼比if要精簡,但功能沒有if強大,是簡化版本的if
case 變量 in
模式1)
命令序列1 ;;
模式2)
命令序列2 ;;
.. ..
*)
默認命令序列
esac
在真機操做
cd /linux-soft/02
scp lnmp_soft.tar.gz root@172.25.0.10:/
回到虛擬機
cd /
tar xf /lnmp_soft.tar.gz
cd /lnmp_soft
scp nginx-1.10.3.tar.gz /opt
編寫腳本,實現一鍵源代碼編譯安裝nginx服務
#!/bin/bash
tar xf nginx-1.10.3.tar.gz
cd nginx-1.10.3
yum -y install gcc openssl-devel pcre-devel &> /dev/null
./configure
make
make install
systemctl stop firewalld //關閉防火牆
cd /usr/local/nginx //最後進到這個目錄測試軟件是否已經安裝
/usr/local/nginx/sbin/nginx //開啓服務
/usr/local/nginx/sbin/nginx -s stop //關閉服務
netstat -ntulp | grep nginx //查詢nginx服務狀態
netstat -ntulp | grep :80 //查詢80端口被哪一個服務佔用
shell函數,至關於加強版別名,能夠利用一個函數名稱,存儲多個命令
方法一
abc(){
> echo 123
> ls
> }
調用函數,直接輸abc便可
方法二
function xyz {
> echo xyz
> ls
> }
#!/bin/bash
cecho(){
echo -e "\033[$1m$2\033[0m"
}
cecho 31 ABCDEF
cecho 32 ABCDEF
cecho 33 ABCDEF
cecho 34 ABCDEF
cecho 35 ABCDEF
cecho 36 ABCDEF
while :
do
exit
done
echo XXXXX
對循環的控制
1, exit 直接退出腳本
2, break 終止循環,繼續循環以後的任務
3, continue 終止當前循環,繼續下一次循環
編寫腳本,使用戶輸入的數字求和,用戶輸入0時,結束計算並輸出以前全部數字之和
#!/bin/bash
x=0
while :
do
read -p "請輸入一個數字" n
[ $n -eq 0 ] && break
let x+=n
done
echo $x
從數字1~20中查找6的倍數,找到以後輸出到屏幕
#!/bin/bash
for i in {1..20}
do
x=$[i%6]
[ $x -ne 0 ] && continue
echo $i
done
字符串
1,字串截取
a=abcdef //定義變量
echo ${a:1:2} //從第2位開始截取2位
echo ${a:4:2} //從第5位開始截取2位
echo ${a:2:4}
echo ${a:0:3} //從第1位開始截取3位
echo ${a::3} //效果同上
編寫腳本,從全部的字母大寫,小寫,數字中找一個隨機字符顯示在屏幕
編寫腳本, 獲取8位隨機字符的密碼
#!/bin/bash
x=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
pass=
for i in {1..8}
do
n=$[RANDOM%62]
pass1=${x:n:1}
pass=$pass$pass1
done
echo $pass
2,字串替換
a=11223344
echo ${a/1/X} //將第一個1替換成X
echo ${a//1/X} //將全部1替換成X
echo ${a/2/} //將第一個2替換成空,等於刪除第一個2
echo ${a//2/} //將全部2替換成空,刪除全部2
a=222333
如何獲得替換結果 XX2333
3,字串刪除
# 從左至右刪除 掐頭
a=`head -1 /etc/passwd`
echo ${a#root} //從左至右刪除第一個root
echo ${a#root:x:} //從左至右刪除到root:x:
echo ${a#root:x:0:0:root:/root} //從左至右刪除到root:x:0:0:root:/root
echo ${a##*root} //上述目的能夠簡寫, 刪除到最後一個root,以及root左邊全部內容
從右往左刪除 去尾
echo ${a%/bin/bash} //從右往左刪除到/bin/bash
echo ${a%root*} //從右往左刪除到第一個root,以及root右邊全部內容
echo ${a%%root*} //從右往左刪除到最後一個root,以及root右邊全部內容,至關於刪除整行
經過字串刪除功能,編寫腳本,實現批量修改文件擴展名
touch abc{1..8}.txt //先製做素材
#!/bin/bash
for i in `ls *.txt`
do
x=${i%.*} //經過去尾功能,獲取沒有擴展名的文件名
mv $i $x.doc //將原來的文件,修改成文件名.doc
done
升級版
#!/bin/bash
for i in `ls *.$1` //使用位置變量
do
x=${i%.*}
mv $i $x.$2
done
###############################################
設置變量初值(備用值)
${a:-XXX} //當變量a有值時,使用自身的值,是空時使用XXX
case 變量 in
模式1)
命令序列1 ;;
模式2)
命令序列2 ;;
*)
命令序列3
esac
函數
函數名(){
命令序列
}
function 函數名 {
命令序列
}
echo -e "\033[31mABCD\033[0m"
循環的中斷
1,exit
2,break
3,continue
字串處理
1,字串截取
${a:}
2,字串替換
${a/}
3,字串刪除
掐頭 ${a#}
去尾 ${a%}
設置初值
${a:-}
正則表達式,能夠對文本匹配查找,配合不少工具實現豐富的功能
基本正則:
grep ^$ user //搜索空行
grep "^ " user //搜以空格開頭的行
grep " $" user //搜以空格結尾的行
grep "[bin]" user //搜索字母b或者i或者n
grep "roo[tdg]" user //搜索root或者rood或者roog
grep "[a-z]" user //找全部小寫字母
grep "[0-9]" user //找全部數字
grep "[A-Z]" user //找全部大寫字母
grep "[rot]" user //找r或o或t
grep "[^rot]" user //找除了r或o或t以外的字符
grep "[^0-9]" user //不找數字
grep "[^a-z]" user //不找小寫字母
grep "[^a-zA-Z]" user //不找字母
grep "." user //找任意字符
grep "roo." user //找roo後面追加1個任意字符
grep "ro.." user //找ro後面追加2個任意字符
grep "^." user //找以任意字符開頭的行
grep ".$" user //找以任意字符結尾的行
grep ".*" user //找任意
grep "*" user //不能單獨使用
grep "a*" user //找有a的行,a能夠出現任意次,包括0次
grep "o\{1,2\}" user //搜索o出現了1到2次
grep "o\{2\}" user //搜索o出現了2次
grep "o\{1,\}" user //搜索o出現了1次以及1次以上
grep "o\{2,\}" user //搜索o出現了2次以及2次以上
grep "o\{3,\}" user //搜索o出現了3次以及3次以上
grep "\(0:\)\{2\}" user
擴展正則
\{\} 能夠 省略爲 { }
\(\) 能夠 省略爲 ()
egrep "(0:){2}" user //搜索2個0:連在一塊兒的行
grep -E "(0:){2}" user //效果同上
+ 至關於 \{1,\} //匹配前一個字符1次以及1次以上
? 至關於 \{0,1\} //匹配前一個字符0次或1次
172.40.50.115
/var/ftp/pub
vim 交互式
sed 流式編輯器, 非交互式, 增刪改查, 逐行處理
使用方式
1, 前置命令 | sed 選項 定址符 指令
2, sed 選項 定址符 指令 操做的文件
選項:
1, -n 屏蔽默認輸出
2, -r 支持擴展正則表達式
3, -i 寫入文件
指令
p 輸出文檔內容
sed -n '1p' user //輸出第1行
sed -n '2,4p' user //輸出2~4行
sed -n '3p;5p' user //輸出3行和5行
sed -n '2,+2p' user //輸出第2行,以及後面2行
sed -n '1~2p' user //查看奇數行
sed -n '2~2p' user //查看偶數行
sed的定址符可使用正則表達式, 在 / / 中間填寫
sed -n '/root/p' user //查看有root的行
sed -n '/^root/p' user //查看以root開頭的行
sed -n '=' user //看全部行的行號
sed -n '$=' user //看最後一行的行號
d 刪除行,使用方式和指令p基本一致,注意無需加 -n選項
sed '1d' user //刪除第1行
s 替換
s/old/new/
s///
sed 's/2017/XXXX/' test //替換文檔中全部行的第1個2017
sed '2s/2017/XXXX/' test //替換第2行的第1個2017
sed '2s/2017/XXXX/2' test //替換第2行的第2個2017
sed '3s/2017/XXXX/3;3s/2017/XXXX/2' test //替換第3行的第三個2017, 再替換第3行的第2個2017
sed 's/2017/XXXX/g' test //替換全部2017
sed 's/2017//' test //將全部行的第1個2017替換爲空,等於刪除
sed -n 's/root//p' /etc/passwd //替換passwd文件中全部行的第一個root爲空,並顯示替換的行
嘗試使用sed替換功能將 /bin/bash 替換爲 /sbin/sh
sed 's//bin/bash//sbin/sh/' user //常規方式更換,報錯
sed 's/\/bin\/bash/\/sbin\/sh/' user //使用轉義符號屏蔽衝突的斜槓, 能夠成功,但麻煩
sed 's!/bin/bash!/sbin/sh!' user //更改替換符號爲!
sed 's(/bin/bash(/sbin/sh(' user //或用(
刪除文件中每行的第二個、最後一個字符
sed 's/.//2;s/.$//' test
將文件中每行的第1個、第2個字符互換
abc
sed -r 's/(.)(.)(.*)/\2\1\3/' abc
sed -r 's/(.)(.)(.*)/\2\1\3/' test
將文件中每行的第1個、最後1個字符互換
sed -r 's/^(.)(.*)(.)$/\3\2\1/' test
刪除文件中全部的數字
sed 's/[0-9]//g' test //找到全部數字,替換成空
爲文件中每一個大寫字母添加括號
sed -r 's/([A-Z])/(\1)/' test //找到全部大寫字母,並複製,而後在後面粘貼時,添加括號
編寫腳本,一鍵部署ftp服務,並實現匿名上傳普通文件功能
#!/bin/bash
yum -y install vsftpd &> /dev/null
sed -i 's/^#anon_u/anon_u/' /etc/vsftpd/vsftpd.conf
systemctl restart vsftpd
systemctl enable vsftpd
systemctl stop firewalld //臨時關閉防火牆
chmod 777 /var/ftp/pub //給pub目錄權限
setenforce 0 //關閉selinux
腳本運行後,用真機訪問虛擬機的ftp,能夠拖拽普通文件到pub目錄中
##############################################
正則表達式
基本正則
^ $ [ ] [^] . *
\{n,m\} \{n,\} \(ro\)\{2\} \(\)
擴展正則
egrep
grep -E
+ ? {n,m} | ()
\b
athey
\bthe\b
前置指令 | sed 選項 定址符 指令
sed 選項 定址符 指令 文件
逐行執行
-n -r -i
/ /p / /d / /s///
a 在行下面追加 i 在行上面添加 c替換整行
sed 'a 666' user //全部行下面追加666
sed '1a 666' user //第1行下面追加666
sed '/bash$/a 666' user //以bash結尾的行下面追加666
sed 'i 666' user //全部行上面添加666
sed '1i 666' user //第1行上面添加666
sed '2c 666' user //將第2行替換爲666
sed 'c 666' user //將全部行替換爲666
sed 修改文本
awk 精肯定位查找 逐行執行
前置指令 | awk 選項 條件 指令
awk 選項 條件 指令 文件
選項
-F 指定分隔符
指令
print 輸出內容到屏幕
列 $1 第一列 $2 第二列
awk '{print}' hello //輸出文檔全部內容
awk '{print $2}' hello //輸出文檔每行第2列
awk '{print $2 , $3}' hello //輸出文檔每行第2列和第3列
awk '{print $3,$2}' hello
awk '{print $1,$2,$3}' hello
awk '{print $0}' hello //輸出文檔每行全部列
awk '{print $0,$3}' hello //輸出文檔每行全部列和第3列
awk -F: '{print $6}' user //修改分隔符爲冒號,顯示第6列
awk -F[:/] '{print $9}' user //修改分隔符爲冒號或者斜槓,顯示第9列
awk -Fo '{print $2}' hello //修改分隔符爲字母o,顯示第2列
awk 經常使用內置變量
$0全部列 $1 $2 $3... NR 行號 NF 列號
awk '{print NR}' hello //查看行號
awk '{print NF}' hello //查看有幾列
awk '{print NR,NF}' hello //查看行號和列
awk -Fbin/ '{print $2}' user //定義分隔符爲bin/,顯示第2列
df -h / | awk '{print $4}' //顯示全部行第4列
df -h / | awk '/vda1/{print $4}' //顯示有vda1的行的第4列
df -h / | awk '/vda1/{print "根分區剩餘容量是:"$4}' //顯示有vda1的行的第4列,並在前面追加常量, 常量要用雙引號
使用awk過濾顯示網卡流量信息:
ifconfig eth0 |awk '/RX p/{print $5}'
ifconfig eth0 |awk '/RX p/{print "eth0網卡接收的流量是" $5"字節"}'
ifconfig eth0 |awk '/TX p/{print "eth0網卡發送的流量是" $5"字節"}'
使用awk篩選安全日誌中登陸密碼輸錯的主機
1,在desktop中輸入tail -5 /var/log/secure 能夠查看安全日誌最新的5行記錄
2,使用server遠程登陸desktop,故意輸錯密碼,而後再次查看desktop日誌發現最後一行多出記錄了
3,使用真機遠程登陸desktop,也故意輸入錯誤密碼(須要提早在desktop中家目錄的.ssh中把認證祕鑰文件更名)
4,在desktop中使用命令過濾日誌,查找密碼輸入失敗的行的第11列
awk '/Failed/{print $11}' /var/log/secure
使用awk篩選輸出用戶相應信息
XXX的解釋器路徑是XXXX,家目錄是XXXX
awk -F: '{print $1,"的解釋器路徑是"$7}' user
控制awk的工做流程
BEGIN{???} 執行1次
{print} 執行n次
END{???} 執行1次
製表符 \t tab鍵
使用awk按流程輸出信息:
awk -F: 'BEGIN{print "User\tUID\tHome"}{print $1"\t"$3"\t"$6}END{print "總計 "NR" 行"}' user
awk處理條件
1, 正則 ~ 包含 !~不包含
awk -F: '$1~/root/{print}' user //找第1列包含root的行
awk -F: '/bin/' user //找有bin的行
awk -F: '$6~/bin/' user //找第6列包含bin的行
awk -F: '$6~/\/bin/' user //找第6列包含/bin的行
awk -F: '$6!~/\/bin/' user //找第6列不包含/bin的行
2,使用數值/字符串比較設置條件
比較符號:==(等於) !=(不等於) >(大於)
>=(大於等於) <(小於) <=(小於等於)
awk -F: '$1=="root"' user //找第1列等於root的行
awk -F: '$1=="roo"' user //找第1列等於roo的行
awk -F: '$1~/roo/' user //找第1列包含roo的行
awk -F: 'NR==3' user //找第3行
awk -F: '$3==0' /etc/passwd //找管理員
awk -F: '$3<10' /etc/passwd //找uid小於10的帳戶
awk -F: '$3<10{print $1}' /etc/passwd //找uid小於10的帳戶,並顯示帳戶名
awk -F: '$3>=1000{print $1}' /etc/passwd //找普通帳戶,並顯示帳戶名
3,邏輯符號
&& 而且
|| 或者
awk 'NR>=3 && NR<=5' user //找3~5行
awk -F: '$3>=100 && $3<=1000' /etc/passwd //找udi大於等於100,而且小於等於1000的行
awk 'NR>3 && NR<5' user //找大於3且小於5的行
awk 'NR>3 || NR<5' user //找大於3或者小於5的行
awk 'NR>5 && NR<3' user //找大於5且小於3的行,邏輯錯誤
awk中數學運算
awk 'BEGIN{x=10;y=20;print x*y}' //定義變量,而後相乘並輸出結果
awk 'BEGIN{x=10;y=20;print y%x}' //取餘
awk 'BEGIN{x=10;y=20;print x+=y}' //x的自增, 支持主流寫法
awk 'BEGIN{x=10;y=20;print x++}' //將x+1,但不輸出
awk 'BEGIN{x=10;y=20;print x++;print x}' //將x+1,而後輸出x
awk 'BEGIN{x=10;y=20;print x+=1}' //將x+1,同時輸出
seq 20 | awk '$1%3==0' //找1~20之內誰是3的倍數
使用awk按照 用戶名 --> 密碼 的格式輸出使用bash的帳戶信息
#!/bin/bash
u=`awk -F: '/bash$/{print $1}' /etc/passwd`
for i in $u
do
grep $i: /etc/shadow | awk -F: '{print $1" --> " $2}'
done
########################################################
vim 交互式 增刪改查
grep 模糊查找
sed 非交互式 增刪改查
awk 精確查找
前置指令 | awk 選項 條件 指令
awk 選項 條件 指令 文件
-F 修改分隔符
print
條件
1, 使用正則 ~ !~
2, 字符串與數字 == != > >= < <=
3,邏輯符號 && ||
BEGIN{} 執行1次
{ } 執行n次
END{} 執行1次
awk的if判斷
單分支
{if(條件){執行指令}}
計算系統中普通帳戶的數量:
awk -F: '{if($3>=1000){x++}}END{print x}' /etc/passwd
awk '{ }END{ }'
雙分支
{if(條件){執行指令1}else{執行指令2}}
計算系統中普通帳戶和系統帳戶的數量:
awk -F: '{if($3>=1000){x++}else{y++}}END{print x,y}' /etc/passwd
多分支
{if(條件1){執行指令1}else if(條件2){執行指令2}else{執行指令3}}
awk 數組
變量 能夠存儲1個值
數組 能夠存儲多個值
變量名=值
數組名[下標]=值
a[1]=10
a[2]=20
awk 'BEGIN{a[1]=10;a[2]=20;print a[2],a[1]}'
for(變量名稱 in 值){執行指令}
awk數組+for循環基本用法:
awk 'BEGIN{a[0]=0;a[1]=11;a[2]=22; for(i in a){print i,a[i]}}' //定義一個數組a, 有3個下標,分別對應3個值, 而後交給for循環,循環顯示 下標 和 值
awk數組+for循環擴展應用 :
準備文檔包含3行內容
abc
abc
xyz
awk '{a[$1]++}END{for(i in a){print i,a[i]}}' abc
a[abc]++ a[abc]=2
a[xyz]++ a[xyz]=1
abc 2
xyz 1
ip[192.168.0.1]=2
ip[192.168.0.2]=1
ip[192.168.0.3]=3
使用awk統計網站訪問量:
1,yum -y install httpd
2,systemctl restart httpd 開啓服務
3,使用其餘主機訪問該網站,多訪問幾回
防火牆須要臨時關閉 systemctl stop firewalld
4, 使用awk對日誌分析, sort能夠排序, -n對數字排序, -r降序
awk '{ip[$1]++}END{for(i in ip){print ip[i],i}}' access_log | sort -nr
5, 可使用ab工具測試網站後在交給awk分析(安裝httpd以後自動安裝ab工具)
ab -n 10000 -c 1 172.25.0.10/ 1個用戶訪問1萬次網站
#!/bin/bash
while :
do
uptime | awk '{print "cpu平均負載是"$10,$11,$12}'
ifconfig eth0 | awk '/RX p/{print "網卡接收的數據量 是" $5"字節"}'
ifconfig eth0 | awk '/TX p/{print "網卡發送的數據量 是" $5"字節"}'
free -m | awk '/Mem/{print "剩餘內存容量是"$4"M"}'
df -h | awk '/vda1/{print "根分區剩餘容量是"$4}'
user=`cat /etc/passwd | wc -l`
echo "服務器擁有帳戶數量是$user個"
u=`who | wc -l`
echo "當前服務器登陸用戶的數量是$u個"
p=`ps aux | wc -l`
echo "當前主機運行的進程數量是$p個"
ins=`rpm -qa |wc -l`
echo "當前主機安裝軟件包數量是$ins個"
sleep 3
clear
done
編寫腳本,監控服務器,若是發現有人嘗試登陸失敗5次則發郵件給管理員
#!/bin/bash
x=`awk '/Failed/{ip[$11]++}END{for(i in ip){print ip[i]","i}}' /var/log/secure`
for i in $x
do
n=${i%,*}
p=${i#*,}
[ $n -ge 5 ] && echo "$p訪問失敗了$n次" | mail -s test root
done
測試前能夠先刪除郵件
rm -rf /var/spool/mail/root
############################################
NGINX web服務搭建
Web 服務器
unix和linux
-Apache Nginx Tengine Lighttpd
-Tomcat IBM WebSphere Jboos
微軟:
IIS
NGinx簡介
Nginx
是一個高性能的HTTP和反向代理服務器,同時也是一一個IMAp/POP3/SMTP 代理服務器
安裝
依賴軟件包
gcc 源碼編譯工具
porc-devel 依賴包
OPENssl-devel ssl加密工具
進入目錄
利用tar解開軟件壓縮
進入軟件主目錄
1 使用源碼包自帶腳本進行檢測程序 並指定程序路徑
./configure \
--prefox=/usr/loacl/nginx #指定安裝的路徑
--user=nginx #指定用戶
--group=nginx #指定組
--with-http_ssl_modlue
2使用make工具進行編譯和生成程序
yum -y install make
進入軟件所在目錄
make ; make install #進行程序生成
安裝完成
默認路徑在 /usr/local/nginx/sbin/nginx #程序路徑
!!!!!!!!須要建立以前定義的用戶 啓動服務不能夠由root啓動會致使數據泄露
/usr/local/nginx/sbin/nginx #啓動程序
/usr/local/nginx/sbin/nginx -s stop 關閉程序
/usr/local/nginx/sbin/nginx -s reload 從新載入配置文件
/usr/local/nginx/sbin/nginx -V 查看軟件的版本信息
可使用軟連接的方法方便後期使用
ln -s /usr/local/nginx/sbin/nginx /sbin/
netsta 工具 能夠查看系統的端口信息 經常使用的目錄選項
-a顯示全部端口的信息
-n以數字格式顯示端口號
-t顯示TCP鏈接的端口
-u顯示UDP鏈接的端口
-l顯示服務正在監聽的端口信息,如httpd啓動後,會一直監聽80端口
-p顯示監聽端口的服務名稱是什麼(也就是程序名稱)
netstat -anptu | grep nginx
進行主頁文件測試
[root@client ~]# curl http://192.168.4.5
<html>
<head>
<title>Welcome to nginx!</title>
</head>
<body bgcolor="white" text="black">
<center><h1>Welcome to nginx!</h1></center>
</body>
</html>
Nginx升級步驟和注意事項
將要升級的源碼包解包編譯指定路徑
將源文件進行移動備份
mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginxold
將新版本的程序拷貝到路徑下
cp objs/nginx /usr/local/nginx/sbin/
make upgrade 或 關閉服務 強行關閉killall nginx
進行升級 也就是關閉服務從新啓動
若是報錯:多是由於用戶沒有建立 還有是服務沒有開啓
用戶認證配置修改
進入配置文件/usr/local/nginx/conf/nginx.conf修改
...........
不須要刪除
也能夠自行建立一個虛擬主機
須要添加分號在每行結尾處
注意花括號個數 {} 必須成對 http {這裏的括號需和結尾處呼應 也能夠自行建立
server {
linten 80; 端口指定
servername localhost; #這裏是域名
auth_basic "input password"; 登陸時的提示
auth_basic_user_file "/usr/local/nginx/pass"; #認證的密碼文件
localtion / {
root html;
index index.html index.html;
}
}
生成密碼文件
安裝httpd-tools
yum -y install httpd-tools
htpasswd -c /usr/local/nignx/pass 建立 #用戶名
htpasswd /usr/local/nignx/pass 追加時不須要寫-c選項否則會把以前的替換
echo '測試用戶認證網頁' > /usr/local/nginx/html/index.html
/usr/local/nginx/sbin/nginx -s reload //從新加載配置文件
進行測試
firefox 192.168.4.5
curl -u 用戶名;密碼 192.168.4.5
配置基於域名的虛擬主機
進行配置文件修改 /usr/local/nginx/conf/nginx.conf
易錯: {}添加問題 配置後需從新加載配置文件
server {
listen 80
servername www.a.com; 域名
aoth_basic; "提示"
aoth_basic_user_file; "/usr/local/nginx/pass"
location / {
root www;
index index.html index.html;
}
}
server {
listen 80; //端口
server_name www.b.com; //域名
location / {
root www; //指定網站根路徑
index index.html index.htm;
}
}
建立網站根目錄及對應首頁文件
mkdir /usr/local/nginx/www
echo "基於域名的虛擬主機" > /usr/local/nginx/www/index.html
測試
curl -u 用戶名;密碼 www.a.com
curl www.b.com
firefox http://www.a.com //輸入密碼後能夠訪問
firefox http://www.b.com //直接訪問
基於端口的虛擬主機(參考模板)
server {
listen 8080; //端口
server_name web1.example.com; //域名
}
...........
server {
listen 8000; //端口
server_name web1.example.com; //域名
.......
}
基於ip的虛擬主機
server {
listen 192.168.0.1:80; //IP地址與端口
server_name web1.example.com; //域名
... ...
}
server {
listen 192.168.0.2:80; //IP地址與端口
server_name web1.example.com;
... ...
}
SSL虛擬主機
cd /usr/local/nginx/conf #進入配置目錄
opensll genursa > cert.key #生成密鑰
opensll req -new -x509 -key cer.key > cert.pem #生成公鑰
server
listen 443 ssl;
server_name www.c.com;
ssl_certificate cert.pem; #這裏是證書文件
ssl_certificate_key cert.key; #這裏是私鑰文件
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
erewrite /http/www.c.html https/www.c.html;
location / {
root html;
index index.html index.htm;
}
}
通常在最後有模板把註釋打開修改便可
載入配置
[root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload
測試
curl https:/www.c.com
firefox https://www.c.com
部署LNMP環境
!安裝軟件
yum -y install gcc openssl-devel pcre-devel
源碼安裝Nginx(若是前面課程中已經安裝Nginx,則忽略這一步)
useradd -s /sbin/nologin nginx
tar -xvf nginx-1.12.2.tar.gz
cd nginx-1.12.2
./configure \
> --user=nginx --group=nginx \
> --with-http_ssl_module
make && make install
.. ..
安裝MariaDB
Mariadb在新版RHEL7光盤中包含有該軟件,配置yum源後能夠直接使用yum安裝:
yum -y install mariadb mariadb-server mariadb-devel
安裝 php和php-fpm
yum -y install php php-mysql
yum -y install php-fpm
!啓動服務
systemctl stop httpd //若是該服務存在則關閉該服務
/usr/local/nginx/sbin/nginx //啓動Nginx服務
netstat -utnlp | grep :80
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 32428/nginx
2)啓動MySQL服務
systemctl start mariadb //啓動服務器
systemctl status mariadb //查看服務狀態
systemctl enable mariadb //設置開機啓動
3)啓動PHP-FPM服務
systemctl start php-fpm //啓動服務
systemctl status php-fpm //查看服務狀態
systemctl enable php-fpm //設置開機啓動
步驟一: php-fpm配置文件
1)查看php-fpm配置文件(實驗中不須要修改該文件)
vim /etc/php-fpm.d/www.conf
[www]
listen = 127.0.0.1:9000 //PHP端口號
pm.max_children = 32 //最大進程數量
pm.start_servers = 15 //最小進程數量
pm.min_spare_servers = 5 //最少須要幾個空閒着的進程
pm.max_spare_servers = 32 //最多容許幾個進程處於空閒狀態
步驟二:修改Nginx配置文件並啓動服務
vim /usr/local/nginx/conf/nginx.conf
使用域名配置
server {
listen 80;
server_name www.xxx.com;
location / {
root www;
index index.php index.html index.htm;
}
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000; 將請求轉發給本機9000端口,PHP解釋器
fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
include fastcgi.conf; #加載其餘配置文件/也可將配置導入
}
}
易錯 : 上面http{到最下面
上面server {到虛擬域名主機的server上面
步驟三:建立PHP頁面,測試LNMP架構可否解析PHP頁面
vim /usr/local/nginx/html/test.php
<?php
$i="This is a test Page";
echo $i;
?>
2)建立PHP測試頁面,鏈接並查詢MariaDB數據庫。
vim /usr/local/nginx/html/mysql.php
########################################
<?php
$mysqli = new mysqli('localhost','root','密碼','mysql');
//注意:root爲mysql數據庫的帳戶名稱,密碼須要修改成實際mysql密碼,無密碼則留空便可
//localhost是數據庫的域名或IP,mysql是數據庫的名稱
if (mysqli_connect_errno()){
die('Unable to connect!'). mysqli_connect_error();
}
$sql = "select * from user";
$result = $mysqli->query($sql);
while($row = $result->fetch_array()){
printf("Host:%s",$row[0]);
printf("</br>");
printf("Name:%s",$row[1]);
printf("</br>");
}
?>
############################################
3)客戶端使用瀏覽器訪問服務器PHP首頁文檔,檢驗是否成功:
firefox http://192.168.4.5/test.php
firefox http://192.168.4.5/mysql.php
4)LNMP常見問題
Nginx的默認訪問日誌文件爲/usr/local/nginx/logs/access.log
Nginx的默認錯誤日誌文件爲/usr/local/nginx/logs/error.log
PHP默認錯誤日誌文件爲/var/log/php-fpm/www-error.log
若是動態網站訪問失敗,可用參考錯誤日誌,查找錯誤信息。
############################
地址重寫
#######
(訪問a.html重定向到b.html)
rewrite /a.html /b.html; #用戶訪問 /a.html 會直接被轉發到 /b.html
3)客戶端測試(仔細觀察瀏覽器地址欄的變化)
##########
訪問a.html重定向到b.html(跳轉地址欄)
rewrite /a.html /b.html redirect;
3)客戶端測試(仔細觀察瀏覽器地址欄的變化)
###############
修改配置文件(訪問192.168.4.5/下面子頁面,重定向至www.tmooc.cn/下相同的頁面)
rewrite ^/(.*)$ http://www.tmooc.cn/$1;
#############
客戶端測試(真實機測試,真實機才能夠鏈接tmooc)
firefox http://192.168.4.5
irefox http://192.168.4.5/test
####################
修改配置文件(實現curl和火狐訪問相同連接返回的頁面不一樣)
建立網頁目錄以及對應的頁面文件:
echo "I am Normal page" > /usr/local/nginx/html/test.html
mkdir -p /usr/local/nginx/html/firefox/
echo "firefox page" > /usr/local/nginx/html/firefox/test.html
#這裏,~符號表明正則匹配,*符號表明不區分大小寫
if ($http_user_agent ~* firefox) { //識別客戶端firefox瀏覽器
rewrite ^(.*)$ /firefox/$1;
3)從新加載配置文件
/usr/local/nginx/sbin/nginx -s reload
4)客戶端測試
firefox http://192.168.4.5/test.html
curl http://192.168.4.5/test.html
Nginx地址重寫
步驟一:修改配置文件(將頁面www.A.com 重定向到www.B.com)
配置文件路徑 /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name localhost;
rewrite /a.html /b.html [redirect](跳轉地址欄); #要在網頁中的server中添加一個rewute
location / {
root html;
index index.html index.htm;
}
}
echo "AA" > /usr/local/nginx/html/A.html
echo "BB" > /usr/local/nginx/html/B.html
2)從新加載配置文件
/usr/local/nginx/sbin/nginx -s reload
步驟三:修改配置文件(訪問192.168.4.5的請求重定向至www.tmooc.cn)
1) 修改Nginx服務配置
vim /usr/local/nginx/conf/nginx.conf
.. ..
server {
listen 80;
server_name localhost;
rewrite ^/(.*)$ http://www.tmooc.cn/$1; (訪問192.168.4.5/下面子頁面,重定向至www.tmooc.cn/下相同的頁面 能夠誰便寫網站)
location / {
root html;
index index.html index.htm;
# rewrite /a.html /b.html redirect;
}
}
2)從新加載配置文件
/usr/local/nginx/sbin/nginx -s reload
3)客戶端測試
firefox http://192.168.4.5
firefox http://192.168.4.5/test
步驟五:修改配置文件(實現curl和火狐訪問相同連接返回的頁面不一樣)
1) 建立網頁目錄以及對應的頁面文件:
echo "I am Normal page" > /usr/local/nginx/html/test.html
mkdir -p /usr/local/nginx/html/firefox/
echo "firefox page" > /usr/local/nginx/html/firefox/test.htm
2) 修改Nginx服務配置
vim /usr/local/nginx/conf/nginx.conf
.. ..
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
#這裏,~符號表明正則匹配,*符號表明不區分大小寫
if ($http_user_agent ~* firefox) { //識別客戶端firefox瀏覽器
rewrite ^(.*)$ /firefox/$1;
}
}
解析 : $http_user_agent ~* firefox
#判斷瀏覽器是否是火狐 $http_user_agent ~(包含)*(全部)
*******************************************************
5)地址重寫格式【總結】
rewrite 舊地址 新地址 [選項];
last 再也不讀其餘rewrite
break 再也不讀其餘語句,結束請求
redirect 臨時重定向
permament 永久重定向
******************************************************
###########################################
Nginx 反向代理
步驟一
部署模擬兩臺後端WEB服務器
WEB 一
######################################################
yum -y install httpd
echo "192.168.2.100" > /var/www/html/index.html
systemctl restart httpd
firewall-cmd --set-default-zone=trusted
setenforce 0
######################################################
WEB 二
######################################################
yum -y install httpd
echo "192.168.2.100" > /var/www/html/index.html
systemctl restart httpd
firewall-cmd --set-default-zone=trusted
setenforce 0
######################################################
Nginx代理服務器
1)使用yum安裝基礎依賴包
yum -y install gcc openssl-devel pcre-devel
下載Nginx安裝包
源碼編譯
useradd -s /sbin/nologin nginx
tar -xvf nginx-1.12.2.tar.gz tar 解包
cd nginx-1.12.2
[root@proxy nginx-1.12.2]# ./configure 檢測GCC
make && make install #生成程序
3)安裝MariaDB
Mariadb在新版RHEL7光盤中包含有該軟件,配置yum源後能夠直接使用yum安裝:
yum -y install mariadb mariadb-server mariadb-devel
安裝mariadb mariadb-server mariadb-devl
4)php和php-fpm
yum -y install php php-mysql #安裝PHP的拓建包 (mysql服務默認不攜帶)
yum -y install php-fpm #安裝PHP
步驟二:啓動服務
1)啓動Nginx服務(若是已經啓動nginx,則能夠忽略這一步)
這裏須要注意的是,若是服務器上已經啓動了其餘監聽80端口的服務軟件(如httpd),則須要先關閉該服務,不然會出現衝突。
systemctl stop httpd //若是該服務存在則關閉該服務
/usr/local/nginx/sbin/nginx //啓動Nginx服務
netstat -utnlp | grep :80
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 32428/nginx
2)啓動MySQL服務
[root@proxy ~]# systemctl start mariadb //啓動服務器
[root@proxy ~]# systemctl status mariadb //查看服務狀態
[root@proxy ~]# systemctl enable mariadb //設置開機啓動
3)啓動PHP-FPM服務
[root@proxy ~]# systemctl start php-fpm //啓動服務
[root@proxy ~]# systemctl status php-fpm //查看服務狀態
[root@proxy ~]# systemctl enable php-fpm //設置開機啓動
構建LNMP平臺
步驟一: php-fpm配置文件
1)查看php-fpm配置文件 /etc/php-fpm.d/www.conf
vim /etc/php-fpm.d/www.conf
[www]
listen = 127.0.0.1:9000 //PHP端口號
pm.max_children = 32 //最大進程數量
pm.start_servers = 15 //最小進程數量
pm.min_spare_servers = 5 //最少須要幾個空閒着的進程
pm.max_spare_servers = 32 //最多容許幾個進程處於空閒狀態
步驟二:修改Nginx配置文件並啓動服務
vim /usr/local/nginx/conf/nginx.conf
location / {
root html;
index index.php index.html index.htm;
#設置默認首頁爲index.php,當用戶在瀏覽器地址欄中只寫域名或IP,不說訪問什麼頁面時,服務器會把默認首頁index.php返回給用戶
}
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000; #將請求轉發給本機9000端口,PHP解釋器
fastcgi_index index.php;
#fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi.conf; #加載其餘配置文件
}
[root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload
#請先確保nginx是啓動狀態,不然運行該命令會報錯,報錯信息以下:
#[error] open() "/usr/local/nginx/logs/nginx.pid" failed (2: No such file or directory)
步驟二:配置Nginx服務器,添加服務器池,實現反向代理功能
1)修改/usr/local/nginx/conf/nginx.conf配置文件
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
.. ..
http {
.. ..
#使用upstream定義後端服務器集羣,集羣名稱任意(如webserver)
#使用server定義集羣中的具體服務器和端口
upstream webserver {
server 192.168.2.100:80;
server 192.168.2.200:80;
}
.. ..
server {
listen 80;
server_name localhost;
location / {
#經過proxy_pass將用戶的請求轉發給webserver集羣
proxy_pass http://webserver;
}
}
2)從新加載配置
[root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload
#請先確保nginx是啓動狀態,不然運行該命令會報錯,報錯信息以下:
#[error] open() "/usr/local/nginx/logs/nginx.pid" failed (2: No such file or directory)
3)客戶端使用瀏覽器訪問代理服務器測試輪詢效果
[root@client ~]# curl http://192.168.4.5 //使用該命令屢次訪問查看效果
[root@client ~]# curl http://192.168.4.5 //使用該命令屢次訪問查看效果
步驟二:配置upstream服務器集羣池屬性
1)設置失敗次數,超時時間,權重
weight能夠設置後臺服務器的權重,max_fails能夠設置後臺服務器的失敗次數,fail_timeout能夠設置後臺服務器的失敗超時時間。
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
.. ..
http {
.. ..
upstream webserver {
server 192.168.2.100 weight=1 max_fails=1 fail_timeout=30;
server 192.168.2.200 weight=2 max_fails=2 fail_timeout=30;
server 192.168.2.101 down;
}
#weight設置服務器權重值,默認值爲1
#max_fails設置最大失敗次數
#fail_timeout設置失敗超時時間,單位爲秒
#down標記服務器已關機,不參與集羣調度
.. ..
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://webserver;
}
}
2)從新加載配置
[root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload
#請先確保nginx是啓動狀態,不然運行該命令會報錯,報錯信息以下:
#[error] open() "/usr/local/nginx/logs/nginx.pid" failed (2: No such file or directory)
3)關閉一臺後端服務器(如web1)
[root@web1 ~]# systemctl stop httpd
4)客戶端使用瀏覽器訪問代理服務器測試輪詢效果
[root@client ~]# curl http://192.168.4.5 //使用該命令屢次訪問查看效果
5)再次啓動後端服務器的httpd(如web1)
[root@web1 ~]# systemctl start httpd
6)客戶端再次使用瀏覽器訪問代理服務器測試輪詢效果
[root@client ~]# curl http://192.168.4.5 //使用該命令屢次訪問查看效果
步驟三:配置upstream服務器集羣的調度算法
1)設置相同客戶端訪問相同Web服務器
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
.. ..
http {
.. ..
upstream webserver {
#經過ip_hash設置調度規則爲:相同客戶端訪問相同服務器
ip_hash;
server 192.168.2.100 weight=1 max_fails=2 fail_timeout=10;
server 192.168.2.200 weight=2 max_fails=2 fail_timeout=10;
}
.. ..
server {
listen 80;
server_name www.tarena.com;
location / {
proxy_pass http://webserver;
}
}
2)從新加載配置
[root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload
#請先確保nginx是啓動狀態,不然運行該命令會報錯,報錯信息以下:
#[error] open() "/usr/local/nginx/logs/nginx.pid" failed (2: No such file or directory)
3)客戶端使用瀏覽器訪問代理服務器測試輪詢效果
[root@client ~]# curl http://192.168.4.5 //使用該命令屢次訪問查看效果
2 案例2:Nginx的TCP/UDP調度器
2.1 問題
使用Nginx實現TCP/UDP調度器功能,實現以下功能:
後端SSH服務器兩臺
Nginx編譯安裝時須要使用--with-stream,開啓ngx_stream_core_module模塊
Nginx採用輪詢的方式調用後端SSH服務器
2.2 方案
使用4臺RHEL7虛擬機,其中一臺做爲Nginx代理服務器,該服務器須要配置兩塊網卡,IP地址分別爲192.168.4.5和192.168.2.5,兩臺SSH服務器IP地址分別爲192.168.2.100和192.168.2.200。客戶端測試主機IP地址爲192.168.4.10。如圖-2所示。
圖-2
2.3 步驟
實現此案例須要按照以下步驟進行。
步驟一:部署支持4層TCP/UDP代理的Nginx服務器
1)部署nginx服務器
編譯安裝必需要使用--with-stream參數開啓4層代理模塊。
[root@proxy ~]# yum -y install gcc pcre-devel openssl-devel //安裝依賴包
[root@proxy ~]# tar -xf nginx-1.12.2.tar.gz
[root@proxy ~]# cd nginx-1.12.2
[root@proxy nginx-1.12.2]# ./configure \
> --with-http_ssl_module //開啓SSL加密功能
> --with-stream //開啓4層反向代理功能
[root@proxy nginx-1.12.2]# make && make install //編譯並安裝
步驟二:配置Nginx服務器,添加服務器池,實現TCP/UDP反向代理功能
1)修改/usr/local/nginx/conf/nginx.conf配置文件
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
stream {
upstream backend {
server 192.168.2.100:22; //後端SSH服務器的IP和端口
server 192.168.2.200:22;
}
server {
listen 12345; //Nginx監聽的端口
proxy_connect_timeout 1s; //鏈接的超時時間,可選配置
proxy_timeout 3s;
proxy_pass backend;
}
}
http {
.. ..
}
2)從新加載配置
[root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload
#請先確保nginx是啓動狀態,不然運行該命令會報錯,報錯信息以下:
#[error] open() "/usr/local/nginx/logs/nginx.pid" failed (2: No such file or directory)
3)客戶端使用訪問代理服務器測試輪詢效果
[root@client ~]# ssh 192.168.4.5 -p 12345 //使用該命令屢次訪問查看效果
!!!!!!!!!!!!優化!!!!!!!!!!!!!!!!!!
3Nginx常見問題處理
@@ 如何自定義返回給客戶端的404錯誤頁面 @@
修改Nginx配置文件,自定義報錯頁面
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
.. ..
charset utf-8; //僅須要中文時須要改選項,可選項
error_page 404 /404.html; //自定義錯誤頁面
.. ..
[root@proxy ~]# vim /usr/local/nginx/html/404.html //生成錯誤頁面
Oops,No NO no page …
[root@proxy ~]# nginx -s reload
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@ 如何查看服務器狀態信息@@
200 一切正常
301永久重定向
302臨時重定向
401用戶名或密碼錯誤
403 拒絕訪問
404 文件不存在
414 請求URL包頭過長
500 服務器內部錯誤
502 Bad Gateway
步驟二:如何查看服務器狀態信息(很是重要的功能)
1)編譯安裝時使用--with-http_stub_status_module開啓狀態頁面模塊
[root@proxy ~]# tar -zxvf nginx-1.12.2.tar.gz
[root@proxy ~]# cd nginx-1.12.2
[root@proxy nginx-1.12.2]# ./configure \
> --with-http_ssl_module //開啓SSL加密功能
> --with-stream //開啓TCP/UDP代理模塊
> --with-http_stub_status_module //開啓status狀態頁面
[root@proxy nginx-1.12.2]# make && make install //編譯並安裝
2)啓用Nginx服務並查看監聽端口狀態
ss命令能夠查看系統中啓動的端口信息,該命令經常使用選項以下:
-a顯示全部端口的信息
-n以數字格式顯示端口號
-t顯示TCP鏈接的端口
-u顯示UDP鏈接的端口
-l顯示服務正在監聽的端口信息,如httpd啓動後,會一直監聽80端口
-p顯示監聽端口的服務名稱是什麼(也就是程序名稱)
注意:在RHEL7系統中可使用ss命令替代netstat命令,功能同樣,選項同樣
@@@
步驟二:如何查看服務器狀態信息(很是重要的功能)
1)編譯安裝時使用--with-http_stub_status_module開啓狀態頁面模塊
[root@proxy ~]# tar -zxvf nginx-1.12.2.tar.gz
[root@proxy ~]# cd nginx-1.12.2
[root@proxy nginx-1.12.2]# ./configure \
> --with-http_ssl_module //開啓SSL加密功能
> --with-stream //開啓TCP/UDP代理模塊
> --with-http_stub_status_module //開啓status狀態頁面
[root@proxy nginx-1.12.2]# make && make install //編譯並安裝
Active connections:當前活動的鏈接數量。
Accepts:已經接受客戶端的鏈接總數量。
Handled:已經處理客戶端的鏈接總數量。
(通常與accepts一致,除非服務器限制了鏈接數量)。
Requests:客戶端發送的請求數量。
Reading:當前服務器正在讀取客戶端請求頭的數量。
Writing:當前服務器正在寫響應信息的數量。
Waiting:當前多少客戶端在等待服務器的響應。
@@@@
若是客戶端訪問服務器提示「Too many open files」如何解決
步驟三:優化Nginx併發量
1)優化前使用ab高併發測試
[root@proxy ~]# ab -n 2000 -c 2000 http://192.168.4.5/
Benchmarking 192.168.4.5 (be patient)
socket: Too many open files (24) //提示打開文件數量過多
2)修改Nginx配置文件,增長併發量
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
.. ..
worker_processes 2; //與CPU核心數量一致
events {
worker_connections 65535; //每一個worker最大併發鏈接數
}
.. ..
[root@proxy ~]# nginx -s reload
3)優化Linux內核參數(最大文件數量)
[root@proxy ~]# ulimit -a //查看全部屬性值
[root@proxy ~]# ulimit -Hn 100000 //設置硬限制(臨時規則)
[root@proxy ~]# ulimit -Sn 100000 //設置軟限制(臨時規則)
[root@proxy ~]# vim /etc/security/limits.conf
.. ..
* soft nofile 100000
* hard nofile 100000
#該配置文件分4列,分別以下:
#用戶或組 硬限制或軟限制 須要限制的項目 限制的值
4)優化後測試服務器併發量(由於客戶端沒調內核參數,因此在proxy測試)
[root@proxy ~]# ab -n 2000 -c 2000 http://192.168.4.5
步驟四:優化Nginx數據包頭緩存
2)修改Nginx配置文件,增長數據包頭部緩存大小
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
.. ..
http {
client_header_buffer_size 1k; //默認請求包頭信息的緩存
large_client_header_buffers 4 4k; //大請求包頭部信息的緩存個數與容量
.. ..
}
[root@proxy ~]# nginx -s reload
步驟五:瀏覽器本地緩存靜態數據
1)使用Firefox瀏覽器查看緩存
以Firefox瀏覽器爲例,在Firefox地址欄內輸入about:cache將顯示Firefox瀏覽器的緩存信息,如圖-3所示,點擊List Cache Entries能夠查看詳細信息。
圖-3
2)清空firefox本地緩存數據,如圖-4所示。
圖-4
3)修改Nginx配置文件,定義對靜態頁面的緩存時間
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml)$ {
expires 30d; //定義客戶端緩存時間爲30天
}
}
[root@proxy ~]# cp /usr/share/backgrounds/day.jpg /usr/local/nginx/html
[root@proxy ~]# nginx -s reload
#請先確保nginx是啓動狀態,不然運行該命令會報錯,報錯信息以下:
#[error] open() "/usr/local/nginx/logs/nginx.pid" failed (2: No such file or directory)
4)優化後,使用Firefox瀏覽器訪問圖片,再次查看緩存信息
[root@client ~]# firefox http://192.168.4.5/day.jpg
在firefox地址欄內輸入about:cache,查看本地緩存數據,查看是否有圖片以及過時時間是否正確。
步驟六:日誌切割
日誌文件愈來愈大怎麼辦?單個文件10G? 如何切割?(很是常見的面試題)
步驟:1. 把舊的日誌重命名
2. kill USR1 PID(nginx的進程PID號)
1)手動執行
備註:/usr/local/nginx/logs/nginx.pid文件中存放的是nginx的進程PID號。
[root@proxy ~]# mv access.log access2.log
[root@proxy ~]# kill -USR1 $(cat /usr/local/nginx/logs/nginx.pid)
2)自動完成
每週5的03點03分自動執行腳本完成日誌切割工做。
[root@proxy ~]# vim /usr/local/nginx/logbak.sh
#!/bin/bash
date=`date +%Y%m%d`
logpath=/usr/local/nginx/logs
mv $logpath/access.log $logpath/access-$date.log
mv $logpath/error.log $logpath/error-$date.log
kill -USR1 $(cat $logpath/nginx.pid)
[root@proxy ~]# crontab -e
03 03 * * 5 /usr/local/nginx/logbak.sh
步驟七:對頁面進行壓縮處理
1)修改Nginx配置文件
[root@proxy ~]# cat /usr/local/nginx/conf/nginx.conf
http {
.. ..
gzip on; //開啓壓縮
gzip_min_length 1000; //小文件不壓縮
gzip_comp_level 4; //壓縮比率
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
//對特定文件壓縮,類型參考mime.types
.. ..
}
步驟八:服務器內存緩存
1)若是須要處理大量靜態文件,能夠將文件緩存在內存,下次訪問會更快。
http {
open_file_cache max=2000 inactive=20s;
open_file_cache_valid 60s;
open_file_cache_min_uses 5;
open_file_cache_errors off;
//設置服務器最大緩存2000個文件句柄,關閉20秒內無請求的文件句柄
//文件句柄的有效時間是60秒,60秒後過時
//只有訪問次數超過5次會被緩存
}
構建memcached服務
驗證時須要客戶端主機安裝telnet,遠程memcached來驗證服務器的功能:
add name 0 180 10 //變量不存在則添加
set name 0 180 10 //添加或替換變量
replace name 0 180 10 //替換
get name //讀取變量
append name 0 180 10 //向變量中追加數據
delete name //刪除變量
flush_all //清空全部
提示:0表示不壓縮,180爲數據緩存時間,10爲須要存儲的數據字節數量。
步驟一:構建memcached服務
1)使用yum安裝軟件包memcached
[root@proxy ~]# yum -y install memcached
[root@proxy ~]# rpm -qa memcached
memcached-1.4.15-10.el7_3.1.x86_64
2) memcached配置文件(查看便可,不須要修改)
[root@proxy ~]# vim /usr/lib/systemd/system/memcached.service
ExecStart=/usr/bin/memcached -u $USER -p $PORT -m $CACHESIZE -c $MAXCONN $OPTIONS
[root@proxy ~]# vim /etc/sysconfig/memcached
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS=""
使用telnet訪問memcached服務器
1)使用yum安裝telnet
[root@proxy ~]# yum -y install telnet
telnet 192.168.4.5 11211 運行軟件
set name 0 180 3 //定義變量,變量名稱爲name
##提示:0表示不壓縮,180爲數據緩存時間,3爲須要存儲的數據字節數量。
plj //輸入變量的值,值爲plj
get name //獲取變量的值
add myname 0 180 10 //新建,myname不存在則添加,存在則報錯
set myname 0 180 10 //添加或替換變量
replace myname 0 180 10 //替換,若是myname不存在則報錯
get myname //讀取變量
append myname 0 180 10 //向變量中追加數據
delete myname //刪除變量
flush_all //清空全部
quit //退出登陸
LNMP+memcached
PHP安裝memcache擴展
建立PHP頁面,並編寫PHP代碼,實現對memcached的數據操做
步驟一:建立PHP頁面,使用PHP語言測試memcached服務
1)部署測試頁面
建立PHP首頁文檔/usr/local/nginx/html/mem.php,測試頁面能夠參考lnmp_soft/php_scripts/mem.php。
注意:192.168.2.5是memcached數據庫。
vim /usr/local/nginx/html/mem.php
<?php
$memcache=new Memcache; //建立memcache對象
$memcache->connect('192.168.2.5',11211) or die ('could not connect!!');
$memcache->set('key','test'); //定義變量
$get_values=$memcache->get('key'); //獲取變量值
echo $get_values;
?>
爲PHP添加memcache擴展
yum -y install php-pecl-memcache
systemctl restart php-fpm
4)客戶端再次測試(結果會成功顯示數據結果)
firefox http://192.168.2.100/mem.php
PHP實現session共享
爲PHP添加memcache擴展
安裝擴展
yum -y install php-pecl-memcache
2)修改PHP-FPM配置文件,並重啓服務
vim /etc/php-fpm.d/www.conf //修改該配置文件的兩個參數
//文件的最後2行
修改前效果以下:
php_value[session.save_handler] = files
php_value[session.save_path] = /var/lib/php/session
//原始文件,默認定義Sessoin會話信息本地計算機(默認在/var/lib/php/session)
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
修改後效果以下:
php_value[session.save_handler] = memcache
php_value[session.save_path] = "tcp://192.168.2.5:11211"
//定義Session信息存儲在公共的memcached服務器上,主機參數中爲memcache(沒有d)
//經過path參數定義公共的memcached服務器在哪(服務器的IP和端口)
重起服務
systemctl restart php-fpm
步驟三:客戶端測試
客戶端使用瀏覽器訪問兩臺不一樣的Web服務器。
操做步驟參考練習一,最終能夠得到相關的Session ID信息。
安裝部署Tomcat服務器
步驟一:部署Tomcat服務器軟件(192.168.2.100/24)
1)使用RPM安裝JDK環境
[root@web1 ~]# yum -y install java-1.8.0-openjdk //安裝JDK
[root@web1 ~]# yum -y install java-1.8.0-openjdk-headless //安裝JDK
[root@web1 ~]# java -version //查看JAVA版本
-MO9 NH0R46
#############################GIT##############################
git 軟件包
服務器git
基於WEB http gitweb
git 配置文件
vim /usr/lib/systemd/system/git@.service
vim +11 /etc/gitweb.conf
git命令
git status 查看工做區和當前的分支
git add . 將當前的工做上傳緩存區
git commit -m '註釋' 提交到本地廠庫
git branch 對分支進行操做
git reflog 查看版本信息
git checkout 進入分支
git merge 進行合併分支
git push 上傳到服務器
git init 路徑+名字 -bare 建立空倉庫
git --base 路徑+名字 建立倉庫
www.Github.com
#################################################
keepalived 熱備
概述 keepalived高可用集羣
keepalived最初是爲了LVS的,由於LVS沒法進行自動檢測服務器的節點狀態(能夠自動部署LVS)
keeplived後來加入VRRP給功能,還能夠防止單點故障
Keepalives運行
keepalived檢測每一個服務器節點狀態
服務器節點異常出現故障時,keepalived將故障節點從集羣系統中剔除
故障節點恢復後,keepalived再會自動將修復好的節點加入到服務器集羣中
全部故障自動完成,不須要人工干預
keepalived 配置文件
/etc/keepalived/keepalived.conf
state 主服務器爲MASTER,輔助服務器爲BACKUP
priority 100 服務器優先級
interface eth0 指定網絡接口
auth_pass 123 服務器密碼 主服務器和輔服務區必須同樣
keepalived 重啓服務後會自動打開iptables防火牆默認拒絕一切
清空命令
iptabled -F
需查看 ip a s eth0
keepalived 日誌文件
/etc/log/messages
keepalived + lvs
兩臺調度
調度須要添加一個網卡 eth0:0
配置文件 /etc/
兩臺服務器
一臺客戶端
集羣調度對比
nginx
優勢:
工做在七層,能夠針對http作風流策略
1.9版本開始支持4層代理
正則表達式比HAProxy強大
安裝,配置,測試簡單,經過日誌能夠解決多數問題
併發量能夠達到幾萬次
nginx還能夠做爲web服務器使用
缺點
七層代理僅支持http,https,mali協議應用面比較小
監控端口僅經過端口,沒法使用url(網頁)檢查
LVS
優勢
負載能力強大,工做在四層,對內存,cpu消耗低
配置性低,沒有太多的可配置性,減小人爲錯誤
應用面廣,幾乎能夠爲全部的應用提供負載均衡
缺點
不支持正則表達式結構,不能實現靜動態分離
若是網絡結構龐大,LVS_DR配置比較繁瑣
HAPorxy
優勢
支持session,coolie功能
能夠經過url進行負載均衡
效率,負載均衡速度高,高於NGinx,低於LVS
HAProxy支持TCP,能夠對Mysql進行負載均衡
調度算法豐富
缺點
正則弱於nginx
日誌依賴軟件syslogd
javascript