运维基础

2020-05-14 16:01:55来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

运维基础

学习笔记

 目录

前言  运维人员的核心职责... 1

第一章服务器硬件与组成原理... 1

服务器... 1

1.服务器的分类:... 1

2.服务器的组成:... 2

1)电源:... 2

2)cpu. 2

3)内存... 2

4)磁盘... 3

5)RAID卡(阵列卡).. 3

6)远程管理卡:.. 3

第二章 LINUX系统介绍与环境搭建... 4

1.LINUX的起源与发展... 4

2.下载安装VM虚拟机... 4

3.CentOS7.5  安装... 5

4.下载安装远程连接工具.. 20

第三章 远程连接管理... 20

1.远程连接及服务无法上网原因:.. 20

1)检查ip地址是否正确... 20

2)检查网卡信息是否正确.. 20

3)检查是否关闭了CentOS7 NetworkManager 20

4)检查vmware虚拟网络编辑器... 20

5)检查VMware服务在Windows下的服务是否正常运行... 20

6)检查VMware网卡问题(在Windows下的网络连接里).. 20

7)检查Windows是否开启了WIFI热点软件,是否被共享.. 21

8)测试端口是否打开.. 21

9)虚拟机克隆之后网卡彻底无法启动... 21

第四章 Linux命令行组成结构... 21

1.Linux系统命令操作语法的格式... 21

2.命令行中的快捷键.. 21

3.命令... 22

第五章 Linux目录文件与系统启动... 26

1.Linux系统目录建构基本特点:... 26

2.Linux 的目录结构详解:.. 27

3./etc 下系统初始化及配置相关文件.. 28

1)/etc/sysconfig/network-    网卡配置文件... 28

2)/etc/resolv.conf    DNS客户端配置.. 28

3)/etc/hostname   配置主机名... 29

4)/etc/hosts   本地配置解析域名.. 29

5)/etc/fstab   开机自动挂载... 29

6)/etc/rc.local    开机自动执行... 29

7)linux 下运行级别... 29

8)/etc/profile   环境变量配置... 30

9)/etc/bashrc   别名... 30

10)/etc/issue 和/etc/issue.net  用户登录系统前显示的内容... 30

11)/etc/motd    用户登录系统后显示的内容... 30

12)/etc/redhat-release  查看当前OS版本.. 30

13)history   查看历史命令... 31

4.  /var. 31

1)/var/log/messages   系统默认的日志文件.. 31

2)/var/log/secure    系统的安全日志... 31

5.  /proc   虚拟的目录,内存的映射... 31

1)  /proc目录下常用文件介绍:... 31

2)/proc/cpuinfo  cpu信息... 31

3)/proc/meminfo  查看内存信息... 32

4)/proc/loadavg  load average系统负载.. 32

5) /proc/mounts  查看挂载信息... 33

第二次考... 33

6.软件安装方法:... 35

1)yum.. 35

2)rpm.. 35

第六章  系统优化... 36

1.  yum源... 36

2. 创建普通用户... 36

1)设置非交互式密码:... 36

2)切换到用户:.. 36

3)查看当前用户是谁:... 36

4)查看用户是否创建:... 37

5)在oldboy 回到root 37

6)如果直接使用Xshell连接 则上面的方法无效.. 37

3. 关闭SElinux  (必须关)... 37

4. 关闭防火墙... 38

1)CentOS7.x. 38

2)CentOS6.x. 38

3)在生产环境中.. 39

5. 字符集,乱码... 39

1).如何查看字符集  language 语言... 39

2).临时修改字符集  重启失效... 39

3).永久修改字符集... 39

4).命令方式修改字符集... 40

6.安装常用工具软件,命令... 40

7.网络服务,永久和临时关闭NetworkManager 40

第七章... 40

第八章  文件属性,文件和目录查找命令.. 41

1.文件和目录的查找... 42

2. 文件的属性... 45

3.chmod  修改权限... 46

4. 硬链接 和 软链接... 47

1)硬链接: 47

2)软链接... 48

第三次考... 48

第九章 通配符与特殊符号.. 51

1. 特殊符号... 51

2. 通配符(wildcard).. 52

第十章  正则表达式... 53

1.基本正则表达式.. 53

2.扩展正则表达式.. 54

第十一章Linux系统启动流程.. 56

1.CentOS 6. 56

2.CentOS 7. 57

第十二章 用户管理知识... 58

Linux系统用户相关配置文件.. 58

1.存储用户信息文件/etc/passwd. 58

2.存储用户密码信息文件/etc/shadow.. 58

3.useradd   添加用户... 58

批量添加用户:设置密码和设置随机密码.. 58

4.userdel    删除用户... 59

5.passwd   设置密码... 59

6.chown    修改文件或目录的所有者和属于的用户组... 59

7.如何让系统更安全:... 59

1)最小化安装系统和软件.. 59

2)保护好root用户  禁止root用户远程登录,.. 59

3)分析日志... 59

4)文件系统权限.. 59

5)给重要的文件或命令做一个指纹.. 59

6)定时任务:md5sum.. 60

8.用户查询与切换命令... 60

9.sudo 临时让用户获得root权限(尚方宝剑).. 60

第十三章Linux系统权限知识.. 61

第四次考... 73

第十四章 定时任务... 80

定时任务书写要领:... 83

第十五章 磁盘管理... 86

Linux同步网络时间... 93

Linux误删文件后恢复数据... 96

第十六章 课程知识回顾... 101

 

 

前言  运维人员的核心职责

   网站数据不能丢失;

   网站7*24小时运行稳定;

   提升用户体验。

第一章 服务器硬件与组成原理

   运维人员的主要战场

   服务器由于需要提供高可靠的服务,因此在处理能力,稳定性,可靠性,安全性,可扩展性,可管理性等方面要求较高。

01.硬件服务器的分类:

1.塔式服务器:由于其个体较大,占用空间多,也不方便管理,所以使用较少。

2.刀片式服务器:高可用,高密度,可操作性很高

3.机架式服务器:1U=4.45cm  厚度

常见的服务器品牌;DELL  IBM  HP  联想  浪潮等

DELL

 

 

时间

1U

2U

2010年以前

1850  1950

2850  2950

2010-2013

R410  R610

R710

2014-2016

R420/430  R620/630

R720/730    

2018

 

R740

互联网公司应用最广

 

IBM

 

1U

3550/m3   3550/m5

2U

3650

4U

3850

8U

3950

较高大上,质量好,但价格贵,互联网公司不常用

 

IOE运动:

I=IBM          服务器

O=Oracle      数据库

E=EMC        存储

 

HP

 

2U

DL380G7/G8

部分互联网公司应用

 

浪潮     国产服务器,传统企业,学校用

华为     国产服务器

联想     国产服务器,用户较广,杂

02.硬件服务器的组成:

1.电源:

双电源 双路供电(民用电+商用电)

UPS蓄电池 (30分钟-1小时)

柴油发电机

2.cpu   ---负责运算和控制

相当于人的大脑  负责运算和控制  (需加风扇负者散热,很关键)

 

常见品牌:Intel  AMD

   一般企业里的服务器:用2-4颗  内存总量一般16G-256G(32G,64G)

   做虚拟化的宿主机的服务器:用4-8颗  内存总量一般48G-128G(6-10个虚拟机)

3.内存  ---负者计算机数据的中转

cpu和磁盘之间的缓冲的设备,负责计算机数据的中转,内存的容量和处理速度直接决定了数据传输的快慢

  

程序:静态的放在磁盘里的数据,代码文件

进程:正在运行着的程序

守护进程:一直持续保持运行着的程序

 

buffer写入数据到内存里,这个存储数据的空间称为缓冲区

cache:从内存读取数据,这个存数据的内存空间称为缓存区

4.磁盘 ---永久存放数据的地方

1)硬盘的接口类型:

IDE  SCSI  (已淘汰)

 

SATA (机械)  7200-7500转

优点:容量大,价格便宜。

缺点:读写速度慢

 

SAS             15000转

 

SSD (固态)

优点:速度快

缺点:容量小,价格贵

  

2)硬盘的类型:

机械硬盘

SSD固态硬盘

 

3)性能与价格:

SSD(固态)---SAS---SATA

 

4)实际中的使用:  

热点数据   -----SSD

冷数据      -----SATA

5.RAID卡(阵列卡)  ---可整合所有磁盘的容量

作用:

可以获得更高的容量

可以使数据更安全

可以获得更高的性能(读写速度快)

  

磁盘阵列:

 

容量

性能

安全

RAID0

至少要一块物理磁盘,容量时磁盘的总和

读写都很快

任何一块损坏,所有数据不能使用

RAID1

损失50%的数据容量,只能2块硬盘

不能提高存储性能,理论上写性能和单盘相差不大

数据安全性高

RAID5

需要至少3块硬盘,损失一块硬盘容量

写入速度不快,读取ok

最多可以损坏一块硬盘

RAID10

最少4块硬盘,增加硬盘必须是2的倍数,容量是所有硬盘容量的一半

写入和读取都很快

最多损坏一半硬盘

 

6.远程管理卡:  ---远程管理服务器

  远程管理卡有服务器自带的,也有独立的。

  服务器自带的远程管理卡,可以关机,开机,但是看不到开关机的显示过程,所以选择独立 的远程管理卡。

  大客户有KVM远程管理卡,特大客户会有自己的人员驻扎机房。

 

作用:

    远程开关机

    远程制作raid

    远程安装系统

 

分类:

    集成管理卡

    独立管理卡

 

厂商:

    Dell--idrac

    Hp--ilo

    Ibm—rsa

 

 

03.云主机服务器

阿里云

腾讯云

亚马逊云

等等…

 

 

 

第二章 LINUX系统介绍与环境搭建

01.LINUX的起源与发展

1.Linux的发展历程

1969年 Unix在AT&T的贝尔实验室诞生,在70年代逐步盛行,这期间产生了一个比较重要的分支BSD系统,因此各大厂商根据自身公司硬件架构研发了各种版本的Unix系统。

Unix促使了C语言的诞生。

UNIX有强大的网络能力,强大的数据库能力,可扩展性,强大开发能力,技术成熟可靠性强。

 

70年代末,Unix面临被AT&T回收版权的问题,特别要求禁止对学生群体提供Unix系统源代码。

 

80年代初,由于之前的Unix系统版权和源代码限制问题,使当时大学教学Unix系统束缚很大,因此谭宁邦教授写了Minix系统用于教学。

 

84年,斯托曼发起了开发自由软件的运动,

公司:创办了自由软件基金会——FSF,

项目:成立了GNU项目.

规则:遵循GPL通用公共许可协议

 

90年,芬兰赫尔辛基大学生托瓦兹首次接触Minix系统,

91年,他在Minix上编写各种驱动程序等操作系统内核组件,在年底公开了Linix内核源码0.02版。

 

93年,Linux 1.0版本发行,Linix转向GPL协议。

Linux属于自由软件,它具有UNIX全部的优秀特性,广泛应用于各个领域。

           蛋----人----人----人

 

2.Linux发行版本:

Slackware,

Redhat,

Debian,

FeDora,

TurboLinux,

M按drake,

SUSE,

CentOS,

Ubuntu,  

红旗,

麒麟……

  

Redhat   --- 服务收费

        CentOS  ---  Redhat去掉logo和收费的组件

        Fedora  ---  Redhat的测试版本

02.操作系统虚拟环境准备

下载安装VM虚拟机

   VMware 12/15

   创建新的虚拟机—自定义

 

03.操作系统的选择与安装

1.操作系统架构介绍

区别:

    64位:

          运算能力:8车道

          内存容量:支持更大内存容量

          应用环境:应用在服务器环境,处理大量程序运算

    32位:

运算能力:4车道

内存容量:支持内存容量有限

应用环境:应用在台式机环境

 

2.操作系统安装

1)操作系统下载

官方网站下载:

    新版本:https://wiki.centos.org/Download

    旧版本:http://vault.centos.org/

镜像平台下载:

    阿里云镜像:https://opsx.alibaba.com/mirror

    网易镜像:http://mirrors.163.com/

    搜狐镜像:http://mirrors.sohu.com/

    科技大学:http://mirrors.ustc.edu.cn/

    清华大学:https://mirrors.tuna.tsinghua.edu.cn/

 

2)部署安装CentOS7.5

  

   

  

  

  

  

  

  

  

  

  

  

  

  

  

 

 

 

 

 

 

 

内核崩溃时使用,暂不开启

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

总结安装过程:

1. 创建虚拟机

2. 新增一块网卡-->LAN区段

3. 挂载centos7.5光盘镜像

4. 开机

5. 语言选择(英语)

6. 修改时区->上海

7. 最小化安装

8. 磁盘(默认—逻辑卷)

9. 自动配置分区

10.     分析内核崩溃原因的话,不用开启,需要的时候再开启也可以

11.      配置网络

12.     11 主机名修改

13.     设置root密码

14.     使用xshell链接对应centos7服务器

15.图形化界面配置eth1网卡    命令nmtui

 

 

 

04.下载安装远程连接工具

免费的:Xshell ---  一路下一步完成安装

花钱的:SecureCRT

简易的:putty

 

 

第三章 远程连接管理

01.远程连接异常排错思路:

检查链路是否畅通 ---  ip概念说明

检查策略是否阻止 ---  端口概念说明

检查服务是否启动 ---  服务协议概念说明

 

02.远程连接异常排查:

1.检查ip地址是否正确   

ip add/ifconfig

 

2.检查网卡信息是否正确  

cat /etc/sysconfig/network-scripts/ifcfg-eth0

 

3.检查是否关闭了CentOS7 NetworkManager

systemctl stop NetworkManager

systemctl disable NetworkManager

 

4.检查vmware虚拟网络编辑器

NAT模式:子网IP:10.0.0.0  设置网关:10.0.0.254

 

5.检查VMware服务在Windows下的服务是否正常运行

(win键+r)在命令行输入(services.msc)

  

 

6.检查VMware网卡问题(在Windows下的网络连接里)

(win键+e)输入“网络连接”进入网卡管理找到VMnet8,查看他的状态

 

7.检查Windows是否开启了WIFI热点软件,是否被共享

 

8.测试端口是否打开

telnet 10.0.0.200 22

 

9.虚拟机克隆之后网卡彻底无法启动

删除网卡里包含UUID的行(CentOS7)

删除UUID和HWADDR(CentOS5和6)

清空 /etc/udev/rules.d/70-persistent-net.rules(CentOS5和6)

重启虚拟机Linux

 

10.检查网卡状态,重新加载虚拟网卡(多加载几次)

Systemctl restart network

 

ping不通百度:一般看IP地址是否配置正确,DNS,网卡是否有误

连接不上xshell,一般与防火墙,selinux有关

 

03.虚拟软件网络模式特点

1.NAT模式

优点:和主机IP地址不同, 不容易发生地址冲突

缺点:不便于被其他物理主机进行访问

2.Bridged桥接模式

优点:容易被其他物理主机进行访问

缺点:和主机IP地址网段相同, 容易发生地址冲突

3.Only-host仅主机模式

优点:安全性更高

缺点:无法访问外网

 

第四章 Linux命令行组成结构

绝对路径:从/开始

相对路径:不从/开始

01.Linux系统命令操作语法的格式

   命令       空格 [参数选项](条件) 空格          [文件或路径]你要处理的内容

   结婚       空格 -有车有房有存款     空格          白富美

   结婚       空格 -没车没房没存款     空格          女的就行

    rm        空格      -f           空格          /tmp/test.txt

    rm        空格          -fr        空格          /tmp/test.txt

 

# 在Linux中是注释作用,不会执行

02.命令行中的快捷键

ctrl + a    光标快速移动到行首  Home 也可用

ctrl + e    光标快速移动到行尾  End 也可用

ctrl + l     快速清屏 相当于翻页

ctrl + s     锁当前的窗口

ctrl + q    解锁当前的窗口

ctrl + r     搜索用过的命令

ctrl + u    剪切光标前的内容

ctrl + k     剪切光标后的内容

ctrl + y     粘贴剪切的内容

ctrl + ←  快速移动光标向左一个单词

ctrl + →  快速移动光标向右一个单词

ctrl + c     撤销 中止当前的操作

ctrl + d    退出当前用户  相当于 logout

Tab        命令或路径的补全功能

ESC + .    获取上一个命令的后一部分

03.命令:

登录系统网络测试命令:

ping 网络地址/网站域名

 

系统运行命令:

关机命令:

    shutdown -h now/0  可限定时间shutdown -c --取消

    halt

    poweroff

    init 0

 

重启命令:

    shutdown -r now/0   可限定时间shutdown -c --取消

    reboot

    init 6

 

系统帮助命令:

    man 命令

 

系统快捷方式

ctrl + a      ---光标快速移动到行首  Home 也可用

ctrl + e    ---光标快速移动到行尾  End 也可用

ctrl + l     ---快速清屏 相当于翻页

ctrl + s     ---锁当前的窗口

ctrl + q    ---解锁当前的窗口

ctrl + r     ---搜索用过的命令

ctrl + u    ---剪切光标前的内容

ctrl + k     ---剪切光标后的内容

ctrl + y     ---粘贴剪切的内容

ctrl + ←  ---快速移动光标向左一个单词

ctrl + →  ---快速移动光标向右一个单词

ctrl + c     ---撤销 中止当前的操作

ctrl + d    ---退出当前用户  相当于 logout

Tab        ---命令或路径的补全功能

ESC + .    ---获取上一个命令的后一部分

 

目录路径相关命令:

查看路径:print working directory -> pwd

切换目录:change directory -> cd

快速返回之前所在目录:cd -

快速返回到上一级目录:cd ..

快速返回用户的家目录:cd ~/cd

快速创建多级目录信息:mkdir -p /oldboy/oldgirl/dog

 

文件相关命令:

创建空白文件:touch

查看数据属性:list -> ls

显示数据详细信息:ls -l /oldboy

显示最新数据信息:ls -lrt /oldboy

输出字符信息:echo

将字符信息输出到文件中:echo oldboy >/tmp/oldboy.txt

将字符信息追加到文件中:echo oldboy >>/tmp/oldboy.txt

查看文件信息:cat

合并多个文件的数据信息:cat /etc/service /etc/sysconfig/network-scripts/ifcfg-eth0

 

 

 

外部命令 软件功能实现   使用的时候才从硬盘中加载到内存里,执行速度慢一些

内置命令:

内置命令 bash自带的命令 开机会把命令加载到内存,执行速度快

type cd 查看是否是内部命令

help cd 查看shell内置命令的使用方法

 

ls 显示文件或目录的属性信息

ls 默认显示当前文件夹中的所有文件及文件夹,不包括隐藏文件

ls -a 显示所有文件 文件夹包括隐藏文件

ls -l 显示所有文件long类型长文件名

ls -R 递归的显示文件内容:把所有文件夹中的内容全部显示出来

ls /xx 显示特定目录下的文件内容

ls -l 命令的查询结果

 

chmod 设置权限

chmod ugo <!-- u创建者,g同组用户,o其他用户 -->

chmod 777 <!-- 所有用户拥有所有权 -->

chmod 644 <!-- 文件创建之后的默认权限 创建者可读可写 其他用户可读 -->

chmod 755 <!-- 文件夹创建后的默认权限 -->

chmod 764 文件名 <!-- 拥有者可读可写可执行,同组用户可读可写,其他用户只能读 -->

 

reboot <!-- 重启服务器

 

绝对路径 从/开始的路径

相对路径 从当前路径算起

 

对目录的操作命令

pwd(print work diretory) <!-- 显示当前的工作目录 -->

mkdir -p xxx <!-- 创建目录 -->

mkdir -p xxx/xxx <!-- 创建多级目录 -->

cd(change directory) <!-- 切换工作目录 类似windows cd -->

-->

cd . <!-- 当前目录 -->

cd .. <!-- 上级目录 -->

直接输入cd命令 <!-- 没有任何额外参数 回到家目录(home) 或 cd ~ -->

 

对文件进行编辑

touch xxx <!-- 创建一个空文件 -->

vi/vim <!-- 编译器 创建一个文件 -->

touch <!-- 一个存在文件 则修改它的创建时间 -->

 

cp 拷贝

cp 要拷贝的全文件名 目标文件名

 

mv 移动

mv 目标文件 移动目标路径

mv 文件改名

mv 原文件名 目标文件名

 

rm 删除

rmdir <!-- 删除空的目录 -->

 

rm 文件名 <!-- 删除文件 -->

rm -rf 文件名/文件夹名

 

查看文件内容

cat 文件名

cat> 文件名

vi 文件名{

vi命令模式

:q <!-- 没有改变文本内容时可推出 -->

:q! <!-- 改变文本内容后 强制退出 不保存结果 -->

:wq! <!-- 保存文本后退出 -->

dd <!-- 删除当前行 -->

yy <!-- 复制当前行 -->

p <!-- 黏贴 -->

/xxx <!-- 搜索 -->

}

head 文件名 <!-- 默认显示前10行 -->

head -n x 文件名 <!-- 指定显示多少行 -->

tail 文件名 <!-- 默认查看最后10行 -->

tail -n x 文件名

 

分屏查看文件的内容

more 文件名

less 文件名(可按PageUp、PageDown 上下翻页)

 

clear <!-- 清屏 -->

查看IP与管理网卡

ifconfig <!-- 查看ip地址/查看当前拥有的局域网 -->

ifconfig eth0 ip地址 <!-- 设置服务器的临时ip地址 -->

ifconfig eth0 down <!-- 关闭网卡 -->

ifconfig eth0 up <!-- 激活网卡 -->

 

创建用户/用户组及密码

groupadd 组名 创建组 <!-- 组的信息会存放在/etc/group文件中 -->

groupadd -g 组编号 组名 创建组 <!-- 手工分配组id -->

useradd 用户名 创建用户 <!-- 会在/etc/passwd和/etc/shadow添加一行数据 -->

useradd -g 组名 用户名 <!-- 创建用户并分组 -->

userdel 用户名 删除用户 <!-- 会删除/etc/passwd 和 /etc/shadow 不会删除家目录 -->

userdel -r 用户名 删除用户 <!-- 会删除/etc/passwd 和 /etc/shadow 同时删除家目录 -->

passwd <!-- 直接修改自己的密码 -->

passwd 用户名 修改指定用户的密码 <!-- 普通用户只能修改自己的密码 -->

groupdel 组名 <!-- 删除组 -->

passwd -l 用户名 <!-- 给用户加锁 -->

 

useradd -u 100 -g mygroup1 -G mygroup2 -d /home/programmer s1 创建用户s1

-u:指定用户UID为100

-g:只用用户的主要组为mygroup1

-G:指定用户的附加组为mygroup2,一个用户可以有多个附加组

-d:指定用户的目录名

usermod -u 601 -g 501 s1 <!-- 修改用户的UID和GID -->

 

创建软链接

ln -s 文件夹名 别名 <!-- 给文件名加别名,可以在任意位置通过别名访问文件夹 相当于超链接 -->

ls -l 查询结果中软连接以l开头

find 文件夹 -name "文件名" <!-- 可用模糊查找用*代表通配符 -name指 按文件名查找 -->

find 文件夹 -type d <!-- 从指定文件夹下开始查找类型为目录的文件 d:目录 -->

grep "指定字符" 文件名 <!-- 在指定文件中查找指定字符 -->

grep -v "指定字符" 文件名 <!-- 在指定文件中查找不包含指定字符 -->

ls | grep "指定字符" <!-- 将ls命令的查询结果通过管道输入给后面的命令 在查找包含指定字符的结果-->

 

进程相关的命令

<!-- PID进程号 TTY连接方式 TIME启动时间 CMD哪个命令启动的 -->

ps -aux <!-- 查询所有进程 a:所有进程 x:包括不占用控制台的进程 u:哪个用户创建的 -->

ps -ef <!-- 查询所有进程 包括父进程 不显示cup和内存占用率 -->

<!-- 文件过多时一般使用ps -aux | grep 'java' 进行过滤查找 -->

kill -9 PID <!-- 根据进程id结束进程 -->

top <!-- 动态显示所有进程 -->

 

tar 压缩与解压缩命令

tar -cvf 文件名.tar 文件夹 <!-- 将指定文件夹压缩 名为文件名 -->

tar -zcvf 文件名.tar.gz 文件夹 <!-- 解压压缩文件到指定目录下 -->

tar -zxvf 文件名 <!-- 解压文件夹默认解压到当前目录下 -->

 

centos6启动/停止服务命令

service iptables stop <!-- 关闭当前防火墙 -->

service iptables start <!-- 开启当前防火墙 -->

 

centos6开机启动/停止服务命令

chkconfig iptables off <!-- 永久关闭防火墙 -->

chkconfig iptables on <!-- 开启防火墙 -->

 

rpm 安装软件命令

rpm -ivh 文件名 <!-- i:安装 v:显示处理过程 h:显示#表示进度 -->

rpm -qa <!-- 查询系统中安装的所有软件 -->

rpm -ql xx <!-- 查询已安装的软件包xx中的文件列表 -->

rpm -e xx <!-- 卸载指定软件 -->

rpm -ivh --force 文件名 <!-- 强制安装 如果要安装的软件已存在或版本比当前版本低必须强制安装 -->

rpm -ivh --nodeps 文件名 <!-- 忽略软件安装时的依赖关系 -->

 

