当前位置:   article > 正文

linux学习笔记_tv5 . top

tv5 . top

老男孩培训第一天
1.什么是Linux?

什么是windows?
是一个操作系统(os),Operating System,个人电脑使用.
手机系统:安卓(Linux)\IOS(Unix)


什么是Linux?
是一个操作系统(os),Operating System,用于服务器端(linux),存放网站的内容(给用户看).
www.jd.com,www.baidu.com 存储用户数据的服务器可能有上万-10万台.Linux系统.
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

2.Linux系统作用
是一个基础系统软件,向下管理硬件,向上管理应用软件,为应用软件运行提供基础支撑.

3.linux起源介绍
起源于unix,1991年由Linus Torvalds开发.

4.GPL知识
GPL全称为General Public License,中文名为通用公共许可,
是一个最著名的开源许可协议,开源社区最著名的Linux内核就是在GPL许可下发布的。
1984年,Richard Stallman发起开发自由软件的运动后不久,又创立了通用公共许可证(GPL),这对推动自由软件发展起了至关重要的作用。

简单理解,GPL许可的核心,是保证任何人有共享和修改自由软件的自由,任何人有权取得、修改和重新发布自由软件的源代码权利,但都必须同时给出具体更改的源代码。
虽然整个Linux内核是基于GNU通用公共许可的,但是Linux内核并不是GNU计划的一部分,这一点请读者不要混淆。

5.Linux特点
1.开源:源代码开放,可以修改功能.
2.linux属于全人类的财产.
3.自由传播,可以卖钱.
4.安全\稳定\可扩展,10年不用重启.
5.适合Intel等x86 CPU系列架构的计算机

Linux操作系统之所以如此流行,是因为它具有如下一些优秀特点:
	是开放源代码的系统软件,可自由修改,自由传播。
	Unix系统兼容,具备几乎所有Unix的优秀特性。
	无任何商业化版权制约,即用户使用无需支付任何费用,还可以随意卖钱。
	适合Intel等x86 CPU系列架构的计算机。
	Linux系统是全世界的共同财产,社区开发和使用者活跃,遍及世界。


国家支持,大国重器操作系统和芯片
麒麟Linux操作系统,
手机鸿蒙操作系统

缺点:
1.入门难度大一点.可视化程度差.
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

6.Linux发行版本介绍

Linux发行商包括Redhat、Debian、Fedora、SUSE、CentOS、Ubuntu、麒麟……


下面来看看其中几个重要的服务端发行版本。
1) Red Hat:Red Hat Linux9.0的内核为2.4.20。在版本9.0后,Red Hat不再遵循GPL协议,成为收费产品(但仍开源),发展的新版本依次为3.x、4.x、5.x、6.x、7.x、8.x。
传统企业会用:没有技术人员,遇到问题希望有人解决,有人背锅.

2) Fedora:Red Hat的一个分支,仍遵循GPL协议,可以认为是Red Hat预发布版(小白鼠)。

3) CentOS:Red Hat的另一个分支,以Red Hat发布的源代码重建符合GPL许可协议的Linux系统,
即将其源代码的商标LOGO以及非自由软件部分去除后再编译而成的版本,目前CentOS已被Red Hat公司收购,但仍开源免费。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

7.操作系统趋势和版本选择
CentOS/Ubuntu/麒麟

CentOS:
	1.互联网公司正在使用的
	主流7.X(2024年底停止维护),互联网主流使用这个版本
	未来8.X(2021年底停止),使用的很少,企业不会选他了.
	发行centos stream,未来??? red hat收购centos.
	
	centos创始人团队跳出来,开发了linux,Rocky Linux

	近日,CentOS 官方宣布 CentOS 系列稳定版 Linux 系统将停止维护,取而代之的是测试版的 CentOS Stream,引发了 CentOS 用户的强烈不满。为此,CentOS 创始人 Gregory Kurtzer 发起了一个新的项目,旨在将 CentOS 延续下去。
	在这里插入图片描述Kurtzer 新建的项目名为 Rocky Linux

2.Ubuntu(debian) 个人版 桌面,服务器也可以用了,和centos很接近,未来之星

3.麒麟(传统企业会用)

学习选择:CentOS7.9,未来Ubuntu
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

8.搭建学习Linux运维环境

物理机(宿主机)系统版本	VMware Workstation版本
Windows 7(本书环境)	        VMware Workstation12/14(本书环境)
Windows 10(读者可用环境)	VMware Workstation15/16(读者可用环境)


虚拟机软件对PC硬件的要求
要学习Linux,对读者的个人电脑的基本要求如下:
CPU: 最低I5,使用I7最佳 。
内存:最低在8GB(CentOS7最好16G+,32G)。
硬盘:最低在20G,使用500G及以上的[SSD固态盘]最佳。
系统:建议Windows10。

学习的投资是最值得的投资。——老男孩

用好的:
CPU: I7 
内存:32G
硬盘:SSD固态盘1T(移动盘)
系统:Windows10
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

9.安装vmware workstation软件

10.创建虚拟机(买电脑硬件)
下载:
https://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/CentOS-7-x86_64-DVD-2009.iso

修改网卡名从ens33为eth0的形式,Centos6及以前都是eth0.大家习惯eth0格式了.
内核参数 加入net.ifnames=0 biosdevname=0

win: administrator 比尔盖茨,希望你你把管理员改的短一点,admin,否则 学习不舒服.
lin: root

远程连接不上
1.配置正确(服务端 ip10.0.0.7,gw10.0.0.2,dns223.5.5.5),客户端(ip:10.0.0.7)
2.重启vnet8网卡
3.还原虚拟网络编辑器默认配置.

明天:
1.bash基础
2.基础命令,文件\目录
关机重启
man help
cd pwd ls tree mkdir mv rm alias unalias
vi vim touch tail head
3.目录结构

老男孩培训第二天

window10可以上网,远程连接不上Linux或者linux上不了网
1.配置正确(服务端 ip10.0.0.7,gw10.0.0.2,dns223.5.5.5),客户端(ip:10.0.0.7)
[root@oldboy ~]# ip add #查看IP
2: eth0:
inet 10.0.0.7/24
#IP地址,用于连接服务器的地址
[root@oldboy ~]# ip route #查看路由
default via 10.0.0.2 dev eth0 proto static metric 100
#有10.0.0.2 网关,上网的出口.
xshell:10.0.0.7
检测上网:
[root@oldboy ~]# ping www.baidu.com
PING www.a.shifen.com (110.242.68.4) 56(84) bytes of data.
64 bytes from 110.242.68.4 (110.242.68.4): icmp_seq=5 ttl=128 time=11.2 ms
#虚拟网络编辑器里面的网段(10.0.0.0,255.255.255.0)和网关要配置正确(10.0.0.2)

2.重启vnet8网卡

3.重启vnet8网卡还不行,还原虚拟网络编辑器默认配置.
  • 1
  • 2
  • 3

window10无法上网
1.接口重新插下.
2.重启电脑.
3.分析下旁边人如果可以.那就是你的网线接口.换个接口还不行,你win本身问题.

#1.配置官方源更新地址(打补丁下载软件的地址):
#官方====>国内(阿里云、网易163、清华源)
#CentOS7默认是从官方下载软件的,改为从阿里云网站下载
curl -s -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

#2.配置第三方epel源更新地址:
#EPEL (Extra Packages for Enterprise Linux), 是由 Fedora Special Interest Group 维护的 #Enterprise Linux(RHEL、CentOS)中经常用到的包。
curl -s -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

#3.更新所有软件到最新(学习不用更新)
#yum update -y #总下载量279M。
#工作中服务器用于正式环境之前安装。

#4.CentOS6和CentOS7都要安装的企业运维常用基础工具包
yum install tree nmap dos2unix lrzsz nc lsof wget -y
yum install tcpdump htop iftop iotop sysstat nethogs -y

#CentOS7要安装的企业运维常用基础工具包
yum install psmisc net-tools bash-completion vim-enhanced -y

#好玩的工具
yum install sl cowsay -y

问题:多个yum命令不能同时使用,必须顺序安装。
[root@oldboy ~]# yum install tcpdump htop iftop iotop sysstat nethogs -y
已加载插件:fastestmirror
/var/run/yum.pid 已被锁定,PID 为 3701 的另一个程序正在运行。
Another app is currently holding the yum lock; waiting for it to exit…
另一个应用程序是:yum
解决:
ctrl+c 终止
[root@oldboy ~]# ps -ef|grep yum
root 1880 1701 0 09:09 pts/0 00:00:00 /var/run/yum.pid 已被锁定
杀掉所有yum进程号
kill -9 1707


vmware快照和克隆

1.什么是快照?
保存系统某一个时刻的运行状态。和拍照一样。

2.快照的目的?
当系统出故障后,可以快速还原到故障前的状态,
可以对系统做多个快照。树形结构。
什么时候做快照合适?
操作影响系统的关键操作之前,包括删除文件,重装软件,更改核心配置。
学习的好帮手,不需要关机.

3.什么是[克隆]?
克隆羊
1)链接克隆,只做很少的更改,生成一个新的系统。性能差一些,但是占用空间小,克隆速度快,依赖原始镜像,学习使用。
2)完全克隆,一模一样复制。占用空间大,克隆速度慢,不依赖原始镜像。
注意IP地址和MAC地址的更换。必须关机

计算机网络:
教室所有机器接起来,局域网(PC,网线,交换机,路由器)

计算机网络:快递网络,邮局网络

2 IP地址分类

2.1 什么是IP地址

快递公司:把货物从卖家送到买家.
卖家:发货地址
买家:收货地址
两台服务器(卖家和买家的关系)通信,有交换机,路由器(快递公司).

IP地址就类似生活中家庭住址,家庭住址是找我们个人(收货地址),通过IP地址找计算机。
在一个网络范围内,IP唯一标识一台主机。
互联网主机之间通信需要协议的(tcp/ip).

ip地址样子:10.0.0.5

  • 32位二进制数字序列组成的数字序列
    11111111.11111111.11111111.11111111 #32个1,32位,进制是2进制
    采用点将32位数字进行分割为4段,每段8位的二进制数,但二进制数不便于记忆,因此转换为10进制数显示,即点分十进制
    10.0.0.5
    ip地址范围:0.0.0.0—255.255.255.255

2.2 十进制与二进制的转换
十进制:逢10进1
1024是怎么计算出来的?

二进制:逢2进1
11 转成2进制是3
1011 转成2进制是11
11111111转成10进制? 255

2.3 IP地址的分类(IPV4地址一共多少个?)
范围:0.0.0.0—255.255.255.255 40多个亿个地址

简单的说,IP地址分5类,常见的地址是A、B、C类,是公网IP地址。
A 1.0.0.0 到 126.0.0.0 (0.0.0.0 和127.0.0.0保留)

B 128.1.0.0 到 191.254.0.0 (128.0.0.0和191.255.0.0保留)

C 192.0.1.0 到 223.255.254.0 (192.0.0.0和223.255.255.0保留)

D 224.0.0.0 到 239.255.255.255 #用于多点广播

E 240.0.0.0 到 255.255.255.254 保留(255.255.255.255用于广播)

注意:
1)ABC三类分配给互联网公网用户所使用(滴滴 jd)
2)D类型做为组播使用(keepalived,heartbeat多播)
mcast eth1 225.0.0.1 694 1 0 #heartbeat组播配置
ucast eth1 172.16.49.133 #heartbeat单播
3)E类型作为科学研究使用,进行保留
其他地址:用于IDC机房,办公室场景中ISP给我们分配的外网地址。

特殊地址:
127.0.0.1 —表示回环地址,进行本机测试使用,验证本地的TCP协议簇安装的是否正确
0.0.0.0 —主机位全为0的称为是网络地址
255.255.255.255 —主机位全为1的称为是广播地址,即向所有人发出信息

2.4 私网地址和局域网地址【*****】

在一个企业内部可以复用的IP地址,称为私网地址和局域网地址。
局域网地址只能在企业内部使用,不能进入[公网互联网使用],路由器不转发私网地址。

私网地址:下面的网络地址段就是分配给专用网络地址使用的。
10.0.0.0/8 (10.0.0.0到10.255.255.255) ##10.0.0.7
172.16.0.0/12 (172.16.0.0到172.31.255.255)
192.168.0.0/16 (192.168.0.0到192.168.255.255) ###192.168.0.0/16,都用192.

169.254.0.0/16 (169.254.0.0到169.254.255.255)* ###获取不到IP地址的时候,配这个地址
我们运维人员搭建局域网的时候自己根据他的标准,自己随意配。

子网掩码:划分网络位和主机位
10.0.0.0/24 #分为网络位和主机位。
MASK:255.255.255.0 子网掩码,控制可以有多少个网络,每个网络内有多少个电脑。
11111111.11111111.11111111.00000000 #全1的是网络位,全0是主机位.

10.0.0.0/24 #10.0.0.1-10.0.0.254台电脑(0.0.0.0,10.0.0.255)

私网地址不能进入公网的,那么我们的电脑怎么上网的呢?
路由器作用:
1.帮我们修改了数据包源地址
数据包出网的时候路由器会用SNAT改变局域网的地址为路由器的公网地址,进入公网。
数据包回来的时候路由器会用DNAT把路由器的公网地址改变局域网的地址,找到PC了。
NAT:网络地址转换
SNAT:源地址转换
DNAT:目的地址转换

DHCP(服务): 动态主机配置协议
给局域网的计算机自动配置地址(含IP,子网掩码、网关、dns)
老男孩教室没有配置IP,gw,DHCP给你分配地址.

什么是端口 ?
0)数字范围0-65535
1)数字形式表示
2)标识一台计算机上对应的服务,一台计算机上不同服务数字代号。
足疗:
22 修脚服务 SSH 远程连接服务 加密的 *****
23 足疗 telnet远程连接服务 明文的
80 搓背 http服务
443 采耳 https加密的http服务 *****
默认端口代表的服务
远程连接 22 SSH服务 加密的 安全
远程连接 23 telnet 不加密的
80 http 上网
443 https 加密上网

安全:22 3389 135 139 21 80 443
百度,京东
[root@oldboy ~]# nmap www.baidu.com -p 1-65535
Http:80 上网服务
http:443 加密访问上网
http://ddddd/php?where=1=1…

baidu 80,443过滤,安全隐患
22远程连接端口,为什么看不见,限制办公室内网访问,vpn拨号到内网访问.

排查问题
xshell连接Linux杀手锏
前提条件:IP、网关、DNS等配置正确,并且xshell配置也是正确的前提下
1.VMnet8 重启
2.虚拟网络编辑器-还原设置-重新配置
3.确认PC能够联网,否则重启PC

排查方法:
1)ping www.baidu.com 不通,意味着DNS可能有问题或无法上网。
2)检查是否能上网 ping 203.81.19.1通,可以上网,一定DNS问题。
3)如果不能上网,ping 10.0.0.254通的,无法上网(路由器配置问题,ISP运营商(检查上述3点))

xshell配置见视频或书籍

上传下载
ping www.baidu.com
[root@oldboy ~]# yum install lrzsz -y
已安装:
lrzsz.x86_64 0:0.12.20-36.el7

传输文件:
安装lrzsz:yum install lrzsz -y
从windows上传文件到linux里:
1.直接拖动文件(lrzsz软件) #rz -E #yum install lrzsz -y
2.rz -y 回车,浏览文件上传

下载文件到windows里
sz -y 文件路径(真实存在)

rz或者拖动 #命令没有找到 yum install lrzsz -y

-E 上传有同名自动改名
-y(覆盖)

明天:
1.bash基础
2.基础命令,文件\目录
关机重启
man help
cd pwd ls tree mkdir mv rm alias unalias
vi vim touch tail head
3.目录结构

7.Linux bash命令行基础

1)Linux bash命令行

2)命令行提示符
[root@oldboy ~]#
[root @oldboy ~]#
[root :命令行提示符@前面的字符代表当前登录的用户(可用whoami查询),
[root@oldboy ~]# whoami
root

@分隔符

oldboy,@后面的为主机名(可用hostname查询),
[root@oldboy ~]# hostname
oldboy

~所在的位置是窗口当前用户所在的路径(可用pwd查询)。
[root@oldboy ~]# pwd
/root

]# 提示符,管理员的提示符,root用户提示符,root皇帝。

[root@oldboy ~]# su - oldboy
上一次登录:三 7月 14 12:47:58 CST 2021tty1 上
[oldboy@oldboy ~]$ whoami #$是普通用户。一般大臣,布衣。
oldboy

查看当前用户;
[root@oldboy ~]# whoami
root

