日常查询日志用到的指令

本文主要介绍了在Linux服务器上查询日志的相关工具。包括能识别日志中JSON的jq,可按字节、字符分割的cut,具备多种排序功能的sort,以及能处理重复行的uniq,并详细说明了各工具的使用方式和参数含义。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

查询日志

jq

可以识别日志中的json。
安装:

brew install jq

使用方式

	{"name":"xxx", "age":10, "user_id": 123123123, "profile": "xxxxxxxx.jpg"}12312
	{"name":"xxx", "age":10, "user_id": 123123123, "profile": "xxxxxxxx.jpg"}
	{"name":"xxx", "age":10, "user_id": 123123123, "profile": "xxxxxxxx.jpg"}
	{"name":"xxx", "age":10, "user_id": 123123123, "profile": "xxxxxxxx.jpg"}123
	{"name":"xxx", "age":10, "user_id": 123123123, "profile": "xxxxxxxx.jpg"}
	{"name":"xxx", "age":10, "user_id": 123123123, "profile": "xxxxxxxx.jpg"}
	{"name":"xxx", "age":10, "user_id": 123123123, "profile": "xxxxxxxx.jpg"}
	{"name":"xxx", "age":10, "user_id": 123123123, "profile": "xxxxxxxx.jpg"}
	{"name":"xxx", "age":10, "user_id": 123123123, "profile": "xxxxxxxx.jpg"}
head 1.log| jq ".user_id"
# 以下为执行结果
123123123
jq: error (at <stdin>:1): Cannot index number with string "user_id"
123123123
123123123
123123123
jq: error (at <stdin>:4): Cannot index number with string "user_id"
123123123
123123123
123123123
123123123
123123123

cut

使用方式
-b :以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。
-c :以字符为单位进行分割。
-d :自定义分隔符,默认为制表符。
-f :与-d一起使用,指定显示哪个区域。
-n :取消分割多字节字符。仅和 -b 标志一起使用。如果字符的最后一个字节落在由 -b 标志的 List 参数指示的

eg