自动安装软件及需要的依赖软件

yum install 文件名 <!-- 安装 -->

yum remove 文件名 <!-- 卸载 -->

 

源码tar包编译安装

make install

makeclean与make distclean

 

在集群中进行文件copy

scp 文件名 ip地址:/目标路径

 

修改主机名

hostname 名字<!-- 临时修改主机名 -->

vi /etc/sysconfig/network <!-- 永久的改变主机名 –

hostnamectl set-hostname 主机名(centos7)

第五章 Linux目录文件与系统启动

01.Linux系统目录建构基本特点:

一切从根开始

Linux下面的目录是一个有层次的目录结构

Linux中的每个目录可以挂载到不同的设备上

 

在Linux下设备不挂载不能使用,不挂载的设备相当于没门没窗的监狱,挂载相当于给设 备创造了一个入口(挂载点,一般为目录)

02.Linux 的目录结构详解:

 

/bin               放二进制命令文件

/boot             存放系统引导文件,内核

/dev              存放外部设备

/etc               存放系统配置文件

/home           存放普通用户家目录

/lib                存放函数库文件

/64lib            存放64位函数库文件

/lost+found    磁盘或文件系统损坏,断电,临时文件位置

/media           存放媒体文件

/mnt              临时的挂载点

/opt               存放第三方软件

/proc             虚拟目录,存放内存中的程序和内核信息

/root              超级管理员的家目录

/sbin             存放只有超级管理员才能用的相关命令

/sys              虚拟的目录,内存信息

/tmp              存放临时文件,相当于回收站

/usr               存放用户的程序

/var               存放经常变换的文件,系统日志

03./etc 下系统初始化及配置相关文件

1./etc/sysconfig/network-   ---网卡配置文件

/etc/sysconfig/network-scripts/ifcfg-eth0  

 

网卡配置文件

TYPE=Ethernet                    # 以太网

BOOTPROTO=none          # 以什么方式获取IP地址 两种方式

BOOTPROTO=DHCP         #自动获取下发IP地址

或BOOTPROTO=static        #静态IP地址  手动配置的IP地址

NAME=eth0                  # 硬件网卡的名称

DEVICE=eth0                # 0代表了第一块网卡 1代表第二块网卡

ONBOOT=yes                # 开机自动激活网卡 自动连接  重启网卡

IPADDR=10.0.0.200            # IP地址

PREFIX=24                   # 子网掩码

GATEWAY=10.0.0.254             #网关,服务器和PC 必须都要配置网关   并且可ping通

DNS1=1.2.4.8                 #域名解析  域名方便浏览 方便记忆

DNS2=223.5.5.5                    服务器   你给他域名  他给你IP地址

 

DNS服务器

8.8.8.8                                谷歌

223.5.5.5     223.6.6.6     阿里

202.106.0.20                       联通

1.2.4.8                           电信

2./etc/resolv.conf  ---DNS客户端配置  

Linux系统DNS客户端配置文件

必须有DNS服务器地址

 

优先于网卡配置DNS 优先进行解析

1.DNS配置文件

如果DNS配置在网卡,重启网卡则网卡的DNS会覆盖resolv.conf

2. 网卡中配置

 

补充: 网卡中不配置DNS,只在/etc/resolv.conf中配置DNS,重启网卡不覆盖

3./etc/hostname  ---配置主机名 

hostname 查看主机名    -I查看或者获取IP地址

hostname+主机名  改主机名,临时生效,重启系统则失效

 

永久配置主机名:

CentOS6: /etc/sysconfig/network

CentOS7:1. hostnamectl set-hostname +  2. /etc/hostname重启系统生效

4./etc/hosts  ---本地配置解析域名

 

IP地址     +     域名

5./etc/fstab  ---开机自动挂载 

按照配置文件的格式写入,开机自动挂载我们地设备

6./etc/rc.local  ---开机自动执行

开机自动执行此配置文件中的内容(每次开机都会执行一次)

CentOS6  直接写入即可生效

CentOS7  必须加一个执行权限 (chmod+x /etc/rc.d/rc.local)

7./etc/inittab  ---linux 下运行级别

 

a)查看启动级别   

runlevel       

cat /etc/systemd/system/default.targe

 

CentOS6

CentOS7

0

关闭操作系统

poweroff.target

1

单用户模式 救援模式 没网络

rescue.target

2

多用户模式 NFS  没网络

multi-user

3

完全多用户

multi-user

4

保留  待开发

 

5

桌面,图形化模式,需要安装desktop安装包才可运行

graphical.target

6

重新启动操作系统

reboot.target

 

b) 设置运行级别:

CentOS6 /etc/inittab

CentOS7 systemctl get-default     获取默认的运行级别

          systemctl set-default poweroff.target  设置默认的运行级别

8./etc/profile ---环境变量配置

 

相当于国法 全局配置文件 (针对所有的用户生效)  国家规定

/etc/profile

/etc/bashrc

 

家规  针对当前用户生效(你当前登录的用户,只影响本身)

~/.bashrc   

~/.bash_profile

 

9./etc/bashrc  ---别名

  

10./etc/issue 和/etc/issue.net ---用户登录系统前显示的内容

用户登录系统前显示的内容,默认显示 操作系统版本,内核版本

 

实际工作中需要清空,登陆前不提示

 

清空文件的方法:

1. vim 编辑 删除 dG 从光标所在处删除到文件底部  :wq 保存并退出

2. echo > /etc/issue issue.net  清空文件 或者 > /etc/issue issue.net

11./etc/motd  ---用户登录系统后显示的内容 

    

12./etc/redhat-release ---查看当前OS版本

查看当前OS版本      

uname –r  查看内核版本

13.history ---查看历史命令

   

04.  /var

1./var/log/messages ---系统默认的日志文件

日志切割  默认10分钟切割  为了防止日志容量过大 (最好控制在1G以内)

2./var/log/secure ---系统的安全日志

记录了用户登录的过程信息

05.  /proc  ---虚拟的目录,内存的映射 

proc被称为虚拟文件系统,

它是一个控制中心,可以通过更改其中某些文件改变内核运行状态,

它也是内核提空给我们的查询中心,用户可以通过它查看系统硬件及当前运行的进程信息。

Linux中许多工具的数据来源正是proc目录中的内容,比如lsmod的命令是cat /proc/modules的别名。

1./proc目录下常用文件介绍:

/proc/loadavg          前三列分别保存最近1分钟,5分钟,及15分钟的平均负载。

/proc/meminfo          当前内存使用信息

/proc/diskstats          磁盘I/O统计信息列表

/proc/net/dev          网络流入流出统计信息

/proc/filesystems        支持的文件系统

/proc/cpuinfo         CPU的详细信息

/proc/cmdline          启动时传递至内核的启动参数,通常由grub进行传递

/proc/mounts           系统当前挂在的文件系统

/proc/uptime             系统运行时间

/poc/version            当前运行的内核版本号等信息

2./proc/cpuinfo  cpu信息

查看命令:lscpu

processor : 0  第几个核心

[root@oldboyedu ~]# cat /proc/cpuinfo|grep 'processor'

processor : 0

processor : 1

processor : 2

processor : 3

 

physical id     : 0  第几个CPU 几颗  几路

[root@oldboyedu ~]# cat /proc/cpuinfo|grep 'physical id'

physical id : 0

physical id : 0

physical id : 1

physical id : 1

CPU(s):                4

On-line CPU(s) list:   0-3

Thread(s) per core:    1

Core(s) per socket:    2

Socket(s):             2

3./proc/meminfo  查看内存信息

查看命令:free -h

MemTotal:             1528412 kB                  总共内存

MemFree:            1253588 kB                  剩余内存

MemAvailable:         1229392 kB               可用内存

Buffers:            2076 kB                    缓冲

Cached:             87272 kB                  缓存

4./proc/loadavg  load average系统负载

查看命令: w   uptime

  (不绝对,业务不对外访问,只放数据分析 达到    cpu核心的上线 也无所谓)

负载  衡量当前系统的一个繁忙程度 

 

如何衡量?

数字达到你cpu核心的数量

cpu  4核心  =====  如果负载已经到4  说明已经繁忙

cpu  2核心  =====  如果负载已经到2  说明已经繁忙

 

[root@oldboyedu ~]# cat /proc/loadavg

0.00       0.01         0.05          1/126 1484

最近1分钟  最近五分钟   最近15分钟

  

问:你们公司的服务器负载的临界点是多少

使用命令:  w

20:29:01    up 30 min,   1 user,    load average: 0.00, 0.01, 0.05

当前时间   系统运行时间  1个用户登录  平均负载   1分钟  5分钟 15分钟

 

[root@oldboyedu ~]# uptime

20:34:43 up 36 min,  3 users,  load average: 0.00, 0.01, 0.05

5./proc/mounts  查看挂载信息

rootfs / rootfs rw 0 0

sysfs /sys sysfs rw,seclabel,nosuid,nodev,noexec,relatime 0 0

proc /proc proc rw,nosuid,nodev,noexec,relatime 0 0

06.第二次考

一,填空题-----------每题2分,共20分

1,网卡配置文件路径:/___etc_____/____sysconfig___/___network-scripts___/ifcfg-eth0.

2,重启网卡命令补全___systemctl____ ____restart___ network

3,/bin     是用来存放____二进制命令文件____什么的目录

4,/boot系统______引导系统程序文件,系统内核______所需的文件目录。

5,/dev (Device flies)______设备文件______目录.

6,/mnt 临时挂载存储设备的_____挂载点________, u盘直接插入光驱无法使用,要先挂载后使用

7,/var 这个目录的内容是经常变动的。是个用来存放系统______经常变动文件,系统日 志_____目录,____系统日志____的路径/var/____log____/___messages____

8,/proc/loadavg    #<=__系统负载____(系统繁忙程度)

9,/proc/meminfo   # <=___系统内存____

10,/tmp     (Temporary files)____存放临时文件____目录, ,这个目录可以被用作回收站使用

 

二,命令操作类-----------每题2分,共20分

1.查看主机名命令   

hostname

2.(临时)设置主机名   

hostname 主机名

3.(永久)设置主机名  

vim /etc/hostname 改主机名  

hostnamectl set-hostname 主机名

4.查询当前登录用户  

whoami

5.查看主机名  

hostname

6.查询当前系统版本  

cat /etc/redhat-release

7.切换到上一次所在路径   

cd -

8.以树形结构显示目录且只显示目录 

tree -d

9.批量创建1,2,3,4,5,这几个目录  

mkdir 1 2 3 4 5

10.以长格式列出文件及目录信息并且要显示目录下的所有文件

   ls -al

三,常见错误提示解析类(给出你的翻译)-----------每题4分,共20分

1.cannot create directory “d1” file exists                 无法创建目录,d1文件已存在

2.no such file or directory                                   没有此文件或目录

3.column window is too narrow                            列窗口太窄

4.ping: baidu.com: Name or service not known       ping百度:名字或服务无法识别

5.cannot:Network is unreachable                       无法建立连接

 

四,简答题-----------前三题每题10分,共40分

1,     请写出eth0网卡的必要配置

TYPE=Ethernet

BOOTPROTO=none

ONBOOT=yes

NAME=eth0

DEVICE=eth0

IPADDR=10.0.0.201

PREFIX=24

NETMASK=10.0.0.254

DNS1=1.2.4.8

2,简述Centos 6 运行级别  0 1 2 3 4 5 6

3,请写出十个与第二大题(命令操作类)无关的命令及参数以及具体命令作用。

 

4,简述Raid0与Raid1的区别

 

5,xshell连接不上如何排错。

 

 

07.软件安装方法:

1.yum 

常用   打包好了,可直接用  缺什么可以直接安装什么,直接解决了依赖问题

yum repolist

yum install –y  命令    -y  安装过程中,提示是否继续全yes

yum provides route

yum remove

yum clean all

yum list|grep bash-

2.rpm       

不会自动解决依赖问题,需要自己安装依赖

rpm –ivh xxx.rpm  

-i       install    

-v     显示安装过程   

-h      以人类可读方式显示

rpm –qa  查看所有的安装包

rpm –ql 命令   查看是否安装此命令

 

3. 编译安装

 

 

 

第六章  系统优化

01.  yum

默认源是随机产生的

 

配置国内的yum源:

/etc/yum.repos.d/  配置yum源目录

/etc/yum.repos.d/CentOS-Base.repo  yum仓库地址 必须得有 如果没有 找不到软件

1.修改默认yum源(centos7不用修改)

更改为阿里云

更改yum源:

下载新的CentOS-Base.repo 到/etc/yum.repos.d/

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

或者

curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

之后运行yum makecache生成缓存

 

更改epol源:

下载新repo 到/etc/yum.repos.d/

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

2.yum 基础软件安装

yum install -y wget net-tools vim tree htop iftop \

iotop lrzsz sl unzip telnet nmap nc psmisc \

dos2unix bash-completion nethogs  glances -y

 

安装管理repository及扩展包的工具 (主要是针对repository):

yum install yum-utils -y

 

02. 关闭防火墙

1.CentOS7.x                                   

1)临时关闭防火墙重启失效

systemctl stop firewalld         

 

2) 永久关闭防火墙                          

    禁止开机启动                          

systemctl disable firewalld 

 

3)如何查看防火墙状态

systemctl status firewalld        

  iptables-save    出结果 开启状态 无结果 关闭状态

 

2.CentOS6.x

1)临时关闭防火墙重启失效

/etc/init.d/iptables stop  

service iptables stop

 

2)如何查看防火墙状态

/etc/init.d/iptables status   

iptables-save    出结果 开启状态 无结果 关闭状态

 

3) 永久关闭防火墙

chkconfig --list   查看所有的服务是否开机启动

  chkconfig iptables off    off关闭  on 开启

3.在生产环境中

在公司禁止关闭运行中的防火墙

 

什么时候关闭和开启防火墙?

1)什么时候开启

a.你的服务器是公网IP地址

b.服务器是阿里云的并且对外提供服务的(云服务)

         端口: ssh  22   远程连接端口

2)什么时候不开启

a.内网 办公室环境  外面的人不容易访问到你的服务器

b.服务器单纯的测试 内部使用 不安装任何对外的服务

c.高并发访问服务器   (硬件防火)

03. 关闭SElinux  (必须关)

1.永久关闭SElinux  美国国家安全局

/etc/selinux/config  selinux的配置文件

enforcing     表示selinux已经启动状态

permissive           表示selinux关闭状态 会提示警告信息

disabled      表示selinux关闭状态

关闭selinux

SELINUX=enforcing  修改为SELINUX=disabled    重启系统生效

2.临时关闭SElinux

setenforce 0   0是关闭   1是开启

3.查看SELinux状态

getenforce    查看当前的状态  selinux是否开启

04.优化ulimit      调整文件描述符

echo '* - nofile 65535' >> /etc/security/limits.conf

 

05.显示优化(命令行色彩)

[ "$PS1" = "\\s-\\v\\\$ " ] && PS1="[\[\e[34;1m\]\u@\[\e[0m\]\[\e[32;1m\]\H\[\e[0m\] \[\e[31;1m\]\w\[\e[0m\]]\\$ "

 

添加到/etc/bashrc,注释掉原有的PS1,然后生效source /etc/bashrc

06. SSH连接速度慢优化

sed -i 's@#UseDNS yes@UseDNS no@g' /etc/ssh/sshd_config

 

sed -i 's@^GSSAPIAuthentication yes@GSSAPIAuthentication no@g' /etc/ssh/sshd_config

 

systemctl restart sshd

 

07. 创建普通用户

Linux是一个多用户,多任务的操作系统

 

超级管理员(root):root默认在Linux操作系统中拥有最高的管理权限。

 

普通用户:管理员或者具备管理权限的用户创建的。权限:系统管理仅可以读,不能增 删 改,需要授权。权限越大,责任越大。

 

一般情况下,在企业生产环境中应尽量避免直接到root用户下操作,除非有超越普通用户权限的系统维护需求, 使用完后立即退回到普通用户。

1.设置非交互式密码:

echo ********|passwd –stdin 用户名&&history -c

2.切换到用户:

su –用户名

3.查看当前用户是谁:

whoami

 

4.查看用户是否创建:

方法1:

id 用户名

方法2:

cat /etc/passwd|grep        用户名

useradd oldboy           创建用户

passwd oldboy              设置密码

su - oldboy                  为什么需要加-

5.在oldboy 回到root

方法1:  ctrl + d

方法2:  logout

方法3:  exit

6.如果直接使用Xshell连接 则上面的方法无效 

如果普通用户登录root  必须有root的密码

 

补充:xshell和CRT上传下载 必须安装lrzsz

xshell 直接拖拽直接上传 下载使用 sz + 文件名

CRT 上传 在命令输入 rz 然后选择文件进行上传  sz +文件名 下载

08. 字符集,乱码

什么是字符集

字符集就是一套文字符号及其编码

GBK   国标

UTF-8 万国码

 

字符集改成UTF-8

 

   1.如何查看字符集  language 语言

echo $PS1

echo $LANG

   2.临时修改字符集  重启失效

export LANG="zh_CN.UTF-8"

   3.永久修改字符集

[root@oldboyedu ~]# cat /etc/locale.conf

LANG="en_US.UTF-8"

 

修改配置文件后如何生效

方法1:重启系统

方法2:source /etc/locale.conf 或 . /etc/locale.conf   使配置文件立即生效

   4.命令方式修改字符集

localectl set-locale LANG=”zh_CN.UTF-8”

 

09.安装常用工具软件,命令

yum -y install tree nmap sysstat lrzsz dos2unix telnet bash-completion bash-completion-extras vim nc lsof

 

10.网络服务,永久和临时关闭NetworkManager 学习环境下使用

systemctl stop NetworkManager   

systemctl disable NetworkManager

 

第七章  

 

 

 

 

 

 

第八章  文件属性,文件和目录查找命令

[root@Linux-61-202k ~]# ll -hi

17458011 drwxr-xr-x 2 root root  167 May 15 12:16 oldboy

34376919 -rw-r--r-- 1 root root 655K May 15 09:21 services

 

01.文件属性详细描述—inode与block

1.inode:

概念介绍:

    1. 用于存储文件数据属性信息

    2. 用于存储数据指针信息

 

如何诞生:

    格式化---创建文件系统

 

如何进行查看:

查看inode的总量和使用量:

[root@oldboymeng oldboy]# df -i

Filesystem      Inodes IUsed   IFree IUse% Mounted on

/dev/sda3      9858560 60557 9798003    1% /

查看文件的inode信息方法

ls -li或

stat /etc/hosts

 

如何生成及指定inode大小

格式化命令:mkfs.ext4 -b 2048 -I 256 /dev/sdb

 

特点说明:

    1. 一个文件会占用一个inode

    2. 大量小文件会占用大量inode(理解了)

  

2.block:

概念介绍:

    1. 用于存储文件数据内容

 

如何诞生:

    格式化---创建文件系统

 

如何进行查看:

[root@oldboymeng oldboy]# df

Filesystem     1K-blocks    Used Available Use% Mounted on

/dev/sda3       19706880 1861892  17844988  10% /

 

特点说明:

    1. 一个文件数据会占用多个block

    2. 一个block大小:是大点好 小点好

    存储的数据小文件:2K -> 4Kblock           尽量调整blcok空间小一些

    存储的数据大文件:4K -> 1kblock 4个block

 

PS: 磁盘IO (input(写入)/output(读取)),消耗IO过多,降低磁盘性能

          10M  文件 --- 硬盘: 用时多久:  10s

          100M 文件 --- 硬盘: 用时会更久  100s

   

系统数据读取原理:(重点掌握)

    1. inode中:存储目录或文件的属性信息 指针信息(指向block)

    2. block中:

       目录的block存储下一级数据的名称信息

       文件的block存储真正的数据信息

 

02. 文件属性信息详述---文件数据类型

*普通文件:  -    可编辑文本.txt  脚本文件.sh  二进制文件(命令文件) 压缩文件 

*目录文件:  d    

*链接文件:  l    软连接-快捷方式

*设备文件: b c   b 块文件  c 字符流文件(生成随机字符)

/dev/urandom

/dev/null     系统的黑洞(定时任务)

/dev/zero     系统的黑洞(磁盘管理) 如何让系统快速生成大文件               

*套接字文件: s(socket)   网络有关的文件(网络编程 socket)

 

PS:linux系统中一切皆文件

 

查找目录或文件的命令

yum provides .route  按照命令查找安装包名

 

file:显示文件的类型

文件类型:

-  是普通文件

        1)纯普通文件  2)命令类型  3)数据类型 (例如压缩包. rpm)

d  是目录文件 (directory)

l  是链接文件 (软链接 softlinks),它指向另一个文件

b  块设备 block ,是特殊类型的文件

c  字符设备文件  character special

s  socket文件

p  是管道文件

  

03.快速检索系统文件信息:

which 命令         --- 查看命令文件所在路径

whereis 命令       --- 查看命令文件所在路径 以及命令文件先关其他文件所在路径

locate oldboy.txt    --- 寻找系统中任意文件所在路径

updatedb       --- 生成文件数据路径信息数据库表 /var/lib/mlocate/mlocate.db

find:                     --- 快速查找文件信息  ****

04.文件相关基础命令

1.find命令  查找系统文件数据

-type         根据文件类型查找

-name         根据文件名称查找

-iname        根据文件名称忽略大小写进行查找

-size          根据文件大小查找数据

-perm          根据文件权限

-mtime         根据文件(修改)时间查找数据

-mmin         根据文件创建生成分钟

-exec          将查找到的数据进行处理

-delete         将查找到的数据进行直接删除

-path           指定文件路径信息

-prune         修剪参数(排除)

-o              多个条件或者关系

-a              多个条件并且关系(默认)

-not            指定条件进行取反

-print           取消排除的目录显示

-inum           根据文件inode号码进行过滤数据

 

1)寻找指定大小文件信息:

find /oldboy -type f -size +10 

          +xx : 找出大于指定数值的文件

          -xx : 找出小于指定数值的文件

          没有加减符号: 找出指定大小文件

         -size n[cwbkMG]

         File uses n units of space.  The following suffixes can be used:

         `c'    for bytes

         `k'    for Kilobytes (units of 1024 bytes)

         `M'    for Megabytes (units of 1048576 bytes)

         `G'    for Gigabytes (units of 1073741824 bytes)

 

2)批量删除数据方法:

find /oldboy -type f -size 100k|xargs rm

find /oldboy -type f -size 100k -delete

3)批量复制或移动数据方法:

第一种方法:

    find /oldboy -type f -size 100k|xargs cp -t /tmp  

    补充:

    cp 备份的数据  备份目录信息   --- 将数据由前 -- 后  复制

    cp -t 备份目录信息 备份的数据 --- 将数据由后 -- 前  复制

第二种方法:

    find /oldboy -type f -size 100k|xargs -i cp {} /tmp

第三种方法:

    cp -t /tmp `find /oldboy -type f -size +100k`

第四种方法:

    find /oldboy -type f -size 100k -exec cp {} /tmp \;

4)根据数据权限查找数据:

    find /oldboy -type f -perm 644

  

5)根据时间信息查找数据:

find /oldboy -type f -mtime  +30        --- 找出30天以前的数据

find /oldboy -type f -mtime  -30           --- 找出最近30天的数据

find /oldboy -type f -mtime   30       --- 找出距离当前第30天的数据

  

6)find命令排除指定目录不要进行过滤

find /oldboy -path "/oldboy/oldboy02" -prune -o -type f -name "*.txt" -print

      

第一个步骤:找出.txt文件并且文件类型是 普通文件f

find /oldboy -type f -name "*.txt"

 

第二个步骤:找出.txt文件并且文件类型是 普通文件f 或者 找出指定路径

find /oldboy -type f -a -name "*.txt" -o -path "/oldboy/oldboy02"

-path:在指定目录中,过滤检索指定路径

-o : 多个冲突条件可以同时满足

 

第三个步骤:修剪掉指定路径下面的信息

find /oldboy -type f -a -name "*.txt" -o -path "/oldboy/oldboy02" -prune

-prune:根据指定的-path信息,进行数据排除

 

第四个步骤:只显示找出的文件信息,不显示排除的目录信息

find /oldboy -type f -a -name "*.txt" -print -o -path "/oldboy/oldboy02" -prune

   

