Linux操作系统介绍及命令使用分享(建议收藏)

avatar
作者
筋斗云
阅读量:0

Linux系统版本

Ubuntu RedHat CentOS Debian Fedora SuSE OpenSUSE

shell是系统的用户界面.提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。

Linux内核

Linux根分区“/”

在启动的时候需要使用的文件载入内存,有一个分区作为起始分区,这个分区被称为根分区,根是由内核直接访问的。

绝对路径:从顶层/(根)开始的路径

相对路径:从非/(根)开始的路径

./表示当前目录

../表示父级目录

目录是路径的映射符

Linux系统中的目录:

树状目录结构:

/bin:所有可执行的程序

/sbin:管理员可执行的程序

    /usr/bin

    /usr/sbin

/boot:存储系统引导文件;内核、ramfs文件、bootloader(grub)

/dev:设备文件存放目录

/etc:配置文件的存放目录

    /etc/sysconfig:系统网络配置目录

    /etc/init.d:系统服务脚本

/home:普通用户,默认在/home下有一个与其同名的目录,作为用户的家目录

/root:管理员的家目录

/lib、/lib64:库文件

/media:专用挂载位置,通常用来挂载便携式设备

/mnt:专用挂载位置,挂载额外存储设备

/opt:备用目录,但通常用来安装第三方软件

/proc:伪文件系统,系统内核参数的映射

    /proc/loadavg:负载

/sys:伪文件系统,系统级别的用于配置外围设备的参数

/srv:为服务提供数据存放的位置

/tmp:存放临时文件系统

/usr:默认软件,用户工具和应用程序,共享,只读

    /usr/local:默认的软件安装目录c盘

    /usr/lnclude:头文件

    /usr/src:源码安装目录

/var:频繁发生变化的文件

    /var/log:日志文件存放目录

    /var/log/messages

    /var/log/secure:系统用户登录日志

        authentication failure:登陆失败

    /var/lib:变化的状态信息

    /var/lock:锁文件

    /var/run:有些进程在运行时产生的数据

    /var/cache:缓存

Linux命令行的辅助操作:

  1. Tab键:自动补齐
  2. 反斜杠"\":强制换行
  3. 快捷键ctrl+u:清空至行首
  4. 快捷键ctrl+k:清空至行尾
  5. 快捷键ctrl+l或 clear:清屏
  6. 快捷键ctrl+c:取消本次命令编辑
  7. 快捷键ctrl+d:相当于输入exit,退出
  8. 快捷键ctrl+a:行首
  9. 快捷键ctrl+e:行尾

Linux文件类型:

  1. -:普通文件
  2. d:目录文件
  3. b:块设备文件(block)磁盘设备文件
  4. c:字符设备文件
  5. l:符号连接文件
  6. p:命令管道文件
  7. s:套接字文件

linux命令大全

修改主机名称

    hostnamectl set-hostname +名称

    logout

重启网卡

    systemctl restart network

获取帮助命令

内部命令   help 命令    查看bash内部命令的帮助信息

外部命令   命令--help   适用于大多数外部命令

使用man命令阅读手册页

    man命令

    使用page up和page down键翻页

    按q或Q键推出阅读环境,按“/”键查找内容

用type命令可以分辨内部命令外部命令

文件和目录

cd /home 进入 '/ home' 目录'

cd .. 返回上一级目录

cd ../.. 返回上两级目录

cd 进入个人的主目录

cd - 返回上次所在的目录

pwd 显示工作路径

1s:查看当前目录的文件及目录

-l=ll长格式

-t按照时间排序

-h做单位转换

-a显示隐藏文件

-A与-a参数类似,显示目录下除了"."与".."以外的其他所有文件

-ld显示目录自身属性

-R递归显示

-S以文件大小排序

-1(一)以列表形式只输出文件及目录

du:统计当前路径下所有文件或目录大小

-s统计当前目录下文件的总大小

-h以大小单位方式显示

touch:创建文件(最主要的功能是更新文件的时间戳)

-c不创建任何文件,更新所有属性时间

-a更新文件最近一次访问时间

-m更新文件最近一次修改时间

拓展touch /{1..100}.txt (创建100个文件)

stat:显示文件的详细信息(显示文件最近一次访间,修改,改变时间)

mkdir:创建目录

-p创建多級目录

-ⅴ显示创建过程

cp:复制

例:cp源 目标

-r递归复制(可以复制目录)

-f强行复制

-p复制过来,保存文件原有属性(只有管理员有此权限)

-P复制链接文件

-a归档复制,保持文件及目录、连接文件原有的所有属性(用于备份)

-v显示复制过程

rm:删除文件

-f强制不提示删除

-r递归删除

mv:移动/重命名文件

-f强制移动

-v显示过程

which:来查看一个可执行命令的具体路径

find:精细查找文件或目录

    -name按名称查找

    -size按文件大小查找

    -user按文件属性查找

    -type按文件类型查找

cat:查看文件内容

    -n带行号显示

    -s多个连续的空白行显示为一个空白行

    -A显示文件里所有字符

more/less –N:分屏查看(q退出)   less –N:带行号显示

tac:类似于cat,倒序查看文件内容

