分类: 命令笔记

  • 管道、重定向和文本过滤速查

    Shell 的效率很大一部分来自把简单工具串在一起。理解标准输入、标准输出和标准错误后,很多临时分析都不需要写脚本。

    三种常见重定向

    command > output.txt
    command >> output.txt
    command 2> error.txt
    command > all.txt 2>&1

    > 会覆盖文件,>> 会追加。修改重要文件前,不应把未经检查的命令输出直接重定向过去;先输出到临时文件并校验更可靠。

    管道中的过滤

    journalctl -u ssh --since today | grep -i 'failed'
    ss -lntp | awk 'NR==1 || /:22 /'
    du -xhd1 /var | sort -h
    cut -d: -f1 /etc/passwd | sort

    grep 负责筛选行,cut 适合规则分隔符,awk 更适合按列和条件处理。数据结构复杂时,JSON 应优先交给 jq,而不是用正则硬拆。

    tee:既观察又保存

    command | tee result.txt
    command | tee -a result.txt

    tee 会同时把内容显示在终端并写入文件,适合保留诊断过程。需要管理员权限写系统文件时,应明确最终目标,先做语法检查,再用原子替换,避免一条错误管道直接破坏配置。

    管道很强,但也会隐藏中间步骤的失败。用于自动化时可以启用 set -o pipefail,让管道中任意命令失败都能被检测到。

  • 每天都会用到的一组 Linux 基础命令

    Linux 命令很多,但日常维护真正高频的只有一小组。与其背诵大量选项,不如先熟悉查看状态、定位文件和观察日志的组合方式。

    文件与目录

    pwd
    ls -lah
    cp -a source destination
    mv old-name new-name
    mkdir -p /path/to/dir
    stat filename

    cp -a 会尽量保留权限、时间和链接关系,做配置备份时比普通复制更稳妥。涉及删除前,我习惯先用 statreadlink -f 再确认一次目标。

    查找内容

    find /etc -type f -name '*.conf'
    grep -RIn 'keyword' /etc
    sed -n '20,60p' file
    tail -f /var/log/syslog

    查日志时先限制目录、时间和关键词,可以少读很多无关信息。现代系统还应熟悉 journalctl -u 服务名 --since today

    进程与网络

    ps aux --sort=-%mem | head
    systemctl status nginx
    ss -lntup
    ip -brief address
    ip route

    ss 用于确认谁在监听端口,ip route 则回答流量会从哪里出去。网络故障时只反复 ping 往往信息不足,最好同时检查地址、路由、DNS 和监听状态。

    磁盘与资源

    df -hT
    du -sh /var/*
    free -h
    uptime

    这些命令的价值在于组合。先用概览命令发现异常,再用更具体的过滤条件定位原因,通常比直接修改配置更快也更安全。