news 2026/6/21 3:18:00

Linux命令行效率提升:从Shell技巧到文本处理与系统管理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux命令行效率提升:从Shell技巧到文本处理与系统管理

1. 从命令行开始:效率翻倍的基石

在Linux世界里,效率的提升往往不是靠某个花哨的图形界面工具,而是源于对命令行这个核心工具的深度理解和灵活运用。很多刚从Windows或macOS转过来的朋友,会觉得黑底白字的终端窗口既陌生又低效,这其实是一个巨大的误解。命令行不是复古的象征,它是Linux系统最直接、最强大的神经中枢。我从业十几年,从运维到开发,几乎所有高效的工作流都构建在命令行之上。它的高效,体现在几个核心层面:首先是可脚本化,任何重复性操作都可以固化下来一键执行;其次是资源占用极低,在远程服务器或配置一般的机器上,图形界面可能卡顿,但命令行永远流畅;最后是精确与控制力,你清楚地知道每一个指令在做什么,系统完全按照你的指令运行,没有图形界面那些不可见的“魔法”。

对于新手,第一步是选择一个趁手的终端模拟器。gnome-terminalkonsole是桌面环境自带的可靠选择。但如果你想追求极致,可以试试Alacritty(GPU加速,速度快到飞起)或Kitty(功能丰富,支持分屏和图片预览)。更重要的是,拥抱ShellBash是默认且强大的,但Zsh配合Oh My Zsh框架,能提供更智能的命令补全、主题美化(让你一眼看清Git状态、当前路径)和丰富的插件。Fish Shell则以开箱即用的友好交互著称,对初学者特别友好。别小看这些工具,一个配色舒适、提示信息清晰的终端环境,能直接降低你的认知负荷,让你更专注于任务本身。

提示:不要一开始就追求复杂的配置。先用好系统自带的工具,当你感到某个操作重复了三次以上,或者觉得“要是有个功能能XXX就好了”的时候,再去寻找对应的插件或技巧。效率工具是用来解决痛点的,不是为了堆砌而学习。

1.1 Shell历史与命令搜索:告别重复输入

你肯定遇到过这种情况:几分钟前刚执行过一个很长的命令,现在想再用,却记不全了,只能靠模糊记忆重新敲一遍,或者在一长串history输出里费力地翻找。这是对效率的极大浪费。Shell历史是座金矿,关键在于你怎么挖掘。

最基础也最常用的是Ctrl+R(反向搜索历史命令)。按下后,终端会变成(reverse-i-search)‘’:提示,这时你开始输入之前命令的任意部分(哪怕只是一个单词),它会动态匹配并显示最近一条符合的历史命令。继续按Ctrl+R可以向前翻找更早的匹配项。找到后,按回车直接执行,或者按方向键右键将命令提取到提示符上进行修改。这个操作需要一点肌肉记忆,但一旦习惯,找命令的速度快得惊人。

更进阶一些,可以调整Shell的历史记录行为。在你的~/.bashrc~/.zshrc文件里加入以下几行:

# 忽略重复命令和以空格开头的命令(用于输入敏感命令时不记录) export HISTCONTROL=ignoreboth # 设置历史记录条数,这里设为10000条 export HISTSIZE=10000 export HISTFILESIZE=20000 # 让所有终端窗口的历史记录实时同步(非常实用!) shopt -s histappend export PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"

最后三行是关键。histappend确保退出会话时历史记录是追加而不是覆盖。PROMPT_COMMAND这个技巧可能有点复杂,它使得每当显示新提示符前,都会将内存中的历史立即写入文件,并重新读取,这样你新开的任何一个终端窗口,都能立刻看到其他窗口刚执行过的命令历史,实现了“全局历史同步”。这个功能在同时操作多个终端标签页时,幸福感提升巨大。

另外,别忘了!(bang)操作符的妙用。!!代表上一条命令,当你执行一条需要sudo权限的命令却忘了加sudo时,直接输入sudo !!即可。!$代表上一条命令的最后一个参数,!^代表第一个参数。例如,你刚执行了tar -czf backup.tar.gz /path/to/important/folder,接下来想查看这个压缩包大小,就可以用ls -lh !$,Shell会自动将!$展开为/path/to/important/folder