tail{-n #或-#}:查看文件尾部或尾部的第几行

head{-n #或-#}:查看文件开头或开头的第几行

tailf=tail –f:实时查看

-f或f实时查看

-F实时查看,并不断尝试

wc:字符统计显示的值为 行、单词个数、字节(包括空白字节)

-l只显示行

    -w只显示单词数

    -c只显示字节数

    -m只显示字符数

压缩、解压缩命令(压缩格式:gz,bz2,xz,zip,Z)

压缩算法:算法不同,压缩比也会不同

gzip:.gz(仅用于文件) 会删除原文件

    gzip 文件名:压缩(压缩完成后会删除源文件)

        -d解压缩

    gunzip 压缩名:解压完成后会删除原文件

    zcat 压缩包名:不解压查看压缩包里面的内容

bzip2:.bz2(仅用于文件)  比gzip有着更大的压缩比的压缩工具,使用格式相似  会删除原文件

    bzip2 要压缩的文件名

        -d解压缩

    bunzip2 压缩包名:用于解压缩

        -k压缩时保留原文件

    bzcat不解压查看压缩包里面内容

zip:既归档又压缩的工具(用于压缩文件或目录及目录下文件)不会删除原文件

    自动压缩目录下的所有文件:zip name.zip a/*

    zip压缩后的名.zip 要压缩的目录或文件(压缩后不删除原文件)

    unzip压缩包名.zip:解压缩

    zcat 压缩包名:不解压查看压缩包里面的内容

xz: .xz(仅用于文件,使用时需要用yum安装xz压缩工具包)会删除原文件压缩比最好,速度慢

xz  要压缩的文件

-d解压缩

-k压缩时保留原文件

unxz用于解压

xzcat不解压查看压缩包里面内容

tar:.tar归档工具(最好用相对路径)不会删除原文件

tar 参数  归档后的名称(必须为.tar)要归档的文件或目录。

-f 文件名.tar:操作的归档文件

-p 打包解包时保留文件及目录的权限

-v显示过程

-tf 查看归档文件内容

-cf 创建归档文件(tar -cf 压缩包名.tar  目录或文件)

-rf 添加文件到已经压缩的tar文件(tar rf ***.tar /root/a.txt)

-xf 展开归档(tar -xf 压缩包名.tar)(可以跟-zxf -jxf -Jxf)

-C释放的目的地(tar xf a.tar -C /usr/)

-tpf 不展开归档,直接查看归档了那些文件(可以跟-zxf  -jtf)

--xattrs 归档时,保留文件的扩展属性信息

-zcpf  归档并调用gzip 压缩或zip压缩(归档压缩.tar.gz 或  .tar.z 或.tar.zip)

   tar  -zcf  name.tar.gz name 或 tar  -zcf  name.tar.z  name

-zxpf :调用gzip/zip解压缩并展开归档 -z 选项可省略

-jcpf 归档并调用bzip2压缩(归档压缩.tar.bz2  或  .tar.bz)

tar -jcf name.tar.bzip2 name或tar -jcf name.tar.bz name

-jxpf :调用bzip2解压缩并展开归档 tar.bz2或tar.bz

-Jcpf归档并调用xz压缩(tar  -Jcf  xx.tar.xz  文件名/目录)

-Jxpf 解压.tar.xz的压缩包(用于红帽6版本)

如果对文件压缩时出现tar:从成员名中删除开头的“/”报错,但依然成功压缩

造成该问题的原因是因为使用相对路径和绝对路径引起的,另外还有一种解决方法时使用相对路径

 -P  可以解决这个错误

Vim编辑器的使用

vim是vi编辑器增强版:文本编辑器,字处理器

三种模式:末行、输入、编辑

末行-->编辑:按两下esc                     

全屏编辑器,模式化编辑器

- 移动到光标所在行的上一行行首

i在当前光标所在字符的前面,转为输入模式

I 在当前光标所在行行首,转换为输入模式

a在当前光标所在字符的后面,转为输入模式

A在当前光标所在行的行尾,转入输入模式

o在当前光标所在行的下方,新建一行,并转为输入模式

O在当前光标所在行的上方,新建一行,并转为输入模式

R替换光标处的单个字符

在末行模式中可以执行的命令

:nd n表示数字,d表示删除,结合起来为删除第几行

:n 2nd表示删除第n行2n行中间的所有行(格式:..,$d)

:X加密或取消加密

:!ls/root可以执行命令

:q/q! 退出

:wq/x/wq!保存退出

:e!撤销所有操作

查找

/要搜索的内容:从首部向文件尾部查找

?要搜索的内容:从尾部向文件首部查找

   n:从上向下查找下一个

   N:从下向上查找下一个

查找并替换

在末行模式下使用s命令

单行替换:s/要替换的内容/替换后的内容/g

全文替换:%s/要替换的内容/替换后的内容/g

显示或取消显示行号

:set number

:set nu 

:set nonu

移动光标(编辑模式)

逐字符移动

K

h  l右(空格键)

j下或(回车键)

行内跳转

shift +i、0、^ 、home 行首

shift+a 、$ 、end     行尾

行间跳转

G/]] 最后一行

nG 跳转至第n行

1G、gg 、[[ 第一行

dG 删除当前到行尾所有行

d1G删除当前到行首所有行

末行格式下,直接给出行号即可

翻屏

Ctrl+f:向下翻一屏

Ctrl+b:向上翻一屏

Ctrl+d:向下翻半屏

Ctrl+u:向上翻半屏

删除单个字符

X删除光标所在处的单个字符(向后删除)

#x删除光标所在处及向后的共#个字符

删除命令d

dd 删除当前光标所在行

粘贴命令 p

复制命令y(用法同d命令)

yy:复制一整行内容

替换R(替换单个字符)

R:进入替换模式,输入的字符替换光标后的字符,按esc键退出替换模式

撤销编辑操作u

u撤销前一次的编辑操作

连续u命令可撤销此前的n次编辑操作

编辑文件内容后,在编辑模式下可直接保存退出ZZ

vim+n 打开文件,并定位在文件第n行(格式vim +2文件名)

vim+ 打开文件,定位至最后一行(格式vim + 文件名)

Linux命令扩展-1

reset重新初始化屏幕

tty显示当前终端对应终端设备文件

uname-r/-a:查看linux内核版本号

cat/etc/redhat-release:查看系统版本

Linux版本号 X.YY.ZZ

X:主版本号、YY:次版本号、ZZ:末版本号,YY奇数- 开发版,增加新功能,偶数- 稳定版,修改错误

hostname/uname-n查看主机名

file 文件名 查看文件类型

cd 切换目录、cd..退到上级目录、cd - 返回上次所在目录

pwd查看当前所在路径

cal 显示日历  格式cal 年份

-1只显示当前月份(默认)

-3显示上个月、当月和下个月

-s周日作为一周第一天

-m周一用为一周第一天

-j输出在当年的第几天

-y输出整年

-V显示版本信息并退出

bc 计算器

exit退出当前登录

watch周期性的执行指定命令,并以全屏方式显示结果

格式:watch -n # ‘命令’

cat /proc/meminfo  查看系统内存信息

cat /proc/cpuinfo   查看cpu信息

history查看命令历史

    -c清空历史命令

   ! 编号 重执行命令

echo打印输入的字符 echo $ 输出变量

tree查看目录树

shutdown -r now   #重启

shutdown -h now   #关机

关机 init 0 、halt、poweroff

重启 init 6、reboot

linux软件包安装

RPM Package Manger

    由Red Hat公司提供,被众多Linux发行版本所采用。

    建立统一的数据库文件,详细记录软件包安装、卸载等变化信息,能够自动分析软件包依赖关系。

    RPM包是经过编译的,不能看到源代码,但是它安装更快,报错更容易解决,只有依赖性问题。RPM包不需要指定安装位置,它会安装到系统默认位置。

RPM包默认安装路径

/etc/ 配置文件安装目录

/usr/bin/ 可执行的命令安装目录

/usr/lib/ 程序所使用的函数库保存位置

rpm包格式

rpm包(二进制格式):组成部分

    主包 bind-9.7.1-1.el5.i586.rpm

    子包 bind-libs-9.7.7-1.el5.i586.rpm

重建数据库

    rpm --rebuilddb:重建数据库,一定会重新建立

    rpm –initdb: 初始化数据库,没有才建立,有就不用建立

rpm 选项 /路径/rpm软件包名

    -i安装软件包

    -h以#显示进度,每个#表示2%

    -v显示详细过程

    -e软件包名 #卸载软件包

    --nodeps忽略依赖关系(如果有依赖关系,软件装上去也运行不了)

    --fore强行安装,可以实现重装或升级

升级(注意不要升级内核)

    rpm –Uvh /路径/新rpm软件包名:如果装有老版本则升级,否则安装

    rpm –Fvh /路径/新rpm软件包名:如果装有老版本,则升级,否则退出

查询已安装的rpm包

    -qa 查询已安装的所有安装包

    -qi 查询指定包的说明信息

    -ql 查询指定包安装后生成的文件列表

    -qc 查询指定包安装的配置文件

    -qd 查询指定包安装的帮助信息

    -qf /路径/文件名 查询文件所属的软件包

查询尚未安装的rpm包

    rpm –qpi /路径/软件包名:查询其说明信息

    rpm –qpl /路径/rpm软件包名:安装以后会生成的文件

示例

    rpm –ivh /media/Packges/lynx-2.8.8-0.3.dev15.el7.*86_64.rpm

    安装有依赖关系的多个软件时,被依赖的软件包需要先安装,可同时指定多个.rpm包文件进行安装。

    卸载有依赖关系的多个软件时,依赖其他程序的软件包需要先卸载,可同时指定多个软件名进行卸载。

yum

    yum是一个在fedora和RedHat以及CentOS中的shell前端软件包管理器。基于rpm包管理,能够从指定的服务器自动下载rpm包并且安装,可以自动处理依赖关系,并且一次安装所有依赖的软件包,无需繁琐的一次次下载、安装。

#挂载光盘镜像

    mount /dev/sr0 /media/

    mount: /dev/sr0 写保护,将以只读方式挂载

#把其他yum 源移动到一个目录中不让系统加载使用

    cd /etc/yum.repos.d/

    mkdir a

    mv * a

#构建新的本地yum源

    vim yum.repo

        [base] yum仓库名

        name=base yum仓库名

        baseurl=file:///media 指定光盘挂载的位置

        enabled=1 启用yum仓库

        gpgcheck=0 默认是0不检测 1检测 检测光盘RPM包的合法性

#清除本地yum源缓存

    yum clean all

#构建本地yum缓存

    yum makecache

使用示例 yum –y 不进行交互

    安装:yum -y install 软件名

    卸载:yum -y remove(或erase) 软件名

    升级:yum -y update 软件名

源码包介绍

    源码包是开源的,比RPM包安装更自由,但是它安装更慢,更容易报错;

源码包安装位置:源码包是人为手工设置安装位置,安装在指定位置当中,一般是/usr/local/软件名/

源码包安装的好处:可以自行调整编译参数,最大化地定制安装结果

源码安装可以选择最新的软件包,而Linux系统(包括FreeBSD)自带的软件包一般都是最稳定的版本,但不能保证是最新的

源码安装的性能是最优异的

源码包安装的软件卸载时极为方便简单,更重要的是,他比较安全,尤其是对线上生产环境而言

迁移也比较方便,如果不涉及系统库文件,复制到另一台机器上也可以使用

完整性校验

md5sum,sha512sum校验工具

校验示例

    Apache Tomcat® - Apache Tomcat 8 Software Downloads

    http://mirror.bit.edu.cn/apache/tomcat/tomcat-8/v8.5.42/src/apache-tomcat-8.5.42-src.tar.gz

  1. 确认源代码编译环境

需安装支持C/C++程序语言的编译器

rpm –qa gcc

gcc -4.8.5-36.el7_6.2*86_64

rpm –qa gcc-c++

gcc -c++-4.85-36.el7_6.2.*86_64

  1. 解包

习惯上将软件包释放到/usr/src/目录

解包后的源代码文件位置/usr/src/软件名-版本号/

  1. 配置

使用源码目录中的configure脚本

执行“./configure –help” 可查看帮助

典型的配置选项:--prefix=软件安装目录

  1. 编译

执行make命令

  1. 安装

执行make install命令

示例

    tar xf nginx-1.16.0.tar.gz

    cd nginx-1.16.0/

    ./configure  -–prefix=/usr/local/nginx

    make

    make install

    cd /usr/local/nginx/

    cd conf/sbin/

    ./nginx   启动应用

    ss –tnl 验证程序是否启动  浏览器访问验证

用户及文件权限管理

用户账号

    管理员用户(UID=0)

    普通用户(UID=>500)

    程序用户(1=<UID<500)(不可登录)

UID:UID(用户标识号)

id 用户名:可以查看用户UID

    -gn     查看用户基本组

    -u 查看UID

    -g  查看GID

用户账号文件(用户名称,宿主目录,登录shell等基本信息)/etc/passwd

root:     x:     0:    0:   root:   /root:    /bin/bash

账号名 密码占位符   UID  GID  用户备注 宿主目录 登录的shell

登录的shell若为/sbin/nologin,则不能登录

系统中的用户及密码文件/etc/shadow

root:$6$K5jsNO9pxE3RbD40$Eiw1N66vtN6ZvrRwNzwNmjhfVKqpXjVN8WbK2P03.6ck7pLWJsYPPmIW5qfzsr5BVu2GnxK..Kq8m/HBtraDq0::0:99999:7:::

    第一字段 root: 用户名

    第二字段 $6……Dq0: 密文

    第三段 :账号上次修改时间距1970.01.01过去多少天

    第四段 0:距上次密码修改起多少天内不能再次修改密码,单位“天”,“0”表示随时可以修改密码

    第五段99999:密码过期天数(99999表示永久可以使用)

    第六字段7:强制密码修改提醒时间

    第七字段 :密码过期后经过多少天账号被禁用

    第八字段 :密码过期时间,若设置则显示为过期日期距1970.01.01多少天

useradd=adduser:创建用户  格式:useeradd 选项 用户名

    -u 创建用户时指定用户UID

    -e 创建用户时指定失效时间,年月日

    -d 创建用户时指定家目录名

    -g 创建用户时指定用户基本组名

    -G 创建用户时指定附加组名

    -M 创建用户时不创建主目录

    -s 指定使用shell

创建用户的模板文件

vim /etc/login.defs

创建账号时会从/etc/skel/目录中复制用户初始文件到其家目录

.bash_logout:每次退出时要执行的文件

.bash_profile:每次登录时要执行的文件

设置/更改用户口令 passwd   格式:passwd 选项 用户名

    -d 删除用户密码

    -l 锁定用户

    -S 查看账号的密码状态

    -u 解锁用户

    -x 密码最长有效时间(天)

    -n 密码最短有效时间(天)

    -w 密码过期前警告时间(天)

    -i 密码过期后多少天被禁用(天)

修改用户账户的属性 usermod  格式:usermod 选项 用户名

    -l 更改用户的用户名{usermod –l 新用户名 用户名}

    -L 锁定用户账号

    -U 解锁用户账号

    -s 更改shell环境

删除用户账号 userdel  格式:userdel 选项 用户名

    -r 连同账户家目录一起删除

finger:查询用户账号的详细信息  格式:finger 用户名

userswwho、whoami:查询已登录到主机的用户信息

用户组管理

用户组类别:

    管理员组 管理员所在的组 

    基本组(私有组)创建账号会创建一个同名的组

    附加组(共有组)额外添加的组

GID:GID(组标识号)

组账号文件

    /etc/group:保存组账号基本信息

    /etc/gshadow:保存组账号的密码信息

groupadd:创建组

    -g 指定GID

gpasswd:添加删除组成员 gpasswd 组名 设置组密码

    -a 用户名 组名:把某个用户添加到指定组

    -d 用户名 组名:把某个用户从指定组中删除

    -M 定义组成员列表,以逗号分隔

groupdel:删除组  格式:groupdel 组名

groups:查询用户所属的组  格式:groups 用户名

文件权限归属管理

文件权限

读权限 r=4:允许查看文件内容,显示目录列表

写权限 w=2:允许修改文件内容,允许在目录中新建、移动、删除文件或子目录

可执行 x=1:允许运行程序,切换目录

归属(所有权)

    属主:拥有该文件或目录的用户账号

    属组:拥有该文件或目录的组账号

设置文件和目录的权限chmod  

格式:chmod 777 文件/目录 或chmod u+/-/=[rwx] 文件/目录

    -R 递归修改指定目录及其下所有文件的权限

    u 代表属主

    g 代表属组

    o 代表其他

设置文件和目录的归属 chown

chown 属主  文件/目录

    chown :属组 文件/目录

    chown 属主:属组 文件或目录

        -R:递归修改指定目录下所有文件、子目录的归属

权限掩码 umask

作用:控制新建的文件或者目录的权限

默认权限去除umask的权限就为新建的文件或者目录的权限

满权限-umask=创建文件的权限

umask的查看:umask

设置umask值:umask 020

Linux命令扩展-2

cut –d分隔符 –f打印的列 文件名

 -c输出 这些 字符

sort 排序  格式:sort 参数 文件

    -n 按照数值大小排序(正向排序)

    -r 逆向排序

    -t 指定字段排序分隔符(默认空格)

    -k 以哪个区间进行排序(-t和-k一起使用

    -u 排序后相同的行显示一次

uniq: 去除重复行或统计

    -d 只显示重复的行

    -D 显示重复行所有字符

    -c 显示重复的行说明重复的次数

    -u 仅显示不重复的行

date:显示系统时间

    +%F 、+%Y-%m-%d:年月日

    +%T 、+%H:%M:%S:时分秒

    %Y 四位年份

    %m

    %d

    %H

    %M

    %S

    -s “年月日 时:分:秒”修改主机时间

同步主机时间:ntpdate pool.ntp.org(ntp:基于UDP的网络时间协议

ln 参数 源文件 目标文件

    -s:创建软连接

    -v:显示创建过程

硬链接:(相当于copy)

  1. 只能对文件创建,不能应用于目录;
  2. 不能跨文件系统
  3. 创建硬链接会增加文件被链接的次数
  4. 删除链接源文件后硬链接文件还在

软链接(符号链接):ln –sv 源文件绝对路径 目标文件绝对路径(快捷方式)

  1. 可以用于目录,文件
  2. 可以跨文件系统
  3. 不会增加被链接文件的链接次数
  4. 删除链接源文件后软链接的文件不在
  5. 其大小为指定的路径所包含的字符个数

总结

  1. 每个目录下都有一个硬链接“.”,和对应上级目录的硬链接“..”
  2. 在父级目录中创建子目录,会增加父目录的链接次数(每个子目录里都有..来指向父目录)
  3. 在父目录中创建文件,不会增加父目录链接次数

密码安全性策略

    足够复杂

    够长

    交叉应用数字、大写字母、小写字母和特殊中的至少三种

    尽量避免使用易猜测的密码

    定期更换

禁止用户登录并带提示(解禁更改shell即可):

useradd –s /sbin/nologin test

passwd test

echo “账号被禁用,请联系管理员[please contact the administrator]”>/etc/nologin.txt

su –test

账号被禁用,请联系管理员[please contact the administrator]

find 查找路径 查找条件 文件名

查找条件:

    -name ‘文件名’:对文件名做精确匹配  find /路径 –name 文件名

    -user 用户名:根据属主查找  find /root –user root

    -group 组名:根据属组查找

    -uid UID:根据UID查找  find /root –uid

    -gid GID:根据GID查找

    -type:根据文件属性查找 find /etc –type d

        f 普通文件

        d 目录

        c 字符设备

        b 块设备

        l 链接文件

        P 管道设备

        S 套接字文件

    -size[+表示大于,-表示小于不带+-号表示等于],常用单位:k、M、G

        find /etc –size 10k

    组合条件

        -a、-and:与,满足两个条件

        -o、-or:或,多个条件满足一个条件即可

    find /tmp –user root –a –type d

过滤一个文件中的关键字:grep “关键字” 文件名

I/O重定向:

    <:重定向输出

    >:重定向覆盖写入

    >>:追加输入重复定向

    <<:追加输出重定向

    1>:正确重定向echo“www”1>1.txt 2>2.txt

        表示将正确的信息输入到1.txt文件中,将错误的信息输入到2.txt文件中

    1>>:表示正确追加写入

    2>:重定向错误覆盖输出

    2>>:错误追加

    &>:标准重定向,将正确及错误反馈信息输入至一个文件

    &>>:将正确及错误信息追加到一个文件中

    命令||命令:表示前一个命令执行不成功,后面的命令才执行

    命令&&命令:表示前一个命令执行成功后面的命令才执行

    命令;命令:表示无论前一个命令执行是否成功,都执行后面的命令

    |:管道,将前一个命令的输出作为下一个命令的输入

        echo “123456****”|passwd  --stdin userl(给一个用户设置密码)

sync 同步数据

磁盘管理

磁盘结构:

1.硬盘的物理结构

盘片:硬盘有多个盘片,每个盘片2面

    磁头:每面一个磁头

2.硬盘的数据结构

扇区:盘片被分为多个扇形区域,每个扇形区存放512字节的数据

磁道:统一盘片不同半径的同心圆

柱面:不同盘片相同半径构成的圆柱面

3.硬盘存储容量= 磁头数 * 磁道(柱面)数 * 每道扇区数 * 每扇区字节数

4.可以用柱面/磁头/扇区来唯一定位磁盘上的每一个区域

磁盘接口

1.IDE (并口)

2.SATA(串口)

速度快

纠错能力强

3.SCSI

转速快

CPU占用资源低

支持热拔插

MBR

1.定义:MBR(Master Boot Record)主引导记录

2.位置:MBR位于硬盘的0柱面、0磁道、1扇区的前512字节(第一个物理扇区处)

3.MBR中包含硬盘的主引导程序和硬盘分区表。分区表有4个分区记录区,每个分区记录区占16个字节,共64字节。446字节存放主引导程序,2字节校验。

磁盘分区表示

1.linux中将硬盘等设备均表示为文件

2.磁盘分区结构

硬盘中的主分区数目只有4个,因此主分区和扩展分区的序号也就限制在1~4。扩展分区为逻辑分区,逻辑分区的序号始终从5开始。

        

文件系统类型

  1. XFS文件系统

存放文件和目录数据的分区

高性能的日志型文件系统

Centos7系统中默认使用的文件系统

  1. EXT4,第四代扩展(Extended)文件系统

存放文件和目录数据的分区

典型的日志型文件系统

系统中默认使用的文件系统

  1. SWAP,交换文件系统

为Linux系统建立交换分区,类似于Windows系统的虚拟缓存

  1. Linux支持的其它系统文件类型

FAT16、FAT32、NIFS、NTFS、JFS……

fdisk:查看或管理磁盘分区  格式:fdisk /dev/磁盘设备 (只能分2T以下的硬盘)

    查看当前磁盘fdisk –l 磁盘设备 或fdisk 磁盘设备

    p 显示当前硬件的分区

    n 创建新分区

        e扩展分区

        p主分区

    d删除一个分区

    w保存退出

    q不保存退出

    t修改分区类型

        L查看分区类型

    l显示所支持的所有类型

超过2T的磁盘用 parted命令划分分区 parted  -l 查看新硬盘

常用命令说明:q/quit 保存并退出

           p/print 打印 查看

           mklabel 改变磁盘文件类型

           mkpart  分区

           rm n    删除某分区

查看已分的分区    ls –l /dev/sdb*

格式化分区  mkfs.ext4 /dev/sdb2

挂载使用  mount /dev/sdb* /要挂载的目录/

误删除分区救援   rescue

mkfs 格式化文件系统

    -t 指定格式成什么类型的文件系统

    -b 指定block大小字节

    -q 不显示任何信息

    -l inode 大小

    -U 设置UUID号

    -N 设置inode数量

mkfs –t 文件类型 磁盘设备  或  mkfs.文件类型 磁盘设备

mkswap 创建交换文件系统  (swap 交换文件系统)

    mkswap 分区设备       创建交换分区

    swapoff 分区设备      关闭交换分区

    swapon 分区设备       开启交换分区

    swapon -s             查看交换分区信息

    swapon -a   启动/etc/fstab中的所有交换分区

    swapoff -a  关闭/etc/fstab中的所有交换分区

示例

    基于文件创建启用swap分区示例(也可以测试磁盘性能)

        dd if=/dev/zero of=/var/swapfile bs=1M count=1024

解释:从/dev/zero分区(无限大小)取大小,复制到/var/目录下取名叫swapfile,每次取1M 取1024次

        mkswap /var/swapfile  创建交换分区

        swapon /var/swapfile  启用交换分区

    创建虚拟分区swapfile ,然后启用虚拟分区

swap 多大为好:2G、4G =4G     2G- =2*物理内存    8G+ =4G

cat /proc/meminfo |grep SwapTotal   查看交换分区的大小

free -m 查看内存(以MB)

blkid +磁盘设备  查看磁盘UID

mount 挂载文件系统 ,ISO镜像

    mount 查看当前挂载

    mount [-t 类型] 存储设备 挂载点目录   mount /dev/sd** /media/

    mount -o -loop ISO镜像文件 挂载点目录

    mount -a  挂载/etc/fstab中已记录的所有挂载

umount 卸载已挂载文件系统

    umount 存储设备位置或umount 挂载点目录

    umount -a 卸载所有/etc/fstab已记录的挂在(!危险操作

如果卸载不掉,用下列命令: umount –lf [挂载点]

设置文件系统的自动挂载

/etc/fstab 配置文件,此目录内包含需要开机后自动挂载的文件系统记录

default 默认

auto 系统自动挂载  

noauto 开机不自动挂载

user 任何用户都可以挂载

nouser 只允许管理可以挂载

r0 按只读权限挂载

rw 按读写权限挂载

dump 备份设置,为1时,允许dump程序进行备份,为0时忽略备份

fsck 检查磁盘,为0时,永远不检查,根分区永远为1,其他分一般为2

df 查看文件系统分区情况及block  格式:df 选项 文件

    -h 显示磁盘空间大小

    -i 显示磁盘inode使用情况

    -T 查看洗盘格式

查看UUID

    blkid 查询或查看磁盘设备的相关属性

        blkid /dev/设备名

blkid /dev/sdb1 >>/etc/fstab

LVM逻辑卷(Logical Volume Manager)

    作用:动态调整磁盘容量,从而提高磁盘管理的灵活性

    注意:/boot分区用于存放引导文件,不能基于LVM创建

LVM基本概念

PV (Physical Volume),物理卷

    整个硬盘,或使用fdisk等工具建立普通分区

    包括许多默认4M大小的PE(Physical Extent,基本单元/物理单元)

    

VG(Volume Group)卷组

   

LV(Logical Volume)逻辑卷

    从卷组中分割出的一块空间,用于建立文件系统

常见的LVM管理命令

创建PVpvcreate 设备名1  设备名2  例:pvcreate /dev/sdb* /dev/sdb*

创建vgvgcreate 卷组名 物理卷名1  物理卷名2   例:vgcreate vg名字 /dev/sdb* /dev/sdb*

创建lvlvcreate –l PE数 –n 逻辑卷名 卷组名    例:lvcreate –l PE数 –n lv01 vg01

缩减VG:首先要手动将这个pv数据移动到其他地方,然后pvmove 磁盘名 删除要缩减的pv名

    pvmove /dev/sdb* /dev/sda*    将/dev/sdb*这个磁盘的数据移动到其他pv中

    vgreduce vg名 磁盘名           减小vg大小

    vgreduce testvg /dev//sdb*    将/dev/sdb*从vg中移除

    pvremove 磁盘名                 移除vg中减小掉的pv

扩容VG:首先保证还有可用的PV卷,才可扩容VG

    将磁盘转化为PV

vgextend vg名 磁盘名            扩展vg大小

lvreate –L 5G testlv testvg

lvcreate –l 100%VG –n lv01 vg01    (一般用lvexten –l PE数 /dev/vg01/lv01

创建完成后直接mke2fs格式化/dev/vg名/lv名

mount挂载使用

lvm在线扩容:首先保证还有可用的PV卷,才可扩容VG

    先扩展lv物理容量

lvextend –L 大小(不要超过剩余VG大小) lv名

                -L[不带+是扩展到,带+号表示扩展了]

                -l 按照pe大小看来扩展

示例:lvextend –L 8G /dev/vg*/lv*

再扩展lv逻辑容量

        resize2fs /dev/vg名/lv名 大小

        resize2fs –p 表示扩展到最大 /dev/vg*/lv*

在contos7中,如果文件系统是xfs. 执行resize2fs报错

    解决办法:执行 xfs_growfs /dev/vg01/lv01

卸载LVM

先卸载挂载 umount 挂载路径

卸载顺序:lv 、vg、 pv

LV lvremove /dev/vg01/lv01

Vg vgremove vg01

Pv pvremove /dev/sd**

附加命令:重读分区表:partprobe /dev/sd*

扩展:快照卷(相当于灾备)

    用于备份某一不能超出快照卷大小时段卷组上的文件

  1. 生命周期为整个数据时常,在这段时长内,数据的增长量不能超出快照卷大小
  2. 快照卷应该是只读的
  3. 跟原卷在同一卷组内

服务器RAID

磁盘阵列介绍

RAID简介:RAID(Redundant Array of lnexpensive Disks)称为廉价磁盘冗余阵列。RAID的基本想法是把多个便宜的小磁盘组合到一起,成为一个磁盘组,使性能达到或超过一个容量巨大、价格昂贵的磁盘。

RAID有两种:硬件RAID技术软件RAID技术

RAID级别介绍(每块磁盘大小应相等,否则按最小磁盘来计算总大小)

    RAID 0也称条带模式(striped),把连续的数据分散到多个磁盘上存取,当系统有数据请求就可以被多个磁盘并行的执行,每个磁盘执行属于他自己的那部分数据请求。这种数据上的并行操作可以充分利用总线的带宽,显著提高磁盘整体存取性能。读取和写入是在设备上并行完成的,读取和写入性能将会增加。RAID 0没有数据冗余,无法恢复数据

    RAID 1又称为镜像(Mirroring),一个具有全冗余的模式。把用户写入一个磁盘的数据百分之百的自动复制到另一个磁盘上,从而实现存储双份的数据优点:可靠性高。缺点:有效容量减小到总容量的一半。

    RAID 4:需3块或更多的磁盘。他在一个驱动器上保存校验信息,并以RAID 0方式将数据写入其他磁盘。因为一块磁盘是为校验信息保留的,所以阵列大小为(N-1)*S,  S阵列磁盘中最小驱动器大小,N:磁盘数。最多允许一块磁盘出现故障缺点:在大量写入数据时很容易造成校验磁盘的瓶颈。

    RAID 5结合大量物理磁盘并且保留一些冗余,可以用在3块或更多的磁盘上并使用0块或更多的备用磁盘。RAID 5大小:(N-1)*S

    RAID 5和RAID 4的区别:RAID 5校验信息均匀分布在各个驱动器上,可以有效避免RAID 4中出现的瓶颈问题。最多允许一块磁盘出现故障当出现多块磁盘出现故障,所有数据都会丢失

    RAID 6在RAID 5基础上扩展而来,在RAID 5基础上额外加一块校验磁盘,最少需要4块盘最多允许两块磁盘发生故障。

    RAID 1+0最少用4块盘(必须为偶数)。有冗余,读写快

    RAID 0+1最少用4块盘(必须为偶数)。有冗余,读写快

    RAID 5+0:最少用6块盘,具有RAID 5和RAID 0的共同特性。先用3块盘组成RAID 5,然后再由至少两组RAID 5组成RAID 0。  优点:高可靠性存储,高读取速度,高数据传输性能

RAID优缺点

RAID级别定义

mdadm命令  实现软件RAID,跟随不同选项作用不同  格式:mdadm 选项 参数

    -C/--create:创建一个新的软RAID,后面接RAID设备名称。例:/dev/md0 /dev/md1

    -A/--assemble:加载一个新的软RAID,后面跟阵列以及设备名称

    -S/-stop:停止指定的RAID设备

    -D/--detail:输出指定RAID设备的详细信息

    -s/--scan:扫描配置文件或/proc/mdstat文件来搜索软RAID的配置信息,该参数不能单独使用,只能配合其他参数才能使用

    -l/--level:设置RAID的级别,例:“--level=5”则代表创建阵列的级别是RAID 5

    -n/--raid-devices:指定阵列中活动磁盘的数目

    -x:指定阵列中备用磁盘数

    -G/--grow:改变在用阵列的大小或形态

    -v/--verbose:显示细节

例:mdadm –Cv /dev/md5 –l 5 –n 3 –x 1 /dev/sdb1 /dev/sdc1 /dev/sdd1  创建raid 5

mkfs.xfs /dev/md5  格式化raid 5

mount /dev/md5 /要挂载的目录   挂载

阵列卡(raid卡)

    阵列卡是实现RAID功能的板卡,由I/O处理器、硬盘控制器、硬盘连接器和缓存等构成

    RAID卡的接口:IDE接口、SCSI接口、SATA接口、SAS接口

系统引导过程与服务控制

Contos7启动过程

开机进行BIOS自检à读MBR引导à加载GRUB界面à加载内核à启动systemd程序à读取系统运行级别à系统初始化à并行启动各种服务à显示用户登录界面

BIOS加电自检-->MBRboot loader引导-->加载grub2菜单-->加载Kernel初始化{使用 initramfs)/vmlinuz 内核映像}-->启动 systemd第一个程序)-->读取系统运行级别default.targete

    1. BIOS加电自检(检测计算机硬件信息)
    2. MBR(boot loader)引l导装载程序,centos7是grub2
    3. 加载装载程序的配置文件:/etc/grub.d/、/etc/default/grub,/boot/grub2/grub.cfg
    4. 加载initramfs驱动模块
    5. 加载内核选项
    6. 内核初始化,centos7使用systemd代替init
    7. 执行initrd.target所有单元,包括挂载/etc/stab
    8. 从initramfs根文件系统切换到磁盘根目录
    9. systemd执行默认target配置,配置文件/etc/systemd/system/default.target
    10. systemd执行sysinitarget初始化系统及basic.target准备操作系统
    11. systemd启动multi-user.target下的本机与服务器服务
    12. systemd执行multi-user.target下的/etc/rc.d/rc.local
    13. systemd执行multi-user.target下的getty.target及登录服务
    14. systemd执行graphical需要的服务

