首页
常用运维脚本汇总
电子书阅读
Search
1
安装docker时报错container-selinux >= 2:2.74
172 阅读
2
rsync命令(可替代rm删除巨量文件)
141 阅读
3
docker 镜像加速器配置,daemon.json文件详解
133 阅读
4
使用国内镜像地址拉取k8s安装需要的images
94 阅读
5
docker search命令提示i/o timeout的解决方案
93 阅读
运维
自动化运维
数据库
容器与k8s
环境
云计算
脚本
ai
登录
Search
标签搜索
命令
nginx
zabbix
Mingrui
累计撰写
92
篇文章
累计收到
8
条评论
首页
栏目
运维
自动化运维
数据库
容器与k8s
环境
云计算
脚本
ai
页面
常用运维脚本汇总
电子书阅读
搜索到
27
篇与
的结果
2025-03-03
nginx根据php监听端口号不同分配不同版版的php-fpm服务
通过给两个php-fpm服务配置不同的监听端口号,实现了一个nginx与两个php-fpm服务的同时通信。
2025年03月03日
66 阅读
0 评论
0 点赞
2024-09-27
find命令详解
find命令可以找出符合要求的所有文件并执行额外的命令。find会遍历文件系统,将找到的文件名交给谓词测试。如果谓词返回真,就通过。如果谓词返回假,则不再继续往下进行,会接着处理下一个文件名。谓词:find命令的选项看起来像是简短的单词,事实上它们是find命令的表达式选项、测试条件或操作。这些单词依照逻辑顺序出现,并描述要查找哪些文件以及如何处理查找到的文件。这种像单词一样的选项通常被称为谓词。如:find . -name '*.mp3' -print -exec mv '{}' ~/songs \;find命令的第一个参数待搜索的目录。典型用法是用点号(.)代表当前目录,也可以根据需要提供其他目录。示例中的第一个选项(谓词-name)指定了要搜索的文件模式。匹配该模式的文件被认为返回的是真(true),接着将其交给下一个下一个谓词进行处理。谓词-print很简单,它总是返回真,同时会将文件名打印到标准输出。因此能在谓词测试中通过测试而达到这一步的文件都会输出其名称。-exec:达到这一步的文件名会变成接下来要执行的命令的一部分。剩下的一直到\;的这部分就是命令。其中的{}会被替换成已经查找到的文件名。-delete:删除查找到的文件{dotted startColor="#ff6c6c" endColor="#1989fa"/}-print0:可以与xargs -0 选项合用处理文件名中的怪异字符。-print0告诉find不要用空白字符,而是改用空字符(null character)(\0)作为输出的文件名之间的分隔符。xargs的-0选项告诉xargs输入分隔符是空字符。xargs从标准输入中接收以空白字符分割(指定-0时除外)的文件名,然后对尽可能多的文件(略少于系统ARG_MAX值)执行指定命令。由于调用其他命令会带来不小的开销,因此使用xargs可以显著提升操作速度。因为xargs能够尽量减少命令的调用次数,而不是每个文件都调用。因此,上面的例子可以用下面的方案来处理怪异字符: find . -name '*.mp3' -print0 | xargs -i -0 mv '{}' ~/songs关于xargs命令的-i参数:mv命令需要将目标目录作为最后一个参数,而传统的xargs只是简单的获取输入,然后将其附加到指定命令的尾部,直到达到上限或处理完输入。但这样一来,mv命令肯定会报错。因此这里可以使用-i选项来指定输入参数的位置,默认使用{}作为替换字符串。但加入-i选项会导致对每个参数都要执行一次命令(-i选项无法实现参数分组),此外不是所有的xargs版本都支持-i选项。-L:跟随符号链接查找文件(也可以使用-follow选项)find -L . -name '*.mp3' -print0 | xargs -i -0 mv '{}' ~/songs-iname:查找文件时不区分大小写find . -follow -iname '*.mp3' -print0 | xargs -i -0 mv '{}' ~/songs此外,find可以配合模式匹配来达到不区分大小写的目的,例:find . -name '*.Jj[Gg]' -print-mtime:按日期查找文件find . -name '*.jpg' -mtime +90 -print-mtime谓词接受一个参数用于指定要搜索的时间段。90代表90天。在数字前使用加号(+90)表明要搜索的文件是在90天已经修改的。使用减号(-90)表示文件是在90天内修改的。如果没有加减号,则表明正好是90天。-type:按类型查找find . -type d -name '*java' -print类型说明: b 块设备文件 c 字符设备文件 d 目录 p 管道(或fifo) f 普通文件 l 符号链接 s 套接字 D 门(door)(仅限于Solaris) -size:按大小查找文件find . -size -3000k -print-size谓词后面的数值参数前可以添加减号加号或者什么都不加,分别表示小于大于等于该数值。按内容查找文件:如果需要在含有众多子目录的目录中查找含有特定内容的文件,可以使用以下方法:find . -name '*.txt' -exec grep -Hi portend '{}' \;说明:-H选项会输出包含搜索内容的文件名逻辑运算:find还可以使用逻辑运算符AND、OR、NOT,如果知道文件的修改时间至少在一周前,但不超过14天,可以这样写查找语句:find . -mtime +7 -a -mtime -14 -print连续出现的两个谓词,其效果类似于逻辑AND,优先级高于OR。为了获得正确的优先级,可能还得使用括号。而括号在bash中有特殊含义,要在find中使用,需要对其转义。要么写作(和),要么放入单引号,写作'('和')'。find . -mtime +14 -name '.txt' -o ( -mtime -14 -name '.txt' ) -print说明:改语句查找的是修改时间在14天以前或14天以内的以txt结尾的文件。{dotted startColor="#ff6c6c" endColor="#1989fa"/}locate与slocate:快速查找locate与slocate会查询系统的数据库文件(通常由corn作业负责编译和更新),几乎瞬间就能找到文件或命令。(数据库的位置,会对什么对象进行索引、索引的频率都是由系统决定的。)slocate保存了权限信息(以及文件名和路径),因此不会列出用户无权访问的文件。在大多数Linux系统中,locate只不过是指向slocate的符号链接。-maxdepth:查找深度 距离当前目录最多X深度(层)的文件。find / -maxdepth 5 -name '*.conf' | xargs grep listen
2024年09月27日
60 阅读
0 评论
0 点赞
2024-09-26
sort与cut
sort可以对一个或多个文件进行排序参数选项: -r 逆序排序 -f 不区分大小写,等同于GNU长格式选项 --ignore-case -n 将数据作为数值排序 -u 去除重复项 -t 指定字段之间的分隔符 -k 指定排序所使用的字段sort -t . -k 1,1n -k 2,2n ipaddr.list说明:-k 1,1n 的意思是:排序起止范围从第一个字段(1)开头至(,)第一个字段(1)末尾,按照数值排序(n)。cut截取字符串中的特定部分。cut默认的字段间的分隔符是制表符。 -d:指定分隔符 -c: 提取特定列 -c后面跟列的序号,-c12-15,提取第12到15列,-c12-提取第12列及以后的所有列。 -b:选择指定的字节范围,并打印输出 -f:提取指定字段的数据。 -n:与-b一起使用,不分割多字节字符[root@web1 ~]# ps -l | cut -c12-15 PI 207 7263 7263 #找出系统中的shell [root@web1 ~]# awk -F: '{print $NF}' /etc/passwd |sort -u /bin/bash /bin/false /bin/sync /sbin/halt /sbin/nologin /sbin/shutdown #或者使用cut命令:cut -d':' -f7 /etc/passwd |sort -u
2024年09月26日
66 阅读
0 评论
0 点赞
2024-09-26
awk详解—变量与关联数组(部分)
在awk中,各种字段是用美元符号和字段编号来引用的($1,$2,$3等)。awk中还有内建变量。如NF,其中保存着当前行中的字段总数,而$NF指向的是最后一个字段,加入ls的输出行共有8个字段,那么NF的值是8,$NF的值是改行中的第8个字段(等同于$8)。此外,读取awk变量时不需要使用$符合。比如NF本身就是一个有效的变量引用。在其之前加上$就将其含义从“当前行的字段总数”改成了“当前行的最后一个字段”。又比如在awk的for循环中,假设循环变量为i,那么像引用变量i的值,直接写作i即可。那么$i代表什么呢?变量i的值被解析成一个数字,然后“美元符号-数字”的表达式会被理解为引用某个输入字段或单词,即第i个字段。{callout color="#f0ad4e"}一些示例{/callout}逆序输出输入行的单词[root@web1 ~]# tail -5 /etc/passwd | awk -F: '{ for (i=NF; i>0; i--){ printf "%s ", $i; } printf "\n" }' /bin/false /var/lib/mysql MySQL Server 27 27 x mysql /sbin/nologin /usr/share/httpd Apache 48 48 x apache /sbin/nologin /var/lib/rpcbind Rpcbind Daemon 32 32 x rpc /sbin/nologin /var/lib/nfs RPC Service User 29 29 x rpcuser /sbin/nologin /var/lib/nfs Anonymous NFS User 65534 65534 x nfsnobody #当for循环中的条件改为i>=0时,会输出原始的行。因为$0代表本行所有的列。 [root@web1 ~]# tail -5 /etc/passwd | awk -F: '{ for (i=NF; i>=0; i--){ printf "%s ", $i; } printf "\n" }' /bin/false /var/lib/mysql MySQL Server 27 27 x mysql mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/false /sbin/nologin /usr/share/httpd Apache 48 48 x apache apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin /sbin/nologin /var/lib/rpcbind Rpcbind Daemon 32 32 x rpc rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin /sbin/nologin /var/lib/nfs RPC Service User 29 29 x rpcuser rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin /sbin/nologin /var/lib/nfs Anonymous NFS User 65534 65534 x nfsnobody nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin汇总数字列表#汇总文件夹下所有文件的总大小。 [root@web1 ~]# ls -l | awk '{sum+=$5}END{print sum}' 2959663563统计字符串出现的次数使用到的工具是awk的关联数组(其他语言中的散列或字典)。本例中统计的是网站的访问量,显示的结果是IP地址及其访问次数。关于下面这行代码ip[$1]++这里将IP地址($1的值)被用作数组索引。该数组的实际元素为ip[118.113.18.252]、[111.229.150.53]等。之所以称该数组为关联数组,是因为使用散列表将每个独一的字符串与数值关联了起来。这些事情awk已经自动做好,不需要在手动进行字符串的比较或查找。建立好数组之后,为了获取数组中每个元素的值,awk提供了一种特殊形式的for循环,与数字形式的for(i=0;i<=10;i++){}不同,它有专用于关联数组的语法。for(i in ip){}在该语句中,变量i连续从数组ip的索引中获取值(没有特定顺序)。也就是说i会在每次循环中都得到一个值(如本例中的IP地址,111.229.150.53、111.229.150.53等这些值)。而ip[i]则会返回数组元素的值。关联数组是awk的一个强大特性。[root@web1 ~]# awk ' {ip[$1]++} END{for(i in ip){ print i "\t" ip[i] } }' access.log|sort -nr -k2 | head -5 118.113.18.252 13345 111.229.150.53 3803 180.163.28.109 3553 180.163.28.143 3435 180.163.30.76 3322
2024年09月26日
58 阅读
0 评论
0 点赞
2024-09-26
grep命令详解
{alert type="info"}grep命令可以搜索文件,查找指定的字符串{/alert}grep的第一个参数(待搜索的内容)可以是一个简单的字符串,也可以是更复杂的正则表达式。命令行选项[root@web1]# grep panel * 1panel.service:Description=1Panel, a modern open source linux panel 1panel.service:ExecStart=/usr/bin/1panel 1pctl: systemctl status 1panel.service 1pctl: systemctl start 1panel.service 1pctl: systemctl stop 1panel.service -h:不显示特定文件名[root@web1]# grep -h panel * Description=1Panel, a modern open source linux panel ExecStart=/usr/bin/1panel systemctl status 1panel.service systemctl start 1panel.service systemctl stop 1panel.service-c:只显示匹配到了几次,不显示文件中包含指定字符串的行[root@web1]# grep -c panel * 1panel:526 1panel.service:2 1pctl:23 install.log:3 install.sh:11 LICENSE:0 README.md:6-l:只显示包含搜索结果的文件名如果在一个文件中找到了多次匹配,grep仍然只输出该文件名一次。如果没有找到匹配,则什么都不输出。[root@web1]# grep -l panel * 1panel 1panel.service 1pctl install.log install.sh README.md-q:只显示搜索是否成功-q选项没有任何输出,需要使用$?来查看该命令是否成功。如果搜索成功,返回0;如果搜索不到结果,返回1。根据-q选项的该特点,该选项参数更长用于if、while等条件判断中。[root@web1]# grep -q panel * [root@web1]# echo $? 0[root@web1]# if grep -q panel 1panel ;then echo yes;else echo no;fi yes #另一种写法 [root@web1 1panel-v1.10.1-lts-linux-amd64]# if grep panel 1panel > /dev/null ;then echo yes;else echo no;fi yes #如果不重定向到/dev/null,会输出grep的执行结果,界面显得凌乱。 [root@web1 1panel-v1.10.1-lts-linux-amd64]# if grep panel * ;then echo yes;else echo no;fi README.md:- 环境地址:<https://demo.1panel.cn/> README.md:- 密码:1panel README.md:curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && sudo bash quick_start.sh README.md:- [在线文档](https://1panel.cn/docs/) yes-i:不区分大小写[root@web1]# grep -i Panel * 1panel.service:Description=1Panel, a modern open source linux panel 1panel.service:ExecStart=/usr/bin/1panel 1pctl: echo "1Panel 控制脚本" 1pctl: echo " status 查看 1Panel 服务运行状态" 1pctl: echo " start 启动 1Panel 服务" 1pctl: echo " stop 停止 1Panel 服务"-v:对搜索结果取反搜索更复杂的模式grep中的正则表达式提供了更为强大的模式匹配功能,能够满足大部分需求。正则表达式描述了待匹配字符串的模式。字母字符(或者对于shell没有特殊含义的其他字符),只匹配自身。如“A”匹配A,“B”匹配B,“ab”匹配ab。特殊字符:既可以单独使用,也可以与其他字符结合。. 点号,匹配任意单个字符。星号,匹配上一个字符0次或多次。^ 尖角号,匹配文本行的行首位置。$ 美元符号,匹配文本行的行尾位置。[] 匹配其中任意一个字符。[^] 方括号中以尖角号开头,则匹配的是不在该字符组中的任意字符。{n,m} 区间表达式,一种重复机制。匹配前面的内容n到m次。{n} 只重复n次。{n,} 至少重复n次。 📜 举例:.... 可以匹配任意4个字符.A 匹配第二个字母是A的任意字符.A. 匹配任意单个字符,然后是A,然后是任意单个字符A* 匹配A出现了0次或多次.* 匹配任意单个或多个字符(不包含空行)^$ 匹配空行A{5} 匹配连续的5个A字母A{5,} 至少匹配连续的5个A多文件搜索技巧# 在多个日志文件中搜索 grep -r "OutOfMemoryError" /var/log/ # 搜索指定类型的文件 grep -r --include="*.log" "database connection" /var/log/ # 排除某些文件 grep -r --exclude="*.gz" "error" /var/log/ # 搜索压缩文件 zgrep "error" /var/log/nginx/access.log.gz
2024年09月26日
67 阅读
0 评论
0 点赞
1
2
3
4
...
6