命令行的一般格式
– 命令字 [选项]… [参数1] [参数2]…
• pwd — Print Working Directory
– 用途:查看当前所在的位置
[root@A ~]# cd ~lisi #去往lisi的家目录
[root@A lisi]# pwd
/home/lisit
• cd — Change Directory
– 用途:切换工作目录
格式: cd [目标文件夹位置]
cd ~:表示用户的家目录
cd ~user表示用户到user的家目录
cd ~lisi #去往lisi的家目录
. 表示当前目录
ls — List
– 格式:ls [选项]… [目录或文件名]…
蓝色:目录
黑色:文本文件
• 常用命令选项
– -l: 以长格式显示目录内容的详细属性
– -A: 包括名称以 . 开头的隐藏文档
– -d: 显示目录本身(而不是内容)的属性
– -h: 提供易读的容量单位(K、M等)
– -R : 递归显示
- -Zb : 查看文件的拥有的所有属性
- Z :安全上下文
-Zd 改 上下文工具 (chcon)
一般使用用法:
以长格式显示目录内容的详细属性
[root@localhost /]# ls -l /root
#显示目录本身的详细属性
[root@localhost /]# ls -ld /root
#目录内容详细属性加大小单位
[root@localhost /]# ls -lh /boot/
[root@A ~]# ls -R /opt/aa
- Z :安全上下文
cat
查看文本文件内容
cat -n 按行号显示
cat -n /etc/passwd
1 root❌0:0:root:/root:/bin/bash
用户名:密码占位符:UID:基本组GID:用户描述信息:家目录:解释器程序
cat -n a.txt b.txt >c.txt #把a b 的内容加上行号输入到c(可以不存在的文件会自动创建)中
cat /dev/null > /a.txt #清空a.txt内容
cat << EOF >/etc/a.txt (内容) EOF #EOF是“end of file”表示文本结束符 也可以使用其他符合如:<<EO EO结束
例: [root@node1 ~]# cat <a.txt
abc
EOF
[root@node1 ~]# cat a.txt
abc
脚本创建yum源
cat <<EOF >/etc/yum.repos.d/rhel.repo
[rhel]
name=rhel7
baseurl=ftp://localhost/rhel7
enabled=1
gpgcheck=0
EOF
mkdir
创建空目录
• mkdir — Make Directory
– 格式:mkdir [-p] [/路径/]目录名…
mkdir -p /vod/movie/cartoon #创建多层目录
[root@A /]# mkdir /root/nsd01 /mnt/nsd02
touch
– 用途:新建空文件
– 格式:touch 文件名
[root@A /]# touch /opt/1.txt
[root@A /]# ls /opt/
1.txt abc rh
[root@A /]# cat /opt/1.txt
rm
删除 — Remove
格式:rm [选项]… 文件或目录…
黄金组合 :rm -rf
• 常用命令选项
– -r、-f:递归删除(含目录)、强制删除
[root@A ~]# rm -rf /opt/*
mv
移动/重命名 • mv — Move
– 格式:mv 原文件… 目标路径
[root@A ~]# mv /opt/2.txt /opt/nsd01
重命名:路径不变的移动
[root@A ~]# mv /opt/nsd01 /opt/student
[root@A ~]# mv /opt/test/ /opt/abc
cp
复制• cp — Copy
– 格式:cp [选项]… 原文件… 目标路径
• 常用命令选项
– -r:复制目录时必须有此选项
-p 不改变文件属性的拷贝
[root@A ~]# cp -r /boot/ /opt/ #把/boot/复制到/opt/
[root@A ~]# cp /etc/redhat-release /opt/
复制支持两个以上的参数,
永远把最后一个参数作为目标,其他参数全部作为源
cp /etc/shells /etc/shadow /etc/group /opt/
ls /opt/
复制的时候,可以重新命名,目标路径下文档的名字
[root@A /]# cp /etc/redhat-release /mnt/a
# cp -r /home /mnt/redhat
#将home目录,复制到/mnt下命名为redhat
# cp -r /home /mnt/redhat
#将home目录,复制到/mnt/redhat/ 路径下
less
分屏阅读工具
• 格式:less [选项] 文件名…
– 优势:支持前后翻页• 基本交互操作
– 按 / 键向后查找(n、N切换)
按键盘上 q键 #退出
diff
逐行比较 (修复补丁的工具)(仅仅提示)
选项: -u 输出统一内容的头部信息(打补丁使用)
-r 递归对比目录中的所有资源(可以对比目录
-a 所有文件视为文本(包括二进制程序)
-N 无文件视为空文件
diff -u test1.sh test2.sh
patch
打补丁
安装包 : patch
(可以给文件或在目录打补丁)
- 准备环境,生成补丁文件
有脚本 1 和 2
diff -Nua 1 2 >3.patch
对于旧版本的代码,使用补丁即可更新,而不需要下载完成的新代码
-p0 整个路径不变
-p1 修改路径为u/howard/src/blurfl/blurfl.c
-p4 修改路径为blurfl/blurfl.c
-R (reverse) 反向修复 卸载补丁,
-E 修改后如果文件为空,则删除该文件
patch -p0 < 3.patch
patch -RE < 3.patch #还原旧版本,反向修复
• head tail
– 格式: head -n 数字 文件名
tail -n 数字 文件名
默认为前10行 和 后10行
显示/etc/passwd文件内容的8~12行
[root@A ~]# head -12 /etc/passwd | tail -5
grep
– 用途:输出包含指定字符串的行
– 格式:grep ‘查找字符串’ 目标文件
[root@server0 ~]# grep nsd01 /etc/passwd
-v 取反
-i 忽略大小写
grep -v root /etc/passwd #包含root的行
[root@server0 ~]# grep -i ROOT /etc/passwd
find
查找文件
– 常用条件表示:
-type 类型 ( f文件、d目录、l快捷方式)
-name “文档名称”
-size +|-文件大小(k、M、G)
-user 用户名
-iname “文档名称” 忽略大小写根据名称查找,
-maxdepth 限制目录查找的深度(最大层数)
-mtime 文件修改日期
– find … … -exec ; // 要以" \ " 结尾
[root@server0 ~]# find /boot/ -type l #查找快捷方式
[root@server0 ~]# find /boot/ -type d #查找是目录
[root@s ~]# find /boot/ -name “vm*” #以vm开头
[root@s ~]# find /boot/ -name “vm*” #以vm结尾
[root@server0 ~]# find /root/ -name “nsd*” -type d
[root@server0 ~]# find /boot/ -size +10M #以大小
[root@server0 ~]# find / -user student #以用户名
[root@server0 ~]# find /etc/ -iname “PASSWD”
find /etc/ -maxdepth 2 -name “*.conf” 两层目录找
[root@s~]# find /var/log/ -mtime +10 #10天之前的文档
[root@s ~]# find /var/log/ -mtime -2 #最近2天之内的文档
• 使用find命令的 -exec 操作
– find … … -exec 处理命令 {} \ ;
– 优势:以 {} 代替每一个结果,逐个处理,遇 ; 结束
find /boot/ -size +10M -exec cp {} /opt \ ;
find /etc -name “*tab” -exec cp {} /opt \ ;
找出所有用户 student 拥有的文件 ,把它们拷贝到 /root/findfiles/ 文件夹中
find / -user student -type f -exec cp {} /root/findfiles/ \ ;
vim (文本编辑器)
命令模式 : Home 键 或 ^、数字 0 跳转到行首
End 键 或“$”键 跳转到行尾
1G 或 gg 跳转到文件的首行
G 跳转到文件的末尾行
复制 yy、5yy 复制光标处的一行、复制5行
粘贴 p、P (大写) 粘贴到光标处之后、之前
x 或 Delete键 删除光标处的单个字符
dd、#dd 删除光标处的一行、#行
d^ 从光标处之前删除至行首
d$ 从光标处删除到行尾
插入模式 :
按 i 进入编辑 ,按 o 换行进入编辑 按 c 删除光标之后内容进入编辑 (按Esc回到命令模式)
末行模式: :wq 保存并退出
:q! 强制不保存退出
:wq!强制保存退出
ZZ 保存退出 (shift+zz)
插入文本
:r /etc/filesystems 读入其他文件内容
:r /etc/passwd #读入/etc/passwd到当前文件中
字符串替换
:s/root/abc 替换当前行第一个“root”
:s/root/abc/g 替换当前行所有的“root”
:1,10 s/root/abc/g 替换第1-10行所有的“root”
:% s/root/abc/g 替换文件内所有的“root
开关参数的控制(显示行号)
:set nu|nonu 显示/不显示行号
:set ai|noai 启用/关闭自动缩进
awk
awk -F: '{print $1}' /etc/passwd
awk -F"[:/]" '{print $1,$10}' /etc/passwd
awk -f: '{pirnt $1, "的解释器:" $7}'/etc/passwd 打印常量一定要用“”号
awk '{print $NF}' /etc/passwd
free |awk '{print $4}'
$0 表示当前行
$1 第一列
$2第二列
$3 第三列
NF 文件当前行的列数
NR 文件当前行的行号
文件内容对齐命令
column -t
tab 补全键
安装包:bash-completion
cron
周期性计划任务
软件包:cronie、crontabs系统服务:crond 日志文件:/var/log/crond
• 使用 crontab 命令
– 编辑:crontab -e [-u 用户名]
– 查看:crontab -l [-u 用户名]
– 清除:crontab -r [-u 用户名]
# crontab -e -u root #编写root计划任务
* * * * * date >> /opt/time.txt
# crontab -l -u root #查看root计划任务
# cat /opt/time.txt #检测结果
##################################################
mount (umount)卸载挂载
–格式: mount 设备路径 挂载点目录
挂载操作:让目录成为设备的访问点
在系统中显示光盘的内容
挂载尽量自己创建目录进行挂载
Linux:光盘ISO镜像文件------>光驱设备-------->访问点(目录) /dev/cdrom
查看Linux的光驱设备
[root@A /]# ls /dev/cdrom
#挂载到/dvd
[root@A ~]# mount /dev/cdrom /dvd
[root@s ~]# mount /dev/vdb1 /part1
[root@A ~]# umount /dvd #卸载该挂载点的设备
开机自动挂载
配置文件 /etc/fstab 的记录格式
设备路径 挂载点 类型 参数 备份标记 检测顺序
/dev/vdb1 /part1 ext4 defaults 0 0
ssh
远程管理的命令:
-x #可以查看远程图形
ssh [-选项] 用户名@服务器的IP地址
[root@room9pc01 ~]# ssh root@172.25.0.11
[root@room9pc01 ~]# ssh root@172.25.0.10
[root@room9pc01 ~]# ssh -X ro
ot@172.25.0.11
Ctrl+Shift+t: 开启一个新的终端
加 -X 在远程管理时,本地运行对方的图形程序
[root@room9pc01 ~]# vim /root/.bashrc #设置别名
alias goa='ssh -X root@192.168.4.7'
[root@server0 ~]# exit #退出远程管理登出
ssh -i /root/id_rsa.pem (密钥对公钥) root@192.168.4.2 #密钥对登录
非对称钥匙对
ssh-keygen -f /root/.ssh/id_rsa -N '' #生成免钥匙命令非交互式
ssh-copy-id 192.168.4.50 #发送给ip
ssh-add 本机添加
su (substitute User)
切换用户身份
格式 用法1: su - 目标用户 (加上 - 是连家目录一起切换,如果不加 - 切换用户之后家目录默认是原来用户的家目录)
用法2: su - -c “命令” 目标用户
例: whoami
su - tom -c "mkdir /home/tom/nihao"
sudo
提升执行权限
这个要管理员预先为用户设置执行许可
被授权用户有权执行授权的命令,验证口令
格式 用法1: sudo 特权命令
用法2: sudo -u 目标用户 特权命令
-l 查看自己的sudo授权(为小写字母l)
例:sudo -l
sudo -u student mkdir /mnt/a
ls -ld /mnt/a 验证所有者是谁
配置sudo授权
修改方法 :visudo
配置文件也可以: vim /etc/sudoers
授权记录格式
-用户 主机列表=命令列表
grep ^root /etc/sudoers
root ALL=(ALL) ALL
可以是%组名 目标身份,省略时表示root
例:允许Tom 以root权限执行/sbin/下的所有命令
,但是,禁止修改eth0网卡的参数
[root@node1 ~]# visudo
-----很多内容
插入
Tom localhost,svr1=/sbin/*,!/sbin/ifconfig etho
例2
wheel组的用户无需验证可执行所有命令
[root@node1 ~]# visudo
、、、
%wheel ALL=(ALL) NOPASSWD:ALL
rsync (Remote Sync)
远程同步
支持本地复制,或与其他ssh、rsync主机同步
命令用法:
rsync 选项 源目录 目标目录 (本地)
rsync 选项 user@host(ip):远程目标/
例: rsync -a /boot /todir #同步整个目录
rsync -a /boot/ /todir/ #只同步目录下数据
rsync操作选项
-n :测试同步过程,不做实际修改
--delete :删除目标文件夹内多余的文档
-a : 归档模式,相当于 -rlptgoD
-v : 显示详细操作信息
-z : 传输过程中启用压缩/解压
-r :递归,包括目录/子目录所有文件
-l :保留符号链接文件 -p -t 保留文件的权限、时间标志
-o 、-g :保留文件的属主/属组标记
-D :保留设备文件及其他特殊文件
rsync+ssh 同步
下行:rsync 选项 user@host:远程目录 本地目录
上行:rsync 选项 本地目录 user@host:远程目录
例:将远程主机的/boot/ 目录备份到本地
rsync root@192.168.4.7:/boot/ /tmp/
例:将本地的/etc 目录备份到远程主机
du -sh /etc/
rsync -az /etc root@192.168.4.7:/opt/
ping
ping 选项 ip
-c 包个数
-n 大小
-W 超时
-i 时间间隔
-s 包大小
ping测试时间,可以只发送3个测试包(-c 3)、缩短发送测试包的间隔秒数(-i 0.2)、等待反馈的超时秒数(-W 1)。比如,检查可ping通的主机:
ping -c 3 -i 0.2 -W 1 $1 &> /dev/null
netstat
netstat命令可以查看系统中启动的端口信息,该命令常用选项如下:
-a显示所有端口的信息
-n以数字格式显示端口号
-t显示TCP连接的端口
-u显示UDP连接的端口
-l显示服务正在监听的端口信息,如httpd启动后,会一直监听80端口
-p显示监听端口的服务名称是什么(也就是程序名称)
[root@node1 ~]# netstat -anptu | grep memcached
#netstat -anptu |
ss
(和netstat功能一样)
ss命令可以查看系统中启动的端口信息,该命令常用选项如下:
-a显示所有端口的信息
-n以数字格式显示端口号
-t显示TCP连接的端口
-u显示UDP连接的端口
-l显示服务正在监听的端口信息,如httpd启动后,会一直监听80端口
-p显示监听端口的服务名称是什么(也就是程序名称)
例 1:[root@node1 ~]# netstat -nutlpa | grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
11957/nginx: master
例 2 :[root@node1 ]# ss -nutlpa | grep nginx
tcp LISTEN 0 128 *:80 *:* users:(("nginx",pid=23078,fd=6),("nginx",pid=11957,fd=6))
alias
[别名名称] (unalias)取消别名
• 定义新的别名(临时)
– alias 别名名称= '实际执行的命令行'
[root@A ~]# alias hn='hostname' #定义别名
[root@A ~]# alias #查看当前有效别名
设置永久的别名
/root/.bashrc #只对当前用户有效
/etc/bashrc #对所有用户有效
• 取消已设置的别名
– unalias [别名名称] #临时取消别名
unalias rht
wget
下载
通过命令在命令行实现下载:默认下载到当前路径下
下载到当前位置
wget http://classroom.example.com/content/rhel7.0/x86_64/dvd/Packages/
下载到指定的位置并改名
wget -Oo /root/a http://classroom.example.com/
rpm
传统的安装软件包的命令
– rpm -q 软件名... #查询软件包是否安装
– rpm -ivh 软件名-版本信息.rpm... #安装包
– rpm -e 软件名... #卸载
# rpm -q firefox #查询软件包是否安装
# rpm -ql vsftpd #查询软件包安装的内容
# rpm -ivh /root/vs(tab) #安装
# rpm -e vsftpd #卸载
# rpm -qa #查看系统安装了什么软件
# rpm -qa |grep httpd
#rpm -qa |wc -l
Yum (yum remove 名)#卸载
自动解决依赖关系,安装软件
服务:为客户端自动解决依赖关系,安装软件
配置路径及名称:/etc/yum.repos.d/*.repo
错误的文件会影响正确文件
[root@server0 ~]# rm -rf /etc/yum.repos.d/*
一般情况下不要删除新建一个目录把移动过去
[root@server0 ~]# vim /etc/yum.repos.d/nsd.repo
[rhel7] #仓库的标识,随意写不要出现空格
name=rhel7.0 #仓库的描述信息,随意写
baseurl=http://classroom.ex #指定服务端位置
enabled=1 #是否启用本文件
gpgcheck=0 #是否检测软件包红帽签名
[root@server0 ~]# yum clean all #清空Yum所有缓存
让客户端重新读取配置文件
yum repolist 检测yum仓库
[root@server0 ~]# yum remove 软件名 #卸载
• 快速建立repo配置文件
– yum-config-manager --add-repo 软件仓库地址
###############################################
四 为虚拟机A与虚拟机B搭建Yum仓库
服务端:虚拟机A
1.搭建FTP服务 2.共享光盘所有内容
1)图形将光盘内容,放入虚拟光驱中
[root@svr7 ~]# mount /dev/cdrom /mnt/
mount: /dev/sr0 写保护,将以只读方式挂载
[root@svr7 ~]# ls /mnt/
2)安装vsftpd软件包
# ls /mnt/Packages/vsftpd-3.0.2-22.el7.x86_64.rpm
# rpm -ivh /mnt/Packages/vsftpd-3.0.2-22.el7.x86_64.rpm
# rpm -q vsftpd
3)利用FTP共享光盘所有内容,默认共享路径下/var/ftp
[root@svr7 ~]# mkdir /var/ftp/rhel7
[root@svr7 ~]# ls /var/ftp/rhel7
[root@svr7 ~]# cp -r /mnt/* /var/ftp/rhel7/
4)重起vsftpd服务验证:
[root@svr7 ~]# systemctl restart vsftpd
[root@svr7 ~]# systemctl enable vsftpd
[root@svr7 ~]# firefox ftp://192.168.4.7/rhel7
客户端:虚拟机B
[root@pc207 ~]# vim /etc/yum.repos.d/rhel7.repo
[rhel7]
name=rhel7
baseurl=ftp://192.168.4.7/rhel7
enabled=1
gpgcheck=0
[root@pc207 ~]# yum repolist
自定义yum
createrepo
createrepo --update /tools/other #更新自定义yum
生成仓库数据文件
[root@svr7 ~]# createrepo /tools/other #生成自定义仓库
[root@svr7 ~]# ls /tools/other/
书写yum客户端配置文件
[root@svr7 ~]# vim /etc/yum.repos.d/rhel7.repo
.......
[myrpm]
name=myrpm
baseurl=file:///tools/other #指定本地路径
enabled=1
gpgcheck=0
##############################################
useradd (usermod)(userdel)
添加用户
– useradd [选项]... 用户名
用户基本信息存放在 /etc/passwd 文件
• 常用命令选项
– -u 用户id、-d 家目录路径、-G 附加组、-s 登录Shell
root:x:0:0:root:/root:/bin/bash
用户名:密码占位符:UID:基本组GID:用户描述信息:家目录:解释器程序
[root@ser~]# useradd nsd01
[root@ser~]# id nsd01 #查看用户基本信息
[root@ser~]# useradd -u 1500 nsd04 #指定UID
[root@ser~]# useradd -d /mnt/nsd06 nsd06#指定家
[root@server0 ~]# useradd -G tarena nsd07 #指定附加组
-s 登录Shell(登陆的解释器程序)
/sbin/nologin :禁止用户登陆操作系统 /bin/login 默认
[root@server0 ~]# useradd -s /sbin/nologin nsd08
[root@server0 ~]# usermod -s /bin/login nsd08
[root@server0 ~]# usermod #修改已存在用户的属性
usermod
– usermod [选项]... 用户名
#修改已存在用户的属性
– -u 用户id、-d 家目录路径、-G 附加组、-s 登录Shell
[root@A ~]# usermod -u 1600 -d /opt/nsd11 -s /sbin/nologin -G tarena nsd11
userdel
删除用户
– userdel [-r] 用户名
-r: 连同家目录一并删除
– userdel 用户名 #仅删除用户信息
passwd
设置登录密码
格式 :– passwd [用户名] (这种是交互式)
echo '密码' | passwd --stdin 用户名 (非交互式修改密码)
-l 锁定用户账号(是小写字母l不是1)
例:passwd -l student #锁定用户student的密码
-u 解锁
例: passwd -u student #解锁student的密码
-S 看密码状态
例: passwd -S student #查看student目前密码的状态
用户密码信息存放在 /etc/shadow 文件
#交互式设置密码
[root@A ~]# passwd nsd01
非交互式设置密码
[root@A ~]# echo 123456 | passwd --stdin nsd01
[root@A ~]# useradd harry
[root@A ~]# echo redhat | passwd --stdin harry
强制定期修改密码
配置文件为 /etc/login.defs
对新建用户有效
主要控制属性
-PASS_MAX_DAYS
-PASS_MIN_DAYS
-PASS_WARN_AGE
groupadd
添加组
– groupadd [-g 组ID] 组名
[root@server0 ~]# groupadd tarena #创建组
gpasswd
管理组成员
– gpasswd -a 用户名 组名
– gpasswd -d 用户名 组名
[root@A ~]# gpasswd -a natasha stugrp
[root@A ~]# gpasswd -d natasha stugrp
groupdel
删除组
– groupdel 组名
在Linux系统中创建一个用户,会由那些文件改变内容?
/etc/passwd /etc/shadow
/etc/group /etc/gshadow
权限和归属
基本权限的类别
–r 读取: 允许查看内容-read
–w 写入: 允许修改内容-write
–x 可执行: 允许运行和cd切换-execute
基本权限 r=4 w=2 x=1
– 附加权限:SUID = 4,SGID = 2,Sticky Bit = 1
功能
读取 r : cat less head tail
写入 w : vim 可以保存退出 重定向 > >>
可执行 x : 学习Shell脚本
权限适用对象(归属):
– u 所有者:拥有此文件/目录的用户-user
– g 所属组:拥有此文件/目录的组-group
– o 其他用户:除所有者、所属组以外的用户other
所有者>所属组>其他人
权限的数值表示
• 权限的数值化
– 基本权限:r = 4,w = 2,x = 1
– 附加权限:SUID = 4,SGID = 2,Sticky Bit = 1
• 采用数值形式设置权限
– chmod [-R] nnn 文档...
– chmod [-R] xnnn 文档..
chmod
设置基本权限 常见提示:权限不足 Permission denied
– chmod [-R] 归属关系+-=权限类别 文档..
[-R]:递归设置权限
[root@server0 ~]# chmod u-w /nsd01 所有者-w
[root@server0 ~]# chmod o=rwx /nsd01
t=1 u=7 g=7 o=0
[root@server0 ~]# chmod 1770 /nsd01
以root用户新建/nsddir/目录,在此目录下新建readme.txt文件
并进一步完成下列操作
1)使用户lisi能够在此目录下创建子目录 切换用户 su - lisi
chmod o+w /nsddir/
2)使用户lisi不能够在此目录下创建子目录
chmod o-w /nsddir/
3)使用户lisi能够修改readme.txt文件
chmod o+w /nsddir/readme.txt
4)调整此目录的权限,使所有用户都不能cd进入此目录
chmod u-x,g-x,o-x /nsddir/
5)为此目录及其下所有文档设置权限 rwxr-x---
chmod -R u=rwx,g=rx,o=--- /nsddir/
chown
设置文档归属
– chown 属主 文档...
– chown :属组 文档...
– chown 属主:属组 文档...
[root@server0 /]# chown lisi:tarena /nsd03
[root@server0 /]# chown zhangsan /nsd03
[root@server0 /]# chown :root /nsd03
利用root用户新建/nsd06目录,并进一步完成下列操作
1)将属主设为gelin01,属组设为tarena组
[root@server0 /]# useradd gelin01
[root@server0 /]# groupadd tarena
[root@server0 /]# chown gelin01:tarena /nsd06
2)使用户gelin01对此目录具有rwx权限
除属主与属组之外的人,对此目录无任何权限
[root@server0 /]# chmod o=--- /nsd06
3)使用户gelin02能进入、查看此目录
[root@server0 /]# gpasswd -a gelin02 tarena
4)将gelin01加入tarena组, 将nsd06目录的权限设为rw-r-x---
再测试gelin01用户能否进入此目录
[root@server0 /]# chmod u=rw,g=rx /nsd06
chage 设置账号有效期
-d 0 强制初次登录修改密码(是零不是O)
例:chage -d 0 student
-E yyyy-mm-dd 指定失效日期
chage -E 2017-12-31 lizhigui
-l 查看
chage -l student
chcon (复制模版)
-t 指定访问类型
-R 递归修改
一般移动的文件,原有的上下文属性不变
复制的文件,自动继承目标位置的上下文
例:ls -Z /var/ftp/rt.txt
-rw-r--r-- root root system_u:object_r:admin_home_t:s0
chcon -t public_content_t /var/ftp/rt.txt
restorecon
重置安全上下文
例: restorecon /var/ftp/rt.txt
方式1:参照标准目录,重设新目录的属性
– chcon [-R] --reference=模板目录 新目录
# chcon -R --reference=/var/www/ /webroot
[root@server0 ~]# ls -Zd /var/www/
[root@server0 ~]# ls -Zd /webroot/
附加权限(特殊权限)
Set GID:附加在属组的 x 位,属组的权限上标识会变为 s
Set UID:附加在所有者的 x 位,权限上标识会变为 s
Sticky Bit(粘滞位)
• 附加在其他人的 x 位上
– 其他人的权限标识会变为 t
– 适用于开放 w 权限的目录,可以阻止用户滥用 w 写入
权限(禁止操作别人的文档)
[root@server0 /]# chmod g+s /nsd07 #设置set GID权限
[root@server0 ~]# chmod u+s /usr/bin/hahach
不管什么用户都可以在此目录中拥有root权限
[root@server0 ~]# chmod o+t /home/public
chattr 和 lsattr
锁定/解锁保护文件
用法:" + " "- " " = "
属性i:内容不可变 (immutable)
属性a:内容仅可追加 (append only)
例:chattr +i /etc/hosts #文件这样就不能修改了,修改就会说权限不够
chattr +a /etc/hosts #这样可以追加
chattr -a /etc/hosts 去除
lsattr /etc/hosts # 查看文件是否有特殊权限
ACL
命令
setfacl 设置acl
getfacl 查看acl
acl访问控制列表(ACL策略 ACL权限)
– 能够对个别用户、个别组设置独立的权限
– 大多数挂载的EXT3/4、XFS文件系统默认已支持
# setfacl -m u:lisi:rx /nsd09 #为lisi设置ACL策略
-m:modify修改 u: 用户
实现一个用户lisi可以读取文件redhat.txt内容,请问入如何设置权限,你有几种方法?
第一:利用其他人进行配置
chmod o+r redhat.txt
第二:利用所属组进行配置
将lisi加入到redhat.txt所属组中
chmod g+r redhat.txt
第三:利用所有者进行配置
chown lisi redhat.txt
chmod u+r redhat.txt
第四:利用ACL进行配置
setfacl -m u:lisi:r redhat.txt
• 使用 getfacl、setfacl 命令
– getfacl 文档... 查看acl策略
– setfacl [-R] -m u:用户名:权限类别 文档...
– setfacl [-R] -m g:组名:权限类别 文档...
– setfacl [-R] -x u:用户名: 文档...#删除指定的ACL策略
– setfacl [-R] -b 文档... #删除所有的ACL策略
ACL策略设置黑名单
[root@server0 /]# setfacl -m u:zhangsan:--- /nsd11
[root@server0 /]# getfacl /nsd1
>
重定向操作
:将前面命令的输出结果写入到文本文件中
> : 覆盖重定向
>>:追加重定向
[root@server0 ~]# hostname > /opt/ls.txt
[root@server0 ~]# hostname >> /opt/ls.txt
[root@A ~]# echo A.tedu.cn > /etc/hostname
[root@A ~]# cat -n /etc/passwd | head -12 | tail -5 > /opt/1.txt
|
管道操作:
将前面命令的输出结果,交由后面命令再处理一遍,作为后面命令的参数
[root@A ~]# head -12 /etc/passwd | tail -5
[root@A ~]# cat -n /etc/passwd | head -12 | tail -5 > /opt/1.txt
tar
备份与恢复
压缩与解压缩源文件均不会消失 归档及压缩: 1.减小占用的空间 2.将零散的文件归成一个压缩包
Linux独有压缩格式及命令工具:
gzip---> .gz
bzip2---> .bz2
xz---> .xz
归档及压缩的格式:
tar 选项 /路径/归档压缩之后的名字 被归档压缩源文档.
解包:
tar 选项 /路径/压缩包 -C 释放路径
– -c:创建归档
– -x:释放归档
– -f:指定归档文件名称
– -C:指定释放的位置
– -t:查看tar包中文件清单
–-z、-j、-J:调用 .gz、.bz2、.xz 格式的工具进行处理
# tar -zcf /opt/file.tar.gz /home/ /etc/passwd
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
使用 tar 工具完成以下备份任务:
– 创建一个名为 /root/backup.tar.bz2 的归档文件
– 其中包含 /usr/local 目录中的内容
– tar 归档必须使用 bzip2 进行压缩
# tar -jcf /root/backup.tar.bz2 /usr/local/
# ls /root/
查看包内容/解包:
[root@A ~]# tar -tf /opt/abc.tar.xz #查看包内容 [root@A ~]# tar -xf /opt/file.tar.gz -C /mnt/ #解包
zip/unzip压缩与解压缩:
制作zip压缩包:zip [-r] 备份文件.zip 被归档的文档...
释放zip压缩包:unzip 备份文件.zip [-d 目标文件夹]
history
历史命令
• 管理/调用曾经执行过的命令
– history :查看历史命令列表
– history -c :清空历史命令
– !n :执行命令历史中的第n条命令
– !str :执行最近一次以str开头的历史命令
• 调整历史命令的数量
[root@svr7 ~]# vim /etc/profile
du
统计文件的占用空间
– du [选项]... [目录或文件]...
– -s:只统计每个参数所占用的总空间大小
– -h:提供易读容量单位(K、M等)
[root@svr7 /]# du -sh /root/ /etc/
[root@server0 ~]# du -h /var/spool/anacron
12K /var/spool/anacron
date
查看/调整系统日期时间
[root@server0 ~]# date +%F
2018-11-13
[root@svr7 /]# date +%Y #显示年份
[root@svr7 /]# date +%m #显示月份
[root@svr7 /]# date +%Y-%m-%d #显示 年-月-日
[root@svr7 /]# date +%H:%M #显示 时与分
date -s "yyyy-mm-dd HH:MM:SS" #更改时间
ln 创建软连接
– ln -s 原始文件或目录 软连接文件
若原始文件或目录被删除,连接文件将失效
软连接可存放在不同分区/文件系统
制作快捷方式:
[root@svr7 /]# ln -s /路径/源文件 /路径/快捷方式
[root@svr7 /]# cat /etc/redhat-release
[root@svr7 /]# ln -s /etc/redhat-release /opt/test
[root@svr7 opt]# ln -s /opt/A /opt/B #制作软连接
[root@svr7 opt]# ls /opt/
• ln,创建硬连接
– 硬连接 --> i节点 --> 文档数据
– ln 原始文件 硬连接文件
若原始文件被删除,连接文件仍可用
硬连接与原始文件必须在同一分区/文件系统
[root@svr7 opt]# ln /opt/A /opt/C #制作硬连接
curl
测试服务器页面
curl -o /etc/yum.repos.d/centos.alyun.repo http://mirrors.aliyun.com/Centos7-repo 或者
wget -O 的功能一样
[root@client ~]# curl http://192.168.4.5
###################################################################
快速创建虚拟机
真机:
[root@room9pc01 ~]# ls /usr/local/bin/clone-vm7/usr/local/bin/clone-vm7
clone-vm7
[root@room9pc01 ~]# clone-vm7 #快速产生新的虚拟机rhel7.4
Enter VM number: 9
clone-auto7
[root@room9pc01 ~]# clone-auto7
number of vms: 2 快速产生两台虚拟机
virsh console C
虚拟机不需要配置IP地址
利用 virsh console 虚拟机名 可以直接链接
localhost login: Ctrl + ] #回到真机
1.搭建虚拟机C服务端
要求:配置永久主机名svr8.tedu.cn
配置eth0永久 IP地址:192.168.4.8/24
使用真机ftp服务器作为Yum源
#####################################################
NTP
时间同步
NTP网络时间协议
• Network Time Protocol
– NTP服务器为客户机提供标准时间
– NTP客户机需要与NTP服务器保持沟通
1.安装chrony软件,寻找NTP服务端进行沟通
[root@A ~]# yum -y install chrony
2.修改配置文件/etc/chrony.conf
[root@A ~]# vim /etc/chrony.conf
以#开头的行代表注释
#server 0.rhel.pool.ntp.org iburst
#server 1.rhel.pool.ntp.org iburst
#server 2.rhel.pool.ntp.org iburst
server classroom.example.com iburst
3.重起程序(重起服务)
daemon:超级守护程序
# systemctl restart chronyd #重起服务
# systemctl enable chronyd #设置开机自起
4.验证
[root@A ~]# date #查看时间
2018年 10月 09日 星期二 17:44:38 CST
LDAP
LDAP认证:作用:实现网络用户认证,用户集中管理
LDAP服务器:提供用户名,及密码认证
客户端:
1.安装软件sssd,与LDAP服务端沟通
[root@server0 /]# yum -y install sssd
2.安装图形的工具authconfig-gtk,配置sssd软件
[root@server0 ~]# yum -y install authconfig-gtk
3.运行图形的工具
[root@server0 ~]# authconfig-gtk
选择LDAP
dc=example,dc=com #指定服务端域名
classroom.example.com #指定服务端主机名
勾选TLS加密 使用证书加密:http://classroom.example.com/pub/example-ca.crt
4.重起服务
[root@server0 ~]# systemctl restart sssd
[root@server0 ~]# systemctl enable sssd
5.验证:
[root@serv ~]# grep ldapuser0 /etc/passwd
[root@serv ~]# id ldapuser0#识别LDAP服务器上用户
NFS
家目录漫游
• Network File System,网络文件系统
– 由NFS服务器将指定的文件夹共享给客户机
– 客户机将此共享目录 mount 到本地目录,访问此共享 类似于 EXT4、XFS等类型,只不过资源在网上
• 查看NFS资源
– showmount -e [服务器地址]
[root@s ~]# showmount -e classroom.example.com
• 挂载NFS共享目录
– mount 服务器地址:目录路径 本地挂载点
mount classroom.example.com:/home/guests /mnt
#将共享挂载到本地目录/home/guests
mount classroom.example.com:/home/guests /home/guests
配置NFS共享
(服务端:) 只读NFS共享的实现
1.安装软件包
[root@server0 /]# yum -y install nfs-utils
2.创建共享目录发布共享
[root@server0 /]# mkdir /public
3.修改 /etc/exports
– 文件夹路径 客户机地址(权限) 客户机地址(权限) … …
[root@server0 /]# vim /etc/exports
/public *(ro)
3.重起nfs-server服务
[root@server0 /]# systemctl restart nfs-server
[root@server0 /]# systemctl enable nfs-server
客户端:
查看NFS资源
– showmount -e [服务器地址]
[root@desktop0 ~]# showmount -e 172.25.0.11
挂载NFS共享目录
[root@desktop0 /]# mkdir /mnt/nfs
– mount 服务器地址:目录路径 本地挂载点
[root@desktop0 /]# vim /etc/fstab
172.25.0.11:/public /mnt/nfs nfs defaults,_netdev 0 0
[root@desktop0 /]# mount -a
[root@desktop0 /]# df -h
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
########################################################################################
分区的规划
MBR分区模式 (此模式支持最大空间 2.2T)
三种分区类型: 主分区 扩展分区 逻辑分区
3个主分区, 1个扩展分区, N个逻辑分区
理论上最多4个主分区
fdisk
创建新的分区
[root@server0 ~]# fdisk /dev/vdb
n 创建新的分区—>回车—>回车–>回车—>在last结束时 +2G
p 查看分区表
n 创建新的分区–>回车—>回车—>回车—>在last结束时 +1G
d 删除分区
w 保存并退出
q 不保存并退出
l 查看分区情况
lsblk
#查看划分的分区信息
[root@server0 ~]# lsblk #查看划分的分区信息
mkfs
#格式化分区,赋予文件系统
mkfs.ext4 #格式化成ext4
mkfs.xfs #格式化成xfs
root@server0 ~]# mkfs.ext4 /dev/vdb1 #格式化成ext4
[root@server0 ~]# mkfs.xfs /dev/vdb2 #格式化成xfs
df -h
#查看正在挂载分区的使用情况
[root@server0 ~]# df -h #查看正在挂载分区的使用情况
mount -a
刷新检测自动挂载
[root@server0 ~]# mount -a
partprobe #刷新所有分区
######################################################
总结:
1.识别硬盘 lsblk
2.分区 fdisk
3.刷新所有分区 partprobe
4.进行格式化 mkfs.ext4 mkfs.xfs blkid(查看文件系统)
5.挂载使用 mount —> df -h (查看是否挂载成功)
6.书写配置文件/etc/fstab —> mount -a(测试)
######################################################
vgcreate lvcreate
(创建卷组)(创建逻辑卷)
创建卷组命令格式: vgcreate 卷组名 设备路径
创建卷组指定大小: vgcreate -s 大小 卷组名 设备路径
创建逻辑卷命令格式: lvcreate -L 逻辑卷的大小 -n 逻辑卷的名称 设备路径
建逻辑卷指定PE个数 lvcreate -l PE个数 -n 逻辑卷名 卷组名
卷组划分空间的单位: PE 默认 4M
vgcreate systemvg /dev/vdc[1-2] #创建卷组
lvcreate -L 16G -n mylv systemvg #创建逻辑卷
[root@server0 ~]# pvs #查看物理卷信息
[root@server0 ~]# vgs #查看卷组信息
[root@server0 ~]# lvs #查看逻辑卷信息
[root@server0 ~]# vgdisplay #显示卷组详细信息
- 基于刚建立的 2000MiB 分区构建新的 LVM 存储–
-新的逻辑卷命名为 database,大小为50个物理扩展单元(Physical Extent),属于 datastore 卷组
– 在 datastore 卷组中的所有逻辑卷,其物理扩展单元(Physical Extent)的大小为16MiB
– 使用 EXT3 文件系统对逻辑卷 database 格式化,此逻辑卷应该在开机时自动挂载到 /mnt/database 目录
逻辑卷删除
创建:先创建物理卷,再创建卷组,最后创建逻辑卷
删除:先删除逻辑卷,在删除卷组,最后删除物理卷
###########################################################
vgextend lvextend
扩展卷组 扩展逻辑卷
查看卷组有没有足够的剩余空间
[root@server0 ~]# lvs
[root@server0 ~]# vgs
1.卷组有足够的剩余空间,直接扩展逻辑卷的空间
[root@server0 ~]# lvextend -L 18G /dev/systemvg/mylv
A:文件系统的扩大
resize2fs :刷新ext4文件系统
xfs_growfs :刷新xfs文件系统
[root@server0 ~]# resize2fs /dev/systemvg/mylv
2.卷组没有足够的剩余空间
A:首先扩展卷组
[root@server0 ~]# vgextend systemvg /dev/vdc3
B:直接扩展逻辑卷的空间
[root@server0 ~]# lvextend -L 25G /dev/systemvg/mylv
C:文件系统的扩大
[root@server0 ~]# df -h
[root@server0 ~]# resize2fs /dev/systemvg/mylv
逻辑卷也可以减小
ext4文件系统支持减小 xfs文件系统不支持减小
vgchange (指定划分空间大小)
-s #大小
请创建一个大小为250M的逻辑卷redhat.
vgchange -s 1M systemvg #修改PE的大小
lvcreate -L 250M -n redhat systemvg
swap 交换分区
什么是交换空间
• 相当于虚拟内存
– 当物理内存不够用时,使用磁盘空间来模拟内存
– 在一定程度上缓解内存不足的问题
– 交换分区:以空闲分区充当的交换空间
创建交换分区
1.格式化交换文件系统
[root@server0 ~]# mkswap /dev/vdb1
[root@server0 ~]# blkid /dev/vdb1
2.启用交换分区
[root@server0 ~]# swapon /dev/vdb1
[root@server0 ~]# swapon -s #查看交换分区组成信息
3.停用交换分区
[root@server0 ~]# swapoff /dev/vdb2
[root@server0 ~]# swapon -s
4.实现开机自动启用交换分区
[root@server0 ~]# vim /etc/fstab
/dev/vdb1 swap swap defaults 0 0
[root@server0 ~]# swapon -a #专用于检测swap分区
[root@server0 ~]# swapon -s
NMAP (nmap) 网络探测工具
安装包:nmap
-sS tcp syn扫描(半开)
-sT tcp 连接扫描(全开)
-sU udp扫描
-sP ICMP扫描
-A 目标系统全面分析
例: nmap www.baidu.com
nmap 192.168.4.1
网络抓包工具(tcpdump)
格式: tcpdump 选项 过滤条件
-i 指定监控的网络接口
-A 转换维ACSII码,
-w 将数据包信息保存到指定文件
-r 从指定文件读取数据包信息
过滤的条件:类型:host net port protrange
方向:src(本地文件路径) dst(远程机器路径)
协议:tcp udp ip wlan arp 、、、
多个条件组合:and or not
例: tcpdump -A -w ftp.cap host 192.168.4.1 and prot 21 #抓包 主机21端口
tcpdump -A -r ftp.cap |egrep ‘(User|PASS)’ #分析抓包里面内容
arp -n 查看 mac地址
route -n 查看 路由表
设置默认网关
systemctl stop NetwrokManager
route add default gw 192.168.4.254
nm-connection-editor 图形配置ip
nmcli connection modify eth0 ipv4.method manual ipv4.addresses 192.168.4.1/24
connection.autoconnect yes
ip a 查看ip
iptables
包过滤防火墙
安装包:iptables-services
用法:
iptables -t 表名 [选项] 链名 条件 -j [目标操作]
默认为 filter表 不指定链就为所有链
选项--------------------------------------------------------
选项(插入):-A 在链的末尾追加一条规则
-I 在链的开头(或指定序号)插入规则
例:iptables -t filter -I INPUT -p icmp -j REJECT(-p 协议名或协议号)
选项(查看):-L (查看)列出所有的规则条目
-n 以数字形式显示地址、端口等信息
–line-numbers 查看规则时,显示规则的序号
例:iptables -nL INPUT
iptables -L INPUT --line-numbers
选项 (删除) -D 删除链内指定序号
-F 清空所有的规则
例: iptables -D INPUT 3
iptables -F
iptables -t nat -F
默认策略 -P 为指定的链设置默认规则
例:iptables -t filter -P INPUT DROP (设置input默认值)
———————————————————————————
4表 5链 (四个表、五种规则链)
规则链之间的
入站:PREROUTING -->INPUT
出站:OUTPUT–>POSTROUTING
转发:PREROUTING --> FORWARD ->POSTROUING
raw(状态跟踪表) :prerouting output
mangle(包标记表) :prerouting postrouting
output input forward
nat(地址转换表) :prerouting postrouting
output
filter(过滤表) :input output forward
[目标操作]
:ACCEPT 允许通过/放行
:DROP 直接丢弃,不给出任何回应
:REJECT 拒绝通过,必要时会给出提示
:LOG 记录日志,然后传给下一条规则 (匹配即停止 规律的唯一例外)
条件
协议匹配 -p 协议名
通过匹配 地址匹配 -s 源地址、-d 目标地址
接口匹配 -i 收数据的网卡、 -o发数据的网卡
端口匹配 --sport源端口 --dport 目标端口 隐含匹配 ICMP类型匹配 --icmp-type icmp类型
需要取反条件时,用叹号!
-m 扩展模块 --扩展条件 条件值
mac地址匹配 -m mac --mac-source mac地址
扩展匹配 -m multiport --sport源端口列表
多端口匹配
-m multiport --dport目标端口列表
ip范围匹配 -m iprange --src-range ip1-ip2
-m iprange --dst-range ip1-ip2
==============================================================================================
开启内核的ip转发
- 作为网关、路由的必要条件
echo ‘net.ipv4.ip_forward=1’ >>/etc/sysctl.conf 或者
echo 1 >/proc/sys/net/ipv4/ip_forward
echo “1” > /proc/sys/net/ipv4/ip_forward //开启路由转发
封禁ip地址/网段
1.主机防护 、针对入站访问的源地址
例:iptables -A INPUT -s 192.168.4.120 -j DROP
iptables -A INPUT -s 10.10.10.0/24 -j DROP
2.网络防护、针对转发访问的源地址
例:iptables -A FORWARD -s 192.168.0.0/16 -j DROP
3.保护特定网络服务 (限制对指定服务端口的访问)
例:iptables -A INPUT -S 192.168.4.0/24 -p tcp --dport 22 -j ACCEPT (或者DROP) #允许远程22端口访问192.168.4.0网段
4.禁止ping相关策略处理(允许本机ping其他主机、但禁止其他主机ping本机)
例:iptables -A INPUT -p icmp --icmp-type echo-request -j DROP(ACCEPT)
iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT(DROP)
5.根据mac地址封锁主机
iptables -A INPUT -m mac --mac-source 00:0c:29:74:BE:21 -j DROP
6.开放多个端口
iptables -A INPUT -p tcp -m multiport --dports 20:22,25,80,110,143,1650,:16800 -j ACCEPT
7.配置SNAT (共享上网)
局域网段 :192.168.4.0/24
外网接口 tcp 80
外网接口的ip :192.168.2.5
iptables -t nat -A POSTROUTING -s 192.168.4.0/24 -p tcp --dport 80 -j SNAT --to-soure 192.168.2.5
8.地址伪装策略
共享动态公网ip地址实现上网
主要针对不固定ip 将SNAT 改为 MASQUERADE
对于ADSL宽带拨号连接,网络接口可写为ppp+
iptables -t nat -A POSTROUTING -s 192.168.4.0/24 -O eth1 -j SNAT -to-source 192.168.2.5 (可改为 -j MASQUERADE伪装)
team
聚合连接
获取配置team聚合连接的用法帮助 ——man nmcli-examples
config ‘{“runner”: {“name”: “activebackup”}}’ //可以通过man teamd.conf查找 在所有的帮助中查找:/example 按G到末行
链路聚合的优势:
team 聚合连接(也称为链路聚合):
由多块网卡(team-slave)一起组建而成的虚拟网卡,即组队。
作用1:轮询式的流量负载均衡
作用2:热备份连接冗余
实现链路聚合的条件:
2块或2块以上的物理网卡
步骤如下:
1.创建虚拟网卡team0 【为聚合连接提供配置(类型,连接名,运行器,IP地址)】
[root@server0 ~]# nmcli connection add type team con-name team0 ifname team0 autoconnect yes config ‘{“runner”: {“name”: “activebackup”}}’
解释 numcli connection 添加 类型 team 配置文件名称 team0 ifconfig显示的名字为team0 每次开机自动启动配置 热备份方式
2.添加成员【为成员网卡提供配置(类型,连接名,主连接)】
[root@server0 ~]# nmcli connection add type team-slave con-name team0-1 ifname eth1 master team0
[root@server0 ~]# nmcli connection add type team-slave con-name team0-2 ifname eth2 master team0
3.配置IP地址
[root@server0 ~]# nmcli connection modify team0 ipv4.method manual ipv4.addresses 192.168.1.1/24 connection.autoconnect yes
4.激活 【分别激活聚合连接,成语连接】
[root@server0 ~]# nmcli connection up team0
[root@server0 ~]# nmcli connection up team0-1
[root@server0 ~]# nmcli connection up team0-2
5.验证查看【检查聚合连接状态】
[root@server0 ~]# teamdctl team0 state
[root@server0 ~]# ifconfig eth1 down
[root@server0 ~]# teamdctl team0 state
#################################################################
Shell 脚本
什么是脚本:可以执行的一个文本文件,可以实现某种功能
将回显功能关闭(stty -echo),
将回显功能恢复(stty echo)
案例1:书写一个shell ,在屏幕输出hello world
vim /root/hello.sh
echo hello world
ls -l /root/hello.sh
chmod +x /root/hello.sh #赋予执行权限
/root/hello.sh
bc
小数运算工具
交互式运算
[root@svr5 ~]# bc
非交互式
[root@svr5 ~]# echo ‘scale=4;12.34/5.678’ | bc
2.1733
expr
整数运算工具
1)使用expr命令
乘法操作应采用 * 转义
[root@node1 ~]# expr 12 + 15
27
[
]
或
[]或
[]或(())
算式替换
乘法操作*无需转义,运算符两侧可以无空格;引用变量可省略 $ 符号;计算结果替换表达式本身,可结合echo命令输出
[root@node1 ~]# echo
[
89
+
12
]
101
l
e
t
e
x
p
r
或
[89+12] 101 let expr或
[89+12]101letexpr或[]、$(())方式只进行运算,并不会改变变量的值;而let命令可以直接对变量值做运算再保存新的值。因此变量X=1234,在执行let运算后的值会变更;另外,let运算操作并不显示结果,但是可以结合echo命令来查看:
shell脚本的元素
规范Shell脚本的一般组成
• #! 环境声明,下面的代码用哪一个程序来解释
• # 注释文本
• 可执行代码
变
量
名
•
基
本
格
式
–
引
用
变
量
值
:
变量名 • 基本格式 – 引用变量值:
变量名•基本格式–引用变量值:变量名
– 查看变量值:echo $变量名、echo ${变量名}
变量名=储存的值 使用变量储存的值 $变量名
– 变量名只能由字母/数字/下划线组成,区分大小写
– 变量名不能以数字开头,不要使用关键字和特殊字符
[root@server0 ~]# echo $a7 #输出为空,会将a7作为整体
[root@server0 ~]# echo ${a}7
重定向输出
> :只收集前面命令的正确信息
2> :只收集前面命令的错误信息
&> :收集前面命令的错误信息与正确信息
cat /etc /opt/1.txt > /opt/a.txt #只收集正确信息
cat /etc /opt/1.txt 2> /opt/a.txt #只收集错误信息
cat /etc /opt/1.txt &> /opt/a.txt #正确错误都收集 read -p ‘屏幕输出信息’
黑洞设备 :/dev/null
单引 ’ ’ :取消所有特殊字符含义
案例2:书写一个创建用户的脚本,并设置密码
#!/bin/bash
read -p ‘请输入您要创建的用户名:’ a
useradd KaTeX parse error: Expected 'EOF', got '&' at position 5: a &̲> /dev/null e…a创建成功
echo 123 | passwd --stdin KaTeX parse error: Expected 'EOF', got '&' at position 3: a &̲> /dev/null ec…a密码设置成功
$( )或 反撇号
将命令的输出,作为参数参与下一个命令执行
%F 完整日期格式,等价于 年-月-日
[root@server0 opt]# mkdir $(date +%F)
环境变量 USER=永远储存当前登陆的用户名
[root@server0 opt]# echo $USER #环境变量
root
[root@node1 ~]# echo $USER $HOME $SHELL $UID
root /root /bin/bash 0
env
3)查看系统变量
使用env可查看所有环境变量:
[root@svr5 src]# env
set
使用set可查看所有变量(包括env能看到的环境变量):
位置变量 bash内置,存储执行脚本时提供的命令行参数(非交互) 系统定义赋值完成,用户直接使用即可
[root@server0 /]# vim /root/1.sh #位置变量
#!/bin/bash
echo $1 echo $2 echo $3
预定义变量 bash内置,可直接调用的特殊值,不能直接修改
系统定义赋值完成,用户直接使用即可
$# 已加载的位置变量的个数
$* 所有位置变量的值
$? 程序退出后的状态值,0表示正常,其他值异常
echo
#!/bin/bash
echo $0 //脚本的名称
echo $1 //第一个参数
echo $2 //第二个参数
echo $* //所有参数
echo $# //所有的综合输入几个
echo $$ //当前进程的进程号
echo $? //上一个程序的返回状态码 //查看结果0为对,非0为错
!= 比较两个字符串是否不相同
#!/bin/bash
echo $1 echo $2 echo $3
echo $# #统计一共输入了几个命令行参数
echo $* #输出所有的命令行参数
[root@server0 /]# cat /etc/
cat: /etc/: 是一个目录
[root@server0 /]# echo $?
1
条件测试判断 –[ 测试表达式 ]
0 零为真 其他数字为假
检查文件状态
-e:文档存在为真 exist
-e 判断对象是否存在(不管是目录还是文件)
-d:文档存在,且必须为目录才为真 directory
-d 判断对象是否为目录(存在且是目录)
-f:文档存在,且必须为文件才为真 file
-f 判断对象是否为文件(存在且是文件)
-r:文档存在,且必须对其有读取权限才为真 read
-r 判断对象是否可读
-w:文档存在,且必须对其有写入权限才为真 write
-w 判断对象是否可写
-x:文档存在,且必须对其有执行权限才为真 execute
-x 判断对象是否具有可执行权限
-z 检查变量的值是否未设置(空值)
-n 可以测试变量是否不为空(相当于 ! -z)
&&,逻辑与
||,逻辑或
A && B //仅当A命令执行成功,才执行B命令
A || B //仅当A命令执行失败,才执行B命令
A ; B //执行A命令后执行B命令,两者没有逻辑关系
A && B || C
[root@server0 /]# [ -e /etc ]
[root@server0 /]# echo $?
0
[root@server0 /]# [ -d /etc/passwd ]
[root@server0 /]# echo $?
1
比较整数大小
-gt:大于 greater than
-ge:大于等于 great or equal
-eq:等于 equal
-ne:不等于 not equal
-lt:小于 less than
-le:小于等于 less or equal
[root@svr5 ~]# [ $A -gt 10 ] //不支持小数比较
[root@svr5 ~]# [ $X -gt 10 ] && echo “大于” || echo “否”
大于
[root@server0 /]# [ 1 -gt 1 ]
[root@server0 /]# echo $?
1
• 字符串比对
== :两个字符串一致为真
!= :两个字符串不一致为真
[root@server0 /]# [ redhat == CentOS ]
[root@server0 /]# echo $?
1
[root@server0 /]# [ root == $USER ]
[root@server0 /]# echo $?
0
if
双分支处理
if [条件测试];then
命令序列xx
else
命令序列yy
fi
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
if 多分支处理
if [条件测试1];then
命令序列xx
命令序列bb
elif [条件测试2];then
命令序列yy
elif [条件测试3];then
命令序列aa
......
else
命令序列zz
fi
案例:
利用read 读取用户输入的成绩.
如果成绩 大于等于90,则输出 优秀
如果成绩 大于等于80,则输出 良好
如果成绩 大于等于70,则输出 一般
如果成绩 大于等于60,则输出 合格
以上条件均不满足,则输出 一首凉凉送给你!
[root@server0 /]# vim /root/if02.sh
#!/bin/bash
read -p '请输入您的成绩:' num
if [ $num -ge 90 ];then
echo 优秀
elif [ $num -ge 80 ];then
echo 良好
elif [ $num -ge 70 ];then
echo 一般
elif [ $num -ge 60 ];then
echo 合格
else
echo '一首凉凉送给你!'
fi
for循环
for循环处理
• 遍历/列表式循环
– 根据变量的不同取值,重复执行xx处理
for 变量名 in 值列表 do 命令 done
for i in {1..5} do echo $i done
for i in `seq 5` do echo $i done
for i in `cat /a.txt` do echo $i done
造数机制: {起始值..结束值}
{1..10}: 1到10 所有的数字
{20..38}: 20到38所有的数字
案例4:编写一个判断脚本
在 server0 上创建 /root/foo.sh 脚本
1)当运行/root/foo.sh redhat,输出为fedora
2)当运行/root/foo.sh fedora,输出为redhat
3)当没有任何参数或者参数不是 redhat 或者fedora时,
其错误输出产生以下信息: /root/foo.sh redhat|fedora
[root@server0 ~]# vim /root/foo.sh
#!/bin/bash
if [ $# -eq 0 ];then #判断用户是否输入参数
echo '/root/foo.sh redhat|fedora' >&2 #变成错误输出
exit 1 #程序退出返回值为1
elif [ $1 == redhat ];then
echo fedora
elif [ $1 == fedora ];then
echo redhat
else
echo '/root/foo.sh redhat|fedora' >&2 #变成错误输出
exit 2 #程序退出返回值为2
fi
echo -e "\033[32mOK\033[0m"
3X为字体颜色,4X为背景颜色
while
循环的条件一般通过变量来进行控制,在循环体内对变量值做相应改变,以便在适当的时候退出,避免陷入死循环
while 格式
1. while 条件测试 do 命令序列 done
2.while : do 命令序列 done
[root@svr5 ~]# vim while01.sh
#!/bin/bash
i=1
while [ $i -le 5 ]
do
echo "$i"
done
case
格式:
case 变量 in
模式1)
命令序列1 ;;
模式2)
命令序列2 ;;
.. ..
*)
默认命令序列
esac
例:
#!/bin/bash
case $1 in
redhat)
echo "fedora";;
fedora)
echo "redhat";;
*) //默认输出脚本用法
echo "用法: $0 {redhat|fedora}"
esac
fork 炸弹
Shell版本的fork炸弹
[root@svr5 ~]# vim test.sh
#!/bin/bash
.(){
.|.&
}
.
中断及退出
通过
break、
continue、
exit
在Shell脚本中实现中断与退出的功能。
break可以结束整个循环;continue结束本次循环,进入下一次循环;exit结束整个脚本,案例如下:
1)编写脚本文件
注意:要求打印所有6的倍数的平方值,也就是非6的倍数都跳过!!!
[root@svr5 ~]# vim test.sh
#!/bin/bash
for i in {1..20}
do
[ $[i%6] -ne 0 ] && continue
echo $[i*i]
done
[root@svr5 ~]# chmod +x test.sh
[root@svr5 ~]# ./test.sh
字符串截取及切割
子串截取的三种用法:
${变量名:起始位置:长度} (默认从0开始)
expr substr "$变量名" 起始位置 长度 (从1开始)
echo $变量名 | cut -b 起始位置-结束位置 (从第1个字符开始(编号也是从1开始)
子串替换的两种用法:
只替换第一个匹配结果:${变量名/old/new}
替换全部匹配结果:${变量名//old/new}
例:将phone字符串中的所有8都替换为X:
[root@svr5 ~]# echo ${phone//8/X}
137XX76XX97
字符串掐头去尾:
从左向右,最短匹配删除:${变量名#*关键词}
删除从左侧第1个字符到最近的关键词“:”的部分,* 作通配符理解:
[root@svr5 ~]# echo ${A#*:}
x:0:0:root:/root:/bin/bash
从左向右,最长匹配删除:${变量名##*关键词}
删除从左侧第1个字符到最远的关键词“:”的部分:
[root@svr5 ~]# echo ${A##*:}
从右向左,最短匹配删除:${变量名%关键词*}
删除从右侧最后1个字符到往左最近的关键词“:”的部分,* 做通配符理解:
echo ${A%:*}
从右向左,最长匹配删除:${变量名%%关键词*}
删除从右侧最后1个字符到往左最远的关键词“:”的部分:
[root@svr5 ~]# echo ${A%%:*}
正则表达式 表-1 基本正则列表
echo ${变量} 只输出变量
echo ${变量::} 截取
echo ${变量///} 替换
echo ${变量#*:} 删除从头部开始
echo ${变量%:*} 去尾
echo ${变量:-1234} 变量初始值,当变量没有初始值会输出1234
数组
定义数组 x={11 12 13 14} 或 x【0】=11 x【1】=12 x【2】=13 x【3】=14
echo ${x[0]} 11
sed
用法1: 前置命令 | sed [选项] '条件指令'
用法2: sed [选项] '条件指令' 文件.. ..
指令可以是增、删、改、查等指令
sed命令的常用选项如下:
-n(屏蔽默认输出,默认sed会输出读取文档的全部内容)
-r(让sed支持扩展正则)
-i(sed直接修改源文件,默认sed只是通过内存临时修改文件,源文件无影响)
1)sed命令的 -n 选项
执行p打印等过滤操作时,希望看到的是符合条件的文本。但不使用任何选项时,默认会将原始文本一并输出,从而干扰过滤效果。比如,尝试用sed输出/etc/hosts的第1行:
sed命令的p、d、s等常见操作
p(打印) print
d(删除) delete
s(替换) substitution
sed工具的多行文本处理操作:
i (insert) : 在指定的行之前插入文本
a (append) :在指定的行之后追加文本
c (change) :替换指定的行
r w H G
r /a.txt 读入 w / a.txt 保存到a.txt
##############################
总结知识点:
#sed [选项] '条件指令' 文件
选项:
-n 屏蔽默认输出
-r 支持扩展正则
-i 修改源文件
条件:
行号 4 4,5 4~2 (4开始每隔2行) 4,+10
/正则/
指令:
p 打印
d 删除
s 替换s/旧/新/g
a 追加 后
i 插入 前
c 替换行
p
[root@svr5 ~]# sed -n 'p' a.txt //输出所有行,等同于cat a.txt
[root@svr5 ~]# sed -n '4p' a.txt //输出第4行
[root@svr5 ~]# sed -n '4,7p' a.txt //输出第4~7行
[root@svr5 ~]# sed -n '4,+10p' a.txt //输出第4行及其后的10行内容
[root@svr5 ~]# sed -n '/^bin/p' a.txt //输出以bin开头的行
[root@svr5 ~]# sed -n '$=' a.txt //输出文件的行数
2)下面看看sed工具的d指令案例集锦(自己提前生成一个a.txt文件)
[root@svr5 ~]# sed '3,5d' a.txt //删除第3~5行
[root@svr5 ~]# sed '/xml/d' a.txt //删除所有包含xml的行
[root@svr5 ~]# sed '/xml/!d' a.txt //删除不包含xml的行,!符号表示取反
[root@svr5 ~]# sed '/^install/d' a.txt //删除以install开头的行
[root@svr5 ~]# sed '$d' a.txt //删除文件的最后一行
[root@svr5 ~]# sed '/^$/d' a.txt //删除所有空行
)下面看看sed工具的s指令案例集锦(自己提前生成一个a.txt文件)
注意:替换操作的分隔“/”可改用其他字符,如#、&等,便于修改文件路径
[root@svr5 ~]# sed 's/xml/XML/' a.txt //将每行中第一个xml替换为XML
[root@svr5 ~]# sed 's/xml/XML/3' a.txt //将每行中的第3个xml替换为XML
[root@svr5 ~]# sed 's/xml/XML/g' a.txt //将所有的xml都替换为XML
[root@svr5 ~]# sed 's/xml//g' a.txt //将所有的xml都删除(替换为空串)
[root@svr5 ~]# sed 's#/bin/bash#/sbin/sh#' a.txt //将/bin/bash替换为/sbin/sh
[root@svr5 ~]# sed '4,7s/^/#/' a.txt //将第4~7行注释掉(行首加#号)
[root@svr5 ~]# sed 's/^#an/an/' a.txt //解除以#an开头的行的注释(去除行首的#号)
################################################################
SELinux
一套增强Linux系统安全的强制访问控制体系
• SELinux的运行模式
– enforcing(强制)、permissive(宽松)
– disabled(彻底禁用)
-a 使用 getsebool 查看 可列出所有布尔值
例:getsebool -a |grep samba
-P 加 P 永久 更改‘ 重启一样有效
临时配置
setenforce :设置selinux的运行模式 参数(0 或 1 )
getenforce : #查看当前SELinux状态
[root@server0 ~]# setenforce 1 #设置当前SELinux状态为 enforcing
[root@server0 ~]# getenforce #查看当前SELinux状态
[root@server0 ~]# setenforce 0 #设置当前SELinux状态为 permissive
永久配置
固定配置:/etc/selinux/config 文件
[root@server0 ~]# vim /etc/selinux/config
SELINUX=permissive
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
防火墙
作用: 隔离 过滤
硬件防火墙:一般保护的一个网络所有主机
软件防火墙:一般保护本机
管理工具:firewall-cmd(命令)、firewall-config(图形)
预设安全区域:
– public:仅允许访问本机的sshd dhcp ping少数几个服务
– trusted:允许任何访问
– block:拒绝任何来访请求(明确拒绝)
– drop:丢弃任何来访的数据包(非明确拒绝,直接丢弃,节省资源)
配置永久防火墙模式:vim /etc/firewalld/firewalld.conf
DefaultZone=public
# firewall-cmd --get-default-zone #查看默认区域
# firewall-cmd --set-default-zone=block #修改默认区域为block (临时)
# firewall-cmd --reload #重新加载防火墙所有配置文件规则
# firewall-cmd --zone=public --list-all #列出所有public区域的服务
永久防火墙策略
parmanent (添加永久防火墙策略) add
(添加端口或服务加--permanent 为永久设置)
# firewall-cmd --zone=public --add-service=ftp
# firewall-cmd --permanent --zone=public --add-service=ftp
# firewall-cmd --permanent --zone=public --add-service=httpd
临时删除 remove
# firewall-cmd --zone=public --remove-service=http
永久删除(删除配置文件中规则)
# firewall-cmd --permanent --zone=public --remove-service=http
在区域添加源IP地址
加入到block区域中 (明确拒绝端口172.25.0.10访问本机)
# firewall-cmd --zone=block --add-source=172.25.0.10
# firewall-cmd --permanent --zone=block --add-source=172.25.0.10
端口转发 (例:5423 >> 80)
端口重定向(端口1 --> 端口2)
– 从客户机访问 端口1 的请求,自动映射到本机 端口2
#firewall-cmd --permanent --zone=trusted --add-forward-port=port=5423:proto=tcp:toport=80
互联网常见的协议
http:超文本传输协议 :80
https:安全超文本传输协议 :443
FTP:文件传输协议 : 21
ssh 22
DNS:域名解析协议 : 53
telnet:远程管理协议 23
tftp:简单文件传输协议 : 69
SMTP:邮件协议(用户发邮件):25
pop3:邮件协议(用户收邮件):110
snmp:网络管理协议 :161
ISCSI 网络磁盘 :3260
NTP 网络时间同步协议 :123
NFS(TCP/UDP 2049)、RPC(TCP/UDP 111)
SMB samba (TCP 139)、CIFS(TCP 445)
nginx 80
mysql 3306
tomcat 8005 8009 8080
php 9000
##############################################################################################################
Web (软件httpd)
端口:http =80 https=443
主配置文件:/etc/httpd/conf/httpd.conf
调用文件 : /etc/httpd/conf.d/ *conf (一般使用调用配置文件)
静态网站的运行 >> •服务端的原始网页 = 浏览器访问到的网页
– 由Web服务软件处理所有请求
– 文本(txt/html)、图片(jpg/png)等静态资源
动态网站的运行 >>• 服务端的原始网页 ≠ 浏览器访问到的网页
– 由Web服务软件接受请求,动态程序转后端模块处理
– PHP网页、Python网页、JSP网页......
Web通信基本概念
基于 B/S (Browser/Server)架构的网页服务
• Hyper Text Markup Language(HTML),超文本标记语言
• Hyper Text Transfer Protocol(HTTP),超文本传输协议
– Listen:监听地址:端口(80)
– ServerName:本站点注册的DNS名称(空缺)
– DocumentRoot:网页根目录(/var/www/html)
– DirectoryIndex:起始页/首页文件名(index.html)
搭建普通web服务
防火墙 环境设置为trusted
1.安装httpd(Apache)软件包(服务端软件)
[root@server0 ~]# yum -y install httpd
2.书写一个页面文件
默认存放网页文件的路径: /var/www/html
默认网页文件的名字: index.html(访问显示的页面)
[root@server0 ~]# vim /var/www/html/index.html
<marquee><font color=red><h1>NSD1809 阳光明媚
滚动 字体颜色为红色 最大字体
3. 重起httpd服务
[root@server0 ~]# systemctl restart httpd
[root@server0 ~]# systemctl enable httpd
4.本机测试
[root@server0 ~]# firefox 172.25.0.11
案例3:在原网站创建子目录内容访问
在 Web 网站 http://server0.example.com 的
DocumentRoot 目录下创建一个名为 private 的子目录,要求如下:
1.查看 server0.example.com 的DocumentRoot 目录
# cat /etc/httpd/conf.d/nsd01.conf
2.创建目录,写入页面文件
# mkdir /var/www/myweb/private
# echo '<h1> wo shi private' > /var/www/myweb/private/index.html
3.在虚拟机server与虚拟机desktop上 访问测试
firefox server0.example.com/private
4.从 server0 上,任何人都可以浏览 private的内容,
但是从其他系统不能访问这个目录的内容
[root@server0 ~]# vim /etc/httpd/conf/httpd.conf
[root@server0 ~]# vim /etc/httpd/conf.d/nsd02.conf
<Directory "/var/www/myweb/private">
Require ip 172.25.0.11 [::1]/128 127.0.0.0/8 #仅本机可访问
</Directory>
[root@server0 ~]# systemctl restart httpd
5.在虚拟机desktop0进行验证:
[root@desktop0 ~]#firefox server0.example.com/private
Forbidden
You don't have permission to access /private on this server.
#################################################################
虚拟Web主机
– 由同一台服务器提供多个不同的Web站点
• 区分方式
– 基于域名的虚拟主机
– 基于端口的虚拟主机
– 基于IP地址的虚拟主机
– 基于域名的虚拟主机
<VirtualHost IP地址:端口>
ServerName 此站点的DNS名称
DocumentRoot 此站点的网页根目录
</VirtualHost>
• 配置文件路径
– /etc/httpd/conf/httpd.conf 主配置文件
– /etc/httpd/conf.d/*.conf 调用配置文件
# mkdir /var/www/qq /var/www/baidu
# echo '<h1>企鹅' > /var/www/qq/index.html
# echo '<h1>百度' > /var/www/baidu/index.html
# vim /etc/httpd/conf.d/nsd01.conf
<VirtualHost *:80> #所有IP地址开放80端口
ServerName www0.example.com #指定网站名称
DocumentRoot /var/www/qq #指定网页文件存放路径
</VirtualHost>
<VirtualHost *:80>
ServerName webapp0.example.com
DocumentRoot /var/www/baidu
</VirtualHost>
<VirtualHost *:80>
ServerName server0.example.com
DocumentRoot /var/www/myweb
</VirtualHost>
# systemctl restart httpd
网页内容访问限制客户机地址
• 使用 <Directory> 配置区段
– 每个文件夹自动继承其父目录的访问权限
– 除非针对子目录有明确设置
<Directory 目录的绝对路径>
.. ..
Require all denied|granted
Require ip IP或网段地址 .. ..
</Directory>
<Directory /var/www/html>
Require all denied | granted #拒绝所有 | 允许所有
Require ip 172.25.0.10 #仅允许172.25.0.10进行访问
</Directory>
#############################################################
安全的Web的构建 (软件:httpd mod_ssl )
• Public Key Infrastructure,公钥基础设施
– 公钥:主要用来加密数据
– 私钥:主要用来解密数据(与相应的公钥匹配)
– 数字证书:证明拥有者的合法性/权威性(单位名称、有效期、公钥、颁发机构及签名、......)
– Certificate Authority,数字证书授权中心:负责证书的申请/审核/颁发/鉴定/撤销等管理工作
1.部署网站证书(营业执照)
# cd /etc/pki/tls/certs/ #默认存放网站证书路径
# wget http://classroom.example.com/pub/tls/certs/server0.crt
部署根证书(公安局信息)
# cd /etc/pki/tls/certs/
# wget http://classroom.example.com/pub/example-ca.crt
部署私钥匙(解密)
# cd /etc/pki/tls/private/
# wget http://classroom.example.com/pub/tls/private/server0.key
2.安装软件包
[root@server0 /]# yum -y install httpd
[root@server0 /]# yum -y install mod_ssl(支持加密通信)
3.修改配置文件/etc/httpd/conf.d/ssl.conf
# echo '<h1>NSD1809 Web' > /var/www/html/index.html
[root@server0 /]# vim /etc/httpd/conf.d/ssl.conf
在末行模式下 :set nu 显示行号
59 DocumentRoot "/var/www/html"
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
4.重起httpd服务
[root@server0 /]# systemctl restart httpd
5.验证:
[root@desktop0 ~]# firefox https://www0.example.com
点击 了解安全的风险 ---->添加例外----->确认安全例外
#############################################################
自定Web根目录
调整 Web 站点 http://server0.example.com 的网页
目录,要求如下:
1)新建目录 /webroot,作为此站点新的网页目录
# mkdir /webroot
# echo '<h1>wo shi webroot' > /webroot/index.html
2)修改虚拟Web主机配置文件,指定新的网页目录
# vim /etc/httpd/conf.d/nsd01.conf
<VirtualHost *:80>
ServerName server0.example.com
DocumentRoot /webroot
</VirtualHost>
3)修改Web访问控制配置文件,允许所有人访问
# vim /etc/httpd/conf.d/nsd02.conf
<Directory "/webroot">
Require all granted #允许所有人访问
</Directory>
4)重起服务
[root@server0 ~]# systemctl restart httpd
5) 修改SELinux策略,安全上下文值(标签值)
[root@server0 ~]# ls -Zd /var/www/
[root@server0 ~]# ls -Zd /webroot/
# chcon -R --reference=/var/www/ /webroot
[root@server0 ~]# ls -Zd /var/www/
[root@server0 ~]# ls -Zd /webroot/
###########################################################
部署动态网站
LAMP (Linux Apache MySQL/MariaDB php/python)
方案3 :以webapp0.example.com部署Python页面为例
# cat /etc/httpd/conf.d/nsd01.conf #查看DocmentRoot
1.安装mod_wsgi软件包,翻译Python页面代码
[root@server0 /]# yum -y install mod_wsgi
2.修改配置文件,进行翻译Python页面代码
# vim /etc/httpd/conf.d/nsd01.conf
此虚拟主机侦听在端口8909
Listen 8909 #配置httpd程序监听8909端口
<VirtualHost *:8909> #虚拟web主机监听8909
ServerName webapp0.example.com
DocumentRoot /var/www/baidu
WsgiScriptAlias / /var/www/baidu/webinfo.wsgi # 当客户端直接访问网页文件根目录时,webinfo.ws呈现
</VirtualHost>
3. SELinux非默认端口的开放
# semanage port -l | grep http
# semanage port -a -t http_port_t -p tcp 8909
-a:添加 -t:类型 -p:协议
4. 起服
systemctl restart httpd
systemctl enable httpd
5.验证:
http://webapp0.example.com:8909
#####################################################
FTP (软件vsftpd)
ftp://用户名:密码@服务器地址[:端口号]/目录/文件名
端口:ftp=21
搭建简单FTP服务(实现文件的传输)
1.安装vsftpd服务端软件
2.FTP共享数据的路径: /var/ftp (默认)
#把要共享的文件和目录放到这个目录下
3.重起vsftpd服务
[root@server0 ~]# systemctl restart vsftpd
[root@server0 ~]# systemctl enable vsftpd
4.本机测试
[root@server0 ~]# firefox ftp://172.25.0.11
Samba
Samba服务基础:实现跨平台的共享(Windows与Linux)
– 协议:SMB(TCP 139)、CIFS(TCP 445)
• 所需软件包:samba
• 系统服务:smb
Samba用户 —— 专用来访问共享文件夹的用户
pdbedit
• 使用 pdbedit 管理工具
– 添加用户:pdbedit -a 用户名
– 查询用户:pdbedit -L [用户名]
– 删除用户:pdbedit -x 用户名
samba 配置文件 :/etc/samba/smb.conf
[自定共享名]
path = 文件夹绝对路径
; public = no|yes //默认no
; browseable = yes|no //默认yes
; read only = yes|no //默认yes
; write list = 用户1 .. .. //默认无
; valid users = 用户1 .. .. //默认任何用户
; hosts allow = 客户机地址 .. ..
; hosts deny = 客户机地址 .. .
搭建(简单)samba
环境配置 (服务端)
# firewall-cmd --set-default-zone=trusted
1.安装samba软件包
[root@server0 ~]# yum -y install samba
2.创建Samba的共享帐号
# useradd -s /sbin/nologin harry
# pdbedit -a harry #将harry添加为共享帐号
# pdbedit -L #查看所有Samba的共享帐号
3.修改配置文件/etc/samba/smb.conf
1)创建目录 [root@server0 ~]# mkdir /common
2)vim /etc/samba/smb.conf
89 workgroup = STAFF #此服务器必须是 STAFF 工作组的一个成员
命令模式 按 G(大写) 到全文最后
321 [common] #共享名
322 path = /common #共享实际路径
4.SELinux的布尔值策略(功能的开关)
– 需要加 -P 选项才能实现永久设置(需要内存的支持)
# getsebool -a | grep samba #查看samba服务布尔值
# setsebool samba_export_all_ro on #修改samba服务布尔值
5.重起smb服务
[root@server0 ~]# systemctl restart smb
[root@server0 ~]# systemctl enable smb
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
samba 客户端 (1)
配置环境
# firewall-cmd --set-default-zone=trusted
1.安装客户端软件包samba-client
[root@desktop0 ~]# yum -y install samba-client
• 列出共享资源
– smbclient -L 服务器地址
# smbclient -L 172.25.0.11
• 连接到共享文件夹
– smbclient -U 用户名 //服务器地址/共享名
# smbclient -U harry //172.25.0.11/common
samba 客户端 (2)
mount挂载:本地目录作为Samba服务的访问点
1.安装cifs-utils软件包,支持cifs文件系统的软件包
[root@desktop0 /]# yum -y install cifs-utils
2.挂载访问
[root@desktop0 /]# mkdir /mnt/smb
普通挂载 # mount -o user=harry,pass=123 //172.25.0.11/common /mnt/smb/
开机自动挂载/etc/fstab
_netdev:网络设备
指明本设备需要具备所有网络参数后,在进行挂载
[root@desktop0 /]# vim /etc/fstab
//172.25.0.11/common /mnt/smb cifs defaults,user=harry,pass=123,_netdev 0 0
[root@desktop0 /]# mount -a #检测开机自动挂载是否书写正确
[root@desktop0 /]# df -h
读写的Samba共享
服务端
1.创建共享目录
[root@server0 /]# mkdir /devops
2.修改配置文件/etc/samba/smb.conf
[devops]
path = /devops
write list = chihiro #允许chihiro用户可以写入
3.重起smb服务
[root@server0 /]# systemctl restart smb
4.修改SELinux布尔值
[root@server0 /]# getsebool -a | grep samba
[root@server0 /]# setsebool -P samba_export_all_rw=on
5.服务端本地目录权限
[root@server0 /]# setfacl -m u:chihiro:rwx /devops
[root@server0 /]# getfacl /devops
客户端:
[root@desktop0 /]# mkdir /mnt/dev
1.完成开机自动挂载
[root@desktop0 /]# vim /etc/fstab
//172.25.0.11/devops /mnt/dev cifs defaults,user=chihiro,pass=123,_netdev 0 0
[root@desktop0 /]# mount -a
[root@desktop0 /]# df -h
##################################################
总结:读写Samba共享
搭建Samba服务:
1.修改防火墙策略
2.安装软件包samba
3.创建Samba共享帐号 pdbedit
4.创建共享目录,修改配置文件发布共享,添加可写用户
5.重起smb服务
6.修改SELinux功能的开关(rw读写功能)
7.赋予本地目录(可写用户身份)读写执行的权限
客户端:
1.修改防火墙策略
2.安装软件包cifs-utils
3.利用mount挂载的方式
4.实现开机自动挂载
multiuser机制(多用户)
– multiuser,提供对客户端多个用户身份的区分支持
– sec=ntlmssp,提供NT局域网管理安全支持
将共享,开机自动挂载到/mnt/samba
-发布共享/public,共享名为haxi
-共享用户chihiro对共享具备读写权限
//172.25.0.11/devops /mnt/dev cifs defaults,username=chihiro,password=123,mnltiuser,sec=ntlmssp _netdev 0 0
iSCSI
( 软件包 :服务端targetcli 客户端iscsi-initiator-utils)
网络磁盘(共享分区或整个磁盘) 默认端口:3260
backstore,后端存储(
对应到服务端提供实际存储空间的设备,需要起一个管理名称
target,磁盘组
– 是客户端的访问目标,作为一个框架,由多个lun组成
lun,逻辑单元
– 每一个lun需要关联到某一个后端存储设备,在客户端
会视为一块虚拟硬盘
– iqn.yyyy-mm.倒序域名:自定义标识
搭建iscsi磁盘共享
1.利用fisk /dev/vdb命令,划分一个5G的主分区
服务端
一 防火墙设置为trusted
二 .安装软件包targetcli(服务端软件),进行配置
root@server0 ~]# yum -y install targetcli
[root@server0 ~]# targetcli
1.创建后端存储 backstore,后端存储(冰箱进行纸质包装)
/> backstores/block create name=nsd dev=/dev/vdb1
后端存储/块设备 创建 名字 实际设备
2.创建 target,磁盘组 (木质箱子)
/> iscsi/ create iqn.2018-10.example.com:server0
3.进行关联, lun 逻辑单元
[root@server0 ~]# targetcli
/> ls
/> iscsi/iqn.2018-10.example.com:server0/tpg1/
luns create /backstores/block/nsd
4.访问控制, 设置客户端访问服务端时,声称的名字(符合iqn格式)
/> iscsi/iqn.2018-10.example.com:server0/tpg1/acls
create iqn.2018-10.example.com:desktop0
5.开放本机的IP地址与端口
/> iscsi/iqn.2018-10.example.com:server0/tpg1/
portals create 172.25.0.11
/> ls
6.重起服务端target服务
[root@server0 ~]# systemctl restart target
[root@server0 ~]# systemctl enable target
客户端:
1.防火墙设置默认区域为trusted
2.安装软件包(客户端软件包)
[root@desktop0 ~]# rpm -q iscsi-initiator-utils
3.指定客户端声称的名字
# vim /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.2018-10.example.com:desktop0
4.重起iscsid服务,刷新客户端声称的名字
[root@desktop0 ~]# systemctl restart iscsid
[root@desktop0 ~]# systemctl daemon-reload
[root@desktop0 ~]# systemctl restart iscsid
5.发现服务端共享存储
书写发现的命令, 参考# man iscsiadm 搜索全文 /example
scsiadm --mode discoverydb --type sendtargets -- portal 172.25.0.11 --discover
6.加载共享存储
# lsblk
# systemctl restart iscsi #重起服务加载共享存储
# systemctl enable iscsi
###############################################################
总结:
服务端:
1.防火墙默认区域设置为trusted
2.安装软件包targetcli
A:建立后端存储
B:建立target磁盘组
C:关联lun
D:设置acl访问控制,客户端声称的名字
E:开启本机的IP地址及端口
3.重起target服务
客户端:
1.防火墙默认区域设置为trusted
2.安装软件包iscsi-initiator-utils
3.修改文件/etc/iscsi/initiatorname.iscsi客户端声称的名字
4.重起iscsid服务刷新客户端iqn标识
5.书写客户端发现命令,参照man iscsiadm
6.重起iscsi服务,加载共享存储 最终利用lsblk查看新磁盘
###############################################################
数据库管理 (软件 MariaDB-server)
数据库:存放数据的仓库
– 社区开源版 MariaDB 默认端口:3306
一 安装数据库
[root@server0 ~]# yum -y install mariadb-server
[root@server0 ~]# systemctl restart mariadb
[root@server0 ~]# systemctl enable mariadb
二 数据库基本操作
show (查看) create(创建)
> show databases; #显示所有库
> create database nsd1809; #创建nsd1809库
> exit #结束退出mariadb
>drop datebase nsd1809 #删除1809库
三 为数据库管理员设置密码
• 为数据库账号修改密码
– mysqladmin [-u用户名] [-p[旧密码]] password '新密码'
[root@server0 ~]# mysqladmin -u root password '123'
进入数据库
[root@server0 ~]# mysql -u root -p123 #非交互式进入数据库
[root@server0 ~]# mysql -u root -p #交互式进入
MariaDB [(none)]> use nsd; #进入nsd库
MariaDB [nsd]> show tables; #显示所有表格
• 禁止监听,只服务于本机,MariaDB主配文件为/etc/my.cnf
#vim /etc/my.cof
skip-networking #跳过网络
• 导入数据 /恢复到数据库
– mysql [-u用户名] [-p[密码]] 数据库名 < 备份文件.sql
# mysql -u root -p123 nsd < users.sql #导入数据
# mysql -u root -p123 nsd > users.sql #导出数据
案例5:使用数据库查询
1. 在系统 server0 上使用数据库 nsd,并使用相
应的 SQL 查询以回答下列问题:
1)密码是 solicitous 的人的名字?
MariaDB [(none)]> use nsd; #切换到库nsd
MariaDB [nsd]> show tables; #查看所有的表格
> select * from base;
> select * from base where password='solicitous';
> select * from base where name='tom';
> select * from base where password='456';
2)有多少人的 姓名是 Barbara 同时居住在 Sunnyvale
> select * from base,location where base.name='Barbara' and location.city='Sunnyvale'
and base.id=location.id;
2. 禁止空密码root用户访问 mariadb 数据库
> use mysql;
> desc user; #查看表结构
> select user,host,password from user where password=''; 查询空密码的用户
> delete from user where password=' '; #删除空密码的用户
> select user,host,password from user; #查询是否还存在空密码用户
> flush privileges; #刷新user表记录
测试登陆失败,利用域名方式登陆
# mysql -u root -h server0.example.com
#################################################
表格操作:
insert(增) delete(删) update(改) select(查) 查看表结构的命令: desc
> desc user; #查看表结构
查询表格内容
MariaDB [(none)]> use nsd; #切换到库nsd
MariaDB [nsd]> show tables; #查看所有的表格
select 表字段 from 表名;
select 表字段 from 库名.表名;
MariaDB [nsd]> select * from base;
MariaDB [nsd]> select name from base;
MariaDB [mysql]> select user,host,password from user;
MariaDB [(none)]> use nsd;
MariaDB [nsd]> desc base;
##################################################
数据库的授权:
–GRANT 权限列表 ON 数据库名.表名 TO 用户名@客户机地址 IDENTIFIED BY '密码';
[root@server0 ~]# mysql -u root -p123
> grant select on nsd.* to dc@localhost identified by '123'; #当dc从locahost登陆输入密码123,将会获得nsd库所有表的查询权限
#################################################################
mail
邮件服务 (软件 :postfix)
SMTP:用户发出的邮件的协议 默认端口 25
pop3:用户收到的邮件的协议 默认端口 110
搭建简单邮件服务
1.检查是否安装postfix软件包,搭建为邮件服务器
[root@server0 /]# rpm -q postfix
postfix-2.10.1-6.el7.x86_64
2.修改配置文件
[root@server0 /]# vim /etc/postfix/main.cf
末行模式 :set nu 开启行号
99 myorigin = server0.example.com #默认补全的域名后缀
116 inet_interfaces = all (或者loopback-only 仅自己)#允许本机所有接口使用邮件服务
164 mydestination = //此行的值设为空
mynetworks=127.0.0.0/8 [::1]/128 //仅本机
relayhost=[smtpX.example.com] //后端邮件服务器
local_transport = error:local dirvctory
3.重起服务
[root@server0 /]# systemctl restart postfix
发信操作与收信操作
• mail 发信操作
– mail -s '邮件标题' -r 发件人 收件人[@收件域]...
mail -s " test" student (直接收件人)
• mail 收信操作
– mail -u 用户名
###############################################################
源码编译安装
• 主要优点
– 获得软件的最新版,及时修复bug
– 软件功能可按需选择/定制,有更多软件可供选择
– 源码包适用各种平台
步骤1:安装gcc与make
[root@svr7 ~]# yum -y install gcc make
步骤2:tar解包,释放源代码至指定目录
# ls /tools/
# tar -xf /tools/inotify-tools-3.13.tar.gz -C /
步骤3: ./configure 配置,
# cd /inotify-tools-3.13/
# ./configure --prefix=/opt/myrpm #指定安装位置
步骤4:make 编译,生成可执行的二进制程序文件
[root@svr7 inotify-tools-3.13]# make
步骤5:make install 安装,将编译好的文件复制到安装目录
[root@svr7 inotify-tools-3.13]# make install
##################################################################
DNS
服务器的功能
– 正向解析:根据注册的域名查找其对应的IP地址
– 反向解析:根据IP地址查找对应的注册域名,不常用
所有完整的域名都必须以点结尾 根域名: .
顶级域名: .cn .us .jp .kr .tw .hk ......
二级域名: .com.cn .net.cn .org.cn .tedu.cn
三级域名: .nb.com.cn .haxi.com.cn .xixi.com.cn
完整域名(FQDN): www.nb.com.cn ftp.nb.com.cn
• BIND服务器端程序
– 系统服务:named
– 默认端口:TCP/UDP 53
– 运行时的虚拟根环境:/var/named/chroot/
• 主配置文件:/etc/named.conf 指定本机负责解析的域名
• 地址库文件:/var/named/etc/ 完整的域名与IP对应关系
• NS,域名服务器(Name Server)记录
• A,地址(Address)记录,仅用于正向解析区域
搭建基本DNS服务
虚拟机A
1.安装软件包
[root@svr7 ~]# yum -y install bind-chroot bind
2.修改配置文件/etc/named.conf
[root@svr7 ~]# cp /etc/named.conf /root/named.bak
[root@svr7 ~]# vim /etc/named.conf
options {
directory "/var/named"; #指定地址库文件路径
};
zone "tedu.cn" IN { #指定本机负责解析的域名
type master; #本机为权威主DNS服务器
file "tedu.cn.zone"; #指定地址库文件名字
};
3.创建地址库文件/var/named/tedu.cn.zone
# cd /var/named
# cp -p named.localhost tedu.cn.zone #保持属性不变
# vim tedu.cn.zone
#没有以点结尾,默认补全tedu.cn.
tedu.cn. NS svr7 #tedu.cn.区域有svr7负责
svr7 A 192.168.4.7 #svr7的IP地址为192.168.4.7
www A 1.1.1.1
ftp A 2.2.2.2
4.重起named服务
# systemctl restart named
5.客户端验证
指定DNS服务器位置
# echo nameserver 192.168.4.7 > /etc/resolv.conf
2.域名解析测试
# nslookup www.tedu.cn
# nslookup ftp.tedu.cn
#################################################
多区域的DNS服务器
虚拟机A:
1.修改配置文件/etc/named.conf
......
zone "qq.com" IN {
type master;
file "qq.com.zone";
};
3.创建地址库文件/var/named/qq.com.zone
# cd /var/named
# cp -p tedu.cn.zone qq.com.zone
# vim qq.com.zone
qq.com. NS svr7
svr7 A 192.168.4.7
www A 3.3.3.3
ftp A 4.4.4.4
4.重起named服务
# systemctl restart named
5.客户端验证
1.指定DNS服务器位置
# echo nameserver 192.168.4.7 > /etc/resolv.conf
2.域名解析测试
# nslookup www.qq.com
# nslookup ftp.qq.com
################################################
特殊的解析记录,以tedu.cn.zone为例
一 DNS的负载均衡,轮询的相同解析记录(了解)
[root@svr7 /]# vim /var/named/tedu.cn.zone
tedu.cn. NS svr7
svr7 A 192.168.4.7
www A 192.168.4.1
www A 192.168.4.2
www A 192.168.4.3
www A 192.168.4.4
ftp A 2.2.2.2
[root@svr7 /]# !sys
systemctl restart named
#############################################################
二 泛域名解析
[root@svr7 /]# vim /var/named/tedu.cn.zone
.......
* A 10.11.12.14
[root@svr7 /]# !sys
systemctl restart named
客户端验证:
[root@pc207 /]# nslookup wwwwww.tedu.cn
[root@pc207 /]# nslookup hahaxixi.tedu.cn
三 解析记录的别名(了解)
[root@svr7 /]# vim /var/named/tedu.cn.zone
.......
tts CNAME ftp #tts解析结果与ftp解析结果一致
[root@svr7 /]# !sys
systemctl restart named
客户端验证
[root@pc207 ~]# nslookup tts.tedu.cn
四 有规律的泛域名解析
pc1.tedu.cn ----> 192.168.10.1
pc2.tedu.cn ----> 192.168.10.2
pc3.tedu.cn ----> 192.168.10.3
......
pc50.tedu.cn ----> 192.168.10.50
内置函数: $GENERATE 产生连续的数字
[root@svr7 /]# vim /var/named/tedu.cn.zone
.......
$GENERATE 1-50 pc$ A 192.168.10.$
[root@svr7 /]# !sys
systemctl restart named
[root@svr7 /]#
客户端验证
[root@pc207 ~]# nslookup pc1.tedu.cn
[root@pc207 ~]# nslookup pc2.tedu.cn
[root@pc207 ~]# nslookup pc18.tedu.cn
[root@pc207 ~]# nslookup pc50.tedu.cn
##############################################
DNS服务器常见的资源解析记录都有那些?
NS解析记录 A解析记录 CNAME解析记录
###############################################
DNS子域授权 ,qq.com域名为例
父域:www.qq.com
子域:www.bj.qq.com
父域的DNS服务器为虚拟机A,负责解析qq.com
子域的DNS服务器为虚拟机B,负责解析bj.qq.com
虚拟机B
1.安装软件包
[root@pc207 ~]# yum -y install bind-chroot bind
2.修改配置文件/etc/named.conf
[root@pc207 ~]# cp /etc/named.conf /root/named.bak
[root@pc207 ~]# vim /etc/named.conf
options {
directory "/var/named"; #指定地址库文件路径
};
zone "bj.qq.com" IN { #指定本机负责解析的域名
type master; #本机为权威主DNS服务器
file "bj.qq.com.zone"; #指定地址库文件名字
};
3.创建地址库文件/var/named/bj.qq.com.zone
# vim bj.qq.com.zone
bj.qq.com. NS pc207
pc207 A 192.168.4.207
www A 5.5.5.5
4.重起named服务
# systemctl restart named
###############################################
子域授权
通过父域的DNS服务器为虚拟机A,能够解析www.bj.qq.com
虚拟机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
ftp A 4.4.4.4
[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: 5.5.5.5
递归查询:
客户端向首选DNS服务器寻求解析,首选DNS服务器与其他DNS服务器交互,最终将解析结果,带回来的过程
options {
directory "/var/named";
recursion no; #禁止递归
};
[root@pc207 /]# dig www.bj.qq.com 192.168.4.7
迭代查询:首选DNS服务器与其他DNS服务器交互
################################################
直接起到DNS解析的功能(只能对本机解析)
/etc/hosts 主机名映射文件(本地主机名与IP地址对应关系)
[root@svr7 /]# vim /etc/hosts
[root@svr7 /]# tail -1 /etc/hosts
192.168.4.110 www.360.com
[root@svr7 /]# ping www.360.com
/etc/hosts(DNS解析过程中,最高优先级)
客户端解析域名顺序:
1./etc/hosts
2./etc/resolv.conf
3.找寻DNS服务器
###############################################
缓存DNS:
利用内存进行缓存解析记录,加速解析
真机搭建缓存DNS服务器
1.搭建Yum仓库
[root@room9pc01 ~]# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)
[root@room9pc01 ~]# ls /iso/
CentOS-7-x86_64-DVD-1708.iso
[root@room9pc01 ~]# mkdir /dvd/
[root@room9pc01 ~]# mount /iso/CentOS-7-x86_64-DVD-1708.iso /dvd/
# ls /dvd/
# cd /etc/yum.repos.d/
# mkdir repo
# mv *.repo repo
# vim dvd.repo
[dvd]
name=CentOS7.4
baseurl=file:///dvd #指定本地Yum
enabled=1
gpgcheck=0
# yum -y install bind bind-chroot
2.查看达内 内网DNS服务器地址
[root@room9pc01 /]# cat /etc/resolv.conf
nameserver 172.40.1.10
[root@room9pc01 /]#
3.修改DNS服务器主配置文件,指定转发给内网DNS服务器
[root@room9pc01 /]# vim /etc/named.conf
options {
directory "/var/named";
forwarders { 172.40.1.10; };
};
4. 重起named服务
[root@room9pc01 /]# systemctl restart named
5.在虚拟机上验证:
[root@svr7 /]# nslookup www.taobao.com 192.168.4.254
###################################################################
Split分离解析(视图解析)
什么是分离解析
• 当收到客户机的DNS查询请求的时候
– 能够区分客户机的来源地址
– 为不同类别的客户机提供不同的解析结果(IP地址)
– 为不同的客户端,提供最近最适合的服务器
• 根据源地址集合将客户机分类
– 不同客户机获得不同结果(待遇有差别)
注意事项:
1.客户端必须找到,自己的分类,需要管理员分类合理
2.view客户端由上及下,匹配及停止
3.所有的zone都必须在view中
view "haha" {
match-clients { 192.168.4.207; };
zone "12306.cn" IN {
...... 地址库1;
};
};
view "xixi" {
match-clients { 192.168.4.110; };
zone "12306.cn" IN {
...... 地址库2;
};
};
view "hehe" {
match-clients { any; };
zone "12306.cn" IN {
...... 地址库3;
};
};
##########################################
案例需求及要点
• 环境及需求
– 权威DNS:svr7.tedu.cn 192.168.4.7
– 负责区域:tedu.cn
– A记录分离解析 —— 以 www.tedu.cn 为例
客户机来自 解析结果
192.168.4.207----------》 192.168.4.100
其他地址 ----------》 1.2.3.4
view nsd {
match-clients { 192.168.4.207; };
zone "tedu.cn" {
type master;
file "tedu.cn.zone";
};
};
view other {
match-clients { any; };
zone "tedu.cn" {
type master;
file "tedu.cn.other";
};
};
请去建立相应的地址库文件,写入不同的解析结果
################################################3
acl地址列表
• 为大批量的客户机地址建立列表
acl "liantong" {
IP地址1; IP地址2; .. ..
网段1; 网段2; .. ..
.. ..
};
acl "tietong" {
IP地址3; IP地址4; .. ..
网段3; 网段4; .. ..
.. ..
};
acl test { 192.168.4.207; 192.168.4.1;
192.168.4.2; 192.168.4.3;
};
view nsd {
match-clients { test; };
zone "tedu.cn" {
type master;
file "tedu.cn.zone";
};
};
###############################################
补充:多区域的分离解析
每一个view中,zone的个数保持一致,域名的个数保持一致
[root@svr7 /]# vim /etc/named.conf
options {
directory "/var/named";
};
acl test { 192.168.4.207; 192.168.4.1;
192.168.4.2; 192.168.4.3;
};
view nsd {
match-clients { test; };
zone "tedu.cn" {
type master;
file "tedu.cn.zone";
};
zone "sina.com" {
type master;
file "sina.com.zone";
};
};
view other {
match-clients { any; };
zone "tedu.cn" {
type master;
file "tedu.cn.other";
};
zone "sina.com" {
type master;
file "sina.com.other";
};
};
请去建立相应的地址库文件,写入不同的解析结果
RAID磁盘阵列
RAID阵列概述
• 廉价冗余磁盘阵列
– Redundant Arrays of Inexpensive Disks
– 通过硬件/软件技术,将多个较小/低速的磁盘整合成一个大磁盘
– 阵列的价值:提升I/O效率、硬件级别的数据冗余
– 不同RAID级别的功能、特性各不相同
• RAID 0,条带模式
– 同一个文档分散存放在不同磁盘
– 并行写入以提高效率
– 至少由两块磁盘组成
• RAID 1,镜像模式
– 一个文档复制成多份,分别写入不同磁盘
– 多份拷贝提高可靠性,效率无提升
– 至少由两块磁盘组成
• RAID5,高性价比模式
– 相当于RAID0和RAID1的折中方案
– 需要至少一块磁盘的容量来存放校验数据
– 至少由三块磁盘组成
• RAID6,高性价比/可靠模式
– 相当于扩展的RAID5阵列,提供2份独立校验方案
– 需要至少两块磁盘的容量来存放校验数据
– 至少由四块磁盘组成
RAID0/1/10
• RAID 0+1/RAID 1+0
– 整合RAID 0、RAID 1的优势
– 并行存取提高效率、镜像写入提高可靠性
– 至少由四块磁盘组成
#################################################
进程管理
程序:静态的代码,仅占硬盘空间
进程:动态的代码,占用CPU、内存资源
PID:进程的编号
父进程/子进程
查看进程树
• pstree — Processes Tree
– 格式:pstree [选项] [PID或用户名]
• 常用命令选项
– -a :显示完整的命令行
– -p :列出对应PID编号
systemd:上帝进程是所有进程的父进程 PID编号为1
[root@svr7 ~]# pstree
[root@svr7 ~]# pstree lisi
bash───vim
[root@svr7 ~]# pstree -p lisi
bash(13952)───vim(13996)
[root@svr7 ~]# pstree -ap lis
查看进程快照
• ps — Processes Snapshot
– 格式:ps [选项]...
• 常用命令选项
– aux:显示当前终端所有进程(a)、当前用户在所有
终端下的进程(x), 以用户格式输出(u)
– -elf:显示系统内所有进程(-e)、以长格式输出(-l)
信息、包括最完整的进程信息(-f)
ps aux :输出进程信息非常详细
– 列出正在运行的所有进程
ps -elf :输出进程信息比较详细,有该进程的父进程信息
– 列出正在运行的所有进程
tree
树
安装包 tree (可以查看目录里面树状表示)
例: mkdir /a
cat /etc/passwd > a/a.txt
tree a
PPID:父进程的PID号
###############################################################
WC
统计
用法:wc -l
请统计Linux一共有多少个用户?
[root@svr7 ~]# wc -l /etc/passwd #统计有多少行
42 /etc/passwd
请统计/etc目录下以tab结尾的文件,一共有多少个?
# find /etc/ -name "*tab" -type f
# find /etc/ -name "*tab" -type f | wc -l
请统计/etc目录下以 .conf 结尾的文件,一共有多少个?
# find /etc/ -name "*.conf" -type f
# find /etc/ -name "*.conf" -type f | wc -l
请统计Linux正在运行的进程,一共有多少个?
[root@svr7 ~]# ps aux | wc -l
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
进程动态排名
top
交互式工具
– 格式:top [-d 刷新秒数] [-U 用户名]
按键盘上 P(大写)按照CPU排序
按键盘上 M(大写)按照内存排序
检索进程
• pgrep — Process Grep
• 常用命令选项
– -l :输出进程名,而不仅仅是 PID
– -U :检索指定用户的进程
– -t :检索指定终端的进程
– -x :精确匹配完整的进程名
[root@svr7 ~]# who #当前系统有哪些用户正在登陆
pts:图形命令行终端
[root@svr7 ~]# pgrep crond
[root@svr7 ~]# pgrep -l crond
[root@svr7 ~]# pgrep -l log
[root@svr7 ~]# pgrep -lU lisi
[root@svr7 ~]# pgrep -lU lisi -t pts/3
[root@svr7 ~]# pgrep -lU lisi -t pts/2
############################################################
控制进程
• 后台启动
– 在命令行末尾添加“&”符号,(运行并转入后台)
• Ctrl + z 组合键
– 挂起当前进程(暂停并转入后台)
• jobs 命令
– 查看后台任务列表
• fg 命令
– 将后台任务恢复到前台运行
• bg 命令
– 激活后台被挂起的任务
[root@svr7 ~]# sleep 800 & #运行放入后台
[root@svr7 ~]# jobs #查看后台运行的进程
[root@svr7 ~]# sleep 1000
^Z #按键盘上 Ctrl + Z 暂停放入后台
[2]+ 已停止 sleep 1000
[root@svr7 ~]# jobs #查看后台运行的进程
[root@svr7 ~]# bg 2 #将后台编号为2的进程继续运行
[root@svr7 ~]# jobs
[root@svr7 ~]# fg 2 #将后台编号为2的进程,恢复到前台
sleep 1000
^C #按键盘上 Ctrl + C 结束
[root@svr7 ~]# jobs
[root@svr7 ~]# fg 1 #将后台编号为1的进程,恢复到前台
sleep 800
^C #按键盘上 Ctrl + C 结束
[root@svr7 ~]# job
kill
杀死进程
• 干掉进程的不同方法
– Ctrl+c 组合键,中断当前命令程序
– kill [-9] PID...
– killall 进程名...
– pkill 查找条件
进程调度及终止的主要命令工具:
命令行 &:将命令行在后台运行
Ctrl + z 组合键:挂起当前进程(暂停并转入后台)
jobs:列出当前用户当前终端的后台任务
bg 编号:启动指定编号的后台任务
fg 编号:将指定编号的后台任务调入前台运行
kill [-9] PID...:杀死指定PID值的进程
kill [-9] %n:杀死第n个后台任务
killall [-9] 进程名...:杀死指定名称的所有进程
pkill:根据指定的名称或条件杀死进程
[root@svr7 ~]# sleep 800 &
[root@svr7 ~]# sleep 900 &
[root@svr7 ~]# jobs
[root@svr7 ~]# jobs -l
[root@svr7 ~]# kill 15519
[root@svr7 ~]# jobs -l
[root@svr7 ~]# killall sleep
[root@svr7 ~]# jobs -l
w
显示已经登录的用户及正在进行的操作
[root@room9pc01 ~]# w
15:55:58 up 7:19, 2 users, load average: 0.47, 0.35, 0.22
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root :0 :0 08:38 ?xdm? 54:57 0.30s /usr/libexec/g
root pts/0 :0 15:41 6.00s 0.08s 0.00s w
who
显示已经登录的用户名、终端名称、登录时间及登录IP
[root@room9pc01 ~]# who
root :0 2019-01-24 08:38 (:0)
whoami
显示当前用户的用户名
[root@room9pc01 ~]# who
root :0 2019-01-24 08:38 (:0)
uptime
执行该命令将会显示出系统的当前时间、上线时间、当前的用户数量以及过去1、5、15分钟内的系统负载
[root@room9pc01 ~]# uptime
17:44:35 up 9:07, 3 users, load average: 0.41, 0.20, 0.16
free
查看实际内存占用(和可用空间)内存利用率
选项:-h (人类易读)
或者:-k (KB)-g (GB) -m(MB) -tera(TB) 默认以KB为单位
-l 按内存高低总计信息
-t 在linux后面加-t 显示linux 全部内存
[root@room9pc01 ~]# free -h
total used free shared buff/cache available
Mem: 15G 1.7G 11G 95M 2.5G 13G
Swap: 0B 0B 0B
total 内存总数: 128
used 已经使用的内存数: 119
free 空闲的内存数: 8
shared 当前已经废弃不用,总是0
buffers Buffer Cache内存数: 1
cached Page Cache内存数: 22
例:free -m
free -hs 3 #每3秒显示一次统计内存利用率
free -l
free 命令使用 /proc/meminfo 作为基准来显示内存利用率信息
############################################################
内核及系统日志
• 由系统服务rsyslog统一记录/管理
• 常见的日志文件
/var/log/messages 记录内核消息、各种服务的公共消息
/var/log/dmesg 记录系统启动过程的各种消息
/var/log/cron 记录与cron计划任务相关的消息
/var/log/maillog 记录邮件收发相关的消息
/var/log/secure 记录与访问限制相关的安全消息
日志分析
tailf:实时跟踪日志 tail -f
• 通用分析工具
– tail、tailf、less、grep等文本浏览/检索命令
– awk、sed等格式化过滤工具
用户登录分析
• users
who
w 命令
– 查看已登录的用户信息,详细度不同
• last、lastb 命令
– 查看最近登录成功/失败的用户信息
[root@svr7 ~]# users
[root@svr7 ~]# who
[root@svr7 ~]# w
[root@svr7 ~]# last -2 #最近登陆成功的2条用户信息
[root@svr7 ~]# lastb -2 #最近登陆失败的2条用户信息
日志消息的优先级
• 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"
[root@svr7 ~]# yum -y install httpd
[root@svr7 ~]# systemctl restart httpd
#查看关于httpd服务日志
[root@svr7 ~]# journalctl -u httpd
systemctl
控制
• Linux系统和服务管理器
– 是内核引导之后加载的第一个初始化进程(PID=1)
– 负责掌控整个Linux的运行/服务资源组合
对于服务的管理
systemctl restart 服务名 #重起服务
systemctl start 服务名 #开启服务
systemctl stop 服务名 #停止服务
systemctl status 服务名 #查看服务当前的状态
systemctl enable 服务名 #设置服务开机自启动
systemctl disable 服务名 #设置服务不开机自启动
systemctl enable 服务名
#查看是否开机自启动
[root@svr7 /]# systemctl is-enabled httpd
disabled #禁止开机启动
[root@svr7 /]# systemctl enable httpd
[root@svr7 /]# systemctl is-enabled httpd
enabled #允许开机启动
[root@svr7 /]#
systemd
• 一个更高效的系统&服务管理器
– 开机服务并行启动,各系统服务间的精确依赖
– 服务目录:/lib/systemd/system/
[root@svr7 /]# vim /lib/systemd/system/httpd.service
RHEL6:运行级别 200
0:关机 0
1:单用户模式(基本功能的实现,破解Linux密码)50
2:多用户字符界面(不支持网络) 80
3:多用户字符界面(支持网络)服务器默认的运行级别 100
4:未定义
5:图形界面 190
6:重起 0
切换运行级别:init 数字
RHEL7:运行模式
字符模式:multi-user.target
图形模式:graphical.target
当前直接切换到图形模式
[root@svr7 /]# systemctl isolate graphical.target
当前直接切换到字符模式
[root@svr7 /]# systemctl isolate multi-user.target
查看每次开机默认进入模式
# systemctl get-default
multi-user.target
设置永久策略,每次开机自动进入graphical.target
# systemctl set-default graphical.target
# reboot
#################################################
DHCP
部署DHCP服务器
• Dynamic Host Configuration Protocol
– 动态主机配置协议,由 IETF(Internet 网络工程师任
务小组)组织制定,用来简化主机地址分配管理
• 主要分配以下入网参数
– IP地址/子网掩码/广播地址
– 默认网关地址、DNS服务器地址
• DHCP地址分配的四次会话(广播进行,先到先得)
– DISCOVERY --> OFFER --> REQUEST -->ACK
在一个网络中只能有一台DHCP
• 装软件包 dhcp
• 配置文件 /etc/dhcp/dhcpd.conf
• 起服务 dhcpd
虚拟机A:
1.安装软件包
[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.20 192.168.4.100; 分配范围
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
################################################
PXE
网络装机概述
网络装机的优势
• 规模化:同时装配多台主机
• 自动化:装系统、配置各种服务
• 远程实现:不需要光盘、U盘等物理安装介质
• 需要哪些服务组件?
– DHCP服务,分配IP地址、定位引导程序
– TFTP服务,提供引导程序下载
– HTTP服务,提供yum安装源
################################################
一、搭建配置DHCP服务
1.指定写一个服务器地址
[root@svr7 /]# vim /etc/dhcp/dhcpd.conf
subnet 192.168.4.0 netmask 255.255.255.0 {
range 192.168.4.20 192.168.4.100;
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; #指定下一个服务器地址
filename "pxelinux.0"; #指定引导文件名称
}
2.重起服务
[root@svr7 /]# systemctl restart dhcpd
pxelinux.0:网卡引导文件,安装说明书,二进制文件
安装一个软件,会自动生成该文件
二、配置TFTP服务
tftp:简单的文件传输协议
默认端口为: 69
默认共享路径:/var/lib/tftpboot
1.安装tftp-server软件
[root@svr7 /]# yum -y install tftp-server
2.重起tftp服务
[root@svr7 /]# systemctl restart tftp
[root@svr7 /]# systemctl enable tftp
3.部署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/
4.部署菜单文件
默认存放路径/var/lib/tftpboot/pxelinux.cfg/
pxelinux.0--》/var/lib/tftpboot/pxelinux.cfg/default
# mkdir /var/lib/tftpboot/pxelinux.cfg
# mount /dev/cdrom /mnt
# ls /mnt/
# cp /mnt/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
# ls -l /var/lib/tftpboot/pxelinux.cfg/default
# chmod u+w /var/lib/tftpboot/pxelinux.cfg/default
# ls -l /var/lib/tftpboot/pxelinux.cfg/default
#################################################
在真机上,利用clone-vm7新建一台虚拟机,名字:PXE-Server
1.设置防火墙为trusted
2.当前及永久关闭SELinux
3.配置IP地址:192.168.4.122/24
4.搭建Yum仓库
5.主机名:PXE.tedu.cn
######################################################
搭建一键装机平台
一 、搭建DHCP服务
1.安装dhcp
2.修改配置文件
subnet 192.168.4.0 netmask 255.255.255.0 {
range 192.168.4.180 192.168.4.230;
next-server 192.168.4.122;
filename "pxelinux.0";
}
3.重起dhcpd服务,设置开机自起动
#####################################################
二、搭建tftp
1.安装tftp-server
2.启动tftp服务,设置开机自起动
3. 部署pxeliunx.0
# yum provides */pxelinux.0
# rpm -ql syslinux | grep pxelinux.0
# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
# ls /var/lib/tftpboot/
4. 部署光盘内容
[root@PXE ~]# yum -y install httpd
[root@PXE ~]# mkdir /var/www/html/rhel6
[root@PXE ~]# mkdir /var/www/html/rhel7
[root@PXE ~]# mount /dev/cdrom /mnt/ #光盘为rhel7
[root@PXE ~]# ls /mnt/
[root@PXE ~]# cp -r /mnt/* /var/www/html/rhel7/
[root@PXE ~]# umount /mnt
[root@PXE ~]# mount /dev/cdrom /mnt/ #光盘为rhel6
[root@PXE ~]# ls /mnt/
[root@PXE ~]# cp -r /mnt/* /var/www/html/rhel6/
[root@PXE ~]# du -sh /var/www/html/rhel7/
[root@PXE ~]# du -sh /var/www/html/rhel6/
5.部署rhel7、rhel6 的启动内核与驱动程序
# mkdir /var/lib/tftpboot/rhel6
# mkdir /var/lib/tftpboot/rhel7
# cp /var/www/html/rhel6/isolinux/vmlinuz
/var/www/html/rhel6/isolinux/initrd.img
/var/lib/tftpboot/rhel6/
# cp /var/www/html/rhel7/isolinux/vmlinuz
/var/www/html/rhel7/isolinux/initrd.img
/var/lib/tftpboot/rhel7/
# ls /var/lib/tftpboot/rhel7
# ls /var/lib/tftpboot/rhel6
6.部署图形模块与背景
# cp /var/www/html/rhel6/isolinux/vesamenu.c32
/var/lib/tftpboot/
# rpm -ql syslinux | grep jpg
# cp /usr/share/doc/syslinux-4.05/sample/syslinux_splash.jpg /var/lib/tftpboot/
# ls /var/lib/tftpboot/
7.部署菜单文件
# mkdir /var/lib/tftpboot/pxelinux.cfg
# cp /var/www/html/rhel6/isolinux/isolinux.cfg
/var/lib/tftpboot/pxelinux.cfg/default
# chmod 644 /var/lib/tftpboot/pxelinux.cfg/default
# ls -l /var/lib/tftpboot/pxelinux.cfg/default
8.修改菜单文件内容
# vim /var/lib/tftpboot/pxelinux.cfg/default
......
menu background syslinux_splash.jpg
menu title Welcome to PXE Server!
......
label linux
menu label Install RHEL7.2
kernel rhel7/vmlinuz
append initrd=rhel7/initrd.img
label vesa
menu label Install RHEL6.7
kernel rhel6/vmlinuz
append initrd=rhel6/initrd.img
label local
menu label Boot from local drive
menu default #读秒结束最后默认选择
localboot 0xffff
#####################################################
三、搭建httpd服务共享光盘所有内容
1.启动服务
[root@PXE /]# systemctl restart httpd
[root@PXE /]# systemctl enable httpd
2.测试访问
[root@PXE /]# firefox http://192.168.4.122/rhel6
[root@PXE /]# firefox http://192.168.4.122/rhel7
####################################################
四、生成ks文件
[root@PXE /]# yum -y install system-config-kickstart
修改Yum客户端配置文件的标示名
[development]
[root@PXE /]# system-config-kickstart #先看“软件包选择”
软件包选择: 在“桌面”一栏选择----->第一个为GNOME 则为rhel7
RHEL7的文件系统为xfs
#####################################################
[root@PXE ~]# vim /etc/yum.repos.d/rhel7.repo
执行向rhel6的光盘
[development]
name=rhel7
baseurl=http://192.168.4.122/rhel6
enabled=1
gpgcheck=0
[root@PXE ~]# yum clean all #清空Yum缓存
[root@PXE ~]# system-config-kickstart
软件包选择: 在“桌面”一栏选择----->第一个为KDE桌面 则为rhel6
RHEL6的文件系统为ext4
[root@PXE ~]# ls /root/ks*
/root/ks6.cfg /root/ks7.cfg
#############################################
五、指定ks应答文件
1.共享ks应答文件
[root@PXE ~]# cp /root/ks* /var/www/html/
[root@PXE ~]# ls /var/www/html/
2.修改菜单文件
# vim /var/lib/tftpboot/pxelinux.cfg/default
label linux
menu label Install RHEL7.2
kernel rhel7/vmlinuz
append initrd=rhel7/initrd.img ks=http://192.168.4.122/ks7.cfg
label vesa
menu label Install RHEL6.7
kernel rhel6/vmlinuz
append initrd=rhel6/initrd.img ks=http://192.168.4.122/ks6.cfg
####################################################
Cobbler
装机平台,不同版本的多系统的安装
一 安装一个CentOS虚拟机
真机:
[root@room9pc01 ~]# ls /iso/
CentOS-7-x86_64-DVD-1708.iso
虚拟机要求:
1.硬盘大小50G
2.网络类型private1
3.软件包选择 "带GUI的服务器"
4.分区选择 "自动分区"
5.将CentOS放入光驱设备,搭建本地Yum仓库
6.配置IP地址:192.168.4.120/24
7.配置主机名:Cobbler.tedu.cn
##################################################
zip压缩与解压缩(跨平台)
压缩:
zip -r /路径/压缩包名.zip 被压缩的源文档
解压缩:
unzip /路径/压缩包名.zip -d 指定释放位置
# zip -r /opt/nsd.zip /home /etc/passwd
# ls /opt/
# unzip /opt/nsd.zip -d /opt/rh/
# ls /opt/rh
# zip -r /opt/test.zip /etc/shadow /etc/fstab
# ls /opt/
# unzip /opt/test.zip -d /opt/rh/
###################################################
二、虚拟机设置
1.设置防火墙为trusted
# firewall-cmd --set-default-zone=trusted
2.当前及永久设置SELinux状态为permissive
[root@Cobbler ~]# setenforce 0 #当前临时关闭
[root@Cobbler ~]# getenforce
[root@Cobbler ~]# vim /etc/selinux/config
SELINUX=permissive
三、利用scp真机传递Cobbler.zip包到虚拟机192.168.4.120中
# scp /root/桌面/Cobbler.zip root@192.168.4.120:/root/
##################################################
重设root密码
案例1:为虚拟机 server 重设管理密码
1)重启系统,进入 recovery 恢复模式(修复模式)
按e键,找到 linux16 行,末尾添加 rd.break console=tty0
按 ctrl + x 启动
2)以可写方式重新挂载 /sysroot,并切换到此环境
switch_root# mount -o remount,rw /sysroot
switch_root# chroot /sysroot
sh-3.2#
3)将root用户的密码设置为 redhat
# echo redhat | passwd --stdin root
4)重设SELinux安全标签(安全增强版Linux)
# touch /.autorelabel #让 SElinux 失忆
5)先后执行 exit、reboot 完成修复
# exit
# reboot
##################################################
四、搭建Cobbler装机平台
Cobbler概述软件,管理dhcp、tftp、Web服务
自由的导入镜像与ks应答文件
1.解压Cobbler.zip包
# unzip /root/Cobbler.zip -d /
# cd /Cobbler/
# ls
# unzip /Cobbler/cobbler.zip -d /opt/
# ls /opt/cobbler
#####################################################
五、安装cobbler主程序、工具包等
[root@cobbler /]# yum -y install /opt/cobbler/*.rpm
################################################################
cobbler网络装机部署
1.安装软件 cobbler cobbler-web dhcp tftp-server pykickstart httpd tftp-server
cobbler #cobbler程序包
cobbler-web #cobbler的web服务包
pykickstart #cobbler检查kickstart语法错误
httpd #Apache web服务
dhcp #dhcp服务
tftp-server #tftp服务
2.配置cobbler
[root@cobbler /]# vim /etc/cobbler/settings
next_server: 192.168.4.120 #设置下一个服务器还为本机
server: 192.168.4.120 #设置本机为cobbler服务器
manage_dhcp: 1 #设置cobbler管理dhcp服务
pxe_just_once: 1 #防止客户端重复安装操作系统
开机启动: 匹配及停止
1.硬盘启动 2.光驱设备 3.U盘 4.网络引导
3.配置cobbler的dhcp
[root@svr7 /]# vim /etc/cobbler/dhcp.template
:%s /旧/新/g #全文替换
:%s /192.168.1/192.168.4/g #全文替换
5 次替换,共 4 行
4.绝对路径解压cobbler_boot.tar.gz #众多的引导文件
# tar -tf /Cobbler/cobbler_boot.tar.gz #查看包里面内容
# tar -xPf /Cobbler/cobbler_boot.tar.gz #绝对路径释放
# ls /var/lib/cobbler/loaders/
5.启动相关服务
[root@svr7 /]# systemctl restart cobblerd
[root@svr7 /]# systemctl enable cobblerd
[root@svr7 /]# systemctl restart httpd
[root@svr7 /]# systemctl enable httpd
[root@svr7 /]# systemctl restart tftp
[root@svr7 /]# systemctl enable tftp
[root@svr7 /]# systemctl restart rsyncd #同步服务
[root@svr7 /]# systemctl enable rsyncd
6.同步刷新cobbler配置
[root@svr7 /]# cobbler sync
......
*** TASK COMPLETE ***
# firefox https://192.168.4.120/cobbler_web
用户名:cobbler
密码:cobbler
#########################################################################################################
cobbler应用
cobbler import --path=挂载点 --name=导入系统命名(随意起)
导入安装镜像数据
# mount /dev/cdrom /dvd
# ls /dvd/
# cobbler import --path=/dvd --name=CentOS7
cobbler导入的镜像放在:/var/www/cobbler/ks_mirror
[root@cobbler /]# cobbler list #查看有哪些系统
distros:
CentOS7-x86_64 #安装客户端至少2G内存
profiles:
CentOS7-x86_64
##############################################
删除
# cobbler list
# cobbler profile remove --name=CentOS7-x86_64 #删除菜单信息
# cobbler distro remove --name=CentOS7-x86_64 #删除镜像信息
###########################################
# umount /dvd/
# mount /dev/cdrom /dvd 将光盘换成RHEL7
# ls /dvd/
安装完成机器 默认root 密码 cobbler
############################################################################################################
自定义应答文件:开头注释行删除
[root@cobbler ~]# system-config-kickstart #生成ks文件
必须默认kickstart文件存放位置:/var/lib/cobbler/kickstarts/
[root@cobbler ~]# cobbler list
修改kickstart文件:
[root@cobbler ~]# cobbler profile edit --name=CentOS7.4-A --kickstart=/var/lib/cobbler/kickstarts/自定义.cfg
[root@cobbler ~]# cobbler profile report
[root@cobbler ~]# cobbler sync #同步配置
###############################################################################################
nginx
源码安装Nginx需要提前安装依赖包软件:
gcc,openssl-devel,pcre-devel
加密nginx (模块 --with-http_ssl_module)
auth_basic ''Input Password''
auth_basic_user_file "/usr/local/nginx/pass"
1.yum -y install httpd-tools
htpasswd -c /usr/local/nginx/pass 用户名 (第一个用户要加c pass 这个文件是自己自由创建的)
LNMP (Linux Nginx MySQL/MariaDB php/python)
yum -y install gcc openssl-devel pcre-devel
yum -y install mariadb mariadb-server mariadb-devel (MariaDB)
yum -y install php php-mysql
yum -y install php-fpm-5.4.16-42.el7.x86_64.rpm (另外下载)
步骤:
一.php-fpm配置文件(相当于配置Nginx+fastCGI)
[root@proxy etc]# 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配置文件并启动服务
root@proxy ~# 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
三:创建PHP页面,测试LNMP架构能否解析PHP页面
1)创建PHP测试页面1,可以参考lnmp_soft/php_scripts/test.php:
[root@proxy ~]# vim /usr/local/nginx/html/test1.php
<?php
$i="This is a test Page";
echo $i;
?>
------------------------------------------------------------------------------------
2)创建PHP测试页面,连接并查询MariaDB数据库。
可以参考lnmp_soft/php_scripts/mysql.php:
[root@proxy ~]# vim /usr/local/nginx/html/test2.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>");
}
?>
------------------------------------------------------------------------------------
地址重写
rewrite 旧地址 新地址 [选项];
last 不再读其他rewrite
break 不再读其他语句,结束请求
redirect 临时重定向
permament 永久重定向
步骤一:修改配置文件(访问a.html重定向到b.html)
1)修改Nginx服务配置
server {
listen 80;
server_name localhost;
rewrite /a.html /b.html; #修改配置文件(访问a.html重定向到b.html)
步骤二:访问a.html重定向到b.html(跳转地址栏)
1)修改Nginx服务配置:
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
.. ..
server {
listen 80;
server_name localhost;
rewrite /a.html /b.html redirect;
步骤三:修改配置文件(访问192.168.4.5的请求重定向至www.tmooc.cn)
1) 修改Nginx服务配置
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
.. ..
server {
listen 80;
server_name localhost;
rewrite ^/ http://www.baidu.com;
location / {
root html;
index index.html index.htm;
步骤四:修改配置文件(访问192.168.4.5/下面子页面,重定向至www.tmooc.cn/下相同的页面)
1) 修改Nginx服务配置
rewrite ^/(.*)$ http://www.tmooc.cn/$1;
步骤五:修改配置文件(实现curl和火狐访问相同链接返回的页面不同)
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
#这里,~符号代表正则匹配,*符号代表不区分大小写
if ($http_user_agent ~* firefox) { //识别客户端firefox浏览器
rewrite ^(.*)$ /firefox/$1;
lftp
命令行连接ftp
包:lftp
yum -y install lftp
用法:lftp +ip
cd :切换位置
ls 查看
pwd/lpwd 可看当前位置
下载:
get或者 mget
get 用于下载一个文件, mget 用于下载多个文件
6、上传
put、mput
put用于上传一个文件,mput用于上传多个文件
git
版本控制系统
从现有仓库克隆
git clone git://github.com/schacon/grit.git
从克隆回来变成新的目录库
git clone git://github.com/schacon/grit.git mygrit
检查当前文件状态
git status (一般要跟踪才打这命令)
跟踪新文件
git add 文件名
查看前后的变化
git diff
提交更新
git commit
移除文件(要从git中移除某个文件)
git rm
git rm --cached readme.txt
移动 mv
git 图形化工具 :gitk