查看当前路径:
[root@oldboy ~]# pwd
/root

~ 用户的家目录,/root,/home/oldboy

[root@oldboy ~]# hostname
oldboy

PS1环境变量控制提示符长什么样子?
PS1变量控制命令行组成:
PS1=’[\u@\h \W]$ ',

使用中记忆。。。。
比较好的提示符:
临时修改:
PS1=’[\e[32;1m][\u@\h \W]\$ [\e[0m]’

永久修改:
echo “PS1=’[\e[32;1m][\u@\h \W]\$ [\e[0m]’” >>/etc/profile
source /etc/profile

更多调整
echo “PS1=’[\e[32;1m][\u@[\e[0m][\e[33;1m]\h \W]\$ [\e[0m]’” >>/etc/profile
source /etc/profile

老男孩培训第三天
1.Linux运维\网络安全 [运营维护]

知识体系杂\逻辑性不强
1.记忆(使用中记忆),熟能生巧.
2.操作为主.
3.企业招聘,高中\专科\本科.本科10-20%.

2.开发
1.知识体系严谨,非常多,让人的所有想象成为可能.
2.逻辑思维要求很高,数学\拼算法.
3.逻辑判断…要求比较高.
4.企业招聘本科为主,专科学的要不错.高中… 本科67%.
5.天花板高.张小龙微信创始人,1个亿以上.

Linux:

1)Linux bash命令行
bash命令行解释器或者翻译官,命令行输入命令都是由bash解释执行的.

)命令行提示符
[root@oldboy ~]#

[root @oldboy ~]#
[root :命令行提示符@前面的字符代表当前登录的用户(可用whoami查询),
[root@oldboy ~]# whoami
root

@分隔符

oldboy,@后面的为主机名(可用hostname查询),

[root@oldboy ~]# hostname
oldboy

~ 所在的位置是窗口当前用户所在的路径(可用pwd查询)。
[root@oldboy ~]# pwd
/root

~ 用户的家目录 此处就是/root 皇宫

]# 提示符,等着输入命令,管理员的提示符是#,root用户提示符,root皇帝。

[root@oldboy ~]# su - oldboy #切换到oldboy用户
[oldboy@oldboy ~]$ whoami #$是普通用户的提示符。一般大臣,布衣。
oldboy

PS1环境变量控制提示符长什么样子?
PS1变量控制命令行组成:
PS1=’[\u@\h \W]$ ',

使用中记忆。。。。
比较好的提示符:
echo “PS1=’[\e[32;1m][\u@\h \W]\$ [\e[0m]’” >>/etc/profile
source /etc/profile

echo “PS1=’[\e[32;1m][\u@[\e[0m][\e[33;1m]\h \W]\$ [\e[0m]’” >>/etc/profile
source /etc/profile

学习命令:

1.查看当前用户;
[root@oldboy ~]# whoami
root

2.查看当前路径:
[root@oldboy ~]# pwd
/root

3.查看主机名
[root@oldboy ~]# hostname
oldboy

4.~ 用户的家目录,root的家目录/root,oldboy家目录是/home/oldboy

5.切换用户 su
su - 用户名
[root@oldboy ~]# su - oldboy #切换到oldboy用户
[oldboy@oldboy ~]$ whoami #$是普通用户的提示符。一般大臣,布衣。
oldboy

网络配置命令:

1.图形化配置网卡
nmtui

2.配置网卡完成:
systemctl restart network #重启所有网卡

#默认是ens33(内核参数 net.ifnames=0 biosdevname=0),百度 如何ens33改成eth0
ifup eth1 #只启动网卡1(eth1) ,网卡0,eth0
ifdown eth1 #只关闭网卡1

查看IP
ip a
ifconfig ##==>(yum install net-tools -y)
ifconfig eth0

查看网关路由 上网的出口地址.
[root@oldboy ~]# ip route
default via 10.0.0.2 dev eth0 proto static metric 100
10.0.0.0/24 dev eth0 proto kernel scope link src 10.0.0.7 metric 100
[root@oldboy ~]# route -n ##==>(yum install net-tools -y)
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.0.0.2 0.0.0.0 UG 100 0 0 eth0
10.0.0.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0

查看DNS
[root@oldboy ~]# cat /etc/resolv.conf

Generated by NetworkManager

nameserver 223.5.5.5 ##配置网卡的时候配置的

nmtui配置,执行下面命令检查配置
[root@oldboy ~]# systemctl restart network
[root@oldboy ~]# cat /etc/resolv.conf

Generated by NetworkManager

nameserver 223.5.5.5
nameserver 223.6.6.6

修改网卡配置文件:nmtui背后就是改这个ifcfg-eth0.
[root@oldboy ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0

快捷键(提高效率):

使用中记忆。——老男孩

tab 自动补全功能*****
不管多长的命令,先输入2个字母,然后连续2下tab键,不断循环。
补全路径
作用:
1.提前确认输入对错(tab没反应就有问题).
2.提高输入效率,不用记完整命令.

ctrl+a 开头
ctrl+e 结尾

ctrl+u 删除光标前内容
ctrl+k 删除光标后内容

ctrl+l 清屏(clear)

ctrl+c 终止当前操作
ctrl+d 退出当前会话(logout),连续操作关闭xshell。

ctrl+方向键 #按单词移动

esc+. #调出上一个命令最后一个【空格】后面的部分

Ctrl+Insert 复制命令行内容*

Shift+Insert 粘贴命令行内容*

xshell调整选中即复制,右键即粘贴

xshell远程连接linux慢:
sed -i.bak ‘21i UseDNS no\nGSSAPIAuthentication no’ /etc/ssh/sshd_config
systemctl restart sshd

4.Linux bash 命令行语法

1.中括号可选。
命令 [选项] [路径/文件/目录]
ls -ld /etc/hosts

打疫苗 轻/重 胳膊/屁股
1针 2针
小护士打
老护士打

ls list 列表 #查看当前目录下的内容

查看指定目录下的内容:
[root@oldboy ~]# ls /opt
[root@oldboy ~]# ls /root/

查看文件属性:-l
ls -l /root
人和人的属性(身高、体重、性别、年龄)
文件和文件属性(大小、权限、日期、用户和组)

查看隐藏文件:-a
[root@oldboy ~]# ls -a
. anaconda-ks.cfg .bash_logout .bashrc .pki Snap1.jpg
… .bash_history .bash_profile .cshrc shell练习题.rar .tcshrc
什么是隐藏文件?以.开头的文件

cd change directory 切换路径
[root@oldboy /etc]# cd /tmp/
[root@oldboy /tmp]# pwd
/tmp

~ 用户的家目录

  • 上一次所在目录
    . 表示当前目录
    … 表示上一级目录
    …/…表示上一级的上一级目录

[root@oldboy network-scripts]# cd …/
[root@oldboy sysconfig]# pwd
/etc/sysconfig
[root@oldboy sysconfig]# cd …/…/
[root@oldboy /]# pwd
/

pwd print work directory 显示当前用户所在的路径
[root@oldboy ~]# pwd
/root
[root@oldboy ~]#
[root@oldboy ~]#
[root@oldboy ~]# cd /etc/sysconfig/network-scripts/
[root@oldboy network-scripts]# pwd
/etc/sysconfig/network-scripts

mkdir make directory 创建目录 文件夹

mkdir oldboy
ls
mkdir dir{1…100} #创dir1–dir100
rm -fr dir* #容易丢数据
mkdir oldboy oldgir #创建多个文件

递归创建目录:-p #
[root@oldboy ~]# mkdir -p /oldboy/abc/ls/dddd
[root@oldboy ~]# tree /oldboy/
/oldboy/
└── abc
└── ls
└── dddd

3 directories, 0 files

tree以树形结构显示文件和目录
如果找不到需要安装(yum install tree -y)
显示层数: -L 数字 #-L 1 显示一层目录

[root@oldboy ~]# tree -L 1 /
/
├── bin -> usr/bin
├── boot
├── dev
├── etc
├── home
├── lib -> usr/lib
├── lib64 -> usr/lib64
├── media
├── mnt
├── oldboy
├── opt
├── proc
├── root
├── run
├── sbin -> usr/sbin
├── srv
├── sys
├── tmp
├── usr
└── var

touch 创建文件

[root@oldboy ~]# touch a.txt
[root@oldboy ~]# touch a.txt b.txt c.txt
touch oldboy{1…10}

重复创建不会覆盖,更改文件时间戳.(修改时间\访问时间\改变时间)
[root@oldboy ~]# touch a.txt
[root@oldboy ~]# touch a.txt
[root@oldboy ~]# touch a.txt

cp #copy 复制文件或目录

cp 源 目的

[root@oldboy ~]# cp a.txt /tmp/
[root@oldboy ~]# cp a.txt oldboy.log

复制目录:-r或-a(还可以保持属性)
[root@oldboy ~]# mkdir oldboy
[root@oldboy ~]# cp oldboy /tmp/
cp: 略过目录"oldboy"
[root@oldboy ~]# cp -r oldboy /tmp/
[root@oldboy ~]# ls /tmp/
a.txt oldboy

mv #move 移动文件或目录,剪切

mv 源 目的
[root@oldboy ~]# mv a.txt oldgirl.log
[root@oldboy ~]# ls
anaconda-ks.cfg b.txt c.txt oldboy oldboy.log oldgirl.log

[root@oldboy ~]# mv oldboy /opt/
[root@oldboy ~]# ls
anaconda-ks.cfg b.txt c.txt oldboy.log oldgirl.log shell练习题.rar Snap1.jpg
[root@oldboy ~]# ls /opt
oldboy

rm #rmdir 删除文件或目录,默认只能删除文件
-f 强制删除
-r 删除目录

[root@oldboy ~]# rm b.txt
rm:是否删除普通空文件 “b.txt”?y

强制删除文件
[root@oldboy ~]# rm -f c.txt
[root@oldboy ~]# rm -f oldboy.log oldgirl.log anaconda-ks.cfg Snap1.jpg
强制删除目录
[root@oldboy ~]# rm -fr oldboy

别名 alias
[root@oldboy ~]# alias net=‘cat /etc/sysconfig/network-scripts/ifcfg-eth0’ #临时
[root@oldboy ~]# net
[root@oldboy ~]# unalias net

永久操作把下面命令放入/etc/profile,source /etc/profile
alias net='cat /etc/sysconfig/network-scripts/ifcfg-eth0

文件相关命令:
touch 创建文件

[root@oldboy ~]# touch a.txt
[root@oldboy ~]# touch a.txt b.txt c.txt
touch oldboy{1…10}

重复创建不会覆盖,更改文件时间戳.(修改时间\访问时间\改变时间)
[root@oldboy ~]# touch a.txt
[root@oldboy ~]# touch a.txt
[root@oldboy ~]# touch a.txt

cat 查看文件内容
-n 显示行号
[root@oldboy ~]# cat /etc/hostname
oldboy
[root@oldboy ~]# cat -n /etc/passwd
1 root❌0:0:root:/root:/bin/bash
2 bin❌1:1:bin:/bin:/sbin/nologin
3 daemon❌2:2:daemon:/sbin:/sbin/nologin
4 adm❌3:4:adm:/var/adm:/sbin/nologin
5 lp❌4:7:lp:/var/spool/lpd:/sbin/nologin
6 sync❌5:0:sync:/sbin:/bin/sync

head 查看文件的前10行
[root@oldboy ~]# head /etc/passwd
root❌0:0:root:/root:/bin/bash
bin❌1:1:bin:/bin:/sbin/nologin
daemon❌2:2:daemon:/sbin:/sbin/nologin
adm❌3:4:adm:/var/adm:/sbin/nologin
lp❌4:7:lp:/var/spool/lpd:/sbin/nologin
sync❌5:0:sync:/sbin:/bin/sync
shutdown❌6:0:shutdown:/sbin:/sbin/shutdown
halt❌7:0:halt:/sbin:/sbin/halt
mail❌8:12:mail:/var/spool/mail:/sbin/nologin
operator❌11:0:operator:/root:/sbin/nologin

查看前N行,N是数字
-n 5 #数字

head -5 /etc/passwd

[root@oldboy ~]# head -5 /etc/passwd
root❌0:0:root:/root:/bin/bash
bin❌1:1:bin:/bin:/sbin/nologin
daemon❌2:2:daemon:/sbin:/sbin/nologin
adm❌3:4:adm:/var/adm:/sbin/nologin
lp❌4:7:lp:/var/spool/lpd:/sbin/nologin

tail 查看文件的最后10行
查看后N行,N是数字

[root@oldboy ~]# tail /etc/passwd
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
oldboy:x:1000:1000:oldboy:/home/oldboy:/bin/bash
tcpdump:x:72:72::/:/sbin/nologin

查看最后5行
-n 5 #数字
[root@oldboy ~]# tail -5 /etc/passwd
abrt:x:173:173::/etc/abrt:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
oldboy:x:1000:1000:oldboy:/home/oldboy:/bin/bash
tcpdump:x:72:72::/:/sbin/nologin
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

-f #跟踪日志文件尾部变化

echo 打印字符输出
[root@oldboy ~]# echo oldboy
oldboy
[root@oldboy ~]# echo oldgirl
oldgirl
[root@oldboy ~]# echo {1…10}
1 2 3 4 5 6 7 8 9 10
[root@oldboy ~]# echo {a…z}
a b c d e f g h i j k l m n o p q r s t u v w x y z

[root@oldboy ~]# echo {a…z} >a.txt #把输出写入到文件,清理源文件内容,放入写入的内容
[root@oldboy ~]# cat a.txt
a b c d e f g h i j k l m n o p q r s t u v w x y z

知识点:
{a…z} a到z,中间是空格
{1…10} 1到10,中间是空格

seq 打印数字序列
[root@oldboy ~]# seq 5
1
2
3
4
5
[root@oldboy ~]# seq 10
1
2
3
4
5
6
7
8
9
10
[root@oldboy ~]# seq 3
1
2
3
[root@oldboy ~]# seq 3 6
3
4
5
6
[root@oldboy ~]# seq 1 2 10 #打印奇数
1
3
5
7
9
[root@oldboy ~]# seq 2 2 10 #打印偶数
2
4
6
8
10
[root@oldboy ~]# echo {1…10}
1 2 3 4 5 6 7 8 9 10
[root@oldboy ~]# seq -s " " 10
1 2 3 4 5 6 7 8 9 10

老男孩培训第四天
more less 浏览文件内容,分页浏览
回车 一点点向下浏览
空格 一屏一屏向下浏览
/mysql 向下搜索含有mysql字符串的内容,按n连续向下搜索.按N向上搜索
?mysql 向上搜索,按n连续向上搜索.按N向下搜索

grep 过滤文件内容(三剑客命令之一) 前五的命令 #

例1:过滤包含mysql字符串的所有行
[root@oldboy ~]# grep mysql /etc/services
mysql 3306/tcp # MySQL
mysql 3306/udp # MySQL

#规范操作是把过滤的内容加双引号
[root@oldboy ~]# grep “mysql” /etc/services

把过滤出的内容装到袋子里(oldboy.txt)
[root@oldboy ~]# grep mysql /etc/services >oldboy.txt
[root@oldboy ~]# cat oldboy.txt

例2:排除含有tcp字符串的行
[root@oldboy ~]# grep -v tcp oldboy.txt
mysql 3306/udp # MySQL
mysql-cluster 1186/udp # MySQL Cluster Manager
mysql-cm-agent 1862/udp # MySQL Cluster Manager Agent
mysql-im 2273/udp # MySQL Instance Manager
mysql-proxy 6446/udp # MySQL Proxy

例3:追加内容到oldboy.txt结尾
[root@oldboy ~]# echo oldboy >>oldboy.txt
[root@oldboy ~]# echo OLDBOY >>oldboy.txt
[root@oldboy ~]#
[root@oldboy ~]# cat oldboy.txt
mysql-proxy 6446/udp # MySQL Proxy
oldboy
OLDBOY

例4:不区分大小写过滤含有oldboy字符串的行
[root@oldboy ~]# grep -i oldboy oldboy.txt
oldboy
OLDBOY

[root@oldboy ~]# grep oldboy oldboy.txt
oldboy

Linux命令行严格区分大小写
[root@oldboy ~]# LS
-bash: LS: 未找到命令

例4:对过滤的内容显示在源文件中的行号
[root@oldboy ~]# grep -n “http” /etc/services
14:# http://www.iana.org/assignments/port-numbers

文件内容相关命令:

1)介绍vi和vim
vi 相当于win下记事本,默认是有的。
vim 相当于win下notepad++,typora(MD),默认没有需要安装。

推荐: linux vim
win下notepad++,typora(MD)

2)安装vim工具
[root@oldboy ~]# rpm -qa vim-enhanced
vim-enhanced-7.4.629-8.el7_9.x86_64

如果没有:
yum install vim-enhanced -y

3)VIM三种模式模式*****
见图:视频里

切入命令模式使用冒号的时候:
:
w 保存 write
u 撤销 undo 保存之前
q 退出 quit
! 强制

例1:
vim oldgirl,增加内容.
I am 28.

vim 快捷键:
光标移动:
普通模式:
行尾 $或end
行首 0或Home
文件尾行 G
文件开头行 gg
当前光标向下移动5行 5gg 数字[回车]
复制 yy
复制多行 nyy n是数字
粘贴 p
删除 dd
删除多行 ndd n是数字
回滚 u
:set nu 显示行号
:set nonu 取消行号

搜索和替换
/内容 初始向下搜索,此时按n继续搜索,N反向继续搜索。
?内容 初始向上搜索,此时按n继续搜索,N反向继续搜索。

:%s/A/B/g,把A替换成B,如果A或B中有斜线,把分割的斜线换#或@
   s为替换,g全局替换
:n1,n2s/A/B/g	n1、n2为数字,在第n1行和n2行间寻找A,用B替换

例子:全局替换,整个文件替换将nologin替换为oldboy
:%s/nologin/oldboy/g

例2:替换1-5行,将oldboy替换为nologin
 1,5s/oldby/nologin/g
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

练习:
[root@oldboy ~]# cat /etc/passwd >oldboy.txt
[root@oldboy ~]# vim oldboy.txt
例1:将nologin替换为oldboy
:%s/nologin/oldboy/g

例2:将1-5行的nologin替换为oldgirl
1,5s/nologin/oldgirl/g

#///为分隔符,可以用### @@@替代

进入编辑模式的光标位置不同的命令
i 在当前光标所在处插入文字
I 在当前所在行的行首第一个非空格符处开始插入文字,和A相反
A 在当前所在行的行尾最后一个字符处开始插入文字,和I相反
O 在当前所在行的上一行处插入新的一行
o 在当前所在行的下一行处插入新的一行

==================================
目录结构知识
win:目录顶点或者入口盘符:C/D/E
Linux:目录顶点或者入口:/,称为根。所有的目录都在根下面。

Linux系统目录结构具有以下基本特点:
1.一切从"根"开始,"/"是所有目录的起点(顶点)。
2.Linux根下面的目录是一个有层次的树状结构。
3.酷似一棵倒挂着的树。
[root@oldboy ~]# tree -L 1 /
/
├── bin -> usr/bin
├── boot
ddd
ddd
├── dev
├── etc
├── home
├── lib -> usr/lib
├── lib64 -> usr/lib64
├── media
├── mnt
├── oldboy
├── opt
├── proc
├── root
├── run
├── sbin -> usr/sbin
├── srv
├── sys
├── tmp
├── usr
└── var

路径分隔符区别:
Windows的目录形式为c:\windows\,路径分隔符是“\”(撬棍,反斜线),d、e等盘的目录结构与之类似。
Linux的目录形式为/etc/hosts,路径分割符为"/" (斜线)

目录层次标准:
http://www.pathname.com/fhs/

root@oldboy oldboy]# tree -L 1 /
/
├── bin -> usr/bin #/bin等同/usr/bin #普通用户二进制命令目录,ls,cp,cat,rm。
├── sbin -> usr/sbin #/sbin/等同/usr/sbin #root管理员使用的二进制命令目录(破坏程度更大,fdisk,mkfs分区格式化)
├── boot #内核程序及引导程序所在的目录,100M
├── dev #设备目录(光驱 磁盘)
├── etc***** #系统基础服务核心配置文件所在的目录(yum rpm安装的软件)****
├── home #普通用户的家目录(三间茅草房) /home/oldboy,~
├── root #管理员的家目录(皇宫)
├── lib -> usr/lib #库文件所在目录,系统调用(内核提供接口给应用程序使用)
├── lib64 -> usr/lib64 #库文件所在目录
├── media #媒体 光驱等挂载点。
├── mnt #临时的挂载点(u)
├── opt #第三方程序目录
├── proc***** #虚拟的文件系统,内核、进程等配置和运行信息的目录。汽车仪表盘。
汽车仪表盘:车况\油耗\跑了公里数\速度
├── sys #虚拟的文件系统
├── tmp #临时目录,所有用户都可以进入这里做各种操作(黑客跳板目录),监控目录。
1)堵上漏洞。2)防止放木马文件。3)防止修改关键文件(suid vim)。 4)提权到root(/etc/sudoers),为所欲为。
├── usr #c:/program file 应用程序所在目录,编译方式安装软件默认是这个目录/usr/local
└── var #变化的目录,日志文件、缓存等文件存放的目录。

/var/log/messages   系统日志文件
/var/log/secure     登录日志  ssh 远程连接安全 很重要
/var/log/lastlog    有哪些用户登录lastlog
  • 1
  • 2
  • 3

和磁盘相关的知识:
挂载 :给硬盘安个门
挂载点:门(目录 /mnt)

mount /dev/cdrom /mnt 临时挂载:

[root@oldboy ~]# ls /dev/cdrom
/dev/cdrom

[root@oldboy ~]# cd /dev/cdrom
-bash: cd: /dev/cdrom: 不是目录

[root@oldboy ~]# mount /dev/cdrom /mnt #给磁盘/dev/cdrom开一个门,门是/mnt目录,/mnt就是挂载点
mount: /dev/sr0 写保护,将以只读方式挂载

[root@oldboy ~]# ls /mnt/
CentOS_BuildTag LiveOS/
.discinfo Packages/
EFI/ repodata/
EULA RPM-GPG-KEY-CentOS-7
GPL RPM-GPG-KEY-CentOS-Testing-7
images/ TRANS.TBL
isolinux/ .treeinfo
[root@oldboy ~]# ls /mnt/Packages/

相对路径和绝对路径区别:

绝对路径:
银河系-太阳系-地球—亚洲—中国—北京—昌平沙河百沙路-老男孩教育网络安全8期 教室7,第三排第一个位置

从根开始的,必须 /目录
ls /etc/hosts

相对路径:
老男孩教育网络安全8期 教室7,第三排第一个位置

root@oldboy 老男孩教育#
cd Linux77期
[root@oldboy ~]# mkdir oldboy -p
[root@oldboy ~]# cd oldboy #相对路径 相对当前用户所在的路径为前提。
[root@oldboy oldboy]# cd …/ #相对路径

[root@oldboy ~]# cd /root/oldboy #绝对路径,和当前路径 没有关系。

###oldboy在哪??? 没人知道在哪
mkdir oldboy
规范:
[root@oldboy ~]# mkdir oldboy #在~,/root下。

#绝对路径可以不带提示符。
mkdir /oldboy

[root@oldboy mnt]# cd ~
[root@oldboy ~]# mkdir oldgirl -p
[root@oldboy ~]# pwd
/root
[root@oldboy ~]# ls -ld /root/oldgirl/
drwxr-xr-x. 2 root root 6 7月 26 10:50 /root/oldgirl/
[root@oldboy ~]# ls
a.txt oldboy1.txt oldboy.log oldboy.txt oldgirl shell练习题.rar

区别:
[root@oldboy ~]#cd /oldboy
[root@oldboy ~]# oldboy #相对路径

核心重要文件:
老男孩linux目录结构
1.bin -> usr/bin #/bin等同/usr/bin #普通用户二进制命令目录。
2.sbin -> usr/sbin #/sbin/等同/usr/sbin #root管理员使用的二进制命令目录
3.boot #内核程序及引导程序所在的目录,100M
4.dev #设备目录(光驱 磁盘)
/dev/hd[a-t]IDE设备
/dev/sd[a-z] SCSI设备
/dev/cdrom 光驱
/dev/null #无限数据接收设备,相当于黑洞
/dev/zero #无限零资源,要多少有多少
5.etc #系统基础服务配置文件所在的目录(yum rpm安装的软件)
1./etc/sysconfig/network-scripts/ifcfg-eth1:网卡配置文件,第二块ifcfg-eth0
2./etc/resolv.conf:Linux系统过时的DNS客户端配置文件
3./etc/hostname:主机名配置文件
4./etc/hosts:系统本地的域名解析文件(局域网;域名和IP解析文件)
5./etc/fstab:配置开机设备自动挂载的文件
6./etc/rc.local:存放开机自启动程序命令的文件
7./etc/issue 软件bug,和特定版本有关。
8./etc/motd:配置用户登录系统之后显示提示内容的文件
9./etc/redhat-release:声明Red Hat版本号和名称信息的文件
10./etc/sysctl.conf:Linux内核参数设置文件(系统优化)*****
11./etc/profile、/etc/bashrc ,.bashrc,.bash_profile配置系统的环境变量/别名等的文件※※※
6.home #普通用户的家目录(三间茅草房)
7.root #管理员的家目录(皇宫)
8.lib -> usr/lib #库文件所在目录
9.lib64 -> usr/lib64 #库文件所在目录
10.media #媒体 光驱等挂载点
11.mnt #临时的挂载点(u)
12.opt #第三方程序目录
13.proc #虚拟的文件系统,内核和进程信息的目录。汽车仪表盘。汽车仪表盘:车况 油耗 跑了公里数 速度
/proc/cpuinfo 当前cpu信息文件
/proc/meminfo 当前内存信息文件
/proc/loadavg 当前系统的平均负载文件
/proc/mounts 当前设备挂载列表信息文件
/proc/interrupts 当前系统中断信息文件
15.tmp #临时目录,所有用户都可以进入这里做各种操作(黑客跳板目录),监控目录。
16.usr #c:/program file 应用程序所在目录
1./usr/local/:编译安装软件默认的位置路径,c:\Program files。
2./usr/src:源代码目录
17.var #数据变化的目录,日志文件存放目录。
/var/log/messages #linux系统日志文件,系统故障可以去看看。
/var/log/secure #安全日志(ssh日志记录到这里),监控日志。
/var/log/dmesg #记录硬件信息加载情况的日志文件(dmesg)
/var/log/lastlog 有哪些用户登录lastlog

Linux核心字符:

  • 表示所有
    [root@oldboy ~]# ls
    a.txt oldboy1.txt oldboy.log oldboy.txt oldgirl shell练习题.rar
    [root@oldboy ~]# rm -fr *
    [root@oldboy ~]# ls
    ~ 家目录
    . 当前目录
    … 上一级目录
    | 管道()
    ####
    cat /etc/passwd|grep nologin|grep message
    dbus❌81:81:System message bus:/:/sbin/nologin

    [root@oldboy ~]# grep 3306 /etc/services
    mysql 3306/tcp # MySQL
    mysql 3306/udp # MySQL
    [root@oldboy ~]# grep 3306 /etc/services |grep tcp
    mysql 3306/tcp # MySQL

    [root@oldboy ~]# ifconfig
    eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
    inet 10.0.0.7 netmask 255.255.255.0 broadcast 10.0.0.255
    inet6 fe80::761:9b8a:dcd8:e720 prefixlen 64 scopeid 0x20
    ether 00:0c:29:3d:b9:8d txqueuelen 1000 (Ethernet)
    RX packets 64772 bytes 8020753 (7.6 MiB)
    RX errors 0 dropped 0 overruns 0 frame 0
    TX packets 54168 bytes 34619331 (33.0 MiB)
    TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
    [root@oldboy ~]# ifconfig|grep 10.0.0.7
    inet 10.0.0.7 netmask 255.255.255.0 broadcast 10.0.0.255

    例1:输出ip a 结果中含有inet的行,并且从中过滤10.0.0的行.
    例2:找出/etc/passwd中含有bash的行,并且从中过滤出root所在行.

重定向:

或1>标准输出重定向 清空已有文件内容,加入新的内容
[root@oldboy ~]# echo 123 >a.txt
[root@oldboy ~]# cat a.txt
123
[root@oldboy ~]# echo 456 >a.txt
[root@oldboy ~]# cat a.txt
456

[root@oldboy ~]# grep mysql /etc/services >oldboy.txt
	/etc/services苹果树
	mysql 苹果
	>  筐里的东西清空
	oldboy.txt装到筐里
  • 1
  • 2
  • 3
  • 4
  • 5

1>>标准输出追加重定向 只加入新的内容到文件结尾
[root@oldboy ~]# echo 123 >>a.txt
[root@oldboy ~]# echo 123 >>a.txt
[root@oldboy ~]# echo 123 >>a.txt
[root@oldboy ~]# cat a.txt
456
123
123
123

2>错误输出重定向

执行正确命令输出进入a.txt
[root@oldboy ~]# echo oldboy >a.txt 2>b.txt
[root@oldboy ~]# cat a.txt
oldboy
[root@oldboy ~]# cat b.txt

执行错误命令输出进入b.txt
[root@oldboy ~]# cho oldboy >a.txt 2>b.txt
[root@oldboy ~]#
[root@oldboy ~]# cat a.txt
[root@oldboy ~]# cat b.txt
-bash: cho: 未找到命令

&>>c.txt 或>>c.txt 2>&1 #正确的和错误的都放到c.txt

[root@oldboy ~]# cho oldboy &>>c.txt
[root@oldboy ~]# cat c.txt
-bash: cho: 未找到命令

[root@oldboy ~]# echo oldboy &>>c.txt
[root@oldboy ~]# cat c.txt
-bash: cho: 未找到命令
oldboy

/dev/null 黑洞设备
[root@oldboy ~]# cat c.txt &>/dev/null
/dev/zero 零设备,源源不断的产生东西

<或0<输入重定向
<<或0<<追加输入重定向

批量插入多行文本
cat >/oldboy.txt<<EOF
10.0.0.7
10.0.0.8
10.0.0.9
EOF

[root@oldboy ~]# cat >/oldboy.txt<<EOF

10.0.0.7
10.0.0.8
10.0.0.9
EOF
[root@oldboy ~]#
[root@oldboy ~]# cat /oldboy.txt
10.0.0.7
10.0.0.8
10.0.0.9

xargs 分组
[root@oldboy ~]# echo {a…z} >a.txt
[root@oldboy ~]# cat a.txt
a b c d e f g h i j k l m n o p q r s t u v w x y z
[root@oldboy ~]# xargs -n 3 a.txt #无法使用
^C
[root@oldboy ~]# xargs -n 3 <a.txt #一行3个
a b c
d e f
g h i
j k l
m n o
p q r
s t u
v w x
y z

时间:
date

[root@oldboy ~]# date -s “2100/07/26 23:00:01”
2100年 07月 26日 星期一 23:00:01 CST

[root@oldboy ~]# date +%F
2100-07-26
[root@oldboy ~]# date +%Y
2100
[root@oldboy ~]# date +%m
07
[root@oldboy ~]# date +%d
26
[root@oldboy ~]# date +%w
1
[root@oldboy ~]# date +%H
23
[root@oldboy ~]# date +%M
01
[root@oldboy ~]# date +%S
30
[root@oldboy ~]# date +%Y-%m-%d\ %H:%m:%S
2100-07-26 23:07:49

过去和未来
[root@oldboy ~]# date +%F -d ‘-3day’
2100-07-23

[root@oldboy ~]# date +%F -d ‘+3day’
2100-07-29

[root@oldboy ~]# date +%F -d ‘-100year’
2000-07-26

[root@oldboy ~]# date +%F -d ‘+100year’
2200-07-26

服务器时间和互联网时间同步:
ntpdata ntp2.aliyun.com

打包压缩

tar:打包压缩
1)打包组合:
zcvf
z压缩
c创建
v显示输出
f文件打包
tar 组合选项 存放压缩包的路径/压缩包的名字.tar.gz 要打包的文件

tar zcvf   /tmp/etc.tar.gz   /etc
  • 1

2)解压组合
zxvf
x解压
[root@oldboy ~]# cd /tmp/
[root@oldboy tmp]# ls
a.txt oldboy vmware-root_968-2965448017
etc.tar.gz vmware-root_1066-2991203017 yum.log
ks-script-SYMiYO vmware-root_939-4022308693
[root@oldboy tmp]# tar zxvf etc.tar.gz #解压到当前路径

3)指定路径解压
[root@oldboy tmp]# tar zxvf etc.tar.gz -C /opt/
[root@oldboy tmp]# ls /opt/
etc oldboy

打包压缩:gzip,unzip,zip

组合打包:tar+date 用作备份
[root@oldboy tmp]# tar zcvf /tmp/etc_$(date +%F).tar.gz /etc
[root@oldboy tmp]# ls
etc_2100-07-26.tar.gz

$(date +%F) ##路径加,会解析为日期作为包名

下节内容:
day5-6
三剑客+正则
文件类型
用户和组
文件权限
磁盘知识
day7-8
网络知识
进程知识
定时任务
day9-10
搭建web服务
LNMP 搭建博客和知乎产品
了解网站访问的流程
数据库
day11-12
Shell编程

老男孩培训第五天
查找命令:
1)which 查看[二进制命令]所在路径(从PATH环境变量路径里查找)
[root@oldboy ~]# which cp
/usr/bin/cp

特殊注意:
[root@oldboy ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
1)分隔符为冒号:
2)路径都是命令。
[root@oldboy ~]# which oldboy
/usr/bin/which: no oldboy in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/.local/bin:/root/bin)