1.2 别名与函数:将复杂操作封装成简单单词

别名(Alias)是命令行效率的“快捷键”。它的本质是将一个(通常较长或复杂的)命令字符串,映射到一个简短的单词上。设置别名非常简单,语法是alias 简称=‘实际命令’。你可以把这条命令直接写在~/.bashrc~/.zshrc文件的末尾。

一些我每天都会用到的通用别名示例:

# 让命令更安全(-i选项代表交互式,删除前会询问) alias rm='rm -i' alias cp='cp -i' alias mv='mv -i' # 让列表显示更直观(-h人类可读大小,-l长格式,-a显示隐藏文件) alias ll='ls -alhF' alias la='ls -A' alias l='ls -CF' # 快速导航到常用目录 alias cdwork='cd ~/projects/current_work' alias cdlogs='cd /var/log/' # 简化常用命令 alias gits='git status' alias gitc='git commit' alias gitp='git push'

对于更复杂的、需要逻辑判断或多步操作的任务,别名就力不从心了,这时需要用到Shell函数。函数可以接受参数,能实现条件判断和循环。例如,创建一个快速创建目录并立即进入的函数mkcd

mkcd () { mkdir -p "$1" cd "$1" }

将这个函数定义写入配置文件后,执行mkcd new_project,就会创建new_project目录并自动进入,一气呵成。

再比如,一个查找并杀死指定进程名的函数killps

killps () { local pid pid=$(ps aux | grep -i "$1" | grep -v grep | awk '{print $2}') if [ -n "$pid" ]; then echo "Killing process $pid ($1)" kill -9 "$pid" else echo "Process '$1' not found." fi }

使用killps nginx就能快速结束所有Nginx进程,比手动ps aux | grep再复制PID要快得多。

注意:别名和函数是高度个人化的。我的建议是,不要盲目复制别人的配置。最好的方法是,在接下来的一两周里,随身准备一个便签(或一个文本文件),每当你发现自己第三次输入某个冗长或复杂的命令时,就把它记下来。周末花10分钟,思考如何为它创建一个贴切的别名或函数。这样积累下来的配置,才是真正属于你、能切实提升你工作效率的利器。

2. 终端多路复用器:永不丢失的工作现场

你有没有过这样的经历:在终端里启动了一个需要长时间运行的服务(比如一个Web服务器,或者一个数据编译任务),然后不小心关闭了终端窗口,或者网络连接突然中断,导致所有进程都被终止,工作前功尽弃?或者,你需要同时查看日志、编辑代码、运行测试,于是在桌面上打开了五六个终端窗口,来回切换得头晕眼花?终端多路复用器(Terminal Multiplexer)就是解决这些痛点的终极答案。它允许你在一个终端窗口内创建多个虚拟终端(会话),并且这些会话可以持久化存在,即使你断开连接也不会消失。

tmux是目前最主流、功能最强大的终端多路复用器。它引入了三个核心概念:会话(Session)窗口(Window)面板(Pane)。你可以把一个会话理解为一个独立的工作空间,里面可以包含多个窗口(就像浏览器标签页),而每个窗口又可以水平或垂直分割成多个面板(就像分屏)。所有这一切,都发生在一个物理终端窗口之内。

2.1 tmux基础:会话、窗口与面板管理

安装tmux非常简单,在基于Debian/Ubuntu的系统上使用sudo apt install tmux,在RHEL/CentOS上使用sudo yum install tmux

启动tmux只需输入tmux命令,这会创建一个新的匿名会话。你会注意到屏幕底部出现了一个状态栏,这是tmux的界面。tmux的所有操作都通过前缀键(Prefix Key)触发,默认是Ctrl+b。你需要先按下Ctrl+b,松开,然后再按其他键来执行具体操作。这个操作一开始可能觉得别扭,但习惯后非常流畅。

