[collect]命令行艺术


标题中的“命令行艺术”指的是在GitHub上看到的 the-art-of-command-line ,从中学习到了不少之前我不知道或不熟悉的命令,在此做个记录,不定期更新:

==

  • man
  • apropos
  • help [-d]
  • type
  • whereis/which

了解 ssh,以及基本的无密码认证,ssh-agent,ssh-add 等

  • df
  • mount
  • fdisk
  • mkfs
  • lsblk

ln 和 ln -s (了解硬链接与软链接的区别)

  • Ctrl-a/e/u/k/l  #Useful
  • Alt-b/f     #Useful
  • man readline
和上一个命令相关的参数、命令内容:
  • !^
  • !$
  • !*
  • !!

使用 netstat -lntp 或 ss -plat 检查哪些进程在监听端口

=

在 Bash 脚本中,使用 set -x 去调试输出,尽可能的使用严格模式,使用 set -e 令脚本在发生错误时退出而不是继续运行,使用 set -o pipefail 严谨地对待错误(尽管问题可能很微妙)。当牵扯到很多脚本时,使用 trap。

# 子 shell(使用括号(...))是一种便捷的方式
# do something in current dir
(cd /some/other/dir && other-command)
# continue in original dir
通过使用 <(some command) 可以将输出视为文件。例如,对比本地文件 /etc/hosts 和一个远程文件:
diff /etc/hosts <(ssh somehost cat /etc/hosts)

使用 man ascii 查看具有十六进制和十进制值的ASCII表。man unicode,man utf-8,以及 man latin1 有助于你去了解通用的编码信息。

=

使用 screen 或 tmux 来使用多个屏幕,当你在使用 ssh 时(保存 session 信息)将尤为有用。另一个轻量级的解决方案是 dtach。

=

对 ssh 设置做一些小优化可能是很有用的,例如这个 ~/.ssh/config 文件包含了防止特定环境下断开连接、压缩数据、多通道等选项:

    TCPKeepAlive=yes
    ServerAliveInterval=15
    ServerAliveCountMax=6
    Compression=yes
    ControlMaster auto
    ControlPath /tmp/%r@%h:%p
    ControlPersist yes

获取文件的八进制格式权限,使用类似如下的代码:

man stat
stat -c '%A %a %n' /etc/timezone

使用 jq 处理 JSON

如果你不得不处理 XML,xmlstarlet 宝刀未老

了解如何使用 cut,paste 和 join 来更改文件。很多人都会使用 cut,但几乎都不会使用 join

=

了解语言环境对许多命令行工具的微妙影响,包括排序的顺序和性能。大多数 Linux 的安装过程会将 LANG 或其他有关的变量设置为符合本地的设置。意识到当你改变语言环境时,排序的结果可能会改变。明白国际化可能会时 sort 或其他命令运行效率下降许多倍。某些情况下(例如集合运算)你可以放心的使用 export LC_ALL=C 来忽略掉国际化并使用基于字节的顺序。

=

替换一个或多个文件中出现的字符串:

perl -pi.bak -e 's/old-string/new-string/g' my-files-*.txt

依据某种模式批量重命名多个文件,使用 rename。对于复杂的重命名规则,repren 或许有帮助。

# Recover backup files foo.bak -> foo:
rename 's/\.bak$//' *.bak
# Full rename of filenames,directories,and contents foo -> bar:
repren --full --preserve-case --from foo --to bar .

=待续=

 

参考链接:
, ,

《 “[collect]命令行艺术” 》 有 8 条评论

  1. 在命令行下解析json除了可以使用`jq`等外部工具之外,还可以用Python进行处理:
    `
    $ echo ‘{“foo”:1, “bar”:2}’ | python -m json.tool
    {
    “bar”: 2,
    “foo”: 1
    }
    `

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注