2)whereis 查看文件及文件的帮助等的路径
-b 查看二进制命令所在路径 which
[root@oldboy ~]# whereis -b cp
cp: /usr/bin/cp
[root@oldboy ~]# whereis cp
cp: /usr/bin/cp /usr/share/man/man1/cp.1.gz

3)locate 查找文件及相关内容(内置数据库,通过updatedb)(不需要了解)
yum install mlocate -y
updatedb ##更新数据库
locate cp

4)find 查找 *****
遍历查找,从根开始从磁盘上查找文件,效率很低.功能强大

语法:
find 查找路径 选项1 【参数1】 选项2 【参数2】…

按名字查找:点名
-name 按名字查找

(1)按名字查找:
[root@oldboy ~]# find / -name “hosts”
/etc/hosts
/tmp/etc/hosts
/opt/etc/hosts

按名字模糊查找 表示所有
[root@oldboy ~]# find /etc/ -name "h
ts"
/etc/hosts
[root@oldboy ~]# find /etc/ -name “*.conf”
/etc/resolv.conf
/etc/pki/ca-trust/ca-legacy.conf
/etc/yum/pluginconf.d/fastestmirror.conf
/etc/yum/pluginconf.d/langpacks.conf
/etc/yum/protected.d/systemd.conf

(2)按类型查找
-type
f d l c b s
去哪看? man find 搜/-type
-type c
File is of type c:
b block (buffered) special 块设备 硬盘光驱
c character (unbuffered) special 字符设备
d directory 查找目录
f regular file 查找文件
l symbolic link; 软连接 快捷方式
s socket 和应用程序之间通信有关