会话管理

  • tmux new -s session_name:创建一个名为session_name的新会话。
  • Ctrl+b d:从当前会话中分离(Detach)。你的所有进程都会在后台继续运行,但你会回到启动tmux前的普通Shell。
  • tmux ls:列出所有存在的后台会话。
  • tmux attach -t session_name:重新连接到名为session_name的会话。你的工作现场(打开的窗口、运行的命令)会完整地恢复,就像从未离开过。
  • 在会话内,Ctrl+b s:以交互式列表选择并切换会话。

窗口管理

  • Ctrl+b c:在当前会话中创建一个新窗口。
  • Ctrl+b 0-9:直接切换到0到9号窗口。
  • Ctrl+b n:切换到下一个窗口。
  • Ctrl+b p:切换到上一个窗口。
  • Ctrl+b ,:重命名当前窗口(方便记忆,比如“编辑”、“日志”、“测试”)。
  • Ctrl+b &:关闭当前窗口(会要求确认)。

面板管理

  • Ctrl+b %:将当前面板垂直分割成左右两个。
  • Ctrl+b ":将当前面板水平分割成上下两个。
  • Ctrl+b 方向键:在面板间移动焦点。
  • Ctrl+b Ctrl+方向键:按住Ctrl调整面板大小(需要先按前缀键Ctrl+b,再按Ctrl+方向键)。
  • Ctrl+b x:关闭当前焦点所在的面板。

仅仅掌握这些基础操作,你的工作效率就会发生质变。你可以把开发环境、日志监控、版本控制、数据库客户端分别放在不同的窗口或面板中,通过快捷键瞬间切换,再也不用在多个操作系统窗口间费力寻找了。

2.2 高级tmux配置与工作流集成

默认的tmux配置键位可能不符合一些人的习惯(比如Ctrl+b距离较远)。我们可以通过配置文件~/.tmux.conf来自定义。一个实用的配置示例如下:

# 将前缀键从Ctrl+b改为Ctrl+a(更顺手) set -g prefix C-a unbind C-b bind C-a send-prefix # 设置鼠标支持(可以直接用鼠标点击切换面板、调整大小,对新手友好) set -g mouse on # 设置状态栏更美观、信息更丰富 set -g status-interval 1 set -g status-justify centre set -g status-left '#[fg=green]#H #[fg=black]• #[fg=green,bright]#(uptime | cut -d"," -f1 | cut -d" " -f4,5)#[default]' set -g status-right '#[fg=red,bg=default]#(tmux-mem-cpu-load) #[fg=white,bg=default]%a %Y-%m-%d %H:%M' # 设置面板边框颜色,更清晰 set -g pane-border-style fg=colour240 set -g pane-active-border-style fg=green # 绑定快捷键:快速重新加载配置文件 bind r source-file ~/.tmux.conf \; display-message "Config reloaded." # 绑定快捷键:垂直/水平分割面板,并直接进入当前路径 bind | split-window -h -c "#{pane_current_path}" bind - split-window -v -c "#{pane_current_path}"

这个配置做了几件重要的事:1) 更换了更顺手的前缀键。2) 开启了鼠标支持,降低学习成本。3) 美化了状态栏,显示了主机名、负载、内存CPU信息和时间。4) 设置了分割面板时,新面板的起始路径与当前面板相同,这非常实用,避免了分割后还要手动cd的麻烦。

更强大的功能在于与工作流的集成。假设你是一个Web全栈开发者,一个典型的工作日可能需要:一个窗口用于前端代码编辑和实时编译(比如npm run dev),一个窗口用于后端API服务,一个窗口用于查看数据库,还有一个窗口用于跑测试或查看日志。你可以写一个Shell脚本,在每天开工时一键启动这个环境:

