1.第一台计算机诞生的时间为:1946年。
2.冯诺依曼体系体系结构。
3.二进制和十进制转换。
二进制和十进制之间转换可根据下表操作。
4.Unix的哲学思想?
5.硬盘存储术语CHS:
6.识别SSD和机械硬盘类型?
备注:1表示机械盘,0表示SSD盘
#lsblk -d -o name,rota
NAME ROTA
sda 1
sdb 1
sdc 1
7.MBR分区:使用32位表示扇区数,分区的磁盘不能超过2T。MBR分区中一块硬盘最多有4个主分区,也可以3主分区+1个扩展分区,多个逻辑分区。主分区和扩展分区对应的1-4,逻辑分区从5开始。
8.GPT分区,支持128个分区,使用64位,支持8Z
UEFI统一可扩展固件接口,硬件支持GPT,是得操作系统可以使用。
9.管理磁盘常用命令:
lsblk -->列出块设备
创建分区命令:
fdisk:管理MBR分区
gdisk:管理GPT分区
parted:高级分区,可以是交互式或非交互式
注意:parted的操作都是实时生效的,小心使用。
partprobe:更新内存中的磁盘分区表版本,适用于处CentOS6以为的其他版本5,7,8
10.mount挂载:
默认权限相当于rw, suid, dev, exec, auto, nouser, async
挂载规则:
一个挂载点同一时间只能挂载一个设备
一个挂载点同一时间挂载了多个设备,只能看到最后一个设备的数据,其它设备上的数据将被隐藏
一个设备可以同时挂载到多个挂载点
通常挂载点一般是已存在空的目录
将挂载保存到 /etc/fstab 中可以下次开机时,自动启用挂载
11.swap交换分区:
swapon 启用交换分区。
swapoff 关闭交换分区。
-a:激活所有的交换分区
-p PRIORITY:指定优先级,也可在/etc/fstab 在第4列指定:pri=value
SWAP交换分区可以指定swap分区0到32767的优先级,值越大优先级越高
系统默认从-1开始,每加一个新的交换分区,给该交换分区的优先级减一
12.官方推荐系统swap空间:
系统中的RAM量 | 推荐的swap空间 | 允许休眠的建议swap空间大小 |
---|---|---|
低于2GB | RAM量的2倍数 | RAM容量的三倍 |
2GB-8GB | 等于RAM量 | RAM量的倍数 |
8GB-64GB | 4GB到RAM容量的0.5倍 | RAM容量的1.5倍 |
超过64GB | 独立负载(至少4GB) | 不建议使用休眠功能 |
后面搭建k8s时,需要禁用swap
13. RAID0、RAID1、RAID5、RAID6、RAID10之间的区别:
RAID等级 | 最少硬盘 | 最大容错 | 可用容量 | 读取性能 | 写入性能 | 安全性 | 目的 | 应用场景 |
---|---|---|---|---|---|---|---|---|
0 | 1 | 0 | n | n | n | 一个硬盘异常,全部硬盘都会异常 | 追求最大容量、速度 | 影片剪接,缓存用途 |
1 | 2 | n-1 | 1 | n | 1 | 高,一个正常即可 | 追求最大安全性 | 个人、企业备份 |
5 | 3 | 1 | n-1 | n-1 | n-1 | 高 | 最求最大容量、最小预算 | 个人、企业备份 |
6 | 4 | 2 | n-2 | n-2 | n-2 | 安全性较RAID5高 | 同RAID5,但教安全 | 个人、企业备份 |
10 | 4 | 高 | 综合RAID0/1优点,理论速度较快 | 大型数据库、服务器 |
14.df与du的区别?什么时间df>du;什么时间df
文件系统空间实际真正占用等信息的查看工具 df
查看某目录总体空间实际占用状态 du,显示指定目录下面各个子目录的大小,单位为KB
当删除文件但不释放空间时,有什么不同?(du 查看文件空间释放,df不释放)
du查看文件以删除,空间释放;df查看文件系统不释放。
du从文件的角度看,df从分区空间的使用角度看(df可用看到的时真实的)。
df>du是在分区刚挂好的时候,默认地df>du 1.网络的功能和优点 数据和应用程序 资源 网络存储 备份设备 广域网 城域网 局域网 3.开放系统互联OSI模型: 4.网络的三种通讯模式: 5.冲突域和广播域 6.网络的三种通讯机制: 7.局域网的特点、功能、优点: 8.超5类线的双绞线(Twisted-Pair)网线线序 9.网线线缆和接口 10.网桥和交换机: 11.路由器: 12.虚拟局域网VLAN 13.VALN的优点: 虚拟局域网的实现技术 14.TCP/IP 15.TCP/IP分层 16.TCP/IP和OSI模型的比较 17.TCP和UDP 18.TCP头结构(理解) 19.三次握手和四次挥手 20.UDP特性 21.Internet协议 24 25.IP地址可唯一标识IP网络中的每台设备,每台主机(计算机、网络设备、外围设备)必须有唯一的地址。(IP地址是一个32位二进制数) 26.IP地址分类 A类:0-127 B类:128-191 C类:192-223 D类:组(多)播,1110 0000 - 1110 1111.X.Y.Z: 224-239.X.Y.Z 保留未使用,240-255 27.CIDR:无类域间路由,目前的网络已不再按A,B,C类划分网段,可以任意指定网段的范围,网络ID位不固定,按需指定 。 28.子网掩码 29.相关公式 用自已的子网掩码分别和自已的IP及对方的IP相与,比较结果,相同则同一网络,不同则不同网段 30.203.101.123.163/28 31.划分子网: 将一个大网(主机数量多,主机ID位多)分割成多个小网(主机数量少,主机ID位少) ,网络ID向主机ID借N位,将划分成个2^N子网 32.中国移动10.0.0.0/8 给32个各省公司划分对应的子网。 2)每个省公司的子网的主机数有多少? 3)河南省得到第10个子网,网络ID? 4)河南省得到第10个子网的最小IP和最大的IP? 5)所有子网中最大,最小的子网的netid? 33.计算公式 34.路由 路由表组成: 四个组成部分 metric: 费用,值越小,优先级越高 1.什么是shell? 3.软连接与硬链接的区别: 4.下面那个些选项不是将标准输出和错误都重定向到同一个文件中的(E)。 5.案例1:提示空间满No space left on device,但df可以看到空间很多,为什么? 6.案例2:提示空间快满了,使用rm删除了很大的无用文件后,df依然看到空间不足,为什么?如何解决? 7.Linux中的目录和文件的权限区别?(分别说明读,写和执行权限的区别) 8.执行 cp /etc/issue /data/dir/ 所需要的最小权限?(ABCDE) 9.误将 /bin/chmod 文件的执行权限删除,如何恢复? 10.ACL生效的顺序是? 11.误删除了用户git的家目录,如何重建并恢复该用户家目录及相应的权限属性? 12.Linux中新建文件和目录的默认权限为? 13.Linux安全模型: 14.CentOS7/8中生成12位数的随机密码: 15.CentOS6/7/8中生成sha512加密密码的方法: 16.判断一个账户是否为管理员,通过该用户的uid号是否为0来判断。 17.Linux系统中文本查看工具的命令有:cat、nl、tac、rev、more、less、head、tail等 18.统计文件中客户访问前10名的IP信息 备注:该文件的第一列为客户IP 19.找到file1和file2文件中重复的行和不重复的行 或 20.用正则表达式表示QQ、邮箱、手机号码: 21.如何查看当前进程的环境变量? 22.变量的分类: 状态变量: 状态变量是查看上一条命令执行的结果,是否成功。 23.判断磁盘使用率大于80发告警邮件的小脚本。 24.利用扩展正则表达式分别表示0-9、10-99、100-199、200-249、250-255 25.异域实现变量互换: 26.xargs命令的默认功能是接收键盘的标准输入,把输入的结果用xargs传给后续的命令作为参数,默认会将换行换成空格。用xargs可以把一些命令的参数动态生成。 27.使用xargs批量下载视频: 28.统计Linux最新内核的C源码行数: 29.统计光盘BaseOS库目录下的rpm的架构类型及相应的包数量: 1.过滤掉文本中#开头或空行: 2.统计#ss -nta命令的状态出现的次数 3.获取ss -nt命令下的连接IP数量: 4.获取文档中的年龄和: 5.显示CentOS7上所有UID小于1000以内的用户名和UID 6.获取Linux系统中的IP地址: 7.利用df和grep,取出磁盘各分区利用率,并从大到小排序。 8.添加用户bash、testbash、basher、sh、nologin(其shell为/sbin/nologin),找出/etc/passwd用户名和shell同名的行. 9.显示ifconfig命令结果中所有IPv4地址. 10.显示三个用户root、mage、wang的UID和默认shell 11.找出/etc/rc.d/init.d/functions文件中行首为某单词(包括下划线)后面跟一个小括号的行。 12.使用egrep取出/etc/rc.d/init.d/functions中其基名。 13.使用egrep取出上面路径的目录名。 14.统计last命令中以root登录的每个主机IP地址登录次数。 15.将此字符串:welcome to redhat linux 中的每个字符去重并排序,重复次数多的排到前面 Sed是从文件或管道中读取一行,处理一行,输出一行;在读取一行,再处理一行,再输出一行,直到最后一行。sed被称为是行处理器。 2.使用sed初始化网卡名: 3.使用sed获取IP地址的多少写法: 4.使用sed取文件的前缀和后缀: 5.使用sed将非#开头的行加# 6.使用sed将#开头的行删除# 7.使用sed获取分区利用率: 8.使用sed修改内核参数: 9.使用sed过滤掉以#号和空行开头的行: 10.sed引用变量使用单引号时的注意事项: 11.使用sed引用变量实现多点编辑,修改配置文件: 12.修改Linux操作系统密码长度和有效时间的操作: 13.sed的高级用法: 1.gawk:模式扫描和处理语言,可以实现下面功能 语法格式: 常见选项:-F“分隔符”指明输入时用到的字段分隔符,默认的分隔符时若干个连续空白符;-v var=value变量赋值 shell脚本常见的三种错误类型:命令错误、语法错误、逻辑错误。 重复性的工作可以先写好脚本放在自己的服务器上,然后通过命令执行你自己服务器上的脚本。 1.简单实现Linux系统磁盘告警脚本。 2.今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何? 3.判断指定主机网络状态: 4.编写脚本 yesorno.sh,提示用户输入yes或no,并判断用户输入的是yes还是no,或是其它信息。 5.编写脚本 filetype.sh,判断用户输入文件路径,显示其文件类型(普通,目录,链接,其它文件类型)。 6.计算1+2+3+…+100 的结果。请写出多种实现方法: 7.批量创建用户,并设置随机密码。 8.花式打印九九乘法口诀表。 9.PS(1,2,3)的含义: 9.脚本初始化配置
df网络部分
2.网络分类:
分层名称
功能
每层功能概览
对应物理设备及对应的协议
单位
7
应用层
针对特定应用的协议
电子邮件、远程登陆、文件传输
HPPT、FTP、SSH、MySQl等
消息 message
6
表示层
设备固有数据格式和网络标准数据格式的转换。
接收不同变现形式的信息,如文字、图像、声音等
消息 message
5
会话层
通信管理。负责建立和断开通信连接。管理传输层一下的分层
何时建立连接,何时断开连接以及保持多久的连接
消息 message
4
传承层
管理两个节点之间的数据传输。负责可靠传输
是否有数据丢失?
TCP
数据段 segment
3
网络层
地址管理与路由选择
经过那个路由传递到目标地址?
路由器 IP
数据包 packet
2
数据链路层
互连设备之间传递和识别数据帧
数据帧与比特流之间的转换(分段发送)
交换机、 MAC
数据帧 frame
1
物理层
以“0”、“1”代表电压的高低,灯光的闪灭。界定连接器和网线的规格。
比特流与电子信号之间的切换。连接器与网线的规格
数据位 bit
冲突域:两个网络设备同时发送数据,如果发生了冲突,则两个设备处于同一个冲突域,反之,则各自处于不同的冲突域
广播域:一个网络设备发送广播,另一个设备收到了,则两个设备处于同一个广播域,反之,则各自处于不同的广播域
特点:网络为一个单位所拥有;地理范围和站点数目均有限
主要功能:资源共享和数据通信
优点:能方便地共享昂贵的外部设备,主机以及软件、数据。从一个站点可以访问权威;便于系统的扩展和逐渐演变,各设备的位置可灵活的调整和改变;提高系统的可靠性、可用性、易用性。
T568B和T568A
T568B的线序为:橙白、橙、绿白、蓝、蓝白、绿、棕白、棕
T568A的线序为:白绿 绿 白橙 蓝 白蓝 橙 白棕 棕
网桥bridge:也叫桥接器,是连接两个局域网的一种存储/转发设备,根据MAC地址表对数据帧进行转发,可隔离碰撞域。网桥将网络的多个网段在数据链路层连接起来,并对网络数据帧进行管理
交换机:是工作在OSI参考模型数据链路层的设备,外表和集线器相似
它通过判断数据帧的目的MAC地址,从而将数据帧从合适端口发送出去
交换机是通过MAC地址的学习和维护更新机制来实现数据帧的转发。
交换机的工作原理:
(1)交换机根据收到数据帧中的源MAC地址建立该地址同交换机端口的映射,并将其写入MAC地址表中
(2)交换机将数据帧中的目的MAC地址同已建立的MAC地址表进行比较,以决定由哪个端口进行转发
(3)如数据帧中的目的MAC地址不在MAC地址表中,则向所有端口转发。这一过程称为泛洪(flood)
(4)广播帧和组播帧向所有的端口转发
路由:把一个数据包从一个设备发送到不同网络里的另一个设备上去。这些工作依靠路由器来完成。路由器只关心网络的状态和决定网络中的最佳路径。路由的实现依靠路由器中的路由表来完成
路由器功能:
VLAN工作原理:虚拟局域网 VLAN 是由一些局域网网段构成的与物理位置无关的逻辑组。这些网段具有某些共同的需求。每一个 VLAN 的帧都有一个明确的标识符,指明发送这个帧的工作站是属于哪一个 VLAN。虚拟局域网其实只是局域网给用户提供的一种服务,而并不是一种新型局域网。
(1)基于端口的VLAN
(2)基于MAC地址的VLAN
(3)基于协议的VLAN
(4)基于网络地址的VLAN
Transmission Control Protocol/Internet Protocol 传输控制协议/因特网互联协议
TCP/IP是一个Protocol Stack,包括TCP、IP、UDP、ICMP、RIP、TELNET、FTP、SMTP、ARP等许多协议
TCP/IP4层模型
应用层---->应用层、表示层、会话层
传输层---->传输层
互联网层---->网络层
网络接口层---->数据链路层、物理层
相同点:两者都是以协议栈的概念为基础;协议栈种的协议批次相互独立;下层对上层提供服务。
不同点:OSI是先有模型;TCP/IP 是先有协议,后有模型
OSI是国际标准,适用于各种协议;TCP/IP实际标准,只适用于TCP/IP网络;
层次数量不同
Reliable
Best-Effort
Connection Type
Connection-oriented
Connectionless
Protocol
TCP
UDP
Sequencing
Yes
No
Uses
E-mail、File sharing、Downloading
Voice streaming、Video streaming
源端口、目标端口:源/目标端口用16位表示的,可得计算机端口个数位:2^16个,即65536个
序列号:表本报文段所发送数据的第一个字节的编号。TCP连接中所传送的字节流的每一个字节都会按顺序编号。由于序列号由32位表示,所以每2^32个字节,就会出现序列号回绕,再次从0 开始。
确认号:表示接收方期望收到发送方下一个报文段的第一个字节数据的编号。也就是告诉发送方:我希望你(指发送方)下次发送的数据的第一个字节数据的编号为此确认号。
数据偏移:表示TCP报文段的首部长度,该字段的单位是32位(即4个字节为计算单位),4位二进制最大表示15,所以数据偏移也就是TCP首部最大60字节
URG:表示本报文段中发送的数据是否包含紧急数据。后面的紧急指针字段(urgent pointer)只有当URG=1时才有效。
ACK:表示是否前面确认号字段是否有效。只有当ACK=1时,前面的确认号字段才有效。TCP规定,连接建立后,ACK必须为1,带ACK标志的TCP报文段称为确认报文段。
PSH:提示接收端应用程序应该立即从TCP接收缓冲区中读走数据,为接收后续数据腾出空间。如果为1,则表示对方应当立即把数据提交给上层应用,而不是缓存起来,如果应用程序不将接收到的数据读走,就会一直停留在TCP接收缓冲区中。
RST:如果收到一个RST=1的报文,说明与主机的连接出现了严重错误(如主机崩溃),必须释放连接,然后再重新建立连接。或者说明上次发送给主机的数据有问题,主机拒绝响应,带RST标志的TCP报文段称为复位报文段。
SYN:在建立连接时使用,用来同步序号。当SYN=1,ACK=0时,表示这是一个请求建立连接的报文段;当SYN=1,ACK=1时,表示对方同意建立连接。SYN=1,说明这是一个请求建立连接或同意建立连接的报文。只有在前两次握手中SYN才置为1,带SYN标志的TCP报文段称为同步报文段。
FIN:表示通知对方本端要关闭连接了,标记数据是否发送完毕。如果FIN=1,即告诉对方:“我的数据已经发送完毕,你可以释放连接了”,带FIN标志的TCP报文段称为结束报文段。
窗口大小:表示现在允许对方发送的数据量,也就是告诉对方,从本报文段的确认号开始允许对方发送的数据量,达到此值,需要ACK确认后才能再继续传送后面数据,由Window size value * Window size scaling factor(此值在三次握手阶段TCP选项Window scale协商得到)得出此值。
校验和:提供额外的可靠性。
紧急指针:标记紧急数据在数据字段中的位置。
选项部分:其最大长度可根据TCP首部长度进行推算。TCP首部长度用4位表示,选项部分最长为:(2^4-1)*4-20=40字节
TCP三次握手:客户A与服务器B通信
A主动向B发起请求SYN=1,seq=x
B收到后,返回一个SYN=1,ACK=1,seq=y,ack=x+1
然后,A在给B发送一个ACK=1,seq=x+1,ack=y+1 确认建立连接,开始传递数据。
TCP四次挥手:客户端A与服务器B
A主动发起关闭FIN=1,seq=u 这时A处于终止等待状态(FIN-WAIT1)
B收到后返回一个ACK=1,seq=v,ack=u+1 这时B处于关闭等待状态(CLOSE-WAIT)
这个时候可能还会有数据传送。等待数据传送完后
B在给A发个关闭确认请求FIN=1,ACK=1,seq=w,ack=u+1 这时B处于最后确认状态(LAST-ACK)A处于终止等待状态2(FIN-WAIT2)
A等待2s后返回确认断开ACK=1,seq=u+1,ack=w+1 A处于时间等待状态(TIME-WAIT)
工作在传输层、提供不可靠的网络访问、非面向连接协议、有限的错误检查、传输性能高、无数据恢复特性
IP地址由两部分组成
网络 ID:标识网络,每个网段分配一个网络ID,处于高位
主机 ID:标识单个主机,由组织分配给各设备,处于低位
IPv4地址格式:点分十进制记法
网络ID位是最高8位,主机ID是24位低位
网络数:126=2^7(可变是的网络ID位数)-2
每个网络中的主机数:2^24-2=16777214
默认子网掩码:255.0.0.0
私网地址:10.0.0.0
网络ID位是最高16位,主机ID是16位低位
网络数:2^14=16384
每个网络中的主机数:2^16-2=65534
默认子网掩码:255.255.0.0
私网地址:172.16.0.0-172.31.0.0
网络数:2^21=2097152
每个网络中的主机数:2^8-2=254
默认子网掩码:255.255.255.0
私网地址:192.168.0.0-192.168.255.0
CIDR 无类域间路由表示法:IP/网络ID位数,如:172.16.0.100/16
netmask: 子网掩码 32bit二进制,和IP成对使用,对应于IP中网络ID为1,对应于主机ID为0
子网掩码的8位:
128 64 32 16 8 4 2 1
——————————
1 0 0 0 0 0 0 0 =128
1 1 0 0 0 0 0 0 =192
1 1 1 0 0 0 0 0 =224
1 1 1 1 0 0 0 0 =240
1 1 1 1 1 0 0 0 =248
1 1 1 1 1 1 0 0 =252
1 1 1 1 1 1 1 0 =254
1 1 1 1 1 1 1 1 =255
1)每个省公司的子网的netmask? 2^5>=32 借5位网络ID
8+5=13
255.248.0.0
2^(32-13)-2=524286
10.00000 000.0.0/13
10.01001 000.0.0/13
10.72.0.0/13
10.01001 000.0.1
10.01001 111.11111111.11111110
10.72.0.1—10.79.255.254
10.00000 000.0.0/13 10.0.0.0/13
10.11111 000.0.0/13 10.248.0.0/13
主机数=2^主机ID-2
网络数=2^可变网络ID
网络ID=IP与netmask
网络路由: 表示一个网段的路由
主机路由: 表示一个主机的路由
默认路由: 所有未知网段的路由 0.0.0.0/0
1)目标网络: 目标主机所在网络ID 172.16.0.0
2)netmask:
3)接口: 当前网络设备的出口
4)网关: 下一个路由器的临近当前路由器的接口的IP,下一跳 next hop
后续再不断更新……
二、Linux基础部分
Shell是Linux系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。
Shell也被称为Linux的命令解释器,Shell本身是一个程序。
2.Linux下的文件类型有:
区别
硬链接
软连接
本质
硬链接本质是同一个文件
软件链接的本质不是同一个问题件
跨设备
不支持
支持
incode
相同
不同
链接数
创建新的硬链接,链接数会增加,删除硬链接,链接数会减少
创建或删除,链接数不会变化
文件夹
不支持
支持
相对路径
原始文件相对路径是相对于当前工作目录
原始文件的相对路径是相对于链接文件的相对路径
删除源文件
只是链接数减一,但链接文件的访问不受影响
链接文件将无法访问
文件类型
和源文件相同
链接文件和源文件无关
文件大小
和源文件相同
源文件的路径的长度
A.[root@centos8 ~]#ls /data /xxx > /data/all.log 2>&1
B.[root@centos8 ~]#ls /data /xxx 2> /data/all.log 1>&2
C.[root@centos8 ~]#ls /data /xxx &> /data/all.log
D.[root@centos8 ~]#ls /data /xxx >& /data/all.log
E.[root@centos8 ~]#ls /data /xxx 2>&1 > /data/all.log
答:因为改分区的incode号使用完了,小文件太多,清理掉不用的小文件就可以了。
答:因为使用rm删除的文件,可能被删除的文件还在被程序占用的。需要用 # lsof | grep deleted 命令找到被删除的文件。然后在kill掉相应的进程就行了。
删除大文件,正确的姿势:#cat /dev/null > /var/log/huge.log
或
#> /data/file.log
区别类型
目录
文件
读 ( r )
使用ls命令查看目录文件
使用文件类查看工具,如cat查看文件内容
写 ( w )
可以在目录下创建/删除文件及目录
可以修改文件中的内容
执行( x )
可cd目录,执行ls -l查看目录元数据(需要配合r权限)
可将文件在系统中运行
A./bin/cp 需要x权限
B./etc/ 需要x权限
C./etc/issue 需要r权限
D./data 需要x权限
E./data/dir 需要w,x权限
解决:两种办法,一种是直接把root用户设置ACL权限,另外一种是将root组设置ACL权限。
所有者,自定义用户,所属组/自定义组,其他人cp -a /etc/skel/. /home/git
chown git:git /home/git
chmod 700 /home/git
新建文件的默认权限: 666-umask,如果所得结果某位存在执行(奇数)权限,则将其权限+1,偶数不变
新建目录的默认权限: 777-umask
非特权用户umask默认是 002
root的umask 默认是 022
资源分派:
Authentication:认证,验证用户身份
Authorization:授权,不同的用户设置不同权限
Accouting|Audition:审计#tr -dc '[:alnum:]' < /dev/urandom | head -c 12
CentOS6:
[root@CentOS6 ~]#grub-crypt --sha-512
CentOS7:
[root@centos7-8 ~]#python -c 'import crypt,getpass;pw="<密码>";print(crypt.crypt(pw))'
CentOS8:
[20:08:05 root@centos8 ~]#openssl passwd -6 <密码>
#cut -d' ' -f1 文件名 |sort |uniq -c| sort -nr | head
#cat file1 file2 | sort | uniq -d #重复的行
#cat file1 file2 | sort | uniq -u #不重复的行
#grep -f file1 file2 #找到两个文件相同行,将第一个文件作为正则表达式
QQ:\<[0-9]{6,12}\>
邮箱:[[:alnum:]_]+@[[:alnum:]_]+\.[[:alnum:]_]+
手机号:\<1[356789][0-9]{9}\>
通过进程号查看对应的环境变量。#pstree -p | grep sshd
|-sshd(37685)---sshd(46034)---sshd(46036)-+-bash(46037)-+-grep(49593)
#cat /proc/46037/environ
内置变量和自定义变量
自定义变量又分为普通变量、环境变量、只读变量
特殊变量:位置变量、状态变量
位置变量:$1 $2 $3……
$*=$@
$0
$#
#echo $?
0
结果为0,则成功;结果为1-255为失败。
后续可以加定时任务,让其自动发邮件。#cat disk_check.sh
#!/bin/bash
WARING=80
DISK=`df | grep "^/dev/sd" |grep -Eo '[0-9]+%' |grep -Eo '[0-9]+' | sort -rn | head -n1`
[ $DISK -ge $WARING ] && echo Disk will be full | mail -s 'Disk Warning' QQ号@qq.com
0-9:#echo {0..255} |tr ' ' '\n'|grep -E '^[0-9]{1}$'
10-99:#seq 255 |grep -E '^[0-9]{2}$'
100-199:#seq 1 255 |grep -E '[0-9]{3}$' |grep '^1[0-9].*'
200-249:#seq 255 |grep -E '^2[0-4][0-9]$'
250-255:#seq 255 |grep -E '^25[0-5]$'
#x=10;y=20;x=$[x^y];y=$[x^y];x=$[x^y];echo x=$x,y=$y
x=20,y=10
#echo {1..5}
1 2 3 4 5
#echo {1..5} |xargs -n1
1
2
3
4
5
#echo {1..5} |xargs -n2
1 2
3 4
5
#批量创建用户
#for i in {1..10};do useradd user$i;done
#批量删除用户
#echo user{1..10}|xargs -n1 userdel -r
#getent passwd
#find /bin/ -perm /7000 |xargs ls -Sl
-rwxr-sr-x. 1 root screen 494040 May 5 18:04 /bin/screen
---s--x--x. 1 root root 165608 May 19 2020 /bin/sudo
-rwsr-xr-x. 1 root root 84296 Aug 13 2020 /bin/gpasswd
-rwsr-xr-x. 1 root root 79648 Aug 13 2020 /bin/chage
-rwsr-xr-x. 1 root root 65904 Nov 9 2019 /bin/crontab
-rwsr-xr-x. 1 root root 61688 May 11 2019 /bin/at
……
#指定字符nul分隔(ascii的0分隔),默认空格分隔
#find -type f -name "*.txt" -print0 |xargs -0 rm
-P3指3个同时下载#yum install python3-pip -y
#pip3 install you-get
#seq 10 | xargs -i -P3 you-get https://www.bilibili.com/video/BV1HZ4y1p7Bf?p={}
#cd linux-5.14.5/
#for file in `find -name "*.c"`;do line=`cat $file |wc -l`;let sum+=line;done;echo $sum
20925307
或
#cat `find -name '*.c'` |wc -l
20925307
或
#find -name "*.c" |xargs cat |wc -l
20925307
#pwd
/misc/cd/BaseOS/Packages
#ls *.rpm |grep -Eo '[^.]+\.rpm$'|grep -Eo '^[^.]+' |sort |uniq -c
396 i686
224 noarch
1074 x86_64
或
#ls *.rpm |rev|cut -d. -f2|rev |sort |uniq -c
396 i686
224 noarch
1074 x86_64
或
#ls *.rpm |sed -nr 's/.*\.([^.]+)\.rpm$/\1/p' |sort | uniq -c
396 i686
224 noarch
1074 x86_64
Linxu文本处理三剑客
文本处理三剑客之grep
#grep -v '^[[:space:]]*#' /etc/httpd/conf/httpd.conf | grep -v '^$' `
或
#grep -vE '^[[:space:]]*#|^$' /etc/httpd/conf/httpd.conf
#grep -v '^State' ss2.log |grep -Eo '^[[:alpha:]-]+\>' |sort | uniq -c
或
#grep -v '^State' ss2.log | cut -d' ' -f1 | sort | uniq -c
#`ss -nt | grep -v '^State' | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}:[0-9]+ *$'| grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}' |uniq -c`
#cat user.txt
xiaoming=18
xiaohong=33
wangwu=25
lisi=22
#cut -d'=' -f2 user.txt | paste -d+ -s|bc
或
#grep -Eo '[0-9]+' user.txt |paste -d+ -s |bc
或
#grep -Eo '[0-9]+' user.txt |tr '\n' + |grep -o '^.*[^+]' | bc
cut -d: -f1,3 /etc/passwd|grep '^.*\:[0-9]\{1,3\}$'
#ifconfig ens33| grep -i mask | grep -o '[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}' | head -1
或
#ifconfig ens33 | grep -i mask | grep -o '\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}' | head -1
或
#ifconfig ens33 | grep -i mask | grep -oE '([0-9]{1,3}\.){3}[0-9]{1,3}' | head -1
#df |grep -Eo "[0-9]{1,3}%" |sort -nr
100%
24%
6%
3%
2%
2%
1%
0%
#cat /etc/passwd |grep '\(^[[:alnum:]]\+\b\).*/\1$'
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
nologin:x:968:967::/home/nologin:/sbin/nologin
或 扩展正则表达式:
#cat /etc/passwd | grep -E "(^[[:alnum:]]+\b).*/\1$"
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
nologin:x:968:967::/home/nologin:/sbin/nologin
#ifconfig |grep -Ewo "(([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])" |head -n1
#cut -d: -f1,3,7 /etc/passwd |grep -e '^root' -e 'mage' -e 'wang' |cut -d: -f2,3
0:/bin/bash
1001:/bin/bash
1003:/bin/bash
#cat /etc/rc.d/init.d/functions |grep -E '^[a-Z_]+\(.*'
或
#cat /etc/rc.d/init.d/functions |grep -E '^[[:alpha:]_]+\(.*'
checkpid() {
__kill_pids_term_kill_checkpids() {
__kill_pids_term_kill() {
__pids_var_run() {
__pids_pidof() {
daemon() {
killproc() {
……
#echo /etc/rc.d/init.d/functions |egrep -w '[a-z]{9}'
/etc/rc.d/init.d/functions
#echo "/etc/rc.d/init.d/functions" |egrep "^/[a-z./]{15}"
/etc/rc.d/init.d/functions
#last |grep "^root" |grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}' |sort |uniq -c
62 10.0.0.1
#echo "welcome to redhat linux" | tr -d ' '| grep -o '[a-z]' |sort |uniq -c |sort -nr
3 e
2 t
2 o
2 l
1 x
1 w
1 u
1 r
1 n
1 m
1 i
1 h
1 d
1 c
1 a
文本处理三剑客之sed
常用选项:-n:关闭自动打印 -e:多点编译 -r,-E:使用正则表达式 -i.bak:备份文件并编辑
#说明: -ir 不支持、-i -r 支持、-ri 支持、-ni 会清空文件
1.获取文件的目录名和基名#echo /etc/sysconfig/network-scripts/ifcfg-ens33 |sed -rn 's@(.*)/([^/]+)@\1@p'
/etc/sysconfig/network-scripts
#echo /etc/sysconfig/network-scripts/ifcfg-ens33 |sed -rn 's@(.*)/([^/]+)@\2@p'
ifcfg-ens33
#echo "/etc/sysconfig/network-scripts/" |sed -r 's#(^/.*/)([^/]+)#\1#'
/etc/sysconfig/network-scripts/
#echo "/etc/sysconfig/network-scripts/" |sed -r 's#(^/.*/)([^/]+)/?#\2#'
network-scripts
#初始化网卡名
#cat /etc/default/grub
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto resume=UUID=01a2c83f-8c53-4db4-94ce-294abd850f64 rhgb quiet net.ifnames=0"
GRUB_DISABLE_RECOVERY="true"
GRUB_ENABLE_BLSCFG=true
方法一:
#sed -ri.bak '/^GRUB_CMDLINE_LINUX=/s#(.*)"$#\1 net.ifnames=0"#' /etc/default/grub
方法二:
#sed -ri.bak '/^GRUB_CMDLINE_LINUX=/s@"$@ net.ifnames=0"@' /etc/default/grub
#然后在执行
#CentOS:
[root@centos8 ~]#grub2-mkconfig -o /boot/grub2/grub.cfg ;reboot
#ubuntu:
[root@ubuntu ~]#grub-mkconfig -o /boot/grub/grub.cfg
#ifconfig eth0 | sed -nr "2s/[^0-9]+([0-9.]+).*/\1/p"
10.0.0.154
#ifconfig eth0|sed -En '2s/^[^0-9]+([0-9.]{7,15}).*/\1/p'
10.0.0.154
#ifconfig eth0|sed -rn '2s/^[^0-9]+([0-9.]+) .*/\1/p'
10.0.0.154
#ifconfig eth0 |sed -rn '2s/^.*inet //p'|sed -n 's/netmask.*//p'
10.0.0.154
#ifconfig eth0 |sed -n '2s/^.*inet //;s/ netmask.*//p'
10.0.0.154
#ifconfig eth0 |sed -rn '2s/(.*inet )([0-9].*)( netmask.*)/\2/p'
10.0.0.154
#echo a.b.c.gz | sed -En 's/(.*)\.([^.]+)$/\1/p'
a.b.c
#echo a.b.c.gz | sed -En 's/(.*)\.([^.]+)$/\2/p'
gz
#echo a.b.c.gz |grep -Eo '.*\.'
a.b.c.
#echo a.b.c.gz |grep -Eo '[^.]+$'
gz
#echo a.b.tar.gz | sed -rn 's@.*\.([^.]+)\.([^.]+)$@\1@p'
tar
#echo a.b.tar.gz | sed -rn 's@.*\.([^.]+)\.([^.]+)$@\1.\2@p'
tar.gz
#sed -rn "s/^[^#]/#&/p" fstab
#sed -rn 's/^[^#](.*)/#\1/p' fstab
#sed -rn '/^#/!s@^@#@p' fstab
#sed -ri.bak '/^#/s/^#//' fstab
#df |sed -nr '/^\/dev\/sd/s# .* ([0-9]+)%.*# \1#p'
/dev/sda2 6
/dev/sda5 7
/dev/sda1 24
#df |sed -rn '/^\/dev\/sd/ s#([^[:space:]]+[[:space:]]+){4}(.*)%.*#\2#p'
6
7
24
#df |sed -rn "/^\/dev\/sd/ s#(\S+\s+){4}(.*)%.*#\2#p"
6
7
24
#sed -rn '/^GRUB_CMDLINE_LINUX=/s@(.*)"$@\1 net.ifnames=0@p' grub
#sed -rn '/^GRUB_CMDLINE_LINUX=/s@"$@ net.ifnames=0"@p' grub
#sed -r '/^( *#|$)/d' /etc/httpd/conf/httpd.conf
或
#sed -r '/^ *#|^$/d' /etc/httpd/conf/httpd.conf
或
#下面两个表达式中的条件前后顺序互换,结果不一样
#sed -n '/^$/d;/^[[:space:]]*#/!p' /etc/httpd/conf/httpd.conf
或
#sed -n -e '/^$/d' -e '/^[[:space:]]*#/!p' /etc/httpd/conf/httpd.conf
#echo |sed "s/^/$RANDOM.rmvb/"
20394.rmvb
#echo |sed 's/^/$RANDOM.rmvb/'
$RANDOM.rmvb
#echo |sed 's/^/'"$RANDOM".rmvb'/'
8263.rmvb
#echo |sed 's/^/'''$RANDOM'''.rmvb/'
7767.rmvb
#port=8080
#sed -ri.bak -e 's/^Listen 80/Listen '$port'/' -e "/^#ServerName/c ServerName `hostname`:$port" /etc/httpd/conf/httpd.conf
参数和值之间是用tab制表符,用[[:space:]]表示
修改建议值:
a.PASS_MAX_DAYS 180
b.PASS_MIN_DAYS 1
c.PASS_MIN_LEN 8
d.PASS_WARN_AGE 28# sed -ri.bak 's/(^PASS_MAX_DAYS[[:space:]]+)[0-9]+/\1180/' /etc/login.defs
# sed -ri 's/(^PASS_MIN_DAYS[[:space:]]+)[0-9]+/\11/' /etc/login.defs
# sed -ri 's/(^PASS_MIN_LEN\t)[0-9]+/\18/' /etc/login.defs
或
# sed -i 's@^\(PASS_MIN_LEN[[:space:]]\+\)[0-9]+@\18@g' /etc/login.defs
# sed -ri 's@(^PASS_WARN_AGE[[:space:]]+)[0-9]+@\128@' /etc/login.defs
sed -n 'n;p' FILE #打印下一行(打印偶数行)
#seq 10 |sed -n 'n;p'
2
4
6
8
10
seq 10 | sed 'N;s/\n//' #2行合并一起打印
#seq 10 |sed 'N;s/\n//'
12
34
56
78
910
sed '1!G;h;$!d' FILE #倒序打印
#seq 10|sed '1!G;h;$!d'
10
9
8
7
6
5
4
3
2
1
seq 10 | sed -n '/3/{g;1!p;};h' #第3行前一行
#seq 10 |sed -n '/3/{g;1!p;};h'
2
seq 10 | sed -nr '/3/{n;p}' #第3行后一行
#seq 10 |sed -n '/3/{n;p}'
4
sed 'N;D'FILE #打印最后一行
#seq 10 |sed 'N;D'
10
seq 10 |sed '3h;9G;9!d'
#seq 10 |sed '3h;9G;9!d'
9
3
sed '$!N;$!D' FILE
#seq 10 |sed '$!N;$!D'
9
10
sed '$!d' FILE
#seq 10 |sed '$!d'
10
sed 'G' FILE #将每行后加个空行
#seq 4 |sed 'G'
1
2
3
4
sed 'g' FILE
#seq 3 |sed 'g'
sed '/^$/d;G' FILE #将每行后加一空行
#seq 3 |sed '/^$/d;G'
1
2
3
sed 'n;d' FILE #打印奇数行
#seq 10 |sed 'n;d'
1
3
5
7
9
sed -n '1!G;h;$p' FILE #倒序打印
#seq 5 |sed -n '1!G;h;$p'
5
4
3
2
1
文本处理三剑客之awk
awk [options] ‘program’ var=value file…
awk [options] -f prografile var=value file…
说明:program通常是放在单引号中,并可以由三种部分组成
Linxu脚本部分
命令错误的话,不影响后面命令的执行;语法错误会中断执行后面的命令,可通过bash -n *.sh排查;逻辑错误不影响执行,相对比较难找,可通过bash -x *.sh查找观察。#curl -s http://你服务器地址/testdir/system_info.sh | bash
#cat disk_check.sh
#!/bin/bash
WARING=80
DISK=`df | grep "^/dev/sd" |grep -Eo '[0-9]+%' |grep -Eo '[0-9]+' | sort -rn | head -n1`
[ $DISK -ge $WARING ] && echo Disk will be full | mail -s 'Disk Warning' 邮箱@qq.com
#cat chicken_rabbit.sh
#!/bin/bash
HEAD=$1
FOOT=$2
RABBIT=$(((FOOT-HEAD-HEAD)/2))
CHICKEN=$[HEAD-RABBIT]
echo RABBIT:$RABBIT
echo CHICKEN:$CHICKEN
#bash chicken_rabbit.sh 35 94
RABBIT:12
CHICKEN:23
#cat check_host.sh
#!/bin/bash
read -p "Please input a IP:" IP
[[ $IP =~ ^(([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$ ]] || { echo "IP is invalid";exit; }
ping -c1 -w1 $IP &>/dev/null && echo $IP is up || echo $IP is down
read -p "Do you agree(yes/no)?" INPUT
case $INPUT in
[Yy]|[Yy][Ee][Ss])
echo "You input is YES"
;;
[Nn]|[Nn][Oo])
echo "You input is NO"
;;
*)
echo "Input false,please input yes or no!"
esac
#cat filetype.sh
#!/bin/bash
#
#***********************************
#author: hjx
#version: 0.0
#date: 2021-09-09
#description: hello world
#**********************************
read -p "请输入一个文件路径:" PATH1
TYPE=`ls -ld $PATH1 |cut -c 1`
case $TYPE in
-)
echo "$PATH1为普通文件"
;;
d)
echo "$PATH1为目录文件"
;;
l)
echo "$PATH1为连接文件"
;;
b)
echo "$PATH1为块设备文件"
;;
*)
echo "$PATH1为其他文件类型"
;;
esac
#sum=0;for i in {1..100};do let sum+=i;done;echo sum=$sum
sum=5050
或
#seq -s+ 100|bc
5050
或
#echo {1..100}|tr ' ' + |bc
5050
或
#seq 100 |paste -sd + |bc
5050
#cat user_for.sh
#!/bin/bash
#
#***********************************
#author: hjx
#version: 0.0
#date: 2021-09-10
#description: hello world
#**********************************
for i in {1..10};do
useradd user$i
PASS=`cat /dev/urandom |tr -dc '[:alnum:]'|head -c12`
echo $PASS |passwd --stdin user$i &> /dev/null
echo user$i:$PASS >> /data/user.log
echo "user$i is created"
done
for i in {1..9};do
for j in `seq $i`;do
echo -e "\E[1;$[RANDOM%7+31]m${j}x${i}=$[i*j]\E[0m\t\c"
done
echo
done
for ((i=1;i<=9;i++));do
for ((j=1;j<=i;j++));do
printf "\033[1;$[RANDOM%7+31]m${i}*${j}=$[i*j]\033[0m\t"
done
printf "\n"
done
for i in {1..9};do
for j in $(seq `echo $[10-$i]`);do
echo -en "${j}x`echo $[10-i]`=$[(10-i)*j]\t"
done
echo
done
PS1是用来控制控制终端上的命令提示符的颜色,内容的
PS2是控制多行重定向的提示符的,可以认为修改想要的类型。
PS3是用来定义select菜单的提示Linxu的各种服务
后续不断更新中……