.avi
.mp4
.jpg
.png
.txt

[root@oldboy ~]# find / -name “hosts”
/etc/hosts
/tmp/etc/hosts
/opt/etc/hosts

查找文件,并且名字为hosts
[root@oldboy ~]# find / -type f -name “hosts”
/etc/hosts
/tmp/etc/hosts
/opt/etc/hosts

查找目录,并且名字为hosts
[root@oldboy ~]# find / -type d -name “hosts”
[root@oldboy ~]# mkdir hosts
[root@oldboy ~]# find / -type d -name “hosts”
/root/hosts

http://192.168.15.253/day04.txt

============
组合查找:find 默认就是取交集(-a)and,并集(-o)or
找女朋友:【高点】 [身材好点] [有钱] 该有的要有,同时满足:交集 默认就是取交集

找男朋友:高的,帅的,有钱的
热爱运动,特长多,热爱生活,渴望爱情,追求精神层次,经济基础,
有菜花(写诗、乐器),这样的男生,有没有女生喜欢?

例:查文件类型为文件,并且名字为hosts
find / -name “hosts” -a -type f

[root@oldboy ~]# find / -type f -a -name “hosts”
/etc/hosts
/tmp/etc/hosts
/opt/etc/hosts
[root@oldboy ~]# find / -type f -name “hosts”
/etc/hosts
/tmp/etc/hosts
/opt/etc/hosts

并集:查找名为hosts,或者类型为d,并且为oldboy
find / -name “hosts” -o -type d -name “oldboy”
/etc/hosts
/root/hosts
/tmp/oldboy
/tmp/etc/hosts
/home/oldboy
/opt/oldboy
/opt/etc/hosts
/oldboy

取反:!查找名字不是file1
[root@oldboy ~]# mkdir /data -p
[root@oldboy ~]# touch /data/file{1…3}
[root@oldboy ~]# find /data -name “file1”
/data/file1
[root@oldboy ~]# find /data ! -name “file1”
/data
/data/file2
/data/file3

(3)按大小查找

-size +1M #大于1M
-size 1M #1M
-size -1M #小于1M
其他单位k G

测试1
[root@oldboy ~]# find /etc -size -1M
/etc/crypttab
/etc/pki/ca-trust/extracted/pem/objsign-ca-bundle.pem
/etc/issue

[root@oldboy ~]# find /etc -size +1M
/etc/selinux/targeted/active/policy.kern
/etc/selinux/targeted/contexts/files/file_contexts.bin
/etc/udev/hwdb.bin

(4)-mtime modify按修改时间查找*****
-atime 按【访问 access】时间查找 很少用
-ctime 按【改变change】时间查找 很少用

-mtime +7 #7天以前的
-mtime 7 #第7天
-mtime -7 #最近7天

测试:复制即可。模拟每天创建一个文件,连续30天
mkdir /data -p
for n in {01…30};do date -s "2021/08/ n " ; t o u c h / d a t a / f i l e n";touch /data/file n";touch/data/filen;done

[root@oldboy ~]# find /data -type f -name “file*” -mtime +7
/data/file19
/data/file20
/data/file21
/data/file22

[root@oldboy ~]# date
2021年 08月 30日 星期一 00:01:13 CST

[root@oldboy ~]# find /data -type f -name “file*” -mtime 7
/data/file23
[root@oldboy ~]# find /data -type f -name “file*” -mtime -7
/data/file1
/data/file2

不重要的
-perm 按权限
[root@oldboy data]# mkdir oldboydir
[root@oldboy data]# find /data -perm 755
/data
/data/oldboydir
-user 按用户
[root@oldboy data]# chown oldboy oldboydir
[root@oldboy data]# find /data -user oldboy
/data/oldboydir
要想成功,永远比别人多做一点点,早做一点点,做好一点点。————老男孩

【对找到的东西进行处理】
方法1:
-exec 执行动作

find /data -name “file*” -mtime +7 -exec rm -f {} ;

原理:效率低
rm -f /data/file01
rm -f /data/file02
rm -f /data/file03

方法2:xargs
-n 分组
[root@oldboy data]# seq 10 >oldboy.txt
[root@oldboy data]# xargs -n 3 <oldboy.txt
1 2 3
4 5 6
7 8 9
10

提高门槛删东西:
-i 可以让后面的{}接收搜索到的内容。
find /data -name “file*” -mtime +7|xargs rm -f #简写

find /data -name “file*” -mtime -7|xargs -i rm -f {} #完整写法
原理:
rm -f file01 file02 …file30 ##一条命令
效率更高
[root@oldboy ~]# find /data -name “file*” -mtime -7|xargs rm -f
[root@oldboy ~]# ls /data
file23

先查找,看看是否是想删的,在执行删除
[root@oldboy ~]# find /data -name “file*” -mtime -7
/data/file1
/data/file2
/data/file3
/data/file24
/data/file25
/data/file26
/data/file27
/data/file28
/data/file29
/data/file30
[root@oldboy ~]# find /data -name “file*” -mtime -7|xargs rm -f
[root@oldboy ~]# ls /data
file23

误区:
find /data -name “file*” -mtime -7|rm -f ##错误的

find /data -name “file*” -mtime -7
|
rm -f

[root@oldboy data]# find /data -name “file*” -mtime +7|xargs -i rm -f {}

查找/data大于20K,修改时间为7天以内的文件,复制到/opt。

复制:
cp 源 目标
cp -t 目标 源

解答:
[root@oldboy ~]# find /data -size +20k -mtime -7
[root@oldboy ~]# cp /bin/ls /bin/cat /data
[root@oldboy ~]# find /data -size +20k -mtime -7
/data/ls
/data/cat
[root@oldboy ~]# find /data -size +20k -mtime -7|xargs cp -t /opt
[root@oldboy ~]# find /data -size +20k -mtime -7|xargs -i cp {} /tmp

mv 源 目标
mv -t 目标 源

题:查找/data大于20K,修改时间为7天以内的文件,移动到/opt。

(2)按类型查找
-type
f d l c b s
去哪看? man find 搜/-type
-type c
File is of type c:
b block (buffered) special 块设备 硬盘光驱
c character (unbuffered) special 字符设备
d directory 查找目录
f regular file 查找文件
l symbolic link; 软连接 快捷方式
s socket 和应用程序之间通信有关

.avi
.mp4
.jpg
.png
.txt

[root@oldboy ~]# ls -l
总用量 16
-rw-r–r--. 1 root root 52 7月 27 2100 a.txt
-rw-r–r--. 1 root root 28 7月 26 11:46 b.txt
-rw-r–r--. 1 root root 35 7月 26 11:49 c.txt
drwxr-xr-x. 2 root root 6 7月 27 2100 hosts

  • rw-r–r--. 1 root root 21 8月 30 00:14 oldboy.txt
    类型 权限 硬链接 用户 组 大小 月 日 时间 文件名

第一列:
-rw-r–r--.
第一个字符 就是文件类型

  • 普通文件
    b block (buffered) special 块设备 硬盘光驱
    c character (unbuffered) special 字符设备
    d directory 查找目录
    l symbolic link; 软连接 快捷方式
    s socket 和应用程序之间通信有关

.avi
.mp4
.jpg
.png
.txt
统一是普通文件,一切皆文件

rw-r–r-- 文件权限

. 和selinux相关的东西

第二列:硬链接数

Linux用户管理
人 名字 身份证
linux root 0(UID)

人是有组织,家庭,学校,班级

身份标识 每个用户都有一个UID,唯一标识
组标识 GID 唯一标识

=用户介绍(user)=
Linux里都有哪些用户?作用?

1)超级用户root
系统管理员,掌握系统最高权限,皇帝一样。家目录/root

用户名是root,UID为0.

UID为0的用户就是root。

登录安全:企业级应用。
a.配置ssh,禁用root通过SSH远程登录,权限非常大,所有人都知道。
使用普通用户登录,然后切换到root

b.平时使用普通用户登录,有必要的话在登录root。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

2)普通用户
UID为C6 500-60000,C7 1000-60000
普通的权限:写的权限范围 家目录/home/用户名,/tmp。
老百姓,过着平常的日子。
由管理员用户创建的。
日常登录应该首先登录普通用户。
登录shell,/bin/bash

普通用户如何管理系统?
a.oldboy切换root,su - root #角色改变,由普通用户变成了root。
农民起义,当皇帝。

b.oldboy不切换到root,可以使用root的权限去做事,按命令给权限,sudo useradd oldboy
赋予普通用户一部分权限。*****

3)虚拟用户(傀儡用户)
多数情况装系统就存在的,且不能登录的。
UID 1-499
登录shell,/sbin/nologin
存在还不能登录?
linux文件、进程这样的东西如果要存在,必须要有对应的用户和组。
类似人出生,一定有父母的。家庭(组1),老男孩教育(组2)

文件创建时就要有对应的用户和组。
进程启动时就要有对应的用户和组。

虚拟用户存在的目的就是满足进程启动时对用户和组的要求。
用普通用户行不行?行,权限大了.

最小化原则:
1.安装软件最小化
2.登录安全最小化(普通用户)
3.进程启动权限最小化。
4.文件目录权限最小化

=用户组介绍(group)=
唯一标识:GID Group Identify
组名:oldboy

用户的用户组 类似于【人】的家庭,学校等组织
1个用户可以在多个组里。
1个组可以有多个用户。

用户组怎么产生的?
1)创建用户的时候默认产生的,创建一个oldboy,默认情况就会生成oldboy组,
用户和组同名,且UID和GID相同

[root@oldboy ~]# useradd oldgirl #添加用户
[root@oldboy ~]# tail -1 /etc/passwd #存放用户的文件
oldgirl❌1001:1001::/home/oldgirl:/bin/bash

[root@oldboy ~]# tail -1 /etc/group #存放用户组的文件
oldgirl❌1001: #创建oldgirl用户的时候,同时创建oldgirl用户组

2)由root用户直接创建用户组。
[root@oldboy ~]# groupadd tech
[root@oldboy ~]# tail -1 /etc/group
tech❌1002:

[root@oldboy ~]# useradd littleboy -g tech #添加一个littleboy 属于tech组.
[root@oldboy ~]# id littleboy
uid=1002(littleboy) gid=1002(tech) 组=1002(tech)

=用户和组相关的配置文件=
直接相关的有4个
/etc/passwd ##用户主配置文件,用户的各种属性(UID,GID,家目录,登录SHELL)
/etc/shadow ##用户密码文件,存放密码及密码的属性(失效时间,修改密码时间等)。
/etc/group ##组文件,存放用户组及属性。
/etc/gshadow ##用户组的密码文件(废弃)

详细说明:
用户文件:
/etc/passwd 见视频*****
[root@oldboy ~]# tail -1 /etc/passwd
littleboy: x: 1002:1002: :/home/littleboy :/bin/bash
用户 密码 UID GID 说明 家目录 登录解释

=和用户相关的命令=
useradd 添加用户
usermod 修改用户
userdel 删除用户

useradd 添加用户
-u 指定uid添加用户
[root@oldboy ~]# useradd -u 1111 test
[root@oldboy ~]# id test #用户信息
uid=1111(test) gid=1111(test) 组=1111(test)
[root@oldboy ~]# tail -1 /etc/passwd #查看用户文件
test❌1111:1111::/home/test:/bin/bash
-g 指定用户属于哪个组
[root@oldboy ~]# groupadd tech
[root@oldboy ~]# tail -1 /etc/group
tech❌1002:

[root@oldboy ~]# useradd littleboy -g tech #添加一个littleboy 属于tech组.
[root@oldboy ~]# id littleboy
uid=1002(littleboy) gid=1002(tech) 组=1002(tech)
  • 1
  • 2
  • 3

[root@oldboy ~]# ls -l /home
总用量 0
drwx------. 2 littleboy tech 62 8月 30 01:14 littleboy
drwx------. 2 oldboy oldboy 99 8月 30 00:59 oldboy
drwx------. 2 oldgirl oldgirl 62 8月 30 01:11 oldgirl
drwx------. 2 test test 62 8月 30 01:19 test

-M 不生成家目录
[root@oldboy ~]# useradd test1 -M
[root@oldboy ~]# ls /home/
littleboy oldboy oldgirl test

-s 指定解释器
[root@oldboy ~]# useradd test2 -s /sbin/nologin -M #用于给应用软件运行提供用户
[root@oldboy ~]# tail -1 /etc/passwd
test2❌1113:1113::/home/test2:/sbin/nologin
[root@oldboy ~]# su - test2
su: 警告:无法更改到 /home/test2 目录: 没有那个文件或目录
This account is currently not available.

解释器:
[root@oldboy ~]# cat /etc/shells
/usr/bin/sh
/usr/bin/bash

usermod 修改用户
例1:test2解释器改成bash
[root@oldboy ~]# grep -w test2 /etc/passwd
test2❌1113:1113::/home/test2:/sbin/nologin

[root@oldboy ~]# usermod -s /bin/bash test2
[root@oldboy ~]# grep -w test2 /etc/passwd
test2:x:1113:1113::/home/test2:/bin/bash
  • 1
  • 2
  • 3

例2:更改littleboy用户,属于oldboy组
[root@oldboy ~]# grep little /etc/passwd
littleboy❌1002:1002::/home/littleboy:/bin/bash

[root@oldboy ~]# id littleboy
uid=1002(littleboy) gid=1002(tech) 组=1002(tech)

[root@oldboy ~]# usermod -g oldboy littleboy

例3:修改uid为6666
[root@oldboy ~]# id littleboy
uid=1002(littleboy) gid=1000(oldboy) 组=1000(oldboy)
userdel 删除用户
[root@oldboy ~]# usermod -u 6666 littleboy
[root@oldboy ~]# id littleboy
uid=6666(littleboy) gid=1000(oldboy) 组=1000(oldboy)

userdel 删除用户
-r 连带家目录一起删除

[root@oldboy ~]# userdel -r test #不用
[root@oldboy ~]# ls /home
littleboy oldboy oldgirl
[root@oldboy ~]# userdel oldgirl #删除
[root@oldboy ~]# ls /home
littleboy oldboy oldgirl

生产采取注释方法:
[root@oldboy ~]# tail -10 /etc/passwd
#littleboy❌6666:1000::/home/littleboy:/bin/bash
#test1❌1112:1112::/home/test1:/bin/bash
#test2❌1113:1113::/home/test2:/bin/bash