#!/bin/bash # 启动开发环境脚本 dev_env.sh SESSION_NAME="web_dev" # 检查会话是否已存在,存在则直接连接 tmux has-session -t $SESSION_NAME 2>/dev/null if [ $? != 0 ]; then # 创建新会话,并命名为 web_dev,第一个窗口命名为“editor” tmux new-session -d -s $SESSION_NAME -n editor # 在第一个窗口启动代码编辑器(比如Vim)并进入项目目录 tmux send-keys -t $SESSION_NAME:editor 'cd ~/projects/my_web_app && vim' C-m # 创建第二个窗口,命名为“server”,并启动后端服务 tmux new-window -t $SESSION_NAME -n server tmux send-keys -t $SESSION_NAME:server 'cd ~/projects/my_web_app/backend && npm start' C-m # 创建第三个窗口,命名为“database” tmux new-window -t $SESSION_NAME -n database tmux send-keys -t $SESSION_NAME:database 'mysql -u root -p my_database' C-m # 创建第四个窗口,命名为“logs”,并实时查看应用日志 tmux new-window -t $SESSION_NAME -n logs tmux send-keys -t $SESSION_NAME:logs 'tail -f /var/log/my_app/application.log' C-m # 最后,回到第一个窗口(编辑器) tmux select-window -t $SESSION_NAME:editor fi # 连接到该会话(如果已在会话中,此命令会失败,可忽略) tmux attach -t $SESSION_NAME

每天上班,只需执行./dev_env.sh,一个完整的、预先配置好的开发环境就瞬间呈现在你面前。下班时,直接Ctrl+b d分离会话,所有进程安全地在后台运行。晚上回家如果需要紧急处理,通过SSH连接到服务器,tmux attach -t web_dev,白天的现场分毫未动。这种“工作现场持久化”的能力,是图形界面终端难以比拟的。

3. 高效文本处理:命令行下的瑞士军刀

Linux哲学强调“一切皆文件”,而文本文件又是其中最重要的信息载体。日志分析、数据清洗、配置修改、报告生成……几乎所有工作都涉及文本处理。掌握命令行下的文本处理工具,意味着你能以编程的方式、自动化的手段来处理文本,效率是手动点击编辑的数十倍甚至上百倍。这套工具链通常被称为“文本处理三剑客”:grep(查找)、sed(流编辑)和awk(文本分析)。它们各自独立又相互配合,是Linux高手必备的技能。

3.1 grep与正则表达式:精准定位信息

grep(Global Regular Expression Print)用于在文件中搜索匹配特定模式(通常是正则表达式)的行,并将匹配到的行打印出来。它的基础用法很简单:grep pattern file。但它的强大源于对正则表达式的支持。

基础但高频的选项

  • -i:忽略大小写。grep -i error log.txt会匹配errorERRORError等。
  • -v:反向选择,即打印不匹配模式的行。常用于过滤掉不关心的内容,比如ps aux | grep python | grep -v grep,可以排除掉grep进程本身。
  • -n:显示匹配行所在的行号。这对于在大型文件中定位问题非常关键。
  • -r-R:递归搜索目录下的所有文件。grep -r "function_name" ./src/
  • -l:仅打印包含匹配项的文件名,而不是具体行。在需要知道哪些文件包含特定内容时很有用。
  • -c:统计匹配到的行数,而不是打印行本身。

正则表达式实战: 正则表达式是grep的灵魂。这里介绍几个最核心的元字符:

  • .:匹配任意单个字符(除了换行符)。gr.y匹配graygreygr2y等。
  • *:匹配前面的子表达式零次或多次。go*d匹配gdgodgoodgooood等。
  • +:匹配前面的子表达式一次或多次(需使用-E启用扩展正则,或使用egrep)。go+d匹配godgood,但不匹配gd
  • ?:匹配前面的子表达式零次或一次。colou?r匹配colorcolour
  • []:字符集合,匹配括号内的任意一个字符。[Gg]rep匹配Grepgrep[0-9]匹配任意数字。
  • ^:匹配行的开始。^#匹配以#开头的行(常用于匹配注释)。
  • $:匹配行的结尾。;$匹配以分号结尾的行。
  • \:转义字符,用于匹配元字符本身。grep '\.$' file匹配以句点结尾的行。

