Linux 相关

系统日志的查看

步骤1:最基础的日志查看
# 查看最近的系统日志(最后10行)
sudo tail /var/log/syslog

# 如果要实时查看日志更新
sudo tail -f /var/log/syslog
步骤2:使用 journalctl 查看今天的日志
# 查看今天的日志
sudo journalctl --since "2025-02-14 00:00:00"

# 查看最近1小时的日志
sudo journalctl --since "1 hour ago"
步骤3:查看特定时间段的日志
# 查看特定时间范围的日志(比如最近30分钟)
sudo journalctl --since "2025-02-14 12:58:39" --until "2025-02-14 13:28:39"
步骤4:按严重程度查看日志
# 只查看错误和警告信息
sudo journalctl -p err..alert

# 查看各种级别的日志:
# emerg (0), alert (1), crit (2), err (3), warning (4), notice (5), info (6), debug (7)
步骤5:查看特定服务的日志
# 列出所有服务单元
systemctl list-units --type=service

# 查看特定服务的日志(例如 SSH)
sudo journalctl -u ssh

# 查看特定服务的最新日志
sudo journalctl -u ssh -n 50
步骤6:搜索特定关键词
# 搜索包含"error"的日志
sudo journalctl | grep error

# 搜索最近包含"failed"的日志
sudo journalctl -n 1000 | grep failed
步骤7:查看启动相关日志
# 查看系统启动日志
sudo journalctl -b

# 查看内核日志
sudo dmesg
步骤8:查看其他重要日志文件
# 查看认证日志
sudo tail /var/log/auth.log

# 查看系统消息
sudo tail /var/log/messages

# 查看应用程序日志
sudo tail /var/log/apport.log
高级用法:
# 输出格式化的日志(更易读)
sudo journalctl -o json-pretty

# 显示日志占用的磁盘空间
sudo journalctl --disk-usage

# 查看最大的日志条目
sudo journalctl -r -o short-full -n 20