[root@oldboy ~]# su - test1
su: user test1 does not exist

美团外卖\快递 #基本不动脑的职业

创建用户组。
[root@oldboy ~]# groupadd tech
[root@oldboy ~]# tail -1 /etc/group
tech❌1002:

[root@oldboy ~]# useradd littleboy -g tech #添加一个littleboy 属于tech组.
[root@oldboy ~]# id littleboy
uid=1002(littleboy) gid=1002(tech) 组=1002(tech)

useradd 修改用户========
-u 指定UID
-g 指定属于的组
-M 不创建家目录
-s 指定登录的解释器
usermod 修改用户========
-u 指定UID
-g 指定属于的组
-M 不创建家目录
-s 指定登录的解释器

删除用户组:groupdel
[root@oldboy ~]# groupadd abc
[root@oldboy ~]# tail -1 /etc/group
abc❌1114:
[root@oldboy ~]# groupdel abc

密码相关:passwd
修改指定用户密码:root功能
[root@oldboy ~]# passwd oldboy

普通用户
passwd 只能改自己的密码
[oldboy@oldboy ~]$ passwd
更改用户 oldboy 的密码 。
为 oldboy 更改 STRESS 密码。
(当前)UNIX 密码:
新的 密码:
无效的密码: 这个密码和原来的相同
新的 密码:
无效的密码: 密码少于 8 个字符
新的 密码:
无效的密码: 密码少于 8 个字符
passwd: 已经超出服务重试的最多次数

非交互式修改密码 --stdin
echo 123456|passwd --stdin root

[root@oldboy ~]# echo 123456|passwd --stdin root
更改用户 root 的密码 。
passwd:所有的身份验证令牌已经成功更新。

[root@oldboy ~]# history
231 echo 123456|passwd --stdin root #留痕迹
232 history
[root@oldboy ~]# history -d 231 #按编号把带密码的命令删除
[root@oldboy ~]# history

批量设置密码而且不留痕迹
[root@oldboy ~]# cat /tmp/a.txt
oldboy:123456
test1:890
以下命令相同
[root@oldboy ~]# chpasswd </tmp/a.txt
[root@oldboy ~]# cat /tmp/a.txt|chpasswd

[root@oldboy ~]# su - oldboy
上一次登录:一 8月 30 02:12:52 CST 2021pts/0 上
[oldboy@oldboy ~]$ su - test1
密码:输入890
su: 警告:无法更改到 /home/test1 目录: 没有那个文件或目录
[test1@oldboy oldboy]$ whoami
test1

切换用户以及提权管理命令:
su
sudo

su 切换用户角色
从root变为oldboy就是切换用户角色

su - oldboy

  • 加载新的环境变量

不适用-的问题
[root@oldboy ~]# su oldboy
[oldboy@oldboy root]$ pwd
/root #还是root家目录

10个管理员,管理服务器,su - root ##必须要root密码,
其中一个管理员,把密码改了.其他人登录不了.
找回丢失的root密码
1.重启系统
2.进入单用户模式,不能上网.

只把root密码留给少数核心管理人员,其他管理员就使用普通用户管理.
需要root权限的时候:

进入/etc/ 创建个文件
[oldboy@oldboy ~]$ cd /etc
[oldboy@oldboy etc]$ touch oldboy.txt
touch: 无法创建"oldboy.txt": 权限不够
按命令,最小化授权,执行命令期间拥有root权限.

sudo管理方案
让普通用户执行某个命令的过程中拥有root权限.本身角色还是oldboy自己.

配置方法:把普通用户提升为管理员

使用命令visudo (vim /etc/sudoers)
1)语法1
root ALL=(ALL) ALL

root ALL = (ALL) ALL
用户 所有主机 所有角色 所有命令

2)语法2 %wheel为组

Allows people in group wheel to run all commands

%wheel ALL=(ALL) ALL

%wheel ALL = (ALL) ALL
用户组 所有主机 所有角色 所有命令

[root@oldboy ~]# id oldboy 是管理员身份,因为属于wheel组
uid=1000(oldboy) gid=1000(oldboy) 组=1000(oldboy),10(wheel)

让普通用户变成管理员:

方法1:直接授权:
oldgirl ALL = (ALL) ALL

方法2:添加一个用户属于wheel组
[root@oldboy ~]# useradd test7 -g wheel
[root@oldboy ~]# id test7
uid=6669(test7) gid=10(wheel) 组=10(wheel)
test7即为管理员

实践方法1:
[root@oldboy ~]# useradd oldgirl
root@oldboy ~]# echo 123|passwd --stdin oldgirl

[root@oldboy ~]# su - oldgirl
[oldgirl@oldboy root]$ su - root #必须有root密码 暴力破解.
密码:

[oldgirl@oldboy root]$ sudo su - root #通过sudo提权
我们信任您已经从系统管理员那里了解了日常注意事项。
总结起来无外乎这三点:

#1) 尊重别人的隐私。
#2) 输入前要先考虑(后果和风险)。
#3) 权力越大,责任越大。
  • 1
  • 2
  • 3

[sudo] oldgirl 的密码: ###只需要输入oldgirl自身密码即可.
oldgirl 不在 sudoers 文件中。此事将被报告。 ###没有提前配置,所以提示.

实践配置

visudo
#103gg,o
oldgirl ALL=(ALL) ALL

然后以oldgirl身份执行切换
[oldgirl@oldboy root]$ sudo su - root
[sudo] oldgirl 的密码:###只需要输入oldgirl自身密码即可.
上一次登录:一 8月 30 02:44:11 CST 2021从 10.0.0.1pts/1 上
成功切换

需求:进入/etc创建个test文件
实现:不授权all,只授权指定命令

1)先查命令全路径
[root@oldboy ~]# which touch
/usr/bin/touch

[root@oldboy ~]# which useradd
/usr/sbin/useradd

2)visudo配置命令(全路径,用逗号分割),注意在oldgirl开始的授权上改
oldgirl ALL=(ALL) /usr/bin/touch, /usr/sbin/useradd

3)然后以oldgirl身份执行
[oldgirl@oldboy root]$ sudo touch /etc/oldboy.txt
[sudo] oldgirl 的密码:

[oldgirl@oldboy root]$ ls /etc/oldboy.txt ##成功创建
/etc/oldboy.txt

[oldgirl@oldboy root]$ useradd kk ##必须带sudo 命令语法
useradd: Permission denied.
useradd:无法锁定 /etc/passwd,请稍后再试。

[oldgirl@oldboy root]$ sudo useradd kk ##成功

普通用户变成root用户所有方案:
1.su - root 需要root密码
2.vim /etc/sudoers
[root@oldboy ~]# ll /etc/sudoers
-r–r-----. 1 root root 4328 9月 30 2020 /etc/sudoers
1)让文件可编辑.调整文件权限.
3.suid,给一个命令设置suid权限,任何用户执行设置过的suid功能的命令都拥有root权限.

用户相关:
useradd
usermod
userdel

用户组相关:
groupadd
groupdel
密码相关:
passwd

切换用户以及提权管理命令:
su
sudo

day6:
下节内容:
查看用户信息命令
id
whoami
who
w

查看用户日志
last
lastlog

更改文件属性:
chown
chgrp
chattr
lsattr

linux权限
20Linux权限知识和应用实践讲解
https://ke.qq.com/course/2806831?taid=9996020988171311
磁盘知识

下节内容:
day5-6
查找文件
##三剑客+正则
文件类型
用户和组
文件权限
磁盘知识
day7-8
网络知识
进程知识
定时任务
day9-10
搭建web服务
LNMP 搭建博客和知乎产品
了解网站访问的流程
数据库
day11-12
Shell编程

老男孩培训第六天

1.查看用户信息命令
id

[root@oldboy ~]# id oldboy
uid=1000(oldboy) gid=1000(oldboy) 组=1000(oldboy),10(wheel)

方法2:添加一个用户属于wheel组,用户即为管理员
[root@oldboy ~]# useradd test7 -g wheel
[root@oldboy ~]# id test7
uid=6669(test7) gid=10(wheel) 组=10(wheel)
test7即为管理员

[root@oldboy ~]# echo 123456|passwd --stdin test7
更改用户 test7 的密码 。
[root@oldboy ~]# su - test7
[test7@oldboy ~]$ sudo su -
[sudo] test7 的密码:
[root@oldboy ~]#

whoami查看当前用户
[root@oldboy ~]# whoami
root

who 忽略

w 查看用户登录情况
[root@oldboy ~]# w
23:32:42 up 5 days, 21:09, 2 users, load average: 2.36, 2.49, 2.39
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 10.0.0.1 267月21 ? 1.08s 0.56s -bash
root pts/1 10.0.0.1 02:44 2.00s 0.22s 0.05s w

查看用户日志
last====>show listing of last logged in users
[root@oldboy ~]# last
root pts/1 10.0.0.1 Mon Aug 30 02:44 still logged in
root pts/0 10.0.0.1 Mon Jul 26 11:23 still logged in
root pts/0 10.0.0.1 Mon Jul 26 11:20 - 11:23 (00:02)
root pts/0 10.0.0.1 Mon Jul 26 10:34 - 11:20 (00:45)

lastlog - 报告所有用户的最近登录情况,或者指定用户的最近登录情况
[root@oldboy ~]# lastlog
用户名 端口 来自 最后登陆时间
root pts/1 一 8月 30 23:29:42 +0800 2021
bin 从未登录过
daemon 从未登录过
adm 从未登录过
lp 从未登录过
oldboy pts/0 一 8月 30 02:21:55 +0800 2021

[root@oldboy ~]# lastlog -C -u oldboy ##清理登录用户信息
oldboy 从未登录过

#及时监控,每分钟监控.zabbix工具
cat /var/log/secure
cat /var/log/messages

ids入侵检测:
所有情况监控
进程查看命令:ps top
黑客进来以后运行木马,隐藏运行(放上来ps,top,本地的命令替换了).
如何监控?

md5sum 给文件加密生成字符串以及检查文件是否被修改
[root@oldboy ~]# md5sum /etc/hosts
54fb6627dbaa37721048e4549db3224d /etc/hosts #公安采集指纹

md5sum /etc/hosts采集指纹…发生变化,确认hosts文件被改.

采集文件指纹/usr/bin/
[root@oldboy ~]# find /usr/bin/ -type f|xargs md5sum >/opt/zhiwen.log

检查是否有文件被修改
[root@oldboy ~]# LANG=en
[root@oldboy ~]# md5sum -c /opt/zhiwen.log|egrep -i fail
模拟修改
[root@oldboy ~]# echo 111 >>/usr/bin/cowsay
检测是否被修改
[root@oldboy ~]# md5sum -c /opt/zhiwen.log|egrep -i fail
/usr/bin/cowsay: FAILED
md5sum: WARNING: 1 computed checksum did NOT match

wc 查看行数\字符数\单词数
-l 查看行数
[root@oldboy ~]# find /usr/bin/|wc -l
1030
[root@oldboy ~]# touch /usr/bin/abc
[root@oldboy ~]# find /usr/bin/|wc -l
1031

更改文件[属性]:
[root@oldboy ~]# ls -l
total 16
-rw-r–r--. 1 root root 52 Jul 27 2100 oldboy.txt
更改用户和组 chown
-R 递归修改

chown -R 用户 oldboy.txt #更改文件对应的用户

chown 用户.用户组 oldboy.txt #更改文件对应的用户和组

chown .用户组 oldboy.txt #更改文件对应的用户组,点号可以用冒号替代

chgrp 只能更改组
chgrp 用户组 oldboy.txt #更改文件对应的用户组

[root@oldboy ~]# touch oldboy.txt
[root@oldboy ~]# ls -l oldboy.txt
-rw-r–r--. 1 root root 21 Aug 31 00:07 oldboy.txt

[root@oldboy ~]# chown oldboy oldboy.txt #更改文件对应的用户
[root@oldboy ~]# ls -l oldboy.txt
-rw-r–r--. 1 oldboy root 21 Aug 31 00:07 oldboy.txt

[root@oldboy ~]# chown :oldboy oldboy.txt #更改文件对应的用户组
[root@oldboy ~]# ls -l oldboy.txt
-rw-r–r--. 1 oldboy oldboy 21 Aug 31 00:07 oldboy.txt

[root@oldboy ~]# chown root.root oldboy.txt #更改文件对应的用户和组
[root@oldboy ~]# ls -l oldboy.txt
-rw-r–r--. 1 root root 21 Aug 31 00:07 oldboy.txt

修改组实践:
[root@oldboy ~]# chgrp oldboy oldboy.txt
[root@oldboy ~]# ls -l oldboy.txt
-rw-r–r--. 1 root oldboy 21 Aug 31 00:07 oldboy.txt

chattr 给文件加锁,不让别人改
i 加锁,不能删不能改.
a 可以追加内容,但不能删除

动作:
- 减少
+ 增加
= 赋予
  • 1
  • 2
  • 3
  • 4

[root@oldboy ~]# chattr +i oldboy.txt #给oldboy.txt加锁
[root@oldboy ~]# ls -l
total 0
-rw-r–r--. 1 root root 0 Aug 31 00:13 oldboy.txt #查看增加的属性

[root@oldboy ~]# lsattr oldboy.txt
----i----------- oldboy.txt

[root@oldboy ~]# rm -f oldboy.txt
rm: cannot remove ‘oldboy.txt’: Operation not permitted

[root@oldboy ~]# echo dddd >oldboy.txt
-bash: oldboy.txt: 权限不够

[root@oldboy ~]# chattr -i oldboy.txt #解锁
[root@oldboy ~]# lsattr oldboy.txt
---------------- oldboy.txt
[root@oldboy ~]# rm -f oldboy.txt

场景:给关键文件加锁
[root@oldboy ~]# chattr +i /etc/passwd /etc/group /etc/shadow /etc/gshadow /etc/sudoers
[root@oldboy ~]# chattr +i /etc/sudoers
[root@oldboy ~]# visudo
visudo: /etc/sudoers: Permission denied

[root@oldboy ~]# ls -l /etc/sudoers
-r–r-----. 1 root root 4387 Aug 30 02:49 /etc/sudoers
[root@oldboy ~]# chmod 777 /etc/sudoers
chmod: changing permissions of ‘/etc/sudoers’: Operation not permitted

[root@oldboy ~]# mv /bin/chattr /bin/oldboy #或者删除.

测试完毕解锁
chattr -i /etc/passwd /etc/group /etc/shadow /etc/gshadow /etc/sudoers

lsattr 查看chattr对属性的更改

Linux权限:
[root@oldboy ~]# touch oldboy.txt
[root@oldboy ~]# ls -l
total 0
-rw-r–r--. 1 root root 0 Aug 31 00:50 oldboy.txt

rw-r–r-- 权限

4个字符的含义:
r 对于文件是可读 对于目录是浏览目录下的文件.
w 对于文件是可写 对于目录是创建\删除文件(和x配合).
如果文件的的权限有w,就认为文件可以被删除是错误的思维
文件是否可被删除取决于上级目录是否有w.
x 对于文件是可执行 对于目录是能否进入目录.

  • 没有权限

需要谁配合,自己可以测试:

rw- r-- r–
用户权限 用户组权限 其他权限

字符对应的数字
r 4
w 2
x 1

  • 0

核心:权限如何看:见视频
[root@oldboy ~]# ls -l
total 0
-rw-r–r--. 1 root root 0 Aug 31 00:50 oldboy.txt

字符权限 数字权限
rw-r–r-- ====6+4+4

说出下面字符权限对应的数字权限
drwxrwxr-- 774
-rw-r–r-x 645
drwx–xr-x 715
dr-xrwx–x 571
d–xr-xrwx 157
----r–r-- 044

如何更改权限? chmod
用数字权限:推荐
-R 递归修改

chmod 774 oldboy.txt

[root@oldboy ~]# chmod 774 oldboy.txt
[root@oldboy ~]# ls -l
total 0
-rwxrwxr–. 1 root root 0 Aug 31 00:50 oldboy.txt

把一个文件改成如下权限:
–x--w-r–
chmod 124 oldboy.txt

[root@oldboy ~]# chmod 124 oldboy.txt
[root@oldboy ~]# ls -l
total 0
—x-w-r–. 1 root root 0 Aug 31 00:50 oldboy.txt

用字符权限:
r
w
x

动作:
-减少
+增加
=赋予新的权限

前三位 u(user) 用户位
中三位 g(group)用户组位
后三位 o(other)其他用户位
a(all)
–x-w-r–

