Linux学习笔记

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 <接口> [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

下载并解压缩内核

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 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

保证数据安全方式 磁盘阵列

 

 

 

 

 

 

你可能感兴趣的:(Linux)