在centos7系统中,init进程软链到了systemd。此时systemd成为linux第一个进程(PID=1),接管系统启动。

systemd概述

SystemdLinux操作系统的一种init软件,CentOS7系统中采用了全新的Systemd启动方式取代了传统的SysVinit。Systemd启动方式使系统初始化时诸多服务并行启动大大增高了开机效率。CentOS7系统中“/sbin/init”“/lib/systemd/system”的链接文件换言之,CentOS7系统中运行的第一个init进程是lib/systemd/system。systemd守护进程负责Linux的系统和服务。systemctl用于控制Systemd管理的系统和服务状态.

systemctl 控制类型 服务名称   系统服务控制(systemctl restart sshd)

控制类型

start启动

stop停止

restart重新启动

reload重新加载

status查看服务状态

systemctl list-unit-files  查询系统开机启动项

enabled(开机启动) disabled(开机不启动)

系统启动级别

Linux系统服务是指运行在后台并提供特定功能的应用程序。如网站服务、FTP服务等.Linux通过将不同的系统服务进行搭配组合来协同满足不同的功能需求。不同的服务组合其实现的功能也各不相同,就好比不同的药方能医治不同的病症一样。

早期Linux操作系统中的SysVinit机制默认包括七种不同的服务搭配方式,其中每一种搭配方式称为运行级别,类似于Windows系统中的正常启动,安全模式、不带网络连接的安全模式等,这些运行级别分别使用数字,1...6来表示,为了向下兼容SysVinit系统,Systemd使用了相应的target(目标)模拟了SysVinit的运行级别

init  服务启动命令

修复MBR扇区故障

损坏MBR扇区

mount /dev/sdb1 /mbr

dd if=/dev/sda of=/mbr/mbr.bak bs=512 count=1

dd if=/dev/zero of=/dev/sda bs=512 count=1

进入急救模式下

mkdir /mbr

mount /dev/sdb1 /mbr

dd if=/mbr/mbr.bak of =/dev/sda bs=1 count=512

修复GRUB引导故障

方法一:尝试手动输入提前先记下内核的UUID或者存储绝对路径

cat /boot/grub2/grub.cfg

insmod xfs

set root='hd0,msdos1

linux16/mlinuz-3.10.0-957.21.2.el7.x86 64 root-UUID-2fc91db1-9e47-44bd-8ab9-

99eea702f788

initrd16/initramfs-3.10.0-957.21.2.el7x86 64.img

模拟grub.ctg文件损坏

mv /boot/grub2/grub.cfg{,.bak}

shutdown -r now

    修复

       insmod xfs

  set root=’hd8, msdos1’

linux16/mlinuz-3.10.0-957.21.2.el7.x86 64 root-UUID-2fc91db1-9e47-44bd-8ab9-

99eea702f788

initrd16/initramfs-3.10.0-957.21.2.el7x86 64.img

boot

    开机后

  mv /boot/grub2/grub.cfg.bak /boot/grub2/grub.cfg

方法二进入急救模式重建grub程序。挂载sdbl并备份sda的前446字节数据然后毁坏前446字节数据,reboot重启

mkfs.xfs /dev/sdb1

mkdir /mbr mount /dev/sdb1 /mbr/

dd if=/dev/sda of=/mbr/grub.bak bs=1M count=446

dd if=/dev/zero of=/dev/sda bs=1M count=446

    修复

       mount /dev/sdb1 /mbr

        1s /mbr

  dd if=/mbr/grub.bak of =/dev/sda bs=1M count=416

       reboot

修改Linux的root账户密码

开机进入此界面快速按方向键暂停启动,按e进入编辑模式找到以linux16开头的行,在行尾加入内核参数(空格)rd.break,按ctrl+X引导

将/sysroot下的所有文件设置为可读写模式(mount –o remount,rw /sysroot/)

修改系统根目录到/sysroot用passwd root修改密码(输入两次密码)(chroot /sysroot/)

(passwd root)

由于系统默认开启selinux安全机制,所以输入“touch /.autorelabel”,来创建文件系统的安全标签。

(touch /.autorelabel)

(exit)

(reboot)

重启后密码已修改

程序和进程的关系

1.程序

保存在硬盘、光盘等介质中的可执行代码和数据

静态保存的代码

2.进程

在CPU及内存中运行的程序代码

动态执行的代码

父、子进程:每一个进程可以创建一个或多个进程

/proc目录下每个数字目录对应一个进程init:进程号(PID)为1

ps统计查看进程信息(ps aux /ps -elf)

a:所有与终端有关的进程

u:启动此进程的用户

x:所有与终端无关的进程

-e:显示系统内的所有进程信息

-1:使用长(long)格式显示进程信息

-f:使用完整的(full)格式显示进程信息

ps aux|grep “进程名称”(查看某个进程的详细信息)

ps aux:以简单列表的形式显示出进程信息

显示信息的每列解释

USER    PID     %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND

用户 | PID号 | 占CPU百分比 |

| 虚拟内存 | 常驻内存 | 运行终端 | 运行状态 | 启动时间 | 占CUP的时长 | 此进程的运行命令(带中括号的为内核线程)

进程状态:

D:不可中断的睡眠

R:运行或就绪

S:可中断的睡眠

T:停止

Z:僵死

<:高优先级进程

N:低优先级进程

+:前台进程组中的进程

1:多线程进程

s:会话进程首进程

top动态查看进程统计信息

top命令会在当前终端以全屏交互式的界面显示进程排名,及时跟踪包括CPU、内存等系统资源占用情况,默认情况下三秒刷新一次,默认以CPU占用率排序。

选项:

-d:指定刷新的间隔时间,单位秒

-b:以批量处理模式操作,一般与-n同时使用

-n:指定循环显示的次数

-u:指定用户名

-p:指定进程号

常用交互命令

P:根据CPU使用百分比大小进行排序(默认进入时即为此排序)

M:根据驻留内存大小进行排序

T:根据累积时间进行排序

k:终止一个进程

q:退出程序

当CPU占用率过高时,不应再直接执行top命令查看,可以将信息存入一个文件内查看,以免CPU占用率过高导致崩溃。操作如下

top –b –n 1 >/topinfo.txt

cat /topinfo.txt

uptime 查询linux系统负载的

top显示信息解释

top-16:58:24  [当前系统时间]

1:54  [系统已经运行1小时54分钟]

2 users  [当前登录2个用户]

load average:0.00.00.0.00  [系统平均负载:1分钟的,5分钟的,15分钟的]

Tasks:108 total   [任务:108个总进程]

1 running  [1个进程正在运行]

107 sleeping  [107 个进程睡眠]

o stoppd   [0个进程停止]

  1. zombie   [0个僵尸进程(冻结进程)]

cpu(s):0sus  [用户控件占用CPU百分比]

0.0%sy  [内核空间占用CPU百分比]

0.0%ni  [用户进程空间内改变过优先级的进程占用CPU百分比]

100.0%  [空闲CPU百分比]

0.0%wa  [等待输入输出的CPU时间百分比]

0.0%hi  [硬件中断]

0.0%si  [软件中断]

Mem:1012352k total  [物理内存总量1012352k]

465816k used  [使用了465816k的物理内存]

546536kfree  [空闲546536k的物理内存]

61064k buffe  [61064k用作内核缓存]

Swap:2031608k total  [交换分区总量2031608k]

Ok used  [没有使用交换分区]

2031608k free

  [空闲的交换分区总量2031608k]

267580k cache  [缓冲的交换分区总量267580k]

PID:进程号

USER:进程所有者的用户名

PR:优先级

NI:nice值。值表示高优先级,正值表示低优先级

VIRT:进程使用的虚拟内存总量,单位kb

RES:进程使用的、未被换出的物理内存大小,单位kb

SHR:共享内存大小,单位kb

S:进程状态

%CPU:上次更新到现在的CPU时间占用百分比

%MEM:进程使用的物理内存百分比

TIME+:进程使用的CPU时间总计单位1/100秒

COMMAND:使用的命令

查看进程信息

pgrep:根据特定条件查询PID信息

-1 显示进程名

-U 指定特定用户

-t 指定终端

pstree以树形结构列出进程信息

-a 显示完整信息

-u 列出对应用户名

-p 列出对应PID号

进程启动方式

手工启动:

前台启动:用户输入命令,直接执行程序

后台启动:在命令行尾加入"&"符号

进程的前后台调度

Ctrl+Z将当前进程挂起,即调入后合并停止执行

jobs 查看处于后台的任务列表,加-1同时显示PID号

fg 将后台进程恢复到前台运行,可指定任务程序号

bg 将后台暂停的进程调至后台运行

示例:vim/etc/ssh/sshd_config 进入到vim编辑器中按Ctrl+z

终止进程的运行

1>Ctr+C中断正在执行的命令

2>kill或 killall

kill 用于终止指定PID号的进程

killall 用于终止指定名称的所有进程

-9选项 用于强制终止

pkill 根据特定条件终止相应的进程

-U 根据进程所属的用户名终止相应进程

-t 根据进程所在的终端终止相应进程

调度启动

使用at命令,设置一次性任务计划

启动at服务:systemctl start atd

设置格式at 时间 年月日 (设置当天的任务计划可不加日期)

基本操作:  Ctri+D保存退出

atq查询现有的一次性任务计划

atrm[任务序号]删除第几项任务

crontab命令设置周期性计划任务

服务名称:cronde

全局主要配置文件:/etc/crontabe

计划任务配置文件:1l /etc/cron*

cron.d/ 系统级别定时任务

cron.daily/ 每天执行一次

cron.deny  黑名单

