Linux命令-pinky(轻量级finger查询工具)
Linux命令-pinky(轻量级finger查询工具)
📋快速参考:
pinky是 GNU coreutils 的一部分,用于查询远程主机上的用户信息(finger 协议)。它是finger命令的简化版本,输出更简洁,适合脚本调用。
📌 目录
- 命令简介
- 语法格式
- 常用选项
- 输出字段说明
- 实战示例
- 与其他命令对比
- 常见问题
- 自动化脚本
🔰 命令简介
pinky是一个轻量级 finger 查询工具,用于查询远程主机上的用户信息。它通过Finger 协议(RFC 1288)与远程主机通信,获取用户登录状态、空闲时间等信息。
💡 适用场景
| 场景 | 说明 |
|---|---|
| 远程用户查询 | 查询远程主机上有哪些用户在线 |
| 脚本集成 | 输出格式简单,适合脚本解析 |
| 快速检查 | 比finger命令更轻量,启动更快 |
⚠️注意:现代系统中 Finger 协议通常被禁用(安全风险),
pinky主要用于查询允许 Finger 协议的主机。
📖 语法格式
pinky[选项][user@]host参数说明
| 参数 | 说明 |
|---|---|
user | 可选指定查询的用户名(不指定则查询所有用户) |
host | 必填远程主机地址(IP 或域名) |
基本用法
# 查询远程主机上的所有用户pinky example.com# 查询指定用户pinky alice@example.com⚙️ 常用选项
| 选项 | 说明 |
|---|---|
-l, --long | 使用长格式输出(更多字段) |
-b, --brief | 使用简短格式输出(默认) |
-s, --short | 使用极简格式输出 |
-h, --help | 显示帮助信息 |
-V, --version | 显示版本信息 |
输出格式对比
| 格式选项 | 输出字段 | 适用场景 |
|---|---|---|
-b(默认) | 用户名、终端、登录时间、闲置时间 | 快速查看 |
-l(长格式) | 包含办公室、电话等扩展信息 | 详细信息查询 |
-s(短格式) | 仅用户名和终端 | 脚本解析 |
📊 输出字段说明
默认输出(brief 格式)
Login TTY FROM IDLE Host alice tty1 192.168.1.100 2m workstation bob tty2 10.0.0.5 10m laptop| 字段 | 说明 |
|---|---|
Login | 用户名 |
TTY | 终端类型(tty1,pts/0等) |
FROM | 来源 IP 地址或主机名 |
IDLE | 闲置时间(2m= 2分钟,1h= 1小时) |
Host | 来源主机名(如果有反向 DNS) |
长格式输出(-l 选项)
Login name: alice In real life: Alice Smith Office: /office/301 Home phone: +1-555-1234 Directory: /home/alice Shell: /bin/bash Last login: Thu Jun 12 09:30:00 2026 on tty1 from workstation New mail received: Thu Jun 12 08:00:00 2026🔥 实战示例
1️⃣ 基本查询
# 查询远程主机上的所有用户pinky example.com# 查询指定用户pinky alice@example.com输出示例:
Login TTY FROM IDLE Host alice tty1 192.168.1.100 2m workstation2️⃣ 使用长格式查询
# 获取详细信息pinky-lexample.com# 查询指定用户(长格式)pinky-lalice@example.com输出示例:
Login name: alice In real life: Alice Smith Office: /office/301 Home phone: +1-555-1234 Directory: /home/alice Shell: /bin/bash Last login: Thu Jun 12 09:30:00 2026 on tty1 from workstation3️⃣ 脚本集成(解析输出)
#!/bin/bash# 查询远程主机,检查是否有用户在线HOST="example.com"USERS=$(pinky-s"$HOST"|tail-n+2|wc-l)if["$USERS"-gt0];thenecho"✅$HOST上有$USERS个用户在线"pinky-b"$HOST"elseecho"⚠️$HOST上没有用户在线或无法查询"fi关键点:
- 使用
-s(short) 格式输出更简洁,适合脚本解析 tail -n +2跳过标题行wc -l统计用户数量
4️⃣ 批量查询多个主机
#!/bin/bash# 批量查询多个主机的用户状态HOSTS=("host1.example.com""host2.example.com""host3.example.com")forhostin"${HOSTS[@]}";doecho"📡 查询$host..."ifping-c1"$host"&>/dev/null;thenecho"✅$host可达,用户列表:"pinky-b"$host"2>/dev/null||echo" Finger 协议被禁用"elseecho"❌$host不可达"fiecho"---"done5️⃣ 结合finger命令对比
# 使用 pinky 查询(轻量级)pinky example.com# 使用 finger 查询(功能更全)finger @example.com# 对比输出格式echo"=== pinky (brief) ==="&&pinky-bexample.comecho"=== finger ==="&&finger @example.com区别:
pinky:输出简洁,适合脚本finger:输出详细,支持更多选项(如-m,-s,-l)
🔍 与其他命令对比
| 命令 | 协议 | 输出详细度 | 适用场景 |
|---|---|---|---|
pinky | Finger | ⭐⭐ | 脚本调用、快速查询 |
finger | Finger | ⭐⭐⭐⭐ | 交互式查询、详细信息 |
who | 本地 | ⭐⭐ | 查询本地登录用户 |
w | 本地 | ⭐⭐⭐ | 查询本地用户 + 正在执行的命令 |
users | 本地 | ⭐ | 仅显示用户名列表 |
典型对比示例
# 查询本地用户(who 命令)who# 输出:alice tty1 2026-06-12 09:30# bob tty2 2026-06-12 09:35# 查询远程用户(pinky 命令)pinky example.com# 输出:Login TTY FROM IDLE Host# alice tty1 192.168.1.100 2m workstation💡提示:
pinky和finger查询远程主机,而who/w/users查询本地系统。
❓ 常见问题
Q1:pinky命令找不到?
A: 安装coreutils包:
# Debian/Ubuntusudoapt-getinstallcoreutils# RHEL/CentOSsudoyuminstallcoreutils# Arch Linuxsudopacman-ScoreutilsQ2: 查询远程主机时提示 “Connection refused”?
A: 远程主机的 Finger 服务未运行或被防火墙拦截。
排查步骤:
# 1. 检查网络连通性pingexample.com# 2. 检查 Finger 端口(79)是否开放nc-zvexample.com79# 或telnet example.com79# 3. 如果端口关闭,说明远程主机未运行 Finger 服务echo"⚠️ 远程主机未运行 Finger 服务(端口 79 未开放)"🔒安全提示:现代系统通常禁用 Finger 服务(端口 79),因为它会暴露用户信息(安全风险)。
Q3: 如何启用 Finger 服务(服务器端)?
A: 在允许 Finger 查询的主机上安装并启动服务:
# Debian/Ubuntusudoapt-getinstallfingerdsudosystemctlenablefingerdsudosystemctl start fingerd# RHEL/CentOSsudoyuminstallfinger-serversudosystemctlenablefingersudosystemctl start finger验证服务运行:
# 检查端口 79 是否监听sudoss-tlnp|grep:79# 或sudonetstat-tlnp|grep:79Q4:pinky和finger的输出有什么区别?
A: 对比示例:
# pinky 输出(简洁)pinky-bexample.com# Login TTY FROM IDLE Host# alice tty1 192.168.1.100 2m workstation# finger 输出(详细)finger @example.com# Login Name TTY Idle Login Time Office Phone# alice Alice Sm tty1 2m Jun 12 09:30 /off/301 +1-555关键区别:
pinky:输出字段少,适合脚本解析finger:输出字段多(包含办公室、电话等),适合人工阅读
🤖 自动化脚本
脚本1:定期检查远程主机用户活动
#!/bin/bash# 定期检查远程主机用户活动,如有新用户登录则告警HOST="example.com"LOG_FILE="/var/log/pinky_monitor.log"INTERVAL=300# 5分钟检查一次whiletrue;doTIMESTAMP=$(date'+%Y-%m-%d %H:%M:%S')USERS=$(pinky-s"$HOST"2>/dev/null|tail-n+2)if[-n"$USERS"];thenecho"[$TIMESTAMP]$HOST用户活动:">>"$LOG_FILE"echo"$USERS">>"$LOG_FILE"echo"---">>"$LOG_FILE"elseecho"[$TIMESTAMP]$HOST无用户活动">>"$LOG_FILE"fisleep"$INTERVAL"done使用方法:
# 赋予执行权限chmod+x pinky_monitor.sh# 后台运行nohup./pinky_monitor.sh&# 查看日志tail-f/var/log/pinky_monitor.log脚本2:HTML 格式输出(适合邮件报告)
#!/bin/bash# 生成 HTML 格式的用户报告HOST="example.com"HTML_FILE="pinky_report.html"cat>"$HTML_FILE"<<'EOF' <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Pinky 查询报告</title> <style> body { font-family: Arial, sans-serif; margin: 20px; } table { border-collapse: collapse; width: 100%; } th, td { border: 1px solid #ddd; padding: 8px; text-align: left; } th { background-color: #f2f2f2; } tr:hover { background-color: #f5f5f5; } </style> </head> <body> <h1>🖥️ 远程主机用户报告</h1> <p>生成时间:<kbd>$(date)</kbd></p> <h2>主机:<kbd>$HOST</kbd></h2> <table> <tr><th>用户名</th><th>终端</th><th>来源 IP</th><th>闲置时间</th><th>主机名</th></tr> EOF# 解析 pinky 输出并转换为 HTML 表格行pinky-b"$HOST"2>/dev/null|tail-n+2|whileread-rline;doLOGIN=$(echo"$line"|awk'{print $1}')TTY=$(echo"$line"|awk'{print $2}')FROM=$(echo"$line"|awk'{print $3}')IDLE=$(echo"$line"|awk'{print $4}')HOSTNAME=$(echo"$line"|awk'{print $5}')cat>>"$HTML_FILE"<<ROW_EOF <tr><td>$LOGIN</td><td>$TTY</td><td>$FROM</td><td>$IDLE</td><td>$HOSTNAME</td></tr> ROW_EOFdonecat>>"$HTML_FILE"<<'EOF' </table> </body> </html> EOFecho"✅ HTML 报告已生成:$HTML_FILE"输出示例:
<!DOCTYPEhtml><html><head><title>Pinky 查询报告</title></head><body><h1>🖥️ 远程主机用户报告</h1><p>生成时间:<kbd>Thu Jun 12 10:00:00 CST 2026</kbd></p><h2>主机:<kbd>example.com</kbd></h2><table><tr><th>用户名</th><th>终端</th><th>来源 IP</th><th>闲置时间</th><th>主机名</th></tr><tr><td>alice</td><td>tty1</td><td>192.168.1.100</td><td>2m</td><td>workstation</td></tr></table></body></html>📚 扩展阅读
Finger 协议(RFC 1288)
- 端口:79(TCP)
- 用途:查询远程主机的用户信息
- 安全风险:暴露用户名、登录时间等敏感信息,现代系统通常禁用
相关命令
| 命令 | 说明 | 用法 |
|---|---|---|
finger | 功能完整的 Finger 客户端 | finger @host |
who | 显示本地登录用户 | who |
w | 显示本地用户 + 正在运行的命令 | w |
users | 显示本地用户名列表 | users |
last | 显示登录历史 | last |
🎯 总结
| 要点 | 说明 |
|---|---|
| 命令类型 | 远程用户查询工具(Finger 协议) |
| 输出特点 | 简洁,适合脚本解析 |
| 典型用法 | pinky host或pinky user@host |
| 适用场景 | 查询允许 Finger 协议的主机 |
| 注意事项 | 现代系统通常禁用 Finger 服务(端口 79) |
快速参考卡片
# 🚀 快速命令pinkyhost# 查询主机上的所有用户pinky user@host# 查询指定用户pinky-lhost# 长格式输出pinky-shost# 短格式输出(适合脚本)# 🔍 检查 Finger 服务是否运行nc-zvhost79# 检查端口 79telnethost79# 连接 Finger 服务# 📋 解析输出(脚本用)pinky-shost|tail-n+2|awk'{print $1}'# 仅提取用户名📢 注意事项
- Finger 服务通常不启用:现代 Linux 发行版默认不安装Finger 服务器,需要手动安装
fingerd或in.fingerd。 - 防火墙可能拦截:即使安装了 Finger 服务,防火墙也可能拦截端口 79。
- 安全风险:Finger 协议会暴露用户信息,建议在内部网络使用,外部网络禁用。
- 替代方案:如果需要查询用户信息,可以考虑使用
SSH+who/w命令(更安全)。
🏷️ 标签
Linux运维网络工具用户管理Finger协议
📅 最后更新
- 日期:2026-06-13
- 适用系统:GNU/Linux (所有发行版)
- 命令版本:GNU coreutils 9.x
上一篇:ping - 网络连通性测试
下一篇:pipe - 管道命令(待发布)
