Linux uupick命令用于接收通过uuto命令发送的文件,是UUCP(Unix-to-Unix Copy)工具集的一部分。
uupick [选项] [系统名]
| 选项 | 说明 |
|---|---|
-s 系统名 |
只接收来自指定系统的文件 |
-x 调试级别 |
设置调试级别(1-9) |
-I 配置文件 |
指定使用不同的配置文件 |
-v |
显示详细信息 |
--help |
显示帮助信息 |
--version |
显示版本信息 |
uupick命令在交互模式下支持以下命令:
| 命令 | 说明 |
|---|---|
RETURN (回车) |
移动到下一个文件 |
d |
删除当前文件 |
m [目录] |
将当前文件移动到指定目录(默认为当前目录) |
a [目录] |
将所有文件移动到指定目录 |
p |
打印(显示)当前文件的内容 |
q |
退出uupick |
Ctrl+D |
退出uupick |
! |
执行shell命令 |
* |
显示可用命令的帮助信息 |
# 启动uupick接收文件
uupick
# 输出示例:
# From system remotehost (Wed Dec 20 10:30:00 2023)
# file document.txt
# ?
#
# 此时可以输入交互命令:
# d - 删除文件
# m - 移动到当前目录
# m ~/downloads - 移动到指定目录
# p - 查看文件内容
# RETURN - 跳过此文件
# q - 退出
# 只接收来自"backupserver"系统的文件
uupick -s backupserver
# 或者使用交互模式后指定系统
uupick backupserver
# 将所有文件自动移动到当前目录
echo "a" | uupick
# 将所有文件移动到指定目录
echo "a ~/incoming" | uupick
# 删除所有接收到的文件(谨慎使用)
echo "d*a" | uupick
#!/bin/bash
# 自动接收UUCP文件的脚本
# 设置接收目录
RECEIVE_DIR="$HOME/incoming"
mkdir -p "$RECEIVE_DIR"
# 接收所有文件并自动移动到指定目录
echo "a $RECEIVE_DIR" | uupick -s backupserver
# 检查是否成功接收文件
if [ -n "$(ls -A $RECEIVE_DIR 2>/dev/null)" ]; then
echo "成功接收文件到 $RECEIVE_DIR"
ls -la "$RECEIVE_DIR"
else
echo "没有接收到新文件"
fi
# 在uupick交互界面中查看文件内容
uupick
# 输出示例:
# From system remotehost (Wed Dec 20 10:30:00 2023)
# file report.txt
# ?
#
# 输入p查看文件内容:
# p
#
# 显示文件内容后,再决定如何处理:
# m - 保存文件
# d - 删除文件
# RETURN - 跳过此文件
# 使用调试模式运行uupick
uupick -x 3
# 显示详细信息
uupick -v
# 发送方使用uuto发送文件
uuto -m document.txt backupserver!username
# 接收方使用uupick接收文件
uupick
# 交互过程:
# From system backupserver (Wed Dec 20 10:30:00 2023)
# file document.txt
# ? m ~/downloads # 将文件移动到downloads目录
# 移动完成
#
# 没有更多文件时显示:
# No more files from any systems.
# 接收来自所有系统的文件
uupick
# 当有多个系统的文件时,uupick会依次显示:
# From system system1 (时间)
# file file1.txt
# ? m
#
# From system system2 (时间)
# file file2.pdf
# ? d # 删除不需要的文件
#
# 处理完所有文件后退出
通过uuto发送的文件默认存储在接收方系统的以下位置:
/var/spool/uucppublic/receive/用户名/发送方系统名/
例如,用户alice从系统backupserver接收到的文件通常位于:
/var/spool/uucppublic/receive/alice/backupserver/
# 查看是否有等待接收的文件
ls -la /var/spool/uucppublic/receive/$USER/
# 或者查看所有用户的接收队列
ls -la /var/spool/uucppublic/receive/*/*/
d命令删除文件时要谨慎,删除后无法恢复uuto命令发送文件uupick命令#!/bin/bash
# 自动接收并清理UUCP文件的脚本
# 设置变量
MAX_AGE_DAYS=30 # 最长保留天数
RECEIVE_DIR="/var/spool/uucppublic/receive"
# 自动接收所有文件到用户目录
for user_dir in $RECEIVE_DIR/*/; do
if [ -d "$user_dir" ]; then
user=$(basename "$user_dir")
# 自动接收文件到用户home目录的incoming子目录
user_home=$(eval echo ~$user)
target_dir="$user_home/incoming"
mkdir -p "$target_dir"
echo "处理用户 $user 的接收文件"
echo "a $target_dir" | sudo -u "$user" uupick
fi
done
# 清理旧文件
echo "清理超过 $MAX_AGE_DAYS 天的旧文件"
find $RECEIVE_DIR -type f -mtime +$MAX_AGE_DAYS -delete
find $RECEIVE_DIR -type d -empty -delete
可能原因: 没有待接收的文件
解决: 检查接收队列
# 检查是否有文件等待接收
ls -la /var/spool/uucppublic/receive/$USER/
# 或检查所有用户的队列
ls -la /var/spool/uucppublic/receive/
解决: 检查目录权限
# 确保用户有权访问spool目录
ls -ld /var/spool/uucppublic/receive/
# 确保UUCP服务运行
ps aux | grep uucico
解决: 检查传输日志
# 查看UUCP日志
tail -f /var/log/uucp/Log
# 或
tail -f /var/log/uucp/DEBUG
解决: 检查目标目录权限
# 确保目标目录存在且有写入权限
mkdir -p ~/incoming
chmod 755 ~/incoming
uuto - 发送文件到远程系统uucp - UUCP文件复制命令uustat - 查看UUCP状态和队列uux - 在远程系统执行命令uuname - 列出已知的UUCP系统uucico - UUCP通信守护进程