Core utilities (简体中文)

From ArchWiki
Jump to: navigation, search
翻译状态: 本文是英文页面 Core_Utilities翻译,最后翻译时间:2014-07-26,点击这里可以查看翻译后英文页面的改动。

Tango-preferences-desktop-locale.png本页面需要更新翻译,内容可能已经与英文脱节。要贡献翻译,请访问简体中文翻译组Tango-preferences-desktop-locale.png

附注: please use the first argument of the template to provide more detailed indications.

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

cat

cat (catenate)是一件能够连接并显示多文件的标准Unix工具。

  • cat 并不内置于 shell ,不过若您追求高性能,您会发现在很多情况下改用重定向就很方便得许多,例如编写脚本。事实上,$ < file的效果就如同$ cat file一样。
  • 按照以下结构可直接在某文件添加多行文字:
$  cat << EOF >> path/file
 first line
 ...
 last line
 EOF
  • 如果您希望能以倒读顺序显示文件内容,有个工具叫 tac (cat reversed).

cron

cron 是在 Unix-like 操作系统中的一种计划任务。

参见 cron

Note: systemd 可以处理许多 cron 用例. 参阅 related article.

dd

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

Note: cp 等同于不带操作数的 dd ,但其并非被设计用于通用的磁盘擦除程序.

检查 dd 运行时的进度

默认情况下在任务完成前 dd 都没有输出,使用 killUSR1 信号可以在不结束进程的情况下强制状态输出,打开第二个 root 终端并输入以下命令

# killall -USR1 dd
Note: 这也将影响到其他运行 dd 的进程.

或者:

# kill -USR1 pid_of_dd_command

例如:

# kill -USR1 $(pidof dd)

这将使 dd 立即输出进度到终端,例如:

605+0 records in
605+0 records out
634388480 bytes (634 MB) copied, 8.17097 s, 77.6 MB/s

dd 衍生

其他类似 dd 带状态输出的程序, 例如一个简单的进度条.

dcfldd 
dcfldd 一个用于鉴证和安全的dd增强版. 它接受多数 dd 的参数并且包括状态输出. 最后一个稳定版于2006年12月19日发布.[1]
ddrescue 
GNU ddrescue 是一个数据恢复工具. 它能忽略读取错误, 这在磁盘清理时几乎无用. 参见 official manual 获取跟多细节.

grep

grep (来自 edg/re/p,全局/正则 表达式/打印) 是最初给 Unix 写的命令行文字搜索工具,grep命令在文件或标准输入里搜索符合指定正则表达式模式的行,并把结果打印到标准输出。

  • 记住,grep 能直接处理文件,所以用$ grep pattern file结构代替$ cat file | grep pattern即可。
  • 若要 grep 集群服务器(VCS)的源代码,请使用专门的 Perl 工具ack。可访问official web site

彩色化输出

除了美观用途以外,grep的彩色化输出也对学习regexpgrep功能很有用。

请在您的shell配置文件添加以下内容以启用默认的彩色化输出,适用于Bash

~/.bashrc
alias grep='grep --color=auto'

您还可以直接设置GREP_OPTIONS 环境变量 [2] ,不过这有可能会影响到那些用到grep [3]的脚本:

export GREP_OPTIONS='--color=auto'

如果要显示行数,添加"-n"参数即可:

alias grep='grep -n --color=auto'

GREP_COLORS环境变量其实可以设定成默认之外的。

iconv

iconv 将转换一个文本的字符编码.

下列命令转换文件foo从 ISO-8859-15 到 UTF-8 保存至 foo.utf:

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

查阅 man iconv 获取更多细节.

ip

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

Note: ip 命令在iproute2包中提供, 包含在base组.
对象 作用 手册页名称
ip addr 协议地址管理 ip-address
ip addrlabel 协议地址标签管理 ip-addrlabel
ip l2tp tunnel Ethernet over IP (L2TPv3) ip-l2tp
ip link 网络设备配置 ip-link
ip maddr 多播地址管理 ip-maddress
ip monitor 监测 netlink 信息 ip-monitor
ip mroute 多播路由缓存管理 ip-mroute
ip mrule 多播路由策略数据库的规则
ip neigh 邻居/ARP 表管理 ip-neighbour
ip netns process network namespace management ip-netns
ip ntable 邻居表配置 ip-ntable
ip route 路由表管理 ip-route
ip rule 路由策略数据库管理 ip-rule
ip tcp_metrics 管理 TCP Metrics ip-tcp_metrics
ip tunnel 隧道配置 ip-tunnel
ip tuntap 管理 TUN/TAP 设备
ip xfrm 管理 IPsec 策略 ip-xfrm