一个综合例子:在Nginx访问日志中,找出所有状态码为4xx或5xx(客户端或服务端错误),且请求方法为POST的请求。

grep -E 'POST.*\" (4|5)[0-9]{2} ' /var/log/nginx/access.log

这里-E启用扩展正则,(4|5)匹配4或5,[0-9]{2}匹配两个数字(即状态码的后两位)。

3.2 sed:流编辑器,批量修改的艺术

如果说grep是“查找”,那么sed(Stream Editor)就是“查找并替换”,但它能做的远不止替换。它按行处理文本,可以将匹配特定模式的行执行删除、替换、插入、打印等操作。其最经典的用法是s(替换)命令。

基本替换语法sed 's/原模式/替换文本/标志' file

  • s代表替换(substitute)。
  • 默认只替换每行中第一次匹配到的内容。
  • 标志g:全局替换,替换行中所有匹配项。sed 's/foo/bar/g' file
  • 标志i:忽略大小写。sed 's/foo/bar/gi' file
  • 标志数字:替换第N次匹配到的内容。sed 's/foo/bar/2' file替换每行第二个foo

实战场景

  1. 批量修改配置文件:将文件中的所有old_host替换为new_host,并直接保存到原文件(-i选项)。

    sed -i 's/old_host/new_host/g' application.conf

    警告-i选项会直接修改原文件,务必先不加-i运行一次,确认输出无误后再执行。或者使用-i.bak,它会先创建一个带.bak后缀的备份文件。

  2. 删除空白行

    sed '/^$/d' file.txt

    /^$/匹配空行(行首紧接行尾),d命令表示删除。

  3. 删除包含特定关键词的行:删除所有包含DEBUG日志级别的行。

    sed '/DEBUG/d' app.log > app_production.log
  4. 在指定行后插入内容:在配置文件第10行后插入一行新配置。

    sed -i '10a\new_configuration_line' config.txt

    10a表示在第10行后(append)插入,\后面接要插入的文本。

sed功能极其强大,甚至可以实现简单的编程逻辑(如条件分支、循环),但对于日常批量文本处理,掌握s替换和d删除,以及-i-n-e等常用选项,已经能解决80%的问题。

3.3 awk:不仅仅是文本切割,更是微型数据处理语言

awksed更进一步,它不仅仅是一个命令,更是一门专为文本处理设计的编程语言。它擅长处理结构化文本(比如CSV、日志、ls -l的输出等),能轻松地基于列(字段)进行操作。其基本工作原理是:逐行扫描文件,根据指定的分隔符将每行切分成若干个字段(默认以空格或制表符分隔),字段名依次为$1$2, ...,$NF代表最后一个字段,$0代表整行。

基础语法awk '模式 {动作}' file

  • 如果省略模式,则对所有行执行动作。
  • 如果省略动作,则默认动作是打印匹配模式的行(类似grep)。

最常用的内置变量

  • NR:当前处理的行号(Number of Records)。
  • NF:当前行的字段数量(Number of Fields)。
  • FS:输入字段分隔符(Field Separator),默认为空格。可以在BEGIN块中设置,如BEGIN {FS=":"}
  • OFS:输出字段分隔符(Output Field Separator),默认为空格。

实战场景

  1. 提取特定列:打印/etc/passwd文件的第一列(用户名)和第三列(用户ID)。

    awk -F: '{print $1, $3}' /etc/passwd

    -F:指定输入分隔符为冒号。

  2. 基于条件过滤行:打印系统进程列表中,CPU使用率超过5%的进程。

    ps aux | awk '$3 > 5.0 {print $0}'

    $3ps aux输出的第三列(CPU百分比)。

  3. 数值计算与统计:统计一个日志文件中,每个IP地址的访问次数。

    awk '{ip_count[$1]++} END {for (ip in ip_count) print ip, ip_count[ip]}' access.log

    这里使用了awk的数组功能。$1是第一列(假设是IP地址),ip_count[$1]++为每个IP创建一个计数器并递增。END块在处理完所有行后执行,用于遍历数组并打印结果。这是awk数据分析能力的体现。

  4. 格式化输出:结合printf进行格式化。

    awk -F: '{printf "用户名:%-15s UID:%s\n", $1, $3}' /etc/passwd

    %-15s表示左对齐、宽度15的字符串。