特殊方法:

 [root@oldboymeng ~# find /oldboy -type f -a -name "*.txt" -not -path "/oldboy/oldboy02*"

 

 

tree  查看目录数据结构信息

tree -d    只查看目录数据信息

tree -L 1  查看目录的指定层级信息

  

2.tar   压缩数据命令

zcvf                 对数据进行压缩

tf                    对数据压缩包进行查看

xf                       对数据包进行解压

h                      压缩软连接文件时,将软链接指向源文件进行压缩

-C                    指定解压的路径

1.如何压缩数据:

tar  zcvf  /路径信息/压缩包文件.tar.gz 压缩的数据信息  

tar zcvf /oldboy/oldboy.tar.gz /oldboy/oldboy{01,02}.txt 绝对路径压缩数据

tar zcvf /oldboy/oldboy.tar.gz ./oldbig{01,02}.txt       相对路径压缩数据

z:   指定压缩数据方式 gzip方式压缩数据

c:   创建压缩包文件

v:   显示压缩的过程   

f:  指定压缩包文件保存的路径

tar zcvf /oldboy/oldbig.tar.gz  /oldboy/oldbig01.txt

tar zcvf /oldboy/oldbig.tar.gz  /oldboy/oldbig01.txt  /oldboy/oldbig02.txt /etc/

  

2.补充:

压缩包的数据如何进行查看和过滤:

zgrep -a oldgirl oldboy.tar.gz

zcat oldboy.tar.gz

 

如何检查压缩包数据完整:

tar tf  /路径信息/压缩包文件.tar.gz

   

如何解压数据包:

tar xf    /路径信息/压缩包文件.tar.gz

tar xf oldbig.tar.gz

 

tar压缩目录数据,如何进行排除  --exclude  --exclude-from

[root@oldboymeng oldboy]# tar zcvf /oldboy/oldboy.tar.gz  ./oldboy01 --exclude=./oldboy01/oldboy02.txt

[root@oldboymeng oldboy]# tar zcvf /oldboy/oldboy.tar.gz  ./oldboy01  ./oldboy02 ./oldboy03  --exclude-from=./exclude.txt

[root@oldboymeng oldboy]# cat exclude.txt

 

 

05. 文件的属性说明

Ls -lhi

 

 

第1列:  inode信息 -- 目录

 

第2列: 文件数据的类型  文件 目录  软链接(快捷方式)

         文件数据权限    r读 w写 x可执行    

 

第3列: 硬链接数   为了读取到文件信息,可以通过打开不同的文件进行读取,不同的文件inode号码是一致的 ???

 

第4-5列:文件的属主信息  数据(孩子)--- 诞生出来  所属用户(监护人)

文件的属组信息  数据(孩子)--- 家人      所属组  

          文件的其他用户  数据(孩子)--- 隔壁老王  管理权力最低 没有权限

 

第6列: 文件的大小信息  文件--真实大小  目录--不是真实大小

         磁盘空间不足,需要找出比较大的文件进行清空删除 

         du -sh /*|sort -rh

          补充:ll命令显示信息,也可以进行排序

           ll -rt  r反向  t按照时间排序

 

第7-9列:文件数据的时间信息  修改时间信息

          修改时间(mtime) 访问时间(atime)  改变时间(ctime)

 

06.文件属性信息--文件权限

1.系统中文件权限:3种权限

r    read      读           4

w   write      写          2

x   execute    执行         1

-              没权限      0   

  

2.权限赋予谁:

1. 文件数据所属用户 (属主)

2. 文件数据所属组   (属组)

3. 文件数据其他用户 (其他用户)

   

rw-r--r-- (文件9位权限位)

每三位为一组:

rw-   属主权限        可读可写 没有执行权限

r--    属组权限        只读

r--    其他用户权限    只读

 

可读:        普通文件 不需要执行权限,只能查看文件 不能写入 不能执行

可写:        拥有可写入权限

可执行:   针对可执行文件 .sh 命令 服务 应用程序

 

644: 属主(rw) 属组(r)其他用户(r)

755: 属主(rwx)属组(rx)其他用户(rx)

 

Linux下所有目录和文件全部都是9位权限位

所有和网站相关的目录全部是755权限,文件全部是644权限

 

3.chmod  修改权限

授予权限:

+ 添加权限

- 去掉某一个权限

= 先去掉原有的权限,然后在赋予新的权限

chmod ugo <!-- u创建者,g同组用户,o其他用户

chmod 777 <!-- 所有用户拥有所有权

chmod 644 <!-- 文件创建之后的默认权限 创建者可读可写 其他用户可读

chmod 755 <!-- 文件夹创建后的默认权限

chmod 764 文件名 <!-- 拥有者可读可写可执行,同组用户可读可写,其他用户只能读

 

07.文件的用户信息(属组 属主 其他用户)

系统用户有什么:

1)超级管理用户(皇帝)(0)      root

2)系统虚拟用户(傀儡)(1-999)  nobody    管理服务进程信息/管理数据文件信息,不能用于登录系统/没有家目录信息

3)系统普通用户(平民)(1000+)  oldboy    登录系统,拥有家目录,代替root管理系统(初级中级运维人员)--- 限制运维人员权限

如何查看用户数值级别:

id          --- 查看系统用户id数值

uid         ---用户级别数值编号

gid         ---用户组级别数值变化

groups     ---显示附属组信息

  

用户和用户组有什么关系

    oldboy01.txt  6 root  6 用户组 读 oldboy  alex

    oldboy02.txt  6 root  6 用户组 读 oldgirl

    oldboy03.txt  6 root  6 用户组 读 oldbaby

   

    root用户组:root oldboy oldgirl oldbaby

   

用户和用户组的关系:

    1vs1关系  root用户 --> root 组

    1vsn关系  root用户 --> root 组(主要组)  oldboy组 oldgirl组(附属组)

              雷明春   --> 雷氏家族(主要组) 张氏(附属组)

    nvsn关系  root用户 oldboy用户  --> root组  oldboy组

    nvs1关系

 

 

08.文件属性信息--文件的时间信息

1.时间信息有三种:

atime:访问时间

mtime:修改时间

ctime: 改变时间???

        

[root@oldboymeng oldboy]# stat /etc/hosts  --- 查看详细属性信息

File: ‘/etc/hosts’

Size: 7           Blocks: 8          IO Block: 4096   regular file

Device: 803h/2051d    Inode: 16810611    Links: 1

Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)

Context: unconfined_u:object_r:net_conf_t:s0

Access: 2019-06-13 15:20:53.538925666 +0800

Modify: 2019-06-13 15:20:52.038925775 +0800

Change: 2019-06-13 15:20:52.038925775 +0800

Birth: -

 

什么是访问时间:访问查看文件,会改变访问时间

Access: 2019-06-13 18:38:46.307068633 +0800

Modify: 2019-06-13 18:37:51.453072592 +0800

Change: 2019-06-13 18:37:51.453072592 +0800

   

什么是改变时间:文件属性信息发生变化,会修改改变时间

Access: 2019-06-13 18:38:46.307068633 +0800

Modify: 2019-06-13 18:37:51.453072592 +0800

Change: 2019-06-13 18:40:32.520060966 +0800

   

什么是修改时间:文件内容被修改了,会更新修改时间 ***

Access: 2019-06-13 18:41:42.042055947 +0800

Modify: 2019-06-13 18:41:42.042055947 +0800

Change: 2019-06-13 18:41:42.043055947 +0800

 

2.系统时间命令-- date (显示当前时间和修改系统时间)

1.显示系统时间:

date

Thu Jun 13 18:46:04 CST 2019

 

1)按照指定格式显示时间

[root@oldboymeng oldboy]# date +%y-%m-%d

19-06-13

[root@oldboymeng oldboy]# date +%Y-%m-%d

2019-06-13

[root@oldboymeng oldboy]# date +%F

2019-06-13

[root@oldboymeng oldboy]# date +%H:%M:%S

18:51:22

[root@oldboymeng oldboy]# date +%T

18:51:50

 

2) 显示过去或未来的时间信息

[root@oldboymeng oldboy]# date +%F -d "-1 day"      显示过去时间

2019-06-12

[root@oldboymeng oldboy]# date +%F -d "+22500 day  显示未来时间

[root@oldboymeng oldboy]# date +%F -d "2 day"       显示未来时间

  

2.时间信息命令作用:

方便备份数据时,显示数据时间信息:

cp /etc/hosts /tmp/hosts-`date +%F`

  

3.修改系统时间信息:

date -s "20200505"           --- 修改日期信息

date -s "2030/05/05 10:10:10"  --- 修改日期和时间

    Sun May  5 10:10:10 CST 2030

 

4.时间信息同步:ntpdate

root@oldboymeng oldboy]# ntpdate ntp1.aliyun.com

13 Jun 19:08:24 ntpdate[32975]: step time server 120.25.115.20 offset -343775.764894 sec

 

 

09. 硬链接 和 软链接

 

1.硬链接:

概念说明:

    1. 相当于查看一个文件数据的多个入口信息

    2. inode号码相同的文件,互为硬链接

如何创建:

    ln 源文件  硬链接文件

    ln oldboy.txt oldboy_hard_link.txt

特点总结:

    1. 源文件被删除,链接文件不会失效

    2. 创建多个硬链接文件,不会占用block空间和inode空间

    3. 目录无法创建硬链接

用途说明:

    1. 防止文件被误删除 不能防止文件误修改

                cp:防止误删除 防止误修改

    ?2. 文件被删除条件:

           1)硬链接数为0 i_link=0

              2) i_count=0 ???

   

补充:查询所有硬链接文件

    [root@oldboymeng oldboy]# find / -type f -inum 33574990

    /tmp/oldboy_link.txt

    /oldboy/oldboy_hard_link.txt

    /oldboy/oldboy_hard_link02.txt

    /oldboy/oldboy_hard_link03.txt

    /oldboy/oldboy.txt

   

删除硬链接:

    如果只删除源文件 不删除硬链接文件 则文件不会被删除

    只有删除源文件和所有的硬链接文件 则文件被删除

    如果普通文件(没有被系统调用的文件)硬链接数0 则被删除 如果只删除源文件或者硬链接 则只是删除了inode指向 没有真正的删除block

    只有删除源文件和所有的硬链接 则真正意义上删除了block 文件被删除

    硬链接显示为普通文件 可直接使用rm 删除

    当所有的硬链接文件及源文件被删除后,再存放新的数据会占用这个文件的空间,或者磁盘fsck检查的时候,删除的数据也会被系统回收。

2.软链接

概念说明:

    1. 相当于快捷方式,是一个普通文件,以l 开头

    2. 软连接文件存储源文件的路径信息

如何创建:

    ln 源文件  软链接文件

    ln -s oldboy.txt oldboy_soft_link.txt

特点总结:

    1. 源文件被删除,链接文件会失效. 删除软链接文件 文件不是真正的删除,不影响源文件

    2. 创建多个软连接文件,会占用多个inode空间

    3. 目录也可以创建软连接

用途说明:

    1. 减少开发人员代码修改难度

  

3.关于硬链接的企业面试题:

    01. 创建一个文件,有几个硬链接数?

        1个硬链接

    02. 创建一个目录,有几个硬链接数

        2个硬链接

          目录本身占用一个硬链接

          目录下面的点 . 占用一个硬链接

        总结:目录的硬链接数==本身目录(1)+目录中 .(1个)+目录中的自目录中的..(1个)

    03. 查看/etc目录属性信息,显示的硬链接数是什么意思

       drwxr-xr-x. 80 root root 8192 Oct 10 01:47 /etc/

          80 = etc(1)+ .(1) + 78个子目录(..)

          ll /etc|grep -c "^d"

          78

 

 

10.第三次考题

一, 简答题

1.什么是buffer和cache

答:写入数据到内存里,这个存储数据的空间称为缓冲区(buffer)

    从内存读取数据,这个存数据的内存空间称为缓存区(cache)

2.硬链接和软连接的区别

  答:1)软链接可以理解成快捷方式。它和windows下的快捷方式的作用是一样的

  软链接文件的大小和创建时间和源文件不同。软链接文件只是维持了从软链接到源文件的指向关系,不是源文件的内容,大小不一样容易理解。

      2)硬链接等于cp -p 加 同步更新

  硬链接文件和源文件的大小和创建时间一样。硬链接文件的内容和源文件的内容一模一样,相当于copy了一份

3.Linux下通过 mkdir 命令创建一个新目录/oldboy它的硬链接数是多少,为什么?

答:2个,因为:

1.创建的目录本身为一个硬链接。

2.新目录ett下的隐藏目录.(点号)为创建的新目录的又一个硬链接,也算一个链接数,因此,硬链接数是2。

如果在/oldboy/下面再创建一个目录 test。再问/oldboy/的硬链接数是多少?为什么。

       3个,因为创建的目录是上级目录的一个硬链接,oldboy这个目录它本身就有两个硬链接,相加起来就是3个。

4,请执行命令取出 Linux 中 eth0 的 IP 地址(不低于2种方法)。

  答:

1)hostname -I

      2)ip a|sed -rn ‘s#.*et (.*)/24 br.*#\1#gp’

      3)ip a|awk -F "[ /]+" 'NR==9{print $3}'

5,请写出,ll -hi /etc 显示输出的每一列含义(以空格为分隔符)。

  33899913 drwxr-xr-x.     3       root    root   101     May 15 07:01   abrt

答 inode 文件属性与权限 硬链接数   属主    属组 文件大小  文件修改时间  文件名

6,请写出20个学过的命令及参数以及他们的作用。

7,请简单写出xshell链接不上虚拟机排错流程

8,请写出eth0网卡配置文件中必须存在的条目选项。

答:

TYPE=Ethernet

   BOOTPROTO=none

   ONBOOT=yes

   NAME=eth0

   DEVICE=eth0

   IPADDR=10.0.0.201

   PREFIX=24

   NETMASK=10.0.0.254

   DNS1=1.2.4.8

9,说说inode与block特点

  答:

inode 是用来存储数据属性信息的,他包含有指向文件实体的指针功能,但他不包括文件名。

       block 是用来存储实际信息的

10,写出命令行下五个常用快捷键及作用

答:

ctrl + a  光标快速移动到行首  Home

   ctrl + e  光标快速移动到行尾  End

   ctrl + l  快速清屏 相当于翻页

   ctrl + s  锁当前的窗口

   ctrl + r  搜索用过的命令

   ctrl + u  剪切光标前的内容

   ctrl + k  剪切光标后的内容

   ctrl + y  粘贴剪切的内容

   ctrl + ←  快速移动光标向左一个单词

   ctrl + →  快速移动光标向右一个单词

   ctrl + c  撤销 中止当前的操作

 

二.常见错误提示解析类(给出你的翻译)

1.cannot create directory “oldboy” file exists  无法创建目录“oldboy”文件存在

2.no such file or directory   没有这样的文件或目录

3.-bash: command not found    bash:未找到命令

4.connection failed    连接失败

Could not connect to '10.0.0.100' (port 22): Connection failed.

无法连接到“10.0.0.100”(端口22):连接失败

5.name or server not known   名称或服务器未知

6.cp: omitting directory ‘/etc/sysconfig/’ cp:忽略目录' /etc/sysconfig/ '

7.Permission denied  权限被拒绝

8.Not a directory   不是一个目录

 

三,请写出命令满足工作需求

1,查看磁盘inode的使用率   df -i  df -ih

2,当前路径下有一a.tar.gz压缩包,我想将其解压到/home/GAO666中

 tar xf a.tar.gz -C /home/GAO666                

3,临时和永久关闭seLinux和防火墙 

vim /etc/selinux/config 

SELINUX=disabled  setenforce 0   

systemctl stop firewalld  

systemctl disable firewalld  

4,永久关闭防火墙关闭后查看防火墙状态  

iptables-save

5,已知我曾经创建了一个名字叫做gao什么的文件,里面放置了我的私密信息。最近体重增长了,我想更新下那个文件的内容,找不到了,怎么办?

find -type f -name “gao*”

6,NetworkManager临时和永久关闭

systemctl stop NetworkManager    systemctl disable NetworkManager

7,因开发需要,我们要实时监测系统日志/var/log/messages的实时更新,请写出命令完成。tail -f

8,如何查询一个软件是否安装 

rpm -qa

 

 

第九章 通配符与特殊符号

.        #当前目录,任意一个字符(正则)

..     #当前目录的上一级目录

*      #任意0个或多个字符(文本) (通配符)

>     #输出重定向会清空原来的内容,然后在里面追加内容

>>    #追加输出重定向,追加到文件的最后一行

<     #输入重定向,tr      xargs

<<    #用来给文件追加多行文本

!      #find与awk中表示取反,linux中bash命令行使用

       逻辑运算中的“非”;vi/vim 强制退出;!+字母,调出最近一次以此字母开头的命令

     !!使用最近一次操作的命令   !+数字  调出历史的第几条命令

?      #任意一个字符,通配符

#      #表示注释     Linux会忽视他。给人看的,解释说明。

       #root用户的提示符

|       #管道,或者(正则) | xargs将前一个命令的结果交给后一个命令来处理

$      #以。。。结尾(正则),$LANG  $取变量内容

^      #以.......开头(正则表达式)

~      #当前用户的家目录

``      #(反引号)  $() #引用命令的结果   ``中间是命令,会先执行,等价$()

&&   #并且 同时成立    前一个命令成功在执行后一个命令

[]       #表示一个范围,集合 [abcdefg] [a-g] (正则,通配符)

{}      #产生一个序列,(通配符)

;    #分号,分隔多个命令

‘’ #不具有变量置换功能, 输出时所见即所得(吃啥吐啥)

“” #双引号   具有变量置换功能,解析变量输出

/      #根,路径分隔符

\      #转义符号   \班长====>>学生

?    #通配符  正则表达式

01. 特殊符号

1.基础符号系列:

美元符号:$

    1)用于取出变量中的内容

    2)用于取出指定列的信息(awk) ???

    3)表示用户命令提示符号

       超级用户为 #

       普通用户为 $

   

叹号符号:!

    1)用于表示取反或者排除意思

    2)命令行中表示取出最近命令

    3)用于表示强制操作处理

       vim底行模式保存 退出 wq! q!   

   

竖线符号:|

    管道符号:将前面命令执行的结果交给后面命令进行处理

              xargs --> 后面命令处理

    什么时候用到xargs进行过滤:

    一般基础命令接收管道传过来的信息,都要用xargs命令进行过渡 rm cp mv

    高级命令接收管道传过来的信息,可以不用xargs命令进行过度   grep sed awk

   

井号符号:#

    1)表示文件内容注释符号

    2)表示用户命令提示符号

       超级用户为 #

       普通用户为 $

 

2.引号符号系列:

'':       所见即所得

"":     会将指定内容进行输出,有些信息会被解析 $ ``

          echo "PS1='\[\e[32;1m\][\u@\h \W]\\$\[\e[0m\] '" >>/etc/profile

``:   将反引号中的命令优先执行,将执行结果交给外面的命令进行处理 ==$()

          rpm -qf `which tree`

没有引号:和双引号功能类似,可以识别通配符号信息

 

3.重定向符号系列:

>:       标准输出重定向符号

2>:     错误输出重定向符号

>>:   标准输出追加重定向符号

2>>: 错误输出追加重定向符号

<:    标准输入重定向符号

<<:   标准输入追加重定向

   

错误和正确信息都记录到一个日志文件中 ??? -- 定时任务

方法1: 2>>tar.log >>tar.log  

方法2: &>>tar.log

方法3: >>tar.log 2>&1

 

4.路径信息系列:

单点符号:.  表示当前目录

双点符号:..表示上级目录

波浪符号  ~ 表示用户家目录信息

                     超级用户:/root

                       普通用户:/home/用户名称

横线符号:-  两个目录路间进行切换

   

系统逻辑符号:

    &&:前面命令执行成功,在执行后面命令

          [root@oldboymeng ~]# mkdir -p /oldgirl && echo "前面命令执行成功"||echo "前面命令执行失败"

             前面命令执行成功

    ||:前面命令执行失败,再执行后面命令

             [root@oldboymeng ~]# mkdr -p /oldgirl && echo "前面命令执行成功"||echo "前面命令执行失败"

             -bash: mkdr: command not found

             前面命令执行失败

02. 通配符(wildcard)

通配符指的是包含这些字符的字符串,“?” “*” “[]” “{}”.他是shell的内置功能

通配符是用来匹配/查找文件名,Linux命令基本都支持通配符。

 

通配符含义=============>>匹配文件名

 

符号                           作用

*                匹配任何字符串/文本,包括空字符串

                代表任意字符(0个或多个)

?              匹配任何一个字符(不在括号内时)?代表任意一个字符

[abcd]           匹配abcd中任何一个字符

[a-z]             表示范围a到z,-表示范围的意思

{__}             表示生成序列,以逗号分隔,且不能有空格

[!abcd][^abcd]     表示非,表示不匹配括号里面的任何一个字符

 

系统通配符号:借助通配符号 匹配文件名称信息

*: 匹配所有(任意)字符信息

find /oldboy -type f  -name "old*"   找寻以什么信息开头的文件

find /oldboy -type f  -name "*txt"   借助正则符号无法匹配文件名称信息  

find /oldboy -type f  -name "old*txt"

   

{}: 批量创建数据信息

echo {01..10}   echo {01..10..2}  echo {01,03,09}

touch oldboy{01..10}

不同序列信息,可以进行组合

[root@oldboymeng ~# echo A{A,B}

AA AB

[root@oldboymeng ~# echo A{,B}

A AB

 

ifcfg-eth0  ifcfg-eth0.bak -- cp ifcfg-eth0  ifcfg-eth0.bak

[root@oldboymeng ~# echo A{A,}

AA A

   

快速备份数据:

cp /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth0.bak

 

转换:

cp /etc/sysconfig/network-scripts/ifcfg-eth0{,.bak}     cp 源 目标

cp /etc/sysconfig/network-scripts/ifcfg-eth0  /etc/sysconfig/network-scripts/ifcfg-eth0.bak

   

快速还原数据:

cp /etc/sysconfig/network-scripts/ifcfg-eth0{.bak,}

 

 

 

第十章  正则表达式

通过正则表达式从字符串中我们可以取出文件中正确的身份证号码;帮助我们快速过滤

通配符作用:查找文件名    (支持Linux大部分命令都支持   以.txt结尾)

正则作用:在文件中过滤内容   (支持的命令:三剑客sed,grep,awk,Python,java)

正则表达式注意事项:神坑-中文符号

正则表达式分类:基本正则+扩展正则

01.基本正则表达式  grep  sed

为处理大量的字符串而定义的一套规则和方法,通过定义这些的特殊符号的辅助,系统管理员可以快速过滤,替换或输出需要的字符串

1.【^】  以...开头

[root@oldboymeng ~# grep "^I" oldboy.txt

I am oldboy teacher!

I teach linux.

I like badminton ball ,billiard ball and chinese chess!

2.【$】  以...结尾

[root@oldboymeng ~# grep "m$" oldboy.txt

my blog is http://oldboy.blog.51cto.com

3.【^$】 空行    -n 显示行号

过滤文件内的空行:  

[root@oldboymeng ~]# grep '^$' datafile

^my blog is http://oldboy.blog.51cto.com$

^$

 

配置文件:如何更好的阅读

#行 空行  --- 屏蔽掉

[root@oldboymeng ~# grep -v "^$" oldboy.txt

I am oldboy teacher!

I teach linux.

I like badminton ball ,billiard ball and chinese chess!

my blog is http://oldboy.blog.51cto.com

our site is http://www.etiantian.org

my qq num is 49000448.

not 4900000448.

my god ,i am not oldbey,but OLDBOY!

4.【.】  任意一个字符,不会匹配空行

[root@oldboymeng ~# grep . oldboy.txt -o

I

 

a

m

 

o

5.【\】  转义字符,让有意义的字符脱掉马甲,还原他本身的含义

将有意义的符号信息,变成没有意义    

[root@oldboymeng ~# grep "\.$" oldboy.txt

I teach linux.

my qq num is 49000448.

not 4900000448.

 

将没有意义的字符信息,变成有意义的信息

\t: 制表符

\n: 换行符

\r: 换行符

[root@oldboymeng ~# echo -e "oldboy01\noldboy02"

oldboy01

oldboy02

6.【*】  前一个字符出现了0次或0次以上(逐行匹配)

[root@oldboymeng ~# grep "0*" oldboy.txt -o

000

00000

7.【.*】 所有内容,包括空行

 

8.【[]】 匹配多个字符信息(或者关系),他里边的字符都用或者区分,都包含,但都各是各

 

9.【[^]】排除指定的字符信息不要进行匹配, ^在里边是取反的,不包含里边的字符的意思

需求:排除小写字母信息不要显示

[root@oldboymeng ~# grep -v [a-z] oldboy.txt

 

[root@oldboymeng ~# grep [^a-z] oldboy.txt

I am oldboy teacher!

I teach linux.

I like badminton ball ,billiard ball and chinese chess!

my blog is http://oldboy.blog.51cto.com

our site is http://www.etiantian.org

my qq num is 49000448.

not 4900000448.

my god ,i am not oldbey,but OLDBOY!

02.扩展正则表达式  grep -E/egrep  sed -r awk

1.【+】  ---前一个字符出现1次或1次以上

--- 匹配前一个字符连续出现1次或者多次

[root@oldboymeng ~# grep -E "0+" oldboy.txt

my qq num is 49000448.

not 4900000448.

2.【|】  ---管道符在正则表达式中的意思是或者

--- 匹配的信息之间是或者的关系

[root@oldboymeng ~# grep -Ev "^$|^#" oldboy.txt

I am oldboy teacher!

I teach linux.

I like badminton ball ,billiard ball and chinese chess!

our site is http://www.etiantian.org

my qq num is 49000448.

not 4900000448.

my god ,i am not oldbey,but OLDBOY!

 

[root@oldboymeng ~# grep  -E "oldb(o|e)y" oldboy.txt

I am oldboy teacher!

#my blog is http://oldboy.blog.51cto.com

my god ,i am not oldbey,but OLDBOY!

3.【()】 ---表示一个整体,反向引用/后向引用

--- 将多个字符信息汇总为一个整体进行过滤

--- 替换修改文件内容,后向引用前项

[root@oldboymeng ~# echo 123456

123456

 

[root@oldboymeng ~# #echo 123456|xxx --> <123456>

 

[root@oldboymeng ~#

 

[root@oldboymeng ~# echo 123456|sed "s#123456#<123456>#g"

<123456>

 

[root@oldboymeng ~# echo 123456|sed "s#(.*)#<\1>#g"

sed: -e expression #1, char 13: invalid reference \1 on `s' command's RHS

 

[root@oldboymeng ~# echo 123456|sed -r "s#(.*)#<\1>#g"

<123456>

 

[root@oldboymeng ~# echo 123456|sed -r "s#(.)(.)(.)(.)(.)(.)#\1#g"

1

 

[root@oldboymeng ~# echo 123456|sed -r "s#(.)(.)(.)(.)(.)(.)#\1\2#g"

12

 

[root@oldboymeng ~# echo 123456|sed -r "s#(.)(.)(.)(.)(.)(.)#\1\2\3#g"

123

 

[root@oldboymeng ~# echo 123456|sed -r "s#(.)(.)(.)(.)(.)(.)#<\1>\2\3\4\5\6#g"

<1>23456

       

示例:批量创建用户信息(设置固定密码)

第一个历程:生成序列信息

[root@oldboymeng ~# echo {01..10}|xargs -n1

01

02

03

04

05

06

07

08

09

10

 

[root@oldboymeng ~# seq 10

1

2

3

4

5

6

7

8

9

10

 

[root@oldboymeng ~# seq -w 10

01

02

03

04

05

06

07

08

09

10

 

第二个历程:生成命令信息,交给bash命令执行

[root@oldboymeng ~# seq -w 10|sed -r 's#(.*)#useradd oldboy\1;echo 123456|passwd --stdin oldboy\1#g'|bash

useradd: user 'oldboy01' already exists

Changing password for user oldboy01.

passwd: all authentication tokens updated successfully.

Changing password for user oldboy02.

passwd: all authentication tokens updated successfully.

Changing password for user oldboy03.

passwd: all authentication tokens updated successfully.

Changing password for user oldboy04.

passwd: all authentication tokens updated successfully.

Changing password for user oldboy05.

passwd: all authentication tokens updated successfully.

Changing password for user oldboy06.

passwd: all authentication tokens updated successfully.

Changing password for user oldboy07.

passwd: all authentication tokens updated successfully.

Changing password for user oldboy08.

passwd: all authentication tokens updated successfully.

Changing password for user oldboy09.

passwd: all authentication tokens updated successfully.

Changing password for user oldboy10.

passwd: all authentication tokens updated successfully.

     

思考:如何批量创建用户,并且每个用户的密码是随机密码

1. 如何生成随机密码信息---如何生成随机字符

2. 随机密码信息如何保留下来

 

脚本如何实现???

4.【{}】 ---{n,m}匹配其前面的字符出现至少n次,至多m次

--- 匹配前一个字符连续出现指定的次数

{n,m}  --- 匹配前一个字符连续最少出现n次  最多出现m

[root@oldboymeng ~# grep -E "0{3,5}" oldboy.txt

my qq num is 49000448.

not 4900000448.

 

[root@oldboymeng ~# grep -E "0{3,5}" oldboy.txt -o

000

00000

 

[root@oldboymeng ~# grep -E "0{2,4}" oldboy.txt

my qq num is 49000448.

not 4900000448.

 

[root@oldboymeng ~# grep -E "0{2,4}" oldboy.txt -o

000

0000

 

[root@oldboymeng ~# grep -E "0{1,4}" oldboy.txt -o

000

0000

0

 

[root@oldboymeng ~# grep -E "0{1,4}" oldboy.txt

my qq num is 49000448.

not 4900000448.

         

{n}  --- 匹配前一个字符连续正好出现n

[root@oldboymeng ~# grep -E "0{3}" oldboy.txt

my qq num is 49000448.

not 4900000448.

 

[root@oldboymeng ~# grep -E "0{3}" oldboy.txt -o

000

000

         

{n,}  --- 匹配前一个字符连续最少出现n次,最多出现次数没有限制

[root@oldboymeng ~# grep -E "0{2,}" oldboy.txt

my qq num is 49000448.

not 4900000448.

 

[root@oldboymeng ~# grep -E "0{2,}" oldboy.txt -o

000

00000

 

[root@oldboymeng ~# grep -E "0{4,}" oldboy.txt

not 4900000448.

 

[root@oldboymeng ~# grep -E "0{4,}" oldboy.txt -o

00000

         

{,m}  --- 匹配前一个字符连续最少出现0次,最多出现次数m

[root@oldboymeng ~# grep -E "0{,4}" oldboy.txt

I am oldboy teacher!

I teach linux.

 

I like badminton ball ,billiard ball and chinese chess!

#my blog is http://oldboy.blog.51cto.com

our site is http://www.etiantian.org

my qq num is 49000448.

 

not 4900000448.

my god ,i am not oldbey,but OLDBOY!

 

[root@oldboymeng ~# grep -E "0{,4}" oldboy.txt -o

000

0000

0

5.【?】  ---匹配前一个字符重复0次或1次

 

03.正则匹配信息:

01. 具有贪婪匹配特性

解决方法:

[root@oldboymeng ~# grep "^m.*og " oldboy.txt

my blog is http://oldboy.blog.51cto.com

[root@oldboymeng ~# grep "^m.*g " oldboy.txt

my blog is http://oldboy.blog.51cto.com

 

02. 过滤时显示的信息不正确

grep过滤信息,过滤信息外面使用双引号

sed awk过滤信息,过滤信息外面使用单引号

 

04.测验练习:

如何取出IP地址:

sed

第一个历程:获取有IP地址信息命令

ip address show eth0

   

第二个历程:定位有IP地址信息行

[root@oldboymeng ~# ip a s eth0|sed -n '3p'

inet 10.0.0.201/24 brd 10.0.0.255 scope global eth0

   

第三个历程:取出指定信息

[root@oldboymeng ~# ip a s eth0|sed -n '3p'

inet 10.0.0.201/24 brd 10.0.0.255 scope global eth0

 

[root@oldboymeng ~# ip a s eth0|sed -n '3p'|sed -r "s#^.*t (.*)#\1#g"

10.0.0.201/24 brd 10.0.0.255 scope global eth0

 

[root@oldboymeng ~# ip a s eth0|sed -n '3p'|sed -r "s#^.*t (.*)#\1#g"|sed -r 's#(.*)/24.*$#\1#g'

             10.0.0.201

   

第四个历程:命令整合:

第一次整合:

sed -r 's#^.*t (.*)#\1#g'

sed -r 's#(.*)/24.*$#\1#g'

 

sed -r 's#^.*t (.*)/24.*$#\1#g'

 

[root@oldboymeng ~# ip a s eth0|sed -n '3p'|sed -r 's#^.*t (.*)/24.*$#\1#g'

10.0.0.201

 

第二次整合:

sed -n '3p'

sed -r 's#^.*t (.*)/24.*$#\1#g'

 

sed -nr '3s#^.*t (.*)/24.*$#\1#gp'

 

[root@oldboymeng ~# ip a s eth0|sed -nr '3s#^.*t (.*)/24.*$#\1#gp'

10.0.0.201

 

grep:

第一个历程:获取有IP地址信息命令

ip address show eth0

 

第二个历程:定位有IP地址信息行    

[root@oldboymeng ~# ip a s eth0|grep global

inet 10.0.0.201/24 brd 10.0.0.255 scope global eth0

 

[root@oldboymeng ~# ip a s eth0|grep inet

inet 10.0.0.201/24 brd 10.0.0.255 scope global eth0

inet6 fe80::20c:29ff:fe37:df1b/64 scope link

 

[root@oldboymeng ~# ip a s eth0|grep -w inet

inet 10.0.0.201/24 brd 10.0.0.255 scope global eth0

   

第三个历程:取出指定信息

[root@oldboymeng ~# ip a s eth0|grep -w inet

inet 10.0.0.201/24 brd 10.0.0.255 scope global eth0

 

[root@oldboymeng ~# ip a s eth0|grep -w inet|grep "[0-9].[0-9].[0-9].[0-9]"

inet 10.0.0.201/24 brd 10.0.0.255 scope global eth0

 

[root@oldboymeng ~# ip a s eth0|grep -w inet|grep "[0-9]+.[0-9]+.[0-9]+.[0-9]+"

 

[root@oldboymeng ~# ip a s eth0|grep -w inet|grep -E "[0-9]+.[0-9]+.[0-9]+.[0-9]+"

inet 10.0.0.201/24 brd 10.0.0.255 scope global eth0

 

[root@oldboymeng ~# ip a s eth0|grep -w inet|grep -E "[0-9]+.[0-9]+.[0-9]+.[0-9]+" -o

10.0.0.201

10.0.0.255

 

[root@oldboymeng ~# ip a s eth0|grep -w inet|grep -E "[0-9]+.[0-9]+.[0-9]+.[0-9]+" -o|head -1

10.0.0.201

 

[root@oldboymeng ~#

 

[root@oldboymeng ~# ip a s eth0|grep -w inet|grep -E "([0-9]+.){3}[0-9]+"

inet 10.0.0.201/24 brd 10.0.0.255 scope global eth0

 

[root@oldboymeng ~# ip a s eth0|grep -w inet|grep -E "([0-9]+.){3}[0-9]+" -o

10.0.0.201

10.0.0.255

 

[root@oldboymeng ~# ip a s eth0|grep -w inet|grep -E "([0-9]+.){4}" -o

10.0.0.201/

10.0.0.255

 

[root@oldboymeng ~# ip a s eth0|grep -w inet|grep -E "([0-9]+.){4}"

    inet 10.0.0.201/24 brd 10.0.0.255 scope global eth0

 

[root@oldboymeng ~# ip a s eth0|grep -w inet|grep -E "([0-9]+\.){4}"

 

[root@oldboymeng ~# ip a s eth0|grep -w inet|grep -E "([0-9]+\.?){4}"

    inet 10.0.0.201/24 brd 10.0.0.255 scope global eth0

 

[root@oldboymeng ~# ip a s eth0|grep -w inet|grep -E "([0-9]+\.?){4}" -o

10.0.0.201

10.0.0.255

 

  awk???

 

05.三剑客之sed命令

sed - stream editor for filtering and transforming text

流编辑器工具(文件字符流进行处理编辑)

作用: 擅长对文件的行进行处理  修改编辑文件内容

语法:sed [参数] '条件 指令(如何处理)'  文件信息

      sed -n '/oldboy/p'  oldboy.txt

参数:

       -n  取消默认输出

       -i  真实修改文件内容

       -e  识别多个指令信息,可以让多个指令同时执行

       -r  识别扩展正则符号信息

指令:

      p   print  输出信息    

       d   delete 删除文件信息

       i   insert 在指定条件行的上面添加信息

       a   append 在指定条件行的下面添加信息

       s   substitute  取代==替换

       g   global 将所有匹配的信息都做替换(没有 将一行中第一个匹配的信息做替换)

       c   change 修改替换指定的整行信息

 

sed命令执行原理: ---按行处理文件信息

 

sed命令操作实践:

sed命令能完成什么事情:增 删 改 查 (处理文本文件  配置文件-sed  日志文件-grep/awk)

 

测试环境准备:

cat >person.txt<<EOF

101,oldboy,CEO

102,zhaoyao,CTO

103,Alex,COO

104,yy,CFO

105,feixue,CIO

EOF

 

1.如何查询信息:

需求:查询单行信息:

1. 将第3行信息进行显示

[root@oldboymeng ~# sed -n '3p' person.txt

103,Alex,COO

 

2. 将有oldboy的行进行显示

[root@oldboymeng ~# sed -n '/oldboy/p' person.txt

101,oldboy,CEO

    

需求:查询多行信息

1. 将第3~5行信息进行显示

# sed -n '3,5p' person.txt

103,Alex,COO

104,yy,CFO

105,feixue,CIO

 

2. oldboy ~ alex信息进行显示

# sed -n '/oldboy/,/Alex/p' person.txt

101,oldboy,CEO

102,zhaoyao,CTO

103,Alex,COO

 

3. 只查看第3行和第5行内容

# sed -n '3p;5p' person.txt

103,Alex,COO

111,Alex,CEO

 

4.只查看有oldboyalex信息

#sed -n '/oldboy/p;/Alex/p' person.txt

101,oldboy,CEO

103,Alex,COO

111,Alex,CEO

 

2.如何删除文件信息

需求:

01. 将第三行信息进行删除

[root@oldboymeng ~# sed '3d' person.txt

101,oldboy,CEO

102,zhaoyao,CTO

104,yy,CFO

111,Alex,CEO

105,feixue,CIO

[root@oldboymeng ~# cat person.txt

101,oldboy,CEO

102,zhaoyao,CTO

103,Alex,COO

104,yy,CFO

111,Alex,CEO

105,feixue,CIO

[root@oldboymeng ~# sed -i '3d' person.txt

[root@oldboymeng ~# cat person.txt

101,oldboy,CEO

102,zhaoyao,CTO

104,yy,CFO

111,Alex,CEO

105,feixue,CIO

 

02. 将有oldboy信息的行进行删除

sed '/oldboy/d' person.txt

sed -i '/oldboy/d' person.txt   

 

03. oldboyAlex信息的行进行删除 

[root@oldboymeng ~# sed '/oldboy/d;/Alex/d' person.txt

102,zhaoyao,CTO

104,yy,CFO

105,feixue,CIO

[root@oldboymeng ~# sed -r '/oldboy|Alex/d' person.txt

102,zhaoyao,CTO

104,yy,CFO

105,feixue,CIO

  

3.如何增加信息

需求:

01. 在第3行后面增加新的一行  内容 oldboy61

[root@oldboymeng ~# sed '3a oldboy61' person.txt

101,oldboy,CEO

102,zhaoyao,CTO

103,Alex,COO

oldboy61

104,yy,CFO

111,Alex,CEO

105,feixue,CIO

 

02. 在第5行前面增加新的一行  内容 oldboy61  

[root@oldboymeng ~# sed '5i oldboy61' person.txt

101,oldboy,CEO

102,zhaoyao,CTO

103,Alex,COO

104,yy,CFO

oldboy61

111,Alex,CEO

105,feixue,CIO

         

03. 在第3行前面加oldboy61,同时在第5行后面加oldboy61      

[root@oldboymeng ~# sed -e '3ioldboy61' -e '5aoldboy61' person.txt

101,oldboy,CEO

102,zhaoyao,CTO

oldboy61

103,Alex,COO

104,yy,CFO

111,Alex,CEO

oldboy61

105,feixue,CIO

    

04. 在文件最后一行后面,添加多行信息

[root@oldboymeng ~# sed -e '$aoldboy61' person.txt

101,oldboy,CEO

102,zhaoyao,CTO

103,Alex,COO

104,yy,CFO

111,Alex,CEO

105,feixue,CIO

oldboy61

 

[root@oldboymeng ~# sed '$aoldboy61\noldboymeng' person.txt

101,oldboy,CEO

102,zhaoyao,CTO

103,Alex,COO

104,yy,CFO

111,Alex,CEO

105,feixue,CIO

oldboy61

oldboymeng

    

4.替换修改文件内容:

需求

01. 123456 信息显示 <123456>

[root@oldboymeng ~# echo 123456|sed -r 's#(.*)#<\1>#g'

<123456>

[root@oldboymeng ~# echo 123456|sed  's#.*#<&>#g'

<123456>

[root@oldboymeng ~# echo 123456|sed -r 's#([0-9]+)#<\1>#g'

<123456>

 

02.123456 信息显示 <123><456>

[root@oldboymeng ~# echo 123456|sed -r 's#([0-9]{3})#<\1>#g'

<123><456>

[root@oldboymeng ~# echo 123456|sed -r 's#(.{3})#<\1>#g'

<123><456>        

 

03.123456 信息显示 <1><2><3><4><5><6>

[root@oldboymeng ~# echo 123456|sed -r 's#([0-9])#<\1>#g'

<1><2><3><4><5><6>

[root@oldboymeng ~# echo 123456|sed -r 's#([0-9]{1})#<\1>#g'

<1><2><3><4><5><6>

[root@oldboymeng ~# echo 123456|sed -r 's#(.)#<\1>#g'

<1><2><3><4><5><6>

     

修改文件内容:

使用-i参数问题:

01. -i.bak 表示对源文件进行备份  -- i参数后面不能跟其他参数

#sed -ri.bak 's#(.*)#<\1>#g' oldboy.txt

# ll oldboy.txt*

-rw-r--r--. 1 root root 9 Oct 10 13:52 oldboy.txt

-rw-r--r--. 1 root root 7 Oct 10 13:52 oldboy.txt.bak

 

02. 在利用-i替换文件内容信息,-i参数和-n参数一定不能同时使用

替换的错误方法

[root@oldboymeng ~# sed -n '/Alex/s#COO#CEO#gp' person.txt

103,Alex,CEO

[root@oldboymeng ~# sed -ni.bak '/Alex/s#COO#CEO#gp' person.txt

[root@oldboymeng ~# cat person.txt

103,Alex,CEO

[root@oldboymeng ~# cat person.txt.bak

101,oldboy,CEO

102,zhaoyao,CTO

103,Alex,COO

104,yy,CFO

111,Alex,CEO

105,feixue,CIO

正确替换方法

[root@oldboymeng ~# sed -i '/Alex/s#COO#CEO#g' person.txt

[root@oldboymeng ~# cat person.txt

101,oldboy,CEO

102,zhaoyao,CTO

103,Alex,CEO

104,yy,CFO

111,Alex,CEO

105,feixue,CIO

   

02. 批量修改文件扩展名称

方法一:

find /oldboy -maxdepth 1 -type f -name "oldboy*.txt"|sed -r 's#(.*)txt#mv \1txt \1jpg#g'|bash

mv /oldboy/oldboy.txt /oldboy/oldboy.jpg

mv /oldboy/oldboy01.txt /oldboy/oldboy01.jpg

mv /oldboy/oldboy02.txt /oldboy/oldboy02.jpg

mv /oldboy/oldboy03.txt /oldboy/oldboy03.jpg

mv /oldboy/oldboy04.txt /oldboy/oldboy04.jpg

mv /oldboy/oldboy05.txt /oldboy/oldboy05.jpg

mv /oldboy/oldboy06.txt /oldboy/oldboy06.jpg

mv /oldboy/oldboy07.txt /oldboy/oldboy07.jpg

mv /oldboy/oldboy08.txt /oldboy/oldboy08.jpg

mv /oldboy/oldboy09.txt /oldboy/oldboy09.jpg

mv /oldboy/oldboy10.txt /oldboy/oldboy10.jpg

   

方法二:

[root@oldboymeng /oldboy# ls oldboy*.txt|xargs -n1|sed -r 's#(.*)txt#mv & \1jpg#g'

mv oldboy01.txt oldboy01.jpg

mv oldboy02.txt oldboy02.jpg

mv oldboy03.txt oldboy03.jpg

mv oldboy04.txt oldboy04.jpg

mv oldboy05.txt oldboy05.jpg

mv oldboy06.txt oldboy06.jpg

 

方法三:利用rename

#rename "修改文件名称什么信息" "修改成什么"  修改什么文件

rename ".txt" ".jpg" oldboy*.txt

   

03. 取出文件权限数值信息

方法一:

[root@oldboymeng ~# stat /etc/hosts|sed -nr '4s#^A.*s: \((.*)/-.*$#\1#gp'

0644

 

[root@oldboymeng ~# stat /etc/hosts|sed -n '4s#^A.*s: (\(.*\)/-.*$#\1#gp'

0644

 

方法二:???

[root@oldboymeng ~# ll /etc/hosts|sed -r 's#^-(.*)\. 1.*$#\1#g'

rw-r--r--

 

[root@oldboymeng ~# ll /etc/hosts|sed -r 's#^-(.*)\. 1.*$#\1#g'|tr "rwx-" "4210"

420400400

   

04.特殊替换文件内容信息:

[root@oldboymeng ~# sed -n '3s/#103/103/gp' person.txt

103,Alex,COO

 

[root@oldboymeng ~# sed -n '3s#\#103#103#gp' person.txt

103,Alex,COO

 

05.修改整行信息:

[root@oldboymeng ~# sed '3coldboy61' person.txt

101,oldboy,CEO

102,zhaoyao,CTO

oldboy61

104,yy,CFO

111,Alex,CEO

105,feixue,CIO

 

06.取消空行不要显示

方法一:

[root@oldboymeng ~# sed '/^$/d' person.txt

101,oldboy,CEO

102,zhaoyao,CTO

#103,Alex,COO

104,yy,CFO

111,Alex,CEO

105,feixue,CIO

 

方法二:

[root@oldboymeng ~# sed -n '/^$/!p' person.txt

101,oldboy,CEO

102,zhaoyao,CTO

#103,Alex,COO

104,yy,CFO

111,Alex,CEO

105,feixue,CIO

 

扩展:利用sed命令显示文件行号信息

       sed '=' person.txt|xargs -n2

 

06.三剑客之awk命令

1.awk三剑客命令概述

1)作用:擅长取列 擅长统计运算

 

2)语法:awk [参数] '模式(条件){动作}(指令)'  文件信息

       awk命令参数:

-F  : 指定分隔符号信息  ":"  "[:/]"  "[:/]+"

-v  : 设置变量信息

       awk命令动作:

       print: 打印输出信息  空格 , " "  字符串 "oldboy"  变量信息  oldboy  指定列 $1 $NF $(NF-1) $0(所有列)

       gsub:  替换指定列的信息   gsub(/要替换的内容/,"替换成什么",$N)

       计算:

       累加运算:i=i+1  i++

       求和运算:i=i+$n       

       awk内置变量:

       FS NF NR

模式:常用模式 特殊模式(BEGIN END)

 

3)原理:

gawk - pattern scanning and processing language

      模式扫描(条件匹配)and 程序语言

awk: 擅长取列  擅长统计分析(nginx zabbix tomcat ... SSH)ELK awk

 

[root@oldboymeng ~# which awk

/usr/bin/awk

[root@oldboymeng ~# ll /usr/bin/awk

lrwxrwxrwx. 1 root root 4 May 31 16:06 /usr/bin/awk -> gawk

 

 

把文件内容按列对齐:

column -t test.txt

2.awk三剑客命令实践操作:查询 排除 替换

部署准备环境:

cat > oldboy.txt <<EOF    捐款 1   2   3

Zhang  Dandan    41117397    :250:100:175

Zhang  Xiaoyu    390320151   :155:90:201

Meng   Feixue    80042789    :250:60:50

Wu     Waiwai    70271111    :250:80:75

Liu    Bingbing  41117483    :250:100:175

Wang   Xiaoai    3515064655  :50:95:135

Zi     Gege      1986787350  :250:168:200

Li     Youjiu    918391635   :175:75:300

Lao    Nanhai    918391635   :250:100:175

EOF

 

实践操作练习:

01. 显示xiaoyu的姓氏和ID号码

满足需求不符合规范

[root@oldboymeng ~# awk '/Xiaoyu/{print $1 $3}' oldboy.txt

Zhang390320151

[root@oldboymeng ~# awk '/Xiaoyu/{print $1,$3}' oldboy.txt

Zhang 390320151

[root@oldboymeng ~# awk '/Xiaoyu/{print $1" "$3}' oldboy.txt

Zhang 390320151

 

按照指定列进行搜索信息

[root@oldboymeng ~# awk '/Xiaoyu/' oldboy.txt        --- 将匹配信息的行直接显示

Zhang  Xiaoyu    390320151   :155:90:201

Xiaoyu zhang     390320151   :155:90:201

[root@oldboymeng ~# awk '$2~/Xiaoyu/' oldboy.txt     --- 指定列信息匹配

Zhang  Xiaoyu    390320151   :155:90:201

[root@oldboymeng ~# awk '$2!~/Xiaoyu/' oldboy.txt

Zhang  Dandan    41117397    :250:100:175

Xiaoyu zhang     390320151   :155:90:201

Meng   Feixue    80042789    :250:60:50

Wu     Waiwai    70271111    :250:80:75

Liu    Bingbing  41117483    :250:100:175

Wang   Xiaoai    3515064655  :50:95:135

Zi     Gege      1986787350  :250:168:200

Li     Youjiu    918391635   :175:75:300

Lao    Nanhai    918391635   :250:100:175

 

满足要求,正确语法格式

[root@oldboymeng ~# awk '$2~/Xiaoyu/{print $1,$3}' oldboy.txt

Zhang 390320151

 

PS:awk命令默认区分大小写  没有类似grep命令 -i参数功能

 

02.姓氏是zhang的人,显示他的第二次捐款金额及他的名字

第一历程:找出姓氏是张的人

[root@oldboymeng ~# awk '$1~/Zhang/' oldboy.txt

Zhang  Dandan    41117397    :250:100:175

Zhang  Xiaoyu    390320151   :155:90:201

 

第二历程:显示出名字信息和所有捐款记录

[root@oldboymeng ~# awk '$1~/Zhang/{print $2,$4}' oldboy.txt

Dandan :250:100:175

Xiaoyu :155:90:201

PS:awk默认使用空格进行作为列分隔符

 

第三历程:指定字符信息作为分隔符

[root@oldboymeng ~# awk -F "[: ]+" '$1~/Zhang/{print $2,$5}' oldboy.txt

Dandan 100

Xiaoyu 90

 

总结:

    01. awk默认使用空格分隔列

    02. 可以使用-F 指定分隔列的符号信息

    03. 利用-F "[: ]+"  +表示将多个连续的分隔符汇总为一个整体

 

03. 显示所有以41开头的ID号码的人的全名和ID号码

第一个历程:找出匹配id号码是41开头的行信息 --- 找出东西(模式写好)

[root@oldboymeng ~# awk '$3~/^41/' oldboy.txt

Zhang  Dandan    41117397    :250:100:175

Liu    Bingbing  41117483    :250:100:175

 

第二个历程:显示出人的全名 ID号码 --- 对找出东西进行处理(执行动作)

[root@oldboymeng ~# awk '$3~/^41/{print $1,$2,$3}' oldboy.txt|column -t

Zhang  Dandan    41117397

Liu    Bingbing  41117483

 

04. 显示所有ID号码最后一位数字是15的人的全名

第一个历程:找出id号码以15结尾信息   --- 找出信息

awk '$3~/1$|5$/' oldboy.txt

awk '$3~/[15]$/' oldboy.txt

 

第二个历程:显示全名信息               --- 找出信息做处理

awk '$3~/[15]$/{print $1,$2}' oldboy.txt|column -t

 

05. 显示文件中第二行,第三列的信息

第一个历程:匹配第二行

[root@oldboymeng ~# awk 'NR==2' oldboy.txt

Zhang  Xiaoyu    390320151   :155:90:201

 

第二个历程:显示第三列

awk 'NR==2{print $3}' oldboy.txt

 

测验:利用awk取出IP地址信息(grep sed

第一个历程:定位有IP地址的行          --- 找出信息

ip a s eth0|awk 'NR==3'

inet 10.0.0.201/24 brd 10.0.0.255 scope global eth0

 

第二个历程:只显示IP地址              --- 做处理

[root@oldboymeng ~# ip a s eth0|awk -F "[ /]+" 'NR==3{print $3}'

10.0.0.201

 

说明:在不指定-F参数信息,

1. 默认将多个连续的空格汇总为整体

2. 默认将一行头部开始空格信息忽略不计

[root@oldboymeng ~# ip a s eth0|awk -F "[^0-9.]+" 'NR==3{print $2}'

10.0.0.201

 

06. 显示Xiaoyu的捐款,每个捐款数值都有以$开头, $110$220$330

方法一:

[root@oldboymeng ~# awk -F "[:]" '$2~/Xiaoyu/{print "$"$2"$"$3"$"$4}' oldboy.txt   ???

$155$90$201

 

方法二:

[root@oldboymeng ~# awk  '$2~/Xiaoyu/{print $4}' oldboy.txt|sed 's#:#$#g'

$155$90$201

[root@oldboymeng ~# awk  '$2~/Xiaoyu/{print $4}' oldboy.txt|tr ":" "$"

$155$90$201

 

方法三:awk替换功能  sed tr

gsub(/要替换的信息/,"替换成什么",将第几列进行替换)

[root@oldboymeng ~# awk  '$2~/Xiaoyu/{gsub(/:/,"$",$NF);print $NF}' oldboy.txt

$155$90$201

   

利用awk排除指定信息不要显示

awk '!/^$/' oldboy.txt

3.awk命令高级功能说明

普通模式: 

正则表达式作为模式      

^ 还可以表示某一列的开始

$ 还可以表示某一列的结尾

 

比较表达式作为模式

[root@oldboymeng ~# awk 'NR==1{print $NF}' oldboy.txt

:250:100:175

 

范围模式  

awk 'NR==1;NR==2' oldboy.txt    --- 只查看第1和第2行

    awk 'NR==1,NR==3' oldboy.txt    --- 查看第一到第三行

特殊模式:  BIGIN  END

BEGIN  在处理文件之前先执行的动作

1)生成文件内容表头信息

[root@oldboymeng ~# awk 'BEGIN{print "姓氏","名称","id号码","捐款记录"}{print $0}' oldboy.txt |column -t

姓氏    名称      id号码      捐款记录

Zhang   Dandan    41117397    :250:100:175

Zhang   Xiaoyu    390320151   :155:90:201

Xiaoyu  zhang     390320151   :155:90:201

Meng    Feixue    800412789   :250:60:50

Wu      Waiwai    70271111    :250:80:75

Liu     Bingbing  41117483    :250:100:175

Wang    Xiaoai    3515064655  :50:95:135

Zi      Gege      1986787350  :250:168:200

Li      Youjiu    918391635   :175:75:300

Lao     Nanhai    918391635   :250:100:175

 

2)用于在系统中进行运算数值

awk 'BEGIN{print 2+3}'

 

3) 修改或设置变量信息

 

a. awk命令中,会直接将字符串信息当成变量  $1 $NF $0(取一行中所有列)

[root@oldboymeng ~# awk 'BEGIN{oldboy=62;print oldboy}'

62

 

[root@oldboymeng ~# awk 'BEGIN{oldboy=62;print "oldboy"}'

oldboy

 

b. awk命令中,变量分类:

自定义变量:oldboy=62

内置变量:

NF : 显示最后一列信息  $(NF-1) 取倒数第2列

NR : 表示行号信息,取出第几行  NR==2 NR>=2 NR<=2

FS : 指定分隔符信息  -F

 

[root@oldboymeng ~# awk -F ":" 'NR==1{print $2}' oldboy.txt

250

 

[root@oldboymeng ~# awk  'BEGIN{FS=":"}NR==1{print $2}' oldboy.txt

250

 

[root@oldboymeng ~# awk -vFS=":" 'NR==1{print $2}' oldboy.txt

250

 

END    在处理文件之后再执行的动作 ***

1)显示表格补充信息

[root@oldboymeng ~# awk 'BEGIN{print "姓氏","名称","id号码","捐款记录"}{print $0}END{print "总结:这是一个学生登记表"}' oldboy.txt|column -t

姓氏 名称 id号码 捐款记录

Zhang  Dandan    41117397    :250:100:175

Zhang  Xiaoyu    390320151   :155:90:201

Meng   Feixue    800412789    :250:60:50

Wu     Waiwai    70271111    :250:80:75

Liu    Bingbing  41117483    :250:100:175

Wang   Xiaoai    3515064655  :50:95:135

Zi     Gege      1986787350  :250:168:200

Li     Youjiu    918391635   :175:75:300

Lao    Nanhai    918391635   :250:100:175

 

总结:这是一个学生登记表

 

2)显示计算的最终结果 OK

awk '/^$/{i=i+1}END{print i}' /etc/services

4.awk运算方法:

1)累加运算:a b c d  1+1+1+1

i=i+1 --> i++

练习题01:统计一个文件中有多少个空行

第一个历程:找出空行

awk '/^$/' /etc/services

 

第二个历程:做运算处理

[root@oldboymeng ~# awk '/^$/{i=i+1;print i}' /etc/services

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

 

[root@oldboymeng ~# awk '/^$/{i=i+1}END{print i}' /etc/services

17

    

练习题02:统计/etc/passwd文件中最后一列有/sbin/nologin的出现了多少次

[root@oldboymeng ~# awk -F ":" '$NF~/nologin$/{i++}END{print i}' /etc/passwd

17

[root@oldboymeng ~# awk '/nologin$/{i++}END{print i}' /etc/passwd

17

2)求和运算: 10 20 30 60

i=i+$n

实践操作:

[root@oldboymeng ~# seq 10|awk '{i=i+$1;print i}'

1

3

6

10

15

21

28

36

45

55

[root@oldboymeng ~# seq 10|awk '{i=i+$1}END{print i}'

55

 

第十一章Linux系统启动流程

01.系统启动流程

1.Centos6

1. 开机加电自检        --- 检查bios中识别的硬件信息是否正常

 

2. 开机MBR引导     --- /boot分区引导系统启动的记录信息(MBR引导记录--系统启动文件信息/分区表信息)

 

3. grub选择菜单             --- 可以选择系统内核信息/可以选择进入单用户模式

 

4. 加载内核信息        --- 用于管理控制硬件

 

5. 启动系统进程        --- /sbin/init --- 后续进程启动(串型)

 

6. 加载启动级别文件  --- 加载/etc/inittab     选择不同级别启动系统

 

7. 运行初始化脚本      --- /etc/rc.d/rc.sysinit 设置主机名称 设置网卡地址信息

 

8. 执行服务运行脚本   --- /etc/rc.d/rc         实现服务开机自动运行

 

9. 启动mingetty进程 --- 显示登录提示信息

 

 

开机自检 --- 加载MBR --- 加载grup菜单 --- 加载内核 --- 启动第一个服务进程 --- 加载运行级别文件--- 加载初始化脚本 --- 加载运行脚本(实现服务程序开机自启)--- 启动mingetty进程显示登录界面

CentOS 6串行启动,执行完一个,再执行下一个

2.CentOS 7

1. 开机加电自检            --- 检查bios中识别的硬件信息是否正常

 

2. 开机MBR引导         --- /boot分区引导系统启动的记录信息(MBR引导记录--系统启动文件信息/分区表信息)

 

3. grup选择菜单             --- 可以选择系统内核信息/可以选择进入单用户模式

 

4. 加载内核信息            --- 用于管理控制硬件

 

5. 启动系统进程            --- /usr/lib/systemd/systemd --- 后续进程启动(并型)

 

6. 加载启动target文件   --- /etc/systemd/system/default.target  选择不同级别启动系统

 

7. 加载系统初始化文件       --- /usr/lib/systemd/system/sysinit.target 设置主机名称 设置网卡地址信息

8. 执行服务运行脚本         --- /etc/systemd/system         实现服务开机自动运行

                          /usr/lib/systemd/system/    保存系统中所有程序启动文件

 

9. 启动mingetty进程       --- 显示登录提示信息

 

 

开机自检 --- 加载MBR --- 加载grup菜单 --- 加载内核 --- 启动第一个服务进程 --- 加载运行target信息--- 加载初始化脚本 --- 加载运行文件(实现服务程序开机自启)--- 启动mingetty进程显示登录界面

CentOS 7并行启动,一起执行

 

02.系统服务程序自动运行方法

1. 利用/etc/rc.local

 

2. 利用chkconfig命令  --- centos6

chkconfig --list|grep 服务名称    --- 检查服务开机自启状态

chkconfig 服务名称 on/off         --- 设置234级别开机自动

chkconfig 服务名称 --level 级别   --- 设置指定级别开机自启

 

3. 利用syetemctl命令  --- centos7

systemctl disable/enable 服务名称 --- 设置服务开机自启

 

第十二章 用户管理知识

01.用户相关的重要目录

/etc/skel   --- 是用户家目录的样板房

 

01. 此目录中有什么数据,新建的用户家目录中就有什么

 

02. 恢复普通用户提示符信息

    cp -a /etc/skel/.bash* /home/oldboy/ 

02.用户相关的重要配置文件

1. /etc/passwd  ---存储系统用户信息文件

他是Linux中的重要系统文件之一,主要作用是存储系统用户的信息

文件中的每一行表示一个用户信息。仔细观察可以发现他们之间通过“:”号划分成了多个字段,共7段,他们分别定义了用户的不同属性

root

x

0

0

/root

/bin/bash

用户名称

:用户密码

:用户UID

:用户组GID

:用户注释

:用户家目录

:shell解释器

 

用户UID一般是由一个整数表示的,默认范围是0~60000,最大可以到65535

 

centos6中普通用户UID从500开始,包含500。

 

centos7中普通用户UID从1000开始,包含1000

 

默认创建的用户每次创建比上次创建加1

2./etc/shadow    ---存储系统用户密码信息文件(加密)

由于passwd文件必须要被所有的用户读,所以会带来安全隐患shadow文件就是为了解决这个安全隐患而增加的。

3./etc/group --- 记录用户组信息

 

4./etc/gshadow       --- 记录用户组密码信息

 

03.用户相关命令说明:

1.useradd   ---创建用户命令

useradd -u     --- 指定用户uid数值 1000 oldboy  1001 oldgirl

 

useradd -g     --- 指定用户gid数值

groupadd -g 666 oldboy666

useradd -u 666 -g 666 oldboy666

 

useradd -G     --- 指定用户属于哪个附属组

groupadd -g 666 oldboy666

useradd -u 666 -g 666 -G oldboy oldboy666

 

useradd -M    --- 指定创建用户时,不创建家目录

 

useradd -s     --- 指定用户shell登录方式  默认 /bin/bash

 

useradd -c     --- 指定用户注释信息

 

创建虚拟用户: useradd www -M -s /sbin/nologin

 

PS: linux系统有几种shell形式  cat /etc/shells

  

2.usermod   ---修改用户信息命令(这个用户已经存在)

usermod -u     --- 指定用户uid数值 1000 oldboy  1001 oldgirl

 

usermod -g     --- 指定用户gid数值及主要组

                   groupadd -g 666 oldboy666

                   usermod -u 666 -g 666 oldboy666

 

usermod -G     --- 指定用户属于哪个附属组

                   groupadd -g 666 oldboy666

                   usermod -u 666 -g 666 -G oldboy oldboy666

 

usermod -s     --- 指定用户shell登录方式  默认 /bin/bash

 

usermod -c     --- 指定用户注释信息

 

3.userdel   ---删除用户信息

userdel 用户        默认不删除用户的家目录和邮箱

 

userdel -r     --- 彻底删除指定用户相关信息

  

4.groupadd   ---创建用户组信息

groupadd -g    --- 指定用户组gid信息

   

groupdel         ---删除用户组信息(了解)

   

groupmod       ---修改用户组信息(了解)

  

5.passwd   ---修改用户密码信息

PS:root用户可以修改所有用户密码信息

普通用户只能修改自己的密码信息(密码复杂度 数字加字母>=8个字符)

 

免交互创建密码  --stdin(只有root用户可以操作

  echo ******|passwd –stdin 文件名

 

企业生产场景:用户及密码管理

  密码要复杂,12位以上数字 字母 特殊字符

 

企业中:如何管理用户密码

   01. 编写用户密码信息文档

   02. 利用密码管理软件

        本地管理密码软件 -- keepass

        在线管理密码软件      

   03. 域控管理服务器

   04. 动态密码

 

批量添加用户+设置密码和设置随机密码

echo stu{1..10}|xargs -n1|sed -r 's#(.*)#useradd \1 ;echo 123456|passwd --stdin \1#g'|bash

批量创建用户+设置随机密码

[root@oldboyedu ~]# pass=`date +%N|md5sum |cut -c1-8`

[root@oldboyedu ~]# echo $pass

192d2eb2

[root@oldboyedu ~]# pass=$(date +%N|md5sum |cut -c1-8)

[root@oldboyedu ~]# echo $pass

b6daea4a

 

echo stu{1..10}|xargs -n1|sed -r 's#(.*)#useradd \1 ;pass=$(date +%N|md5sum|cut -c1-8);echo $pass \1 >> pass.txt;echo $pass|passwd --stdin \1#g'|bash

 

1.sed拼接

 

把密码存入2.txt

 

2.awk拼接
 
3.for循环
 

 

6.chown    ---修改文件或目录的属主和属组

chown oldgirl.oldgirl /oldboy/oldboy.txt

 

-R 递归修改  注意在相对路径下使用

chown -R oldgirl.oldgirl /oldboy          --- 递归修改目录权限信息

 

04.如何让系统更安全:

1.最小化安装系统和软件

2.保护好root用户  禁止root用户远程登录

修改远程连接端口,禁止使用22端口,除非是不对外访问的服务器(内部测试)

 

更改默认的段口,修改ssh配置文件

vim /etc/ssh/sshd_config

3.分析日志

查看/var/log/secure 安全日志

4.文件系统权限

给系统常用命令加  -i

给系统配置文件加  -a

5.给重要的文件或命令做一个指纹

文件内容的变化==指纹变化    检查文件内容是否被改了

 

给文件创建指纹md5sum + 文件名

 

把指纹记录下来md5sum + 文件名 > police.md5

 

police.md5 是指纹库

 

如何进行对比md5sum -c police.md5 显示OK 则正常,显示FAILED,说明文件被修改,

 

查看是不是自己的人修改了文件,如果是,先关掉警报,然后重新生成指纹。如果不是自己人修改,可使用备份恢复。

6.定时任务:md5sum

定时检查,使用md5命令判断文件是否发生了变化

多个文件做md5指纹

find . -type f -name “*.txt”|xargs md5sum > police.md5

 

05.用户查询管理与切换命令

1.用户查询命令:

id

whoami

w

last       --- 记录系统有哪些用户曾经登录过

lastlog     --- 记录系统中所有用户,登录系统使用情况

 

2.系统相关检查命令

top      --- 检查负载情况/内存/CPU使用情况

每个进程消耗的系统资源情况

us:    用户态信息:时间消耗

sy:    内核态信息:时间消耗

id:    空闲状态: 

 

htop     --- top一个升级版

安装:

yum -y install epel-release

yum -y install htop

 

iotop     --- 检查确认磁盘的IO消耗情况

 

free    

 

iftop      --- 检查网络带宽使用情况

 

netstat(ss) -lntup|grep ssh   --- 检查网络状态信息命令,已知服务,获得对应端口号

-l       列表显示网络服务状态信息

-n       网络中的端口号码以数字形式显示

-t       显示网络的tcp协议服务信息

-u       显示网络的udp洗衣服务信息

-p       网络协议服务进程信息进行显示

 

修改ssh端口号:

vi /etc/ssh/ssh_config

port 端口号

 

lsof  -i:端口号       --- 检查网络服务信息,已知端口号,获得对应服务进程名

  

3.安全操作命令

chattr    ---将文件数据进行上锁命令

+i         ---对文件进行上锁

-i          ---对文件进行解锁

lsattr      ---查看文件锁定状态

 

4.用户切换命令:

su 用户名

 

06.如何让普通用户拥有root用户的能力

方法一:篡权夺位

    su - root  --- 知识root用户密码

 

方法二:修改文件数据权限

    chmod o=rwx -R /oldboy/oldboy01/   --- 递归修改目录权限信息

 

方法三:普通用户提权(sudo)  皇帝 -大宝剑- 平民

第一个历程:配置sudo文件

 

visudo(推荐--配置文件语法检查功能) == vim /etc/sudoers

101 oldboy  ALL=(ALL)   /bin/cat /etc/shadow

101 oldboy  ALL=(ALL)   NOPASSWD: /bin/cat /etc/shadow     ---免密码执行

 

sudo提权操作:

101 oldboy  ALL=(ALL)   NOPASSWD: /bin/cat, /bin/vim, /bin/rm ---批量授权多个命令

101 oldboy  ALL=(ALL)   NOPASSWD: /bin/*  vim       ---批量授权多个命令

 

PS:企业中利用sudo进行授权,需要进行权限分配规划

开发人员:  需要有什么权限  查看权限

 

数据库人员: 需要有什么权限  查看权限  mysql服务命令的权限(mysql mysqladmin mysqldump)

 

运维人员:  需要有什么权限  查看权限  创建数据信息的权限  部分修改编辑权限 部分数据删除

   

第二个历程:利用oldboy进行测试权限

    sudo cat /etc/shadow

   

第三个历程:查看root用户授予的权限信息

    [oldboy@oldboymeng ~]$ sudo -l

    User oldboy may run the following commands on oldboymeng:

    (ALL) NOPASSWD: /bin/cat /etc/shadow

   

    [root@oldboymeng ~]# sudo -v     --- 文件配置语法检查

    >>> /etc/sudoers: syntax error near line 101 <<<

    sudo: parse error in /etc/sudoers near line 101

    sudo: no valid sudoers sources found, quitting

    sudo: unable to initialize policy plugin

   

总结:

    01. 利用命令编辑提权信息  visudo == vim /etc/sudoers

    02. 利用命令查看权限信息  sudo -l

    03. 利用命令检查配置语法  sudo -v

    04. 利用命令清除密码记录  sudo -k

   

方法四:修改文件特殊权限位

    chmod u+s /usr/bin/cat

 

07.sudo 临时让用户获得root权限(尚方宝剑)

sudo -l 查看当前用户的尚方宝剑

  在某些情况下, 以root用户身份访问系统有潜在危险,并可能导致系统和数据损害。

我们可以用setuid程序,例如su和sudo解决

  一旦在使su命令登录root,用户获取了系统的绝对管理权限

  

只有/etc/sudoers配置文件中列出的用户才可以使用该sudo命令,命令在用户的 shell中执行,而不是在rootshell中执行。这意味着root可以完全禁用shell

  

每个使用该sudo命令的成功身份验证都会记录/var/log/messages,并将的用户和发出的命令记录到文件/var/log/secure

 

visudo  给用户授予尚方宝剑  ===vim /etc/sudoers

要赋予某人完全的管理权限:

用visudo命令编辑/etc/sudoers

   用户名 ALL =(ALL)ALL      #允许用户使用sudo执行任何命令

 

赋予部分管理权限:

%users  ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom  #允许users组中的成员执行执行的挂载磁盘命令

 

不需要输入sudo密码执行一组命令

   Cmnd_Alias SYS_BACKUP = /bin/su - root -c ->

          -> /usr/locale/sbin/sys_backup.sh,/mnt/cdrom

   insmsop1 ALL=(ALL)     NOPASSWD: SYS_BACKUP 

 

配置sudo记录密码的时间

sudo将密码保存五分钟的超时时间。在此期间对该命令的任何后续使用都不会提示用户输入密码。添加下面的一行将修改时间

Defaults    timestamp_timeout=value    #value=0,每次sudo都需要输入密码

 

如果某个帐户遭到入侵攻击者可以使以下sudo管理权限打开一个新的shell

sudo /bin/bash  #绕过/etc/sudoers文件中指定的超时时间,并且永远不要求攻击者sudo再次输入密码

  

 

 

第十三章Linux系统权限知识

  Linux文件或目录的基础权限位是由9个字符来控制的,每3位字符为一组。

01.文件/目录的权限说明

r4 w2 x1 -0

文件:

r-:是否可以查看文件内容

w-:是否可以编辑文件内容

x-执行:是否可以直接运行一个文件

 

文件权限总结:

01. root用户可以随时查看/编辑任意文件,没有任何权限,只是不能执行文件 (root用户就是无敌的存在)

 

02. 属主用户想编辑查看文件,最好属主用户拥有读(*)和写

 

03. 文件权限中最重要权限为r权限 

                   拥有r权限,可以结合w权限,正常编辑和查看文件

                   拥有r权限,可以结合x权限,正常执行和查看文件

 

目录:

r-:读取显示目录下面文件名称信息

w-:是否可以在目录中创建删除数据信息

x-执行:是否可以进行目录的切换  

 

目录权限总结:

01. root用户对目录管理是无敌的权限

02. 目录权限中最重要权限为x权限 

     拥有x权限,可以结合r权限,正常查看目录中数据信息

     拥有x权限,可以结合w权限,正常在目录中创建或删除数据

           

默认文件权限644  rw-r--r--  600

默认目录权限755  rwxr-xr-x  700

 

02.数据信息默认权限设置方法

1. 利用命令设置文件的权限

1)chmod  修改数据权限

单独修改指定用户权限

chmod u+rwx     --- 属主添加指定权限

chmod u-rwx      --- 属主删除指定权限

chmod u=rwx     --- 属主直接设置权限   

chmod g+rwx     --- 属组添加指定权限

chmod g-rwx      --- 属组删除指定权限

chmod g=rwx     --- 属组直接设置权限

chmod o+rwx     --- 其他用户添加指定权限

chmod o-rwx      --- 其他用户删除指定权限

chmod o=rwx     --- 其他用户直接设置权限  

 

批量修改所有用户权限

chmod 权限数值  --- 批量修改

chmod a+rwx     --- 所有用户添加指定权限

chmod a-rwx     --- 所有用户删除指定权限

chmod a=rwx     --- 所有用户设置指定权限

 

2)umask  修改数据权限(临时设置)  /etc/profile(永久设置)

文件权限数值==666 - umask数值

    umask数值为偶数: 666 - umask(066)数值   == 600

    umask数值为奇数: 666 - umask(066)       == 644

 

目录权限数值==777 - umask数值

   

需求:

    1)创建的文件权限默认都是600  

       umask 066

    2)创建的目录前线默认都是700

       umask 077

    3)创建的文件权限默认都是633

       chmod

2.利用文件配置参数设置权限

if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]   条件表达式

then                               --- 条件为真

    umask 002  娶白富美

else                                --- 条件为假

    umask 022  娶个女的

fi

 

    >    greater than       gt

    <    less    than     lt

    =    equal           eq

    >=   greater equal      ge

    <=   less equal        le

    <>   no equal         ne

03.系统特殊权限位:

文件属性信息:

12位权限位  第一个三位(属主权限位) 第二个三位(属组权限位) 第三个三位(其他用户权限位)

   

setuid: 让其他用户拥有文件属主的能力    u+s s=4 

[root@oldboymeng ~]# ll /usr/bin/cat

rwxr-xr-x. 1 root root 54160 Oct 31  2018 /usr/bin/cat

[root@oldboymeng ~]# chmod u+s /usr/bin/cat

[root@oldboymeng ~]# ll /usr/bin/cat

rwsr-xr-x. 1 root root 54160 Oct 31  2018 /usr/bin/cat

 

setgid:     让其他用户组拥有文件属组的能力 (了解) g+s s=2

chmod g+s /usr/bin/cat

   

sticky bit:可以创建一个共享目录/共享目录中的数据不能被别的用户修改   o+t t=1

    chmod o+t /share

   

12位权限位:

124 124 124 124   -->  /tmp  1777  /bin/cat 4755  /bin/cat 2755

 

04.实践:修改文件的权限 chmod

方法1 使用 r w x

1: 属主去掉写入权限使用 chmod u-w 1.sh

 

 

2: 属主同时给rwx权限 = 先清除在赋值权限

 

 

3: 属主属组其他用户同时增加x执行权限

 

 

1:使用a对所有用户删除x执行权限 a=ugo

 

 

2:使用a对所有用户增加x执行权限

 

 

3: 直接增加x 权限(注只对x使用此种方法 rw建议使用ugo方式)

 

 

方法2 使用数字进行权限修改(常用)

1: 文件修改为644权限 rw-r--r

 

2:文件修改为755权限 rwx-r-xr-x

 

 

05.属性权限对目录和文件的作用

最终要求(独立解决文件权限问题Permission denied

测试文件的rwx权限

环境准备

两个窗口一个root(权限修改) oldboy(测试) 保证oldboy用户正常使用

脚本中放一个命令

 

 

测试文件的rwx含义

修改2.sh 所有者为oldby

 

 

例1:测试r权限

root执行

 

oldboy测试 除了可读 不可写和执行

 

 

例2: 测试w权限

root修改

 

oldboy测试 可写 不可读不可执行

 

注意:权限的特殊性

是否能修改文件的内容, 需要有r权限配置

只有w 强制保存退出会导致源文件内容清空

root下查看源文件

 

oldboy下写入命令whoami 并强制保存退出

 

root下查看内容 内容被覆盖

 

 

例3: 测试x权限

root修改

 

oldboy测试 什么权限都没有 因为bash不知道文件里有什么内容看不到,所以x也不允许执行

 

x想要执行 则需要r配置 rx

 

 

 

文件权限小结:

r 显示文件内容

w是否能修改文件的内容 需要有r权限配置

只有w的时候 保存退出会导致源文件内容清空

x是否有执行权限 需要有r可读权限配置

 

测试目录的rwx权限

r 是否能查看目录的内容 ls

w 是否能在目录中创建 删除 重命名 文件权限

x 是否有进入目录路的权限cd

 

注意:

1.r 是否能查看目录内容 ls 需要x权限配合

2.w 是否能在目录中创建删除 重命名 文件权限需要x权限配合

3.x 是否能进入到目录权限 cd 是否能修改或查看目录中文件属性

 

Linux下所有的目录大部分都是755权限

 

例1:测试目录的r权限

环境准备:

 

/oldboy/下创建目录和文件

 

 

 

oldboy测试

 

 

2:

 

oldboy测试没有任何权限需要x权限配置

 

修改

 

测试

 

 

问答:

root修改文件权限1.sh

 

在oldboy下是否可删除1.sh

 

 

权限拒绝排查流程

 

odlboy用户下面几个操作报错原因:

[oldboy@lzy oldboy]$ cat /etc/shadow

cat: /etc/shadow: Permission denied

[oldboy@lzy oldboy]$ echo '#' >> /etc/passwd

-bash: /etc/passwd: Permission denied

[oldboy@lzy oldboy]$ touch /etc/passwd.txt

touch: cannot touch ‘/etc/passwd.txt’: Permission denied

[oldboy@lzy oldboy]$ rm -rf /etc/shadow

rm: cannot remove ‘/etc/shadow’: Permission denied

[oldboy@lzy oldboy]$ ls /root/

ls: cannot open directory /root/: Permission denied

 

 

 

06.第四次考

一,添加一个UID是888的虚拟用户mysql写出命令

useradd -u 888 -s /sbin/nologin mysql

 

二,测试环境如下,请完成后面题的要求

[root@oldboyedu ~]# cat datafile

Steve Blenheim:238-923-7366:95 Latham Lane, Easton, PA 83755:11/12/56:20300

Betty Boop:245-836-8357:635 Cutesy Lane, Hollywood, CA 91464:6/23/23:14500

Igor Chevsky:385-375-8395:3567 Populus Place, Caldwell, NJ 23875:6/18/68:23400

Norma Corder:397-857-2735:74 Pine Street, Dearborn, MI 23874:3/28/45:245700

Jennifer Cowan:548-834-2348:583 Laurel Ave., Kingsville, TX 83745:10/1/35:58900

Jon DeLoach:408-253-3122:123 Park St., San Jose, CA 04086:7/25/53:85100

Karen Evich:284-758-2857:23 Edgecliff Place, Lincoln, NB 92086:7/25/53:85100

Karen Evich:284-758-2867:23 Edgecliff Place, Lincoln, NB 92743:11/3/35:58200

Karen Evich:284-758-2867:23 Edgecliff Place, Lincoln, NB 92743:11/3/35:58200

Fred Fardbarkle:674-843-1385:20 Parak Lane, DeLuth, MN 23850:4/12/23:780900

Fred Fardbarkle:674-843-1385:20 Parak Lane, DeLuth, MN 23850:4/12/23:780900

Lori Gortz:327-832-5728:3465 Mirlo Street, Peabody, MA 34756:10/2/65:35200

Paco Gutierrez:835-365-1284:454 Easy Street, Decatur, IL 75732:2/28/53:123500

Ephram Hardy:293-259-5395:235 CarltonLane, Joliet, IL 73858:8/12/20:56700

James Ikeda:834-938-8376:23445 Aster Ave., Allentown, NJ 83745:12/1/38:45000

Barbara Kertz:385-573-8326:832 Ponce Drive, Gary, IN 83756:12/1/46:268500

Lesley Kirstin:408-456-1234:4 Harvard Square, Boston, MA 02133:4/22/62:52600

William Kopf:846-836-2837:6937 Ware Road, Milton, PA 93756:9/21/46:43500

Sir Lancelot:837-835-8257:474 Camelot Boulevard, Bath, WY 28356:5/13/69:24500

Jesse Neal:408-233-8971:45 Rose Terrace, San Francisco, CA 92303:2/3/36:25000

Zippy Pinhead:834-823-8319:2356 Bizarro Ave., Farmount, IL 84357:1/1/67:89500

Arthur Putie:923-835-8745:23 Wimp Lane, Kensington, DL 38758:8/31/69:126000

Popeye Sailor:156-454-3322:945 Bluto Street, Anywhere, USA 29358:3/19/35:22350

Tommy Savage:408-724-0140:1222 Oxbow Court, Sunnyvale, CA 94087:5/19/66:34200

Yukio Takeshida:387-827-1095:13 Uno Lane, Ashville, NC 23556:7/1/29:57000

Vinh Tranh:438-910-7449:8235 Maple Street, Wilmington, VM 29085:9/23/63:68900

 

1.显示包含 San的行

 

 

 

 

2.显示以 J 开头的人名所在的行

 

 

 

 

 

3.显示 700 结尾的行

 

 

 

 

 

4,显示不包 834 的行

 

 

5,显示电话号码的区号为 834 的行

 

 

 

 

 

6,显示姓以 K k 开头的行

 

 

 

 

 

三,创建一个用户 用户UID为666 组属于为test 不创建家目录 并且为其非交互式创建一个秘密123456

 

 

 

useradd -u 666 -M my      usermod -G test my    echo 123456|passwd –stdin my

useradd -u 666 -g test -M bairihong;echo 123456|passwd --stdin bairihong

 

四,统计/var/log下文件的个数。

 

 

五,创建一个bairihong的用户-----并设置密码为123.com-----切换到bairihong用户------然后显示当前用户名。

useradd bairihong       passwd bairihong   123.com     su – bairihong   whoami

 

六,取出网卡ip地址(至少2种方法)

[root@oldboyedu ~]# ip a

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

inet 127.0.0.1/8 scope host lo

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

link/ether 00:16:3e:01:4c:a6 brd ff:ff:ff:ff:ff:ff

inet 172.31.196.105/20 brd 172.31.207.255 scope global eth0

ip a |awk -F “[ /]+” ‘NR==6{print $2}’

ip a |sed -rn ‘s#.*et (.*)/20 br.*#\1#p’                                                                                                                                                  

hostname -I

 

 

 

七,使用awk取出/etc/passwd第一列数据也就是取出用户名。

 

 

八,用awk命令打印文件所有行的第一个字段

awk ‘{print $1}’

 

九,写出目前所学过的系统优化和具体执行的命令 例如selinux如何永久关闭 给出详细信息

 1.  yum源   选择国内的yum源仓库aliyun   /etc/yum.repos.d/  yum源配置文件

 2. 创建普通用户   useradd

 3. 关闭SElinux  (必须关)/etc/selinux/config  SELINUX=disabled

 4. 关闭防火墙  systemctl stop firewalld  systemctl disable firewalld

 5. 字符集,乱码

 6.安装常用工具软件,命令

 7.网络服务,永久和临时关闭systemctl disable NetworkManager

                             systemctl stop NetworkManager

十,用命令行更改 config.txt 文件,把里面所有的“name更改为“address

sed -ni ‘s#name#address#gp’ config.txt

 

十一,显示/etc/passwd文件中其默认shell为/bin/bash的用户

 

 

 

 

十二,显示/etc/passwd文件中其默认shell为非/sbin/nologin的用户

cat /etc/passwd|grep -v ‘/sbin/nologin’

 

 

十三,写出CentOS6的启动流程

1. 按下电源

2. 开机自检(BIOS)

3. MBR引导

4. GRUB菜单

5. 加载内核

6. 运行INIT进程

7. 读取/etc/inittab

8. 读取/etc/rc.sysinit初始化系统

9. 根据运行级别运行/etc/rc数字.d下面的脚本

10.     启动mingetty显示登录界面,运行login

 

十四,翻译下面错误语句

1,no space left on device 磁盘空间不足

No package ip available 没有可用的包ip

3,-bash: LS: command not found 命令没有找到

4.mkdir: cannot create directory ‘aa.txt’: Permission denied

无法创建目录' aa。txt:权限拒绝

5.id: zhangsan: no such user  没有这样的用户

 

 

第十四章 定时任务

01.定时任务概念介绍

什么是定时任务?

固定时间做什么事情

    作用说明:自动备份数据 自动同步时间  自动清空数据

              闹钟 Alarmy  叫醒方式:算法(加减乘除 2位)  动作(5次)  拍照()

    定时任务实现方法:cronie

 

实现方式:

1.系统默认定时任务

/etc/cron.daily     --- 每天执行的任务

logrotate 脚本      --- 实现日志文件切割功能

切割文件过程

01. 将源文件进行重命名

02. 重启程序服务,生成源文件

/etc/cron.hourly    --- 每小时执行的任务

/etc/cron.monthly   --- 每个月执行的任务

/etc/cron.weekly    --- 每周执行的任务

 

2.自定义定时任务

一个命令:

crontab -l  --- 显示定时任务配置信息

crontab -e  --- 编写定时任务配置信息 visudo         

两个文件:

/var/spool/cron/root(oldboy)   --- root用户编写的定时任务配置信息  /etc/sudoers

/var/log/cron                  --- 定时任务日志文件(排错)

/etc/cron.deny                 --- 定义定时任务用户黑名单  (了解)

02.定时任务的应用:

1. 备份 MySQL数据 重要数据日志

cp

mv

tar

2.什么时间备份

业务低谷的时间

游戏公司 5-6点左右

公司的网站 12点左右

电商(京东 淘宝 当当 拼多多 唯品会 聚美)

  

3.使用什么定时任务软件

cron table

crond(crontab) 定时任务软件 (软件包cronie) 

4.为什么要切割

800M左右 直接卡死系统

数据的统计 分析

5.用户的定时任务 如何使用

定时任务的相关命令:

crontab -l:查看定时任务

crontab -e:检测语法 编辑定时任务文件 写入定时任务  ==编辑/var/spool/cron

crontab -r:删除当前用户的所有定时任务,若仅要删除一项,请用-e去编辑

crontab -u: 只有root才能进行这个任务,也即帮其他用户新建/删除crontab工作调度

crontab文件格式:

  *       *       *      *      *       command

minute   hour    day   month   week     command

 

分       时      天     月    星期       命令

 

minute      表示分钟,可以是从0到59之间的任何整数。

hour:                 表示小时,可以是从0到23之间的任何整数。

day:             表示日期,可以是从1到31之间的任何整数。

month:         表示月份,可以是从1到12之间的任何整数。

week:           表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。

user-name:    用户名

command   要执行的命令,可以是系统命令,也可以是自己编写的脚本文件

 

设置crond开机自动启动:

查看服务是否已经运行用 ps -ax | grep cron

chkconfig –list crond           查看crond是否开机自动启动

chkconfig –level 35 cron on            设置crond开机自动启动

 

定时任务格式说明:

每天的上午8点30分,来学校上车(go to school)

分时日月周

30 8 * * *

 

每天晚上12点准时,回家自己开车(go to bed)

*/30 00 * * * go to bed

 

*  代表每一分钟 都执行任务特殊字符:

星号(*):代表每的意思,例如month字段如果是星号,则表示每月都执行该命令操作。

逗号(,):表示分隔时段的意思,例如,“1,3,5,7,9”。

中杠(-):表示一个时间范围,例如“2-6”表示“2,3,4,5,6”。

正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。

 

* * * * *

每天的上午7点到上午11点 每一个小时运行CMD命令

00 07-11 * * *  CMD

##表示整点的时候  没几个小时运行一次的时间

##分钟写上00

笔试题: 要求每日的凌晨执行一条定时任务xxx

* 00 * * * xxxx  错误的

00 00 * * * xxx  正确的

 

00 07-11 * * * pwd

 

每分钟把自己的名字 追加到 /oldboy/oldboy.txt

crontab -e  编辑文件 写入定时任务

crontab -l  查看当前用户的定时任务

 

超过两条命令,都是用脚本 (命令大礼包)

定时任务中-命令或脚本结果(正确及错误)定向到黑洞(>/dev/null 2>&1)或追加到文件中 >>/tmp/oldboy.txt 2>&1

03.定时任务书写要领:

要领1:定时任务要加注释

要领2:定时任务命令或脚本结尾加 &>/dev/null 或 >/dev/null 2>&1 或 1>/dev/null 2>/dev/null

要领3:定时任务执行shell脚本前加/bin/sh,定时任务执行shell脚本不必添加执行权限

要领4:定时任务命令或程序尽量写到脚本里,定时任务只要执行脚本即可

注意操作步骤:

(1)命令行执行

(2)编写脚本

(3)测试脚本

(4)设置定时任务

要领5:生产任务程序不要随意打印输出信息

要领6:定时任务执行的脚本要规范路径 (例如 /server/script)

要领7:配置定时任务要规范操作过程

要领8:定时任务执行特殊的字符需要进行转义,否则会报错,例如 百分号%

 

1.定时任务编写方法:

准备工作:定时任务服务是否开启

[oldboy@oldboymeng ~]$ ps -ef|grep cron

root       6389      1  0 Jun23 ?        00:00:01 /usr/sbin/crond -n

 

编写定时任务:crontab -e

格式信息:

* * * * *  具体做的事情

测验01:每天晚上9:30 上床睡觉  --- 30 21 * * *  上床睡觉

 

测验02:每天早上7:00 起床上学  --- 00 07 * * *  起床上学

 

测验03:每隔1个小时  下课休息  --- * */1 * * *  休息时间

 

测验04:上午10点整 11点整 12点整  都要进行休息     --- 00  10-12 * * *  进行休息

 

测验05:上午10点整休息 12点整  下午  15点整  下午 17点整   --- 00  10,12,15,17 * * * 进行休息

   

* 每          每分钟     每小时     每天  每月  每周

/ 每隔  */1   每隔一分钟 每隔1小时

- 间隔(连续)10-12      10 11 12   10:00 10:01 10:02 11:00 11:01

, 间隔(不连续) 10,12

 

测验06:每月5号 周三 晚上12点整 和女朋友睡觉 

 

PS: 日期和星期不能同时出现

 

2.编写定时任务实践:

1)每隔3分钟,进行时间同步

第一步:利用命令实现时间同步

ntpdate ntp1.aliyun.com

 

第二步:编辑定时任务时间信息

*/3 * * * *  /usr/bin/ntpdate ntp1.aliyun.com

 

第三步:编写定时任务注释说明

  # 完成时间同步

  */3 * * * *  ntpdate ntp1.aliyun.com

 

2)每隔1小时的整点,执行数据备份任务 (cp /etc/hosts /tmp/hosts.bak)

00 */1 * * * cp /etc/hosts /tmp/hosts.bak

* */1 * * * cp /etc/hosts /tmp/hosts.`date +%T`

      

3)每隔1分钟,将/etc/hosts  /etc/rc.local  /server/scripts 进行压缩,生成压缩有时间信息压缩包保存在/tmp目录/oldboy_10:00:00.tar.gz

第一个历程:执行命令测试

cd /

tar zchf /tmp/oldboy_$(date +%H-%M).tar.gz  ./etc/hosts ./etc/rc.local  ./server/scripts/

 

第二个历程:编写脚本信息

#!/bin/bash

cd /

tar zchf /tmp/oldboy_$(date +%H-%M).tar.gz  ./etc/hosts ./etc/rc.local  ./server/scripts/

 

第三个历程:测试执行脚本

/bin/sh /server/scripts/compress.sh

 

第四个历程:编写定时任务

crontab -e

* * * * *  /bin/sh /server/scripts/compress.sh &>/dev/null

 

第五个历程:验证定时任务

01.调整时间

02.缩短时间

 

【企业案例】

如果定时任务规则结尾不加>/dev/null 2>&1或者追加到文件中>>/tmp/oldboy 2>&1,很容易导致硬盘inode空间被占满,从而系统服务不正常。

You have mail in /var/spool/mail/root

/dev/null

1 正确输出

    1>> oldboy.txt

  2>> test.txt

>/dev/null 2>&1

ntpdate ntp1.aliyun.com >/dev/null 2>&1

 

每天凌晨1点把/etc/目录 打包备份/tmp目录下 要求每天的名字不同。

date +%F

tar zcf xx.tar.gz /etc

 

#命令的解析方式

第一种 ``   引号中写命令 例如 `pwd`

第二种 $()  括号中写命令 例如 $(pwd)

[root@oldboyedu scripts]# echo `pwd`

/server/scripts

[root@oldboyedu scripts]# echo $(pwd)

/server/scripts

[root@oldboyedu scripts]# echo `date +%F`

2019-05-29

[root@oldboyedu scripts]# echo $(date +%F)

 

每天创建一个 创建一个以ip地址命名的目录,并把/etc/目录打包压缩放在里面,保持每天的压缩包名字不同

