Files
uutils.github.io/user/build.html
T
2023-03-16 02:48:54 +00:00

361 lines
31 KiB
HTML

<!DOCTYPE HTML>
<html lang="en" class="sidebar-visible no-js light">
<head>
<!-- Book generated using mdBook -->
<meta charset="UTF-8">
<title>Build from source - uutils Documentation</title>
<!-- Custom HTML head -->
<style>
dd {
margin-bottom: 1em;
}
main {
position: relative;
}
.additional {
position: absolute;
top: 0.5em;
right: 0;
display: flex;
gap: 5px;
align-items: center;
font-size: 1.3em;
}
.platforms {
font-size: 2rem;
}
dd > p {
margin-top: 0.2em;
}
</style>
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#ffffff" />
<link rel="icon" href="favicon.svg">
<link rel="stylesheet" href="css/variables.css">
<link rel="stylesheet" href="css/general.css">
<link rel="stylesheet" href="css/chrome.css">
<link rel="stylesheet" href="css/print.css" media="print">
<!-- Fonts -->
<link rel="stylesheet" href="FontAwesome/css/font-awesome.css">
<link rel="stylesheet" href="fonts/fonts.css">
<!-- Highlight.js Stylesheets -->
<link rel="stylesheet" href="highlight.css">
<link rel="stylesheet" href="tomorrow-night.css">
<link rel="stylesheet" href="ayu-highlight.css">
<!-- Custom theme stylesheets -->
</head>
<body>
<div id="body-container">
<!-- Provide site root to javascript -->
<script>
var path_to_root = "";
var default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? "navy" : "light";
</script>
<!-- Work around some values being stored in localStorage wrapped in quotes -->
<script>
try {
var theme = localStorage.getItem('mdbook-theme');
var sidebar = localStorage.getItem('mdbook-sidebar');
if (theme.startsWith('"') && theme.endsWith('"')) {
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
}
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
}
} catch (e) { }
</script>
<!-- Set the theme before any content is loaded, prevents flash -->
<script>
var theme;
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
if (theme === null || theme === undefined) { theme = default_theme; }
var html = document.querySelector('html');
html.classList.remove('no-js')
html.classList.remove('light')
html.classList.add(theme);
html.classList.add('js');
</script>
<!-- Hide / unhide sidebar before it is displayed -->
<script>
var html = document.querySelector('html');
var sidebar = null;
if (document.body.clientWidth >= 1080) {
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
sidebar = sidebar || 'visible';
} else {
sidebar = 'hidden';
}
html.classList.remove('sidebar-visible');
html.classList.add("sidebar-" + sidebar);
</script>
<nav id="sidebar" class="sidebar" aria-label="Table of contents">
<div class="sidebar-scrollbox">
<ol class="chapter"><li class="chapter-item expanded affix "><a href="index.html">Introduction</a></li><li class="chapter-item expanded "><a href="installation.html"><strong aria-hidden="true">1.</strong> Installation</a></li><li class="chapter-item expanded "><a href="build.html" class="active"><strong aria-hidden="true">2.</strong> Build from source</a></li><li class="chapter-item expanded "><a href="contributing.html"><strong aria-hidden="true">3.</strong> Contributing</a></li><li class="chapter-item expanded "><a href="test_coverage.html"><strong aria-hidden="true">4.</strong> GNU test coverage</a></li><li class="chapter-item expanded "><a href="extensions.html"><strong aria-hidden="true">5.</strong> Extensions</a></li><li class="chapter-item expanded affix "><li class="part-title">Reference</li><li class="chapter-item expanded "><a href="multicall.html"><strong aria-hidden="true">6.</strong> Multi-call binary</a></li><li class="chapter-item expanded "><a href="utils/arch.html"><strong aria-hidden="true">7.</strong> arch</a></li><li class="chapter-item expanded "><a href="utils/b2sum.html"><strong aria-hidden="true">8.</strong> b2sum</a></li><li class="chapter-item expanded "><a href="utils/b3sum.html"><strong aria-hidden="true">9.</strong> b3sum</a></li><li class="chapter-item expanded "><a href="utils/base32.html"><strong aria-hidden="true">10.</strong> base32</a></li><li class="chapter-item expanded "><a href="utils/base64.html"><strong aria-hidden="true">11.</strong> base64</a></li><li class="chapter-item expanded "><a href="utils/basename.html"><strong aria-hidden="true">12.</strong> basename</a></li><li class="chapter-item expanded "><a href="utils/basenc.html"><strong aria-hidden="true">13.</strong> basenc</a></li><li class="chapter-item expanded "><a href="utils/cat.html"><strong aria-hidden="true">14.</strong> cat</a></li><li class="chapter-item expanded "><a href="utils/chcon.html"><strong aria-hidden="true">15.</strong> chcon</a></li><li class="chapter-item expanded "><a href="utils/chgrp.html"><strong aria-hidden="true">16.</strong> chgrp</a></li><li class="chapter-item expanded "><a href="utils/chmod.html"><strong aria-hidden="true">17.</strong> chmod</a></li><li class="chapter-item expanded "><a href="utils/chown.html"><strong aria-hidden="true">18.</strong> chown</a></li><li class="chapter-item expanded "><a href="utils/chroot.html"><strong aria-hidden="true">19.</strong> chroot</a></li><li class="chapter-item expanded "><a href="utils/cksum.html"><strong aria-hidden="true">20.</strong> cksum</a></li><li class="chapter-item expanded "><a href="utils/comm.html"><strong aria-hidden="true">21.</strong> comm</a></li><li class="chapter-item expanded "><a href="utils/cp.html"><strong aria-hidden="true">22.</strong> cp</a></li><li class="chapter-item expanded "><a href="utils/csplit.html"><strong aria-hidden="true">23.</strong> csplit</a></li><li class="chapter-item expanded "><a href="utils/cut.html"><strong aria-hidden="true">24.</strong> cut</a></li><li class="chapter-item expanded "><a href="utils/date.html"><strong aria-hidden="true">25.</strong> date</a></li><li class="chapter-item expanded "><a href="utils/dd.html"><strong aria-hidden="true">26.</strong> dd</a></li><li class="chapter-item expanded "><a href="utils/df.html"><strong aria-hidden="true">27.</strong> df</a></li><li class="chapter-item expanded "><a href="utils/dir.html"><strong aria-hidden="true">28.</strong> dir</a></li><li class="chapter-item expanded "><a href="utils/dircolors.html"><strong aria-hidden="true">29.</strong> dircolors</a></li><li class="chapter-item expanded "><a href="utils/dirname.html"><strong aria-hidden="true">30.</strong> dirname</a></li><li class="chapter-item expanded "><a href="utils/du.html"><strong aria-hidden="true">31.</strong> du</a></li><li class="chapter-item expanded "><a href="utils/echo.html"><strong aria-hidden="true">32.</strong> echo</a></li><li class="chapter-item expanded "><a href="utils/env.html"><strong aria-hidden="true">33.</strong> env</a></li><li class="chapter-item expanded "><a href="utils/expand.html"><strong aria-hidden="true">34.</strong> expand</a></li><li class="chapter-item expanded "><a href="utils/expr.html"><strong aria-hidden="true">35.</strong> expr</a></li><li class="chapter-item expanded "><a href="utils/factor.html"><strong aria-hidden="true">36.</strong> factor</a></li><li class="chapter-item expanded "><a href="utils/false.html"><strong aria-hidden="true">37.</strong> false</a></li><li class="chapter-item expanded "><a href="utils/fmt.html"><strong aria-hidden="true">38.</strong> fmt</a></li><li class="chapter-item expanded "><a href="utils/fold.html"><strong aria-hidden="true">39.</strong> fold</a></li><li class="chapter-item expanded "><a href="utils/groups.html"><strong aria-hidden="true">40.</strong> groups</a></li><li class="chapter-item expanded "><a href="utils/hashsum.html"><strong aria-hidden="true">41.</strong> hashsum</a></li><li class="chapter-item expanded "><a href="utils/head.html"><strong aria-hidden="true">42.</strong> head</a></li><li class="chapter-item expanded "><a href="utils/hostid.html"><strong aria-hidden="true">43.</strong> hostid</a></li><li class="chapter-item expanded "><a href="utils/hostname.html"><strong aria-hidden="true">44.</strong> hostname</a></li><li class="chapter-item expanded "><a href="utils/id.html"><strong aria-hidden="true">45.</strong> id</a></li><li class="chapter-item expanded "><a href="utils/install.html"><strong aria-hidden="true">46.</strong> install</a></li><li class="chapter-item expanded "><a href="utils/join.html"><strong aria-hidden="true">47.</strong> join</a></li><li class="chapter-item expanded "><a href="utils/kill.html"><strong aria-hidden="true">48.</strong> kill</a></li><li class="chapter-item expanded "><a href="utils/link.html"><strong aria-hidden="true">49.</strong> link</a></li><li class="chapter-item expanded "><a href="utils/ln.html"><strong aria-hidden="true">50.</strong> ln</a></li><li class="chapter-item expanded "><a href="utils/logname.html"><strong aria-hidden="true">51.</strong> logname</a></li><li class="chapter-item expanded "><a href="utils/ls.html"><strong aria-hidden="true">52.</strong> ls</a></li><li class="chapter-item expanded "><a href="utils/md5sum.html"><strong aria-hidden="true">53.</strong> md5sum</a></li><li class="chapter-item expanded "><a href="utils/mkdir.html"><strong aria-hidden="true">54.</strong> mkdir</a></li><li class="chapter-item expanded "><a href="utils/mkfifo.html"><strong aria-hidden="true">55.</strong> mkfifo</a></li><li class="chapter-item expanded "><a href="utils/mknod.html"><strong aria-hidden="true">56.</strong> mknod</a></li><li class="chapter-item expanded "><a href="utils/mktemp.html"><strong aria-hidden="true">57.</strong> mktemp</a></li><li class="chapter-item expanded "><a href="utils/more.html"><strong aria-hidden="true">58.</strong> more</a></li><li class="chapter-item expanded "><a href="utils/mv.html"><strong aria-hidden="true">59.</strong> mv</a></li><li class="chapter-item expanded "><a href="utils/nice.html"><strong aria-hidden="true">60.</strong> nice</a></li><li class="chapter-item expanded "><a href="utils/nl.html"><strong aria-hidden="true">61.</strong> nl</a></li><li class="chapter-item expanded "><a href="utils/nohup.html"><strong aria-hidden="true">62.</strong> nohup</a></li><li class="chapter-item expanded "><a href="utils/nproc.html"><strong aria-hidden="true">63.</strong> nproc</a></li><li class="chapter-item expanded "><a href="utils/numfmt.html"><strong aria-hidden="true">64.</strong> numfmt</a></li><li class="chapter-item expanded "><a href="utils/od.html"><strong aria-hidden="true">65.</strong> od</a></li><li class="chapter-item expanded "><a href="utils/paste.html"><strong aria-hidden="true">66.</strong> paste</a></li><li class="chapter-item expanded "><a href="utils/pathchk.html"><strong aria-hidden="true">67.</strong> pathchk</a></li><li class="chapter-item expanded "><a href="utils/pinky.html"><strong aria-hidden="true">68.</strong> pinky</a></li><li class="chapter-item expanded "><a href="utils/pr.html"><strong aria-hidden="true">69.</strong> pr</a></li><li class="chapter-item expanded "><a href="utils/printenv.html"><strong aria-hidden="true">70.</strong> printenv</a></li><li class="chapter-item expanded "><a href="utils/printf.html"><strong aria-hidden="true">71.</strong> printf</a></li><li class="chapter-item expanded "><a href="utils/ptx.html"><strong aria-hidden="true">72.</strong> ptx</a></li><li class="chapter-item expanded "><a href="utils/pwd.html"><strong aria-hidden="true">73.</strong> pwd</a></li><li class="chapter-item expanded "><a href="utils/readlink.html"><strong aria-hidden="true">74.</strong> readlink</a></li><li class="chapter-item expanded "><a href="utils/realpath.html"><strong aria-hidden="true">75.</strong> realpath</a></li><li class="chapter-item expanded "><a href="utils/relpath.html"><strong aria-hidden="true">76.</strong> relpath</a></li><li class="chapter-item expanded "><a href="utils/rm.html"><strong aria-hidden="true">77.</strong> rm</a></li><li class="chapter-item expanded "><a href="utils/rmdir.html"><strong aria-hidden="true">78.</strong> rmdir</a></li><li class="chapter-item expanded "><a href="utils/runcon.html"><strong aria-hidden="true">79.</strong> runcon</a></li><li class="chapter-item expanded "><a href="utils/seq.html"><strong aria-hidden="true">80.</strong> seq</a></li><li class="chapter-item expanded "><a href="utils/sha1sum.html"><strong aria-hidden="true">81.</strong> sha1sum</a></li><li class="chapter-item expanded "><a href="utils/sha224sum.html"><strong aria-hidden="true">82.</strong> sha224sum</a></li><li class="chapter-item expanded "><a href="utils/sha256sum.html"><strong aria-hidden="true">83.</strong> sha256sum</a></li><li class="chapter-item expanded "><a href="utils/sha3-224sum.html"><strong aria-hidden="true">84.</strong> sha3-224sum</a></li><li class="chapter-item expanded "><a href="utils/sha3-256sum.html"><strong aria-hidden="true">85.</strong> sha3-256sum</a></li><li class="chapter-item expanded "><a href="utils/sha3-384sum.html"><strong aria-hidden="true">86.</strong> sha3-384sum</a></li><li class="chapter-item expanded "><a href="utils/sha3-512sum.html"><strong aria-hidden="true">87.</strong> sha3-512sum</a></li><li class="chapter-item expanded "><a href="utils/sha384sum.html"><strong aria-hidden="true">88.</strong> sha384sum</a></li><li class="chapter-item expanded "><a href="utils/sha3sum.html"><strong aria-hidden="true">89.</strong> sha3sum</a></li><li class="chapter-item expanded "><a href="utils/sha512sum.html"><strong aria-hidden="true">90.</strong> sha512sum</a></li><li class="chapter-item expanded "><a href="utils/shake128sum.html"><strong aria-hidden="true">91.</strong> shake128sum</a></li><li class="chapter-item expanded "><a href="utils/shake256sum.html"><strong aria-hidden="true">92.</strong> shake256sum</a></li><li class="chapter-item expanded "><a href="utils/shred.html"><strong aria-hidden="true">93.</strong> shred</a></li><li class="chapter-item expanded "><a href="utils/shuf.html"><strong aria-hidden="true">94.</strong> shuf</a></li><li class="chapter-item expanded "><a href="utils/sleep.html"><strong aria-hidden="true">95.</strong> sleep</a></li><li class="chapter-item expanded "><a href="utils/sort.html"><strong aria-hidden="true">96.</strong> sort</a></li><li class="chapter-item expanded "><a href="utils/split.html"><strong aria-hidden="true">97.</strong> split</a></li><li class="chapter-item expanded "><a href="utils/stat.html"><strong aria-hidden="true">98.</strong> stat</a></li><li class="chapter-item expanded "><a href="utils/stdbuf.html"><strong aria-hidden="true">99.</strong> stdbuf</a></li><li class="chapter-item expanded "><a href="utils/stty.html"><strong aria-hidden="true">100.</strong> stty</a></li><li class="chapter-item expanded "><a href="utils/sum.html"><strong aria-hidden="true">101.</strong> sum</a></li><li class="chapter-item expanded "><a href="utils/sync.html"><strong aria-hidden="true">102.</strong> sync</a></li><li class="chapter-item expanded "><a href="utils/tac.html"><strong aria-hidden="true">103.</strong> tac</a></li><li class="chapter-item expanded "><a href="utils/tail.html"><strong aria-hidden="true">104.</strong> tail</a></li><li class="chapter-item expanded "><a href="utils/tee.html"><strong aria-hidden="true">105.</strong> tee</a></li><li class="chapter-item expanded "><a href="utils/test.html"><strong aria-hidden="true">106.</strong> test</a></li><li class="chapter-item expanded "><a href="utils/timeout.html"><strong aria-hidden="true">107.</strong> timeout</a></li><li class="chapter-item expanded "><a href="utils/touch.html"><strong aria-hidden="true">108.</strong> touch</a></li><li class="chapter-item expanded "><a href="utils/tr.html"><strong aria-hidden="true">109.</strong> tr</a></li><li class="chapter-item expanded "><a href="utils/true.html"><strong aria-hidden="true">110.</strong> true</a></li><li class="chapter-item expanded "><a href="utils/truncate.html"><strong aria-hidden="true">111.</strong> truncate</a></li><li class="chapter-item expanded "><a href="utils/tsort.html"><strong aria-hidden="true">112.</strong> tsort</a></li><li class="chapter-item expanded "><a href="utils/tty.html"><strong aria-hidden="true">113.</strong> tty</a></li><li class="chapter-item expanded "><a href="utils/uname.html"><strong aria-hidden="true">114.</strong> uname</a></li><li class="chapter-item expanded "><a href="utils/unexpand.html"><strong aria-hidden="true">115.</strong> unexpand</a></li><li class="chapter-item expanded "><a href="utils/uniq.html"><strong aria-hidden="true">116.</strong> uniq</a></li><li class="chapter-item expanded "><a href="utils/unlink.html"><strong aria-hidden="true">117.</strong> unlink</a></li><li class="chapter-item expanded "><a href="utils/uptime.html"><strong aria-hidden="true">118.</strong> uptime</a></li><li class="chapter-item expanded "><a href="utils/users.html"><strong aria-hidden="true">119.</strong> users</a></li><li class="chapter-item expanded "><a href="utils/vdir.html"><strong aria-hidden="true">120.</strong> vdir</a></li><li class="chapter-item expanded "><a href="utils/wc.html"><strong aria-hidden="true">121.</strong> wc</a></li><li class="chapter-item expanded "><a href="utils/who.html"><strong aria-hidden="true">122.</strong> who</a></li><li class="chapter-item expanded "><a href="utils/whoami.html"><strong aria-hidden="true">123.</strong> whoami</a></li><li class="chapter-item expanded "><a href="utils/yes.html"><strong aria-hidden="true">124.</strong> yes</a></li></ol>
</div>
<div id="sidebar-resize-handle" class="sidebar-resize-handle"></div>
</nav>
<div id="page-wrapper" class="page-wrapper">
<div class="page">
<div id="menu-bar-hover-placeholder"></div>
<div id="menu-bar" class="menu-bar sticky bordered">
<div class="left-buttons">
<button id="sidebar-toggle" class="icon-button" type="button" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="sidebar">
<i class="fa fa-bars"></i>
</button>
<button id="theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="theme-list">
<i class="fa fa-paint-brush"></i>
</button>
<ul id="theme-list" class="theme-popup" aria-label="Themes" role="menu">
<li role="none"><button role="menuitem" class="theme" id="light">Light</button></li>
<li role="none"><button role="menuitem" class="theme" id="rust">Rust</button></li>
<li role="none"><button role="menuitem" class="theme" id="coal">Coal</button></li>
<li role="none"><button role="menuitem" class="theme" id="navy">Navy</button></li>
<li role="none"><button role="menuitem" class="theme" id="ayu">Ayu</button></li>
</ul>
<button id="search-toggle" class="icon-button" type="button" title="Search. (Shortkey: s)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="S" aria-controls="searchbar">
<i class="fa fa-search"></i>
</button>
</div>
<h1 class="menu-title">uutils Documentation</h1>
<div class="right-buttons">
<a href="print.html" title="Print this book" aria-label="Print this book">
<i id="print-button" class="fa fa-print"></i>
</a>
<a href="https://github.com/rust-lang/cargo/tree/master/src/doc/src" title="Git repository" aria-label="Git repository">
<i id="git-repository-button" class="fa fa-github"></i>
</a>
</div>
</div>
<div id="search-wrapper" class="hidden">
<form id="searchbar-outer" class="searchbar-outer">
<input type="search" id="searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="searchresults-outer" aria-describedby="searchresults-header">
</form>
<div id="searchresults-outer" class="searchresults-outer hidden">
<div id="searchresults-header" class="searchresults-header"></div>
<ul id="searchresults">
</ul>
</div>
</div>
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
<script>
document.getElementById('sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
document.getElementById('sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
Array.from(document.querySelectorAll('#sidebar a')).forEach(function(link) {
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
});
</script>
<div id="content" class="content">
<main>
<h1 id="build-from-source"><a class="header" href="#build-from-source">Build from source</a></h1>
<h2 id="requirements"><a class="header" href="#requirements">Requirements</a></h2>
<ul>
<li>Rust (<code>cargo</code>, <code>rustc</code>)</li>
<li>GNU Make (optional)</li>
</ul>
<h3 id="rust-version"><a class="header" href="#rust-version">Rust Version</a></h3>
<p>uutils follows Rust's release channels and is tested against stable, beta and
nightly. The current Minimum Supported Rust Version (MSRV) is <code>1.64.0</code>.</p>
<h2 id="building"><a class="header" href="#building">Building</a></h2>
<p>There are currently two methods to build the uutils binaries: either Cargo or
GNU Make.</p>
<blockquote>
<p>Building the full package, including all documentation, requires both Cargo
and Gnu Make on a Unix platform.</p>
</blockquote>
<p>For either method, we first need to fetch the repository:</p>
<pre><code class="language-shell">git clone https://github.com/uutils/coreutils
cd coreutils
</code></pre>
<h3 id="cargo"><a class="header" href="#cargo">Cargo</a></h3>
<p>Building uutils using Cargo is easy because the process is the same as for every
other Rust program:</p>
<pre><code class="language-shell">cargo build --release
</code></pre>
<p>This command builds the most portable common core set of uutils into a multicall
(BusyBox-type) binary, named 'coreutils', on most Rust-supported platforms.</p>
<p>Additional platform-specific uutils are often available. Building these expanded
sets of uutils for a platform (on that platform) is as simple as specifying it
as a feature:</p>
<pre><code class="language-shell">cargo build --release --features macos
# or ...
cargo build --release --features windows
# or ...
cargo build --release --features unix
</code></pre>
<p>If you don't want to build every utility available on your platform into the
final binary, you can also specify which ones you want to build manually. For
example:</p>
<pre><code class="language-shell">cargo build --features &quot;base32 cat echo rm&quot; --no-default-features
</code></pre>
<p>If you don't want to build the multicall binary and would prefer to build the
utilities as individual binaries, that is also possible. Each utility is
contained in its own package within the main repository, named &quot;uu_UTILNAME&quot;. To
build individual utilities, use cargo to build just the specific packages (using
the <code>--package</code> [aka <code>-p</code>] option). For example:</p>
<pre><code class="language-shell">cargo build -p uu_base32 -p uu_cat -p uu_echo -p uu_rm
</code></pre>
<h3 id="gnu-make"><a class="header" href="#gnu-make">GNU Make</a></h3>
<p>Building using <code>make</code> is a simple process as well.</p>
<p>To simply build all available utilities:</p>
<pre><code class="language-shell">make
</code></pre>
<p>In release mode:</p>
<pre><code class="language-shell">make PROFILE=release
</code></pre>
<p>To build all but a few of the available utilities:</p>
<pre><code class="language-shell">make SKIP_UTILS='UTILITY_1 UTILITY_2'
</code></pre>
<p>To build only a few of the available utilities:</p>
<pre><code class="language-shell">make UTILS='UTILITY_1 UTILITY_2'
</code></pre>
<h2 id="installation"><a class="header" href="#installation">Installation</a></h2>
<h3 id="install-with-cargo"><a class="header" href="#install-with-cargo">Install with Cargo</a></h3>
<p>Likewise, installing can simply be done using:</p>
<pre><code class="language-shell">cargo install --path . --locked
</code></pre>
<p>This command will install uutils into Cargo's <em>bin</em> folder (<em>e.g.</em>
<code>$HOME/.cargo/bin</code>).</p>
<p>This does not install files necessary for shell completion or manpages. For
manpages or shell completion to work, use <code>GNU Make</code> or see
<code>Manually install shell completions</code>/<code>Manually install manpages</code>.</p>
<h3 id="install-with-gnu-make"><a class="header" href="#install-with-gnu-make">Install with GNU Make</a></h3>
<p>To install all available utilities:</p>
<pre><code class="language-shell">make install
</code></pre>
<p>To install using <code>sudo</code> switch <code>-E</code> must be used:</p>
<pre><code class="language-shell">sudo -E make install
</code></pre>
<p>To install all but a few of the available utilities:</p>
<pre><code class="language-shell">make SKIP_UTILS='UTILITY_1 UTILITY_2' install
</code></pre>
<p>To install only a few of the available utilities:</p>
<pre><code class="language-shell">make UTILS='UTILITY_1 UTILITY_2' install
</code></pre>
<p>To install every program with a prefix (e.g. uu-echo uu-cat):</p>
<pre><code class="language-shell">make PROG_PREFIX=PREFIX_GOES_HERE install
</code></pre>
<p>To install the multicall binary:</p>
<pre><code class="language-shell">make MULTICALL=y install
</code></pre>
<p>Set install parent directory (default value is /usr/local):</p>
<pre><code class="language-shell"># DESTDIR is also supported
make PREFIX=/my/path install
</code></pre>
<p>Installing with <code>make</code> installs shell completions for all installed utilities
for <code>bash</code>, <code>fish</code> and <code>zsh</code>. Completions for <code>elvish</code> and <code>powershell</code> can also
be generated; See <code>Manually install shell completions</code>.</p>
<h3 id="manually-install-shell-completions"><a class="header" href="#manually-install-shell-completions">Manually install shell completions</a></h3>
<p>The <code>coreutils</code> binary can generate completions for the <code>bash</code>, <code>elvish</code>,
<code>fish</code>, <code>powershell</code> and <code>zsh</code> shells. It prints the result to stdout.</p>
<p>The syntax is:</p>
<pre><code class="language-shell">cargo run completion &lt;utility&gt; &lt;shell&gt;
</code></pre>
<p>So, to install completions for <code>ls</code> on <code>bash</code> to
<code>/usr/local/share/bash-completion/completions/ls</code>, run:</p>
<pre><code class="language-shell">cargo run completion ls bash &gt; /usr/local/share/bash-completion/completions/ls
</code></pre>
<h3 id="manually-install-manpages"><a class="header" href="#manually-install-manpages">Manually install manpages</a></h3>
<p>To generate manpages, the syntax is:</p>
<pre><code class="language-bash">cargo run manpage &lt;utility&gt;
</code></pre>
<p>So, to install the manpage for <code>ls</code> to <code>/usr/local/share/man/man1/ls.1</code> run:</p>
<pre><code class="language-bash">cargo run manpage ls &gt; /usr/local/share/man/man1/ls.1
</code></pre>
<h2 id="un-installation"><a class="header" href="#un-installation">Un-installation</a></h2>
<p>Un-installation differs depending on how you have installed uutils. If you used
Cargo to install, use Cargo to uninstall. If you used GNU Make to install, use
Make to uninstall.</p>
<h3 id="uninstall-with-cargo"><a class="header" href="#uninstall-with-cargo">Uninstall with Cargo</a></h3>
<p>To uninstall uutils:</p>
<pre><code class="language-shell">cargo uninstall uutils
</code></pre>
<h3 id="uninstall-with-gnu-make"><a class="header" href="#uninstall-with-gnu-make">Uninstall with GNU Make</a></h3>
<p>To uninstall all utilities:</p>
<pre><code class="language-shell">make uninstall
</code></pre>
<p>To uninstall every program with a set prefix:</p>
<pre><code class="language-shell">make PROG_PREFIX=PREFIX_GOES_HERE uninstall
</code></pre>
<p>To uninstall the multicall binary:</p>
<pre><code class="language-shell">make MULTICALL=y uninstall
</code></pre>
<p>To uninstall from a custom parent directory:</p>
<pre><code class="language-shell"># DESTDIR is also supported
make PREFIX=/my/path uninstall
</code></pre>
</main>
<nav class="nav-wrapper" aria-label="Page navigation">
<!-- Mobile navigation buttons -->
<a rel="prev" href="installation.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<i class="fa fa-angle-left"></i>
</a>
<a rel="next" href="contributing.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<i class="fa fa-angle-right"></i>
</a>
<div style="clear: both"></div>
</nav>
</div>
</div>
<nav class="nav-wide-wrapper" aria-label="Page navigation">
<a rel="prev" href="installation.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<i class="fa fa-angle-left"></i>
</a>
<a rel="next" href="contributing.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<i class="fa fa-angle-right"></i>
</a>
</nav>
</div>
<script>
window.playground_copyable = true;
</script>
<script src="elasticlunr.min.js"></script>
<script src="mark.min.js"></script>
<script src="searcher.js"></script>
<script src="clipboard.min.js"></script>
<script src="highlight.js"></script>
<script src="book.js"></script>
<!-- Custom JS scripts -->
</div>
</body>
</html>