awk的学习曲线比grepsed陡峭,但它的回报是巨大的。一旦你习惯了用awk的思维去处理表格数据,你会发现很多原本需要写Python脚本的任务,用一行awk命令就能优雅解决。建议从简单的列提取和条件打印开始,逐步尝试使用内置函数(如lengthsubstrgsub)和数组。

4. 文件与系统管理:快人一步的日常操作

日常工作中,与文件和系统打交道的时间占了很大比例。掌握一些高效的文件操作和系统观察技巧,能让你在管理服务器、整理项目、排查问题时游刃有余。

4.1 文件查找与定位:find与locate

在浩如烟海的文件系统中快速找到目标,是基本功。find命令功能最强大也最常用,它通过实时遍历目录树来查找文件,支持基于名称、类型、大小、时间、权限等几乎所有属性的搜索。

find核心用法

  • 按名称查找find /path/to/search -name "filename.txt"。使用通配符:-name "*.log"-iname忽略大小写。
  • 按类型查找-type f查找普通文件,-type d查找目录,-type l查找符号链接。
  • 按时间查找
    • -mtime n:查找n*24小时前修改过的文件。-mtime +7查找7天前修改的,-mtime -1查找1天内修改的。
    • -mmin n:查找n分钟前修改过的文件。更精细。
  • 按大小查找-size +10M查找大于10MB的文件,-size -1G查找小于1GB的文件。单位可以是c(字节),kMG
  • 组合条件与执行动作
    • -a-and表示逻辑与,-o-or表示逻辑或,!-not表示逻辑非。
    • -exec:对找到的文件执行命令。这是find的杀手锏。格式非常重要-exec command {} \;{}代表找到的文件路径,\;是命令结束符。
    • -delete:直接删除找到的文件(危险!先不加这个选项运行确认)。

实战例子

  1. 查找/home目录下所有.bak备份文件并删除:

    find /home -type f -name "*.bak" -delete

    (再次强调,-delete前最好先运行find /home -type f -name "*.bak"确认目标)

  2. 查找当前目录下所有.php文件,并搜索其中是否包含“mysql_connect”这个不安全的函数:

    find . -name "*.php" -exec grep -l "mysql_connect" {} \;

    grep -l只列出包含匹配项的文件名。

  3. 查找最近3天内被修改过,且大于100MB的日志文件:

    find /var/log -type f -name "*.log" -mtime -3 -size +100M

locate命令是另一个查找工具,它依赖于一个预先构建好的文件名数据库(通常由updatedb命令定期更新),因此查找速度极快,几乎是瞬间完成。但它无法查找刚刚创建的文件(除非更新了数据库),且查找条件不如find丰富。用法很简单:locate filename。适合快速定位你知道大概名称的系统文件或安装的软件。

4.2 进程管理与系统监控:ps, top, htop, lsof

了解系统正在运行什么,资源被谁占用,是运维和调试的基石。

  • ps(进程状态):最基础的进程查看命令。ps aux是最常用的组合,显示所有用户的详细进程信息。输出列中,%CPU%MEM分别代表CPU和内存占用率,COMMAND是启动命令。常与grep联用:ps aux | grep nginx

  • top:动态、交互式的进程监控工具。它提供了一个实时更新的系统资源概览和进程列表。运行后,按P按CPU排序,按M按内存排序,按1显示所有CPU核心的详情。top的信息很全,但界面相对古老。

  • htoptop的增强版,需要额外安装(sudo apt install htop)。它提供了彩色界面、垂直和水平滚动、鼠标支持、树状视图(按F5)显示进程父子关系,以及更直观的CPU/内存使用条。对于交互式监控,htop的体验远胜top。你可以用方向键选择进程,按F9发送信号(如终止进程),按F2进入设置。

  • lsof(列出打开文件):这个命令的强大超乎想象。在Linux中,“一切皆文件”,包括网络连接、管道、设备等。lsof可以列出被进程打开的所有“文件”。

    • lsof -i :80:查看谁在占用80端口。
    • lsof /path/to/file:查看哪个进程正在使用某个文件(例如,无法卸载磁盘时)。
    • lsof -p <pid>:查看指定PID进程打开的所有文件。
    • lsof -u username:查看指定用户打开的所有文件。

一个经典的故障排查场景:网站端口80无法启动,提示“Address already in use”。

# 1. 查看80端口被谁占用 sudo lsof -i :80 # 输出会显示进程名和PID,比如`nginx`, PID 1234。 # 2. 如果想结束它(谨慎操作) sudo kill 1234 # 或者强制结束 sudo kill -9 1234

4.3 网络诊断与数据抓取:curl, wget, netstat, ss

  • curlwget:都是命令行下载工具,curl更侧重于传输数据、与API交互,支持大量协议和选项;wget更侧重于递归下载网页。日常用curl测试API接口极其方便:

    # 发送GET请求 curl https://api.example.com/data # 发送带JSON体的POST请求 curl -X POST https://api.example.com/create \ -H "Content-Type: application/json" \ -d '{"name": "test", "value": 123}' # 只显示HTTP响应头 curl -I https://www.example.com # 跟随重定向并显示详细信息 curl -L -v https://example.com
  • netstatss:查看网络连接、路由表、接口统计等信息。ss(Socket Statistics)是netstat的现代替代品,速度更快,信息显示更清晰。推荐使用ss

    # 查看所有TCP连接 ss -tulnp # -t: TCP, -u: UDP, -l: 仅监听中的socket, -n: 以数字形式显示端口和IP, -p: 显示进程信息 # 查看所有已建立的连接 ss -tun

将这些命令组合起来,可以形成强大的工作流。例如,写一个简单的脚本,定期检查关键服务的端口是否在监听,并记录到日志:

#!/bin/bash # check_services.sh SERVICES=("80:nginx" "3306:mysql" "6379:redis") LOG_FILE="/var/log/service_check.log" for service in "${SERVICES[@]}"; do port=${service%:*} name=${service#*:} if ss -tuln | grep -q ":$port "; then echo "$(date): $name (port $port) is UP" >> $LOG_FILE else echo "$(date): CRITICAL - $name (port $port) is DOWN" >> $LOG_FILE # 可以在这里添加发送警报邮件的命令 fi done

然后通过crontab -e添加一个定时任务(如每分钟执行一次):* * * * * /path/to/check_services.sh,一个简单的服务监控就搭建好了。这就是Linux命令行效率的体现:用简单的工具组合,快速解决实际问题。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/21 3:17:46

如何在Windows上快速创建虚拟光驱:WinCDEmu完全免费解决方案

如何在Windows上快速创建虚拟光驱&#xff1a;WinCDEmu完全免费解决方案 【免费下载链接】WinCDEmu 项目地址: https://gitcode.com/gh_mirrors/wi/WinCDEmu 还在为ISO镜像文件无法直接使用而烦恼吗&#xff1f;WinCDEmu是Windows平台上一款完全免费的开源虚拟光驱工具…

作者头像 李华
网站建设 2026/5/20 14:53:38

如何快速修复Visual C++运行库问题:终极完整指南

如何快速修复Visual C运行库问题&#xff1a;终极完整指南 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist Visual C运行库是Windows系统中至关重要的组件&#x…

作者头像 李华
网站建设 2026/5/20 14:53:35

PowerPoint公式排版革命:用LaTeX语法告别数学符号输入噩梦

PowerPoint公式排版革命&#xff1a;用LaTeX语法告别数学符号输入噩梦 【免费下载链接】latex-ppt Use LaTeX in PowerPoint 项目地址: https://gitcode.com/gh_mirrors/la/latex-ppt 还在为PowerPoint中复杂的数学公式输入而烦恼吗&#xff1f;作为科研人员、教师或学生…

作者头像 李华