中三位:增加rx
[root@oldboy ~]# chmod g+rx oldboy.txt
[root@oldboy ~]# ls -l
total 0
—xrwxr–. 1 root root 0 Aug 31 00:50 oldboy.txt

前三位:增加rwx
中三位:减少w
后三位:改为x

[root@oldboy ~]# chmod u+rwx,g-w,o=x oldboy.txt
[root@oldboy ~]# ls -l
total 0
-rwxr-x–x. 1 root root 0 Aug 31 00:50 oldboy.txt

4个字符的含义:
r 对于文件是可读 对于目录是浏览目录下的文件.
w 对于文件是可写 对于目录是创建\删除里面的文件.
如果文件的权限有w,就认为文件可以文件被删除是错误的思维
文件是否可被删除取决于上级目录是否有w.
x 对于文件是可执行 对于目录是能否进入目录.

  • 没有权限

几个用户角色:
root
用户 oldboy inca
用户 oldgirl inca
用户组 inca
用户 test

groupadd inca
useradd oldgirl -g inca
useradd oldboy -g inca
useradd test

#如果存在oldboy,oldgirl则使用usermod
usermod oldgirl -g inca
usermod oldboy -g inca

[root@oldboy ~]# id oldboy
uid=1000(oldboy) gid=6669(inca) 组=6669(inca),10(wheel),1000(oldboy)
[root@oldboy ~]# id oldgirl
uid=6667(oldgirl) gid=6669(inca) 组=6669(inca)

[root@oldboy ~]# mkdir /data -p
[root@oldboy ~]# mv oldboy.txt /data/

特殊权限:关键应用
suid

/etc/shadow 存放用户密码的文件
[root@oldboy /]# ls /etc/shadow -l
----------. 1 root root 1240 8月 31 01:36 /etc/shadow #没有权限
[root@oldboy ~]# md5sum /etc/shadow
31d2d9e77650c8bd5a62b3ba88d48b1f /etc/shadow

[oldboy@oldboy ~]$ whoami
oldboy
[oldboy@oldboy ~]$ passwd ##修改了/etc/shadow
更改用户 oldboy 的密码 。
为 oldboy 更改 STRESS 密码。
(当前)UNIX 密码:
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。

[root@oldboy ~]# md5sum /etc/shadow
9b20feb1326830523f02d505edab451d /etc/shadow

疑惑:oldboy用户使用passwd命令修改密码====改的文件/etc/shadow
因为/etc/shadow没有任何权限,所以oldboy使用passwd命令理论上没有办法修改/etc/shadow
二实际上确修改了,为什么呢?

问题出在passwd命令身上,这个命令被设置了特殊权限位(suid)

suid作用:
1.针对二进制命令.
2.给passwd命令设置了suid,则任何用户执行passwd命令都会拥有和passwd命令对应的用户的权限.
[root@oldboy ~]# ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 27856 4月 1 2020 /usr/bin/passwd

普通权限:9位 前三位 中三位 后三位
特殊权限:3位

suid:用户
前三位用户位的x位:S s(x)
s 4
sgid:用户组
中三位用户组位的x位:S s(x)
s 2
粘滞位: /tmp
后三位其他用户位:x位:T t(x)
t 1

[root@oldboy ~]# chmod 4755 which rm
[root@oldboy ~]# ls -l which rm
-rwsr-xr-x. 1 root root 62872 8月 20 2019 /usr/bin/rm
[root@oldboy ~]# chmod u+s which rm
[root@oldboy ~]# ls -l which rm
-rwsr-xr-x. 1 root root 62872 8月 20 2019 /usr/bin/rm

[root@oldboy /]# ls -l /bin/rm
-rwsr-xr-x. 1 root root 62872 8月 20 2019 /bin/rm

工作中绝对不能用suid提权,特别是本身有危害的命令.
passwd命令属于绿色无害命令

rm,vim,cat都是有害命令,防不胜防

test用户通过设置了suid的vim命令提权到root实践:
1.chmod u+s /bin/vim #必须root
2.vim /etc/sudoers #test
test ALL=(ALL) ALL
3.sudo su - 切到root.

利用cat命令被设置suid漏洞提权到root
chmod u+s /bin/cat #企业人员设置
注意提前备份/etc/sudoers,否则可能操作不当破坏sudoers文件.

[root@oldboy ~]# cat >>/etc/sudoers #先回车在输入内容
test ALL=(ALL) ALL
[root@oldboy ~]# tail -1 /etc/sudoers
test ALL=(ALL) ALL

sudo su -

防护普通用户以及web提权:老男孩思想
1.禁止给命令设置suid
1)应用软件PHP(/etc/php.ini)禁止开启读取系统文件等的函数cat
2)磁盘挂载禁止suid.
2.给关键文件加锁/etc/sudoers

3.chmod 000 /etc/sudoers

4.看好/etc目录权限,防止文件被替换

5.所有系统和站点文件和目录用户和组都用root.

6.文件统一644,目录统一755,文件和目录的默认权限.

7.web应用禁止上传特殊文件到服务器,
上传后禁止浏览(get请求方法,目录uri,动静分离),
开启wap防火墙各种限制80进入,使用加密的https.

8.ssh监听内网,禁止root远程连接,vpn拨号.

查找设置了suid的命令
[root@oldboy ~]# find / -perm 4755
/usr/bin/fusermount
/usr/bin/chage
/usr/bin/gpasswd
/usr/bin/newgrp
/usr/bin/mount
/usr/bin/pkexec
/usr/bin/crontab
/usr/bin/su
/usr/bin/umount
/usr/bin/passwd
/usr/sbin/pam_timestamp_check
/usr/sbin/unix_chkpwd
/usr/sbin/usernetctl

day7:
磁盘知识
进程知识
定时任务

老男孩培训第七天

磁盘知识
定时任务
进程知识                    (见老韩的课程)
  • 1
  • 2
  • 3

磁盘:
1.硬件
接口:ide scsi sata sas ssd
m2,pci-e
企业线上:使用sas 15000转/m,sata7200转/M
数据库\存储 会使用固态盘
机械和电子:

scsi sata sas ssd

/dev/sda /dev/sdb /dev/sdc

ide
/dev/hda /dev/hdb

分区用数字表示
sda1 sda2 sda3 sdb1 sdb2

2.磁盘分区
主分区:
1.必须存在分区.
2.装系统
3.分区编号1-4(数量最多4个)

扩展分区:
1.类似一个小磁盘,只能有一个.
2.扩展分区站一个主分区的编号.
3.扩展分区不能存放数据.
4.扩展分区之上可以分逻辑分区.
5.主分区+扩展分区,总数不能超过4个.
分区表64字节,每个分区表16字节,所以 只能有四个主分区+扩展分区

逻辑分区
1.逻辑分区在扩展分区之上.
2.编号只能5开始
3.逻辑分区可以有多个.
4.逻辑分区用于存放数据

Linux分区:

1)通用分区方法: 数据不重要或者有集群节点
/boot 内核程序 1G
swap分区 当物理内存不够用的时候,借用一个磁盘当做内存用.速度慢
内存大于8G 就8G 内存小于8g,内存的1.5倍.
/ 相当c盘 存放所有数据

2)重要数据分区
数据库\存储服务
/boot 内核程序 1G
swap分区 当物理内存不够用的时候,借用一个磁盘当做内存用.速度慢
内存大于8G 就8G 内存小于8g,内存的1.5倍.
/ 相当c盘 100-200G
/data 数据

3)大厂分区方法
/boot 内核程序 1G
swap分区 当物理内存不够用的时候,借用一个磁盘当做内存用.速度慢
内存大于8G 就8G 内存小于8g,内存的1.5倍.
/ 相当c盘 100-200G
剩余800G 保留不分,谁用谁分

实践分区:
fdisk 最常用分区工具,不能给大于2T的磁盘分区
gdisk 给大于2T的磁盘分区
parted 给大于2T的磁盘分区

查看磁盘
fdisk -l

磁盘 /dev/sda:21.5 GB, 21474836480 字节,41943040 个扇区
设备 Boot Start End Blocks Id System
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 41943039 19921920 8e Linux LVM

磁盘 /dev/sdb:1073 MB, 1073741824 字节,2097152 个扇区

[root@oldboy ~]# fdisk /dev/sdb

命令操作
d 删除分区
m 打印帮助
n 添加新分区
p 打印分区信息
q 推出
w 保存退出

命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 0 extended, 4 free) #主分区
e extended #扩展分区
Select (default p):

Select (default p): p
分区号 (1-4,默认 1):
起始 扇区 (2048-2097151,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-2097151,默认为 2097151):+100M
分区 1 已设置为 Linux 类型,大小设为 100 MiB

命令(输入 m 获取帮助):p

磁盘 /dev/sdb:1073 MB, 1073741824 字节,2097152 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x48c21649

设备 Boot Start End Blocks Id System
/dev/sdb1 2048 206847 102400 83 Linux

超过4个主分区的提示:
命令(输入 m 获取帮助):n
If you want to create more than four partitions, you must replace a
primary partition with an extended partition first.

分5个分区:
/dev/sda1 /dev/sda5 /dev/sda6 /dev/sda7 /dev/sda8
/dev/sda1 /dev/sda2 /dev/sda5 /dev/sda6 /dev/sda7
/dev/sda1 /dev/sda2 /dev/sda3 /dev/sda5 /dev/sda6 ****

[root@oldboy ~]# ls -l /dev/sdb*
brw-rw----. 1 root disk 8, 16 7月 29 10:20 /dev/sdb
brw-rw----. 1 root disk 8, 17 7月 29 10:20 /dev/sdb1
brw-rw----. 1 root disk 8, 18 7月 29 10:20 /dev/sdb2
brw-rw----. 1 root disk 8, 19 7月 29 10:20 /dev/sdb3
brw-rw----. 1 root disk 8, 20 7月 29 10:20 /dev/sdb4
brw-rw----. 1 root disk 8, 21 7月 29 10:20 /dev/sdb5
brw-rw----. 1 root disk 8, 22 7月 29 10:20 /dev/sdb6

分区本质:修改分区表

通知内核分区表修改了.
[root@oldboy ~]# partprobe /dev/sdb

格式化:
本质创建文件系统
什么是文件系统?
组织和存取数据一种机制,落到Linux里就是一个文件系统软件.

文件系统类型:
win:ntfs,fat32
Linux:ext2 ext3 ext4 xfs(centos7)

格式化分区就是生成文件系统:
至少两样东西
inode 256字节空间 存放东西
文件的属性(权限 大小 用户 组)
指针:指向文件实体.
每个文件有且只能一个.

block:存放文件内容的空间.一个block 1,2,4K
每个block最多只能放一个文件.
文件大小0.1K 占一个block.   3.9K 浪费掉
按block读取.
  • 1
  • 2
  • 3
  • 4

格式化 mkfs
[root@oldboy ~]# mkfs
指定文件系统格式化.
mkfs -t xfs
mkfs.ext4
mkfs.xfs

[root@oldboy ~]# mkfs.xfs /dev/sdb1 #直接接分区
meta-data=/dev/sdb1 isize=512 agcount=4, agsize=6400 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=25600, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=855, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0

临时挂载测试
[root@oldboy ~]# mount /dev/sdb1 /mnt ##临时挂载
[root@oldboy ~]# cd /mnt/
[root@oldboy mnt]# touch oldboy.txt
[root@oldboy mnt]# ls
oldboy.txt
[root@oldboy mnt]# df -h ##查看挂载
文件系统 容量 已用 可用 已用% 挂载点
/dev/sdb1 97M 5.3M 92M 6% /mnt 挂载.

永久挂载 /etc/fstab
[root@oldboy mnt]# cat /etc/fstab
/dev/mapper/centos-root / xfs defaults 0 0
UUID=748c03eb-35df-4f8f-9a07-573ce79aecb2 /boot xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0

#6列:mount -t xfs /dev/sdb1 /mnt
设备 挂载点 文件系统类型 挂载选项 是否备份 是否开机磁盘检查
/dev/sdb1 /data xfs defaults 0 0

[root@oldboy /]# mount -a #先加载/etc/fstab,否则开机有可能系统起不来.
[root@oldboy /]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/sdb1 97M 5.3M 92M 6% /data

卸载:
umount /mnt #
umount /dev/sdb1
umount -lf /mnt #强制卸载

defaults包含啥?
Use default options: rw, suid, dev, exec, auto, nouser, and async.
rw, 可写
suid, 可以设置suid, nosuid
dev, 可以设置设备
exec, 可以执行二进制程序
async. 写到缓冲区就是写完数据了

磁盘资源就是inode和block.
[root@oldboy data]# df -h #block使用
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 2.0G 0 2.0G 0% /dev
tmpfs 2.0G 0 2.0G 0% /dev/shm
tmpfs 2.0G 12M 2.0G 1% /run
tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
/dev/mapper/centos-root 17G 2.3G 15G 14% /
/dev/sdb1 97M 5.3M 92M 6% /data
/dev/sda1 1014M 138M 877M 14% /boot
tmpfs 394M 0 394M 0% /run/user/0

[root@oldboy data]# df -i #inode
文件系统 Inode 已用(I) 可用(I) 已用(I)% 挂载点
devtmpfs 500262 412 499850 1% /dev
tmpfs 503266 1 503265 1% /dev/shm
tmpfs 503266 1293 501973 1% /run
tmpfs 503266 16 503250 1% /sys/fs/cgroup
/dev/mapper/centos-root 8910848 67774 8843074 1% /
/dev/sdb1 51200 4 51196 1% /data
/dev/sda1 524288 326 523962 1% /boot
tmpfs 503266 1 503265 1% /run/user/0

大文件多 block满
小文件 inode满

创建文件:no space left on device,但是df -h发现没满 啥原因
inode满,大小文件占满了inode.

查看目录大小
[root@oldboy data]# du -sh /etc/
33M /etc/

[root@oldboy data]# du -sh /etc/*
0 /etc/a
32K /etc/abrt
4.0K /etc/adjtime
4.0K /etc/aliases
12K /etc/aliases.db
0 /etc/alternatives
4.0K /etc/anacrontab
4.0K /etc/asound.conf
12K /etc/audisp
16K /etc/audit
80K /etc/bash_completion.d
4.0K /etc/bashrc
0 /etc/binfmt.d
4.0K /etc/centos-release
4.0K /etc/cento
查看文件大小
ls -lh /etc/ ##查看文件大小

定时任务:

定时:指定时间
任务:做事

定时任务:指定时间做一件事

手机闹钟 就是定时任务

cron定时任务:
服务端:crond 后台运行
客户端:crontab 配置工具

场景:
每天0点备份,统计报表.

实践:
cron定时任务服务端:crond 后台运行
[root@oldboy data]# systemctl status crond
● crond.service - Command Scheduler
Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
Active: active (running) ##代表运行
systemctl start crond #启动
systemctl enable crond #开机自启动

客户端:crontab 配置工具

crontab -l 查看定时任务
crontab -e 编辑定时任务

定时任务语法:

          • 任务
            分 时 日 月 周

范围:

Example of job definition:

.---------------- minute (0 - 59)

| .------------- hour (0 - 23)

| | .---------- day of month (1 - 31)

| | | .------- month (1 - 12) OR jan,feb,mar,apr …

| | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat

| | | | |

* * * * * command

特殊符号:

  • 每的意思 分位上的*就是每分的意思.

          • 任务
            每分钟执行任务

1,2,3 * * * * 任务
意思:每小时的第1 2 3分钟 执行任务

1-3 * * * * 任务
意思:每小时的第1 2 3分钟 执行任务

*/10 * * * * 任务
意思:每隔10分钟 执行任务

每天早晨8:30上课
30 08 * * * 上课

每周日上午9:30 上课
30 09 * * 7 上课

每天0点备份mysql数据库
00 00 * * * 备份mysql数据库

生产场景
1.同步互联网时间

*/5 * * * *

yum provides ntpdate #查某个命令属于哪个软件包
ntpdate-4.2.6p5-29.el7.centos.2.x86_64
yum install ntpdate -y

[root@oldboy data]# /usr/sbin/ntpdate ntp1.aliyun.com
[root@oldboy data]# /usr/sbin/ntpdate ntp2.aliyun.com
[root@oldboy data]# /usr/sbin/ntpdate time.windows.com

[root@oldboy data]# crontab -l
####时间同步
*/5 * * * * /usr/sbin/ntpdate ntp2.aliyun.com &>/dev/null

2.每分钟打印oldboy字符到一个文件

[root@oldboy data]# crontab -l
####时间同步
*/5 * * * * /usr/sbin/ntpdate ntp2.aliyun.com &>/dev/null