cron.hourly/ 每小时一次

cron.monthly 每月一次

crontab cron.weekly/ 每周一次

定义的计划任务位置/var/spool/cron/

管理cron计划任务

crontab

-1 列出当前用户的所有cron任务

-e 编辑用户自己的cron配置文件可以帮助检查语法错误) 

-r 移除所有任务

-u 用户名 管理其用户的cron任务

管理员为普通用户创建任务计划

crontab –u 用户名 –e:为其他用户编辑计划任务

crontab –u 用户名 –r:清空此用户的计划任务

crontab任务配置的格式  (* * * * * crontab)注:需要执行的命令用绝对路径

格式:分钟 小时 日 月 周 用户任务(系统自己执行不需要用户设置)

第一段应该定义的是:分钟,表示每个小时的第几分钟来执行。范围是从0-59

第二段应该定义的是:小时,表示从第几个小时来执行,范围是从0-23

第三段应该定义的是:日,表示从每个月的第几天执行,范围从1-31

第四段应该定义的是:月,表示每年的第几个月来执行,范围从1-12

第五段应该定义的是:周,表示每周的第几天执行,范围从0-7,其中0表示星期日

第六段应该定义的是:用户名,也就是执行程序要通过哪个用户来执行,这个一般可以省略

第七段应该定义的是:执行的命令和参数

计划任务时间格式

时间的有效取值:分钟0-59 小时0-23 日1-31 月1-12 周0-7,0和7都表示周日

时间通配符表示

*:对应时间的所有有效取值

,:离散时间点连续时间点

-:连续时间点

/:对应取值范围内每多久一次

系统安全及应用

基本安全措施

对系统账号的操作

将非登录用户的shell设为/sbin/nologin

方法一:usermod -s

方法二:chsh命令,交互式修改

方法三:chsh -s

方法四:vim编辑/etc/passwd文件进行修改

锁定长期不使用的账号

方法一:passwd -1(将在密文前增加2个“!!”)解锁 passwd-u 查看 passwd

方法二:usermod -L(将在密文前增加1个“!”)解锁usermod -U

也可以直接vim编辑/etc/shadow文件进行修改

删除无用的账号:userdel[-r]用户名

锁定账号文件/etc/passwd,/etc/shadowe

锁定:chattr +i/etc/passwd/etc/shadow

解锁:chattr-i/etc/passwd/etc/shadow

查看:Isattr/etc/passwd/etc/shadow

注意:锁定后即使是超户,也不能修改该文件,即不能创建、删除、修改用户信息。

密码安全控制

设置密码有效期

修改某个已存在用户的密码有效期:

chage –M 天数 用户名

passwd –x 天数 用户名

设置今后添加用户时的默认密码有效期:

方法:vim编辑/etc/login.defs文件,修改"PASS_MAX_DAY"后面的数值

要求用户下次登录时修改密码

方法:chage –d 0用户名

命令历史限制

减少历史的命令条数

方法一:vim编辑/etc/profile文件,修改"HISTSIZE-"后面的数值

方法二:export HISTSIZE=数值

示例:方法一[全局生效]:vi编辑/etc/profile文件,修改"HISTSIZE=5"

(vim +46/etc/profile)

仅当前用户环境下生效:export HISTSIZE=100

注销时自动清空历史命令

方法:vim编辑宿主目录下的".bash logout"文件,添加"history -c"

终端自动注销

方法一:vim编辑/etc/profile文件,添加"TMOUT=数值"(全局生效)

方法二:export TMOUT=数值(仅当前用户环境下生效)

source/etc/profile 或 . /etc/profile 重读环境变量

/etc/profile的作用:

通常每个用户默认的环境变量都是相同的,这个默认的环境变量实际上就是一组环境变量的定义。用户可以对自己的运行环境进行定制,其方法就是修改相应的系统环境变量。

在profile文件中修改环境变量,这里修改的内容就是对所有用户起作用的变量环境。

在修改完成后需要输入命令source /etc/profile来立即生效。

切换用户su命令

格式:su[-]目标用户(有“-”初始化环境变量,无“-”环境变量不改变)

查看su操作记录

安全日志文件:/var/log/secure

sudo提升权限

su命令的缺点:在使用su命令时,不指定用户名默认切换至root用户,需要输入root密码,但实示生产中root密码是不可以被广泛告知的如果需要执行root用户才有权限的命令,需要通过sudo命令设置来实现。

sudo命令:以其他用户身份(默认root身份)执行授权的命令sudo授权的命令

默认设置为首次执行时,需输入当前用户的登录密码,5分钟内再次执行sudo命令时则无需再输入密码。

配置sudo授权:编辑visudo(检查语法正确性)或者vim /etc/sudoers(不检查语法正确性),添加配置内容格式:指定的用户(tab键)主机名=(以哪个用户身份)(tab键)要执行的命令绝对路径

注意:多个命令中间要用逗号 “,”隔开,命令前加 “!”表示“除了” 此命令

test01 ALL=(root)     /usr/sbin/useradd,/usr/bin/passwd, !/sbin/reboot

wheel组授权

gpasswd -a 用户名 wheel

设置用户或组的别名

visudo

##Allows people in group wheel to run all commands

User_ Alias WWW = test01,%test

WWW ALL=(ALL)      ALL

设置别名

添加格式:用户别名 主机别名=命令别名(所有别名均大写)

设置sudo操作记录(visudo –c检测visudo的语法性)

第一步:rpm -qa sudo rsyslog    查看这个安装包是否安装未安装安装

第二步:visudo或者vi /etc/sudoers   添加"Defaults logfile=/var/log/sudo"

第三步:cat/var/log/sudo

扩展:免输sudo密码执行sudo命令

visudo

test01 ALL=(root) NOPASSWD: /usr/bin/sudo, /bin/su

PAM安全认证

su命令的安全隐患

默认情况下,任何用户都允许使用su命令,从而有机会反复尝试其他用户(如root)的登录密码,带来安全风险。为了加强su命令的使用控制,可以借助于PAM认证模块只允许极个别用户使用su命令进行切换

PAM可插拔式认证模块

PAM是一种高效而且灵活便利的用户级别的认证方式,它也是当前Linux服务器普遍使用的认证方式

PAM提供了对所有服务进行认证的中央机制,适用于login,远程登录(telent,rlogin,ftsh,ftp),su等应用程序。系统管理员通过PAM配置文件来制定不同应用程序的不同认证策略。

PAM认证原理

PAM认证一般遵循的顺序:Service(服务)àPAMàpam*.so

PAM认证首先要确定哪一项服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证文件(32位系统位于/lib/security下,64位系统位于/lib64/security下)进行安全认证。下图为Linux x86 64位系统中PAM的配置文件

用户访问服务的时候,服务器的某一个服务进程把用户的请求发送到PAM模块进行认证。不同的应用程序所对应的PAM模块也是不同的。如果想查看某个程序是否支持PAM认证可以用ls命令进行查看,(如查看su是否支持PAM模块认证 ls /etc/pam.d|grep su )

PAM认证的构成

每一行都是一个独立的认证过程

每一行可以区分为三个字段:认证类型、控制类型、PAM模块及其参数

示例:查看su的PAM配置文件

常见的四种认证类型

常见的五种控制类型

(1)required验证失败时仍然继续,但返回Fail

(2)requisite验证失败则立即结束整个验证过程,返回Fail

(3)sufficient验证成功则立即返回,不再继续,否则忽略结果并继续

(4)optional不用于验证,只是显示信息(通常用于session类型)

(5)include不进行认证,转到后面PAM模块进行认证

PAM安全认证流程

控制类型也可以称做Control Flags.用于PAM验证类型的返回结果

1.required验证失败时仍然继续,但返回Fail

2.requisite验江失败则立即结束整个验证过程,返回Fail

3.sufficient验证成功则立即返回,不再继续,否则忽路结果并继续

4.optional不用于验证,只显示信息(通常用于session类型)

使用PAM认证模块,限制某个命令或是服务的使用权限

1.vim编辑该命令在/etc/pam.d/su下对应的配置文件,启用pam_wheel模块

2.添加授权用户到wheel组

gpasswd-M amber,user1 wheele

grep wheel/etc/group

wheel:x:10:amber.user1

开关机安全控制

调整BIOS引导设置

将第一引导设备设为当前系统所在硬盘

设置BIOS管理密码

给BIOS程序引导进入系统加密

禁用重启热键Ctrl+Alt+Del

目的:避免用户误操作

方法:vim /etc/inittabe

如果ctrl-alt-del.target文件没有找到初始安装的系统无此文件),即已经禁用Ctri-Alt-Del热键,如果ctr-alt-del.target文件能找到,将ctrl-alt-del target删除即可

/usr/lib/systemd/system/ctrl-alt-del.target

grub莱单加密及密码清除

示例:查看grub登录用户名/etc/grub.d/01_users,我们可以看到用户名为root

设置grub密码

grub2-setpassword 输入此命令,设置grub密码123.com

确认grub密码,cat /boot/grub2/user.cfg

sync

        重启验证

    grub密码清除

       grub2-setpassword 为空

       rm –rf /boot/grub2/user.cfg

        sync

终端登录安全控制

减少开放终端个数

方法:vim编/etc/sysctl.conf配置文件,在行尾添加kernel.pty.max =3,并执行sysctl -p命令

