Core utilities: Difference between revisions
Lahwaacz.bot (talk | contribs) (update Pkg/AUR templates) |
m (→Essentials: clarify that these aren't all important commands) |
||
(30 intermediate revisions by 2 users not shown) | |||
Line 11: | Line 11: | ||
{{Related articles start}} | {{Related articles start}} | ||
{{Related|Command-line shell}} | {{Related|Command-line shell}} | ||
{{Related|Users and groups}} | |||
{{Related|systemd}} | |||
{{Related|pacman}} | |||
{{Related|General recommendations}} | {{Related|General recommendations}} | ||
{{Related articles end}} | {{Related articles end}} | ||
''Core utilities'' are the basic, fundamental tools of a [[GNU]]/[[Linux]] system. On Arch Linux they are found in the {{Grp|base}} group. This article provides an incomplete overview of them, links their documentation and describes useful alternatives. The scope of this article includes, but is not limited to, the [https://www.gnu.org/software/coreutils/coreutils.html GNU coreutils]. Most core utilities are traditional [[Wikipedia:Unix|Unix]] tools (see [[Heirloom]]) and many were standardized by [[Wikipedia:POSIX|POSIX]] but have been developed further to provide more features. | |||
Most command-line interfaces are documented in [[man page]]s, utilities by the [[GNU Project]] are documented in [[Info manual]]s, some [[shell]]s provide a {{ic|help}} command for [[shell]] builtin commands. Additionally most commands print their usage when run with the {{ic|--help}} flag. | Most command-line interfaces are documented in [[man page]]s, utilities by the [[GNU Project]] are documented in [[Info manual]]s, some [[shell]]s provide a {{ic|help}} command for [[shell]] builtin commands. Additionally most commands print their usage when run with the {{ic|--help}} flag. | ||
== | == Essentials == | ||
{| class= | The following table lists some important commands, Arch Linux users should be familiar with. See also {{man|1|intro}}. | ||
! Command | |||
! Description | {| class=wikitable | ||
! Package !! Command !! Description !! Documentation !! Alternatives | |||
|- | |||
| shell built-ins || cd || change directory || {{man|1p|cd}} | |||
|- | |||
|rowspan=12| GNU {{Pkg|coreutils}} | |||
| ls || list directory || {{man|1|ls}}, [https://www.gnu.org/software/coreutils/manual/html_node/ls-invocation.html info] || {{Pkg|exa}}, {{Pkg|tree}} | |||
|- | |||
| cat || concatenate files to stdout || {{man|1|cat}}, [https://www.gnu.org/software/coreutils/manual/html_node/cat-invocation.html info] || {{man|1|tac}} | |||
|- | |||
| mkdir || make directory || {{man|1|mkdir}}, [https://www.gnu.org/software/coreutils/manual/html_node/mkdir-invocation.html info] | |||
|- | |||
| rmdir || remove empty directory || {{man|1|rmdir}}, [https://www.gnu.org/software/coreutils/manual/html_node/rmdir-invocation.html info] | |||
|- | |||
| rm || remove files or directories || {{man|1|rm}}, [https://www.gnu.org/software/coreutils/manual/html_node/rm-invocation.html info] || [[shred]] | |||
|- | |||
| cp || copy files or directories || {{man|1|cp}}, [https://www.gnu.org/software/coreutils/manual/html_node/cp-invocation.html info] | |||
|- | |||
| mv || move files or directories || {{man|1|mv}}, [https://www.gnu.org/software/coreutils/manual/html_node/mv-invocation.html info] | |||
|- | |||
| ln || make hard or symbolic links || {{man|1|ln}}, [https://www.gnu.org/software/coreutils/manual/html_node/ln-invocation.html info] | |||
|- | |||
| [[chown]] || change file owner and group || {{man|1|chown}}, [https://www.gnu.org/software/coreutils/manual/html_node/chown-invocation.html info] || {{man|1|chgrp}} | |||
|- | |- | ||
| | | [[chmod]] || change file permissions || {{man|1|chmod}}, [https://www.gnu.org/software/coreutils/manual/html_node/chmod-invocation.html info] | ||
| | |||
| {{man| | |||
|- | |- | ||
| | | [[dd]] || convert and copy a file || {{man|1|dd}}, [https://www.gnu.org/software/coreutils/manual/html_node/dd-invocation.html info] | ||
| | |||
| {{man|1| | |||
|- | |- | ||
| | | df || report file system disk space usage || {{man|1|df}}, [https://www.gnu.org/software/coreutils/manual/html_node/df-invocation.html info] | ||
| | |||
| {{man|1| | |||
|- | |- | ||
| | | GNU {{Pkg|tar}} || [[tar]] || tar archiver || {{man|1|tar}}, [https://www.gnu.org/software/tar/manual/html_chapter/index.html info] || [[archive]]rs | ||
| | |||
| {{man|1| | |||
|- | |- | ||
| | | GNU {{Pkg|less}} || less || terminal pager || {{man|1|less}} || [[terminal pager]]s | ||
| | |||
| | |||
| | |||
|- | |- | ||
| | | GNU {{Pkg|findutils}} || find || search files or directories || {{man|1|find}}, [https://www.gnu.org/software/findutils/manual/html_node/find_html/index.html info], [[GregsWiki:UsingFind|GregsWiki]] || [[#find alternatives]] | ||
| | |||
| {{man|1| | |||
| | |||
|- | |- | ||
| | | GNU {{Pkg|diffutils}} || diff || compare files line by line || {{man|1|diff}}, [https://www.gnu.org/software/diffutils/manual/html_node/Invoking-diff.html info] || [[#diff alternatives]] | ||
| | |||
| | |||
| | |||
|- | |- | ||
| | | GNU {{Pkg|grep}} || grep || print lines matching a pattern || {{man|1|grep}}, [https://www.gnu.org/software/grep/manual/html_node/index.html info] || [[#grep alternatives]] | ||
| | |||
| | |||
| | |||
|- | |- | ||
| | | GNU {{Pkg|sed}} || sed || stream editor || {{man|1|sed}}, [https://www.gnu.org/software/sed/manual/html_node/index.html info], [http://sed.sourceforge.net/sed1line.txt one-liners] | ||
| | |||
| {{man|1| | |||
|- | |- | ||
| | | GNU {{Pkg|gawk}} || awk || pattern scanning and processing language || {{man|1|gawk}}, [https://www.gnu.org/software/gawk/manual/html_node/index.html info] || {{Pkg|nawk}}, {{AUR|mawk}} | ||
| | |||
| {{man|1| | |||
|- | |- | ||
| | |rowspan=5| {{Pkg|util-linux}} | ||
| | | [[lsblk]] || list block devices || {{man|8|lsblk}} | ||
| {{man| | |||
|- | |- | ||
| | | [[mount]] || mount a filesystem || {{man|8|mount}} | ||
| | |||
| {{man| | |||
|- | |- | ||
| | | [[umount]] || unmount a filesystem || {{man|8|umount}} | ||
|- | |- | ||
| | | [[su]] || substitute user || {{man|1|su}} || [[sudo]] | ||
| | |||
| {{man| | |||
| | |||
|- | |- | ||
| | | kill || terminate a process || {{man|1|kill}} || {{man|1|pkill}}, {{man|1|killall}} | ||
| | |||
| {{man|1| | |||
| | |||
|- | |- | ||
| | |rowspan=3| {{Pkg|procps-ng}} | ||
| | | pgrep || look up processes by name or attributes || {{man|1|pgrep}} || {{man|1|pidof}} | ||
| {{man|1| | |||
| | |||
|- | |- | ||
| | | ps || show information about processes || {{man|1|ps}} ||rowspan=2| {{man|1|top}}, {{Pkg|htop}} | ||
| | |||
| {{man|1| | |||
| | |||
|- | |- | ||
| | | free || display amount of free and used memory || {{man|1|free}} | ||
| | |||
| {{man| | |||
|} | |} | ||
=== | === Preventing data loss === | ||
rm, mv, cp and shell redirections happily delete or overwrite files without asking. rm, mv and cp all support the {{ic|-i}} flag to prompt the user before every removal / overwrite. Some users like to enable the {{ic|-i}} flag by default using [[alias]]es. Such shell settings are however dangerous because you get used to them, resulting in potential data loss when you use another system or user that does not have them. The best way to prevent data loss is to do [[backup]]s. | |||
== Nonessentials == | |||
This table lists core utilities that often come in handy. | |||
{| class= | {| class=wikitable | ||
! | ! Package !! Command !! Description !! Documentation !! Alternatives | ||
|- | |- | ||
| | |rowspan=3| shell built-ins | ||
| alias || define or display aliases || {{man|1|alias}} | |||
|- | |- | ||
| | | type || print the type of a command || {{man|1|type}} || {{man|1|which}} | ||
|- | |- | ||
| | | time || time a command || {{man|1|time}} | ||
|- | |- | ||
| | |rowspan=9| GNU {{Pkg|coreutils}} | ||
| tee || read stdin and write to stdout and files || {{man|1|tee}}, [https://www.gnu.org/software/coreutils/manual/html_node/tee-invocation.html info] | |||
|- | |- | ||
| | | mktemp || make a temporary file or directory || {{man|1|mktemp}}, [https://www.gnu.org/software/coreutils/manual/html_node/mktemp-invocation.html info] | ||
|- | |- | ||
| | | od || dump files in octal and other formats || {{man|1|od}}, [https://www.gnu.org/software/coreutils/manual/html_node/od-invocation.html info] || {{man|1|hexdump}}, [[vim]]'s {{man|1|xxd}} | ||
|- | |- | ||
| | | sort || sort lines || {{man|1|sort}}, [https://www.gnu.org/software/coreutils/manual/html_node/sort-invocation.html info] | ||
|- | |- | ||
| | | uniq || report or omit repeated lines || {{man|1|uniq}}, [https://www.gnu.org/software/coreutils/manual/html_node/uniq-invocation.html info] | ||
|- | |- | ||
| | | comm || compare two sorted files line by line || {{man|1|comm}}, [https://www.gnu.org/software/coreutils/manual/html_node/comm-invocation.html info] | ||
|- | |- | ||
| | | head || output the first part of files || {{man|1|head}}, [https://www.gnu.org/software/coreutils/manual/html_node/head-invocation.html info] | ||
|- | |- | ||
| | | tail || output the last part of files, or follow files || {{man|1|tail}}, [https://www.gnu.org/software/coreutils/manual/html_node/tail-invocation.html info] | ||
|- | |- | ||
| | | wc || print newline, word and byte count || {{man|1|wc}}, [https://www.gnu.org/software/coreutils/manual/html_node/wc-invocation.html info] | ||
|- | |- | ||
| | | GNU {{Pkg|binutils}} || strings || print printable characters in binary files || {{man|1|strings}}, [https://sourceware.org/binutils/docs/binutils/strings.html info] | ||
|- | |- | ||
| | | GNU {{Pkg|glibc}} || iconv || convert character encodings || {{man|1|iconv}} || {{Pkg|recode}} | ||
|- | |- | ||
| | | {{Pkg|file}} || file || guess file type || {{man|1|file}} | ||
| | |||
| | |||
|} | |} | ||
The {{ | The {{Pkg|moreutils}} package provides useful tools like {{man|1|sponge}} that are missing from the GNU coreutils. | ||
== Alternatives == | |||
{{ | Alternatives to the core utilities in the {{Grp|base}} group are [[BusyBox]], the [[Heirloom|Heirloom Toolchest]], {{Pkg|9base}}, {{AUR|sbase-git}} and {{AUR|ubase-git}}. | ||
=== | === find alternatives === | ||
* {{App|fd|Simple, fast and user-friendly alternative to find. Ignores hidden and {{ic|.gitignore}}'d files by default.|https://github.com/sharkdp/fd|{{Pkg|fd}}}} | |||
* {{App|fuzzy-find|Fuzzy completion for finding files.|https://github.com/silentbicycle/ff|{{AUR|ff-git}}}} | |||
* {{App|fzf|General-purpose command-line fuzzy finder, powered by find by default.|https://github.com/junegunn/fzf|{{Pkg|fzf}}, {{AUR|fzf-git}}}} | |||
* {{App|[[mlocate]]|Merging locate/updatedb implementation.|https://pagure.io/mlocate|{{Pkg|mlocate}}}} | |||
For graphical file searchers, see [[List of applications/Utilities#File searching]]. | |||
=== diff alternatives === | |||
While {{Pkg|diffutils}} does not provide a word-wise diff, several other programs do: | |||
* [[git]] diff can do a word diff with {{ic|--color-words}}, using {{ic|--no-index}} it can also be used for files outside of Git working trees. | |||
* {{App|dwdiff|A word diff front-end for the diff program; supports colors.|https://os.ghalkes.nl/dwdiff.html|{{Pkg|dwdiff}}}} | |||
* {{App|GNU wdiff|A wordwise implementation of GNU diff; does not support colors.|https://www.gnu.org/software/wdiff/|{{Pkg|wdiff}}}} | |||
* {{App|cwdiff|A GNU wdiff wrapper that colorizes the output.|https://github.com/junghans/cwdiff|{{AUR|cwdiff}}, {{AUR|cwdiff-git}}}} | |||
[[ | |||
{{ | |||
{ | |||
| | |||
|{{ | |||
See also [[List of applications/Utilities#Comparison, diff, merge]]. | |||
=== grep alternatives === | |||
The following three tools aim to replace grep for code search. They do recursive search by default, skip binary files and respect {{ic|.gitignore}}. | |||
* {{App|ack|A Perl-based grep replacement, aimed at programmers with large trees of heterogeneous source code.|https://beyondgrep.com/|{{Pkg|ack}}}} | |||
* {{App|ripgrep (rg)|A search tool that combines the usability of ag with the raw speed of grep.|https://github.com/BurntSushi/ripgrep|{{Pkg|ripgrep}}}} | |||
* {{App|The Silver Searcher (ag)|Code searching tool similar to Ack, but faster.|https://github.com/ggreer/the_silver_searcher|{{Pkg|the_silver_searcher}}}} | |||
And then there is also {{AUR|mgrep}}, a multiline grep. | |||
== See also == | == See also == | ||
* [https://www.gnu.org/software/coreutils/manual/coreutils.html GNU Coreutils documentation] | |||
* [https://www.gnu.org/software/coreutils/manual/coreutils.html GNU Coreutils | * [http://pubs.opengroup.org/onlinepubs/9699919799/idx/utilities.html POSIX utilities] | ||
* [http:// | |||
Revision as of 12:19, 1 September 2018
Core utilities are the basic, fundamental tools of a GNU/Linux system. On Arch Linux they are found in the base group. This article provides an incomplete overview of them, links their documentation and describes useful alternatives. The scope of this article includes, but is not limited to, the GNU coreutils. Most core utilities are traditional Unix tools (see Heirloom) and many were standardized by POSIX but have been developed further to provide more features.
Most command-line interfaces are documented in man pages, utilities by the GNU Project are documented in Info manuals, some shells provide a help
command for shell builtin commands. Additionally most commands print their usage when run with the --help
flag.
Essentials
The following table lists some important commands, Arch Linux users should be familiar with. See also intro(1).
Package | Command | Description | Documentation | Alternatives |
---|---|---|---|---|
shell built-ins | cd | change directory | cd(1p) | |
GNU coreutils | ls | list directory | ls(1), info | exa, tree |
cat | concatenate files to stdout | cat(1), info | tac(1) | |
mkdir | make directory | mkdir(1), info | ||
rmdir | remove empty directory | rmdir(1), info | ||
rm | remove files or directories | rm(1), info | shred | |
cp | copy files or directories | cp(1), info | ||
mv | move files or directories | mv(1), info | ||
ln | make hard or symbolic links | ln(1), info | ||
chown | change file owner and group | chown(1), info | chgrp(1) | |
chmod | change file permissions | chmod(1), info | ||
dd | convert and copy a file | dd(1), info | ||
df | report file system disk space usage | df(1), info | ||
GNU tar | tar | tar archiver | tar(1), info | archivers |
GNU less | less | terminal pager | less(1) | terminal pagers |
GNU findutils | find | search files or directories | find(1), info, GregsWiki | #find alternatives |
GNU diffutils | diff | compare files line by line | diff(1), info | #diff alternatives |
GNU grep | grep | print lines matching a pattern | grep(1), info | #grep alternatives |
GNU sed | sed | stream editor | sed(1), info, one-liners | |
GNU gawk | awk | pattern scanning and processing language | gawk(1), info | nawk, mawkAUR |
util-linux | lsblk | list block devices | lsblk(8) | |
mount | mount a filesystem | mount(8) | ||
umount | unmount a filesystem | umount(8) | ||
su | substitute user | su(1) | sudo | |
kill | terminate a process | kill(1) | pkill(1), killall(1) | |
procps-ng | pgrep | look up processes by name or attributes | pgrep(1) | pidof(1) |
ps | show information about processes | ps(1) | top(1), htop | |
free | display amount of free and used memory | free(1) |
Preventing data loss
rm, mv, cp and shell redirections happily delete or overwrite files without asking. rm, mv and cp all support the -i
flag to prompt the user before every removal / overwrite. Some users like to enable the -i
flag by default using aliases. Such shell settings are however dangerous because you get used to them, resulting in potential data loss when you use another system or user that does not have them. The best way to prevent data loss is to do backups.
Nonessentials
This table lists core utilities that often come in handy.
Package | Command | Description | Documentation | Alternatives |
---|---|---|---|---|
shell built-ins | alias | define or display aliases | alias(1) | |
type | print the type of a command | type(1) | which(1) | |
time | time a command | time(1) | ||
GNU coreutils | tee | read stdin and write to stdout and files | tee(1), info | |
mktemp | make a temporary file or directory | mktemp(1), info | ||
od | dump files in octal and other formats | od(1), info | hexdump(1), vim's xxd(1) | |
sort | sort lines | sort(1), info | ||
uniq | report or omit repeated lines | uniq(1), info | ||
comm | compare two sorted files line by line | comm(1), info | ||
head | output the first part of files | head(1), info | ||
tail | output the last part of files, or follow files | tail(1), info | ||
wc | print newline, word and byte count | wc(1), info | ||
GNU binutils | strings | print printable characters in binary files | strings(1), info | |
GNU glibc | iconv | convert character encodings | iconv(1) | recode |
file | file | guess file type | file(1) |
The moreutils package provides useful tools like sponge(1) that are missing from the GNU coreutils.
Alternatives
Alternatives to the core utilities in the base group are BusyBox, the Heirloom Toolchest, 9base, sbase-gitAUR and ubase-gitAUR.
find alternatives
- fd — Simple, fast and user-friendly alternative to find. Ignores hidden and
.gitignore
'd files by default.
- fuzzy-find — Fuzzy completion for finding files.
- fzf — General-purpose command-line fuzzy finder, powered by find by default.
- mlocate — Merging locate/updatedb implementation.
For graphical file searchers, see List of applications/Utilities#File searching.
diff alternatives
While diffutils does not provide a word-wise diff, several other programs do:
- git diff can do a word diff with
--color-words
, using--no-index
it can also be used for files outside of Git working trees. - dwdiff — A word diff front-end for the diff program; supports colors.
- GNU wdiff — A wordwise implementation of GNU diff; does not support colors.
- cwdiff — A GNU wdiff wrapper that colorizes the output.
See also List of applications/Utilities#Comparison, diff, merge.
grep alternatives
The following three tools aim to replace grep for code search. They do recursive search by default, skip binary files and respect .gitignore
.
- ack — A Perl-based grep replacement, aimed at programmers with large trees of heterogeneous source code.
- ripgrep (rg) — A search tool that combines the usability of ag with the raw speed of grep.
- The Silver Searcher (ag) — Code searching tool similar to Ack, but faster.
And then there is also mgrepAUR, a multiline grep.