###打印oldboy,by oldboy for all at 20210729

          • echo oldboy >>/tmp/oldboy.log

作业1:每天0点备份 /etc目录,按照时间
2021-07-21_back.tar.gz
2021-07-22_back.tar.gz
2021-07-23_back.tar.gz

定时任务配置不能带%,如果带了\%.

规范:命令写到文件里oldboy.sh
/bin/sh /server/scripts/oldboy.sh
  • 1
  • 2
  • 3
  • 4

(见老韩的课程)
作业2:新增一个1G磁盘
分3个区:
/tmp/boot 100M
swap 100M #mkfs.swap swapon生效,free -m
/data1 所有

day8:
进程知识
包管理yum rpm
day9-10
网络基础2天
day11
web架构
mysql

day12:
shell
正则

老男孩培训第八天

1.安装软件方式
1)yum/rpm方式安装,简单,不能改变太多功能.*****
2)从源码编译安装,定制想要的,安装复杂.
3)二进制安装(mysql).

2.rpm软件包命令使用

1.命令格式
rpm [选项] [软件包名称]

2.安装rpm包
(1)安装常用选项

选项 描述
-i 安装rpm
-v 显示安装详细信息
-h 显示安装rpm进度

rpm -ivh 包名

可以是:
1网址 http://nginx.org/packages/centos/7/x86_64/RPMS/nginx-1.18.0-2.el7.ngx.x86_64.rpm
2全路径带包名 /tmp/nginx-1.18.0-2.el7.ngx.x86_64.rpm
3.包名 nginx-1.18.0-2.el7.ngx.x86_64.rpm

rpm安装nginx web服务
yum install nginx -y
#rpm
http://nginx.org/packages/centos/7/x86_64/RPMS/nginx-1.18.0-2.el7.ngx.x86_64.rpm
systemctl start nginx
lsof -i :80
systemctl stop firewalld
浏览器打开:
10.0.0.7
Welcome to nginx!
cd /usr/share/nginx/html
unzip Day48-老男孩Linux77期html小游戏项目.zip #提前上传
浏览器打开:
10.0.0.7
开玩

rpm问题:
无法自动解决依赖,实际工作中使用yum替代:

3.升级
选项 描述
-U 如果老版本不存在则安装新版本,存在则升级新版本

rpm -Uvh 包名

4.查询rpm包
(1)查询常用选项
选项 描述
rpm -q 查看指定软件包是否安装
rpm -qa 查看系统中已安装的所有RPM软件包列表*****

[root@oldboy html]# rpm -qa tree
tree-1.6.0-10.el7.x86_64
[root@oldboy html]# rpm -qa|grep tree
tree-1.6.0-10.el7.x86_64
  • 1
  • 2
  • 3
  • 4

rpm -ql 查询指定软件包所安装的目录、文件列表***
[root@oldboy html]# rpm -ql net-tools
/bin/netstat
/sbin/arp
/sbin/ether-wake
/sbin/ifconfig
/sbin/ipmaddr
/sbin/iptunnel
/sbin/mii-diag
/sbin/mii-tool
/sbin/nameif
/sbin/plipconfig
/sbin/route
/sbin/slattach

rpm -qf 查询文件或目录属于哪个RPM软件*****
[root@oldboy html]# yum provides cat #查询cat属于哪个RPM软件*
查文件属于哪个包

命令损坏:
[root@oldboy html]# rpm -qf /bin/cat
coreutils-8.22-24.el7.x86_64
[root@oldboy html]# rpm -qf /bin/touch
coreutils-8.22-24.el7.x86_64

[root@oldboy html]# rpm -e coreutils --nodeps #卸载软件包不带依赖.

[root@oldboy html]# yum install coreutils -y #安装
[root@oldboy html]# cat /etc/hosts

[root@oldboy html]# rpm -qf /etc/hosts
setup-2.8.71-11.el7.noarch

5.卸载常用选项
(1)卸载常用选项
选项 描述
-e 卸载软件
–force 强制
–nodeps 忽略依赖关系

[root@oldboy src]# rpm -qa nginx
nginx-1.20.0-1.el7.ngx.x86_64
[root@oldboy src]# rpm -e nginx

强制卸载,忽略依赖关系:
rpm -e --force --nodeps 包名

删除有关,都要谨慎
rm,mv #find+xargs
rpm -e --nodeps #永远不用。安装了不用理他,不启动就可以了。
yum remove nginx -y #连带依赖一起卸载,永远不用。安装了不用理他,不启动就可以了。

6.rpm包练习
1)查询arp命令是由哪个RPM软件包安装的?

[root@oldboy src]# rpm -qf $(which arp)
net-tools-2.0-0.25.20131004git.el7.x86_64
#系统里没有的方法
yum provides arp 

2)查询/etc/ssh/sshd_config属于哪个软件包。
[root@oldboy src]# rpm -qf /etc/ssh/sshd_config
openssh-server-7.4p1-21.el7.x86_64

#全路径
yum provides /etc/ssh/sshd_config

3)查询tree软件包都有哪些文件。
[root@oldboy src]# rpm -ql tree
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

rpm包哪来的?

5.Linux系统本地yum源配置

1)互联网阿里云yum源配置

#默认系统是国外源,需要替换为国内的源
curl -s -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

2)互联网epel源配置
#扩展源,有很多软件在基本源中没有
curl -s -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

yum install epel-release

3)互联网特定软件官方源配置
Nginx web软件官方源,有最新的nginx版本,查找方法:
1)进入nginx.org,进入download页面。
2)页面结尾进入“Linux packages for stable and mainline versions.”即可。
3)配置如下
[root@oldboy ~]# vim /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
priority=1 ##设置优先级
PS. http://nginx.org/en/linux_packages.html

配置优先级软件
yum install yum-plugin-priorities -y

7.1.6 yum命令使用实践
1.使用yum查询软件包的方式
[root@oldboy ~]# yum list
[root@oldboy ~]# yum list tree #不需要yum list|grep tree. 模糊匹配

2.使用yum安装软件包的方式
[root@oldboy ~]# yum install tree #需要确认
[root@oldboy ~]# yum install tree -y #非交互

#直接安装网络上的rpm包
[root@oldboy ~]# yum install http://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-2.el7.noarch.rpm

#如下的执行很危险,这代表更新整个系统所有的软件,包括内核
[root@oldboy ~]# yum update -y ###打补丁.

#注意事项:
1)生产线慎用,最好不用。
2)安装系统之后,上线前。
3)测试环境,模拟正式环境。然后上正式。

4.使用yum删除软件包
[root@oldboy ~]# yum install vsftpd -y
[root@oldboy ~]# yum remove samba -y
#注意:慎用,尽量不用。

#查找某个命令或文件属于那个软件包(生产常用)
[root@oldboy ~]# yum provides /etc/my.cnf
[root@oldboy ~]# yum provides cd

进程:

程序:放在磁盘里的代码文件,或软件
进程:把程序运行,就是进程. 放在内存.
[守护]进程:持续运行的进程. crond持续运行.

查看进程:

ps命令:
ps命令用于列出执行ps命令的那个时刻的进程快照,就像用手机给进程照了一张照片。
动态查看top
常用:
-e 显示所有进程※
-f 额外显示UID、PPID、C与STIME栏位※

常用命令:
ps -ef #简易查看进程,过滤进程的命令。

[root@oldboy ~]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 Jun02 ? 00:00:06 /usr/lib/systemd/systemd --system --des
root 2 0 0 Jun02 ? 00:00:00 [kthreadd]
root 4 2 0 Jun02 ? 00:00:00 [kworker/0:0H]
root 6 2 0 Jun02 ? 00:00:09 [ksoftirqd/0]
root 7 2 0 Jun02 ? 00:00:00 [migration/0]
root 8 2 0 Jun02 ? 00:00:00 [rcu_bh]

PID为1的初始进程,C7:systemd,C6:init

输出信息中各列的说明如下。
UID:进程被该UID所拥有,程序运行必须要有用户,一般是虚拟用户。
PID:进程的标识号;Process ID
PPID:进程的父进程的标识号;
C:CPU使用的资源百分比;
STIME:进程开始的时间;
TTY :该进程是在哪个终端机上面运作,若与终端机无关,则显示?,另外, tty1-tty6是本机上面的登入者进程,若为pts/0等,则表示为由网络连接进主机的进程;
TIME:进程所使用的总的CPU时间;
CMD:正在执行的命令行。

ps -ef 用户查看什么进程的时候.

[root@oldboy ~]# ps aux #***
#<== BSD格式参数,使用a选项和x选项显示所有进程,使用u选项显示进程的用户信息。

[root@oldboy ~]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 46368 6700 ? Ss Jun02 0:06 systemd --system --deserialize 18
root 2 0.0 0.0 0 0 ? S Jun02 0:00 [kthreadd]
root 4 0.0 0.0 0 0 ? S< Jun02 0:00 [kworker/0:0H]

输出信息中各列的说明如下。
USER:该进程属于的用户;
PID :该进程的进程号;

%CPU:该进程使用掉的CPU资源百分比;*****
%MEM:该进程所占用的物理内存百分比;*****
VSZ :(Virtual Size)进程占用的虚拟内存量 (单位Kb);*****
RSS :该进程占用的物理内存大小 (单位Kb);*****

TTY :该进程是在哪个终端机上面运作的,若与终端机无关,则显示?,另外, tty1-tty6是本机上面登入者进程,若为pts/0等,表示为由网络连接进主机进程;
STAT:该进程目前的状态
START:该进程被触发启动的时间;
TIME :该进程实际使用 CPU 运作的时间;
COMMAND:该进程的实际命令,[ 方括号 ] 属于内核态的进程。 没有 [ ] 的是用户态进程。。

STAT:该进程目前的状态,主要的状态包括
R :正在运行,或者是可被运行。
S :正在中断睡眠中,可被某些信号(signal) 唤醒。
D :不可中断睡眠。
T :正在侦测或者是停止了。
Z :已经终止,但是其父进程无法正常终止他,造成 zombie (疆尸) 进程的状态。
+ :前台进程。
l :多线程进程。
N :低优先级进程。
< :高优先级进程。
s :进程领导者。
L : 已将页面锁定到内存中。

总结:
ps aux
a 显示与终端相关的所有进程,包含每个进程的完整路径※
u 显示进程的用户信息※
x 显示与终端无关的所有进程※

ps -ef
-e 显示所有进程※
-f 额外显示UID、PPID、C与STIME栏位※

企业如何用?
查找占用 cpu mem 虚拟内存 更多的进程,
分析进程的问题,解决问题,把资源降下来。
如果发现没有异常,还无法降下来,就增加资源

维护服务器性能:CPU、内存、IO

倒序排序
[root@oldboy ~]# ps -eo “%p %C %z %c” --sort -vsz|head
PID %CPU VSZ COMMAND
1053 0.0 612376 polkitd
20524 0.0 574284 tuned
1080 0.0 474920 NetworkManager
21554 0.0 228456 abrtd
21581 0.0 225940 abrt-watch-log
21299 0.0 218528 rsyslogd
20759 0.0 199460 vmtoolsd
20758 0.0 168304 VGAuthService
1641 0.0 154848 sshd

ps -eo “%p %C %z %c” --sort vsz #升序

ps aux --sort vsz #–sort 加上对应格式,可以进行排序
ps aux --sort -vsz |head #–sort后面加上 -(减号)表示逆序排序

pstree:显示进程状态树
【功能说明】
pstree命令以树形结构显示进程和进程之间的关系。

[root@oldboy html]# pstree
systemd─┬─NetworkManager───2*[{NetworkManager}]
├─VGAuthService
├─abrt-watch-log
├─abrtd
├─agetty
├─anacron
├─auditd───{auditd}
├─crond
├─dbus-daemon───{dbus-daemon}
├─lvmetad
├─master─┬─pickup
│ └─qmgr
├─nginx───nginx
├─polkitd───6*[{polkitd}]
├─rsyslogd───2*[{rsyslogd}]
├─sshd───sshd───bash───pstree
├─systemd-journal
├─systemd-logind
├─systemd-udevd
├─tuned───4*[{tuned}]
└─vmtoolsd───2*[{vmtoolsd}]

-a 显示启动每个进程对应的完整指令,包含启动进程的路径、参数等
-c 显示的进程中包含子进程和父进程
-h 对现在执行的程序进行特别标注
-n 根据进程PID号来排序输出,默认是以程序名称排序输出的
-p 显示进程的PID
-u 显示进程对应的用户名称

top:实时显示系统中各个进程的资源占用状况*****
【语法格式】top [选项]

参数选项 解释说明(带※的为重点)
-a 将进程按照使用内存排序
-b 以批处理模式显示进程信息,输出结果可以传递给其他程序或写入到文件中。
-c 显示进程的整个命令路径,而不是只显示命令名称
-d 指定每两次屏幕信息刷新之间的时间间隔(top -d 1)
-H 指定这个可以显示每个线程的情况,否则就是进程的总的状态
-i 不显示闲置或者僵死的进程信息
-n top输出信息更新的次数,完成后将退出top命令
-p 显示指定的进程信息(top -p 进程号)

重点:top输出
top - 01:12:32 up 2 days, 2:47, 2 users, load average: 0.00, 0.01, 0.05
第一行:任务队列信息,同uptime命令的执行结果。
01:12:32 当前系统时间。
up 2 days, 2:47 系统已经运行了1天16小时36分。
2 users 当前有2个用户登录系统。
load average: 0.00, 0.01, 0.05 — load average 平均负载情况*****
*****后面的三个数分别是1分钟、5分钟、15分钟的平均负载情况。
【体现系统繁忙的重要简单的查看指标】
CPU是5核,负载超过5就繁忙的临界点.

Tasks: 105 total, 1 running, 104 sleeping, 0 stopped, 0 zombie
第二行,Tasks为任务(进程)。
从上面的信息可以看出,
系统现在共有105个进程,其中处于运行状态的有1个,
104个在休眠(sleep),stoped状态0个,zombie状态(僵死)的有0个。
STAT:该进程目前的状态,主要的状态包括
R :正在运行或者是可被运行。
S :正在中断睡眠中,可被某些信号(signal) 唤醒。
D :不可中断睡眠。
T :正在侦测或者是停止了。
Z :已经终止,但是其父进程无法正常终止他,造成 zombie (疆尸) 进程的状态。

%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
第三行,CPU状态信息。
0.0% us (user)用户空间占用CPU的百分比(如:应用程序、执行命令)。*****
0.0% sy (system)内核空间占用CPU的百分比(如:内核进程、硬件磁盘操作)。*****
0.0% ni (nice)改变过优先级的进程占用CPU的百分比。
100.0% id (idle)空闲CPU百分比,数值越大,CPU越空闲。*****
0.0% wa (wait)IO等待占用CPU的百分比。*****

0.0% hi   (hard Interrupts)硬中断(Hardware IRQ)占用CPU的百分比。
0.0% si   软中断(Software Interrupts)占用CPU的百分比。
  0.0% st   虚拟机占用CPU的百分比。
  • 1
  • 2
  • 3

KiB Mem : 4026136 total, 203768 free, 228476 used, 3593892 buff/cache
第四行,内存状态。
KiB Mem : 995684 total, 87984 free, 234516 used, 673184 buff/cache
内存:
4026136 total #内存一共多大
203768 free #可用内存,剩余内存
228476 used #已经使用的内存
3593892 buff/cache #系统缓存和缓冲占用内存空间

KiB Swap: 2097148 total, 2097148 free, 0 used. 3531892 avail Mem
第五行,swap交换分区信息。
12097148 total 交换区总量。
0k used 使用的交换区总量。
2097148 free 空闲交换区总量。
3531892 avail Mem 可用内存大小
以上两行: cat /proc/meminfo或free -m获取。

增加swap分区
[root@oldboy html]# mkswap /dev/sdb3
正在设置交换空间版本 1,大小 = 102396 KiB
无标签,UUID=7994e3a7-2222-4d1a-8682-7f484d866709
[root@oldboy html]# swapon /dev/sdb3
[root@oldboy html]# free -m
total used free shared buff/cache available
Mem: 3931 284 3004 11 642 3404
Swap: 2147 0 2147

快捷键:
l,t,m #显示/隐藏前5行的数据输出

从第七行开始,给出的是各进程(任务)的状态监控。
PID 进程id。
USER 进程所有者。
PR 进程优先级。
NI nice值,负值表示高优先级,正值表示低优先级。

VIRT 进程使用的虚拟内存总量,单位kb。*****
RES 进程使用的、未被换出的物理内存大小,单位kb。*****
SHR 共享内存大小,单位kb。*****
S 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程。
%CPU 上次更新到现在的CPU时间占用百分比。*****
%MEM 进程使用的物理内存百分比。*****