限制root只在安全终端登录(没什么用,忽略此案

方法:vim编辑/etc/securetty配置文件,将禁止的终端注解掉(文件修改后立即生效)

禁止普通用户登录

方法:touch /etc/nologin,删除/etc/nologin这个空文件即可恢复。

弱口令检测JR(Joth the Ripper)

JR(Joth the Ripper)简介一款密码分析工具,支持字典式的暴力破解,通过对shadow文件的口令分析,可以检测密码,官方网站:http://www.openwall.com/iohn/

安装JRI具

tar包解压

进到解压后的src目录下,执行make clean

进到解压后的run目录下,执行命令

john使用

下载包

tar xf john-1.8.0.tar.xz

cd john-1.8.0/src/

编译安装

make

make clean linux-x86-64

规则:

--stdout 输出结果到屏幕

--restore 从上次解密中断的地方继续执行,ctrl+c 中断执行,当前的状态会被存放在一个名为restor的文档内,使用--restore可以从restore内读取上次中断的位置,然后继续破解下去

--session 设定当前记录档的名称

--make-charset 字元频率表,他会以破解出来的密码为基础来产生字元频率表,可用于Incremental模式

--show 显示已经破解密码,因为john.POT并不存储账号信息,使用show的时候应该输入相关的passwd文件

--test 测试机器执行各种类型密码的破解速度

--users 只破解某个账号的密码,可以是用户名或者UID号码,前面加‘-’表示不破解相关用户密码

--groups 只破解某个组内的用户密码,前面加上‘-’表示不破解某个组内用户的密码

--shells 之破解使用某种类型shell的用户,前面加上‘-’表示不破解

--salts 只破解salts大于count的密码,salts是unix用来作为密码编码的基础单位

--format 预定义密码破解的类型 DES/BSDI/MD5/BF/AFS/LM/

标准模式

破解简单密码(如123456等或与账户名相同)

cd /opt/john-1.8.0/run

普通用户:./unshadow /etc/shadow > /root/john-1.7.8/run/passwd.test

rootcat /etc/shadow > passwd.test

./john passwd.test -single

查看破解密码

./john passwd.test -show

字典模式

破解稍微变化密码(大小写等)(使用默认的password.lst)(这个时候已经很慢了)

./john -wordlist=password.lst passwd.test

./john -wordlist=password.lst -rules passwd.test

清空破解记录(>john.pot)

如果不清空破解记录会报错,没有密码哈希值可以破解(请参阅常见问题解答)

完全模式(如果电脑够强大,可以试试。我自认配置不够)

./john --incremental=All passwd.test

总结

john是一个不错的测试工具,可以检查系统里的账号是否有弱密码。并且当配置达到足够要求后,可以尝试爆破所以用户的密码。建议在云平台上自建一台虚拟机用以爆破,不然等待时间是非常漫长的。正因为破解速度不足,这款破解工具没太大实际意义,只用于检测即可。

端口检测  NMAP

NMAP简介一款强大的网络扫描、安全检测工具

官方网站:http://nmap.org/、

可从光盘中安装nmap-5.51-3.el6 x86_64.rpm

NMAP的扫描语法    127.0.0.1 本机IP

nmap[扫描类型][选项]<扫描目标>

常用的扫描

-sS TCP SYN扫描(半开)

-sT TCP链接扫描(全开)

-sF TCP FIN扫描

-sU UDP扫描

-sP ICMP扫描

-s0 跳过ping检测【较少使用】

常用选项

-n 禁止DNS反向解析

-p 指定端口中

查看端口占用

netstat -anlp | grep 8888

ss -anlp | grep 80

192.168.1.0/24 含义

192.168.1.0/24表示网段是192.168.1.0,子网掩码是24位,子网掩码为:255.255.255.0,用二进制表示为:11111111 11111111 11111111 00000000 ,这里为什么是24呢,就是因为子网掩码里面的前面连续的“1”的个数为24个,一定要连续的才行。 再给你举个例子,192.168.1.0/28表示的意思是网段是192.168.1.0,子网掩码为:255.255.255.240,用二进制表示为:11111111 11111111 11111111 11110000。 这时候你也许就疑惑了,就是24和28两个字不一样,为什么网段是一样的呢? 24位说明网络位是24位,那么主机位就是32-24=8位了,则子网的IP个数是254个,即是从00000001到11111110. 28位说明网络位是28位,那么主机位4位,则子网的IP个数是14个,即是从00000001到00001110.

安装nmap

mount/dev/sro/media/

mount: /dev/sr0  写保护,将以只读方式挂载

rpm –ivh /media/Packages/nmap-6.40-16.el7.x86_64.rpm

Linux文件系统日志

inode和block概述

文件储存在硬盘上,硬盘的最小储存单位叫"扇区"(sector),每个扇区储存512字节

操作系统读取硬盘的时候,不会一个个扇区的读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个“块"(block)。这种由多个扇区组成的"块",是文件存取的最小单位。“块”的大小,最常见的是4KB,即连续八个sector组成个block。block存储文件数据

文件数据存储在“块"中,那么还必须找到一个地方存储文件的元信息,比如文件的所属用户,文件所属组,文件的类型,文件的权限,文件的创建时间,文件的修改时间,文件的访问时间,文件使用的block信息,文件的硬链接数,文件的大小等等属性信息。这种储存文件元信息的区域叫做inode,中文译名为"索引节点",也叫i节点

inode和block是文件系统组成的基本核心概念,文件系统是在分区格式化的时候形成的,文件系统负责组织文件在分区上的存放

注意

inode不包含文件名,文件名是存储在目录的目录项中

一个文件必须占用一个inode,但至少占用一个block.

查看文件的inode信息,stat命令

目录文件的结构

目录也是一种文件

每个inode都有一个号码,操作系统用inode号码来识别不同的文件

Linux文件系统内部不使用文件名引用文件,而是使用inode号码来识别文件。对于文件系统来说,文件名只是inode号码便于识别的别称,文件名是目录的数据

inode的号码

系统内部打开文件的步骤:

1用户在目录中看到要访问的文件名

2通过目录的数据找到这个文件名对应的inode号码

3通过inode号码,获取inode信息(文件的元信息)

4根据inode信息,找到文件数据所在的block,读出数据

inode一般为128字节或256字节,每个inode中都记录着文件所在的block号的信息,每条记录着block号的信息占用4字节。inode中关于block号的记录一共包含有12个直接、1个间接、1个双间接和1个三间接。

12个直接连接,共占用48字节磁盘空闹,包含着12个直接指向block号的信息,若此文件系统默认的block大小为4KB,则仅仅可以指向12*4=48KB大小的文件内容,然而我们的文件若较大时,则需要使用到更多的block,肯定要多于12个block,进而有间接、双间接和三间接。

间接指的是,inode中所记录这4字节的内容,所指向一个block,这个block中存放的不是真实的文件内容,而是真实文件所存放位置的block号信息,若每个block大小为4KB,那么可以存放1024个block号信息,1个间接可以存放的文件大小为:1024x4-4096KB

双间接则可以存放更大的文件内容,即在间接的基础上再进行间接,若此时block大小为默认的4KB,则1个双间接可以存放的文件内容大小为:1024*1024x4=4096MB

三间接即在双间接的基础上在进行间接,若此时block大小为默认的4KB,则1个三间接可以存放的文件内容大小为:1024*1024*1024*4=4096GB,也就是说,在一个block大小默认为4KB的文件系统中,一个文件最大存储可以达到48KB+4096KB+4096MB+4096GB,约为4100GB,

查看文件的inode号码

ls -i文件名

stat 文件名


Superblock里面存储着文件系统所有lnode.block的相关信息

当一个用户在Linux系统中试图访问一个文件时,系统会先根据文件名去查找它的inode.看该用户是否具有访问这个文件的权限。如果有,就指向相对应的数据block;如果没有就返回 Permission denied(拒绝访问)

删除指定inode号所对应的文件

格式:find  ./  -inum  inode号  -exec  rm -i {} \;

查看文件系统的inode与block的信息 df –i 设备名(文件系统已挂载时查询,查询inode总数与已用数量)

inode的数量与大小在磁盘格式化的时候就已经固定了

解决inode耗尽故障案例

#新加一块5G硬盘,格式化成ext4文件系统挂载到/data目录下

mkdir/data

mkfs.ext4 -N 10000 -b 1024 /dev/sdb1

mount/dev/sdb1/data/

df-i/data/

touch/data/{1..10230}.txt

df-i/data/

df-Th/data/

此时查看/dev/sdb1的空间大小并没有被占满由此可见是inode数量不足了

解决inode耗尽导致的磁盘故障方法

1>删除不使用的文件

2>将文件备份重新格式化此文件系统指定较多的inode个数

格式化时指定文件系统的inode个数与block大小方法

mkfs.ext4 -N inode数 –b 块大小(单位字节) 设备名

深入理解Linux文件系统软硬链接原理

硬链接 (方法:ln 源文件 目标文件)

特点:硬链接指向的文件inode号,新生成的硬链接文件的inode号与源文件的inode号相同,不可针对目录进行硬链接,必须在同一文件系统内。删除一个文件名,不影响另外一个的访问。

软链接 (方法:ln –s 源文件或目录 目标文件或目录)

特点:软链接指向文件名,新生成的软链接文件的inode号与源文件不同,目录也可以生成软链接,软链接文件与源文件可以不在同一文件系统内,软链接文件的内容是源文件的路径读取时系统会自动导向源文件,根据原文件找到文件内容,但当源文件移动或重命名时,软链接将报错。

恢复误删除的文件理论

注意:在数据被误删除后,第一时间要做的就是卸载被删除数据所在的分区,如果是根分区的数据遭到误删,就需要将系统进入单用户模式,并且将根分区以只读模式挂载。这样做的原因很简单,因为将文件删除后,仅仅是将文件的inode节点中的扇区指针清零,实际文件还储存在磁盘的block上,如果磁盘继续以读写模式挂载,这些已删除的文件的数据块就可能被操作系统重新分配出去,在这些数据库被新的数据覆盖后,这些数据就真的丢失了,恢复工具也无力回天。所以以只读模式挂载磁盘可以尽量降低数据库中数据被覆盖的风险,以提高恢复数据成功的比例。

分析日志文件

日志文件的作用

日志文件是用于记录Linux系统中各种运行信息的文件,相当于Linux主机的“日记”。不同的日志文件记载了不同类型的信息,如Linux内核消息、用户登录事件、程序错误等。

日志文件对于诊断和解决系统中的问题很有帮助,因为在Linux系统中运行的程序通常会把系统消息和错误消息写入相应的日志文件,这样系统一旦出现问题就会"有据可查"。此外,当主机遭受攻击时,日志文件还可以帮助寻找攻击者留下的痕迹。

日志文件的分类

内核及系统日志

内核及系统日志:这种日志数据由系统服务rsyslog统一管理,根据其主配置文件/etc/rsyslog.conf中的设置决定将内核消息及各种系统程序消息记录到什么位置。系统中大部分的程序会把自己的日志文件交由给rsyslog管理,因而这些应用程序使用的日志记录格式都很相似

/etc/rsyslog.conf配置文件中,常见的配置格式及其含义:

“.”:比后面等级要高(包含该等级)的都记录。例如:*.info

“=”:只记录该等级。例如:=debug

“!”:除了该等级都记录。例如:!info

“-”:当有记录信息需要记录时,先存到缓存中,到一定大小时一次性写入,以减少对磁盘读写性能的占用。例如-/var/og/maillog

用户日志:用于记录Linux系统用户登录及退出系统的相关信息,包括用户名、登录的终端、登录时间、来源主机、正在使用的进程操作等。

程序日志:有些应用程序会选择由自己独立管理一份日志文件,而不是交给rsyslog服务管理,用于记录本程序运行过程中的各种事件信息。由于这些程序只负责管理自己的日志文件,因此不同程序所使用的日志记录格式也会存在较大的差异

日志文件的位置

Linux系统本身和大部分服务器程序的日志文件默认放在/var/log/下。一部分程序共用一个日志文件,一部分程序使用单个日志文件。而有些大型服务器程序日志由于日志文件不止一个,所以会在/var/log/目录中建立相应的子目录来存放日志文件,这样既保证了日志文件目录的结构清晰,又可以快速定位日志文件。有一部分日志只有root用户才有权限读取,这保证了相关日志信息的安全性。

常见的日志文件及查看方式

日志消息级别

在Linux内核中,根据日志消息的重要程度不同,将其分为不同的有限级别(数字等级越小,优先级越高,消息越重要)

日志文件分析

内核及大多数系统消息

内核及系统日志主要由默认安装的rsyslog软件包提供rsylog服务所使用的配置文件为/etc/rsyslog.conf,通过查看配置文件内容,可以了解到系统默认的日志位置

内核及大多数系统消息被记录到公共日志文件/ar/log/message中,而其他一些程序消息被记录到各自独有的日志文件中,此外日志消息还能够记录到特定的存储设备中,或者直接发送给指定用户查看

格式解释:

时间标签:消息发出的日期和时间

主机名:生成消息的计算机的名称

子系统名称:发出消息的应用程序的名称

消息:消息的具体内容

syslog日志服务是一个常会被攻击的目标,破坏了它将使运维人员很难发现入侵及入侵的痕迹,因此需要特别监控其守护进程及配置文件

用户日志

存放位置:Nar/log/wtmp,Nvar/log/btmp.Nar/log/lastloge

查询命令:users,who,w,last,lastlog,lastb

users命令:只是简单的输出当前登录的用户名,每一个显示的用户名对应一个会话。

who命令:用于报告当前登录到系统中的每个用户的信息。默认输出包括用户名、终端类型、登录日期及远程主机

w命令:用于显示当前操作系统中的每个用户及其远程所运行的进程信息

last命令用于查询成功登录到系统的用户记录,最近的登录情况在最前面。通过last命令可以及时掌握linux主机的登陆情况若发现未经授权的用户登陆过,则表示当前主机可能已经被入侵

-a:把从何处登录系统的主机名称或IP地址,显示在最后一行

-d:将IP地址转换成主机名称

-f[记录文件]:指定记录文件

-R:不显示登入系统的主机名称或IP地址

-x:显示系统关闭,重新开机,以及执行等级的改变等

-n:n代表数字,表示最近n次登录的记录

lastlog命令用于显示系统中所有用户最近一次登录信息

lastb命令用于显示用户错误的登录列表,此指令可以发现系统的登录异常如登陆的用户名错误,密码不正确等情况都会记录在案,登陆失败的情况属于安全事件,因此消失可能有人在尝试破解密码除了使用lastb命令外,可以直接从安全日志文件Nar/log/secure中获取相关信息

程序日志

在linux操作系统中,还有一部分应用程序没有使用rsyslog服务来管理日志,而是由程序自己维护日志记录,例如http网站服务程序使用两个日志access_log和error_log分别记录客户访问事件和错误事件,不同应用程序的日志记录格式差别较大,没有严格使用统一的记录格式

日志文件分析注意事项

总的来说,作为一名合格的系统管理人员,应该提高警惕,随时注意各种可疑的状况定期并随机的检查各种系统日志文件,包括一般信息日志、网络连接日志、文件传输日志及用户登录日志记录等。在检查这些日志时,要注意是否有不合常理的时间或操作记录。例如出现以下一些现象就应该多加注意:

1、用户在非常规的时间登录,或者用户登录系统的IP地址和以往不一样的

2、用户登录失败的日志记录,尤其是那些一再连续尝试进入失败的日志记录

3、非法使用或不正当使用超级用户权限

4、无故或者非法重新启动各项网络服务的记录

5、不正常的日志记录,如日志残缺不全,或者是诸如wtmp这样的日志文件无故缺少了中间的记录文件

注意:需要提醒运维人员的是日志并不是完全可靠的,高明的黑客在入侵系统后经常会打扫现场,所以管理人员需要运用综上的所有知识全面,综合的进行审查和检测

日志管理

针对日志定期备份,异地备份(保留1-3个月的日志记录)

针对日志定期切割(0 0 * * * mv /var/log/messages /var/log/messages-时间)

针对日志的权限要求严格(为防止敏感信息泄露)

针对日志做集中管理

对于日志文件的保护

chattr +a 日志文件,a选项为append(追加)only,即给日志文件加上a权限后,将只可以追加,不可以删除和修改之前的内容。

root用户在vi编辑器的命令模式,按dd删除了两行内容后进行wq!强制保存退出,报错

lsattr   查看

lsattr -R递归查看

chattr +a –R 递归式增加a权限

课外补充 chattr +a –R递归式增加a权限

网络参数管理

查看及测试网络

ifconfig命令介绍:

#查活动的网络接口   ifconfig

#查看所有的网络接口  ifconfig -a

#查看指定的网络接口  ifconfig ens32

ifconfig命令信息

ens32:flags=标志位<UP,BROADCAST,RUNNING,MULTICAST> mtu 最大传输单元 

inet IPv4地址 netmask 子网掩码broadcast 广播地址

inet6 IPv6地址 prefixlen  msc长度 scopeid 0x20<link>

ether mac地址 txqueuelen 传输缓冲区大小(Ethernet)

RX packets 接收数据包 bytes 大小(单位统计)

RX errors 错误 dropped 丢弃 overruns 过载 frame 帧数

TX packets 发送数据包 bytes 大小(单位统计)

TX errors 错误 dropped 丢弃 overruns 过载 carrier 载波 collisions 冲撞

查看网络接口数据链路层详细信息

ip link

查看网络接口网络层信息

ip a

查看指定网络接口速率,模式等信息

ethtool ens32

查看主机名

hostname

查看路由表

不执行DNS反向查找直接显示数字形式的IP地址  route -n

打印网络连接信息

netstat

-r查看路由表

-n不执行DNS反向查找直接显示数字形式的IP地址

-a显示当前主机所有活动的网络连接信息

-t显示TCP协议相关信息

-u显示UDP协议相关信息

-p显示进程号和进程名称信息

-1查看监听状态

netstat -anpt|head-5

netstat –anpu|head-5

扩展:    ss –anpt(获取 socket统计信息)        lsof -i:22(列出当前系统打开文件的工具)

网络测试命令

ping测试网络连通性

-c指定发送数据包个数

-i当ping通时,指定间隔多少秒发送下一个数据包

-w当ping不通时,发送的每个数据包的超时时间s

-s指定数据包大小

跟踪数据包路由途径

traceroute -n www.baidu.com

-n不执行DNS反向查找直接显示数字形式的IP地址

常见的TTL生存周期值

windows:128

linux:64

uinux:255

cisco:255

设置IP地址

配置临时IP

ifconfig 网卡名 IP地址

ifconfig ens32 IP

ifconfig ens32 IP/24

ifconfig ens32 IP netmask 255.255.255.0

配置永久IP

vim /etc/sysconfig/network-scripts/ifcfg-ens32

TYPE="Ethernet" #类型以太网

PROXY_METHOD="none"

BROWSER_ONLY="no"

BOOTPROTO="none"   #引导协议(dhcp/static/none

DEFROUTE="yes"

IPV4 FAILURE FATAL="no"

IPVGINIT="yes"

PV6 AUTOCONF="yes"

IPV6 DEFROUTE="yes"

IPV6 FAILURE FATAL="no"

IPV6 ADDR GEN MODE="stable-privacy"

NAME="ens32"   #设备名

UUID="37d3f81e-8bf6-48d1-8aee-b845e491e0cc" #UUID

DEVICE-"ens32" #设备名

ONBOOT="yes"   #是否开机自启动

IPADDR=192.168.75.111  #ipv4 协议地址

PREFIX=24   NETMASK= 255.255.255.0#子网掩码

GATEWAY=192.168.75.1   #网关

DNS1=8.8.8.8   #DNS域名解析服务

HWADDR=00:0C:29:8F:D8:E0#物理地址MAC (可以不用填写)

PV6 PRIVACY=no(可以不用填写)

设置临时网卡子接口

ifconfig ens32:0 IP/24    (0为序号,默认排序:0 01 02 03)

ifconfig ens32:sec IP/24

设置永久网卡子接口     /etc/sysconfig/network-scripts/

cp ens32 ens32:0

vim ens32:0

临时修改网卡状态

ifconfig ens32 down

ifconfig ens32 up

重新加载网络配置文件

systemctl restart network

ifdown ens32;ifup ens32

设置主机名

修改新主机名临时生效

hostname name

修改永久主机名

方法一:hostnamectl set-hostname name

方法二:vim/etc/hostname

配置路由

临时添加删除路由记录

route –n 查看路由条目

route add –net 网段/短格式子网掩码 gw 网关地址

route del –net 网段/24

临时添加删除默认网关

route add default gw网关地址

route del default gw网关地址

配置永久路由

方法一

vim/etc/rc.local

route add –net 网段/24 gw 网关

route add –net 网段/24 dev ens32

方法二

ens32网卡配置文件中指定网关

方法三

vim/etc/sysconfig/static-routes手动建立

any net网段/24 gw网关地址

any net网段 netmask 255.255.255.0 gw网关

开启IP转发路由功能

临时

echo"1" >/proc/sys/net/ipv4/ip_forward

永久

vim/etc/sysctl.conf       net.ipv4.ip_forward=1

sysctl-p 查看ip转发功能

配置DNS域名解析

方法一

ens32网卡中设置DNS1=8.8.8.8

方法二

vim /etc/resolv.conf

nameserver IP

域名解析本地主机映射文件 :/etc/hosts

DHCP介绍

动态主机设置协议,是一个局域网的网络协议,使用UDP协议工作,采用C/S架构主要作用是集中的管理、分配IP地址,避免IP地址冲突,减少管理员工作量,使client动态的获得网卡的IP地址、默认网关地址、子网掩码、对应的网络地址、广播地址、DNS服务器地址等,并能够提升地址的使用率

端口:67(DHCP server)服务端,68(DHCP client)客户端

DHCP地址类型分配

自动分配方式

DHCP服务器为主机指定一个永久性的IP地址一旦DHCP客户端第一次成功从DHCP服务器端租用到IP地址后就可以永久性的使用该地址。

动态分配方式

DHCP服务器给主机指定一个具有时间限制的IP地址,时间到期或主机明确表示放弃该地址时,该地址可以被其他主机使用(当然也可以续约继续使用)。

手工分配方式

客户端的IP地址是由网络管理员指定的,DHCP服务器只是将指定的IP地址告诉客户端主机。

三种地址分配方式中,只有动态分配可以重复使用客户端不再需要的地址。

DHCP租约过程

客户机从DHCP服务器获取IP地址的过程称为DHCP的租约过程。

租约过程分为四个步骤:

1>客户机请求IP(客户机发DHCP Discover广播包)

当一个DHCP客户机启动时,客户机还没有IP地址所以客户机需要通过DHCP获取一个合法的地址。此时DHCP客户机以广播方式(因为DHCP服务器的IP地址对客户机来说是未知的)发送DHCP Discover发现信息来寻找DHCP服务器。广播信息中包含DHCP客户机的MAC地址和计算机名,以便DHCP服务器确定是哪个客户机发送的请求。

2>服务器响应(服务器发DHCP Offer广播包)

当DHCP服务路接收到来自客户机请求IP地址的信息时,它就在自己的IP地址池中查找是否有合法的IP地址提供给客户机如果有,DHCP服务器就会将此IP地址做上标记加入到DHCP Offer的消息中,然后DHCP服务器就广播一则包含下列信息的DHCP Offer消息DHCP客户机的MAC地址、DHCP服务器提供的合法IP地址、子网掩码、默认网关、租约的期限、DHCP服务器的P地址。

3>客户机选择IP(客户机发DHCP Request广播包)

DHCP客户机从接收到的第一个DHCP Offer消息中提取IP地址,发出IP地址的DHCP服务 将该地址保留,这样该地址就不能再分配给另一个DHCP客户机。当客户机从第个DHCP服务器接收到DHCP Offer消息并提取了IP地址后,客户机将DHCP Request消息广播到所有的DHCP服务器表明它接受提供的内容。DHCP Request消息包括为客户机提供IP配置的服务照的服务标识符(服务器IP地址),DHCP服务器查看服务器标识符字段以确定提供的IP是否被接受,如果DHCP Offer被拒绝,则DHCP服务路取消并保留其IP地址以提供给下一个IP租约的的请求。

4>服务器确定租约(服务器发DHCP ACK广播包)

DHCP服务器接收到DHCP Request消息后,以DHCP ACK消息的形式向客户机广播成功确认,该消息包括含有IP地址的有效租约和其他可配息,当户机收到DHCP ACK消息时,它就配置了IP地址,完成TCPAP的初始化。

重新登录

DHCP客户机每次重新登录网络时不需要再发送DHCP Discaver信息,而是直接发送包含前一次所分配的IP地址的DHCP Request请求信息。当DHCP服务器接收到这一信息后,它会尝试让DHCP客户机继续使用原来的IP地址并回答一个DHCP ACK确认信息。

如果此IP地址已无法再分配给原来的DHCP客户机使用(如IP地址已经分配给其他的DHCP客户机使用)DHCP服务器给DHCP客户机回答一个DHCP Nack否认信息。当原来的DHCP密户机接收到此DHCP Nack否认信息后,它就必须重新发送DHCP Discover发现信息来请求信的IP地址

更新租约

当DHCP服务器向客户机出租的IP地址租期达到50%时,就需要更新租约。客户机直接向提供租约的服务器发送DHCP Request包,要求更新现有的地址租约。若此时DHCP服务器无法正常回复DHCP客户机的请求客户机的此IP地址可以继续使用到最大租约时间的87.5%

DHCP中继原理

当企业的内部网络规模较大时通常被划分为多个不同的子网,网络内配置了VLAN。

VLAN能隔离广播,而DHCP协议使用广播。DHCP服务器在VLAN 100中就只有VLAN100内的客户机能从DHCP服务器那里获取IP地址,如果VLAN 2或VLAN 3的客户机也需要通过这台DHCP服务器来获取IP地址,该怎么办呢?

解决的办法有两种:

为每个网段安装一台DHCP服务器,但这种方式存在资源上的浪费,而且不利于集中管理,在连接不同网段的设备上开启DHCP中继功能将DHCP这种特殊的广播信息在VLAN之间转发,让其他VLAN的客户机也能从DHCP服务器那里获得IP地址。

DHCP中继代理,其可以实现在不同子网和物理网段之间处理和转发dhcp信息的功能。如果DHCP客户机与DHCP服务器在同一个物理网段,则客户机可以正确地获得动态分配的ip地址。如果不在同一个物理网段,则需要中继代理,代理可以去掉在每个物理的网段都要有DHCP服务器的必要,它可以传递消息到不在同一个物理子网的DHCP服务器,也可以将服务器的消息传回给不在同一个物理子网的DHCP客户机。

DHCP配置文件.

主配置文件/etc/dhcp/dhcpd.conf

执行程序/usr/sbin/dhcpd

服务名dhcpd

配置DHCP服务实验:

    yum –y install dhcp    安装DHCP

    vim /etc/sysconfig/network-scripts/ifcfg-ens32     修改本机IP为静态IP

    systemctl restart network   重启本机网卡

    cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf    复制DHCP主配置文件

    vim /etc/dhcp/dhcpd.conf    修改DHCP主配置文件

    systemctl restart network   重启网卡

    systemctl restart dhcpd     重启DHCP服务

    netstat –anptul|grep 67    检索过滤服务端口是否开启

   

日志中捕获到四个过程

    tailf /var/log/messages

租约信息

    cat /var/lib/dhcpd/dhcpd.leases

客户端(网卡配置文件设置为DHCP)

    dhclient –r ens32      释放IP

    dhclient –d ens32      重新获取

针对部分主机可绑定MAC地址为其分配固定IP地址

修改DHCP主配置文件

host test{                         //添加主机定义

hardware ethernet 00:0c:29:96:57:8a://客户机MAC地址

fixed-address 192.168.75.222:  //为客户机绑定的IP地址

}

DHCP中继配置扩展

DHCP中继服务器

开启三个虚拟机:第一台为dhcp,第二台为dhcp中继器,第三台为客户端。

DHCP服务器,DHCP中继器安装dhcp包

配置dhcp ip地址

给dhcp中继器添加一个网卡

中继器拷贝一份网卡文件

配置dhcp中继网卡一网卡二的ip地址

开启dhcp中继服务器的路由转发功能  vim /etc/sysctl.conf   net.ipv4.ip_forward=1

sysctl –p  查询中继器是否开启路由转发功能

重启dhcp的网卡以及dhcp中继的网卡

拷贝dhcp主配置文 cp /usr/share/doc/dhcp-4.2.55/dhcpd.conf.example /etc/dhcp/dhcpd.conf

修改dhcp主配置文件

在dhcp中继的虚拟机启动dhcp中继服务(dhcrelay dhcp的ip地址

过滤dhcrelay进程(netstat -autlp|grep dhcrelay)

关闭VMware的本地dhcp分配

客户端网卡对应的是vm8网卡

在dhcp客户端测试dhcp中继是否给客户端分配了地址

修改客户端网卡为vm2

再次测试dhcp中继是否给客户端分配了地址

DNS概念

域名系统是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库能够使人更方便地访问互联网。DNS使用TCP和UDP端口53

域名解析概念:把域名指向的网站IP,让人们通过域名就可以访问到所绑定域名的服务器上的服务

域名解析分类:

正向解析根据域名查IP地址,将指定的域名解析为对应的IP,常用

反向解析根据IP查找域名,将IP地址解析为对应的域名,不常用,在特殊场合(反垃圾邮件验证)才会用到

FQDN:完整域名格式,例如www.linux.com.

早期的域名必须以英文句号.结尾,例如我们访问www.jd.com时候就必须输入www.jd.com.

这样DNS才能进行域名解析,如今DNS服务器已经可以自动补上结尾的句号

DNS服务的类型:

缓存域名服务器:只提供域名解析结果的缓存功能,可以提高查询速度和效率,但没有自己控制的区域地址数据,在构建缓存服务器时必须设置根域或指定其它DNS服务器作为解析来源

主域名服务器:维护某一个特定DNS区域的地址数据库,对其中解析的记录有控制权限,是指定区域中唯一存在的权威服务器,构建主域名服务器时,需要自行建立所有区域的地址数据文件

从域名服务器:与主域名服务器提供相同的DNS服务,通常用于DNS服务的热备份,对于客户来说无论主从服务器,查询的结果都是一样的,区别从域名服务器提供的解析结果不由自己决定由主域名服务器决定,构建服务器时,要指定主域名服务器位置,让其能自动同步区域的地址数据库

转发器:发现不是本机负责查询的请求,不再向根域发请求,而是直接转发给指定的服务器,自身并不缓存结果

DNS服务器查询模式:

递归:DNS客户端设置使用的DNS服务器一般都是递归服务器,它负责全权处理客户端的DNS查询请求,直到返回最终结果(发出多次请求)

迭代:只发出一次请求,DNS服务器之间一般采用迭代查询方式

DNS请求流程描述

第一步:打开浏监器,想要请求访问京东,在地址栏输入了网址:www.jd.com(www.jd.com是域名就是一个IP地址的名称,IP地址不好记,所有有了域名)

第二步:先将请求信息发给了交换机,然后交给了路由器,路由发给DNS服务器,通过DNS协议去找我们要访问的京东的IP地址

第三步:查到的京东服务器对应的IP地址之后,路由器通过路由协议找到一个路由转发的最优路径,将你的请求信息还送给这个IP地址的京东的路由器

第四步:京东的路由器发给了京东网站的服务器上

第五步:京东网站服务器按照来的时候的路径,在返回给你他自己的网站

第六步:当你打开浏览器的时候,你的电脑给你的浏览器这个运行起来的程序给了一个编号,叫做端口号,当你的电脑收到京东发送过来的消息的时候,你的电脑通过端口号找到你的浏览器,你的浏览器拿到了京东的网站信息,然后将网站呈现在了自己的浏览器上

DNS配置文件介绍

    /var/named     区域数据文件

    /etc/named.conf DNS主配置文件

配置过程

实验条件:1台主DNS 1台从DNS 1台客户机

目的:客户机通过缓存DNS正逆向解析

安装软件包:yum –y install bind

修改主DNS主机名为 ns1.test.com

修改从DNS主机名为 ns2.test.com

配置主机IP和对应的主机名 vim /etc/hosts(两台DNS都需要配置)

设置主机IP为静态IP

修改主DNS配置文件 vim /etc/named.conf

编辑区域配置文件正向解析文件 vim /var/named/test.zheng

复制一份正向解析文件并重命名为test.fan,vim /var/named/test.fan

添加正反解析文件到named组里

chgrp named /var/named/test.zheng

chgrp named /var/named/test.fan

测试DNS配置文件格式是否正确

named-checkconf /etc/named.conf

测试DNS区域配置文件是否正确

named-checkzone test.com /var/named/test.zheng

重启DNS服务

systemctl restart named

配置从DNS主配置文件 vim /etc/named.cofg

修改目录及其内部文件的属组 chown –R named.named  /var/named/slaves

启动从DNS服务 systemctl start named

启动从DNS服务后,从DNS会自动同步主DNS的区域配置文件数据 ls /var/named/slaves/

查看客户机DNS指向 cat /etc/resolv.conf

将客户机DNS指向从DNS服务器测试 nslookup ip/地址

SSH远程登录服务

传统的网络服务程序,在本质上都是不安全的,因为它们在网络上用明文传送口令和数据,别有用心的人非常容易就可以截获这些口令和数据。而且这些服务程序的安全验证方式也是有其弱点的,就是很容易受到“中间人”攻击,所谓“中间人”,就是"中间人"冒充真正的服务器接收你传给服务器的数据,然后再冒充你把数据传给真正的服务器。服务器和你之间的数据传送被“中间人”一转手做了手脚之后,就会出现很严重的问题。

SSH为Secure Shell的缩写,是标准的网络协议,由IETF的网络小组(NetworkWorking Group)所制定;SSH为建立在应用层基础上的安全协议。SSH是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用SSH协议可以有效防止远程管理过程中的信息泄露问题。可用于大多数操作系统,能够实现字符界面的远程登录管理,它默认使用22号端口,采用密文的形式在网络中传输数据,相对于通过明文传输的Telnet,具有更高的安全性。SSH提供了口令和密钥两种用户验证方式,这两者都是通过密文传输数据的。

对称加密和非对称加密区别

对称加密采用了对称密码编码技术,它的特点是文件加密和解密使用相同的密钥加密

也就是密钥也可以用作解密密钥,这种方法在密码学中叫做对称加密算法,对称加密算法使用起来简单快捷,密钥较短,且破译困难,除了数据加密标准(DES),另一个对称密钥加密系统是国际数据加密算法(IDEA),它比DES的加密性好,而且对计算机功能要求也没有那么高

与对称加密算法不同,非对称加密算法需要两个密钥公开密钥(publckey)私有密钥(privatekey)

公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。非对称加密算法实现机密信息交换的基本过程是:甲方生成一对密钥并将其中的一把作为公用密钥向其它方公开得到该公用密钥的乙方使用该密钥对机密信息进行加密后再发送给甲方;甲方再用自己保存的另一把专用密钥对加密后的信息进行解密。

SSH程序介绍

    SSH服务安装包(默认系统已经安装)

rpm -qa openssh*

openssh-clients-7.4p1-16.el7.x86_64

openssh-7.4p1-16.el7.x86_64

openssh-server-7.4p1-16.el7.x86_64

服务名  sshd

服务主程序  /usr/sbin/sshd     #sshd服务端主程序

/etc/ssh/sshd_config    #服务端配置文件修改前一定要先备份

/etc/ssh/ssh_config#客户端配置文件一般不需要改动

服务端配置参数只要更改配置必须重启服务才能生效

/etc/ssh/sshd_config

17 #Port 22                #并服务端端口默认22号端口

19 #ListenAddress 0.0.0.0      #服务监听的地址默认监听所有地址

115 UseDNS no                  #禁止DNS反向解析提高响应速度

37 #LoginGraceTime 2m          #登陆验证时间

38 #PermitRootLogin yes        #禁止root用户登陆默认允许需要改为no

40 #MaxAuthTries 6             #最大重试次数

64 #PermitEmptyPasswords no     #禁止空密码用户登陆

Openssh服务访问控制

在服务端文件末尾添加 AllowUsers白名单用户名 或者 DenyUsers黑名单用户名 即可允许或者拒绝某些用户登陆(拒绝优先),多个用户空格隔开

重启服务

systemcti restart sshd

登陆验证方式可以两种同时使用也可以只使用其中一种

密码验证:对服务器中本地系统用户的登录名称、密码进行验证。这种方式使用最为简便,但从客户端角度来看,正在连接的服务器有可能被假冒:从服务器角度来看,当遭遇穷举(暴力破解)攻击时防御能力比较弱。

密钥对验证:要求提供相匹配的密钥信息才能通过验证。通常先在客户端中创建一对密钥文件(公钥私钥),然后将公钥文件放到服务器中的指定位置。远程登录时,系统将使用公钥私钥进行加密/解密关联验证,大大增强了远程管理的安全性。该方式不易被假冒,且可以免交互登录,在Shell中被广泛使用。

当密码验证密钥对验证都启用时,服务器将优先使用密钥对验证。对于安全性要求的服务器。建议将密码验证方式禁用只允许启用密钥对验证方式若没有特殊要求,则两种方式都可启用。

vim /etc/ssh/sshd_config

43#PubkeyAuthentication yes                #启用密钥对验证

47 AuthorizedKeysFile   .ssh/authorized_keys    #公钥文件位置

65 PasswordAuthentication yes              #启用密码验证

SSH客户端命令

远程连接服务器:ssh 用户名@主机IP -p 端口

客户端推送文件到服务端

scp 文件名服务端用户@服务端IP:/服务端的文件位置

客户端拉取服务端文件

scp 服务端用户@服务端IP:/服务端文件位置 放在客户端的位置

sftp(安全的ftp)

登陆

sftp user@连接方IP

把客户端文件上传到服务器端

put 文件名

把服务端文件拉取到客户端

get 服务器端文件位置 客户端文件存放位置

常见的远程访问工具:Xshell、secureCRT、PuTTY、Xmanager

SSH秘钥验证

构建步骤

a.首先要在SSH客户端创建密钥对

b.客户端将创建的公钥文件上传至SSH服务端

C.服务端将公钥信息导入用户的公钥数据库文件

d.客户端连接服务器端用户测试

主机A与主机B之间做秘钥互信实现不需要密码登陆主机B

主机A执行

ssh-keygen-t 秘钥类型(dsa/rsa/...)

1s ssh/

ssh-copy-id-i.ssh/id dsa.pub rooto 主机B的IP

ssh root@主机B的IP

总结

在主机A上创建密钥对一个公钥(pub),一个私钥以公钥为准如果想不需要输入密码连接到B服务器上就把公钥拷贝到B服务器上然后就可以连接这台服务器了新生成的密钥对文件中,idecdsa是私钥文件默认为600对于私钥文件必须妥善保管不能泄露给他人。id ecdsa.pub是公钥文件,用来提供给SSH服务器。

连接过程:

你创建密钥对的这个机器(主机A)会拿自己私钥和你拷贝过去的公钥(主机B)做配对,如果配对成功即可不需要输入密码就可连接主机B.否则登陆失败

TCP Wrapperse

在Linux系统中,许多网络服务针对客户端提供了访问控制机制,如Samba、BIND、HTTPD、OpenSSH等。TCP Wrappers(TCP封装的套接宇)防护机制,是作为应用服务于网络之间的一道特殊防线,提供额外的安全保障。

TCP Wrappers保护原理

TCP Wrappers将TCP服务程序“包裹”起来,代为监听TCP服务程序的端口,增加了一个安全监测的过程,外来的连接请求必须先通过这层安全检测,获得许可后才能访问真正的服务程序。

保护机制的实现方式

方式1:通过tcpd主程序对其他服务程序进行包装

方式2:由其他服务程序调用libwrap.so.*链接库

TCP Wrappers保护的条件

(1)必须是采用TCP协议的服务

(2)函数库中必须包含libwrap.so.0(共享连接库)、大多数服务通过这种方式

#首先查看服务有没有libwrap库文件,有libwrap这个库文件的服务才能配置访问控制

ldd 服务名|grep "libwrap"

例:

ldd /usr/sbin/sshd|grep"libwrap"

libwrap.so.0 =>/ib64/libwrap.so.0(0x000072c02e41000)

访问控制策略配置文件(允许优先)

/etc/hosts.allow    白名单

/etc/hosts.deny黑名单

配置格式:服务名:ip

   

通配符:    * 代替若干字符

            ?代替单个字符

部署yum源仓库

YUM软件仓库可以完成安装,卸载自动升级rpm软件包等任务,能够自动查找并解决rpm包之间的依赖关系,并一次安装所有依赖的相关软件包。而无需管理员逐个,手工的去安装每个rpm包使管理员在维护大量Linux服务器时更加轻松自如。特别是在拥有大量Linux主机的本地网络中,在自己公司架设一台YUM服务器还可缓解软件安装、升级等对Internet的依赖。

源服务器:源服务器包含存放各种rpm安装包文件的软件仓库(Repository)和仓库数据(Repodata),仓库数据是用来收集仓库目录下rpm软件包的头部信息的。YUM软件仓库借助于HTTP或FTP协议进行发布,可以面向网络中的所有服务器,使其他Linux服务器(客户机)直接调用,而无须自己准备软件包

rpm软件包来源

Centos官方发布的rpm包

第三方组织发布的rpm包

用户自定义的rpm包

在CentOS7系统的安装光盘中,已针对目录Packages建立好repodata数据,因此只要简单地将整个光盘中的内容通过HTTP或FTP进行发布,就可以作为软件仓库了。

配置基于本地yum源服务器

    mount /dev/sr0 /media      挂载光盘映像

    cd /etc/yum.repos.d    

    mkdir a

    mv * a

    vim yum.repo

        [base]

       name=base

       baseurl=file:///media

       enabled=1

       gpgcheck=0

    yum clean all      

    yum makecache

配置基于HTTP协议的YUM源服务器(需安装httpd服务)

服务端配置

yum –y install httpd

    mkdir /var/www/html/centos

    mount /dev/sr0 /var/www/html/centos

    systemctl restart httpd

客户端配置

    cd /etc/yum.repos.d    

    mkdir a

    mv * a

    vim yum.repo

        [base]

       name=base

       baseurl=http://192.168.130.128/centos

       enabled=1

       gpgcheck=0

    yum clean all

    yum makecache

基于FTP协议的YUM源服务器

    服务端配置

    mount /dev/sr0 /media/

    rpm –ivh /media/Packages/vsftpd-3.0.2-25.el7.x86_64.rpm

    umount /dev/sr0

    mkdir –v /var/ftp/centos

    mount /dev/sr0 /var/ftp/centos/

#用户手中的其他软件包需要手动创建repodata数据文件和存放目录

mkdir /var/ftp/other

cd/var/ftp/other/

createrepo–g /var/ftp/centos/repodata/repomd.xml ./   指定本地软件仓库的组划分

ls -lh repodata/

systemctl start vsftpd

    客户端配置

    cd /etc/yum.repos.d

    mkdir a

    mv * a

    vim yum.repo

        [ftp]

        name=ftp

#软件包URL访问路径如果是本地源以file开头如果是http源以http开头如果是ftp源以ftp开头

        baseurl=ftp://192.168.130.128/centos

        enabled=1

        gpgcheck=0

        [other]

        name=other

        baseurl=ftp://192.168.130.128/other

        enabled=1

        gpgcheck=0

    yum clean all

    yum makecache

    yum list

yum命令    yum 选项 所要进行的操作 安装包

选项:

-h 显示此帮助消息并退出

-t 忽略错误

-C 完全从系统缓存运行,不升级缓存

-c[config file] 配置文件路径

-R[minutes] 命令最长等待时间

-d[debug level] 调试输出级别

-e[error leve] 错误输出级别

-q 静默执行

-V 详尽的操作过程

-y 回答全部问题为是

所要进行的操作:

List 查看软件包列表

list installed  查看已安装的

list available 查看可用的(尚未安装)

list updates 查看可升级的

grouplist 查看软件包组信息

info 查询软件包的描述信息

groupinfo 查看软件包组中包含的软件

install 全部安装

remove 卸载软件包

update 全部升级

makecache 重建缓存

clean 删除yum缓存数据

localinstall 安装本地rpm包

repolist 显示启用的yum仓库配置

常用命令

yum-y install 安装包名

yum list all 查了yum源所有安装包

yum clean all 清除所有yum缓存数据

yum makecache 建立yum缓存

更换网络yum源

yum -y install wget

cd/etc/yum.repos.d/

mkdir a

mv * a

wget -O http://mirrors.aliyun.com/repo/Centos-7.repo(下载网络源)

NFS服务

NFS(Network File System)网络文件系统FreeBSD支持的文件系统中的一种它允许网络中的计算机之间通过TCP/IP网络共享资源。主要功能是通过网络一般是局域网),让不同的主机系统之间可以共享文件或目录。NFS客户端(一般为应用服务器,例如WEB服务器)可以通过挂载(mount)的方式,将NFS服务端共享的数据目录挂载到NFS客户端本地系统中(就是某一个挂载点目录下)

NFS客户端的机器本地看,NFS服务端共享的目录就好像是客户自己的磁盘分区或者目录一样,而实际上确是远端的NFS服务端的目录。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。NFS网络文件系统类似windows系统的网络共享、安全功能、网络驱动器映射,应用于互联网中小型集群架构后端作为数据共享,如果是大型网站,那么有可能还会用到更复杂的分布式文件系统,例如Moosefs,GlusterFS,FastDFS。

工作原理

client发请求到NFS服务器的portmapper(端口映射),然后portmapper告诉client端mountd的端口号,然后client端连接mountd,然后mountd发送令牌给client端,client再找nfsd

因为NFS支持的功能相当多,而不用的功能都会使用不同的程序来启动,每启动一个功能就会启用一些端口来传输数据,因此,NFS的功能所对应的端口不是固定的(小于1024的随机取值),但是客户端连接服务器端必须要知道对应端口。

那么我们就得需要远程过程调用(RPC)的服务协助,RPC最主要的功能就是在指定每个NFS功能所对应的port number,并且回传给客户端,让客户端可以连接到正确的端口上。所以在启动NFS之前,RPC需要先启动,否则NFS会无法向RPC注册。另外,RPC若重新重启,原本注册的数据会不见了,因此RPC重新启动后,它管理的所有服务都需要重新启动向RPC注册

当客户端有NFS存取需求时,它会向服务器端的RPC(port 11)发出NFS档案存取功能的询问要求,服务器端找到对应的已注册的NFS daemon端口后,发送给客户端,客户端收到正确的端口后,就可以直接与NFS daemon来联机。

   

部署NFS服务

安装包

nfs-utilsNFS服务主程序包括rpc.nfsd、rpc.mountd两个daemons和相关文档说明及执行命令程序等。

rpcbindRPC的主程序NFS可以被视为一个RPC程序,在启动任何一个RPC程序之前,需要做好端口映射工作,这个映射工作就是由rpcbind服务来完成的。因此必须先启动rpcbind服务

服务端配置

yum -y install nfs-utilsrpcbind

rpm -qa nfs-utils rpcbind

rpcbind-0.2.0-47.el7.x86_64

nfs-utils-1.3.0-0.61.el7.x86_64

#启动NFS相关服务

systemctl restart rpcbind

systemctl restart nfs

#查看111端口进程占用(rpc服务)

lsof –i:111

rpcinfo -p localhost

配置NFS服务

#NFS服务默认配置文件(默认为空) /etc/exports

#创建共享的数据目录

mkdir/data

touch /data/linux

#授权目录及主机

vim /etc/exports

/data 192.168.130.*(rw,sync)

systemctl restart nfs

#列出NFS服务器共享目录

showmount-e 127.0.0.1

showmount

-e 显示NFS服务输出的目录列表

-d 显示NFS服务中提供的共享目录

-a IP:/die格式显示NFS服务器IP和可被挂载的目录

客户端配置

yum -y install rpcbind

rpm -qa rpcbind

showmount -e 192.168.130.128

mount -t nfs 192.168.130.128:/data /mnt

df -Th

touch /mnt/abc

touch无法创建"abc"权限不够

服务端无法写入是因为权限问题

ll /data/

id nfsnobody

chown -R nfsnobody /data/

ll /data/

生产环境推荐配置

vim/etc/exports

/data 192.168.10.*(rw,sync,all_squash)

exportfs –rv       #加载配置生效相当于重启NFS服务

在客户端测试是否能创建文件

把服务启动和挂载命令放在客户端的/etc/rc.local文件

    /etc/rc.local 开机自动挂载配置文件

NFS主配置文件参数

rw读写权限, ro只读权限

sync请求或写入数据时,数据同步到NFS的硬盘中才返回,优点数据不会丢失,缺点性能下降

async请求或写入数据时,先返回请求,在将数据写入到内存缓存和硬盘,异步写入,降低数据安全性,不建议用

no_root_squash访问NFS共享目录的用户是root,对该共享目录具有root权限

root_squash访问NFS共享目录的用户是root,则它的权限将被压缩成匿名用户,UID和GID变成nfsnobody账号身份

all_squash无论NFS共享目是什么用户,权限都被压缩成匿名用户

配置文件完整参数设置的文件(很多配置是NFS默认参数,仅供参考)

cat /var/lib/nfs/etab

客户端挂载参数(了解)

cat /proc/mounts |tail-1

NFS优缺点

NFS优点

1、简单,容易上手,容易掌握。

2、NFS文件系统内数据是在文件系统之上的,即数据能看见。

3、方便,部署快速,维护简单,可控且满足需求。

4、可靠,从软件层面上看、数据可靠性高,经久耐用。数据是在文件系统之上的

5、稳定性。

NFS缺点

1、存在单点故障,如果nfs server关机了所有客户端都不能访问共享目录,可以通过负载均衡及高可用方案弥补。

2、在大数据高并发的场合,NFS效率、性能有限3、客户端认证是基于ip和主机名的,权限是根据ID识别,安全性一般(用于内部测试问题不大)。

4,NFS数据是明文的,NFS本身对数据完整性不作验证。

5、多台客户机器挂载一个NFS服务器时,连接管理维护麻烦(耦合度高)。尤其NFS服务出现问题后,所有NFS客户端不可用(测试环境可以使用autofs自动挂载解决)。

6、大中小型网站(2千万PV访问量以下)线上应用,都可用。

PXE高校批量网络装机

PXE:预启动执行环境

原理:

PXE Client需要安装操作系统的机器简称客户端

TFTP Server需要安装TFTPD服务的机器

DHCP Server需要安装DHCPD服务的机器

在实际工作中都是将TFTP Server,DHCP Server安装在一台机器上统称PXE服务端

工作流程:

1.客户端向服务器DHCP发送IP地址请求,DHCP服务器接收到客户端请求后把IP地址和启动文件pxelinux.0的位置一起发送给客户端

2.客户端向服务端TFTP发送获取pxelinux.0消息,TFTP接收到消息后向客户端发送pxelinux.0大小的信息,客户端反馈消息,当TFTP收到客户端返回的消息后,正式向客户端发送pxelinux.0

3.客户端接收pxelinux.0文件

4.客户端向TFTP发送针对本机的配置信息(在TFTP上的pxelinux.cfg目录下),TFTP将配置文件发送给客户端,客户端根据配置文件执行后续操作

5.客户端向TFTP发送Linux内核信息,TFTP接收到消息后将内核信息发送给客户端

6.客户端向TFTP发送根文件请求,TFTP接收到消息后将Linux根文件系统返回给客户端

7.客户端启动linux内核

8.客户端进入安装模式

使用场景:

无光驱或者光驱损坏,需要安装Linux系统

对系统维护不当,导致需要频繁安装linux系统

需要大规模批量部署linux系统

前提条件:

客户机网卡支持PXE协议主板支持网络引导(BIOS)

网络中有DHCP服务器为客户端自动分配网络地址,并指定引导文件位置

服务器通过TFTP提供引导镜像文件的下载

PXE 结合 Kickstart 配置实现无人值守自动安装

PXE严格来说不是一种安装方式,是一种引导方式,相当于咱们平时安装windows系统时候的U盘引导

Kickstart是一种无人值守安装方式,原理是记录安装过程需要人工干预的一些配置参数,生成一个名为ks.cfg的文件,服务端告诉客户端安装程序从哪里取ks.cfg,然后客户端安装程序会根据ks.cfg中的配置来执行安装步骤,最后完成安装

半自动化PXE引导安装Linux

配置yum仓库安装源(先将镜像挂载media目录,安装vsftpd。然后卸载再挂载到vsftpd,启动vsftpd服务,手写yum源为ftp

yum –y install tftp-server xinetd dhcp syslinux system-config-kickstart

    mount /dev/sr0 /media/

    rpm –ivh /media/Packages/vsftpd-3.0.2-25.el7.x86_64.rpm

    umount /media/

    mkdir /var/ftp/centos/

    mount /dev/sr0 /var/ftp/centos/

    systemctl start vsftpd

    cd /etc/yum.repos.d/

    mkdir a

    mv * a

    vim yum.repo

        [base]

        name=nase

        baseurl=ftp://192.168.130.128/centos

        enabled=1

        gpgcheck=0

    yum clean all

    yum makecache

    yum list all

安装tftp,xinetd,dhcp服务

tftp服务由tftp-server软件包提供,默认通过xinetd超级服务进行管理,需要将/etc/xinetd.d/tftp中的disable=yes改为disable=no

这里大家对tftpvsftp容易混乱我分别说下他们两个的作用

安装tftp是为了存放引导文件及内核文件来用的

安装vsftp是为挂载镜像存储cfg文件来用的

vim/etc/xinetd.d/tftp

disable=no

systemctl start tftp

准备linux内核初始化镜像文件

linux内核文件和初始化镜像文件可以从光盘中找到,位于images/pxeboot下vmlinuz和initrd.img,将这两个文件复制到tftp服务的根目录下

cd /var/ftp/centos/images/pxeboot/

cp initrd.img vmlinuz /var/lib/tftpboot/

准备pxe引导程序,启动菜单文件

pxe网络安装的引导程序为pxelinux.0,由软件包syslinux提供,安装完软件包后将文件复制到tftp服务的根目录下

cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/

启动菜单用来指导客户端的引导过程,默认启动菜单为default,应放在tftp根目录的pxelinux.cfg 目录中

mkdir /var/lib/tftpboot/pxelinux.cfg

vim /var/lib/tftpboot/pxelinux.cfg/default

default linux#默认入口名称

prompt 0      #1表示等待用户控制,0表示不等待

timeout 30    #超时时间

label linux

kernel vmlinuz

append initrd=initrd.img devfs=nomount method=ftp://192.168.130.128/centos

定义了三个引导入口,分别是图形安装默认),文本安装救援模式

prompt 设置是否等待用户选择

label 定义并把多个启动项分开

Kernel append 定义引导参数

配置并启动DHCP服务

PXE客户端通常是没有安装系统的裸机,肯定要与服务器取得联系并下载相关的引导文件,所以需要预先配置好DHCP服务来自动分配地址并反馈引导文件位置.

cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf

vim /etc/dhcp/dhcpd.conf

   

next-server 192.168.130.128 ; #ttp服务器地址

filename“pxelinux.0”    #pxe 引导文件名

systemctl start dhcpd

systemctl restart xinetd

创建新的虚拟机并保证和服务端在同一个网卡模式上来验证

实现kickstart无人值守安装

使用kickstart工具配置安装应答文件,自动安装安装过程中的各种配置,不需要手动干预,提高效率

通过系统命令system-config-kickstart生成cfg配置文件,保存到/var/ftb/pub/目录下

修改pxe启动菜单文件 vim /var/lib/tftpboot/pxelinux.cfg/default

配置多台label时,使用system-config-kickstart命令来生成多个cfg文件,并将其写入pxe启动菜单文件中

Shell脚本

shell脚本的分类

图形化界面shell(GUI shell)

例如应用广泛的windows操作系统,还有linux shell其中linux shell还包括x window manager,以及功能更强大的GNOME,KDE等

命令行式shell(CLI shell)

传统意义上的shell就是命令行式的shell,shell是操作系统最外面的一层,shell管理你与操作系统之间的交互,等待你输入,向操作系统解释你的输入,并且处理各种各样的操作系统的输出结果

shell脚本的概念

将平时使用的各种linux命令按顺序保存到一个文件中,添加上执行权限,就是一个shell脚本

shell的应用场景.

重复性操作

批量事务处理

自动化运维

服务器运行状态监控

定时任务执行

shell的概念

shell是在操作系统最外层,介于操作系统和用户之间的一个命令解释器(翻译官)的角色,负责接收用户输入的指令并向内核进行逐条解释,并将输出的结果返回给用户

查看当前操作系统支持的Shell解释器

cat /etc/shells

/bin/sh

/bin/bash

/usr/bin/sh

/usr/bin/bash

/bin/tcsh

/bin/csh

/bin/sh  = /bin/bash  = usr/bin/sh  = /usr/bin/bash

/bin/tcsh  = /bin/csh

查看当前的系统用的shell解释器

echo $SHELL

切换shell解释器

/bin/csh

切换到子shell

bash

编写shell脚本的格式

1#!/bin/bash       #表示脚本通过bash解释器来执行

2#表示注释信息,比如对脚本功能一个解释说明,或者需要注释某些shell语句等

3定义脚本中的变量

例如a="a是一个变量"

4定义脚本中的函数

func(){

echo“这是一个函数”

}

5控制流语句(if判断,while循环等)

6利用echo定义输出一些让人更容易看懂的信息,便于排错(中英文自便)

脚本执行方式(3种)

通过绝对路径执行

chmod +x job.sh #添加执行权限

./job.sh

进入到脚本所在的目录下执行(推荐使用,脚本文件没有执行权限或脚本开头没有指定解释器

sh job.sh

bash job.sh

进入在脚本目录下

source job.sh (source常用于重新执行刚修改的初始化文件)

. job.sh

语法检查

bash –n 脚本名

查看shell脚本执行过程

bash- x 脚本名

shell脚本后缀名

.sh表示编写程序为bash

.pl表示编写的程序为perl

.csh表示编写程序为csh

.py表示编写程序为python

重定向和管道

交互式硬件设备文件:input,output,error,分别是

标准输入:从该设备接收到用户输入的数据,/dev/stdin,键盘

标准输出:通过该设备用户输出数据,/dev/stdout,显示器

错误输入:通过该设备报告执行出错信息,/dev/stderr,显示器

重定向操作

重定向输入

<,指定从文件中读取数据,而不是从键盘输入

passwd --stdin user < pwd.txt

wc-l</etc/passwd

重定向输出

>,将输出结果保存在指定文件中(覆盖原有内容)

echo"abcdefg"> output.txt

> test.txt

>>,将输出内容保存到指定文件中(追加到文件末尾)

echo"o98k">> output

标准错误输出

2>将错误信息保存到指定文件中(覆盖原有内容)

abc 2> error.txt

2>>将错误信息追加到指定文件中追加内容

www 2>> error.txt

混合输出,&>将错误输出和正确输出的内容保存至同一个文件中

ls -l error.txt o98k.txt&> file.txt

注意:/dev/null空文件黑洞(无限大空间)

处理多行输出EOF可以是任意字符

cat << EOF > test.txt

黄山落叶松叶落山黄山西运煤车煤运西山

EOF

道符 |

将管道前的命令输出的结果作为管道后的命令参数使用

xargs在某些特殊情况下,管道会失去作用可以使用xargs强制管道符后的命令使用管道前的命令输出的内容作为参数

awk命令基本使用

awk –F分隔符 ‘{print 列}’

df –Th|grep "/$"|awk ‘{print $6}’  /$:以/结尾的

shell 变量

常量固定字符串,一般不轻易改变

变量类型环境变量(全局变量)局部变量

自定义变量,由用户自定义的变量,只在本地shell环境中生效,就是当前这个shell环境,变量名必须使用英文或下划线开头变量名内不允许出现特殊符号字母区分大小写

设置变量

变量名=变量值

查看变量

echo $变量名

特殊符号

双引号“”,可以引用一个有空格的变量值

单引号‘’,引号内的内容被视为完整的字符串,不能引用变量

反撇号``,引号内的执行结果作为变量名的变量值,引用命令使用,也可以使用$()

read命令

提示用户输入信息,从而简单的实现交互变量设置.

-p 设置提信息

-t 设置等待时间

read -p“提示信息”变量1 变量2

提示信息 变量值1 变量值2

read –p "请输入名字年龄":name age

echo $name

echo $age

设置变量生效范围

新定义的变量只能在当前shell环境中生效,又称局部变量

export将局部变量变成全局变量,对子shell有效,对父shell无效

#设置一个变量test,并在当前shell 环境中打印变量值test=“变量”

#echo $test

#切换到新的子shell环境再次查看(并没有这样的变量)

#echo $test

#退出子shell,重新使用export设置变量,再进入子shell环境,再次查看

#export test

#bash

#echo $test

也可使用export定义全局变量

export test2="这是个全局变量"

数值变量的运算

expr只能进整数运算,不支持小数运算

X=12

Y=22

expr $X+$Y

expr $X-$Y

expr $X\*$Y

expr $X/$Y

其他运算方式

echo $((100-33))

echo $[100-33]

echo"scale=2;100+33"|bc

echo $((1000*(1000+1)/2))100+1=n*(n+1)/2

    判断文件或字符串的扩展名小案例expr "text.pub" : ".*\.pub" && echo 1||echo 0

特殊的shell变量

环境变量

env 查看环境变量

由于运行需要而由linux系统提前创建的一类变量主要用于设置用户的工作环境

/etc/profile环境变量全局配置文件对所有用户都生效

~/.bash_profile 每个用户自己独立的环境变量

常用的环境变量

HOSTNAME

PWD

USER

set,env,export区别

env 显示用户的环境变量

set/declare 显示当前shell的自定义变量包括用户的环境变量

export 显示当前登录用户的SHELL变量

unset 取消变量

位置变量

    $0 获取当前执行的shell脚本的文件名包括路径

    $n 获取当前执行的shell脚本的第n个参数值,n=1..9,当n为0时表示脚本的文件名,如果n大于9要用大括号括起来${10}

    $* 获取当前shell的所有参数,将所有的命令行参数视为单个字符串,相当于“$1$2$3$4”…注意与$#的区别

    $@ 这个程序的所有参数 “$1” “$2” “$3” “…”,这是将参数传递给其他程序的最佳方式,因为它会保留所有内嵌在每个参数里的任何空白

    $# 获取当前shell命令行中参数的总个数

进程状态变量

$$ 获取当前shell的进程号(PID)

$! 执行上一个指令的PID

$?获取执行上一个指令的返回值(0为成功,非0为失败) #à这个变量很常用

$_ 在此之前执行的命令或脚本的最后一个参数

   $?反馈信息0 成功2 权限拒绝1~125表示运行失败,脚本命令错误或参数传递错误126 找到该命令了,但是无法执行127 未找到要运行的命令>128 命令被系统强制结束

附加命令

driname $0  取出路径

basename $0 取出名称

shift语句

shift语句重新命名所有的位置参数变量,即S2成为$1,s3成为$2 在程序中每使用一次shift语句,都使所有的位置参数依次向左移动一个位置,并使位置参数S#减1,直到减到0为止。

脚本应用思路

确定命令操作(构思整体流程)

编写shell脚本(组织脚本过程)

设置计划任务(控制时间,调用脚本)

正则表达式概述

使用单个字符来匹配一系列符号句法规则的字符串广泛用于脚本编程文件编辑中,用来检索替换符合模式的文本,具有强大的文本匹配功能,能够高效的处理文本.

linux运维工作中,需要时刻面临大量日志,程序,命令的输入,迫切的需要过滤出我们需要的一部分内容,甚至是一个字符串,这个时候就需要用正则表达式来处理

通配符

* 任意长度任意字符,属于通配符

? 单个任意字符,属于通配符

基础正则表达式

\       转义符

^       匹配行首(锚定行首)

$       匹配行尾

^$      表示空行

.       匹配除换行符\n之外的任意单个字符

.*      匹配任意长度任意字符

[]      匹配包含在[字符]之中的任意一个字符

[^]     匹配[字符]之外的任意一个字符

^[^字符]    匹配非指定字符开头的行

\{n\}   匹配之前的项n次, n是可以为0的正整数

\{n,\}  之前的项至少需要匹配n次

\{n,m\} 指定之前的项至少匹配n次,最多匹配m次

单词锚定

\<:其后面的字符必须作为单词的首部出现,也可\b

\>:其前的字符必须作为单词的尾部出现,也可\b

\<root\<:root必须作为一行的单词出现,也可\broot\b

转义符

\a 响铃

\b 退格

\n 换行

\r 替换字符

\t 空一个tab键位置

\v 制表符

\\\ 代表一个反斜杠字符

扩展正则表达式

+   匹配之前的项1次或者多次

?   匹配前边字符一次或0次

() 将括号中的字符串做为一个整体

|   交替匹配 | 两边的任意一项

shell中将一个或者多个字母进行大小写转换${test^}(^ 转换成大写,转换成小写)

grep

过滤关键字,根据模式搜索文本,并将符合模式的文本行显示出来,grep使用的是正则表达式

egrep=grep –E 是扩展grep,支持基本及扩展的正则表达式

grep 参数 ‘关键字’文件名

参数

-i 略大小写

-v 显示没有被模式匹配到的行相当于^[^]

-o 只显示被模式匹配到的字符串

-n 显示匹配行及行号

-c 只输出匹配行的计数

-1 查询多文件时只输出包含匹配字符的文件名

-L 打印不匹配的文件名

-e 满足多个过滤参数的条件

-r 递归查询

-E 使用扩展的正则表达式

-w 只显示全单词符合的行

-q 匹配内容不显示(静默模式)

sed

sed是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为模式空间”,接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。

格式:sed 选项‘行定界 /old字符/new字符/列定界符 处理动作'文件名

定界符

s 替换指定的字符

g 全局替换

i 不区分字符大小写

选项

-i 直接编辑原文件

-e‘script'-e‘script':指定多个编辑指令

-n 静默模式(默认打印),或只显示匹配后的内容

处理动作

! 取反,如!w、!=、!d、!i\#、!r\#、!w\#

d 删除

c 取代,c后面可以接字串,这些字串可以取代n1,n2之间的行

p 打印,通常p会与参数-n一起

i或i\ 在被指定到行的上面插入文本

a或a\ 在被指定的行的下面插入文本

\n 换行

r文件 在指定位置把另外一个文件的内容插入

w文件 将符合条件的所有行保存至指定文件中

= 显示符合条件的行的行号

    在文件中的每行后添加空行:sed ‘G’a.txt

创建多个用户:seq –w 10|sed -r 's/(.*)/useradd user\1/g'|bash

设置多用户密码: seq -w 5|sed -r 's/(.*)/psw=(123456);echo $psw|passwd --stdin user\1/g'|bash

seq

生成序列[1...LAST] seq nums

生成序列[FIRST...LAST],步长为1 seq nums1 nums2

生成序列[FIRST INCREMENT LAST],步长为INCREMENT (两边是开头和结尾,中间为步长)

-s  指定分隔符

-w  输出01 02 03 04 05....

awk

grep,sed,awk是shell编程中经常用都的文本处理工具(shell编程三剑客),awk是一和编程语言,主要用于处理结构化的数据,awk可以在非交互式情况下完成相当复杂的文本处操作,awk倾向于将一行分为多个"字段"来处理。

格式

awk 选项 ‘模式或条件(编辑指令)’ 文件

要查找出/etc/passwd的用户名,用户ID,组ID使用awk就可完成

awk –F ‘:’‘{print $1,$3,$4}' /etc/passwd

    条件操作描述符

关系操作符>、>=、<、<=、==(精确匹配)、!=(不等于)

赋值操作符=、+=、*=、/=、%=、^=

条件表达操作符

||、与&&、非!

匹配操作符 ~ ,!~ (模糊匹配)

算术操作符+、-、*、/、%、^(次方)

awk的常用的内置变量

FILENAME awk读取的文件名

FNR浏览文件的记录数(浏览文件次数,文件会累加记录)

NF浏览记录的域个数(当前行的字段数)

$NF表示最后一个区域

NR已读的记录行数(命令后跟的所有文件统一合并计数)

条件语句

单一的顺序结构脚本不够智能,难以处理复杂灵活的任务,使用if语句来使脚本增加灵活性,根据不同条件来完成不同的任务

条件测试

测试特定的条件是否成立,当条件成立则返回0,否则返回其他数值,根据命令的执行返回值来判断

0     真      执行成功    True

非0   假      执行失败    False

变量字串的常用操作:

拓展:批量改拓展名àrename .jpg .JPG *

其他变量替换(初学者跳过)

test -f file && echo 1||echo 0   查看文件是否存在

[ -f file ] && echo 1||echo 0  查看文件是否存在

常用文件测试操作符

记忆方法:  f=file(文件)

d=directory(目录)

s=size(大小)

e=exist(存在)

r=read(读)

w=write(写)

x=executable(执行)

nt=newer than

ot=older than

字符串操作测试符

整数二元比较操作符

逻辑操作符

逻辑操作符运算规则

结论: -a&&的运算规则:只有两端都是1才为真

10

and 1*0=0

and 0*1=0

and 1*1-1

and 0*0=0假

只有两端都是1才为真

结论:-o,||两端都是0才为假,任何一端不为0都是真

or 1+0=1

or 1+1=2

or 0+1=1

or 0+0=0

两端都是0才为假,不为0就是真

if语句类型

    单分支

if [ 条件测试语句 ]

then

命令序列

fi

如果条件成立,就执行命令序列,如果条件不成立则退出if语句

0 成立    非0 不成立

    双分支

if [ 条件测试语句 ]

then

命令序列1

else

命令序列2

fi

如果条件成立就执行命令序列1,否则执行命令序列2

    多分支

if [ 条件测试语句1 ]

then

命令序列1

elif [ 条件测试语句2 ]

then

命令序列2

else

命令序列3

fi

如果条件1成立就执行命令序列1条件1不成立判断条件2如果成立执行命令序列2否则执行命令序列3

case结构条件语句

case “字符串变量”in

     值1) 指令...

;;

     值2) 指令...

;;

     *) 指令...

esac

示例:

read -p "pls input a number:" ans

case "$ans" in

1)

        echo "the num you input is 1."

;;

2)

        echo "the num you input is 2."

;;

[3-9])

        echo "the num you input is $ans."

;;

*)

         echo "the num you input must be less 9."

exit

;;

esac

当型循环和直到型循环

while条件句

while 条件 (条件满足就执行)

    do

    指令...

done

示例:

while true

do

   uptime

   sleep 2

done

while true表示条件永远为真,因此会一直运行,像死循环一样,但是我们称呼为守护进程

until条件句(应用场景不多见,了解就好)

until 条件 (条件满足就退出)

do

指令...

done

for循环结构

for 变量名 in 变量取值列表

do

指令...

done

提示:在此结构中“in变量取值列表”可省略,省略时相当于in“$@”,使用for i相当于使用for i in“$@”

c语言型for循环结构

for((exp1;exp2;exp3))

do

指令...

done

学习方法:

for 男人 in 世界.

do

if [有房] && [有车] && [存款] && [会做家务] && [帅气] && [温柔] && [体贴] && [逛街买东西]; then

echo "我喜欢".

else

rm -f 男人

fi

done

shell脚本中取随机字符串

echo $RANDOM

openssl rand -base64 8|md5sum

date +%s%N

head /dev/random|cksum

cat /proc/sys/kernel/random/uuid

yum -y install expect -y       mkpasswd|md5sum

echo “$RANDOM$(date +%N$t)”

检测字符串唯一性:mkpasswd|md5sum|cut -c 1-9|sort|uniq -c|sort -nk1

break continue exit 对比

break continue exit一般用于循环结构中控制循环的走向。

break跳出整个循环,执行下面的其他程序

continue跳出当前循环,进入下一个循环

exit终止循环,并退出shell脚本程序

    广告一刻

    为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!