标题中的“命令行艺术”指的是在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 条评论
在命令行下解析json除了可以使用`jq`等外部工具之外,还可以用Python进行处理:
`
$ echo ‘{“foo”:1, “bar”:2}’ | python -m json.tool
{
“bar”: 2,
“foo”: 1
}
`
一些命令行效率工具
http://wulfric.me/2015/08/zsh/
Zsh中的目录跳转
输入d,将列出当前 session 访问过的所有目录,再按提示的数字即可进入相应目录。
命令行环境下的 Chrome 使用入门
https://developers.google.com/web/updates/2017/04/headless-chrome
将json转换成csv的命令行工具(command line tool to convert json to csv)
http://github.com/jehiah/json2csv
命令行 JSON 处理工具 jq 的使用介绍
https://www.ibm.com/developerworks/cn/linux/1612_chengg_jq/index.html
https://stedolan.github.io/jq/manual/
http://blog.chinaunix.net/uid-24774106-id-3830242.html
jq 常用操作
https://mozillazg.com/2018/01/jq-use-examples-cookbook.html
让 JSON 变得更容易检索(用Golang实现)
https://github.com/tomnomnom/gron
取数组指定索引的元素,以及根据名称取特定的字段
https://github.com/alingse/jq-manual-cn/tree/master/manual/v1.5
https://mozillazg.com/2018/01/jq-use-examples-cookbook.html#hidid4
`
echo ‘[{“name”:”foo”,”username”:”foo-user”,”email”:”[email protected]”,”extend”:”others”},{“name”: “bar”}]’ |
jq ‘{
name: .[0].name
,username: .[0].username
,email: .[0].email
}’
`