1. 如何取IP ip  ifconfig+三剑客 取出IP

ifconfig |awk 'NR==2{print $2}'

方法1 变量  dir=`ifconfig |awk 'NR==2{print $2}'`

方法2 mkdir `ifconfig |awk 'NR==2{print $2}'`

 

2. 到/进行打包 放在第一步创建好的目录 并且名称每天不一样

cd / && tar zcf /root/$dir/`date +%F`.tar.gz etc

 

time=`date +%F`

dir=`ifconfig|awk 'NR==2{print $2}'`

[ -d /data/$dir ] || mkdir /data/$dir

cd / && tar zcf /data/$dir/$time.tar.gz etc

 

3. x写入定时任务

* * * * * sh /root/tar.sh

 

报错:

[root@oldboyedu ~]# cat /tmp/ip.log

/root/tar.sh: line 2: ifconfig: command not found

/root/tar.sh: line 2: ifconfig: command not found

 

解决方法1

      命令加全路径执行

解决方法2

      在脚本的开头. /etc/profile

 

04.定时任务日志信息:

/var/log/cron

Jun 24 17:44:57 oldboymeng crontab[13105]: (root) BEGIN EDIT (root)

Jun 24 17:45:34 oldboymeng crontab[13105]: (root) REPLACE (root)

Jun 24 17:45:34 oldboymeng crontab[13105]: (root) END EDIT (root)

Jun 24 17:45:40 oldboymeng crontab[13107]: (root) LIST (root)

Jul  7 00:03:01 oldboymeng CROND[13127]:   (root) CMD (ntpdate ntp1.aliyun.com)

     01           02                   03

   

   01. 定时任务进行处理操作的时间

   02. 主机名称信息

   03. 什么用户执行了定时任务

 

05.定时任务编写注意事项:

1)定时任务中命令信息最好使用绝对路径

定时任务执行时识别PATH环境变量信息:/usr/bin:/bin

2)定时任务中命令信息中特殊符号无法直接识别

方法一:特殊符号加 \

方法二:将命令信息写成脚本

3)定时任务编写不正确,会产生错误信息

postfix 邮件服务开启

错误信息存放位置:/var/spool/mail/root     block占用过多,造成磁盘存储资源减少

postfix 邮件服务关闭

错误信息存放位置:/var/spool/postfix/maildrop/  inode占用过多,造成磁盘存储资源减少

解决方式:将邮件服务开启,将产生错误信息追加到黑洞中

* */1 * * * /bin/sh /server/scripts/backup_file.sh &>/dev/null

 

4)执行一些命令时,尽量较少命令信息输出(错误输出/正确输出)

5)完成任务大于两个命令,就需要编写脚本

6)脚本编写是需要有注释信息

7)定时任务执行java程序操作时,需要编写环境变量  !!!

需要在脚本里定时java程序环境变量

JAVAHOME="XXXX"

CLASSPATH="XXXX"

PATH="$PATH:JAVAXXX"

      

./catlina.sh restart

 

 

#变量

PS1 

echo $PS1

 

LANG

echo $LANG

 

RANDOM

echo $RANDOM

 

PATH  变量存放着命令的路径

echo $PATH

永久生效更改/etc/profile

命令的执行过程

1. 输入命令

2. 查找PATH变量中有没有命令

3. 如果有则执行

4. 如果没有 command not found

 

 

第十五章 磁盘管理

1.Linux下配置一条默认网关

route add default gw 10.0.0.254

route del default gw 10.0.0.254

 

2.配置一条静态路由

   ip route add 0/0 via 10.0.0.254

   ip route del 0/0 via 10.0.0.254

 

3.策略路由(在centos下使用vpn拨号的情况下)安全的给test表设置一个默认路由

   ip route add 0/0 via 10.0.0.254 table test

   ip rule add from 10.0.0.1 via table

 

 

查看磁盘分区

fdisk -l

 

磁盘分区

fdisk /dev/sdb

fdisk

     m 帮助

     n add a new partition分区  创建一个新的分区

     p 查看分区 print the partition table

     d 删除 delete a partition

     w 保存退出 write table to disk and exit

 

格式化

mkfs.xfs===mkfs -t xfs

 

查看磁盘分区的UUID

ls -l /dev/disk/by-uuid

blkid /dev/sdb

 

如何开机自动挂载

1. /etc/rc.local  ==== /etc/rc.d/rc.local

 

2. /etc/fstab

UUID=1efb0ec2-67c7-4a90-838       /              xfs           defaults         0                0

UUID=445c8f39-9c6c-4e10-941        /boot           xfs           defaults         0                0

UUID=85441e97-fdf4-4fef           swap          swap          defaults         0                0

设备名/UUID            挂载点     系统文件类型     挂载属性  (开机是否备份)  (开机是否自检磁盘)

 

传统的MBR (Master Boot Record)分区方式,有一个局限:

无法支持超过2TB的硬盘的分区(或单个分区超过2TB )

如果大于2TB就用GPT (Globally Unique Identifier Partition Table Format)分区的概念

