Core utilities (简体中文)

From ArchWiki
Revision as of 07:13, 29 July 2014 by Rentaro (talk | contribs) (→‎rm)
Jump to navigation Jump to search

zh-TW:Core Utilities

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

本文涉及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 but is not designed for more versatile disk wiping procedures.

检查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查看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: It is recommend to add these environment variables to your ~/.bashrc or ~/.zshrc. Because this section is totally written based on this: export LESS=R

When you run a command and pipe its standard output (stdout) to less for a paged view (e.g. yaourt -Qe --date | less), you may found that the output is not colored any more. This is usually because the program tries to detect if its stdout is an interactive terminal, in which case it prints colored text, and otherwise prints uncolored text. This is a good behaviour when you want to redirect the stdout to a file, e.g. yaourt -Qe --date > pkglst-backup.txt. However, this will not be a good behaviour when you want to view the output in less.

Some programs provide an option to disable the interactive tty detection:

# dmesg --color=always | less

In case that the program does not provide any similar option, it is possible to trick the program to believe that its stdout is an interactive terminal. There are several methods available:

1. stdoutisatty is a little program written in C, which can invoke a "fake interactive tty". You can install it from AUR: stdoutisattyAUR. Example usage:

$ stdoutisatty yaourt -Qe --date | less

2. socat is a relay for bidirectional data transfer between two independent data channels. It is based on GNU readline and a package is available in official repositories: socat. Example usage:

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

3. script is a rather old utility that makes typescript of terminal session. Example usage:

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

4. unbuffer is a good (its man page is even longer than the program itself), old script based on sh and Tcl. It can do the trick well, unbuffer comes with expect. The usage what we need looks like this:

$ unbuffer yaourt -Qe --date | less

5. zpty is a module of zsh, here is a tiny function from [5], put it in your ~/.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
}

Usage is:

$ 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.

另请参阅