2024年11月Linux命令行的日常使用技术(2)

发布时间:

  ⑴在Bash中,使用 tab 补完参数,使用 ctrl-r 来搜索命令历史。

  ⑵在Bash中,使用 ctrl-w 来删除最后的单词,使用 ctrl-u 来删除整行,返回行首。使用 alt-b 和alt-f 来逐词移动,使用 ctrl-k 来清除到行尾的内容,以及使用 ctrl-l 清屏。参见 man readline来查看 Bash 中所有默认的键盘绑定,有很多。例如,alt-。 可以循环显示先前的参数,而alt- 扩展通配。(LCTT 译注:关于 Bash 下的快捷键,可以参阅:

  ⑶另外,如果你喜欢 vi 风格的键盘绑定,可以使用 set -o vi。

  ⑷要查看最近用过的命令,请使用 history 。 有许多缩写形式,比如 !$(上次的参数和!!(上次的命令,虽然使用 ctrl-r 和 alt-。 更容易些。(LCTT 译注:关于历史扩展功能,可以参阅:

  ⑸返回先前的工作目录: cd -

  ⑹如果你命令输入到一半,但是改变主意了,可以敲 alt-# 来添加一个 # 到开头,然后将该命令作为注释输入(或者使用快捷键 ctrl-a, #,enter 输入。然后,你可以在后面通过命令历史来回到该命令。

  ⑺使用 xargs(或 parallel,它很强大。注意,你可以控制每行(-L执行多少个项目,以及并行执行(-P。如果你不确定它是否会做正确的事情,可以首先使用 xargs echo。同时,使用 -I{} 也很方便。样例:

  ⑻find 。-name ’*.py‘| xargs grep some_function

  ⑼cat hosts | xargs -I{} ssh root{} hostname

  ⑽pstree -p 对于显示进程树很有帮助。

  ⑾使用 pgrep 和 pkill 来按名称查找进程或给指定名称的进程发送信号(-f 很有帮助。

  ⑿掌握各种可以发送给进程的信号。例如,要挂起进程,可以使用 kill -STOP [pid]。完整的列表可以查阅 man signal。

  ⒀如果你想要一个后台进程一直保持运行,使用 nohup 或 disown。

  ⒁通过 stat -lntp 或 ss -plat 检查哪些进程在监听(用于 TCP,对 UDP 使用 -u 替代 -t。

  ⒂lsof来查看打开的套接字和文件。

  ⒃在 Bash 脚本中,使用 set -x 调试脚本输出。尽可能使用严格模式。使用 set -e 在遇到错误时退出。也可以使用 set -o pipefail,对错误进行严格处理(虽然该话题有点微妙。对于更复杂的脚本,也可以使用 trap。

  ⒄在 Bash 脚本中,子 shell(写在括号中的是组合命令的便利的方式。一个常见的例子是临时移动到一个不同的工作目录,如:

  ⒅# 在当前目录做些事

  ⒆(cd /some/other/dir; other-mand

  ⒇# 继续回到原目录

  ⒈注意,在 Bash 中有大量的各种各样的变量扩展。检查一个变量是否存在:${name:?error message}。例如,如果一个Bash脚本要求一个单一参数,只需写 input_file=${:?usage: $ input_file}。算术扩展:i=$(( (i + % 。序列: {..}。修剪字符串:${var%suffix} 和${var#prefix}。例如,if var=foo.pdf ,那么 echo ${var%.pdf}.txt 会输出 foo.txt。

  ⒉命令的输出可以通过 《(some mand 作为一个文件??处理。例如,将本地的 /etc/hosts 和远程的比较:

  ⒊diff /etc/hosts 《(ssh somehost cat /etc/hosts

  ⒋了解 Bash 中的“嵌入文档”,就像在 cat 《《EOF 。.. 中。

  ⒌在 Bash 中,通过:some-mand 》logfile 》& 同时重定向标准输出和标准错误。通常,要确保某个命令不再为标准输入打开文件句柄,而是将它捆绑到你所在的终端,添加 《/dev/null 是个不错的做法。

  ⒍man ascii 可以得到一个不错的ASCII表,带有十六进制和十进制值两种格式。对于常规编码信息,man unicode,man utf- 和 man latin 将很有帮助。

  ⒎使用 screen 或 tmux 来复用屏幕,这对于远程 ssh 会话尤为有用,使用它们来分离并重连到会话。另一个只用于保持会话的最小可选方案是 dtach。

  ⒏在 ssh 中,知道如何使用 -L 或 -D(偶尔也用-R来打开端口通道是很有用的,如从一台远程服务器访问网站时。

  ⒐为你的 ssh 配置进行优化很有用;例如,这个 ~/.ssh/config 包含了可以避免在特定网络环境中连接被断掉的情况的设置、使用压缩(这对于通过低带宽连接使用 scp 很有用,以及使用一个本地控制文件来开启到同一台服务器的多通道:

  ⒑TCPKeepAlive=yes

  ⒒ServerAliveInterval=

  ⒓ServerAliveCountMax=

  ⒔pression=yes

  ⒕ControlMasterauto

  ⒖ControlPath/tmp/%r%h:%p

  ⒗ControlPersist yes

  ⒘其它一些与 ssh 相关的选项对会影响到安全,请小心开启,如各个子网或主机,或者在信任的网络中:StrictHostKeyChecking=no, ForwardAgent=yes

  ⒙要获得八进制格式的文件的权限,这对于系统配置很有用而用 ls 又没法查看,而且也很容易搞得一团糟,可以使用像这样的东西:

  ⒚stat -c ’%A %a %n‘/etc/timezone

  ⒛对于从另一个命令的输出结果中交互选择值,可以使用percol。

  ①对于基于另一个命令(如git输出的文件交互,可以使用fpp (路径选择器。

  ②要为当前目录(及子目录中的所有文件构建一个简单的 Web 服务器,让网络中的任何人都可以获取,可以使用: python -m SimpleHTTPServer (使用端口 和 Python 。