首页
关于
Search
1
BT宝塔面板免费使用专业版网站监控报表插件
276 阅读
2
Python批量校验两个文件夹里面的文件MD5
180 阅读
3
MySQL创建索引
110 阅读
4
欢迎使用 Typecho
92 阅读
5
更改宝塔nginx默认的日志格式
92 阅读
默认分类
Java
SpringBoot
MySQL
Linux
登录
/
注册
Search
标签搜索
MySQL
Linux
JAVA
Docker
JavaScript
JDK
Redis
CentOS
SQL
SpringBoot
HTTP
Python
CDN
IP
前端
Micky
累计撰写
57
篇文章
累计收到
1
条评论
今日撰写
0
篇文章
首页
栏目
默认分类
Java
SpringBoot
MySQL
Linux
页面
关于
用户登录
登录
注册
搜索到
23
篇与
默认分类
的结果
2022-01-05
Linux中查看日志文件的几种方式
作为一个后端开发工程师,在Linux中查看查看文件内容是基本操作了。尤其是通常要分析日志文件排查问题,那么我们应该如何正确打开日志文件呢?对于笔者这种小菜鸡来说,第一反应就是 cat,tail,vi(或vim)了,是的,我曾经用过好多次vim编辑器来查看日志文件。千万不要使用vi命令来查看大文件内容, 尤其对于那些几十G的大文件。因为vi仅仅是一个编辑器(可以理解为windows中的记事本),使用vi命令后则会把文件所有内容加载到内存中,如果内存不够大的话,则可能会导致服务器瘫痪。为了生成测试数据,笔者抓心挠肝,东拼西凑,写了一个生成测试文件的shell脚本,方便下文的命令演示,复制到linux命令行执行即可。# 生成10行测试数据(可根据需求自行修改) for ((i=1;i <= 10; i++)); do echo "第$i行" >> test.txt if [[ `expr $i % 2` -eq 0 ]] then echo -e >> test.txt fi done直接查看文件内容查看整个文件的内容的命令一共有三个,cat/tac/nl,nl命令笔者用的比较少,所以此处就不再演示了,感兴趣的小伙伴可以去百度一哈。cat [-AbEnTv]选项与参数: -A :相当于-vET的整合, 课列出一些特殊字符而不是空白而已-b :列出行号,进针对非空白行做行号显示,空白行不会标记-E :将结尾换行符$显示出来-n :打印出行号,连同空白行也会有行号,与-b的选项不同-T : 将[tab]键以^I显示出来-v : 列出一些看不出来的特殊字符范例1:查看test.txt文件的内容cat test.txt范例2:查看test.txt文件的内容, 并展示行号cat -n test.txt范例3: 不推荐使用cat查看大文件cat -n test.txtcat仅仅适合查看行数比较少的文件, 如果文件比较大则没有什么意义了,文件会快速翻到最后一行。如果文件中有特殊符号,比如[Tab], 换行等要显示出来,就必须加上-A之类的选项。当然cat也可以通过管道符配合more或less使用也可以达到比较好的效果。tac(和cat打印顺序相反)tac学过之后笔者从来没有实际应用过,由于用的比较少,所以大家知道就行了。不过这个命令比较有意思,和cat拼写相反,所以他们的打印顺序也相反,将最后一行作为第一行输出。范例1:倒叙查看文件的内容翻页查看moremore命令了解一下就行了,功能太少,笔者一般都用less命令。按键/命令空格键(Space):向下翻页回车(Enter):向下翻行/字符串:在当前显示的内容(翻页进度位置),向下查找这个字符串关键字:f:立刻显示文件名以及目前位置的行号q: :退出当前文件的浏览b或ctrl+b:往回翻页范例1:翻行后,查看行号lessless命令比more更加有弹性,可以前后翻页,不止可以向上查找,也可以向下查找。按键/命令[pagedown] :向下翻页[pageup] :向上翻页/字符串:在当前显示的内容(翻页进度位置),向下查找这个字符串关键字?字符串:向上查找字符串n :重复前一个查找,与/或?有关, 比如前一个命令是?表示向上查找,此时n会向上查找N: 反向的重复前一个查找g :跳转到当前文件数据的第一行G :跳转到当前文件数据的最后一行q :退出当前文件的浏览范例演示数据截取headhead命令用来提取文件的前n行,一般配合使用-n选项。当指定的行数为负数-x时,则会打印出除了后面x行的其他所有数据。范例1:查看前10行数据范例2(一共10000行,没有空行):head -n -9989 test.txt tail从文件尾部截取数据。tail也是工作中最常用的命令,因为可以利用-f选项,一直刷新获取文件尾部最新数据。选项与参数-n : 查看后n行数据,注意当n后面值带“+”号表示从第x行开始, 如 tail -n +1000 test.txt-f : 展示文件后面范例1:查看尾部5行数据【tail -n 5 test.txt】范例2:查看文件尾部数据,并实时刷新数据范例3:查看文件尾部5行数据,并实时刷新数据通用命令管道:Shell 还有一种功能,就是可以将两个或者多个命令(程序或者进程)连接到一起,把一个命令的输出作为下一个命令的输入,以这种方式连接的两个或者多个命令就形成了管道(pipe),管道命令用"|"来表示。范例:查看ll命令输出的前10行ll | head -n 3grep : 命令用于查找文件里符合条件的字符串,这两个命令也是linux中最常用的的,而在查看日志文件也通常会结合这两个命令一起使用。范例:查看文件文件中那些行包含‘999’cat -n test.txt | grep '999'>> : 文件追加重定向命令,可以往文件末尾追加数据,正如上文 echo "第$i行" >> test.txt。范例:将一个文件的最后10行复制到helloworld.txt中tail -n 10 >> helloworld.txtwc:文件字节数,字数,行数查看wc [-clw] [文件...], -c或--bytes或--chars 只显示Bytes数。-l或--lines 只显示行数。-w或--words 只显示字数。范例:查看文件行数wc -l案例实战案例1:打印日志文件中第11到20行。思路:首先获取前20行,然后在获取20行的后10行即可,需要使用管道命令。head -n 20 text.txt | tail -n 10cat -n test.txt | head -n 20 | tail -n 10(如果需要行号)总结Linux的命令实在太多了,对于开发来讲要用到的也有很多,不过笔者认为首先要知道是否存在相关命令,然后分类掌握最常用的,需要时再查表即可。没有必要去纠结命令记不记得住,毕竟这些东西决定不了你的上限。除了以上命令外,Linux中还有许多查看日志文件内容的奇巧淫记,比如sed命令等作者:Java填坑笔记链接:https://juejin.cn/post/6844904069627133966来源:稀土掘金著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
2022年01月05日
22 阅读
0 评论
0 点赞
2021-12-14
Python批量校验两个文件夹里面的文件MD5
import base64 import hashlib import os g_origin_path = "【目录】" g_target_path = "【目录】" def get_file_md5(filepath): f = open(filepath, 'rb') md5obj = hashlib.md5() md5obj.update(f.read()) hash = md5obj.hexdigest() f.close() return str(hash).upper() for root, dirs, files in os.walk(g_origin_path): for file in files: origin_file_path = os.path.join(root, file) strlist = origin_file_path.split('\\') target_file_path = g_origin_path + '\\'.join(strlist[5:]) if os.path.exists(target_file_path) == False: print("多出文件: {} ".format(target_file_path)) continue origin_file_md5 = get_file_md5(origin_file_path) target_file_md5 = get_file_md5(target_file_path) #print(origin_file_md5, target_file_md5) if origin_file_md5 != target_file_md5: print("md5不同 路径: {} src: {} target: {}".format( target_file_path, origin_file_md5, target_file_md5)) 网上的东西都不怎么靠谱,用来快速确认有没有后门之类的东西
2021年12月14日
180 阅读
0 评论
0 点赞
2021-11-24
Windows 2012 Server R2 添加用户 并开启远程连接权限
①打开服务器管理器②工具->计算机管理③计算机管理-系统工具-本地用户和组-用户-添加用户③允许远程连接计算机-属性高级系统设置-远程-选择用户-添加用户-高级-立即查找-选择刚添加的用户
2021年11月24日
12 阅读
0 评论
1 点赞
2021-11-24
远程桌面提示:身份验证错误 要求的函数不受支持
今天在远程服务器的时候突然出现这么一个错误提示:身份验证错误 要求的函数不受支持。尝试在百度搜索答案,给出的结果基本都一样。这个解决方法来自微软官方,按照此方法发现我的电脑中并没有“加密 Oracle 修正”这一项。后来经过多次搜索,取证终于问题解决,解决方法给大家分享出来。命令 regedit 打开注册表,找到路径 [HKEY_LOCAL_MACHINE]SoftwareMicrosoftWindowsCurrentVersionPoliciesSystemCredSSPParameters一般情况下,到了System之后就没了,缺少的可以自己创建文件夹。然后在最底部文件夹里面新建 DWORD(32)位的。文件名 "AllowEncryptionOracle",值:2最后点击保存就可以远程登陆桌面(如果有必要的话,需要重启一下)到此问题完美解决。
2021年11月24日
4 阅读
0 评论
0 点赞
2021-11-05
伪造HTTP请求IP地址
注意:伪造Http请求IP地址一般为非推荐使用手段一般使用:简单投票网站重复投票,黑别人网站在项目开发中(web项目),需要调其它系统接口,并且该系统需要获取客户端(浏览器访问端)的IP地址正常流程:浏览器---访问PC系统----PC系统需要调第三方系统,此时默认情况下,PC发起的request请求IP地址是PC所在服务器的IP地址,而不是请求浏览器端的IP地址所以,就想着是否能把request里的IP地址给修改了,因为在PC系统里是能获取到请求IP地址的,结果是修改不了最后了解到:可以在http请求头里,追加一个头信息(名称:x-forwarded-for),它会位于原始IP地址之前,所以当第三方系统获取地址时,就获取到了真实的浏览器访问地址IP了X-Forwarded-For:简称XFF头,它代表客户端,也就是HTTP的请求端真实的IP,只有在通过了HTTP 代理或者负载均衡服务器时才会添加该项。httpPost.addHeader("x-forwarded-for",ip);概念X-Forwarded-For X-Forwarded-For 是一个扩展头。HTTP/1.1(RFC 2616)协议并没有对它的定义,它最开始是由 Squid 这个缓存代理软件引入,用来表示 HTTP 请求端真实 IP,现在已经成为事实上的标准,被各大 HTTP 代理、负载均衡等转发服务广泛使用,并被写入 RFC 7239(Forwarded HTTP Extension)标准之中.$remote_addr是nginx与客户端进行TCP连接过程中,获得的客户端真实地址. Remote Address 无法伪造,因为建立 TCP 连接需要三次握手,如果伪造了源 IP,无法建立 TCP 连接,更不会有后面的 HTTP 请求$X-Real-IP是一个自定义头。X-Real-Ip 通常被 HTTP 代理用来表示与它产生 TCP 连接的设备 IP,这个设备可能是其他代理,也可能是真正的请求端。需要注意的是,X-Real-Ip 目前并不属于任何标准,代理和 Web 应用之间可以约定用任何自定义头来传递这个信息分析网络请求通常是浏览器(或其他客户端)发出请求,通过层层网络设备的转发,最终到达服务端。那么每一个环节收到请求中的remote_addr必定是上游环节的真实IP,这个无法伪造。那从全链路来看,如果需要最终请求的来源,则通过X-Forwarded-For来进行追踪,每一环节的ip(remote_addr)都添加到X-Forwarded-For字段之后,这样X-Forwarded-For就能串联全链路了。X-Forwarded-For: client_ip, proxy1_ip, proxy2_ip以Nginx为例,添加X-Forwarded-For的配置方式为:proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;如果用户在请求时候伪造的话,那么会出现上面案例的client1前面,出现伪造的ip:X-Forwarded-For: 伪造ip1, 伪造ip2, client_ip, proxy1_ip, proxy2_ip这样的话,需要取真实的client_ip,则需要取proxy1_ip前一个ip值;如果想要过滤掉或覆盖伪造的ip的话,则需要第一层代理(proxy1)用remote_addr来覆盖X-Forwarded-For:proxy_set_header X-Forwarded-For $remote_addr;各个请求头x-forwarded-for client_ip remote-addr X-Real-IP HTTP_CLIENT_IP HTTP_X_FORWARDED_FOR X-Remote-IP X-Remote-Addr X-Client-IP HTTP_VIA X-Originating-IP Proxy-Client-IP WL-Proxy-Client-IP X-Forwarded-For X-Originating-IP X-Remote-IP X-Remote-Addr参考https://zhuanlan.zhihu.com/p/134618410https://zhuanlan.zhihu.com/p/64821617https://www.jianshu.com/p/15f3498a7fadhttps://www.cnblogs.com/luxiaojun/p/10451860.html
2021年11月05日
14 阅读
0 评论
1 点赞
1
2
3
4
5