整理常用linux命令
纯以记录为目的,以便日后翻查或者重新理解命令使用方法
linux
日志收集
- 在用grep筛选日志,上下相邻的几条日志会有可能对当时排查问题有另外的提示作用
- 选荐-n显示日志的行号,观察该行号附近的日志分析问题,如显示每条error的行号
grep -n "error" FILE_PATH
- 选项-A、-B和-C分别可向下、向上和同时上下,额外显示N行日志。如在error日志行上下再显示5行日志
grep -C5 "error" FILE_PATH
- grep多条件筛选日志
- 与逻辑,如下搜索包含ERROR与指定角色123456的行
grep "error.*role_id:123456" FILE_PATH
- 或逻辑,如下搜索包含ERROR或WARN或lua异常栈的日志
grep --perl-regex -n "WARN|ERR|stack traceback:|\t+" *
- grep多文件筛选日志
- 查找所有日志文件名含有2023-06-25到2023-06-29日期,文件内容包含”error”内容的日志
grep "error" --include \*2023-06-2[5-9].log ./*
- 日志中同时满足以下条件,的count数字求和
- type:1或者type:2
- role_id:x
测试样例:
echo \ "order_id:x type:1 role_id:x count:1\n" \ "order_id:x type:2 role_id:x count:3\n" \ "order_id:x type:3 role_id:x count:2\n" \ "order_id:x type:4 role_id:y count:2\n" | \ grep -e "order_id.* type:[12] role_id:x" | awk -F " " '{print $4}' | awk -F ":" 'BEGIN {sum=0} {sum=sum+$2} END{print sum}'
统计
- 角色登录次数
```shell
function get_counts() {
local result=
echo "$1" | grep "role login succ" | awk -F ":" '{counts[$NF]++;} END{for (k in counts) print "["k"]="counts[k]}'
echo “($result)” } txt=$(cat -v «- TXT_EOF role login succ. role_id:x role login succ. role_id:x role login succ. role_id:y sdflksdlf 234 TXT_EOF ) declare -A map=get_counts "$txt"
for uuid in ${!map[@]}; do echo $uuid ${map[$uuid]} done
## 文件
以排除规则,打包文件&目录
tar --exclude-from=./YOUR_FILE -zcPf ./YOUR_DST_FILE ./YOUR_SRC_FILE
递归子目录,并将以`.mp3`为后缀的文件,并复制了上层目录my_mp3_dir<br>
`find . -iregex ".*\.mp3.*" -exec cp {} ../my_mp3_dir/ \;`
按文件大到小排序<br>
`ls -lhS`
按文件大到小排序,只输出前10的文件
`ls -lhS | heal -l 10`
打印目录文件大小<br>
`du -sh *`
file命令查看文件类型<br>
* file动态库文件样例
file libnss1_files-2.2.4.so libnss1_files-2.2.4.so: ELF 32-bit LSB shared object,Intel80386, version 1,not stripped
* file执行程序文件样例
file test test: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=2514daeb6c3a3db099cdc45e0b8936bd0f9f8388, for GNU/Linux 3.2.0, not stripped
* file代码文件样例
file test.cpp test.cpp: C source, ASCII text, with CRLF line terminators
## 网络
查看指定进程ID打开的UDP和TCP网络端口<br>
`ss -anplut | grep PID`
扫描tcp端口<br>
`nc -v 127.0.0.1 6789`
扫描udp端口<br>
`nc -vu 127.0.0.1 6789`
查询被占用的网络端口<br>
通过进程ID,查看监听的网络端口<br>
`netstat -lnp|grep PID`
通过进程ID,查看打开的所有网络端口<br>
`netstat -apn | grep PID`
显示处于监听状态的Tcp的端口信息<br>
`netstat -tlp`
显示处于监听状态的udp的端口信息<br>
`netstat -ulp`
显示处于监听状态的tcp、udp的端口信息<br>
`netstat -tulp`
ssh远端执行指令YOUR_CMD_HERE
`ssh -t root@192.168.56.102 "YOUR_CMD_HERE && exec $SHELL -l"`
or跨行定义多条指令
ssh -t root@192.168.56.102 « EOF YOUR_CMD_HERE EOF
将远端192.168.0.20用户xxx下的/home/xxx/test文件,复制到当前目录<br>
`scp xxx@192.168.0.20:/home/xxx/test ./`
将当前目录test文件,复制到远端192.168.0.20用户xxx下的/home/xxx/<br>
`scp ./test xxx@192.168.0.20:/home/xxx/`
返回http请求的返回码<br>
`curl --max-time 5 -sw %{http_code} -o nul --url http://localhost:45679/index.html`
抓取tcp传输协议,源端口2601目标端口57816的数据连接数据,主机和端口以(-nn)数字显示,包体数据以(-X)十六进程和ASCI编码输出
tcpdump tcp -X -nn -i lo and src port 2601 and dst port 57816
## 性能监控
监察当前目录日志文件的写入变化<br>
`watch -n 1 -d 'ls -lSh'`
## 进程
根据搜索关键词找出进程ID<br>
`ps aux|grep "KEY WORLD"|grep -v grep|awk '{print $2}'`
查看子进程依赖<br>
`ps -ef --forest`
查看线程信息<br>
`ps -Lf PID`
# 调试
显示计数器所在行号,要求执行程序带-g编译
`addr2line -e ./bin/app_debug 0x40613e`
## 版本管理
### git
* 换行符转换
Linux/Mac系统文件以LF换行, 而window以CRLF。在其中一个系统创建文件后,在另一个系统git clone下来后,文件会出现乱码和运行报错。通过如下git的全局设置,使用clone时自动转换换行符
`git config --global core.autocrlf input`
## 其它
将变量数值$name输出到模板脚本my.sh<br>
```shell
name="world"
cat > my.sh << EOF
echo "hello $name"
EOF
cat my.sh
echo "hello world"
将一段文本存入变量
script=$(cat <<- TXT_EOF
print("hello world")
TXT_EOF
)
查看系统版本信息
cat /proc/version
切换命令前/后台
ctrl+z将当前命令切换到后台
fg命令将最近一次切到的台台的命令,切回前台
ubuntu/Debian sh命令默认指向dash,而centos/rhel指向bash。所以在其中运行正常的shell脚本,视具体的用法在另一系统下会语法错误
ubuntu切换sh为bash的方法如下
sudo dpkg-reconfigure dash
在弹出的对话框界面中选择 <No> 然后按回车。
linux
设置系统全局代理
# 设置 http proxy
export http_proxy="http://user:pwd@127.0.0.1:1234"
# 设置 https proxy
export https_proxy="http://user:pwd@127.0.0.1:1234"
临时设置代理,不是所有情况下都有效。比如docker
做了网络隔离的话,在宿主机设置了http_proxy容器里用不了
http_proxy=http://127.0.0.1:7890 curl google.com
window
打出window subsystem子系统目录
\\wsl$
子系统里访问window文件系统,将以下配置添加到/etc/wsl.conf,如果没有则创建
[automount]
options = "metadata"
为了方便切换工作环境,以指定window目录打开wsl
wsl --cd F:\workspace
xfce快捷键
切换到第X个虚拟桌面
ctrl+f1
ctrl+f2
ctrl+…
切换到左右上下桌面
ctrl+alt+left
ctrl+alt+right
ctrl+alt+up
ctrl+alt+down
显示任务管理器
ctrl+shift+esc
以第X个tty进入系统
ctrl+atl+f1
ctrl+atl+f2
ctrl+atl+…
显示桌面
ctrl+alt+d
在命令重启gdm
sudo systemctl restart lightdm
原文:
https://lizijie.github.io/2022/06/26/%E6%95%B4%E7%90%86%E5%B8%B8%E7%94%A8linux%E5%91%BD%E4%BB%A4.html
作者github:
https://github.com/lizijie