arch-wiki-md-repo
Version:
All arch-wiki articles in markdown format, updated every two days.
473 lines (306 loc) • 26.9 kB
Markdown
**翻译状态:** 本文是英文页面 [Core_Utilities](/index.php/Core_Utilities "Core Utilities") 的[翻译](/index.php/ArchWiki_Translation_Team_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87) "ArchWiki Translation Team (简体中文)"),最后翻译时间:2018-06-30,点击[这里](https://wiki.archlinux.org/index.php?title=Core_Utilities&diff=0&oldid=526249)可以查看翻译后英文页面的改动。
相关文章
* [Bash (简体中文)](/index.php/Bash_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87) "Bash (简体中文)")
* [Zsh (简体中文)](/index.php/Zsh_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87) "Zsh (简体中文)")
* [常用建议](/index.php/General_Recommendations_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87) "General Recommendations (简体中文)")
* [GNU Project](/index.php/GNU_Project "GNU Project")
* [sudo (简体中文)](/index.php/Sudo_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87) "Sudo (简体中文)")
* [cron (简体中文)](/index.php/Cron_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87) "Cron (简体中文)")
* [man page (简体中文)](/index.php/Man_page_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87) "Man page (简体中文)")
* [Securely wipe disk#shred](/index.php/Securely_wipe_disk#shred "Securely wipe disk")
* [File permissions and attributes](/index.php/File_permissions_and_attributes "File permissions and attributes")
* [Color output in console (简体中文)](/index.php/Color_output_in_console_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87) "Color output in console (简体中文)")
本文涉及 GNU/Linux 系统的所谓的 "核心" 工具,比如 **less**, **ls**, 和 **grep**,包括但不限于以上集成于 GNU [coreutils](https://www.archlinux.org/packages/?name=coreutils) 中的工具。下文提供了关于这些实用工具颇为丰富的技巧和有帮助的其他信息。
## Contents
* [1 基本命令](#.E5.9F.BA.E6.9C.AC.E5.91.BD.E4.BB.A4)
* [2 awk](#awk)
* [3 cat](#cat)
* [4 chmod](#chmod)
* [5 chown](#chown)
* [6 dd](#dd)
* [7 find](#find)
* [8 grep](#grep)
* [9 iconv](#iconv)
* [9.1 在原文件上转换](#.E5.9C.A8.E5.8E.9F.E6.96.87.E4.BB.B6.E4.B8.8A.E8.BD.AC.E6.8D.A2)
* [10 ip](#ip)
* [11 less](#less)
* [11.1 用 Vim 代替 less 来分页](#.E7.94.A8_Vim_.E4.BB.A3.E6.9B.BF_less_.E6.9D.A5.E5.88.86.E9.A1.B5)
* [12 locate](#locate)
* [13 ls](#ls)
* [13.1 “长格式”输出](#.E2.80.9C.E9.95.BF.E6.A0.BC.E5.BC.8F.E2.80.9D.E8.BE.93.E5.87.BA)
* [13.2 带空格的文件名被引号引起](#.E5.B8.A6.E7.A9.BA.E6.A0.BC.E7.9A.84.E6.96.87.E4.BB.B6.E5.90.8D.E8.A2.AB.E5.BC.95.E5.8F.B7.E5.BC.95.E8.B5.B7)
* [14 lsblk](#lsblk)
* [15 mkdir](#mkdir)
* [16 mv](#mv)
* [17 od](#od)
* [18 pv](#pv)
* [19 rm](#rm)
* [20 sed](#sed)
* [21 seq](#seq)
* [22 ss](#ss)
* [23 tar](#tar)
* [24 which](#which)
* [25 wipefs](#wipefs)
* [26 参阅](#.E5.8F.82.E9.98.85)
## 基本命令
下面表格列出了每个 Linux 用户都应该熟悉的命令,黑体命令是 shell 的一部分,其它的是 shell 调用的程序。命令的细节请阅读接下来的几节和*相关文章*。
| 命令 | 描述 | 手册页名称 | 示例 |
| man | 显示命令的手册页 | [man(7)](https://jlk.fjfi.cvut.cz/arch/manpages/man/man.7) | man ed |
| **cd** | 变更目录 | [cd(1p)](https://jlk.fjfi.cvut.cz/arch/manpages/man/cd.1p) | cd /etc/pacman.d |
| mkdir | 创建目录 | [mkdir(1)](https://jlk.fjfi.cvut.cz/arch/manpages/man/mkdir.1) | mkdir ~/newfolder |
| rmdir | 删除空目录 | [rmdir(1)](https://jlk.fjfi.cvut.cz/arch/manpages/man/rmdir.1) | rmdir ~/emptyfolder |
| rm | 删除文件 | [rm(1)](https://jlk.fjfi.cvut.cz/arch/manpages/man/rm.1) | rm ~/file.txt |
| rm -r | 删除目录和内容 | rm -r ~/.cache |
| ls | 显示文件 | [ls(1)](https://jlk.fjfi.cvut.cz/arch/manpages/man/ls.1) | ls *.mkv |
| ls -a | 显示隐藏文件 | ls -a /home/archie |
| ls -al | 显示隐藏文件和文件属性 |
| mv | 移动文件 | [mv(1)](https://jlk.fjfi.cvut.cz/arch/manpages/man/mv.1) | mv ~/compressed.zip ~/archive/compressed2.zip |
| cp | 复制文件 | [cp(1)](https://jlk.fjfi.cvut.cz/arch/manpages/man/cp.1) | cp ~/.bashrc ~/.bashrc.bak |
| chmod +x | 设置文件为可执行文件 | [chmod(1)](https://jlk.fjfi.cvut.cz/arch/manpages/man/chmod.1) | chmod +x ~/.local/bin/myscript.sh |
| cat | 显示文件内容 | [cat(1)](https://jlk.fjfi.cvut.cz/arch/manpages/man/cat.1) | cat /etc/hostname |
| strings | 显示文件中可打印的内容 | [strings(1)](https://jlk.fjfi.cvut.cz/arch/manpages/man/strings.1) | strings /usr/bin/free |
| find | 查找文件 | [find(1)](https://jlk.fjfi.cvut.cz/arch/manpages/man/find.1) | find ~ -name myfile |
| mount | 挂载分区 | [mount(8)](https://jlk.fjfi.cvut.cz/arch/manpages/man/mount.8) | mount /dev/sdc1 /media/usb |
| df -h | 显示分区上的剩余空间 | [df(1)](https://jlk.fjfi.cvut.cz/arch/manpages/man/df.1) |
| ps -A | 显示所有正在运行的进程 | [ps(1)](https://jlk.fjfi.cvut.cz/arch/manpages/man/ps.1) |
| killall | 杀死所有运行中的进程 | [killall(1)](https://jlk.fjfi.cvut.cz/arch/manpages/man/killall.1) |
| ss -at | 显示开放的 TCP 连接列表 | [ss(8)](https://jlk.fjfi.cvut.cz/arch/manpages/man/ss.8) |
## awk
[AWK](https://en.wikipedia.org/wiki/AWK "wikipedia:AWK") 是一种模式扫描和处理语言,存在多个实现:
* **gawk** — GNU 版本的 awk, 参考 [gawk(1)](https://jlk.fjfi.cvut.cz/arch/manpages/man/gawk.1).
[https://www.gnu.org/software/gawk/](https://www.gnu.org/software/gawk/) || [gawk](https://www.archlinux.org/packages/?name=gawk) (已经包含在[base](https://www.archlinux.org/groups/x86_64/base/)中)
* **nawk** — 真正的 AWK 实现,参考 [nawk(1)](https://jlk.fjfi.cvut.cz/arch/manpages/man/nawk.1).
[https://www.cs.princeton.edu/~bwk/btl.mirror/](https://www.cs.princeton.edu/~bwk/btl.mirror/) || [nawk](https://www.archlinux.org/packages/?name=nawk)
* **mawk** — 非常快的 AWK 实现.
[http://invisible-island.net/mawk/](http://invisible-island.net/mawk/) || [mawk](https://aur.archlinux.org/packages/mawk/)
* [BusyBox](/index.php/BusyBox "BusyBox") 也包含了一个 AWK 实现。
## cat
[cat](https://en.wikipedia.org/wiki/cat_(Unix) 是一个将文件内容发送到标准输出的标准 Unix 工具。
* **cat** 并不内置于 shell ,不过若追求高性能,你会发现在很多情况下改用[重定向](https://en.wikipedia.org/wiki/Redirection_(computing) "wikipedia:Redirection (computing)")就很方便得许多,例如编写脚本。事实上,`$ < *file*` 的效果就如同 `$ cat *file*` 一样。
* 按照以下结构可直接在某文件添加多行文字:
```
$ cat << EOF >> *path/file*
*first line*
...
*last line*
EOF
```
或者使用 `printf`:
```
$ printf '%s
' 'first line' ... 'last line'
```
* 如果您希望能以倒读顺序显示文件内容,有个位于 coreutils 包中的工具叫 [tac](https://en.wikipedia.org/wiki/tac_(Unix) (*cat* 倒着写)。
## chmod
参阅 [File permissions and attributes#Changing permissions](/index.php/File_permissions_and_attributes#Changing_permissions "File permissions and attributes")。
## chown
参阅 [File permissions and attributes#Changing ownership](/index.php/File_permissions_and_attributes#Changing_ownership "File permissions and attributes")。
## dd
[dd](https://en.wikipedia.org/wiki/dd_(Unix) 是在 unix 和 类 unix 系统中主要用于转换和拷贝文件的命令。
与 *cp* 类似,默认情况下 *dd* 以块为单位拷贝文件,具有较低级别的 I/O流 控制功能。
**提示:** 默认情况下在任务完成前 dd 都没有输出,要监控操作的进度,可以添加 `status=progress` 选项。
更多信息参考 [dd(1)](https://jlk.fjfi.cvut.cz/arch/manpages/man/dd.1) 或 [完整文档](https://www.gnu.org/software/coreutils/dd)。
**警告:** 使用 *dd* 时请务必非常小心,这类命令会损坏数据,而且不可恢复。
## find
*find* 是 [findutils](https://www.archlinux.org/packages/?name=findutils) 软件包的一部分, 它属于 [base](https://www.archlinux.org/groups/x86_64/base/) 软件包组。
**提示:** [fd](https://www.archlinux.org/packages/?name=fd) 是 `find` 的一个更加简单、快速、友好的替代方案,它有着更合理的默认值(比如忽略隐藏文件、文件夹和 `.gitignore` 等文件,可用 `fd PATTERN` 代替 `find -iname '*PATTERN*'`)。它具有彩色输出(类似 `ls`),unicode 支持,正则表达式等等。
你可能希望 *find* 命令将一个文件名称作为参数,并在文件系统中搜索与该名称匹配的文件。下面的 [#locate](#locate) 程序可以专门做这件事。
相反,find 需要一组目录,并将它们下面的每个文件与一组表达式进行匹配。这种设计为实现一些“能干的单行小程序”提供了强大的支持,而这是上述“直观”设计无法实现的。参阅 [UsingFind](http://mywiki.wooledge.org/UsingFind) 来获取使用说明。
## grep
[grep](https://en.wikipedia.org/wiki/grep "wikipedia:grep") (来自 [ed](https://en.wikipedia.org/wiki/ed "wikipedia:ed") 的 *g/re/p*,*global/regular expression/print*)是最初给 Unix 写的命令行文字搜索工具,`grep` 命令在文件或标准输入里搜索符合指定正则表达式模式的行,并把结果打印到标准输出。
* 记住,*grep* 能直接处理文件,所以用 `grep *pattern* *file*` 代替 `cat *file* | grep *pattern*` 即可。
* 若要 grep 版本控制系统(VCS)的源代码,请使用专门的工具 [ripgrep](https://www.archlinux.org/packages/?name=ripgrep)、[the_silver_searcher](https://www.archlinux.org/packages/?name=the_silver_searcher) 和 [ack](https://www.archlinux.org/packages/?name=ack)。
* 要在输出结果中显示行数,加上 `-n` 选项。
* *grep* 可以在二进制文件中查找十六进制数值,例如要查找文件中的 `A1 F2`: `$ LANG=C grep --text --perl-regexp "\xA1\xF2" */path/to/file*`
**注意:** 一些命令把错误输出到 [stderr(3)](https://jlk.fjfi.cvut.cz/arch/manpages/man/stderr.3),grep 就无法处理。这时,用 `*command* 2>&1 | grep *args*` 或 (对于 Bash 4) `*command* |& grep *args*` 将 *stderr* 重定向到 *stdout*。参阅 [I/O 重定向](http://www.tldp.org/LDP/abs/html/io-redirection.html)。
参阅 [Color output in console#grep](/index.php/Color_output_in_console#grep "Color output in console") 来启用彩色输出支持。
## iconv
*iconv* 将转换一个文本的字符编码。
下列命令将文件 `*foo*` 从 ISO-8859-15 转换至 UTF-8,然后保存到 `*foo*.utf`:
```
$ iconv -f ISO-8859-15 -t UTF-8 *foo* > *foo*.utf
```
查阅 [iconv(1)](https://jlk.fjfi.cvut.cz/arch/manpages/man/iconv.1) 获取更多细节。
### 在原文件上转换
**提示:** 如果你不想改变文件的修改时间,可以用 [recode](https://www.archlinux.org/packages/?name=recode) 代替 iconv。
与 [sed](#sed) 不同,*iconv* 没有提供直接转换文件的选项,但是 [moreutils](https://www.archlinux.org/packages/?name=moreutils) 包里面的 `sponge` 可以帮忙:
```
$ iconv -f WINDOWS-1251 -t UTF-8 *foobar*.txt | sponge *foobar*.txt
```
更多细节请参阅 [sponge(1)](https://jlk.fjfi.cvut.cz/arch/manpages/man/sponge.1)。
## ip
[ip](https://en.wikipedia.org/wiki/Iproute2 "wikipedia:Iproute2") 显示关于网络设备,IP 地址,路由表和其他 Linux [IP](https://en.wikipedia.org/wiki/Internet_Protocol "wikipedia:Internet Protocol") 软件栈的对象信息。通过附加各种命令,你可以操纵或配置大多数对象。
**注意:** *ip* 命令在 [iproute2](https://www.archlinux.org/packages/?name=iproute2) 包中提供,这个包已经包含在 [base](https://www.archlinux.org/groups/x86_64/base/) 组。
| 对象 | 作用 | 手册页名称 |
| ip addr | 协议地址管理 | [ip-address(8)](https://jlk.fjfi.cvut.cz/arch/manpages/man/ip-address.8) |
| ip addrlabel | 协议地址标签管理 | [ip-addrlabel(8)](https://jlk.fjfi.cvut.cz/arch/manpages/man/ip-addrlabel.8) |
| ip l2tp | tunnel Ethernet over IP (L2TPv3) | [ip-l2tp(8)](https://jlk.fjfi.cvut.cz/arch/manpages/man/ip-l2tp.8) |
| ip link | 网络设备配置 | [ip-link(8)](https://jlk.fjfi.cvut.cz/arch/manpages/man/ip-link.8) |
| ip maddr | 多播地址管理 | [ip-maddress(8)](https://jlk.fjfi.cvut.cz/arch/manpages/man/ip-maddress.8) |
| ip monitor | 监测 netlink 信息 | [ip-monitor(8)](https://jlk.fjfi.cvut.cz/arch/manpages/man/ip-monitor.8) |
| ip mroute | 多播路由缓存管理 | [ip-mroute(8)](https://jlk.fjfi.cvut.cz/arch/manpages/man/ip-mroute.8) |
| ip mrule | 多播路由策略数据库的规则 |
| ip neigh | 邻居/ARP 表管理 | [ip-neighbour(8)](https://jlk.fjfi.cvut.cz/arch/manpages/man/ip-neighbour.8) |
| ip netns | process network namespace management | [ip-netns(8)](https://jlk.fjfi.cvut.cz/arch/manpages/man/ip-netns.8) |
| ip ntable | 邻居表配置 | [ip-ntable(8)](https://jlk.fjfi.cvut.cz/arch/manpages/man/ip-ntable.8) |
| ip route | 路由表管理 | [ip-route(8)](https://jlk.fjfi.cvut.cz/arch/manpages/man/ip-route.8) |
| ip rule | 路由策略数据库管理 | [ip-rule(8)](https://jlk.fjfi.cvut.cz/arch/manpages/man/ip-rule.8) |
| ip tcp_metrics | 管理 TCP Metrics | [ip-tcp_metrics(8)](https://jlk.fjfi.cvut.cz/arch/manpages/man/ip-tcp_metrics.8) |
| ip tunnel | 隧道配置 | [ip-tunnel(8)](https://jlk.fjfi.cvut.cz/arch/manpages/man/ip-tunnel.8) |
| ip tuntap | 管理 TUN/TAP 设备 |
| ip xfrm | 管理 IPsec 策略 | [ip-xfrm(8)](https://jlk.fjfi.cvut.cz/arch/manpages/man/ip-xfrm.8) |
`help` 帮助命令可用于所有对象。例如,输入 `ip addr help` 将显示地址的命令语法。高级用法参见 [iproute2 documentation](http://www.policyrouting.org/iproute2.doc.html)。
[Network configuration](/index.php/Network_configuration "Network configuration") 显示 *ip* 命令的多种常见任务中的使用方式。
**注意:** 你也许很熟悉 [ifconfig](https://en.wikipedia.org/wiki/ifconfig "wikipedia:ifconfig") 命令,它用于旧版linux的接口配置。在 Arch Linux 中现已不赞成使用;应当用 *ip* 替代之。
## less
[less](https://en.wikipedia.org/wiki/less_(Unix) 是一个对文本文件内容进行分页显示的终端程序,它和其他的分页显示程序如 [more](https://en.wikipedia.org/wiki/more_(command) 和 [pg](https://en.wikipedia.org/wiki/pg_(Unix) 相似,但 *less* 提供了更高级的界面和更多的 [功能](http://www.greenwoodsoftware.com/less/faq.html)。
参阅 [List of applications#Terminal pagers](/index.php/List_of_applications#Terminal_pagers "List of applications") 查找更多替代方案。
### 用 Vim 代替 less 来分页
[Vim](/index.php/Vim "Vim") 内置了脚本,可直接查看文本文件、压缩包或目录的内容。在你的 shell 配置文件添加以下内容:
`~/.bashrc` `alias less='/usr/share/vim/vim80/macros/less.sh'`
除了 *less.sh* 宏外还有另外一种用法,依赖于 `PAGER` 环境变量。安装 [vimpager](https://www.archlinux.org/packages/?name=vimpager) 并添加以下内容至shell配置文件:
`~/.bashrc`
```
export PAGER='vimpager'
alias less=$PAGER
```
这样,所有使用 `PAGER` 环境变量的程序, 如 [git](/index.php/Git "Git"), 将使用 *vim* 作为分页程序。
## locate
[安装](/index.php/%E5%AE%89%E8%A3%85 "安装") 软件包 [mlocate](https://www.archlinux.org/packages/?name=mlocate)。包里包括了一个 `updatedb.timer` 单元,用于每天更新数据库。这个 systemd 定时器在安装后就会 enable,如果不想重启系统,请手动 [start](/index.php/Start "Start")。以 root 手动运行 *updatedb* 也可以更新数据库。默认会忽略 `/media` 和 `/mnt` 等路径,所以 *locate* 不会查找外置设备里的文件。详情请参考 [updatedb(8)](https://jlk.fjfi.cvut.cz/arch/manpages/man/updatedb.8)。
*locate* 命令是一个快速查找文件系统的常用 Unix 工具。因为是从数据库查找而不是直接访问文件系统,所以速度比 [find](https://en.wikipedia.org/wiki/Find "wikipedia:Find") 快很多。而缺点是在数据库更新后创建的新文件不会被搜索到。
使用 *locate* 前需建立数据库,请先以 root 权限执行 `updatedb`。
详情参考 [How locate works and rewrite it in one minute](http://jvns.ca/blog/2015/03/05/how-the-locate-command-works-and-lets-rewrite-it-in-one-minute/)。
## ls
[ls](https://en.wikipedia.org/wiki/ls "wikipedia:ls") 是一个Unix和类Unix系统中列出目录里的文件的一个命令。
请参考 `info ls` 或 [在线文档](http://www.gnu.org/software/coreutils/manual/html_node/ls-invocation.html#ls-invocation)。
[exa](https://the.exa.website) 相较于 `ls` 和 `tree` 是一个更加现代的、人性化的选择。它有更多的特性,例如将 [Git](/index.php/Git "Git") 修改和文件名一同显示,在 `--long` 模式中对每列进行不同的着色,或者在 `tree` 视图中显示 `--long` 模式元数据。 [exa](https://www.archlinux.org/packages/?name=exa)
### “长格式”输出
`-l` 选项显示一些元数据,例如:
`$ ls -l */path/to/directory*`
```
total 128
drwxr-xr-x 2 archie users 4096 Jul 5 21:03 Desktop
drwxr-xr-x 6 archie users 4096 Jul 5 17:37 Documents
drwxr-xr-x 2 archie users 4096 Jul 5 13:45 Downloads
-rw-rw-r-- 1 archie users 5120 Jun 27 08:28 customers.ods
-rw-r--r-- 1 archie users 3339 Jun 27 08:28 todo
-rwxr-xr-x 1 archie users 2048 Jul 6 12:56 myscript.sh
```
`total` 值表示目录中文件的总磁盘分配,默认情况下为块的数量。
每个文件和子目录由一行表示,每行划分为 7 个字段,按以下顺序表示:
* 类型与权限:
* 首字母表示内部类型,参阅 `info ls -n "What information is listed"` 来查看所有可能类型的介绍;例如:
* `-` 表示一个普通文件;
* `d` 表示一个目录,比如一个包括了其他文件和文件夹的文件夹;
* `p` 表示一个命名的管道(又名 FIFO);
* `l` 表示这是一个软链接;
* 其他字母表示这个条目的 [权限](/index.php/Permissions "Permissions");
* 这个条目 [硬链接](https://en.wikipedia.org/wiki/Hard_link "wikipedia:Hard link") 的数量;对文件而言这个数字至少是 1,即当前显示的文件引用本身;对文件夹而言这个数字至少是 2,当前显示的引用、对自己的引用(`.` 条目)以及这个文件夹中的子文件夹对父文件夹的引用(`..` 条目);
* [用户](/index.php/User "User") 名;
* [组](/index.php/Group "Group") 名;
* 大小;
* 修改时间;
* 名称。
### 带空格的文件名被引号引起
默认情况下,包含空格的文件名和目录名会被单引号引起。要改变这一特性,请使用 `-N` 或 `--quoting-style=literal` 选项。另外,将 `QUOTING_STYLE` [环境变量](/index.php/Environment_variable "Environment variable") 设置为 `literal` 也可以。[[1]](https://unix.stackexchange.com/questions/258679/why-is-ls-suddenly-surrounding-items-with-spaces-in-single-quotes)
## lsblk
[lsblk(8)](https://jlk.fjfi.cvut.cz/arch/manpages/man/lsblk.8) 命令会显示所有连接到系统的 [块设备](https://en.wikipedia.org/wiki/Device_file#Block_devices "w:Device file") 和分区状况:
`$ lsblk -f`
```
NAME FSTYPE LABEL UUID MOUNTPOINT
sda
├─sda1 vfat C4DA-2C4D /boot
├─sda2 swap 5b1564b2-2e2c-452c-bcfa-d1f572ae99f2 [SWAP]
└─sda3 ext4 56adc99b-a61e-46af-aab7-a6d07e504652 /
```
设备名开头定义块设备的类型,大部分现代的硬盘、[SSD](/index.php/SSD "SSD") 和 USB 闪存设备都被识别为 SCSI disks (`sd`)。类型后面跟着给设备编号的小写字母,第一个设备从 `a` 开始 (`sda`),第二个设备就是 `b` (`sdb`),以此类推。每个设备上的 *现有* 分区将用数字编号,从 `1` 开始 (`sda1`),第二个分区就是 `2` (`sda2`),以此类推。在上面的示例中,只有一个设备可用 (`sda`),该设备有三个分区 (`sda1` 到 `sda3`),每个分区具有不同的 [文件系统](/index.php/File_system "File system")。
其它块设备比如 `mmcblk`(内存卡)或 `nvme`([NVMe](/index.php/NVMe "NVMe") 设备)。不清楚的设备类型可以在这里搜索到:[kernel documentation](https://www.kernel.org/doc/Documentation/devices.txt)。
## mkdir
[mkdir](https://en.wikipedia.org/wiki/mkdir "wikipedia:mkdir") (*make directory*) 可以创建目录。
若需递归地创建一系列目录,就要用到 `-p` 参数了,否则会出错。已经十分熟悉这原理的高级用户也可直接设为内置参数:
```
alias mkdir='mkdir -p -v'
```
`-v` 参数可以使创建目录过程中的信息更为详细。
不必使用 *chmod* 更改权限模式, 用 `-m` 选项可直接定义新建目录的访问权限。
**提示:** 如果您仅仅只是想建个临时目录,也许用 [mktemp](https://en.wikipedia.org/wiki/Temporary_file "wikipedia:Temporary file"): `mktemp -d` 更好。
## mv
[mv](https://en.wikipedia.org/wiki/mv "wikipedia:mv") (*move*) 可以移动或重命名文件和目录。
为了降低使用这个命令带来的风险,请添加一个 alias:
```
alias mv='timeout 8 mv -iv'
```
这个别名可以延迟 *mv* 到 8 秒后才生效,在覆盖已存在的文件时要求确认,列出正在进行的操作并且在 shell 被配置为忽略空格开头的命令的情况下,不将自身记入 shell 的命令历史记录。
## od
[od](https://en.wikipedia.org/wiki/od_(Unix) (*o*ctal *d*ump) 命令在显示非人类可读格式时非常有用,比如程序的可执行文件,或者未格式化的设备的内容。参阅[manual](https://www.gnu.org/software/coreutils/manual/html_node/od-invocation.html#od-invocation) 了解详情。
## pv
可以用 [pv](https://www.archlinux.org/packages/?name=pv) (*pipe viewer*) 来监视管道中传递的数据,例如:
```
# dd if=*/source/filestream* | pv -*monitor_options* -s *size_of_file* | dd of=*/destination/filestream*
```
大多数情况下 `pv` 可直接替代 `cat`。
## rm
[rm](https://en.wikipedia.org/wiki/rm_(Unix) (*remove*) 用于删除文件或目录。
为了降低使用这个命令带来的风险,请添加一个 alias:
```
alias rm='timeout 3 rm -Iv --one-file-system'
```
这个别名可延迟 *rm* 到 3 秒后才生效,在删除三个以上的文件时要求确认,列出正在进行的操作,限于只在同一个文件系统生效并且在 shell 被配置为忽略空格开头的命令的情况下,不将自身记入 shell 的命令历史记录。若你想在删除多文件时一一确认,用 `-I` 代替 `-i` 即可。
Zsh 的使用者可在 `timeout` 前加上 `noglob`,避免隐式扩展。
若要移除空目录,使用 *rmdir*,若内含文件则命令失败。
## sed
[sed](https://en.wikipedia.org/wiki/sed "wikipedia:sed") (*stream editor*) 是一条专门解析或替换文本的命令。
这里有一系列现成的 *sed* [示范](http://sed.sourceforge.net/sed1line.txt)。
**提示:** [AWK](https://en.wikipedia.org/wiki/AWK "wikipedia:AWK") 和 [Perl](https://en.wikipedia.org/wiki/Perl "wikipedia:Perl") 语言在这方面更为强大。
## seq
*seq* (*sequence*) 是一条专门排列数字的命令。Shell 内置了该命令的其他替代方案,可以按照 [Wikipedia](https://en.wikipedia.org/wiki/Seq_(Unix) 的说明进行练习。
## ss
*ss* 是一个检查网络端口的实用程序,并且是 [base](https://www.archlinux.org/groups/x86_64/base/) 组中的 [iproute2](https://www.archlinux.org/packages/?name=iproute2) 包的一部分。它具有与 [弃用的](https://www.archlinux.org/news/deprecation-of-net-tools/) netstat 实用程序类似的功能。
常用用法包括:
显示所有 TCP Sockets,连同 service 名称:
```
$ ss -at
```
显示所有 TCP Sockets,连同端口号:
```
$ ss -atn
```
显示所有 UDP Sockets:
```
$ ss -au
```
更多信息请参考 [iproute2](https://www.archlinux.org/packages/?name=iproute2) 包里的 [ss(8)](https://jlk.fjfi.cvut.cz/arch/manpages/man/ss.8) 或 `ss.html`。
## tar
作为早期的 Unix 存档格式,.tar 文件(称为“tarballs”)广泛用于类 Unix 操作系统中的打包操作。[pacman](/index.php/Pacman "Pacman") 和 [AUR](/index.php/AUR "AUR") 软件包都是压缩的 tarball,Arch 默认使用 [GNU 的](/index.php/GNU_Project "GNU Project") *tar* 程序。
对于 *.tar* 文件,*tar* 默认根据扩展名来解压文件:
```
$ tar xvf *file.EXTENSION*
```
强制给定格式:
| 文件类型 | 解压命令 |
| `*file*.tar` | `tar xvf *file*.tar` |
| `*file*.tgz` | `tar xvzf *file*.tgz` |
| `*file*.tar.gz` | `tar xvzf *file*.tar.gz` |
| `*file*.tar.bz` | `bzip -cd *file*.bz | tar xvf -` |
| `*file*.tar.bz2` | `tar xvjf *file*.tar.bz2`
`bzip2 -cd *file*.bz2 | tar xvf -` |
| `*file*.tar.xz` | `tar xvJf *file*.tar.xz`
`xz -cd *file*.xz | tar xvf -` |
| `*file*.tar.zst` | `tar -I zstd xvf *file*.tar.zst` |
这其中有部分 *tar* 的参数可以认为是历史遗留问题,但在执行某些特定的操作时仍然有用。更多细节请参阅 [tar(1)](https://jlk.fjfi.cvut.cz/arch/manpages/man/tar.1)。
## which
[which](https://en.wikipedia.org/wiki/Which_(Unix) 显示 shell 命令的完整路径。在下面的例子中 `ssh` 的完整路径作为一个参数传递给了 `journalctl`:
```
# journalctl $(which sshd)
```
## wipefs
*wipefs* 可以列出或擦除指定设备的 [文件系统](/index.php/File_system "File system")、[RAID](/index.php/RAID "RAID") 或 [分区表](/index.php/Partition "Partition") 标志 (magic strings)。它不会擦除文件系统本身,也不会擦除设备中的任何其他数据。
更多信息请参阅 [wipefs(8)](https://jlk.fjfi.cvut.cz/arch/manpages/man/wipefs.8)。
例如,擦除 `/dev/sdb` 设备中的所有标志并为每个标志在 `~/wipefs-sdb-*offset*.bak` 创建一个备份文件:
```
# wipefs --all --backup /dev/sdb
```
## 参阅
* [A sampling of coreutils](http://www.reddit.com/r/commandline/comments/19garq/a_sampling_of_coreutils_120/) [, part 2](http://www.reddit.com/r/commandline/comments/19ge6v/a_sampling_of_coreutils_2040/) [, part 3](http://www.reddit.com/r/commandline/comments/19j1w3/a_sampling_of_coreutils_4060/) - Overview of commands in coreutils
* [GNU Coreutils online documentation](https://www.gnu.org/software/coreutils/manual/coreutils.html)
* [Learn the DD command](https://www.linuxquestions.org/questions/linux-newbie-8/learn-the-dd-command-362506/)