文章目录
1.在文件中查找关键字
1.1 查找单个文件
根据关键字查看后5行日志:cat log.log | grep “delete” -A 5
根据关键字查看前5行日志:cat log.log | grep “delete” -B 5
根据关键字查看前后5行日志,并显示出行号:cat -n log.log | grep “delete” -C 5
说明:
-A 表示关键字之后,After
-B 表示关键字之前,Before
-C 表示关键字前后,Context
1.2 递归查找多个文件
在vhost目录下快速查找监听82端口的nginx配置文件
1.2.1 find . |xargs grep listen |grep 82
find . |xargs grep listen |grep 82:递归地查找当前目录下所有文件中,那些既包含单词 “listen” 又包含数字 “82” 的行。
find . 会递归地列出当前目录下的所有文件和目录的路径
| xargs grep listen
这是命令的核心和最容易出错的部分。
| (管道):将 find 命令的输出(文件列表)传递给 xargs。
xargs:它的作用是将从管道接收到的输入(一堆文件路径),转换成命令行参数,传递给后面的命令(grep)。因为 grep 可以接受多个文件名作为参数,xargs 会高效地组织这些参数,避免命令行参数过长的问题。
简单说:xargs grep listen ≈ grep listen file1 file2 file3 …
grep listen:在每个通过 xargs 传来的文件中搜索字符串 “listen”。
此步骤后的输出:所有包含 “listen” 的行,并且在每一行前会显示文件名。
| grep 82
作用:从上一个结果中,再次进行过滤。
grep 82:只保留那些包含数字 “82” 的行。
最终输出:经过两层过滤后,只剩下既包含 “listen” 又包含 “82” 的行。
原始命令 find . | xargs grep … 有一个经典缺陷:
如果文件名中包含空格、引号或其他特殊字符,xargs 可能会错误地将其分割,导致命令执行失败或产生意外结果。
例如,有一个文件名为 my config.conf,xargs 可能会将其视为两个参数 my 和 config.conf 传递给 grep,从而导致错误。推荐使用下面这个命令。
1.2.2 grep -r “listen” . | grep “82”
grep -r “listen” . | grep “82” 递归搜索当前目录及其所有子目录下的所有文件,找出那些既包含字符串 “listen” 又包含数字 “82” 的文本行。
grep -r “listen” .
这是命令的第一部分,也是主要搜索阶段。
grep:强大的文本搜索工具。
-r (或 --recursive):递归搜索的标志。这是关键选项,它会让 grep 不仅仅查看当前目录的文件,还会深入到所有子目录中去查找。
“listen”:要搜索的目标字符串。grep 默认区分大小写,所以它只会匹配 “listen”,而不会匹配 “Listen” 或 “LISTEN”。
.:指定搜索的起始目录,这里的点号代表当前工作目录。
执行结果:grep -r “listen” . 会输出当前目录下所有文件中包含 “listen” 的行。每一行输出都会以文件名作为前缀。
| grep “82”
这是命令的过滤阶段,对上一步的粗筛结果进行精炼。
grep “82”:从管道接收到的所有文本行中,只筛选出包含数字 “82” 的行。
最终输出:经过两层过滤后,只剩下那些既包含 “listen” 又包含 “82” 的行。
1.2.3 在文件中翻页查找关键字
- less 仅查找
假设你有一个大型的 Nginx 配置文件 nginx.conf,想找到所有关于 server_name 的配置。
最优步骤:用 less 打开文件:
less nginx.conf
输入 /server_name 并按 Enter,跳转到第一个匹配项。
反复按 n 键,在所有 server_name 配置之间循环查看。
查看完毕后,按 q 退出。
2)vim 查找并编辑
使用 vim (功能强大)
如果你需要在查找的同时编辑文件,vim 是完美的选择。
打开文件
vim nginx.conf
进行搜索
在命令模式下(默认进入的模式或按 ESC 键进入),输入:
/keyword:向下搜索 “keyword”,按 Enter 开始。
?keyword:向上搜索 “keyword”,按 Enter 开始。
在搜索结果间导航
n:跳转到下一个匹配项
N:跳转到上一个匹配项
Vim 中不保存退出
当你打开文件后没有做任何修改,或者做了一些修改但决定完全放弃这些修改时,使用这个命令::q!
::进入命令行模式。
q:quit 的缩写,表示退出。
!:表示强制(force),忽略任何警告或确认。
按下 ESC 键确保处于正常模式,然后输入 :q!,最后按 Enter 即可直接退出,不会保存任何更改。
2.查找文件
whereis nginx 通过文件索引数据库而非PATH来查找的
which nginx 查找系统PATH目录下的可执行文件
locate nginx
cd / :进入根目录
find . -type d -name nginx:查找根目录及其子目录中名称为nginx的目录
find命令
https://www.cnblogs.com/JcHome/p/10852949.html
查找java工程部署目录
ps -ef|grep java : 显示正在运行的java程序
ps-ef|grep nginx:显示正在运行的nginx程序及其安装目录
3. more指令 —— 分页显示文件内容
more指令会以一页一页的形式显示文件内容,按空白键(space)显示下一页内容,按Enter键会显示下一行内容,按 b 键就会往回(back)一页显示,其基本用法如下:
more file1 查看文件file1的文件内容;
more -num file2 查看文件file2的内容,一次显示num行;
more +num file3 查看文件file3的内容,从第num行开始显示;
4.less指令 —— 可以向前或向后查看文件内容
less指令查看文件内容时可以向前或向后随意查看内容;
less指令的基本用法为:
less file1 查看文件file1的内容;
less -m file2 查看文件file2的内容,并在屏幕底部显示已显示内容的百分比;
按空格键显示下一屏的内容,按回车键显示下一行的内容;
按 U 向前滚动半页,按 Y 向前滚动一行;
按[PageDown]向下翻动一页,按[PageUp]向上翻动一页;
按 Q 退出less命令;
5.head指令 —— 查看文件开头的内容
head指令用于显示文件开头的内容,默认情况下,只显示文件的头10行内容;
head指令的基本用法:
head -n <行数> filename 显示文件内容的前n行;
例如:head -n 5 file1 显示文件file1的前5行内容
head -c <字节> filename 显示文件内容的前n个字节;
例如:head -c 20 file2 显示文件file2的前20个字节内容
6.tail指令 —— 显示文件尾部的内容
tail指令用于显示文件尾部的内容,默认情况下只显示指定文件的末尾10行;
tail指令的基本用法:
tail file1 显示文件file1的尾部10行内容;
tail -n <行数> filename 显示文件尾部的n行内容;
例如:tail -n 5 file1 显示文件file1的末尾5行内容
tail -c <字节数> filename 显示文件尾部的n个字节内容;
例如:tail -c 20 file2 显示文件file2的末尾20个字节
7. cat、zcat 指令 —— 显示文件内容
使用cat命令时,如果文件内容过多,则只会显示最后一屏的内容;
cat指令的基本用法:
cat file1 用于查看文件名为file1的文件内容;
cat -n file2 查看文件名为file2的文件内容,并从1开始对所有输出的行数(包括空行)进行编号;
cat -b file3 查看文件名为file3的文件内容,并从1开始对所有的非空行进行编号;
zcat
zcat * |grep zhangsan :查找当前目录下所有包含zhangsan的文件,包括压缩文件
zcat log.gz|grep zhangsan |grep lisi zcat多层过滤
zcat log.gz|grep zhangsan |head -n 1 zcat查看压缩文件第一行
zcat log.gz|grep zhangsan |tail -n 1 zcat查看压缩文件最后一行
压缩文件查看指定日期范围:日期格式 2024-08-16 01:57:49,018
zcat yourfile.gz | awk -F ‘[ ,]’ ‘$1 == “2024-08-16” && $2 >= “01:00:00” && $2 <= “23:59:59”’
在这个示例中:
-F ‘[ ,]’ 指定分隔符为空格和逗号。
$1 是日期部分, $2 是时间部分。
8.curl指令
查看linux外网ip
curl cip.cc
curl ifconfig.me
查看与指定网站网络是否通畅
curl “https://www.baidu.com”
curl 发get请求带url参数
curl -X GET “http://10.100.93.55:9002/temp/querySoHan?iccid=89860321482006636347&provider=SHUORUAN” -H “accept: /”
curl 发post请求带json参数
curl --location --request POST ‘http://localhost:9002/real/query’
–header ‘Content-Type: application/json’
–data-raw ‘{
“realTimeQuery”:true,
“list”:[{
“no”:“89860321482006636347”,
“class”:“c1”
}]
}’
curl -X POST
–header ‘Content-Type: application/json’
–header ‘Accept: application/json’
-d ‘{“key1”: “value1”, “key2”: “value2”}’
https://example.com/api/resource
解释
-X POST: 指定请求方法为 POST。
–header ‘Content-Type: application/json’: 设置 Content-Type 请求头为 application/json,指示请求体的数据格式是 JSON。
–header ‘Accept: application/json’: 设置 Accept 请求头为 application/json,指示客户端希望接收 JSON 格式的响应。
-d ‘{“key1”: “value1”, “key2”: “value2”}’: 请求体的数据,这里以 JSON 格式传递数据。
https://example.com/api/resource: 替换为你要请求的实际 URL。
更多知识:https://www.cnblogs.com/duhuo/p/5695256.html
9.“>与>>的去别”
”>“表示覆盖原文件内容(文件的日期也会自动更新),>>表示追加内容(会另起一行,文件的日期也会自动更新)
nohup mongo localhost:27017/bssmongodb -u root-p root–authenticationDatabase admin backup.js >> backup.log 2>&1 &
把连接mongodb执行js脚本的过程放入linux后台执行,标准输出与错误输出以追加的方式重定向到backup.log文件中
nohup 命令的作用就是让后台工作在离开操作终端(如xshell)时,也能够正确地在后台执行。
注意,这里的‘&’表示此命令会在终端后台工作,即关闭xshell,命令仍会继续执行。反之,如果没有‘&’,则表示此命令会在终端前台工作,关闭xshell,命令就停止执行。
2>&1
0 表示stdin标准输入
1 表示stdout标准输出
2 表示stderr标准错误
对于& 1 更准确的说应该是文件描述符 1,而1标识标准输出,stdout。
对于2 ,表示标准错误,stderr。
2>&1 的意思就是将标准错误重定向到标准输出。这里标准输出已经重定向到了 backup.log。那么标准错误也会输出到backup.log。如果不重定向,nohup会输出到nohup.out文件中。
nohup命令优缺点:
优点:终端断开会话(程序)依然进行
缺点:一旦运行该命令,终端不在接受其他任何标准输入(原因是nohup只是不挂起,并不拥有后台执行的功能)
& 命令的优缺点:
优点:程序后台执行
缺点:终端断开,进程(程序)也会中断
所以结合两者优点,互相弥补对方缺点。
自然情况下,我们在Linux的terminal窗口里输入一个命令,回车执行,命令打印出结果,执行结束,命令提示符再次出现。这样的执行方式叫做前台执行。
Linux命令的前台执行很常用,但是有个问题,就是在命令执行过程中,我们不能输入其它的命令,如果想并行做一些其它的事情,只能再开一个新的terminal窗口。
另外一种执行Linux命令的方式叫做后台执行,方法很简单,就是在命令后面加上一个&
命令格式:command &
我们可以通过输入Ctrl+z这个组合,来暂停前台正在执行的命令;
(Ctrl+c是终止任务)
然后通过jobs这个命令,可以查看所有暂停以及后台执行的命令;
jobs命令会显示所有命令的编号,
fg N #将第N个命令的执行放到前台;
bg N #将第N个命令的执行放到后台。
一个vim的应用场景:
当你用vim编写代码时,如果需要用shell执行别的操作,但是你又不打算关闭vim已经打开的文件,因为你得存盘退出。这时,你就可以简单的按下Ctrl+z,shell会将vim进程挂起,当你结束了那个shell操作之后,你可以用fg命令继续vim你的文件。
注意事项:
1, 打印特别多的命令,如果放到后台执行,该打印的依然会打印,因此,后台执行更适合那些打印很少的命令或任务;
2, 关闭当前的shell窗口(logout退出),不管进程在前台或后台,进程都会被关闭。(要想实现logout后,进程依然保持运行,需要使用nohup命令)
cat Test.txt|sed ‘1,3d’|sort|uniq|awk ‘{if(!$2)print}’|xargs -t -n 1 redis-cli -h 10.1.15.21 -p 6379 -c del
cat Test.txt:打开Test文件
sed ‘1,3d’:sed默认不编辑源文件,仅对模式空间的数据进行处理,处理后打印至屏幕。过滤不显示1-3行
sed :https://www.cnblogs.com/pangbing/p/6535627.html
|sort|uniq|awk ‘{if(!$2)print}’ : https://blog.csdn.net/weixin_33769125/article/details/92828632
sort:排序,uniq:去重,awk:分割字段。$2:第二列
综上:排序去重并且按照空格分割,如果没有第二列,就输出到屏幕
xargs -t -n 1 redis-cli -h 10.1.15.21 -p 6379 -c del :
xargs:https://www.runoob.com/linux/linux-comm-xargs.html
redis-cli : https://blog.csdn.net/u010033674/article/details/105182168/
xargs(英文全拼: eXtended ARGuments)是给命令传递参数的一个过滤器,也是组合多个命令的一个工具.xargs 是一个强有力的命令,它能够捕获一个命令的输出,然后传递给另外一个命令。
-t 表示先打印命令,然后再执行。
-n num 后面加次数,表示命令在执行的时候一次用的argument的个数,默认是用所有的
redis-cli -h 10.1.15.21 -p 6379 -c del : 连接redis删除键
综上:打开Test文件
$0当前Shell程序的文件名排序去重并且按照空格分割,如果没有第二列,就输出到屏幕,把输出的key传递给下一个管道,连接redis并删除key打印到屏幕
dirname $0,获取当前Shell程序的路径
cd dirname $0
,进入当前Shell程序的目录
10.xshell上传下载文件
sz log.log 下载log.log
rz 上传
11. 防火墙
systemctl status firewalld 查看防火墙状态
可以看到防火墙已关闭,因为是在内网。
systemctl start firewalld.service 开启防火墙
systemctl stop firewalld.service 关闭防火墙
systemctl enable firewalld.service 设置开机启动
systemctl disable firewalld.service 禁止开机启动
firewall-cmd --list-all 查看防火墙开放端口情况
firewall开启和关闭端口
以下都是指在public的zone下的操作,不同的Zone只要改变Zone后面的值就可以
firewall-cmd --zone=public --add-port=80/tcp --permanent 添加端口 (–permanent永久生效,没有此参数重启后失效)
firewall-cmd --reload 重新加载配置
firewall-cmd --zone=public --query-port=80/tcp 查看端口
firewall-cmd --zone=public --remove-port=80/tcp --permanent 删除端口
12 grep指令
grep是Linux中最常用的”文本处理工具”之一,grep与sed、awk合称为Linux中的三剑客。
grep的全称为: Global search Regular Expression and Print out the line
全称中的”Global search”为全局搜索之意,”Regular Expression”表示正则表达式。
故grep是一个可以利用”正则表达式”进行”全局搜索”的工具,grep会在文本文件中按照指定的正则进行全局搜索并打印出来。
当然,不使用正则表达式时也可以使用grep,但是当grep与正则表达式结合在一起时,威力更强大。
grep:支持基本正则表达式
egrep:支持扩展正则表达式,相当于grep -E
fgrep:不支持正则表达式,只能匹配写死的字符串,但是速度快(有待商榷),fastgrep
grep多次过滤:cat log.log|grep order|grep saas 在order的基础上再次过滤saas
查看配置文件过滤空格和注释
grep -v '^\s*#' server.properties| grep -v '^\s*$'
grep搭配使用参数:
–color=auto 或者 --color:表示对匹配到的文本着色显示
-i:在搜索的时候忽略大小写
-n:显示结果所在行号
-c:统计匹配到的行数,注意,是匹配到的总行数,不是匹配到的次数
-o:只显示符合条件的字符串,但是不整行显示,每个符合条件的字符串单独显示一行
-v:输出不带关键字的行(反向查询,反向匹配)
-w:匹配整个单词,如果是字符串中包含这个单词,则不作匹配
-Ax:在输出的时候包含结果所在行之后的指定行数,这里指之后的x行,A:after
-Bx:在输出的时候包含结果所在行之前的指定行数,这里指之前的x行,B:before
-Cx:在输出的时候包含结果所在行之前和之后的指定行数,这里指之前和之后的x行,C:context 查看日志的时候当日志一定要记得加上-Cx,否则容易遗漏日志。
-e:实现多个选项的匹配,逻辑或关系
-P:表示使用兼容perl的正则引擎。
-E:使用扩展正则表达式,而不是基本正则表达式,在使用”-E”选项时,相当于使用egrep。
13 wc指令
统计指定文件中的字节数、字数、行数,并将统计结果显示输出。该命令统计指定文件中的字节数、字数、行数。如果没有给出文件名,则从标准输入读取。wc同时也给出所指定文件的总统计数。
命令参数:
-c 统计字节数。
-l 统计行数。
-m 统计字符数。这个标志不能与 -c 标志一起使用。
-w 统计字数。一个字被定义为由空白、跳格或换行字符分隔的字符串。
[root@bogon logs]# cat log.test|grep OSS_MSG_KEY|wc -l
388
[root@bogon logs]# cat log.test|grep OSS_MSG_KEY|grep numIdlepool4|wc -l
6
[root@bogon logs]# cat log.test|grep OSS_MSG_KEY|grep -v numIdlepool4|wc -l
382
14 查看linux服务器外网ip地址
wget -qO- ifconfig.me
curl ifconfig.me
curl ipinfo.io/ip
连接超时:一般是网络不通,可以ping一下对方网址,如果有返回,说明网络是通的。网络如果不通,可能是己方防火墙拦截了。如果网络是通的,依旧连接超时,可能是对方开启了ip白名单。
java.lang.Exception: java.net.ConnectException: Connection timed out (Connection timed out)
15 定时任务
在 Linux 中,定时任务通常使用 cron 来管理。以下是设置定时任务的基本步骤:
1) 编辑 Cron 表
使用 crontab -e 命令编辑当前用户的 cron 表:
crontab -e
2) 添加任务
在打开的编辑器中添加定时任务。每一行的格式为:
* * * * * command_to_run
其中,* * * * * 代表任务的时间设置,具体含义如下:
*: 分钟(0-59)
*: 小时(0-23)
*: 日(1-31)
*: 月(1-12)
*: 星期几(0-7,其中0和7都是周日)
例如,若要每天凌晨 2 点运行一个脚本 /home/user/script.sh,可以添加:
0 2 * * * /home/user/script.sh
3) 查看 Cron 任务
使用 crontab -l 查看当前用户的 cron 任务:
crontab -l
4) 删除 Cron 任务
使用 crontab -r 删除当前用户的 cron 表(删除所有任务):
crontab -r
crontab -e 打开定时任务后删除单独的定时任务
5) 系统级 Cron 任务
对于系统级别的任务,可以编辑 /etc/crontab 文件或在 /etc/cron.d/ 目录中添加文件。系统级的 cron 文件格式类似,但包含一个额外的字段用于指定用户:
* * * * * username command_to_run
例如,在 /etc/crontab 中添加:
0 2 * * * root /home/user/script.sh
last 常用链接
shell脚本–awk的用法
https://blog.csdn.net/wdz306ling/article/details/80383824
Linux shell tr 命令详解
https://www.cnblogs.com/faberbeta/p/linux-shell003.html
java 命令行启动指定classpath
https://blog.csdn.net/tongsh6/article/details/80268642
Shell 中 -n 条件判断的使用
https://www.cnblogs.com/yangxusun9/p/12607785.html
linux shell中"2>&1"含义
https://www.cnblogs.com/zhenghongxin/p/7029173.html
shell的exec命令
https://www.cnblogs.com/kex1n/p/6804887.html