熟练使用命令行是一种常常被忽视,或被认为难以掌握的技能,但实际上,它会提高你作为工程师的灵活性以及生产力本文是一份我在 Linux 上工作时,发现的一些命令行使用技巧的摘要有些技巧非常基础,而另一些则相当复杂,甚至晦涩难懂这篇文章并不长,但当你能够熟练掌握这里列出的所有技巧时,你就学会了很多关于命令行的东西了,我来为大家讲解一下关于命令行可视化?跟着小编一起来看一看吧!

命令行可视化(命令行的艺术)

命令行可视化

熟练使用命令行是一种常常被忽视,或被认为难以掌握的技能,但实际上,它会提高你作为工程师的灵活性以及生产力。本文是一份我在 Linux 上工作时,发现的一些命令行使用技巧的摘要。有些技巧非常基础,而另一些则相当复杂,甚至晦涩难懂。这篇文章并不长,但当你能够熟练掌握这里列出的所有技巧时,你就学会了很多关于命令行的东西了。

这篇文章是许多作者和译者共同的成果。 这里的部分内容 首次 出现 于 Quora, 但已经迁移到了 Github,并由众多高手做出了许多改进。 如果你在本文中发现了错误或者存在可以改善的地方,请贡献你的一份力量

前言

涵盖范围:

注意事项:

基础

日常使用

find . -name '*.py' | xargs grep some_function cat hosts | xargs -I{} ssh root@{} hostname

set -euo pipefail trap "echo 'error: Script failed: see failed command above'" ERR

# do something in current dir (cd /some/other/dir && other-command) # continue in original dir

diff /etc/hosts <(ssh somehost cat /etc/hosts)

{ # 在这里写代码 }

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

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

>>> 2 3 5

文件及数据处理

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

# 将文件、目录和内容全部重命名 foo -> bar: repren --full --preserve-case --from foo --to bar . # 还原所有备份文件 whatever.bak -> whatever: repren --renames --from '(.*)\.bak' --to '\1' *.bak # 用 rename 实现上述功能(若可用): rename 's/\.bak$//' *.bak

mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir

uconv -f utf-8 -t utf-8 -x '::Any-Lower; ::Any-NFD; [:Nonspacing Mark:] >; ::Any-NFC; ' < input.txt > output.txt

getfacl -R /some/path > permissions.txt setfacl --restore=permissions.txt

系统调试

单行脚本

一些命令组合的例子:

sort a b | uniq > c # c 是 a 并 b sort a b | uniq -d > c # c 是 a 交 b sort a b b | uniq -u > c # c 是 a - b

awk '{ x = $3 } END { print x }' myfile

find . -type f -ls

egrep -o 'acct_id=[0-9] ' access.log | cut -d= -f2 | sort | uniq -c | sort -rn

function taocl() { curl -s https://raw.githubusercontent.com/jlevy/the-art-of-command-line/master/README-zh.md| pandoc -f markdown -t html | iconv -f 'utf-8' -t 'unicode' | xmlstarlet fo --html --dropdtd | xmlstarlet sel -t -v "(html/body/ul/li[count(p)>0])[$RANDOM mod last() 1]" | xmlstarlet unesc | fmt -80 }

冷门但有用

仅限 OS X 系统

用 brew (Homebrew)或者 port(MacPorts)进行包管理。这些可以用来在 OS X 系统上安装以上的大多数命令。

  • 用 pbcopy 复制任何命令的输出到桌面应用,用 pbpaste 粘贴输入。
  • 若要在 OS X 终端中将 Option 键视为 alt 键(例如在上面介绍的 alt-balt-f 等命令中用到),打开 偏好设置 -> 描述文件 -> 键盘 并勾选“使用 Option 键作为 Meta 键”。
  • 用 open 或者 open -a /Applications/Whatever.app 使用桌面应用打开文件。
  • Spotlight:用 mdfind 搜索文件,用 mdls 列出元数据(例如照片的 EXIF 信息)。
  • 注意 OS X 系统是基于 BSD UNIX 的,许多命令(例如 ps,ls,tail,awk,sed)都和 Linux 中有微妙的不同( Linux 很大程度上受到了 System V-style Unix 和 GNU 工具影响)。你可以通过标题为 "BSD General Commands Manual" 的 man 页面发现这些不同。在有些情况下 GNU 版本的命令也可能被安装(例如 gawk 和 gsed 对应 GNU 中的 awk 和 sed )。如果要写跨平台的 Bash 脚本,避免使用这些命令(例如,考虑 Python 或者 perl )或者经过仔细的测试。
  • 用 sw_vers 获取 OS X 的版本信息。
  • 仅限 Windows 系统

    以下是仅限于 Windows 系统的技巧。

    在 Winodws 下获取 Unix 工具

    实用 Windows 命令行工具

    Cygwin 技巧

    更多资源

    免责声明

    除去特别小的工作,你编写的代码应当方便他人阅读。能力往往伴随着责任,你 有能力在 Bash 中玩一些奇技淫巧并不意味着你应该去做!;)

    ,