linux uucp命令

Linux uucp命令是UUCP(Unix-to-Unix Copy)工具集的核心命令,用于在Unix系统之间复制文件和目录。

提示: uucp命令是传统的Unix系统间文件传输工具,主要用于通过拨号网络或TCP/IP网络在系统之间复制文件。现代系统中,它已被更安全的工具如scp、rsync等取代。

语法格式

uucp [选项] 源文件... 目标文件

常用选项

选项 说明
-c 不将源文件复制到spool目录,直接使用源文件(默认)
-C 强制将源文件复制到spool目录
-d 创建所有必要的目录(默认)
-f 不创建中间目录
-m 传输完成后发送邮件通知
-n 用户 通知远程主机上的指定用户
-r 仅排队作业,不启动传输守护进程
-j 显示作业ID
-g 等级 设置作业优先级(A-Z,A最高)
-x 级别 设置调试级别(1-9)
--help 显示帮助信息

地址格式

uucp使用以下格式指定源和目标:

系统!路径
系统!~用户/路径
系统!~user
~user/路径

其中:

  • 系统:远程系统名(在UUCP配置中定义)
  • ~用户:用户的公共目录(通常是/var/spool/uucppublic/用户名)
  • 路径:文件或目录的路径

使用示例

示例1:基本文件复制

# 将本地文件复制到远程系统
uucp document.txt remotehost!~/receive/

# 将本地文件复制到远程系统的绝对路径(需要权限)
uucp report.pdf remotehost!/tmp/report.pdf

# 从远程系统复制文件到本地
uucp remotehost!~/send/data.txt ~/downloads/

示例2:使用用户目录简写

# 复制到远程用户的公共目录
uucp file.txt remotehost!~alice/

# 从远程用户目录复制文件
uucp remotehost!~bob/file.txt .

# 复制到本地用户的公共目录(~user扩展)
uucp data.csv ~charlie/

示例3:发送邮件通知

# 传输完成后发送邮件通知
uucp -m important.doc remotehost!~/incoming/

# 通知远程系统上的特定用户
uucp -n alice backup.tar remotehost!~/backups/

示例4:设置传输优先级

# 设置高优先级传输
uucp -g A urgent.log remotehost!~/logs/

# 设置低优先级传输
uucp -g Z large_archive.iso remotehost!~/iso/

示例5:仅排队不传输

# 将作业加入队列,但不立即启动传输
uucp -r file.txt remotehost!~/queue_test/

# 稍后可以使用uucico手动启动传输

示例6:显示作业ID

# 显示作业ID以便后续跟踪
uucp -j backup.db remotehost!~/database/

# 输出可能包含:
# jobid remotehostNf3s2

示例7:实际应用场景

#!/bin/bash
# 使用uucp进行每日备份传输

BACKUP_FILE="/backups/$(date +%Y%m%d).tar.gz"
REMOTE_SYSTEM="backupserver"
REMOTE_USER="backupuser"

# 创建备份
tar -czf "$BACKUP_FILE" /important/data/

# 传输备份文件
if uucp -m -g B "$BACKUP_FILE" "$REMOTE_SYSTEM!~$REMOTE_USER/"; then
    echo "备份传输已排队: $BACKUP_FILE"
    # 清理7天前的本地备份
    find /backups -name "*.tar.gz" -mtime +7 -delete
else
    echo "备份传输失败"
fi

示例8:调试传输问题

# 使用调试模式查看详细过程
uucp -x 5 testfile.txt remotehost!~/test/

# 调试级别1-9,数字越大越详细

UUCP路径和目录说明

路径格式 实际路径 说明
~ /var/spool/uucppublic UUCP公共目录
~user /var/spool/uucppublic/user 用户的公共目录
系统!路径 远程系统上的绝对路径 需要相应权限
系统!~user/路径 远程系统上的用户公共目录 常用方式,权限较宽松
注意:
  • uucp传输不是实时的,文件会被放入队列并由uucico守护进程处理
  • 需要正确配置UUCP系统(/etc/uucp/下的配置文件)
  • 远程系统必须允许UUCP连接并在sys文件中配置
  • 使用绝对路径可能需要特殊权限
  • 默认情况下,文件传输到公共目录,所有用户都可访问
  • UUCP协议不加密,不适合传输敏感数据
  • 现代系统中建议使用SSH-based工具(scp、sftp、rsync)

uucp与相关命令的配合

查看传输状态

# 查看所有UUCP作业状态
uustat -a

# 查看特定作业状态(使用-u指定用户)
uustat -u username

# 查看队列中的作业
uustat -q

管理传输作业

# 取消作业
uustat -k 作业ID

# 重新启动失败的作业
uustat -r 作业ID

# 删除所有作业
uustat -K

测试UUCP连接

# 列出已知的UUCP系统
uuname

# 测试与远程系统的连接
uucico -s 系统名 -x 5

UUCP配置文件

uucp命令依赖于以下配置文件(通常在/etc/uucp/目录下):

文件 用途
sys 定义远程系统连接参数
port 定义物理端口(如串口、TCP)
dial 定义拨号器
dialcode 拨号代码定义
config 全局配置
Permissions 访问权限控制

sys文件配置示例

# /etc/uucp/sys 示例
system remotesys
time any
phone 555-1234
port serial1
speed 115200
chat login: mylogin ssword: mypassword
chat-timeout 45

安装和启动UUCP

# Ubuntu/Debian系统
sudo apt-get update
sudo apt-get install uucp

# CentOS/RHEL系统
sudo yum install uucp

# 启动UUCP服务
sudo systemctl start uucp
sudo systemctl enable uucp

# 检查服务状态
systemctl status uucp

故障排除

问题:uucp命令未找到

可能原因: UUCP未安装

解决: 安装uucp软件包

sudo apt-get install uucp
问题:传输失败

可能原因: 系统未配置或连接问题

解决: 检查配置和连接状态

# 检查系统配置
uuname
# 查看传输日志
tail -f /var/log/uucp/DEBUG
问题:权限被拒绝

解决: 检查Permissions文件

# 检查/etc/uucp/Permissions
# 确保有适当的读写权限
问题:作业停留在队列中

解决: 手动启动传输或检查连接

# 手动启动uucico
uucico -s 远程系统名 -x 5
# 或检查队列状态
uustat -a

现代替代方案

对于现代文件传输需求,推荐使用以下工具:

  • scp - 基于SSH的安全文件复制
  • rsync - 高效的文件同步工具
  • sftp - SSH文件传输协议
  • curl - 支持多种协议的数据传输
  • wget - HTTP/FTP下载工具
  • ftp - 文件传输协议(如必须使用FTP)

scp使用示例

# 复制文件到远程系统
scp file.txt user@remotehost:/path/to/destination/

# 从远程系统复制文件
scp user@remotehost:/path/to/file.txt .

# 递归复制目录
scp -r directory/ user@remotehost:/path/

相关命令

  • uuto - 发送文件到远程用户目录
  • uupick - 接收uuto发送的文件
  • uustat - 查看UUCP状态和队列
  • uux - 在远程系统执行命令
  • uucico - UUCP通信守护进程
  • uuname - 列出已知的UUCP系统