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 <接口>
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
下载并解压缩内核
https://www.kernel.org
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< 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 [email protected] (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 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 保证数据安全方式 磁盘阵列