help 帮助命令可用于所有对象. 例如, 输入 ip addr help 将显示地址的命令语法. 高级用法参见 iproute2 documentation.

The Network configuration 显示 ip 命令的多种常见任务中的使用方式.

Note: 您也许很熟悉 ifconfig 命令, 它用于旧版linux的接口配置. 在 archlinx 中现已不赞成使用; 您应当用 ip 替代之.

less

less 是一个对文本文件内容进行分页显示的终端程序,它和其他的分页显示程序如morepg相似,但less提供了更高级的界面和更多的功能。[4]

通过环境变量设置的彩色化输出

请在您的 shell 配置文件添加:

~/.bashrc
export LESS=-R
export LESS_TERMCAP_me=$(printf '\e[0m')
export LESS_TERMCAP_se=$(printf '\e[0m')
export LESS_TERMCAP_ue=$(printf '\e[0m')
export LESS_TERMCAP_mb=$(printf '\e[1;32m')
export LESS_TERMCAP_md=$(printf '\e[1;34m')
export LESS_TERMCAP_us=$(printf '\e[1;32m')
export LESS_TERMCAP_so=$(printf '\e[1;44;1m')

值随您所愿修改,请参照:ANSI escape code

直接通过包装来彩色化输出

您可直接开启less内置的代码高亮。先安装好source-highlight再在您的Shell配置文件里添加以下:

~/.bashrc
export LESSOPEN="| /usr/bin/source-highlight-esc.sh %s"
export LESS='-R '

经常使用命令行界面的用户可以安装lesspipe

# pacman -S lesspipe

用户可以使用以下 less 命令列出一个压缩包里的文件列表:

$ less compressed_file.tar.gz
==> use tar_file:contained_file to view a file in the archive
-rw------- username/group  695 2008-01-04 19:24 compressed_file/content1
-rw------- username/group   43 2007-11-07 11:17 compressed_file/content2
compressed_file.tar.gz (END)