free(显示系统内存的使用情况

# 以MB为单位显示内存使用情况
free -m

# 每2秒刷新一次内存使用情况
free -m -s 2

# 以人类可读的格式显示
free -h

# 显示详细信息(宽输出模式)
free -w
  • free:显示系统内存使用情况

  • -m:以兆字节(MB)为单位显示内存使用量

常用参数
  • -b: 以字节为单位显示

  • -k: 以千字节为单位显示(KB)

  • -m: 以兆字节为单位显示(MB)

  • -g: 以吉字节为单位显示(GB)

  • -h: 以人类可读的格式显示(自动选择合适的单位)

  • -s N: 每N秒更新一次显示(持续刷新)

  • -t: 显示内存使用总计

  • -w: 宽输出模式

ps (显示系统中所有进程的详细信息

# 显示进程树
ps -auxf

# 只显示指定用户的进程
ps -u username

# 显示特定进程 ID 的信息
ps -p PID
1. 命令的作用说明
  • ps -aux: 显示系统中所有进程的详细信息

    • ps: Process Status,用于报告当前进程状态

    • -aux: 是三个选项的组合,显示所有用户的所有进程,包括没有控制终端的进程

  • ps -aux | grep python: 过滤仅显示包含 "python" 的进程信息

2. 常用参数
  • -a: 显示所有用户的进程,而不仅仅是当前用户的进程

  • -u: 显示进程的详细信息(用户为主的格式)

  • -x: 显示没有控制终端的进程

  • 其他常用参数:

    • -f: 显示完整格式的输出

    • -e: 显示所有进程

    • -o: 自定义输出格式

tail 命令

作用: tail命令用于查看文件的末尾内容。最常用于实时监控日志文件,查看最新的系统消息和故障排查。

常用参数
  • -f: 实时监控文件更新

  • -n N: 显示最后N行内容

  • -c N: 显示最后N个字节

  • -q: 不显示文件名

  • -v: 显示详细信息

  • --pid=PID: 与-f配合使用,进程结束后退出

实际案例
# 基本用法(默认显示最后10行)
$ tail /var/log/syslog
Feb 14 14:01:55 uluckyXH systemd[1]: Starting System Logging Service...

# 显示最后20行
$ tail -n 20 /var/log/syslog
Feb 14 14:01:55 uluckyXH systemd[1]: Started System Logging Service.

# 实时监控文件更新
$ tail -f /var/log/syslog
Feb 14 14:01:55 uluckyXH rsyslogd[864]: [origin software="rsyslogd" swVersion="8.32.0"]

# 显示最后100个字节
$ tail -c 100 /var/log/syslog
...log content...

# 显示详细信息(带文件名)
$ tail -v /var/log/syslog
==> /var/log/syslog <==
Feb 14 14:01:55 uluckyXH systemd[1]: Started System Logging Service.

# 不显示文件名
$ tail -q /var/log/syslog
Feb 14 14:01:55 uluckyXH systemd[1]: Started System Logging Service.

journalctl 命令

作用

journalctl是systemd系统的日志管理工具,用于查询和显示系统日志。它集中管理所有已记录的日志,包括内核日志、系统日志、服务日志等,并提供强大的过滤和查询功能。

常用参数
  • --since/--until: 指定时间范围

  • -f: 实时追踪最新日志

  • -n N: 显示最后N行日志

  • -u UNIT: 显示指定服务的日志

  • -p PRIORITY: 按优先级过滤日志

  • -b: 显示本次启动的日志

  • -r: 反向显示日志(最新的在前)

实际案例
# 基本用法(查看所有日志)
$ journalctl
Feb 14 14:06:22 uluckyXH systemd[1]: Started System Logging Service.

# 查看最近1小时的日志
$ journalctl --since "1 hour ago"
Feb 14 14:06:22 uluckyXH sshd[1234]: Accepted password for uluckyXH

# 查看特定服务的日志
$ journalctl -u ssh
Feb 14 14:06:22 uluckyXH sshd[1234]: Server listening on 0.0.0.0 port 22

# 实时监控日志
$ journalctl -f
Feb 14 14:06:22 uluckyXH systemd[1]: Starting Daily tasks...

# 只看错误级别的日志
$ journalctl -p err
Feb 14 14:06:22 uluckyXH kernel: CPU: Critical temperature above threshold

# 查看本次启动的日志
$ journalctl -b
Feb 14 14:06:22 uluckyXH kernel: Linux version 5.4.0-42-generic

netstat命令

作用

netstat(network statistics)命令用于显示网络状态。它可以显示网络连接、路由表、接口统计等网络相关信息,是Linux系统中常用的网络调试工具。

常用参数
  • -t: 显示TCP连接

  • -u: 显示UDP连接

  • -n: 显示数字地址而非主机名

  • -l: 仅显示监听连接

  • -p: 显示进程信息

  • -a: 显示所有连接(包括监听和未监听)

  • -r: 显示路由表

实际案例
# 显示所有活动的TCP连接
$ netstat -tn
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 192.168.1.100:22        192.168.1.200:54321    ESTABLISHED

# 显示所有监听端口
$ netstat -tunl
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:22             0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:80             0.0.0.0:*               LISTEN

# 显示进程信息(需要root权限)
$ sudo netstat -tnp
Proto Process   Local Address    Foreign Address    State       PID/Program name
tcp   0    0   192.168.1.100:22 192.168.1.200:54321 ESTABLISHED 1234/sshd

# 显示路由表信息
$ netstat -r
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
default         192.168.1.1     0.0.0.0         UG        0 0          0 eth0

# 显示所有网络连接
$ netstat -a
Proto Local Address  Foreign Address  State
tcp   0.0.0.0:ssh   0.0.0.0:*       LISTEN

# 显示统计信息
$ netstat -s
Tcp:
    373 active connections openings
    2 failed connection attempts

ss命令

作用

ss(socket statistics)命令是用来显示处于活动状态的套接字信息的工具。它是netstat命令的现代替代品,能够显示更多的TCP和状态信息,且执行速度更快。

常用参数
  • -t: 显示TCP连接

  • -u: 显示UDP连接

  • -l: 显示监听状态的连接

  • -n: 显示数字地址和端口

  • -p: 显示进程使用的socket

  • -s: 显示socket摘要

  • -a: 显示所有socket

实际案例
# 显示所有TCP连接
$ ss -t
State    Recv-Q    Send-Q        Local Address:Port        Peer Address:Port     
ESTAB    0         0             192.168.1.100:ssh         192.168.1.200:52471  

# 查看系统监听的端口
$ ss -tunl
Netid    State     Recv-Q    Send-Q        Local Address:Port    
tcp      LISTEN    0         128           0.0.0.0:22            

# 显示进程信息
$ sudo ss -tp
State    Recv-Q    Send-Q    Local Address:Port     Peer Address:Port    Process
ESTAB    0         0         192.168.1.100:22       192.168.1.200:52471 users:(("sshd",pid=1234))

# 查看统计信息
$ ss -s
Total: 186
TCP:   6 (estab 1, closed 0, orphaned 0, timewait 0)

# 查看特定端口
$ ss -tnlp | grep ":80"
LISTEN    0         128           0.0.0.0:80            0.0.0.0:*       

# 显示所有状态的连接
$ ss -ta
State    Recv-Q    Send-Q    Local Address:Port     Peer Address:Port
LISTEN   0         128       0.0.0.0:ssh            0.0.0.0:*