19.vim可视模式
:s /old/new 替换光标所在行 old替换为new
:%s /old/new 替换当前文件中的old为new,只替换一个
:%s /old/new/g 替换当前文件中的old为new,替换所有
:set nonu 不显示行号
vim etc/vimrc 修改vim软件配置,文件尾部加入 set nu,可在每次打开文件时显示行号
20.用户管理常用命令
(1)useradd 新建用户
(2)userdel 删除用户
(3)passwd 修改用户密码
(4)usermod 修改用户属性
(5)chage 修改用户属性
(6)id 用户名 可检测系统中是否存在 用户名 所对应的用户
25.权限管理以及文件的特殊权限
目录权限
x 进入目录
rx 进入目录,获取文件
wx 进入目录,删除文件
特殊权限:
SUID 用于二进制可执行文件,执行命令时去的文件属主权限 如/usr/bin/passwd
SGID 用于目录,在该目录下创建新的文件和目录,权限自动更改为该目录的属组
SBIT 用于目录,该目录下新建的文件和目录,仅root和自己可以删除 如/tmp
第三章 系统管理篇
26 网络管理
1.net-tools
ifconfig
2.iproute2
ip
ss
网络接口命名修改
网卡命名规则收biosdevname和net.ifnames两个参数影响
编辑 /etc/default/grub 文件,增加biosdevname=0 net.ifnames=0
更新grub
#grub2-mkconfig -o /boot/gurb2/grub.cfg
27.查看网络配置
ifconfig eth0
可以查看eth0的网络属性
查看网卡物理连接情况
mii-tool eth0 查看eth0网卡的物理连接情况
查看网关
route -n
使用-n参数不解析主机名 ,加快速度
网络配置命令
ifconfig <接口> <IP地址> [netmask 子网掩码]
ifup <接口> 启动网卡
ifdown <接口> 关闭网卡
添加网关
route add defaut gw <网关ip>
route add -host <指定IP> gw <网关ip>
route add -net <指定网段> netmask <子网掩码> gw <网关ip>
网络命令集合:ip命令
ip addr ls
对应 if config
ip link set dev eth0 up
对应 ifup eth0
ip addr add 10.0.0.1/24 dev eth1
ifconfig eth1 10.0.0.1 netmask 255.255.255.0
ip route add 10.0.0/24 via 192.168.0.1
route add -net 10.0.0.1 netmask 255.255.255.0 gw 192.168.0.1
网络故障排除命令
1)ping
当前主机与目标主机是否连通
ping www.baidu.com
2)traceroute
追踪服务器的每一跳
traceroute -w 1 www.baidu.com
-w 1 如果超时,最多等待1秒
3)mtr
显示其他主机与本机的连接情况
4)nslookup
查看域名对应ip
nslookup www.baidu.com
树莓派需要自己安装
sudo apt-get install dnsutils
5)telnet
检测端口连接
sudo apt-get install telnet
6)tcpdump
抓取网络包
tcpdump -i any -n port 80
抓取80端口的数据包 -n 参数代表需要将域名解析为ip,port 80,捕获80端口的数据
树莓派需要自己安装tcpdump
sudo apt-get install tcpdump
捕获某个主机192.168.1.4
tcpdump -i any -n host 192.168.1.4
捕获某个主机192.168.1.4的80端口
tcpdump -i any -n host 192.168.1.4 and port 80
7)netstat
netstat -ntpl
8)ss
ss -ntpl
网络服务管理
网络服务管理程序分为两种,分别为SysV和systemd
service network start|stop|restart
chkconfig -list network
关掉network
chkconfig --level 2345(级别) network off
systemctl list-unit-files NetworkManager.service
systemctl start|stop|restart NetworkManager
systemctl enable|disable NetworkManager
网络配置文件
cd /etc/sysconfig/network-scripts/
(1)ifcfg-eth0
BOOTPROTO ="dhcp" 代表网络地址动态分配;"static"使用静态IP
NAME ="eth0"
DEVICE="eth0"
ONBOOT="yes" 开机之后就启用
IPADDR 设置IP
NETMASK 子网掩码
GATEWAY 网关
DNS1 DNS服务器 可以设置DNS1 DNS2 DNS3 共三个
(2)修改主机名称
临时修改
hostname 主机名称
永久修改
hostnamectl set-hostname 主机名
修改后需要同时修改/etc/host
127.0.0.1 新的主机名
(3)/etc/host
31.软件包管理器的使用
包管理器是方便软件安装、卸载,解决软件依赖关系的重要工具
CentOS、RedHat使用yum包管理器,软件安装包格式为rpm
Debian、Ubuntu使用apt包管理器,软件安装包格式为deb
rpm命令
rpm命令常用参数
-q 查询软件包
-i 安装软件包
-e 卸载软件包
mount .dev.sr0 /mnt 把光盘设备挂载到 /mnt目录
33.使用yum包管理器
CentOS yum源
/etc/yum.repos.d/CentOS-Base.repo
wget -O /etc/yum.repos.d/CentOS-Basw.repo http://mirrirs.aliyun.com/repo/Centos-7.repo
yum命令常用选项
install 安装软件包
remove 卸载软件包
list|grouplist 查看软件包
update 升级软件包
yum makecache 更新缓存
34.通过源代码编译安装软件包
./configure --prefix=/usr/local/openresty 指定安装目录
yum install gcc gcc-c++
35.如何进行内核升级
1)rpm 格式内核
查看内核版本
uname -r
升级内核版本
yum install kernel-3.10.0
升级已安装的其他软件包和补丁
yum update
2)源代码编译内核安装
安装依赖包
yum install gcc gcc-c++ make ncurse-devel openssl-devel elfutils-libelf-devel
下载并解压缩内核
tar xvf linux-5.1.10.tar.xz -C /usr/src/kernels
配置内核编译参数
cd /usr/src/kernels/linux-5.1.10/
make menuconfig|allyesconfig|allnoconfig
使用当前系统内核配置
cp /boot/config-kernelversion.platform /usc/src/kernels/linux-5.1.1-/.config
查看cpu
lscpu
编译
make -j2 all
安装内核
make modules_install
make install
增加epel的yum参考
yum install epel-release -y
36.grub配置文件
grub配置文件
/etc/default/grub 基本配置
/etc/grub.d/
/boot/grub2/grub.cfg
grub2-mkconfig -o /boot/grub2/grub.cfg 产生新的配置文件
SELINUX
echo 123456 | passwd --stdin root
37.进程管理
查看命令
(1)ps
ps -e | more 获取分页ps信息
ps -ef | more 获取分页ps信息,包含用户信息
ps -eLf | more 获取分页ps信息,包含用户信息、线程信息
(2)pstree
pstree 进程树
(3)top
up 33 min 已经运行了33分钟
2 users 有两个用户
load average: 1分钟平均负载 5分钟平均负载 15分钟平均负载
Tasks : 有多少运行的进程
按数字1 ,可以列出所有cpu的运行状态
top -p 进程id
获取指定进程id的运行情况
PR 系统优先级
NI nice优先级
38.进程的控制与进程之间的关系
进程的优先级调整
(1)调整优先级
nice 范围从-20到19,值越小优先级越高,抢占资源就越多
nice -n 10 ./a.sh
renice 重新设置优先级
renice -n 优先级 进程id
renice -n 15 1191
(2)进程的作业控制
jobs
&符号
./a.sh & 后台运行
jobs 列出后台运行的任务
fg 1 调回前台
bg 1 调到后台
39.进程的通信方式与信号:kill 命令
信号是进程间通信方式之一,典型用法是:终端用户输入中断命令,通过信号机制停止一个程序的运行。
使用信号的常用快捷键和命令
kill -l
SIGINT 通知前台进程组终止进程 ctrl+c
SIGKILL 立即结束程序,不能被阻塞和处理 kill -9 pid
40.守护进程
(1)使用nohup 与 & 符号配合运行一个命令
nohup 命令使进程忽略hangup(挂起)信号
(2)守护进程(daemon)和一般进程的区别
cd /proc/pid 查看指定pid的进程信息
41.screen命令和系统日志
(1)使用screen命令
screen进入screen环境
ctrl+a d(退出detached)screen环境
screen -ls 查看screen的会话
screen -r sessionid 恢复会话
tail -f message 查看系统日志
tail -f dmesg 内核信息
tail -f secure 系统安全日志
tail -f cron 计划任务日志
42.服务管理工具 systemctl
服务(提供常见功能的守护进程)集中管理工具
(1)service
cd /etc/init.d/
(2)systemctl
cd /usr/lib/systemd/system/
vim sshd.service
chkconfig --list
init 0 关机
init 6 重启
init 3 字符终端的多用户模式
systemctl lis-dependencies [target]
systemctl 常见操作
systemctl start|stop|restart|reload|enable|disable 服务名称
软件包安装的服务单元 /usr/lib/systemd/system/
sytemctl get-default 获取当前运行的级别
43.SELinux简介
安全增强的Linux
MAC(强制访问控制) 与 DAC(自主访问控制)
查看SELinux的命令
getenforce 查看SELinux的运行状态
三种状态
enforcing 开启强制
permissive 出现安全警报
disable 关闭
/usr/sbin/sestatus
ps -Z and ls -Z and id -Z
关闭SELinux
setenforce 0
/etc/selinux/config
44.内存与磁盘管理
45.内存查看命令
常用命令介绍
(1)free
free -m 按照M来显示
free -g 按照G来显示
available 真正占用的
(2)top
46.磁盘分区和文件大小查看
fdisk -l
ls -l /dev/sd?
ls -l /dev/sd??
partd -l
df -h
du 实际占用空间
dd if=/dev/zero bs=4M count=10 of=afile
dd if=/dev/zero bs=4M count=10 seek=20 of=bfile
47.文件系统管理
Linux支持多种文件系统,常见的有
(1)ext4 CentOS6使用的
超级块
超级块副本
i节点(inode)文件大小 权限
ls -i 获取文件i节点号
cp i节点号会变化
mv i节点号不变
数据块(datablock)
rm 文件名和i节点的连接断开
ln afile bfile 把afile链接到bfile i节点一样
ln -s afile aafile 符号链接文件 i节点不一样,可以跨分区
(2)xfs CentOS7使用的
facl :
getfacl 文件名 获取facl权限
setfacl 赋予权限 setfacl -m u:user1:r afile
setfacl 收回权限 setfacl -x u:user1:r afile
(3)NTFS(需安装额外软件)
49.分区和挂载
常用命令
(1)fdisk
fdisk /dev/sdc
(2)mkfs
mkfs.xfs /dev/sdc1
mkfs.ext4 /dev/sdc1
(3)parted
硬盘大于2T使用parted进行分区
(4)mount
mount -t ext4
mount -t auto
mount /dev/sdc1 /mnt/sdc1
常见配置文件
/etc/fstab
挂载信息固化,重启后自动挂载
/dev/sdc1 /mut/sdc1 ext4 defaults 0 0
50.分区和挂载磁盘配额
xfs文件系统的用户磁盘配额quota
mkfs.xfs /dev/sdb1
mkdir -p /mnt/disk1 增加-p参数,如果没有就创建,有则不做操作
mount -o uquota,gquota /dev/sdb1 /mnt/disk1
chmod 1777 /mnt/disk1
报告磁盘配额
xfs_quota -x -c 'report -ugibn' /mnt/disk1
限制用户磁盘配额,isoft=5 i节点软限 5,ihard=10 i节点硬限10
xfs_quota -x -c 'limit -u isoft=5 ihard=10 user1' /mnt/disk1
51.交换分区swap的查看与创建
(1)增加交换分区的大小
mkswap
mkswap 磁盘路径
swapon
swapon 磁盘路径 打开swap
swapoff 磁盘路径 关闭swap
(2)通过文件扩充swap
dd if=/dev/zero bs=4M count=1024 of=/swapfile
mkswap /swapfile
chmod 600 /swapfile
swapon /swapfile
52.软件RAID的使用
RAID的常见级别及含义
RAID 0 strping条带方式,提高单盘吞吐率
RAID 1 mirroring 镜像方式,提高可靠性
RAID 5 有奇偶校验
RAID 10 是RAID 1与 RAID 0的结合
软件RAID的使用
mdadm
53.逻辑卷LVM的用途与创建
lvcreate -L 100M -n lv1 vg1 在vg1上创建一个名为lv1的100M大学的lv
lvs 查看lv
54.系统综合状态查看命令sar及第三方命令
使用sar命令查看系统综合状态
使用第三方命令查看网络流量
yum install epel-release
yum install iftop
iftop -P
55.上面是shell
Shell 是命令解释器,用于解释用户对操作系统的操作
Shell 有很多
cat /etc/shells
CentOS7默认使用的Shell是bash
56.Linux的启动过程
BIOS_MBR_BootLoader(grub)-kernel-systemd-系统初始化-shell
获取MBR内容
dd if/dev/sda of=mbr.bin bs=446 count=1
57.Shell脚本的格式
UNIX的哲学:一条命令只做一件事
为了组合命令和多次执行,使用脚本文件来保存需要执行的命令
赋予该文件执行权限(chmod u+rx filename)
Sha-Bang
命令
"#"号开头的注释
chmod u+rx filename 可执行权限
执行命令
bash ./filename.sh
./filename.sh
source ./filename/sh
. filename.sh
58.脚本不同执行方式的影响
bash ./filename.sh 可以不用赋予执行权限即可执行
./filename.sh 必须有可执行权限才可以
source ./filename.sh 或 . filename.sh 运行脚本时不会产生新的进程,对当前运行环境有影响
内建命令和外部命令的区别
(1)内建命令不需要创建子进程
(2)内建命令对当前Shell生效
59.管道
管道和信号一样,也是进程通信的方式之一
匿名管道(管道符)是Shell编程经常用到的通信工具
管道符是"|",将前一个命令执行的结果传递给后面的命令
os | cat
ech 123 | ps
避免在管道符中使用内部命令
60.重定向
一个进程默认会打开标准输入、标准输出、错误输出三个文件描述符
(1)输入重定向符号”<“
read var < /path/to/a/file
(2)输出重定向符号">" ">>" "2>" "&>"
echo 123>/path/to/a/file
>会将文件中的内容清空,再把新的内容保存进去
>>不会清空原有内容,会把新内容追加到原文件内容的后面
2> 是对文件描述符2做的一个操作,即错误重定向,如果当期执行有问题,会输出错误内容到指定文件中
&>无论是正确内容还是错误内容,都输出到指定文件中
wc -l 统计输入的行数 ctrl+d结束
wc -l < /etc/passwd 统计文件/etc/passwd的行数
(3)输入和输出重定向组合使用
cat > /path/to/a/file<<EOF
I am $USER
EOF
61.变量赋值
(1)变量名的命名规则
字母、数字、下划线
不能以数字开头
(2)为变量赋值的过程,称为变量替换
a.变量名=变量值 等号左右不能出现空格
a=123
b.使用let为变量赋值
let a=10+20
c.将命令赋值给变量(命令的参数也可以赋值给变量)
l=ls
d.将命令的结果赋值给变量,使用$( )或者``
let c=$(ls -l /etc)
e.变量值有空格等特殊字符可以包含在" "或''中
62.变量的引用
(1)${变量名}称作对变量的引用
(2)echo ${变量名}查看变量的值
(3)${变量名}在部分情况下可以省略为 $变量名
变量的作用范围
(1)变量的默认作用范围
仅对当前终端或shell生效
(2)变量的导出
export
(3)变量的删除
unset
63.环境变量、预定义变量与位置变量
环境变量:每个Shell打开都可以获得到的变量
(1)set和env命令
env | more 获取到的所有变量名称,都是环境变量
echo $变量名 查看当前变量的值
$? 上条命令是否正确执行,是否产生了一个错误,执行成功 其值为0
$$ 当前运行的pid
$0 当前运行的程序名称
$PATH
$PS1 当前显示的终端
echo $PS1
可以用set | more 查看所有变量,除了环境变量,还有预定义变量
(2)位置变量
$1 $2 … $n
$10 要使用${10}
${2-_} 位置2有值 则用值,否则用_
64.环境变量配置文件
配置文件
/etc/profile 保存系统启动相关配置文件
/etc/profile.d/
~/.bash_profile
~/.bashrc
/ect/bashrc
登录的时候使用 su - 用户名 方式,确保加载所有配置文件
65.数组
(1)定义数组
IPTS=(10.0.0.1 10.0.0.2 10.0.0.3)
(2)显示数组的所有元素
echo ${IPTS[@]}
(3)显示数组元素个数
echo ${#IPTS[@]}
(4)显示数组的第一个元素
echo ${IPTS[0]}
66.转义和引用
(1)特殊字符:一个字符不仅有字面意义,还有元意(meta-meaning)
#注释
;分号 用来分隔多条命令
\转义符号
\n \r \t 单个字母的转义
\$ \" \\ 单个非字母的转义
"和'引号
" 双引号 把变量用双引号引起来,显示变量的值
' 单引号 变量用单引号引起来,原样输出,不显示变量的值
67.运算符
(1)赋值运算符 =
= 赋值运算符,用于算数赋值和字符串赋值
使用unset取消为变量赋值
= 除了作为赋值运算符还可以作为测试操作符
(2)算数运算符
基本运算符
+ - * / ** %
使用expr进行运算(只支持整数)
expr 4+5
数字常量的使用方法
let "变量名=变量值"
变量值使用0开头为八进制
变量值使用0x开头为十六进制
双圆括号()
双圆括号是let命令的简化
(( a = 10 ))
(( a++))
echo $((10+20))
68.特殊符号大全
(1)引号
' 完全引用
" 不完全引用
` 执行命令
(2)括号
() (()) $() 圆括号
单独使用圆括号会产生一个子shell (xyz=123)
数组初始化 IPS=( ip1 ip2 ip3 )
[] [[]] 方括号
单独使用方括号是测试(test)或数组元素功能
两个方括号表示测试表达式
<> 尖括号 重定向符号
{} 花括号
输出范围 echo {0..9}
文件复制 cp /ect/passwd{,.bak}
(3)运算和逻辑符号
+ - * / % 算数运算符
> < = 比较运算符
&& || ! 逻辑运算符
(4)转义符号
\n 普通字符转义之后有不同的功能
\' 特殊字符转义之后,当做普通字符来使用
(5)其他符号
# 注释符
;命令分隔符
case 语句分隔符要转义 ;;
: 空指令
.和source命令相同
~家目录
,分隔目录
*通配符
? 条件测试 或 通配符
$ 取值符号
| 管道符
& 后台运行
空格
69.test比较
测试与判断
(1)退出程序命令
exit
exit 10 返回10给Shell,返回值非0为不正常退出
$?判断当前Shell前一个进程是否正常退出
(2)测试命令test
test命令用于检查文件或者比较值
test可以做以下测试:
文件测试
整数比较测试
字符串测试
test测试语句可以简化为[]符号
[]符号还有扩展写法[[]]支持&& || < >
70.if判断的使用
(1)使用if-then语句
if-then 语句的基本用法
if [ 测试条件成立 ] 或 命令返回值是否为0
then 执行相应命令
fi 结束
71.if-else判断的使用
if-then-else 语句可以再条件不成立时也运行相应的命令
if [ 测试条件成立 ] 或 命令返回值是否为0
then 执行相应命令
else 测试条件不成立,执行相应命令
fi 结束
if [ 测试条件成立 ] 或 命令返回值是否为0
then 执行相应命令
elif [测试条件成立]
then 执行相应命令
else 测试条件不成立,执行相应命令
fi 结束
72.嵌套if的使用
if条件测试中可以再嵌套if条件测试
if [ 测试条件成立 ]
then 执行相应命令
if [ 测试条件成立 ]
then 执行相应命令
fi
fi 结束
73.case分支
case语句和select语句可以构成分支
case "$变量" in
"情况1" )
命令…;;
"情况2" )
命令…;;
* )
命令…;;
esac
74.for的基本使用
(1)for循环的语法
for 参数 in 列表
do 执行的命令
done 封闭一个循环
使用反引号或$()方式执行命令,命令的结果当作列表进行处理
(2)使用for循环遍历变量和文本
列表中包含多个变量,变量用空格分隔
对文本处理,要使用文本查看命令取出文本内容
默认逐行处理,如果文本出现空格会当做多行处理
75.C语言风格的for
for((变量初始化;循环判断条件;变量变化))
do
循环执行的命令
done
76.while循环和util循环
(1)while循环
while test 测试是否成立
do
命令
done
(2)until循环与while循环相反,循环为假时,执行循环,为真时循环停止
77.循环的嵌套和break、continue语句
循环和循环可以嵌套
循环中可以嵌套判断,反过来也可以嵌套
循环可以使用break和continue语句在循环中退出
78.使用循环处理位置参数
(1)命令行参数可以使用$1 $2 … ${10}… $n进行读取
(2)$0代表脚本名称
(3)$*和$@代表所有位置参数
(4)$#代表位置参数的数量
for pos in $*
do
if [ "$pos" = "help" ]; then
echo $pos $pos
fi
done
while [ $# -ge 1]
do
if [ "$1" = "help" ]; then
echo $1 $1
fi
shift
done
79.自定义函数
函数用于“包含”重复使用的命令集合
(1)自定义函数
function fname(){
命令
}
(2)函数的执行
fname
(3)函数作用范围的变量
local 变量名 ,只在函数内部生效
(4)函数的参数
$1 $2 $3 … $n
80.系统脚本
(1)系统自建了函数库,可以再脚本中引用
/etc/init.d/functions
(2)自建函数库
使用source函数脚本文件“导入”函数
81.脚本资源控制
(1)脚本优先级
可以使用nice和renice调整脚本优先级
避免出现“不可控的”死循环
死循环导致cpu占用过高
死循环导致死机
82.信号
捕获信号脚本的编写
kill 默认会发送15号信号给应用程序
ctrl+c 发送2号信号给应用程序
9号信号不可阻塞
trap "echo sig 15" 15
trap "echo sig 2" 2
echo $$
while :
do
:
done
83.一次性计划任务
计划任务:让计算机在指定的时间运行程序
计划任务分为:一次性计划任务 周期性计划任务
一次性计划任务
at 运行的任务命令 时间
atq 查询未执行的计划任务
84.周期性计划任务
cron
配置方式
crontab -e
查看现有的计划任务
crontab -l
配置格式:
分钟 小时 日期 月份 星期 执行的命令
注意命令的路径问题
查看任务有没有被正确执行
cd /var/log
tail -f cron
查看当前用户的cron
ls /var/spool/cron/
85.为脚本加锁
如果计算机不能按照预期时间运行
anacontab 延时计划任务
flock 锁文件
vim /etc/cron.d/
vim /etc/cron.d/0hourly
flock -xn "/tmp/f.lock" -c "命令路径"
第五章 文本操作篇
86.元字符介绍
(1). 匹配除换行符外的任意单个字符
(2)* 匹配任意一个跟在它前面的字符
(3)[] 匹配方括号中的字符类中的任意一个
(4)^匹配开头
(5)$匹配结尾
(6)\转义后面的特殊字符
grep "\." somefile
87.find演示
(1)扩展元字符
+ 匹配前面的正则表达式至少出现一次
? 匹配前面的正则表达式出现零次或一次
| 匹配它前面或后面的正则表达式
(2)文件查找命令find
find 路径 查找条件[ 补充条件 ]
find /etc -name pass*
find /etc -regex .*wd 文件名符号正则
find /etc -type -type f -regex .*wd 文件类型,文件名符号正则
LANG=C stat 文件名 获取文件的状态,包含创建时间 访问 改动时间
find /etc -user root -uid 0
find *txt exec rm -v {} \;
grep pass /root/anaconda-ks.cfg | cut -d " " -f 3
cut -d ":" -f7 /etc/passwd | sort | uniq -c | sort -r
88.sed和awk介绍
(1)sed基本用法
sed一般用于对文本内容做替换
(2)AWK基本用法
AWK一般用于对文本内容进行统计、按需要的格式进行输出
cut 命令: cut -d : -f 1 /etc/passwd
AWK命令:awk -F:'/wd${print$1}' /etc/passwd
89.sed替换命令讲解
(1)sed的模式空间
sed的基本工作方式是:
将文件以行为单位读取到内存(模式空间)
使用sed的每个脚本对该行进行操作
处理完成后输出该行
(2)替换命令s
sed 's/old/new/' file
sed -e 's/old/new/' -e 's/old/new/' filename … 多条指令 用-e
sed -i 's/old/new/' 's/old/new/' filename ... -i 替换完毕内容原样写回到文件中
90.sed替换命令加强版
(1)全局替换
s/old/new/g
g为全局替换,用于替换所有出现的次数
/如果和正则匹配的内容冲突可以使用其他符号,如:
s@old@new@g
(2)标志位
s/old/new/标志位
数字,第几次出现才进行替换
g,每次出现都进行替换
p,打印模式空间的内容
sed -n 'script' filename 阻止默认输出
w file 将模式空间的内容写入到文件
(3)寻址
默认对每行进行操作,增加寻址后对匹配的行进行操作
/正则表达式/s/old/new/g
行号s/old/new/g
行号可以是具体的行,也可以是最后一行$符号
可以使用两个寻址符号,也可以混合使用行号和正则地址
(4)分组
寻址可以匹配多条命令
/regular/{s/old/new/;s/old/new/}
(5)sed脚本文件
可以将选项保存为文件,使用-f加载脚本文件
sed -f sedscript filename
91.sed的其他常用命令
(1)删除命令
[寻址]d
删除模式空间内容,改变脚本的控制流,读取新的输入行
d后面的其他指令不会被执行
(2)追加、插入、更改
追加命令a
插入命令i
更改命令c
(3)打印
打印命令p
(4)下一行
下一行命令n
打印行号命令=
(5)读文件和写文件
读文件命令 r
写文件命令 w
(6)退出命令
退出命令 q
time sed -n '1,10p' lines.txt 执行命令并统计执行时间
92.sed多模式空间
(1)多行模式处理命令 N、D、P
N 将下一行加入到模式空间
D 删除模式空间中的第一个字符到第一个换行符
P 打印模式空间中的第一个字符到第一个换行符
93.什么是sed的保持空间
(1)保持空间命令
h和H将模式空间内容存放到保持空间,h覆盖模式,H追加模式
g和G将保持空间内容取出到模式空间,g覆盖模式,G追加模式
x交互模式空间和保持空间内容
head -6 /etc/passwd | cat -n | tac
cat -n /etc/passwd | head -6 | sed -n '1h;1!G;$!x;$p'
cat -n /etc/passwd | head -6 | sed -n '1!G;h;$p'
cat -n /etc/passwd | head -6 | sed '1!G;h;$!d'
94.认识AWK
(1)AWK和sed的区别
AWK更像是脚本语言
AWK用于“比较规范”的文本处理,用于统计数量并输出指定字段
使用sed将不规范的文本,处理为“比较规范”的文本
(2)AWK脚本的流程控制
输入数据前例程 BEGIN{}
主输入循环{}
所有文件读取完成例程END{}
95.AWK的字段
(1)记录和字段
每行称为AWK的记录
使用空格、制表符分隔开的单词称作字段
可以自己指定分隔的字段
(2)字段的引用
awk中使用$1 $2 ... $n表示每一个字段
awk '{print $1,$2,$3}' filename
awk 可以使用-F选项改变字段分隔符
awk -F ',' '{print $1,$2,$3}' filename
分隔符可以使用正则表达式
awk '/^menu/{ print $0 }' /boot/grub2/grub.cfg
awk -F "'" '/^menu/{ print x++,$2 }' /boot/grub2/grub.cfg
96.AWK的表达式
(1)赋值操作符
=是最常用的复制操作符
var1 = "name"
var2 = "hello" "world"
var3 = $1
其他复制操作符
++ -- += -= *= /= %= ^=
(2)系统变量
FS和OFS字段分隔符,OFS表示输出的字段分隔符
head -5 /etc/passwd | awk 'BEGIN{FS=":"}{print $1}'
head -5 /etc/passwd | awk 'BEGIN{FS=":";OFS="-"}{print $1,$2}'
RS 记录分隔符
head -5 /etc/passwd | awk 'BEGIN{RS=":";}{print $0}'
NR 和 FNR 行数
NR 读取多个文件 行数会连续 ,FNR按文件,每个文件都会重新开始计数
awk '{print NR,$0}' /etc/hosts /etc/hosts
awk '{print FNR,$0}' /etc/hosts /etc/hosts
NF 字段数量,最后一个字段内容可以用$NF取出
head -5 /etc/passwd | awk 'BEGIN{FS=":"}{print NF}'
head -5 /etc/passwd | awk 'BEGIN{FS=":"}{print $NF}'
(3)关系操作符
< > <= >= == !=
~ 匹配 ,字符匹配正则表达式
!~ 不匹配 ,字符不匹配正则表达式
97.AWK的判断和循环
(1)判断
1)条件语句使用if开头,根据表达式的结果来判断执行哪条语句
if(表达式)
awk语句1
[else
awk2语句2
]
2)如果有多个语句需要执行可以使用{}将多个语句括起来
(2)循环
1)while循环
while(表达式)
awk语句1
2)do循环
do{
awk 语句1
}while(表达式)
3)for循环
for(初始值;循环判断条件;累加)
awk语句1
4)影响控制的其他语句
break
continue
98.AWK数组
(1)数组的定义
数组:一组有某种关联的数据(变量),通过下标依次访问
数组名[下标]=值
下标可以使用数字也可以使用字符串
(2)数组的遍历
for(变量 in 数组名)
使用 数组名[变量]的方式依次对每个数组的元素进行操作
(3)删除数组
delete 数组[下标] 删除数组的某个元素
delete 数组 删除整个数组
(4)命令行参数数组
ARGC 参数个数
ARGV 参数内容
99.AWK数组功能的使用
100.awk函数
(1)算数函数
sin() cos()
int()
rand() srand()
awk 'BEGIN{ srand();print rand()}'
(2)字符串函数
gsub(r,s,t)
index(s,t)
length(s)
match(s,r)
split(s,a,sep)
sub(r,s,t)
substr(s,p,n)
(3)自定义函数
function 函数名(参数){
awk 语句
return awk变量;
}
101.防火墙概述
(1)防火墙分类
CentOS 6 默认的防火墙是iptables
CentOS7默认的防火墙是firewallD(底层使用netfilter)
(2)iptables的表和链
规则表
filter nat mangle raw
规则链
INPUT OUPUT FORWARD
PREROUNTING POSTROUTING
(4)iptables的nat表
(5)iptables配置文件
(6)firewallD服务
102.iptables规则的基本使用演示
(1)iptables的filter表
iptables -t filter 命令 规则链 规则
命令:
-L
-A -l
-A 在已有规则后添加
-l 在第一条添加
-D -F -P
-N -X -E
添加规则
iptables -t filter -A INPUT -s 10.0.0.1 -j ACCEPT
查看规则
iptables -t filter -nL
iptables -t filter -vnL
iptables -vnL
iptables -t nat-vnL
man iptables
103.iptables过滤规则的使用
iptables -t filter -A INPUT -s 10.0.0.2 -j ACCEPT
iptables -t filter -I INPUT -s 10.0.0.2 -j ACCEPT
修改默认policy
iptables -P INPUT DROP
清除规则,不能改默认规则
iptables -F
只删除某一条规则
iptables -D INPUT -s 10.0.0.2 -j ACCEPT
-N 添加自定义规则
-X 删除自定义规则
-E 重命名自定义规则
-s 限制源IP
-d 限制目的IP
iptables -t filter -A INPUT -i eth0 -s 10.0.0.2 -p tcp --dport 80 -j ACCEPT
104.iptables nat表的使用
(1)网络地址转换表
iptable -t nat 命令 规则链 规则
PREROUTING 目的地址转换,
POSTROUTING 源地址转换
iptables -t nat -A PREROUTING -i eht0 -d 114.115.116.1117 -p tcp --dport 80 -j DNAT --to-destination 10.0.0.1
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth1
-j SNAT --to-source 111.112.113.114
(2)iptables的配置文件
/etc/sysconfig/iptables
1)CentOS6
service iptables save|start|stop|restart
2)CentOS7
yum install iptables-service
105.firewallD
(1)firewallD的特点
支持区域"zone"概念
firewall-cmd
(2)systemctl start|stop|enable|disable firewalld.service
查看firewallD状态
systemctl status firewalld.service
查看firewall状态
firewall-cmd --state
查看firewall配置
firewall-cmd --list-all
查看public zone的配置 --zone=public可以省略
firewall-cmd --zone=public --list-interfaces
firewall-cmd --zone=public --list-ports
获取所有的zone
firewall-cmd --get-zones
获取缺省的zone
firewall-cmd --get-default-zone
获取激活的zone
firewall-cmd --get-active-zone
添加https服务
firewall-cmd --add-service=https
添加端口
firewall-cmd --add-port=81/tcp
永久生效需要添加--permanent
然后重新加载
firewall-cmd --reload
移除规则 firewall-cmd --remove-port=80/tcp
106.SSH介绍之Telnet明文漏洞
tcpdump -i any port 23 -s 1500-w /root/a.dump
107.SSH服务演示
(1)sshd_config 服务端配置文件
Port 22 默认端口
PermitRootLogin yes 是否允许root登录
AuthorizedKeysFile.ssh/authorized_keys
netstat -ntpl | grep 22
who
whoami
ssh -p 22 root@192.168.83.11
(2)SSH公钥认证
密钥认证原理
常用命令
ssh-keygen -t rsa 客户端产生
在客户端运行
ssh-copy-id -i /root/.ssh/id_rsa.pub root@服务端ip
scp 客户端文件路径 root@服务地址:目的路径
108.FTP服务器vsftpd介绍与软件安装
(1)FTP协议
主动模式和被动模式(数据链路)
主动模式 :建立连接后,服务器主动给客户端发送请求
被动模式:服务器开启一个大于1024的端口,等待客户端连接
(2)vsftpd服务安装和启动
yum install vsftpd ftp
systemctl start vsftpd.service
建议将selinux改为permissive
getsebool -a | grep ftpd
setsebool -P <sebool> 1
109.vsftpd配置文件介绍
(1)/etc/vsftpd/vsftpd.conf
主要的配置文件
(2)/etc/vsftpd/ftpusers
(3)/etc/vsftpd/user_list
110.vsftp虚拟用户
(1)相关设置项
guest_enable=YES #开启虚拟用户支持
guest_username=vuser #映射用户权限
user_config_dir=/etc/vsftpd/vuserconfig #虚拟用户权限配置文件
allow_writeable_chroot=YES #
pam_service_name=vsftpd.vuser #可插拔验证模块的配置
111.samba服务演示
(1)Samba服务安装
yum install samba
(2)Samba服务配置文件
/etc/samba/smb.conf
[share]
comment = my share
path = /data/share
read only = No
(3)Samba用户的设置
smbpasswd命令
-a 添加用户
-x 删除用户
pdbedit
-L 查看用户
(4)Samba服务的启动
systemctl start | stop smb.service
Linux 客户端
mount -t cifs -o username=user1 //127.0.0.1/user1 /mnt
Windows客户端
资源管理器访问共享
映射网络驱动器
112.NFS服务
(1)/etc/export
/data/share*(rw,sync,all_squash)
(2)showmount -e localhost
(3)客户端使用挂载方式访问
mount -t nfs localhost:/data/share /ent
(4)启动NFS服务
systemctl start | stop nfs.service
113.Nginx基本配置文件
(1)Nginx和Web服务介绍
Nginx(engine x)是一个高性能的web和方向代理服务器
Nginx支持HTTP、HTTPS和电子邮件代理协议
OpenResty是基于Nginx和Lua实现的Web应用网关,集成了大量的第三方模块
(2)OpenResty的下载和安装
yum-config-manager --add-repo https://openresty.org/package/centos/openresty.repo
yum install openresty
(3)OpenResty的配置文件
/usr/local/openresty/nginx/conf/nginx.conf
服务命令
service openresty start | stop | restart | reload
114.使用Nginx配置域名虚拟主机
115.LNMP环境搭建
(1)什么LNMP
Linux Nginx PHP MySQL
(2)LNMP环境搭建
1)MySQL
可以使用mariadb替代
yum install mariadb mariadb-server
修改默认编码
character_set_server=utf8
init_connect='SET NAMES utf8'
systemctl start mariadb.service
2)PHP
PHP安装
yum install php-fpm php-mysql
启动php-fpm
system start php-fpm.service
116.DNS服务的原理
1)DNS介绍
(1)DNS(Domain Name System)域名系统
(2)FQDN(Full Qualified Domain Name)完全限定域名
(3)域分类:根域、顶级域(TLD)
(4)查询方式:递归、迭代
(5)解析方式:正向解析、反向解析
(6)DNS服务器的类型:缓存域名服务器、主域名服务器、从域名服务器
2)安装BIND
(1)/etc/hosts
(2)yum install bind bind-util
/etc/named.conf
named-checkconf 检查配置文件是否正确
(3)systemctl start named.service
nslookup
dig
3)从域名服务器BIND配置文件
zone "test.com" IN{
type slave;
file "slaves/test.com.zone";
masters{10.211.55.3;};
}
4)反向解析配置文件
zone "0.20.10.in-addr.arpa" IN{
type master;
file "10.20.0.zone";
};
117.NAS演示
(1)什么是NAS
NAS(Network Attached Storage) 网络附属存储
NAS 支持的协议NFS、CIFS、FTP
保证数据安全方式 磁盘阵列