整理常用linux命令

纯以记录为目的,以便日后翻查或者重新理解命令使用方法

linux

日志收集

  • 在用grep筛选日志,上下相邻的几条日志会有可能对当时排查问题有另外的提示作用
    1. 选荐-n显示日志的行号,观察该行号附近的日志分析问题,如显示每条error的行号

grep -n "error" FILE_PATH

  1. 选项-A、-B和-C分别可向下、向上和同时上下,额外显示N行日志。如在error日志行上下再显示5行日志

grep -C5 "error" FILE_PATH

  • grep多条件筛选日志
    1. 与逻辑,如下搜索包含ERROR与指定角色123456的行

grep "error.*role_id:123456" FILE_PATH

  1. 或逻辑,如下搜索包含ERROR或WARN或lua异常栈的日志

grep --perl-regex -n "WARN|ERR|stack traceback:|\t+" *

  • grep多文件筛选日志
  1. 查找所有日志文件名含有2023-06-25到2023-06-29日期,文件内容包含”error”内容的日志 grep "error" --include \*2023-06-2[5-9].log ./*
  • 日志中同时满足以下条件,的count数字求和
    1. type:1或者type:2
    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}'
      

文件

以排除规则,打包文件&目录 tar –exclude-from=./YOUR_FILE -zcPf ./YOUR_DST_FILE ./YOUR_SRC_FILE

递归子目录,并将以.mp3为后缀的文件,并复制了上层目录my_mp3_dir
find . -iregex ".*\.mp3.*" -exec cp {} ../my_mp3_dir/ \;

按文件大到小排序
ls -lhS

按文件大到小排序,只输出前10的文件 ls -lhS | heal -l 10

打印目录文件大小
du -sh *

file命令查看文件类型

  • 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网络端口
ss -anplut | grep PID

扫描tcp端口
nc -v 127.0.0.1 6789

扫描udp端口
nc -vu 127.0.0.1 6789

查询被占用的网络端口
通过进程ID,查看监听的网络端口
netstat -lnp|grep PID

通过进程ID,查看打开的所有网络端口
netstat -apn | grep PID

显示处于监听状态的Tcp的端口信息
netstat -tlp

显示处于监听状态的udp的端口信息
netstat -ulp

显示处于监听状态的tcp、udp的端口信息
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文件,复制到当前目录
scp xxx@192.168.0.20:/home/xxx/test ./

将当前目录test文件,复制到远端192.168.0.20用户xxx下的/home/xxx/
scp ./test xxx@192.168.0.20:/home/xxx/

返回http请求的返回码
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

性能监控

监察当前目录日志文件的写入变化
watch -n 1 -d 'ls -lSh'

进程

根据搜索关键词找出进程ID
ps aux|grep "KEY WORLD"|grep -v grep|awk '{print $2}'

查看子进程依赖
ps -ef --forest

查看线程信息
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

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"

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

PREVIOUSJenkins流水线 ssh-agent执行远端代码
NEXT数值程序化 lua中的load运用