UL(1)

💅 UL(1) — the underlining girlie 💅

okay so bestie, you know how sometimes your terminal is out here serving underscores when it should be serving actual underlines? yeah. that's this. it's ul, from the User Commands corner of the manual, and she's here to make your text pretty. 🎀


✨ NAME ✨

ul — do underlining 🦋


✨ SYNOPSIS ✨

ul [options] [file...]

✨ DESCRIPTION ✨

okay so the vibe: ul reads the files you named (or standard input if you didn't name any, no pressure bestie 🫶) and it translates occurrences of underscores into the sequence that means "underline" for whatever terminal you're actually on — and it figures that out from the environment variable TERM. like, it's reading the room. it's doing a vibe check on your terminal. 💖

the terminfo database gets read to determine the appropriate sequences for underlining. that's the source of truth, periodt.

and if your terminal is out here being incapable of underlining but is capable of a standout mode? then standout mode gets used instead. flexible queen. ✨

if your terminal can overstrike, or handles underlining automatically, then ul literally just degenerates to cat(1). she's not doing extra work for no reason. 🌸

and if the terminal cannot underline at all? underlining is just ignored. moving on. 💀


✨ OPTIONS ✨

  • -i, --indicated — underlining gets indicated by a separate line containing appropriate dashes -. this is useful when you want to look at the underlining which is present in an nroff output stream on a crt-terminal. lowkey iconic for debugging. 🔥
  • -t, -T, --terminal terminal — override the environment variable TERM with the specified terminal type. main character energy, you decide.
  • -h, --help — display help text and exit. 🫶
  • -V, --version — display version and exit. ⭐

✨ ENVIRONMENT ✨

the following environment variable is used:

TERM

the TERM variable is used to relate a tty device with its device capability description (see terminfo(5)). TERM is set at login time, either by the default terminal type specified in /etc/ttys or as set during the login process by the user in their login file (see setenv(3)). it's giving "your terminal's whole identity". 💜


✨ HISTORY ✨

the ul command appeared in 3.0BSD. a whole ancestor. respect the lineage. 👑


✨ BUGS ✨

🚨 nroff usually outputs a series of backspaces and underlines intermixed with the text to indicate underlining. No attempt is made to optimize the backward motion.

so yeah. it's not optimizing that. it's just... doing the thing. no cap. 🙈


✨ SEE ALSO ✨


✨ REPORTING BUGS ✨

for bug reports, use the issue tracker: https://github.com/util-linux/util-linux/issues 🐛


✨ AVAILABILITY ✨

the ul command is part of the util-linux package which can be downloaded from the Linux Kernel Archive: https://www.kernel.org/pub/linux/utils/util-linux/ 💖


okay that's the whole page bestie, go underline something cute 🎀✨

— with love from util-linux 2.42.4, dated 2026-09-21, and yes that's the whole UL(1) manual, you're welcome 💅🌸

📦 where this page comes from
  • arch rolling: util-linux 2.42.4-1 · BSD-2-Clause AND BSD-3-Clause AND BSD-4-Clause-UC AND GPL-2.0-only AND GPL-2.0-or-later AND GPL-3.0-or-later AND ISC AND LGPL-2.1-or-later AND LicenseRef-PublicDomain
  • 💖 girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms