Core utilities (简体中文)

本文涉及 GNU/Linux 系统的所谓的 "核心" 工具,比如 less, ls, 和 grep,包括但不限于以上集成于 GNU coreutils 中的工具。下文提供了关于这些实用工具颇为丰富的技巧和有帮助的其他信息。

翻译状态:本文是 Core_Utilities翻译。上次翻译日期:2018-08-31。如果英文版本有所更改,则您可以帮助同步翻译。

大多数命令行工具的文档都存放在 man page 里面,来自 GNU Project 的工具放在 Info manual 里面,一些 shell 为它的内置命令提供了 命令。另外,大多数命令加上 参数时会显示自身的使用说明。

文件管理

命令 描述 手册页名称 示例
cd 变更目录(shell 内置命令) cd /etc/pacman.d
mkdir 创建目录 mkdir ~/newfolder
rmdir 删除空目录 rmdir ~/emptyfolder
rm 删除文件 rm(1) rm ~/file.txt
rm -r 删除目录和目录内文件 rm -r ~/.cache
ls 列出文件名称 ls *.mkv
ls -a 列出隐藏文件 ls -a /home/archie
ls -al 显示隐藏文件和文件属性
mv 移动文件 mv ~/compressed.zip ~/archive/compressed2.zip
cp 复制文件 cp ~/.bashrc ~/.bashrc.bak
chmod +x 设置文件为可执行文件 chmod +x ~/.local/bin/myscript.sh
cat 显示文件内容 cat(1) cat /etc/hostname
find 查找文件 find ~ -name myfile

ls

ls 可以列出目录中的文件名称。

请参考 Info manual在线版本)获取更多信息。

exa 相较于 和 是一个更加现代的、人性化的选择。它有更多的特性,例如将 Git 修改和文件名一同显示,在 模式中对每列进行不同的着色,或者在 视图中显示 模式元数据。exa 可以在软件包 中找到。

选项(“长格式”)用于显示文件类型、权限、所有者的用户名用户组、大小、修改时间等等,具体参阅 info document

默认情况下,包含空格的文件名和目录名会被单引号引起。要改变这一特性,请使用 或 选项。另外,将 QUOTING_STYLE 环境变量 设置为 也可以。

cat

cat 是一个将文件内容发送到标准输出的标准 Unix 工具。

如果您希望能以倒读顺序显示文件内容,有个位于 coreutils 包中的工具叫 tac (cat 倒着写)。

less

less 是一个对文本文件内容进行分页显示的终端程序,它与其他的分页显示程序如 more已废弃pg 相似,但 less 提供了更高级的界面和更复杂的 功能

参阅 List of applications#Terminal pagers 查找更多可选方案。

mkdir

mkdir (make directory) 可以创建目录。

若需递归地创建一系列目录,就要用到 参数,否则会出错。

用 选项可直接指定新建目录的访问权限,因此不必使用 chmod 更改权限。

提示: 如果您仅仅只是想建个临时目录,也许用 mktemp: mktemp -d 更好。

mv

mv (move) 可以移动或重命名文件和目录。

为了降低使用这个命令带来的风险,请为它添加一个别名:

alias mv='mv -iv'

这个别名可以在覆盖已存在的文件前要求确认,并会显示出正在进行的操作。

rm

rm (remove) 用于删除文件或目录。

为了降低使用这个命令带来的风险,请为它添加一个别名:

alias rm='rm -Iv --one-file-system'

这个别名可以在删除三个以上的文件时要求确认、显示出正在进行的操作、不跨越多个文件系统。如果想在删除一个文件时也获得确认,用 代替 即可。

Zsh 用户可在命令前加上 ,避免隐式扩展。

若要移除空目录,使用 rmdir,若内含文件则命令失败。

find

find 是 软件包的一部分, 它属于 base 软件包组。

你可能希望 find 命令将一个文件名称作为参数,并在文件系统中搜索与该名称匹配的文件。下面的 #locate 程序可以专门做这件事。

相反,find 需要一组目录,并将它们下面的每个文件与一组表达式进行匹配。这种设计为实现一些强大的“单行小程序” ("one-liners") 提供了支持,而这是上述“直观”设计无法实现的。参阅 GregsWiki:UsingFind 来获取使用说明。

locate

安装 软件包 。包里包括了一个 单元,用于每天更新数据库。这个 systemd 定时器在安装后就会 enable,如果不想重启系统就开始使用它,请手动 start。以 root 身份手动运行 updatedb 也可以更新数据库。默认会忽略 和 等路径,所以 locate 无法找到外置设备里的文件。详情请参考 。

locate 命令是一个靠文件名快速查找文件的常用 Unix 工具。因为是从数据库查找而不是直接访问文件系统,所以速度比 find 快很多。而缺点是在数据库更新后创建的新文件不会被搜索到。

使用 locate 前需建立数据库,请先以 root 权限执行 。

详情参考 How locate works and rewrite it in one minute

diff

diff 用于逐行比较文件,它的输出内容可以放到一种被称为 patch 的文件里,而这种文件可以被 patch(1) 工具所使用。Arch Linux 默认的 diff 来自 GNU ,而这个软件包也包含了 cmp,可以逐字节比较文件。

另一个可以逐行比对两份已排序的文件的命令叫 comm,参阅 。

比较文本文件时,逐个单词地比对通常更加合理:

  • git 内置的 git diff 可以使用 参数来实现逐词比较,使用 参数来比较 Git 工作树外的文件。

文本流处理

grep

grep (global/regular expression/print) 是最初给 Unix 写的命令行文字搜索工具,"grep" 命令在文件或标准输入里搜索符合指定正则表达式的行,并把结果打印到标准输出。

  • 要在输出结果中显示行数,加上 选项。
  • grep 可以在二进制文件中查找十六进制数值,例如要查找文件中的 ,应该这样写命令:
    $ LANG=C grep --text --perl-regexp "\xA1\xF2" ''/path/to/file''

参阅 Color output in console#grep 来启用彩色输出支持。

更多信息请参阅 。

sed

sed (stream editor) 是一条专门过滤或替换文本的命令。

这个列表里有一系列现成的 sed 单行命令示范。

awk

AWK 是一种模式扫描和处理语言,存在多个实现:

  • nawk 真正的 AWK 实现,参考 nawk(1).
https://www.cs.princeton.edu/~bwk/btl.mirror/ || nawk
  • BusyBox 也包含了一个 AWK 实现。

系统管理

命令 描述 手册页名称 示例
mount 挂载分区 mount /dev/sdc1 /media/usb
df -h 显示各个分区上的剩余空间
ps -A 列出所有正在运行的进程
killall 杀死所有运行中的进程实例 killall(1)
ss -at 列出所有已打开的 TCP 套接字

sudo

参阅 Sudo

which

which 显示 shell 命令的完整路径。在下面的例子中 的完整路径作为一个参数传递给了 :

# journalctl $(which sshd)

lsblk

命令会显示所有连接到系统的 块设备 和分区状况,例如:

设备名称的开头定义块设备的类型,大部分现代存储设备(如硬盘、SSD 和 USB 闪存设备)都被识别为 SCSI disks ()。类型后面跟着给设备编号的小写字母,第一个设备从 开始 (sda),第二个设备就是 (),以此类推。每个设备上的 现有 分区将用数字编号,从 开始 (sda1),第二个分区就是 (),以此类推。在上面的示例中,只有一个设备可用 (sda),该设备有三个分区 (sda1 到 ),每个分区具有不同的 文件系统

其它常见的块设备有 (内存卡)或 (NVMe 设备)。不清楚的设备类型可以在这里搜索到:kernel documentation

ip

ip 显示关于网络设备,IP 地址,路由表和其他 Linux IP 软件栈的对象信息。通过附加各种命令,你可以操纵或配置大多数对象。

子命令作用手册页名称
ip addr协议地址管理ip-address(8)
ip addrlabel协议地址标签管理
ip l2tptunnel Ethernet over IP (L2TPv3)
ip link网络设备配置
ip maddr多播地址管理
ip monitor监测 netlink 信息
ip mroute多播路由缓存管理
ip mrule多播路由策略数据库的规则
ip neigh邻居表/ARP 表管理ip-neighbour(8)
ip netnsprocess network namespace management
ip ntable邻居表配置
ip route路由表管理
ip rule路由策略数据库管理ip-rule(8)
ip tcp_metrics管理 TCP Metrics
ip tunnel隧道配置
ip tuntap管理 TUN/TAP 设备
ip xfrm管理 IPsec 策略
帮助命令可用于所有子命令。例如,输入  将显示地址对象相关的命令语法。高级用法参见 iproute2 documentation

Network configuration (简体中文) 中提到了 ip 命令在多种实际任务中的使用方法。

ss

参阅 Network configuration#Investigate sockets

杂项

命令 描述 手册页名称 示例
strings 显示二进制文件中可打印的字符 strings /usr/bin/free

dd

dd 是在 unix 和 类 unix 系统中主要用于转换和拷贝文件的命令。

iconv

iconv 可以转换文本的字符编码。

下列命令将文件 foo 从 ISO-8859-15 转换至 UTF-8,然后保存到 :

$ iconv -f ISO-8859-15 -t UTF-8 foo > foo.utf

查阅 获取更多细节。

od

od (octal dump) 命令在显示非人类可读格式时非常有用,比如程序的可执行文件,或者未格式化的设备的内容。参阅 manual 了解详情。

seq

seq (sequence) 可以打印一列数字。Shell 内置了该命令的其他替代方案,可以按照 Wikipedia 的说明进行练习。

tar

作为早期的 Unix 存档格式,.tar 文件(称为“tarballs”)广泛用于类 Unix 操作系统中的打包操作。pacmanAUR 软件包都是压缩的 tarball,Arch 默认使用 GNU 的 tar 程序。

对于 .tar 文件,tar 默认根据扩展名来解压文件:

$ tar xvf file.EXTENSION

强制指定格式:

文件类型解压命令
file.tar.bz


file.tar.zst

这其中有部分 tar 的参数可以认为是历史遗留问题,但在执行某些特定的操作时仍然有用。更多细节请参阅 。

注意: 虽然 GNU 的 tar 是默认的 tar 程序,但是官方 Arch Linux 项目(如 pacmanmkinitcpio)使用的是 libarchive 包中的 bsdtar

另请参考 Archiving and compression

wipefs

wipefs 可以列出或擦除指定设备的 文件系统RAID分区表 标志 (magic strings)。它不会擦除文件系统本身,也不会擦除设备中的任何其他数据。

更多信息请参阅 。

例如,擦除 设备中的所有标志并为每个标志在 创建一个备份文件:

# wipefs --all --backup /dev/sdb

参考资料

This article is issued from Archlinux. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.