GPT分区表(http://baike.baidu.com/item/GPT/15413476)

GPT的分区表很好了解决了传统MBR无法逾越2TB的限制。

但是在Linux系统中,传统的fdisk命令无法支持gpt分区方式。

(在红帽企业版Linux 4 Update 4之后的版本提供了对大于2 terabytes(TB)的磁盘设备的支持)

 

parted的操作都是实时的,

也就是说你执行了一个分区的命令,他就实实在在地分区了,

而不是像fdisk那样,需要执行w命令写入所做的修改, 所以进行parted的测试千万注意不能在生产环境中!

 

 

Parted磁盘分区工具

简述:parted是一个磁盘分区管理工具,

它比fdisk更加灵活,功能也更丰富,同时还支持GUID分区表(GUID Partition Table),

这在IA64平台上管理磁盘时非常有用,它同时支持交互模式和非交互模式. 它除了能够

进行分区的添加,删除等常见操作外,还可以移动分区, 制作文件系统, 调整文件系统大小,

复制文件系统。

 

 

需求:现有一个做了RAID5的硬盘,要求分三个区

硬盘总分区大小:6.2T

/data0           4.8T

/data1           1T

                 4G (无需格式化,作DRBD用)                     

具体操作方法如下:

1、分区

parted /dev/sdb mklabel gpt    

parted /dev/sdb mkpart primary 0 4800000

parted /dev/sdb mkpart primary 4800001 5800001

parted /dev/sdb mkpart primary 5800002 5804098

parted /dev/sdb p

 

[root@drbd01 ~]# parted /dev/sdb p

 

Model: DELL PERC H700 (scsi)

Disk /dev/sdb: 6998GB

Sector size (logical/physical): 512B/512B

Partition Table: gpt

 

Number  Start   End     Size    File system  Name     标志

 1      17.4kB  4800GB  4800GB  ext3         primary     

 2      4800GB  5800GB  1000GB  ext3         primary     

 3      5800GB  5804GB  4097MB               primary  

 

2、格式化

mkfs.ext3 /dev/sdb1

mkfs.ext3 /dev/sdb2

 

3、挂载

 

mount /dev/sdb1   /data0

mount /dev/sdb2   /data1

 

4、查看分区结果

[root@drbd01 ~]# df -h

文件系统              容量  已用 可用 已用% 挂载点

/dev/sda2              20G  2.7G   16G  15% /

/dev/sda5             875G  1.1G  829G   1% /elain

/dev/sdb1             4.3T  1.3G  4.1T   1% /data0

/dev/sdb2            1000G  1.1G  998G   1% /data0

/dev/sda1             494M   17M  452M   4% /boot

 

 

大于2T硬盘parted分区演示:

parted /dev/sdc mklabel gpt                                                     

parted /dev/sdc mkpart primary 0 200

parted /dev/sdc p

parted /dev/sdc mkpart primary 201 400

parted /dev/sdc mkpart primary 401 900

parted /dev/sdc p

 

[root@oldboy ~]# parted /dev/sdc p

 

Model: VMware, VMware Virtual S (scsi)

Disk /dev/sdc: 1074MB

Sector size (logical/physical): 512B/512B

Partition Table: gpt

 

Number  Start   End    Size    File system  Name     Flags

 1      17.4kB  200MB  200MB                primary      

 2      200MB   400MB  200MB                primary      

 3      400MB   402MB  2000kB               primary      

 

Information: Don't forget to update /etc/fstab, if necessary.            

 

[root@oldboy ~]# ll /dev/sdc*

brw-r----- 1 root disk 8, 32 Mar 18 04:41 /dev/sdc

brw-r----- 1 root disk 8, 33 Mar 18 04:41 /dev/sdc1

brw-r----- 1 root disk 8, 34 Mar 18 04:41 /dev/sdc2

brw-r----- 1 root disk 8, 35 Mar 18 04:41 /dev/sdc3

 

mkfs.ext3 /dev/sdc1

tune2fs -c -1 /dev/sdc1

====================================================

parted具体操作方法如下:

 

GPT分区全名为Globally Unique Identifier Partition Table Format,是指全局唯一标示磁盘分区表格式。

由于MBR分区表的最大可寻址的存储空间只有2Tb(232×512字节)。因此,在大硬盘出现的现在,MBR分区方式逐渐被GUID分区表取代。

 

1、非交互分区手动输入提示实例

parted /dev/sdb mklabel gpt    

parted /dev/sdb mkpart primary 0 500

parted /dev/sdb mkpart primary 501 1000

parted /dev/sdb p

mkfs -t ext4 /dev/sdb1 /dev/sdb2

mount /dev/sdb2 /tmp

 

2、非交互分区忽略提示实例:

parted /dev/sdb  mklabel gpt yes             

parted /dev/sdb  mkpart primary ext4 0 100  Ignore

parted /dev/sdb  mkpart primary linux-swap 101 8192 Ignore

parted /dev/sdb  mkpart logical ext4 8193 100GB  Ignore

parted /dev/sdb  mkpart logical ext4 101GB 3000GB Ignore 

parted /dev/sdb  quit

 

parted与fdisk区别:

1、支持gpt分区表,可以对大于2T的磁盘分区。

2、分区直接生效,不需要使用命令写入磁盘,最好partprobe /dev/sdb。

3、格式化挂载等和fdisk无区别。

 

更改GPT前的格式:

[root@oldboy /]# parted /dev/sdb p

Model: VMware, VMware Virtual S (scsi)

Disk /dev/sdb: 107MB

Sector size (logical/physical): 512B/512B

Partition Table: msdos

更改后:

[root@oldboy /]# parted /dev/sdb p

Model: VMware, VMware Virtual S (scsi)

Disk /dev/sdb: 107MB

Sector size (logical/physical): 512B/512B

Partition Table: gpt

 

 

partprobe

 

实验:100M盘(一键完成)

parted /dev/sdb mklabel gpt Yes

parted /dev/sdb mkpart primary 0 10 Ignore

parted /dev/sdb mkpart primary linux-swap 11 21 Ignore

parted /dev/sdb mkpart logical ext4 22 32 Ignore

parted /dev/sdb p

 

更改分区格式:(一键完成)推荐

#parted /dev/sdb mklabel gpt Yes

#parted /dev/sdb mkpart primary 0 10 Ignore

#parted /dev/sdb mkpart primary 11 21 Ignore

#parted /dev/sdb mkpart logical 22 32 Ignore

#parted /dev/sdb p

 

parted /dev/sdb mklabel msdos Yes

parted /dev/sdb mkpart primary 0 10 Ignore

parted /dev/sdb mkpart primary 11 21 Ignore

parted /dev/sdb mkpart extended 22 100 Ignore

parted /dev/sdb mkpart logical 22 32 Ignore

parted /dev/sdb p

 

 

parted非交互式创建分区

 

 

 

创建200M分区

dd if=/dev/zero of=/tmp/200m bs=1M      count=200

 

 

 

 

挂载到swap

 

 

激活swap

 

 

01.磁盘管理体系结构

第一层:物理结构信息  接口 内部和外部结构

第二层:逻辑结构信息  RAID LVM

第三层:磁盘分区概念  分区命令 分区原则

第四层:创建文件系统  磁盘格式化

第五层:磁盘管理应用  挂载操作

 

1.物理结构信息

外部结构:磁盘接口  转速信息(10K 15K) 盘片 主轴  机械臂 磁头

 

内部结构:磁道 Track(多个同心圆)扇区 sectors(存储数据最小单位-512字节)柱面 Cylinder(多个盘片按照柱面读取数据)

 

算出磁盘大小:

方法一:一个扇区大小*扇区总的数量

方法二:柱面数量*  单元块大小(1个柱面大小)

方法三:扇区大小*一个磁道扇区数量*一个盘片磁道数*磁头

 

磁盘读取数据原理:

    需要在一定时期,进行磁盘维护

 

2.磁盘逻辑信息

RAID: 速度更快  更安全  容量更大

RAID5:  特点:即安全 性能又好  只能坏一块硬盘,少一块盘容量

RAID10: 特点:即安全 性能又好  建议只能坏一块硬盘,少一半容量

RAID01:特点:即安全 性能又好  建议只能坏一块硬盘,少一半容量

 

如何配置RAID:

https://jingyan.baidu.com/article/da1091fb60acb0027849d6ce.html  IBM阵列配置

                                      

LVM:逻辑卷管理  弹性扩容和缩容磁盘  缺陷:存储效率较低

 

配置方法:???

01. 分区创建PE信息

02. 创建VG 将PE加入到VG

03. 创建LV

04. 进行挂载

 

3.磁盘分区方法

准备知识:MBR 引导信息 + 分区表信息 = 512字节

主分区:4个   1-4

扩展分区:1个 

逻辑分区:n个 5-x

 

第一种方式:磁盘总容量小于2T  fdisk

准备环境:添加一块磁盘 --- 查看fdisk -l

分区操作过程:

第一个历程:进行分区

fdisk /dev/sdb

 

第二个历程:设置分区方案

  d   delete a partition

    删除分区

  g   create a new empty GPT partition table

    创建一个新的空的GPT分区表(对大于2T磁盘进行分区)

  l   list known partition types

    列出已知的分区类型

  m   print this menu

  n   add a new partition *****

    创建分区

  o   create a new empty DOS partition table(对小于2T磁盘进行分区)

    创建一个新的空的Dos分区表

  p   print the partition table *****

    显示分区信息

  q   quit without saving changes

    不保存退出

  t   change a partition's system id

    显示分区系统编号

  u   change display/entry units

  w   write table to disk and exit ******

    保存退出

 

  输入n 创建 p主分区 e扩展分区

      分区开始不用设置

         分区结束需要设置:+NK +NM +NG

  输入p 进行查看

 

第三个历程:分区确认后进行保存

w    保存分区表信息

 

第二种方式:磁盘总容量大于2T  parted   

准备环境:添加一块磁盘 --- 查看fdisk -l

分区指令信息:

mklabel   (创建分区表 MRB-msdos/gpt)             

          create a new disklabel (partition table)    mklabel gpt/msdos

mkpart    (创建新的分区)

              make a partition                        mkpart primary 0 20M

print         (显示分区表信息)

              display the partition table

rm           (删除指定分区信息)

              delete partition NUMBER

quit          (退出分区界面)

              exit program

 

分区操作过程:

第一步:修改分区表

mklabel gpt

 

第二步:创建分区

    mkpart primary 0 20M

 

第三步骤:退出格式化

    mkfs.xfs /dev/sdd1

 

总结:

GPT分区表:可以分大于2T的磁盘

DOS分区表:可以分小于2T的磁盘

 

4.磁盘格式化操作

格式化==创建文件系统

文件系统:组织文件数据存储的方式

linux:ext3/ext4  xfs   存储数据效率/大容量磁盘效率较高

    nfs                网络文件系统 通过网络存储数据

       mfs fastdfs         分布式存储系统

 

格式化命令:

mkfs -t xfs /dev/sdb1

 

02.磁盘异常问题:

1. 挂载上无法卸载

a 没有退出挂载目录

b 挂载点目录中有数据被进程调用

c 其他情况

 

解决方式:强制卸载

umount -lf /mnt

    -l lazy(懒惰)   --- 不用退出挂载点目录进行卸载

    -f force(强制)  --- 强制进行卸载

2. 整个系统 /目录挂载点出现只读情况

a 文件系统损坏了

b 磁盘出现坏道

 

解决方法:

mount -o remount rw  /         

3. 磁盘空间慢如何解决 write error: No space left on device

inode不够用

block不够用 

 

如何快速清空目录中的数据:

rsync命令

4. 如何删除数据信息

i_link数为0: 确保文件硬链接数为0  

i_count数为0:调用文件的进程数为0

5. 磁盘分区后,无法正常格式化

方法一:重启系统

方法二:利用命令让内核识别硬盘信息

   partprobe /dev/sdd

 

03.如何实现磁盘自动挂载(开机自动挂载)

方法一:/etc/rc.local(执行权限)

    条件挂载命令

    echo 'mount /dev/sdc1 /oldboy01' >>/etc/rc.local 

方法二:/etc/fstab

文件格式信息:

UUID=f06d6457-4eb0-4dc1-a790-feff4873fc3e swap    swap    defaults        0 0

/dev/cdrom                             /mnt    iso9660   defaults        0 0

    01                               02          03        04         05 06

 

01:存储设备文件信息 UUID信息获取

02:存储设备挂载点目录

03:挂载存储设备文件系统类型  centos7-xfs centos6-ext3/ext4

04:挂载参数信息  默认参数信息:rw, suid, dev, exec, auto, nouser, and async

05:是否自动备份磁盘信息  lost+found

06:是否自动检查磁盘信息  fsck修复检查磁盘文件系统

 

默认挂载参数:

rw:                让挂载点目录具有可读可写权限             相反ro

suid(setuid):    让挂载点目录中的文件特殊权限位生效        相反nosuid  安全

dev:             让挂载点目录存储设备文件保持属性不变

exec:             让挂载点目录中的执行文件可以执行         相反noexec

auto:              让挂载点目录实现快速自动挂载             相反noauto

nouser:            让普通用户是否可以卸载和挂载目录         相反user    了解

async:             数据异步存储概念???                  相反sync同步存储???

man mounts

 

04.实现调整swap空间增大

服务比较消耗内存:java语言程序---tomcat

消耗内存资源:(测试)

  dd if=/dev/zero of=/dev/null bs=1500M count=100

 

第一个历程:将磁盘中取出一部分空间用于扩充swap分区

    dd if=/dev/zero of=/tmp/1G  bs=10M  count=100

   

第二个历程:将取出文件空间用于swap使用

    mkswap /tmp/1G

   

第三个历程:加载swap标识文件,增加swap分区大小

    swapon  /tmp/1G   -- 增加

    swapoff /tmp/1G       -- 还原

 

第十七章 命令汇总

01.基础命令:

常用的基本命令:

1) mkdir                                            创建目录信息

          -p                                           可以创建多级目录

         

2) touch                                            创建文件

   

3) ls                                               列表查看目录或文件信息

          ls -d                                          查看目录是否存在

          ls -l                                           显示文件或目录的详细属性信息

          ls -h                                          以人类可读方式显示信息

          ls -a                                          显示隐藏文件数据信息

          ls -r                                           反向排序信息

          ls -rt                                          按照文件修改时间反向排序

          ls -S                                          按照文件大小进行排序

          ls -i                                           查看文件inode号码信息

         

4) pwd                                            显示当前所在路径(绝对路径)

   

5) cat                                              直接查看文件内容信息

          zcat                                          直接查看压缩包中的文件信息

   

6) vi                                               直接编辑修改文件内容

          vi -r                                           恢复临时文件中内容

   

7) echo                                            将信息输出到屏幕上

   

8) cd                                              切换目录路径

          cd ..

          cd -

          cd ~

   

9) cp                                              复制备份数据

          cp -r                                          复制备份目录

          cp -a                                         复制备份目录

          cp -t                                          指定复制的目标路径

         

10)mv                                             移动备份数据(剪切)

          mv -t                                         指定移动的目标路径

   

11)tree                                             显示目录结构(树形结构显示)

   

12)rm                                              删除系统数据信息

          -f                                            强制删除数据

          -r                                            递归删除数据(删除目录)

         

13)shutdown                                        关机重启命令

          -h                                           关机操作

          -r                                            重启操作

   

14)mount                                           挂载命令

          -o remout                                     重新挂载

          -o rw/ro                                     指定挂载点目录权限为读写/只读

   

15)umount                                          卸载命令

          -lf                                            强制卸载

   

16)df                                               查看磁盘挂载信息/磁盘使用情况

          -h                                           以人类可读方式查看信息

         

17)export                                           用于修改设置环境变量

   

18)source/.                                          立即加载文件配置信息

   

19) alias                                              查看别名设置和修改别名设置

   

20)unalias                                           取消别名功能

   

21)hostname                                        显示主机名称和修改主机名称

          hostname -I                                 显示网卡地址信息

         

22)systemctl                                         用于启动/停止/重启服务程序

          systemctl start/stop

          systemctl status/is-active/is-enabled

   

23)hostnamectl                                      永久和临时修改主机名称

   

24)ifup/ifdown                                       控制指定网卡启动或停止

   

25)tail                                             查看文件结尾信息

          tail -5                                        查看倒数几行(默认倒数10行)

          tail -f/-F                                       追踪实时监控文件的信息变化

         

26)head                                          查看文件头部信息

          head -5                                     查看头部几行(默认开头10行)

         

27)rpm                                           管理软件包命令

          -ivh                                         安装软件参数

          -ql                                         查看软件安装的数据信息路径

          -qa                                        查看软件是否安装成功

          -qf                                         查看软件命令属于哪个软件大礼包

          -qc                                         查看软件配置文件路径信息

          rpm -e tree --nodeps   ---              卸载指定软件

         

         

28)uniq                                           去重命令

          uniq -c                                      将重复信息进行统计

         

29)wc                                            统计字符信息

          wc -l                                        统计行数

         

30)w                                             显示系统连接用户信息/显示负载信息

   

31)free                                            显示内存信息

          free -h                                       人类可读显示信息

         

32)lscpu                                          显示系统CPU硬件信息

   

33)uname                                        显示系统信息

          -a                                          显示系统详细信息

         

34)useradd                                        创建用户

   

   

35)passwd                                        设置用户密码

          --stdin                                       免交互设置密码

         

36)su                                            切换用户

          su -

         

37)whoami                                        显示当前用户信息

   

38)yum                                          用于安装系统软件

          yum install -y                         安装指定软件

          yum groupinstall -y xxx                 安装指定包组

          yum grouplist                        显示可以安装包组信息

          yum list                            显示可以安装软件包信息

          yum repolist                         显示使用的yum源信息(base epel)

          yum provides                       显示指定命令属于哪个软件大礼包

          yum remove                       移除(卸载)指定软件程序(建议不要使用,容易卸载依赖软件)

         

39)setenforce                             临时修改selinux状态

          getenforce                          查看selinux状态信息

         

40)ps -ef                                 查看系统进程信息

   

41)kill                                    杀死进程信息

          kill -9                               强制杀死指定进程(慎用)

   

42)history                                调取历史命令记录信息

history -w                             将历史命令保存到~/.bash_history文件中

      history -c                              清空历史记录

   

43) less/more                               逐行和逐页查看文件信息

   

44)tr                                    替换文件信息(显示时替换)  sed vim >   

   

45)whereis                               查看命令所在路径

   

46)locate/updatedb                         查看系统文件所在路径

   

47)file                                   查看文件类型

   

48)xargs                                 实现对信息进行分组

      xargs -n2 <oldboy.txt

      find|xargs -i cp {} 

   

49)tar                                   压缩数据命令

          zcvf                               对数据进行压缩

          tf                                 对数据压缩包进行查看

          xf                                对数据包进行解压

          h                                压缩软连接文件时,将其指向源文件进行压缩

          -C                               指定解压的路径

         

50)id                                    查看用户uid gid 以及所属组信息

   

51)date                                 修改时间信息和显示时间

          date "+%F"

          date "+%F" -d "-1 day"

          date -s "20201010"

         

52) ntpdate                                同步时间命令

          ntpdate ntp1.aliyun.com

          ntpdate ntp2.aliyun.com

         

53) stat                                   显示数据详细属性信息

          stat oldboy.txt

         

54)ln                                    创建链接命令

          ln -s                               创建软连接

         

55)crontab                               编写定时任务

          crontab -e             

          crontab -l                           查看定时任务信息

         

56)ping                                 测试网络连通性

          -c                                指定ping多少个包

          -q                                只显示ping包结果

          -f                                 极速ping

     

特殊的高级命令:

1) grep                                           过滤筛选文件信息命令

          grep -i                                       忽略大小写进行过滤

          grep -A 2                                    查看指定行的后几行内容

          grep -B 2                                    查看指定行的前几行内容

          grep -C 2                                    查看指定行的前后几行内容

          grep -c                                      统计显示的行数信息

         

          zgrep                                       直接过滤压缩包中的数据信息

          zgrep -a

         

2) sed                                           对文件中行进行处理/替换修改文件内容 

          -n                                          取消默认输出

          -i                                           真正修改替换文件内容

          p                                          输出指定信息

          s###g                                      替换指定信息

         

3) awk

   

4) find                                            查找系统文件数据

          -type                                       根据文件类型查找

          -name                                      根据文件名称查找

          -iname                                      根据文件名称忽略大小写进行查找

          -size                                        根据文件大小查找数据

          -perm                                      根据文件权限

          -mtime                                      根据文件(修改)时间查找数据

          -mmin                                      根据文件创建生成分钟

          -exec                                       将查找到的数据进行处理

          -delete                                      将查找到的数据进行直接删除

          -path                                       指定文件路径信息

          -prune                                      修剪参数(排除)

          -o                                          多个条件或者关系

          -a                                          多个条件并且关系(默认)

          -not                                        指定条件进行取反

          -print                                        取消排除的目录显示

          -inum                                       根据文件inode号码进行过滤数据

 

02. 快捷方式:

    tab                  对命令信息或者路径文件信息进行补全操作

    ctrl+l               清屏操作

    ctrl+a              将光标快速移动到命令行的行首

    ctrl+e              将光标快速移动到命令行的行尾

    ctrl+← →       将光标按照单词快速移动

    ctrl+c             cancel(取消)快速终止或取消命令操作

    esc+.             调用上一个命令最后输入的参数信息

    ctrl+d              快速退出当前用户登录状态

    ctrl+u              将光标所在位置之前的内容进行删除(剪切)

    ctrl+k              将光标所在位置之后的内容进行删除(剪切)

    ctrl+w             将光标之前的一个连续字符串信息进行删除(剪切)

    ctrl+y              将剪切的内容进行粘贴

    ctrl+s              将xshell界面进行了锁定

    ctrl+q              进行解锁

    ctrl+r              快速检索历史命令(条件:需要有历史命令记录)

    ctrl+z              中断(暂停)程序脚本的运行  --- 死循环 ???

 

03. 系统符号:

    ~        表示家目录信息

    ..        表示上一级目录

    -        表示上一次所在的目录信息

    >        表示标准输出重定向

    >>      表示标准输出追加重定向

    <        表示标准输入重定向

    <<      表示标准追加输入重定向符号

    *        表示匹配所有内容  通配符号

    .         隐藏文件

                表示当前目录

    &&      表示前一个命令执行成功,再执行后一个命令

    $        调用变量信息

                提示登录的用户为普通用户

    |         管道符号  将前一个命令执行的结果,交给管道后面的命令进行处理

    $?       调取上一个命令返回数值,数值为0表示执行正确 数值不为0表示执行失败

    {..}      生成序列信息  通配符号

    ``        将引号中的命令先执行,将执行结果交给引号外面的命令进行处理

    !         在find命令使用时,表示进行取反排除

 

04. 报错总结:

 

1) -bash: tree: command not found    命令没有找到

2) mkdir: cannot create directory ‘oldboy’: File exists  不能创建oldboy目录,目录已经存在

3) omitting directory ‘oldboy01/’    无法进行目录直接复制

4) oldboy.txt: Permission denied     操作权限阻止

 

05. 操作习惯:

 

1)操作完检查~

 

 

 

 

 

 

第十七章 基础课程知识回顾

基础部分回顾:

1) 服务器硬件做成介绍

* 服务器硬件组成 CPU 内存 硬盘 风扇 电源

* 服务器硬件详细说明 

         CPU  核数 路数 

         内存 缓冲 缓存

* 企业数据存储案例: 高并发存储/保证数据安全性

2) 服务器系统安装

* 系统的组成: 鸡蛋 (内核 shell解释器 外围软件程序)

* 系统的历史: GNU GPL

* 系统的安装: 虚拟主机如何配置  centos7系统安装(网络配置-网卡名称设置 磁盘分区-3种 软件安装--最小化安装 1236)

3) 服务器网络配置修改

* 如何配置网络信息 (修改网卡文件 nmtui图形化方式进行修改--NetworkManager需要开启)

* 利用xshell实现远程连接 (xshell软件如何初始化配置) secureCRT

* 实现远程连接(远程连接异常排查三步曲)     

4) 服务器系统管理命令说明

* 引入系统操作命令 cp mv rm ls pwd mkdir touch ...

    

5) 系统目录结构说明

* 磁盘挂载概念 mount

* 详细的目录结构说明 

/etc

/usr/local

/var(messages sercure cron) 

/proc

    

6) 系统优化操作

     省略

7) 文件属性说明

 [root@oldboy-xiaodao.com.cn ~]# ls -lih /etc/

total 1.2M

101115776 drwxr-xr-x.  3 root root  101 Dec 29 16:33 abrt

34011044 -rw-r--r--.  3 root root   16 Dec 29 16:35 adjtime

33596583 -rw-r--r--.  1 root root 1.5K Jun  7  2013 aliases

33554501 -rw-r--r--.  1 root root  12K Dec 29 16:42 aliases.db

33583455 drwxr-xr-x.  2 root root  236 Dec 29 16:33 alternatives

34030593 -rw-------.  1 root root  541 Apr 11  2018 anacrontab

33880205 -rw-r--r--.  1 root root   55 Apr 11  2018 asound.conf

101198241 drwxr-x---.  3 root root   43 Dec 29 16:33 audisp

   

8) 正则表达式说明

& ^ . ? + {} []

系统特殊符号分类

系统通配符号分类 find -name "*oldboy"  (find命令常见用法)

系统正则符号分类(基础正则-grep sed awk 扩展正则- egrep/grep -E sed -r awk)    

 

9) 三剑客命令说明 awk sed grep过滤 -c(统计行数)

* 命令的执行原理 

* 命令的语法格式 

01.找出满足条件一行信息 

02.对一行信息进行处理

* 命令应用说明   

增 删 改 查

* awk命令还有统计功能

awk运算方法(累加运算 i=i+1/i++  求和运算 i=i+$n/i+=$n)

    

10) 用户管理知识说明

* 用户管理的相关命令

   useradd  userdel  usermod passwd

   groupadd groupdel groupmod  

* 文件权限说明

   普通文件权限有什么  r w x

   目录文件权限有什么  r w x             

* 特殊权限说明(普通用户如何获得root权限)

   1) su -

   2) sudo

   3) 设置特殊权限位 setuid setgid 粘滞位           

* 文件或目录的默认权限

文件 644  目录 755

umask命令生成的数值, 进行运算获得默认文件(666)或目录(777)权限数值

     

11) 定时任务

* 一个文件(/var/spool/cron/root)和一个命令crontab 

* 配置文件编写方法

