运维基础
学习笔记
目录
前言 运维人员的核心职责:... 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.
将没有意义的字符信息,变成有意义的信息
: 制表符
: 换行符
: 换行符
[root@oldboymeng ~# echo -e "oldboy01
oldboy02"
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#(.)(.)(.)(.)(.)(.)#12#g"
12
[root@oldboymeng ~# echo 123456|sed -r "s#(.)(.)(.)(.)(.)(.)#123#g"
123
[root@oldboymeng ~# echo 123456|sed -r "s#(.)(.)(.)(.)(.)(.)#<1>23456#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 oldboy1;echo 123456|passwd --stdin oldboy1#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.只查看有oldboy和alex信息
#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. 将oldboy和Alex信息的行进行删除
[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
oldboymeng" 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号码最后一位数字是1或5的人的全名
第一个历程:找出id号码以1或5结尾信息 --- 找出信息
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.文件/目录的权限说明
r(4) w(2) x(1) -(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 oldboy1#g"
第三步:批量创建用户/设置密码信息(用RANDOM随机生成密码)
# seq -w 10|sed -r "s#(.*)#useradd oldboy1;User_Pass=$RANDOM;echo "$User_Pass"|passwd --stdin oldboy1;echo $User_Pass oldboy1 >>/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”获得的。
以上是 运维基础 的全部内容, 来源链接: utcz.com/z/516420.html