TIME+ 进程使用的CPU时间总计,单位1/100秒。
COMMAND 进程名称(命令名/命令行)。

老男孩Linux77期:
Linux运维交流QQ群:784850820(暗号:oldboy)

top必会快捷键指令(老男孩抓重点思想)
1 #查看系统核心总数, 类似于 lscpu(CPUs)
q #退出top
M #按内存使用百分比排序输出
P #按CPU使用百分比排序输出
R #对已排序的列反转排序
###抓重点显示,有助于查看的指令。
x #高亮显示排序的列
z #以彩色信息展示
b #高亮显示处于R状态的进程

或< #改变排序的列,依然高亮显示。
#top熟悉了解的快捷键
h #查看帮助
l,t,m #显示/隐藏前5行的数据输出

查进程:
ps
top

杀进程
kill 进程号
pkill 进程名
killall 进程名

kill 进程号
pkill 进程名
killall 进程名

[root@oldboy html]# ps -ef|grep crond|grep -v grep
root 1102 1 0 08:31 ? 00:00:00 /usr/sbin/crond -n
[root@oldboy html]#
[root@oldboy html]#
[root@oldboy html]# kill 1102 #kill 进程号
[root@oldboy html]# ps -ef|grep crond|grep -v grep

[root@oldboy html]# systemctl start crond
[root@oldboy html]# ps -ef|grep crond|grep -v grep
root 2837 1 82 10:30 ? 00:00:00 /usr/sbin/crond -n

杀不掉:
kill -9 2837

[root@oldboy html]# kill -9 2837
[root@oldboy html]# ps -ef|grep crond|grep -v grep

问题:导致进程起不来.
web,crond没有数据的软件 kill -9 进程号
重的服务不能kill -9
数据库:
mysql oracle mongodb

pkill,killall
[root@oldboy html]# systemctl start crond
[root@oldboy html]# pkill crond
[root@oldboy html]# ps -ef|grep crond|grep -v grep

[root@oldboy html]# systemctl start crond
[root@oldboy html]# ps -ef|grep crond|grep -v grep
root 2895 1 9 10:33 ? 00:00:00 /usr/sbin/crond -n
[root@oldboy html]# killall crond
[root@oldboy html]# ps -ef|grep crond|grep -v grep

[root@oldboy html]# systemctl start crond
[root@oldboy html]#
[root@oldboy html]# ps -ef|grep crond|grep -v grep
root 2916 1 28 10:34 ? 00:00:00 /usr/sbin/crond -n
[root@oldboy html]#
[root@oldboy html]#
[root@oldboy html]# killall -9 crond
[root@oldboy html]# ps -ef|grep crond|grep -v grep

守护进程:默认都放在后台运行

昨日作业:定时任务 备份
[root@oldboy html]# mkdir /server/scripts -p

[root@oldboy scripts]# cat tar.sh
tar zcf /tmp/etc_$(date +%F).tar.gz /etc

[root@oldboy scripts]# crontab -l|tail -2
###备份 by oldboy for dingjunwei
00 00 * * * /bin/sh /server/scripts/tar.sh &>/dev/null

进程前后台切换:
[root@oldboy scripts]# sh tar.sh
tar: 从成员名中删除开头的“/”
^Z ##ctrl+z 暂停
[1]+ 已停止 sh tar.sh

[root@oldboy scripts]# bg #后台
[1]+ sh tar.sh &

[root@oldboy scripts]# ps -ef|grep tar
root 3054 1822 0 10:46 pts/0 00:00:00 sh tar.sh
root 3066 1822 0 10:47 pts/0 00:00:00 grep --color=auto tar

[root@oldboy scripts]# fg #前台
sh tar.sh
^C #ctrl+c停止
[root@oldboy scripts]# ps -ef|grep tar
root 3068 1822 0 10:47 pts/0 00:00:00 grep --color=auto tar

##直接放到后台.用于开发人员写脚本.
[root@oldboy scripts]# sh tar.sh & ##直接放到后台.用于开发人员写脚本.

正则表达式
开发正则(PERL) 复杂
使用范围:
Linux正则表达式(grep,egrep,sed,awk)

作用:使用正则表达式可以更快的找到想要找的内容.

#测试准备:
cat >>/etc/profile<<EOF #<==注意EOF后面不要有多余的空格。
export LC_ALL=C
EOF #<==注意EOF前后都没有空格或其他符号。
source /etc/profile #<==使修改的内容生效。

mkdir ~/test -p
cat >~/test/oldboy.txt<<EOF
I am oldboy teacher!
I teach linux.

I like badminton ball ,billiard ball and chinese chess!
our site is http://www.oldboyedu.com
my qq num is 49000448.

not 4900000448.
my god ,i am not oldbey,but OLDBOY!
EOF
cd ~/test
cat oldboy.txt

[基础正则表达式]字符说明及实践:
使用特殊的符号,表示特殊的作用…

给要过滤的内容添加标识,然后把符合标识的内容过滤。

^ 尖角号,用法为^oldboy,表示匹配以oldboy单词开头的行

[root@oldboy test]# grep ^I oldboy.txt #输出以I开头的行
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!

[root@oldboy test]# ls -l ~|grep ^d #输出以d开头的行
drwxr-xr-x. 2 1000 root       33 Jul  1  2030 abc
drwxr-xr-x. 2 root root       45 Jun  6  2019 girlLove
drwxr-xr-x. 3 root root       17 May  8  2021 oldboy_dir
drwxr-xr-x. 2 root root       24 May 25 11:24 test
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

$ 美元符,用法为oldboy$,表示匹配以oldboy单词结尾的行

[root@oldboy test]# grep m$ oldboy.txt #输出以m结尾的行
our site is http://www.oldboyedu.com

[root@oldboy test]# ls -lF ~|grep /$
drwxr-xr-x. 2 1000 root 33 Jul 1 2030 abc/
drwxr-xr-x. 2 root root 45 Jun 6 2019 girlLove/
drwxr-xr-x. 3 root root 17 May 8 2021 oldboy_dir/
drwxr-xr-x. 2 root root 24 May 25 11:24 test/

^$ 组合符,表示空行,逻辑解释就是以^结尾的行,或者以KaTeX parse error: Expected 'EOF', got '#' at position 24: …ot@oldboy test]#̲ cat oldboy.txt… oldboy.txt

[root@oldboy test]# grep -n ^$ oldboy.txt #输出空行并打印行号
3:
7:

. 点号,表示匹配任意一个且只有一个字符(但是不能匹配空行)

[root@oldboy test]# grep . oldboy.txt
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
our site is http://www.oldboyedu.com
my qq num is 49000448.
not 4900000448.
my god ,i am not oldbey,but OLDBOY!
[root@oldboy test]# grep -n . oldboy.txt
1:I am oldboy teacher!
2:I teach linux.
4:I like badminton ball ,billiard ball and chinese chess!
5:our site is http://www.oldboyedu.com
6:my qq num is 49000448.
8:not 4900000448.
9:my god ,i am not oldbey,but OLDBOY!

\ 转义字符,让有特殊含义的字符脱掉马甲,现出原形,如.只表示小数点
[root@oldboy test]# grep “.” oldboy.txt #匹配带点的行
I teach linux.
our site is http://www.oldboyedu.com
my qq num is 49000448.
not 4900000448.
[root@oldboy test]# grep “.KaTeX parse error: Expected 'EOF', got '#' at position 14: " oldboy.txt #̲匹配以点结尾的行 I teac…” oldboy.txt #匹配以任意一个字符结尾的行
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
our site is http://www.oldboyedu.com
my qq num is 49000448.
not 4900000448.
my god ,i am not oldbey,but OLDBOY!

  • 重复前一个字符(连续出现)0次或N次
    0*
    包含:

    0
    00
    00000

[root@oldboy test]# grep “0*” oldboy.txt
I am oldboy teacher!
I teach linux.

I like badminton ball ,billiard ball and chinese chess!
our site is http://www.oldboyedu.com
my qq num is 49000448.

not 4900000448.
my god ,i am not oldbey,but OLDBOY!
[root@oldboy test]# grep “00*” oldboy.txt
my qq num is 49000448.
not 4900000448.

注意,当重复0次的时候,表示啥也没有(空),即匹配所有内容

.* 组合符,匹配所有内容
[root@oldboy test]# grep “.*” oldboy.txt
I am oldboy teacher!
I teach linux.

I like badminton ball ,billiard ball and chinese chess!
our site is http://www.oldboyedu.com
my qq num is 49000448.

not 4900000448.
my god ,i am not oldbey,but OLDBOY!

^.* 组合符,匹配以任意多个字符开头的内容

.*$ 组合符,以任意多个字符结尾的内容

测试题:
1.过滤/etc/passwd中以nologin结尾的行。
grep “nologin$” /etc/passwd

2.过滤/etc/passwd中以o开头的行。
grep “^o” /etc/passwd

3.过滤/etc/passwd中至少含有1个0字符串的行。
grep “00*” /etc/passwd

4.过滤/etc/passwd中的空行。
grep “^$” /etc/passwd

5.过滤/etc/目录中(不含子目录)下的所有文件。
ls -l /etc|grep “^-”

6.过滤/etc/services中含有点号的行。
grep “.” /etc/services

同时过滤多个字符串
egrep ==grep -E

[root@oldboy test]# grep -E “oldboy|linux” oldboy.txt
I am oldboy teacher!
I teach linux.
our site is http://www.oldboyedu.com
[root@oldboy test]#
[root@oldboy test]#
[root@oldboy test]#
[root@oldboy test]# grep -E “^m|mKaTeX parse error: Expected 'EOF', got '#' at position 129: …ot@oldboy test]#̲ [root@oldboy …” oldboy.txt
our site is http://www.oldboyedu.com
my qq num is 49000448.
my god ,i am not oldbey,but OLDBOY!

[abc] 匹配任意一个字符
[root@oldboy test]# egrep “[abc]” oldboy.txt
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
our site is http://www.oldboyedu.com
my god ,i am not oldbey,but OLDBOY!

[^abc] 取反
[root@oldboy test]# egrep “[^abc]” oldboy.txt
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
our site is http://www.oldboyedu.com
my qq num is 49000448.
not 4900000448.
my god ,i am not oldbey,but OLDBOY!

扩展正则:
grep -E ====egrep

  • 匹配前一个字符1次或多次

和前面*区别,*可以匹配0次。

grep “0*” oldboy.txt #匹配0个0,或1个0或多个0
egrep “0+” oldboy.txt #1个0或多个0

[root@oldboy test]# grep “0*” oldboy.txt
I am oldboy teacher!
I teach linux.

I like badminton ball ,billiard ball and chinese chess!
our site is http://www.oldboyedu.com
my qq num is 49000448.

not 4900000448.
my god ,i am not oldbey,but OLDBOY!
[root@oldboy test]# egrep “0+” oldboy.txt
my qq num is 49000448.
not 4900000448.

? 匹配前一个字符0次或1次
[root@oldboy test]# egrep “0?” oldboy.txt
I am oldboy teacher!
I teach linux.

I like badminton ball ,billiard ball and chinese chess!
our site is http://www.oldboyedu.com
my qq num is 49000448.

not 4900000448.
my god ,i am not oldbey,but OLDBOY!
:::
///
:d::f
/etc/oldboy//

| 表示或者,即同时过滤多个字符串
[root@oldboy test]# egrep “000|oldboy” oldboy.txt
I am oldboy teacher!
our site is http://www.oldboyedu.com
my qq num is 49000448.
not 4900000448.
/etc/oldboy//

同时过滤多个字符串
egrep ==grep -E

[root@oldboy test]# grep -E “oldboy|linux” oldboy.txt
I am oldboy teacher!
I teach linux.
our site is http://www.oldboyedu.com
[root@oldboy test]#
[root@oldboy test]#
[root@oldboy test]#
[root@oldboy test]# grep -E “^m|mKaTeX parse error: Expected 'EOF', got '#' at position 129: …ot@oldboy test]#̲ [root@oldboy …” oldboy.txt
our site is http://www.oldboyedu.com
my qq num is 49000448.
my god ,i am not oldbey,but OLDBOY!

老男孩Linux77期视频 老男孩老师亲授(202107最新录制)
https://www.bilibili.com/video/BV1n64y1t7yR

day9-10
网络知识
iptables
day11-12
搭建web服务
LNMP 搭建博客和知乎产品
了解网站访问的流程
数据库
day11-12
Shell编程

老男孩培训第十一天

HTTP的重要应用之一是WWW服务

HTTP协议,全称HyperText Transfer Protocol,中文名为超文本传输协议,
是互联网中最常用的一种网络协议。HTTP的重要应用之一是WWW服务。设计HTTP协议最初的目的就是提供一种发布和接收HTML(一种页面标记语言)页面的方法。

WWW服务提供一种发布和接收HTML(一种页面标记语言)页面的应用。

HTTP协议的WWW服务应用的默认端口为80

加密的www服务,https的默认端口为443(openssl)

WWW,全称World Wide Web,常称为Web,中文译为“万维网”。 它是目前互联网上最受用户欢迎的信息服务形式。
HTTP协议的WWW服务应用的默认端口为80,另外的一个加密的WWW服务应用https的默认端口为443,主要用于网银、支付等和钱相关的业务。当今,HTTP服务、WWW服务、Web服务三者的概念已经混淆了,在本书中也视为相同,都是指当下最常见的网站服务应用。

静态:
静态语言html,css,js
静态资源.jpg,.avi,mp4,zip,rar
静态服务:Nginx(流行的静态服务软件),Apache,IIS(windowsweb服务软件)

动态:
动态语言:java(低于本科),python(万能\工具),go语言(高并发应用,用来替代C,C++).PHP(专注于网页开发)
动态资源:.jsp,.py,.php,.do
动态服务:PHP-fpm,java(tomcat,jboss,weblogic,resin),python,go

1.什么是LNMP?

2010前 LAMP Linux、Apache、MySQL、PHP(1999-2017,兄弟连 2-3个亿)
2010年后 LNMP,Linux Nginx MySQL(MariaDB) PHP/Python
LEMP,Linux Nginx(engine x) MySQL(MariaDB) PHP/Python
JAVA LNTM,Linux,Nginx,tomcat,MySQL

LNMP,Linux Nginx MariaDB PHP

数据库:存储数据的仓库(文本数据)
MySQL和MariaDB

MySQL被oracle公司收购10亿美金.创始人出来创建了一个MariaDB
linux 官方把MariaDB加入yum源.

**2.LNMP架构流程

**3搭建LNMP准备

1)关闭selinux:
setenforce 0
getenforce
sed -i ‘s#SELINUX=enforcing#SELINUX=disabled#g’ /etc/selinux/config

2)关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

**4.搭建LNMP架构

L N M P

  1. 使用官方仓库安装Nginx

yum revmove nginx -y ##卸载旧版本nginx
rpm -e nginx

##调整yum源优先级
[root@web01 ~]# rpm -qa yum-plugin-priorities
[root@web02 ~]# yum install yum-plugin-priorities -y

##配置yum源
[root@web01 ~]# vim /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/ r e l e a s e v e r / releasever/ releasever/basearch/
gpgcheck=0
priority=1

##安装Nginx 能够上网
[root@web01 ~]# yum install nginx -y

[root@oldboy ~]# nginx -v
nginx version: nginx/1.20.1

##配置Nginx进程运行的用户
[root@oldboy ~]# useradd -u1111 www -s /sbin/nologin -M
[root@oldboy ~]#
[root@oldboy ~]# egrep “^user” /etc/nginx/nginx.conf
user nginx;
[root@oldboy ~]# id www
uid=1111(www) gid=1111(www) 组=1111(www)
[root@oldboy ~]# sed -i ‘/^user/c user www;’ /etc/nginx/nginx.conf
[root@oldboy ~]# egrep “^user” /etc/nginx/nginx.conf
user www;

检查语法:大家应该不会出现
[root@oldboy ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: [emerg] mkdir() “/var/lib/nginx/tmp/client_body” failed (2: No such file or directory)
nginx: configuration file /etc/nginx/nginx.conf test failed

[root@oldboy ~]# mkdir -p /var/lib/nginx/tmp/
[root@oldboy ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

[root@oldboy ~]# systemctl start nginx
[root@oldboy ~]# systemctl enable nginx ##开机自启动
[root@oldboy ~]# netstat -lntup|grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1917/nginx: master
tcp6 0 0 :::80 ::

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小桥流水78/article/detail/907220
推荐阅读
相关标签