* 1-5 * * *  定时操作任务命令

          分时日月周  需要执行任务

* 每  */n 每隔  1-5 时间连续范围  1,3,5 时间不连续范围

* 掌握定时任务的编写规范

* 掌握定时任务编写的注意事项

 

12) 磁盘管理概念

按照层次结构进行掌握

第一个层次  磁盘的结构 (外部结构 内部结构)

第二个层次  RAID(哪些级别) LVM

第三个层次  磁盘分区方法 (fdisk--2T以下磁盘MBR  parted--2T以上磁盘GPT)

第四个层次  磁盘格式化(创建文件系统)    

第五个层次  磁盘挂载应用(如何实现自动挂载-2种)   

      

企业案例: 服务器种java程序耗费内存比较多的时候, 如何进行临时调整

解决方法: 临时增加swap分区空间大小  dd   /dev/zero(/dev/null)

 

 

 

 

第十七章 基础阶段总复习笔记

=============================================

01. 基础阶段--服务器硬件知识

1)云主机如何进行操作配置 ECS RDS

2)记录一些硬件服务器品牌

3)服务器硬件组成部分

    CPU(内核 几路)  内存(缓冲 缓存 进程 守护进程) 硬盘(阵列 RAID 0 1 5 10 01)

    研究扩展:线程 协程

4)如何记录学习笔记

    文本信息:标题(多级列表) 正文(中文字体-微软雅黑 英文信息-Arial 3级正文) 注释(表格注释 提示信息)

    表格信息:表格模板修改

    图片信息:格式-修改列宽/边框/阴影

    代码信息:样式-代码

 

02. 基础阶段--操作系统介绍说明

1)系统发展史中 GNU GPL

2)系统发行版本 Centos7/6 Ubuntu debian

3)系统虚拟化   vmware workerstaion  虚拟主机(虚拟硬件)快照 克隆

    问题:网络(NAT 桥接 仅主机) 服务问题(services.msc)虚拟主机数据有问题

4)安装操作系统

  1.系统网卡名称需要修改

  2.配置网卡信息/磁盘分区/指定软件包(最小化 1236)    

03. 基础阶段--远程连接管理系统

1)xshell 软件如何进行配置

 

2)xshell 软件远程连接排错 (大保健 - 三步曲)

       确认链路是否正常

       确认链路是否阻塞(安全策略开启)

       确认服务是否开启

 

3)虚拟主机三种网络模式

NAT: 外网  小孩(虚拟主机网卡地址10.0.0.201)---> 大人(本地网卡地址 192.168.20.100)

         NAT 网络地址转换技术

                 优点:不容易造成地址冲突

                 缺点:不容易让其他物理主机访问

桥接:外网  成人(虚拟主机网卡地址192.168.20.2xx) == 大人(本地网卡地址 192.168.20.100)

缺点:不容易造成地址冲突

          优点:容易让其他物理主机访问

仅主机:不能访问外网  

          优点:安全性高

          缺点:不能访问外网    能访问外网(操作系统路由信息)       

    

 

04. 基础阶段--系统管理操作命令

1) 关闭和重启命令

2) 帮助命令        man

3) 系统基础操作命令   cd pwd mkdir touch ls cp mv rm echo cat less more tail head

4) 如何编辑文件    vim/vi    i  esc :wq!/q!  

                    命令模式--编辑模式转换---命令模式

                  命令模式--底行模式转换---命令模式

                    

05. 基础阶段--系统目录结构说明

1)什么是系统的挂载

2)系统常用重要目录结构  

/etc     --- 配置文件保存的路径 

/var     --- 日志保存的目录

/home    --- 普通用户家目录

/root    --- root管理员家目录

/tmp     --- 临时目录    

/mnt         --- 临时挂载目录

/proc    --- 存储数据到内存中

/bin     --- 命令文件保存路径

/sbin    --- 命令文件保存路径

3) 系统环境变量  /etc/profile  export PATH="$PATH:/XXX"

PS1 PATH LANG

别名功能         

 

    

06. 基础阶段--系统基础优化说明

1)掌握命令提示符优化

2)掌握yum源优化  

base:

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

或者

curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

 

epel:

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

      

基础yum软件下载:

yum install -y vim wget tree lrzsz net-tools bash-completion

    vim              vi编辑的升级版软件

    wget             下载软件命令

    tree             列出目录结构信息

    lrzsz                 下载上传数据信息  linux -- windows

    net-tools          兼容centos6网络命令功能

    bash-completion  对centos7部分命令参数进行自动补全 systemctl

 

3) 系统安全优化

将防火墙服务关闭:  临时关闭  永久关闭

将selinux服务关闭: 临时关闭  永久关闭

4)系统字符集优化

临时 永久  localectl set-locale LANG="xxx"

    

问题:批量创建用户stu01..10,每个用户有随机密码信息

第一种方法:

第一步:用RANDOM生成随机数

    echo $RANDOM

    随机数生成方法:https://www.cnblogs.com/Mr-Ding/p/9427968.html

   

第二步:创建多个用户

    seq -w 10|sed -r 's#(.*)#useradd oldboy\1#g'

   

第三步:批量创建用户/设置密码信息(用RANDOM随机生成密码)

# seq -w 10|sed -r 's#(.*)#useradd oldboy\1;User_Pass=$RANDOM;echo "$User_Pass"|passwd --stdin oldboy\1;echo $User_Pass oldboy\1 >>/tmp/user_info.txt#g'|bash

 

useradd oldboy01;User_Pass=$RANDOM;echo "$User_Pass"|passwd --stdin oldboy01;echo $User_Pass oldboy01 >>/tmp/user_info.txt

useradd oldboy02;User_Pass=$RANDOM;echo "$User_Pass"|passwd --stdin oldboy02;echo $User_Pass oldboy02 >>/tmp/user_info.txt

useradd oldboy03;User_Pass=$RANDOM;echo "$User_Pass"|passwd --stdin oldboy03;echo $User_Pass oldboy03 >>/tmp/user_info.txt

useradd oldboy04;User_Pass=$RANDOM;echo "$User_Pass"|passwd --stdin oldboy04;echo $User_Pass oldboy04 >>/tmp/user_info.txt

useradd oldboy05;User_Pass=$RANDOM;echo "$User_Pass"|passwd --stdin oldboy05;echo $User_Pass oldboy05 >>/tmp/user_info.txt

useradd oldboy06;User_Pass=$RANDOM;echo "$User_Pass"|passwd --stdin oldboy06;echo $User_Pass oldboy06 >>/tmp/user_info.txt

useradd oldboy07;User_Pass=$RANDOM;echo "$User_Pass"|passwd --stdin oldboy07;echo $User_Pass oldboy07 >>/tmp/user_info.txt

useradd oldboy08;User_Pass=$RANDOM;echo "$User_Pass"|passwd --stdin oldboy08;echo $User_Pass oldboy08 >>/tmp/user_info.txt

useradd oldboy09;User_Pass=$RANDOM;echo "$User_Pass"|passwd --stdin oldboy09;echo $User_Pass oldboy09 >>/tmp/user_info.txt

useradd oldboy10;User_Pass=$RANDOM;echo "$User_Pass"|passwd --stdin oldboy10;echo $User_Pass oldboy10 >>/tmp/user_info.txt

   

#!/bin/bash

for user  in {01..10}

do

     User_Pass=6678

   useradd oldboy02

     echo "6678"|passwd --stdin oldboy02

   echo 6678 oldboy02 >>/tmp/user_info.txt   4565  oldboy01

done                                        6678  oldboy02

 

第二种方法:

第一步:用MD5生成随机数

    pass=$(date +%N|md5sum |cut -c1-8);echo $pass \1

    随机数生成方法:https://www.cnblogs.com/Mr-Ding/p/9427968.html

   

第二步:创建多个用户

    echo stu{1..10}|xargs -n1|sed -r 's#(.*)#useradd \1#g’

 

第三步:批量创建用户/设置密码信息(用MD5随机生成密码)

echo stu{1..10}|xargs -n1|sed -r 's#(.*)#useradd \1;pass=$(date +%N|md5sum |cut -c1-8);echo $pass \1 >> pass.txt;echo $pass|passwd --stdin \1#g'|bash

 

 

 

 

07. 基础阶段--系统文件属性说明

1)系统文件属性:

       inode  文件类型权限  硬链接数 所属用户 所属组  大小  时间   ==8

2)文件类型:

       类型分类:d - l

       文件命令:搜索文件  find 寻找范围  条件

                 如何将/oldboy 有权限为644文件,移动到/tmp (至少三种方法)

                 压缩文件  tar (压缩数据 查看压缩包 解压) unzip/zip

3)文件权限:

       rwx -- 用户(属主 属组 其他用户) -- 文件(r)

       rwx -- 用户(属主 属组 其他用户) -- 目录(x)

      

4)属主 属组

       用户分类:管理用户 虚拟用户 普通用户

       用户编号:id uid gid

       用户和组的关系:1 v 1 1vn nvn n v 1

      

5) inode / block

       概念:

       如何诞生:

       如何查看:

   

6) 硬链接/软连接  

       概念: inode号   01  110 110

       如何配置 ln

       特点:

       不同的分区不能创建硬链接 

       /dev/sda3(/)   --- /oldboy/oldboy.txt      源     100 oldgirl.txt

       /dev/sdb2(/mnt)--- /oldboy/oldboy_hard.txt 目标   100 oldboy.txt

       以上方法创建硬链接会失败

      

       nginx --- /application/nginx-1.17.0/sbin/nginx  软连接 /application/nginx

       脚本:cmd_path="/application/nginx/sbin/"    

      

7)文件时间信息

       3个时间  mtime ctime  atime   date (修改时间 显示时间) ntpdate 时间同步

 

 

08. 基础阶段--系统正则表达式

基础符号信息:引号系列  路径符号 重定向符号 逻辑符号

通配符号信息:*  {} cp /etc/oldboy.txt{,.bak}

正则符号信息:grep sed awk

 

基础正则;^ $ ^$ . * .* [] [^] \ grep sed awk 

 

扩展正则:+ ? () {} |            egrep sed -r awk

 

测验题:如何取出IP地址 (grep sed awk)

 

09. 基础阶段--三剑客命令 sed /awk)

sed                          

1)概念作用

擅长取行 修改文件            

2)语法结构 (执行原理)

sed [参数] ’条件指令‘ 文件   

3)实践操作:               

增  删  替换 查询            

4) 扩展说明   

                             

awk(数组)

1)概念作用

擅长取列 统计分析

2)语法结构 (执行原理)

awk [参数] '模式{动作}'

3)实践操作:

删  替换gsub(//,"",$n) 统计(累加统计i++/i=i+1  求和统计i=i+$n)

4) 扩展说明

BEGIN、END  FS NF NR  

                                  

10. 基础阶段--系统用户权限管理

1)权限相关知识--如何让普通用户获取root权限

       a 直接su - 变为root

       b 修改指定数据权限  chmod ugoa 644 755  chown

       c 指定用户提权      visudo sudo(大宝剑)

       d 设置特殊权限位    setuid(u+s(4)) setgid(g+s(2)) 粘滞位(o+t(1))  12个权限位

       权限相关知识--系统默认文件数据权限

       文件默认权限:644  目录默认权限:755

       umask数值如何运算

2)系统用户相关知识 --- 用户的重要目录和文件

       /etc/skel  

       /etc/passwd /etc/shadow

       系统用户相关知识 --- 用户相关的命令

       useradd(虚拟用户) 参数?  usermod  userdel -r

       groupadd

       passwd

       id last lastlog  whoami w

    

11. 基础阶段--系统定时任务信息

1)如何编写定时任务 systemctl start crond

       一个命令 crontab -e

       语法格式  时间定义(*每 /n每隔 -连续时间范围 , 间隔时间范围) 分时 日 月周

       PS:日 星期 不能同时用                  

           * 10 * * *  10点每分钟都执行   00 10 * * 6  每周6 10点整

2)如何查看定时任务成功

       一个文件 /var/log/cron

3)编写定时任务注意事项

       1)注意命令使用绝对路径

       2)注意特殊符号信息   

       3)尽量编写脚本信息放入定时任务中

       4)需要编写注释

       5)尽量将执行任务后面加上重定向到空 &>/dev/null

       6)脚本中的命令执行不要显示输出信息 -v取消 -s -q

       7)脚本中需要指定特殊环境变量       java-tomcat

     

0X. 企业案例01:数据存储方案

    高并发存储方案:数据存储 -- 内存(写-缓冲)--磁盘中--内存(读-缓存)-- 用户读取数据

    低并发存储方案:数据存储 -- 磁盘中 -- 内存(读-缓存)---用户读取数据

 

0X. 技术原理总结:

    1)磁盘数据读取原理 (inode block)

       /etc/oldboy/oldboy.txt 

    2) 硬链接和软链接工作特点区别

    3)如何表示数据被真正删除

       i_link=0  i_count=0

 

扩展知识

01.Linux同步网络时间

1.date '+%Y%M%D' 按照格式显示当前日期,结果如下:

[root@oldboymeng ~]# date "+%Y-%m-%d %H:%M:%S"

2019-05-29 19:19:05

 

2.date -s "xxx xx:xx:xx" 设置系统时间

[root@oldboymeng ~]# date -s "20190529 19:20:30"

Wed May 29 19:20:30 CST 2019

 

3.时间同步服务器

[root@oldboymeng ~]# yum -y install ntp

Loaded plugins: fastestmirror

Loading mirror speeds from cached hostfile

[root@oldboymeng ~]# ntpdate -u ntp1.aliyun.com

29 May 19:24:04 ntpdate[17835]: step time server 120.25.115.20 offset -2.276150 sec

 

ntp常用服务器:

阿里云:ntp1.aliyun.com

        ntp2.aliyun.com

        ntp3.aliyun.com

        ntp4.aliyun.com

        ntp5.aliyun.com

        ntp6.aliyun.com

        ntp7.aliyun.com

中国国家授时中心:210.72.145.44

NTP服务器(上海) :ntp.api.bz

美国: time.nist.gov

复旦: ntp.fudan.edu.cn

微软公司授时主机(美国) :time.windows.com

北京邮电大学 : s1a.time.edu.cn

清华大学 : s1b.time.edu.cn

北京大学 : s1c.time.edu.cn

台警大授时中心(台湾):asia.pool.ntp.org

 

4.时区操作

查看时区

date "+%Z"

[root@oldboymeng ~]# date "+%Z"

CST

 

5.将系统时间写入硬件

查看硬件时间

hwclock

同步系统时间

clock -w

[root@oldboymeng ~]# hwclock

Wed 29 May 2019 07:55:27 PM CST  -0.990765 seconds

[root@oldboymeng ~]# hwclock -w

[root@oldboymeng ~]# hwclock

Wed 29 May 2019 07:57:00 PM CST  -0.434109 seconds

 

 

命令:取nginx进程pid号,并结束进程

[root@lzy ~]# ps axu|grep nginx|grep -v grep|awk '{print $2}'

3911

3912

[root@lzy ~]# ps axu|grep nginx|grep -v grep|awk '{print $2}'|xargs kill -9

 

脚本:备份etc目录到/data/IP目录下并压缩成时间格式文件

[root@oldboyedu ~]# cat tar.sh

time=`date +%F`

dir=`ifconfig|awk 'NR==2{print $2}'`

[ -d /data/$dir ] || mkdir /data/$dir

cd / && tar zcf /data/$dir/$time.tar.gz etc

 

 

02.Linux误删文件后恢复数据

     在Linux下,基于开源的数据恢复工具有很多,常见的有debugfs、R-Linux、ext3grep、extundelete等,比较常用的有ext3grep和extundelete,这两个工具的恢复原理基本一样,只是extundelete功能更加强大;

    Extundelete能够利用inode信息结合日志去查询该inode所在的block位置,以次来查找和恢复所需的数据,该工具最给力的一点就是支持ext3/ext4双格式分区恢复,基于整个磁盘的恢复功能较为强大。

 

注意事项

在数据被误删除后,第一时间要做的是卸载被删除数据所在的磁盘或磁盘分区。

因为将文件删除后,仅仅是将文件的inode结点中的扇区指针清零,实际文件还存储在磁盘上,如果磁盘以读写模式挂载,这些已删除的文件的数据块就可能被操作系统重新分配出去,在这些数据块被新的数据覆盖后,这些数据就真的丢失了,恢复工具也回力无天。

所以,以只读模式挂载磁盘可以尽量降低数据块中数据被覆盖的风险,以提高恢复数据成功的几率。

 

1.部署extundelete工具

1.wget http://zy-res.oss-cn-hangzhou.aliyuncs.com/server/extundelete-0.2.4.tar.bz2

2.yum -y install  bzip2  e2fsprogs-devel  e2fsprogs  gcc-c++  make    #安装相关依赖和库

3.tar -xvjf extundelete-0.2.4.tar.bz2

4.cd extundelete-0.2.4                            #进入程序目录

5../configuremake && make install

 

2.部署误删除文件环境

1)模拟数据误删除环境

在演示通过extundelete恢复数据之前,我们首先要模拟一个数据误删除环境,这里我们以ext3文件系统为例,在ext4文件系统下的恢复方式与此完全一样。

 

简单的模拟操作过程如下:

[root@cloud1 ~]#mkdir /data

 

[root@cloud1 ~]#mkfs.ext3 /dev/sdc1

 

[root@cloud1 ~]#mount /dev/sdc1  /data

 

[root@cloud1 ~]# cp /etc/passwd  /data

 

[root@cloud1 ~]# cp -r /app/ganglia-3.4.0  /data

 

[root@cloud1 ~]# mkdir /data/test

 

[root@cloud1 ~]# echo "extundelete test" > /data/test/mytest.txt

 

[root@cloud1 ~]#cd /data

 

[root@cloud1 data]# md5sum  passwd

0715baf8f17a6c51be63b1c5c0fbe8c5  passwd

 

[root@cloud1 data]# md5sum  test/mytest.txt

eb42e4b3f953ce00e78e11bf50652a80  test/mytest.txt

 

[root@cloud1 data]# rm -rf /data/*

 

2)卸载磁盘分区

在将数据误删除后,立刻需要做的就是卸载这块磁盘分区:

[root@cloud1 data]#cd /mnt

 

[root@cloud1 mnt]# umount /data

3)查询可恢复的数据信息

在Linux下可以通过“ls –id”命令来查看某个文件或者目录的inode值,例如查看根目录的inode值,可以输入:

[root@cloud1 ~]# ls -id  /

2 /

 

通过extundelete命令可以查询/dev/sdc1分区可恢复的数据信息:

[root@cloud1 /]# extundelete  /dev/sdc1  --inode 2

......

File name                                       | Inode number | Deleted status

.                                                2

..                                                2

lost+found                                        11             Deleted

passwd                                           49153          Deleted

test                                              425985         Deleted

ganglia-3.4.0                                       245761         Deleted

根据上面的输出,标记为Deleted状态的是已经删除的文件或目录。同时还可以看到每个已删除文件的inode值,接下来就可以恢复文件了。

3.通过extundelete恢复单个文件

extundelete恢复单个文件的参数是“--restore-file”,这里需要注意的是,“--restore-file”后面指定的是恢复文件路径,这个路径是文件的相对路径。相对路径是相对于原来文件的存储路径而言的,比如,原来文件的存储路径是/data/passwd,那么在参数后面直接指定passwd文件即可,如果原来文件的存储路径是/data/test/mytest.txt,那么在参数后面通过“test/mytest.txt”指定即可。

 

执行如下命令开始恢复文件:

 

[root@cloud1 /]# extundelete  /dev/sdc1  --restore-file passwd

Loading filesystem metadata ... 40 groups loaded.

Loading journal descriptors ... 54 descriptors loaded.

Successfully restored file passwd

 

[root@cloud1 /]# cd RECOVERED_FILES/

 

[root@cloud1 RECOVERED_FILES]# ls

passwd

 

[root@cloud1 RECOVERED_FILES]# md5sum  passwd

0715baf8f17a6c51be63b1c5c0fbe8c5  passwd

 

在文件恢复成功后,extundelete命令默认会在执行命令的当前目录下创建一个RECOVERED_FILES目录,此目录用于存放恢复出来的文件,所以执行extundelete命令的当前目录必须是可写的。

根据上面的输出,通过md5sum命令校验,校验码与之前的完全一致,表明文件恢复成功。

 

4.通过extundelete恢复单个目录

extundelete除了支持恢复单个文件,也支持恢复单个目录,在需要恢复目录时,通过 “--restore-directory”选项即可恢复指定目录的所有数据。

 

继续在上面模拟的误删除数据环境下操作,现在要恢复/data目录下的ganglia-3.4.0文件夹,操作如下:

 

[root@cloud1 mnt]# extundelete  /dev/sdc1  --restore-directory /ganglia-3.4.0

Loading filesystem metadata ... 40 groups loaded.

Loading journal descriptors ... 247 descriptors loaded.

Searching for recoverable inodes in directory /ganglia-3.4.0 ...

781 recoverable inodes found.

Looking through the directory structure for deleted files ...

4 recoverable inodes still lost.

 

[root@cloud1 mnt]# ls

RECOVERED_FILES

 

[root@cloud1 mnt]# cd RECOVERED_FILES/

 

[root@cloud1 RECOVERED_FILES]# ls

ganglia-3.4.0

 

可以看到之前删除的目录ganglia-3.4.0已经成功恢复了,进入这个目录检查发现:所有文件内容和大小都正常。

 

5.通过extundelete恢复所有误删除数据

当需要恢复的数据较多时,一个个地指定文件或目录将是一个非常繁重和耗时的工作,不过,extundelete考虑到了这点,此时可以通过“--restore-all”选项来恢复所有被删除的文件或文件夹。

仍然在上面模拟的误删除数据环境下操作,现在要恢复/data目录下所有数据,操作过程如下:

 

[root@cloud1 mnt]# extundelete  /dev/sdc1 --restore-all

Loading filesystem metadata ... 40 groups loaded.

Loading journal descriptors ... 247 descriptors loaded.

Searching for recoverable inodes in directory / ...

781 recoverable inodes found.

Looking through the directory structure for deleted files ...

0 recoverable inodes still lost.

 

[root@cloud1 mnt]# ls

RECOVERED_FILES

 

[root@cloud1 mnt]# cd RECOVERED_FILES/

 

[root@cloud1 RECOVERED_FILES]# ls

ganglia-3.4.0  passwd  test

 

[root@cloud1 RECOVERED_FILES]# du -sh  /mnt/RECOVERED_FILES/*

15M     /mnt/RECOVERED_FILES/ganglia-3.4.0

4.0K    /mnt/RECOVERED_FILES/passwd

8.0K    /mnt/RECOVERED_FILES/test

 

可以看到所有数据全部完整地恢复了。

 

6.通过extundelete恢复某个时间段的数据

 

有时候删除了大量的数据量,其中很多数据都是没用的,我们仅需要恢复其中的一部分数据,此时,如果采用恢复全部数据的办法,不但耗时,而且浪费资源,在这种情况下,就需要采用另外的一种恢复机制有选择地恢复,extundelete提供了“—after”“和”--before“参数,可以通过指定某个时间段,进而只恢复这个时间段内的数据。

下面通过一个简单示例,描述下如何恢复某个时间段内的数据。

我们首先假定在/data目录下有个刚刚创建的压缩文件ganglia-3.4.0.tar.gz,然后删除此文件,接着卸载/data分区,开始恢复一小时内的文件,操作如下:

 

[root@cloud1 ~]#cd /data/

 

[root@cloud1 data]# cp /app/ganglia-3.4.0.tar.gz  /data

 

[root@cloud1 data]# date +%s

1379150309

 

[root@cloud1 data]# rm -rf ganglia-3.4.0.tar.gz

 

[root@cloud1 data]# cd /mnt

 

[root@cloud1 mnt]# umount /data

 

[root@cloud1 mnt]# date +%s

1379150340

 

[root@cloud1 mnt]# extundelete  --after 1379146740 --restore-all /dev/sdc1

Only show and process deleted entries if they are deleted on or after 1379146740 and before 9223372036854775807.

Loading filesystem metadata ... 40 groups loaded.

Loading journal descriptors ... 247 descriptors loaded.

Searching for recoverable inodes in directory / ...

779 recoverable inodes found.

 

[root@cloud1 mnt]#  cd RECOVERED_FILES/

 

[root@cloud1 RECOVERED_FILES]# ls

ganglia-3.4.0.tar.gz

 

可以看到,刚才删除的文件,已经成功恢复,而在/data目录下还有很多被删除的文件却没有恢复,这就是”--after“参数控制的结果,因为/data目录下其他文件都是在一天之前删除的,而我们恢复的是一个小时之内被删除的文件,这就是没有恢复其他被删除文件的原因。

在这个操作过程中,需要注意是“--after”参数后面跟的时间是个总秒数。起算时间为“1970-01-01 00:00:00 UTC”,通过“date +%s”命令即可将当前时间转换为总秒数,因为恢复的是一个小时之内的数据,所以“1379146740”这个值就是通过“1379150340”减去“60*60=3600”获得的。

 


原文链接:https://www.cnblogs.com/oldmeng/p/12853426.html
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:附018.K3S-ETCD高可用部署

下一篇:企业私有网络构建运维