{"name":"xxx", "age":10, "user_id": 123123123, "profile": "xxxxxxxx.jpg"}12312
{"name":"xxx", "age":10, "user_id": 123123123, "profile": "xxxxxxxx.jpg"}
{"name":"xxx", "age":10, "user_id": 123123123, "profile": "xxxxxxxx.jpg"}
{"name":"xxx", "age":10, "user_id": 123123123, "profile": "xxxxxxxx.jpg"}123
{"name":"xxx", "age":10, "user_id": 123123123, "profile": "xxxxxxxx.jpg"}
{"name":"xxx", "age":10, "user_id": 123123123, "profile": "xxxxxxxx.jpg"}
{"name":"xxx", "age":10, "user_id": 123123123, "profile": "xxxxxxxx.jpg"}
{"name":"xxx", "age":10, "user_id": 123123123, "profile": "xxxxxxxx.jpg"}
{"name":"xxx", "age":10, "user_id": 123123123, "profile": "xxxxxxxx.jpg"}
head 1.log| cut -d ':' -f 2
"xxx", "age"
"xxx", "age"
"xxx", "age"
"xxx", "age"
"xxx", "age"
"xxx", "age"
"xxx", "age"
"xxx", "age"
"xxx", "age"
head 1.log| cut -b 1-7
{"name"
{"name"
{"name"
{"name"
{"name"
{"name"
{"name"
{"name"
{"name"

sort

使用方式
-b 忽略每行前面开始出的空格字符。
-c 检查文件是否已经按照顺序排序。
-d 排序时,处理英文字母、数字及空格字符外,忽略其他的字符。
-f 排序时,将小写字母视为大写字母。
-i 排序时,除了040至176之间的ASCII字符外,忽略其他的字符。
-m 将几个排序好的文件进行合并。
-M 将前面3个字母依照月份的缩写进行排序。
-n 依照数值的大小排序。
-u 意味着是唯一的(unique),输出的结果是去完重了的。
-o<输出文件> 将排序后的结果存入指定的文件。
-r 以相反的顺序来排序。
-t<分隔字符> 指定排序时所用的栏位分隔字符。
+<起始栏位>-<结束栏位> 以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。
–help 显示帮助。
–version 显示版本信息。
[-k field1[,field2]] 按指定的列进行排序。

eg

{"name":"xxx", "age":11, "user_id": 123123121, "profile": "xxxxxxxx.jpg"}
{"name":"xxx", "age":12, "user_id": 123123122, "profile": "xxxxxxxx.jpg"}
{"name":"xxx", "age":13, "user_id": 123123123, "profile": "xxxxxxxx.jpg"}
{"name":"xxx", "age":14, "user_id": 123123124, "profile": "xxxxxxxx.jpg"}
{"name":"xxx", "age":15, "user_id": 123123125, "profile": "xxxxxxxx.jpg"}
{"name":"xxx", "age":16, "user_id": 123123126, "profile": "xxxxxxxx.jpg"}
{"name":"xxx", "age":17, "user_id": 123123127, "profile": "xxxxxxxx.jpg"}
{"name":"xxx", "age":18, "user_id": 123123128, "profile": "xxxxxxxx.jpg"}
{"name":"xxx", "age":19, "user_id": 123123129, "profile": "xxxxxxxx.jpg"}
head 1.log| jq ".user_id" | sort
123123121
123123122
123123123
123123124
123123125
123123126
123123127
123123128
123123129
head 1.log| jq ".user_id" | sort -r
123123129
123123128
123123127
123123126
123123125
123123124
123123123
123123122
123123121

uniq

-c或–count 在每列旁边显示该行重复出现的次数。
-d或–repeated 仅显示重复出现的行列。
-f<栏位>或–skip-fields=<栏位> 忽略比较指定的栏位。
-s<字符位置>或–skip-chars=<字符位置> 忽略比较指定的字符。
-u或–unique 仅显示出一次的行列。
-w<字符位置>或–check-chars=<字符位置> 指定要比较的字符。
–help 显示帮助。
–version 显示版本信息。
[输入文件] 指定已排序好的文本文件。如果不指定此项,则从标准读取数据;
[输出文件] 指定输出的文件。如果不指定此选项,则将内容显示到标准输出设备(显示终端)

eg

{"name":"xxx", "age":11, "user_id": 123123121, "profile": "xxxxxxxx.jpg"}
{"name":"xxx", "age":12, "user_id": 123123122, "profile": "xxxxxxxx.jpg"}
{"name":"xxx", "age":11, "user_id": 123123123, "profile": "xxxxxxxx.jpg"}
{"name":"xxx", "age":14, "user_id": 123123124, "profile": "xxxxxxxx.jpg"}
{"name":"xxx", "age":13, "user_id": 123123125, "profile": "xxxxxxxx.jpg"}
{"name":"xxx", "age":13, "user_id": 123123126, "profile": "xxxxxxxx.jpg"}
{"name":"xxx", "age":12, "user_id": 123123127, "profile": "xxxxxxxx.jpg"}
{"name":"xxx", "age":11, "user_id": 123123128, "profile": "xxxxxxxx.jpg"}
{"name":"xxx", "age":12, "user_id": 123123129, "profile": "xxxxxxxx.jpg"}
head 1.log| jq ".age" | sort | uniq -c
   3 11
   3 12
   2 13
   1 14
### Git 常用操作指令教程 #### 一、初始化仓库 当需要创建一个新的Git项目时,可以在目标文件夹内通过如下命令来初始化一个空的Git仓库: ```bash git init ``` 这条命令会在当前目录下创建名为`.git`的子目录,该目录包含了所有必要的仓库数据结构[^1]。 #### 二、克隆现有仓库 如果想要复制一份已有的Git库至本地计算机,则可以利用`clone`命令完成此过程。例如,要获取位于GitHub上的grit项目副本可执行下列语句: ```bash git clone git://github.com/schacon/grit.git ``` 这不仅会下载整个项目的最新版本到指定位置,还会自动设置好默认的远端服务器以便后续同步更新[^3]。 #### 三、查看提交历史 为了回顾之前的工作进展或是追踪特定更改的内容,可以通过`log`功能浏览过往所有的commit记录;而更进一步地,借助于`reflog`工具还能看到每一个影响HEAD指针变动的动作详情,这对于恢复误操作特别有用[^2]: ```bash # 查看完整的提交日志 git log # 显示简洁版的日志信息 git log --oneline # 展示最近的操作历史(含未保存的状态) git reflog ``` #### 四、管理分支 在实际开发过程中经常需要用到不同分支来进行特性实现或者修复Bug等工作,在这种情况下就需要掌握如何有效地管理和切换各个工作线程: ```bash # 创建新分支并立即切换过去 git checkout -b new_feature_branch # 推送本地分支到远程同名分支(假设不存在冲突) git push origin local_branch:remote_branch # 列出所有存在的分支及其状态 git branch -a ``` 以上就是一些常用的Git基础命令介绍,这些技能足以应对日常大部分场景下的需求了[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值