lesspipe还被赋予less对文件而不仅是压缩包进行交互的能力,从而成为打开某一种文件的一个新工具(比如用来代替html2text[broken link: replaced by python-html2text]查看html文件。

安装完lesspipe后需重新登录以激活其功能,或者运行

source /etc/profile.d/lesspipe.sh

用Vim代替

Vim (visual editor improved)有内置了某脚本,可直接查看文本文件、压缩包或目录的内容。在您的shell配置文件添加以下即可:

~/.bashrc
alias less='/usr/share/vim/vim73/macros/less.sh'

除了less.sh宏外还有另外一种用法, 依赖于 PAGER 环境变量. 安装 vimpager 并添加以下内容至shell配置文件:

~/.bashrc
export PAGER='vimpager'
alias less=$PAGER

所有使用 PAGER 环境变量的程序, 如 git, 将使用 vim 作为分页程序.

读取标准输入时彩色化输出

Note: 建议将这些 环境变量 添加到 ~/.bashrc or ~/.zshrc. 因为本节完全基于: export LESS=R 写成

当你运行一个命令和使用管道连接 标准输出 (stdout) 到 less 作为分页视图 (e.g. yaourt -Qe --date | less), 你也许会发现输出不再是彩色化的. 这通常是因为该程序试图检测如果其 stdout 是交互式终端, 在这种情况下将输出彩色化文本,否则输出未着色文本. 当你想重定向 stdout 到一个文件中,这是一个很好的行为, e.g. yaourt -Qe --date > pkglst-backup.txt. 但是,当你想在 less 浏览输出时这将不是很好的行为.

一些程序提供禁用交互式 tty 检测的选项:

# dmesg --color=always | less

如果程序不提供任何类似选项,可以欺骗程序相信stdout 是交互式终端,有几种可行方式:

1. stdoutisatty 是一个用c写成的小程序, 它可以调用 "fake interactive tty". 你可以通过 AUR: stdoutisattyAUR安装. 用法示例:

$ stdoutisatty yaourt -Qe --date | less

2. socat 是两个独立的数据通道之间的双向数据传输的中继. 基于 GNU readline 且可用的包位于 official repositories: socat. 用法示例:

$ socat EXEC:"yaourt -Qe --date",pty STDIO | less

3. script 是一个相当古老的实用工具, 可生成终端会话的typescript. 用法示例:

$ script -fqc 'yaourt -Qe --date' | less
Tip: Perhaps this helper function from stackoverflow will be useful:
function faketty {script -qfc "$(printf "'%s' " "$@")"}

4. unbuffer 是一个基于 shTcl 的很好的 (手册比程序本身还要长), 古老的脚本. unbuffer 附带 expect. 我们只需要这样使用:

$ unbuffer yaourt -Qe --date | less

5. zptyzsh 的一个模块, 这里有一个来自 依云[5] 的小函数, 将其放入 ~/.zshrc:

ptyless() {
    zmodload zsh/zpty
    zpty ptyless ${1+"$@"}            # ptyless, name of pty
    zpty -r ptyless > /tmp/ptyless.$$ # Write to file, just dunno why pipeline doesn't work fine here
    less /tmp/ptyless.$$
    rm -f /tmp/ptyless.$$
    zpty -d ptyless                   # remove used pty
}

用法:

$ ptyless yaourt -Qe --date | less

locate

locate 用于在文件系统中查找文件. 它通过由 updatedb 预生成的或者由守护进程和增量编码压缩过的文件数据库搜索. 它要快于 find, 但需要经常更新数据库.

参见 main article.

ls

ls是一个Unix和类Unix系统中列出目录里的文件的一个命令。

  • 可以使用一个简单的命令别名启用彩色输出功能,~/.bashrc文件应该已经有一句从/etc/skel/.bashrc复制过来的指定别名命令:
alias ls='ls --color=auto'
以下步骤可以进一步改进ls的彩色输出功能,比如损坏的符号链接显示为红色,把以下内容添加到~/.bashrc,然后重新登录,或者把脚本source一下:
eval $(dircolors -b)

man

man (manual page)是常见于Unix-like操作系统的一种在线软件文档的格式,内容涉及了计算机程序(包括库或系统调用),常见标准或惯例,甚至还有抽象概念。请阅读Man Pages

mkdir

mkdir (make directory)是一条创建目录的命令。

  • 若需递归地创建一系列目录,就要用到 -p参数了。已经十分熟悉这原理的高级用户也可直接设为内置参数:
alias mkdir='mkdir -p -v'
-v参数可以使创建目录的消息更为详细。
  • 不必使用 chmod 更改权限模式, 用 -m选项可直接定义新建目录的访问权限
Note: 如果您仅仅只是想建个临时目录,也许用mktemp (make termporary)更好: $ mktemp -p.

mv

mv (move)是一条移动或重命名文件和目录的命令。使用这命令的风险可不小,请务必小心。

alias mv=' timeout 8 mv -iv'

这命令别名可以延迟mv 到8秒后才生效,或是当删除三个以上的文件就会进行确认。

rm

rm (remove)是一条删除文件或目录的命令。

  • 它同样十分危险,使用时请提高警觉:
alias rm=' timeout 3 rm -Iv --one-file-system'
这种命令别名可延迟rm到3秒后才生效, 或是当删除三个以上的文件就会进行确认,或是限于只在同一个文件系统生效。
若您想在删除多文件时一一确认,用-I代替-i即可。
Zsh 的使用者可在 timeout 前加上 noglob,避免隐式扩展。
  • 若要移除空目錄,使用 rmdir, 若内含文件则命令失败。

sed

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

这里有一系列现成的示范

Note: awk更为优秀,甚至Perl语言也可以。

seq

seq (sequence)是一条专门排列数字的命令。可以按照Wikipedia上进行练习。

shred

shred是一条更安全的删除命令,尽管如此也要小心点。

alias shred=' timeout 3 shred -v'

这种命令别名可延迟shred到3秒后才生效, 或是当删除三个以上的文件就会进行确认。

sudo

Sudo (as superuser do)是Unix-like操作系统上的一件允许用户以其他用户的权限(一般是超级用户或root)来运行用户的程序,请阅读Sudo

权限相关工具

  • chmod (change mode) 是一个 Unix shell 命令和系统调用名称, 用于修改文件系统对象的访问权限(包括文件和目录), 也用于指定特殊flags.
  • chown (change owner) 用于 Unix-like 系统改变文件拥有者.
  • chattr (change attributes) 允许用户设置 linux 系统中文件的某些属性.
  • lsattr (list attributes) 列出 linux 扩展文件系统上的属性.
  • ls -l 列出文件属性.

这些工具在 File permissions and attributes 中说明. 更多高级权限用例请参考 capabilitiesACL.

另请参阅