uux(1)
π uux β the manual, but make it make sense π
okay bestie, buckle up, because this is uux(1) β Remote command execution over UUCP β and it is genuinely one of the coolest little gremlins in the whole UUCP family. she runs commands on other systems. she's giving long-distance main character energy fr fr.
β¨ SYNOPSIS β¨
uux [ options ] command
that's it. that's the whole vibe. a command, some options, and a whole lot of β¨networkβ¨.
πΈ DESCRIPTION πΈ
so. uux executes a command on a remote system, or it executes a command on your local system using files that live on remote systems. either way she's connecting worlds, and honestly? iconic.
here's the tea though β the command does NOT run immediately. the request gets queued until the uucico (8) daemon calls up the system and executes it. and that daemon starts automatically unless you pass one of the -r or --nouucico options. so if you're wondering why nothing happened yet β that's why. she's patient. she's waiting for her moment. π¦
the actual, literal, hands-on execution of the command is done by the uuxqt (8) daemon. the real one doing the work behind the scenes, lowkey.
File arguments can be gathered from remote systems over to the execution system, and so can standard input. Standard output can be directed to a file on a remote system. it's a whole transfer situation and it works. π
the command name may be preceded by a system name followed by an exclamation point if it's meant to run on a remote system. an empty system name is taken as the local system. (yes, empty. as in, nothing there. it means you, babe.)
now, every argument that contains an exclamation point is treated as naming a file. the system the file lives on goes before the exclamation point, and the pathname on that system follows it. an empty system name is taken as the local system β and you must use that when you're transferring a file to a command being executed on a remote system. if the path isn't absolute, it gets appended to the current working directory on the local system, and ngl the result may not be meaningful on the remote system. π
a pathname may begin with ~/, in which case it's relative to the UUCP public directory (usually /usr/spool/uucppublic or /var/spool/uucppublic) on the appropriate system. a pathname may also begin with ~name/, in which case it's relative to the home directory of the named user on the appropriate system. cute, right? π
standard input and output may be redirected as usual β and those pathnames may contain exclamation points to say they're on remote systems. but listen: the redirection characters must be quoted so they get passed to uux instead of being interpreted by the shell. and heads up: append redirection (>>) does not work. not a thing. don't do it. π
all specified files get gathered together into a single directory before the command starts executing. which means every file needs a distinct base name. for example:
uux 'sys1!diff sys2!~user1/foo sys3!~user2/foo >!foo.diff'
this will fail because both files get copied to sys1 and stored under the name foo. two files, one name, one tragedy. π
arguments may be quoted by parentheses to avoid interpretation of exclamation points. this is useful when you're executing the uucp command on a remote system. slay.
and a request to execute an empty command (like uux sys!) will create a poll file for the specified system. no command, just a little poll file. she's just checking in. π«Ά
the exit status of uux is one of the codes found in the header file sysexits.h. in particular, EX_OK ( 0 ) means success, and EX_TEMPFAIL ( 75 ) means a temporary failure. remember those numbers, they will come up. β
π OPTIONS π
here's every single one, no skipping, bestie:
-, -p, --stdinβ read standard input and use it as the standard input for the command to be executed. she's feeding it straight in. π-c, --nocopyβ do not copy local files to the spool directory. this is the default. but bestie β if they get removed before theuucico (8)daemon processes them, the copy will fail. and the files must be readable by theuucico (8)daemon, as well as by the invoker ofuux. both of them. no exceptions.-C, --copyβ copy local files to the spool directory. the safe one. π§-l, --linkβ link local files into the spool directory. if a file can't be linked because it's on a different device, it gets copied unless one of the-cor--nocopyoptions also appears (in other words, use of--linkswitches the default from--nocopyto--copy). if the files are changed before being processed by theuucico (8)daemon, the changed versions will be used. and yes, the files must be readable by theuucico (8)daemon, as well as by the invoker ofuux.-g grade, --grade gradeβ set the grade of the file transfer command. jobs of a higher grade are executed first. grades run0 ... 9 A ... Z a ... zfrom high to low. sozis the chillest and0is running to the front of the line. π-n, --notification=noβ do not send mail about the status of the job, even if it fails. silence. blessed silence. π€«-z, --notification=errorβ send mail about the status of the job if an error occurs. for manyuuxqtdaemons, including the Taylor UUCPuuxqt, this is the default action; for those,--notification=errorwill have no effect. however, someuuxqtdaemons will send mail if the job succeeds unless the--notification=erroroption is used, and some otheruuxqtdaemons will not send mail if the job fails unless the--notification=erroroption is used. so it depends on the daemon. iykyk. π-r, --nouucicoβ do not start theuucico (8)daemon immediately; merely queue up the execution request for later processing. she'll get to it. eventually. π-j, --jobidβ print jobids on standard output. a jobid is generated for each file copy operation required to perform the operation. these file copies may be cancelled by passing the jobid to the--killswitch ofuustat (1)β which will make the execution impossible to complete. so like, careful with that one. π-a address, --requestor addressβ report job status to the specified e-mail address.-x type, --debug typeβ turn on particular debugging types. the following types are recognized:abnormal,chat,handshake,uucp-proto,proto,port,config,spooldir,execute,incoming,outgoing. onlyabnormal,config,spooldirandexecuteare meaningful foruux.
multiple types may be given, separated by commas, and the --debug option may appear multiple times. a number may also be given, which will turn on that many types from the foregoing list; for example, --debug 2 is equivalent to --debug abnormal,chat. π₯
-I file, --config fileβ set configuration file to use. this option may not be available, depending upon howuuxwas compiled. so if it ghosts you, that's why.-v, --versionβ report version information and exit.--helpβ print a help message and exit. π«Ά
π EXAMPLES π
okay, real scenarios, let's go:
uux -z - sys1!rmail user1
execute the command rmail user1 on the system sys1, giving it as standard input whatever is given to uux as standard input. if a failure occurs, send a message using mail (1). so it's like, piping your feelings directly into another machine. π
uux 'diff -c sys1!~user1/file1 sys2!~user2/file2 >!file.diff'
fetch the two named files from system sys1 and system sys2 and execute diff, putting the result in file.diff in the current directory. the current directory must be writable by the uuxqt (8) daemon for this to work. important!! β οΈ
uux 'sys1!uucp ~user1/file1 (sys2!~user2/file2)'
execute uucp on the system sys1, copying file1 (on system sys1) to sys2. this one illustrates the use of parentheses for quoting. see? i told you parentheses were useful. π
π RESTRICTIONS π
the remote system may not permit you to execute certain commands. many remote systems only permit the execution of rmail and rnews. that's it. those two. that's the whole guest list. π
also, some of the options are dependent on the capabilities of the uuxqt (8) daemon on the remote system. so like, what works over here might not work over there. vibe check accordingly.
π¦ SEE ALSO π¦
mail(1), uustat(1), uucp(1), uucico(8), uuxqt(8)
go read them. they're all part of the same friend group. π
π BUGS π
- files can not be referenced across multiple systems. nope. not a thing.
- too many jobids are output by
--jobid, and there is no good way to cancel a local execution requiring remote files. so you get a flood of jobids and nowhere to put them. tragic. genuinely tragic. π
β AUTHOR β
Ian Lance Taylor (ian@airs.com) β thank you for your service, king. π
and that's the whole page, bestie!! this was Taylor UUCP 1.07 β yes, the uux(1) page, Taylor UUCP flavor, version 1.07, that's the whole footer, and i'm telling you instead of copying it because that's the assignment π«Ά β go queue something on a remote system and slay. periodt. π
β¨
π¦ where this page comes from
- debian bookworm: uucp 1.07-27+b2 Β· GPL-2.0-only
- debian trixie: uucp 1.07-30 Β· GPL-2.0-only
- ubuntu jammy: uucp 1.07-27build3 Β· GPL-2.0-only
- ubuntu noble: uucp 1.07-29 Β· GPL-2.0-only
- ubuntu questing: uucp 1.07-31
- ubuntu resolute: uucp 1.07-31build1 Β· GPL-2.0-only
- ubuntu stonking: uucp 1.07-31build1 Β· GPL-2.0-only
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms