Linux uux命令介绍
uux是Unix-to-Unix Copy(UUCP)套件中的一个程序,它可以在不同的Unix系统之间执行命令和传输文件、电子邮件和网络新闻。uux命令可以让用户在本地系统上继续工作,而在远程系统上运行指定的命令。在运行请求的命令之前,uux命令会从指定的系统收集任何必要的文件。用户可以将命令的输出重定向到指定系统上的特定文件。出于安全原因,许多安装只允许uux命令运行rmail命令¹。
适用的Linux版本
uux命令适用于大多数Linux发行版,如Ubuntu、Debian、Fedora、CentOS等。如果某些Linux系统没有安装UUCP套件,可以使用以下命令进行安装:
- 对于使用apt-get工具的系统(如Ubuntu、Debian),可以使用以下命令:
sudo apt-get install uucp
- 对于使用yum工具的系统(如Fedora、CentOS 7),可以使用以下命令:
sudo yum install uucp
- 对于使用dnf工具的系统(如CentOS 8),可以使用以下命令:
sudo dnf install uucp
Linux uux命令的基本用法
uux命令的语法格式如下:
uux [options] command
其中,options是一些可选的参数,command是要执行的命令字符串,可以包含一个或多个参数,也可以包含重定向符号和文件名。
Linux uux命令的常用选项说明
uux命令支持以下常用选项:
选项 | 说明 |
---|---|
-c, --nocopy | 不复制本地文件到spool目录,这是默认选项。如果文件在uucico守护进程处理之前被删除,复制操作会失败 |
-C, --copy | 复制本地文件到spool目录 |
-n, --notify | 如果远程系统没有执行请求的命令,通知用户。这个响应是通过远程系统的邮件发送的 |
-z, --nouucico | 不启动uucico守护进程 |
-, -p, --stdin | 读取标准输入,并将其作为要执行命令的标准输入 |
-a name, --return-address name | 指定返回地址为name,而不是当前用户 |
-b, --return-signal | 如果请求的命令失败,返回一个信号给用户 |
-g grade, --grade grade | 指定传输文件时使用的优先级等级,grade可以是一个字母或数字,字母a最高,z最低 |
-j, --jobid | 打印请求的作业ID,并退出 |
-r, --nouucico | 不启动uucico守护进程 |
-s file, --status-file file | 将请求状态写入指定文件 |
-x debug_level, --debug debug_level | 打开调试模式,并设置调试级别 |
Linux uux命令的实例
在本地系统上执行ls命令,并将输出重定向到远程系统上的文件
[linux@bashcommandnotfound.cn ~]$ uux "ls >!remote!~/ls.txt"
这个命令会在本地系统上执行ls命令,并将输出重定向到远程系统remote上用户主目录下的ls.txt文件。
在远程系统上执行cat命令,并将输出重定向到本地系统上的文件
[linux@bashcommandnotfound.cn ~]$ uux "remote!cat remote!~/foo.txt >!~/foo.txt"
这个命令会在远程系统remote上执行cat命令,并将输出重定向到本地系统上用户主目录下的foo.txt文件。
在远程系统上执行diff命令,比较两个来自不同系统的文件,并将输出重定向到本地系统上的文件
[linux@bashcommandnotfound.cn ~]$ uux "remote!diff sys1!~user1/foo.txt sys2!~user2/bar.txt >!~/diff.txt"
这个命令会在远程系统remote上执行diff命令,比较来自sys1和sys2两个系统上的文件,并将输出重定向到本地系统上用户主目录下的diff.txt文件。
在远程系统上执行rmail命令,发送一封邮件给指定的收件人
[linux@bashcommandnotfound.cn ~]$ uux "remote!rmail user@example.com" < message.txt
这个命令会在远程系统remote上执行rmail命令,发送一封邮件给user@example.com,邮件的内容来自本地系统上的message.txt文件。
在远程系统上执行uucp命令,复制一个文件到另一个远程系统
[linux@bashcommandnotfound.cn ~]$ uux "remote!uucp remote!~/foo.txt sys3!~/bar.txt"
这个命令会在远程系统remote上执行uucp命令,复制remote上用户主目录下的foo.txt文件到另一个远程系统sys3上用户主目录下的bar.txt文件。
Linux uux命令的注意事项
- uux命令不会立即执行请求的命令,而是将请求排队,直到uucico守护进程调用该系统并执行它。如果想要立即启动uucico守护进程,可以使用-u选项。
- uux命令会在指定的系统上创建一个X.*文件,用于执行请求的命令。该文件的完整路径名是/var/spool/uucp/System/X.SystemNxxxx的形式,其中System是指定的系统名,N是一个数字,xxxx是一个随机字符串。
- uux命令会在本地系统上创建C.*和D.*文件,用于传输到其他系统。C.*文件包含与uucp命令相同的信息,D.*文件包含远程命令执行所需的数据,或者在远程系统上变成X.*文件用于远程命令执行。
- 如果要使用标准输入或输出重定向符号,必须用引号将它们引起来,以便它们被传递给uux命令而不是被shell解释。附加重定向(>>)不起作用。
- 所有指定的文件都会被收集到一个单独的目录中,在执行请求的命令之前。这意味着每个文件必须有一个不同的基本名。例如,uux "sys1!diff sys2!~user1/foo sys3!~user2/foo >!foo.diff"会失败,因为两个文件都会被复制到sys1并存储为foo。
- 可以用括号引用参数来避免对感叹号的解释。这在在远程系统上执行uucp命令时很有用。
- 请求执行一个空命令(例如uux sys!)会为指定的系统创建一个轮询文件。
- uux命令的退出状态是sysexits.h头文件中定义的代码之一。特别地,EX_OK(0)表示成功,EX_TEMPFAIL(75)表示临时失败。
评论区