终端是开发人员的军火库中最重要的生产力工具之一。把它掌握好了可以对你的工作产生非常积极的影响,比如许多的日常任务就可以简化到只需要编写简单的命令然后按一下 Enter 就可以了。 本文我们会为你奉上一系列的 Unix 命令,它们可以帮助你充分地利用好终端。它们其中的一些是内置的,而其它的则是一些免费的工具,它们都经过了时间的考验,而且安装操作也可以在不到一分钟的时间内完成。
Curl
Curl 是一个命令行工具,用来通过 HTTP(s),FTP 等其它几十种你可能尚未听说过的协议来发起网络请求。它可以下载文件,检查响应消息头以及方便地访问远程数据。 在 Web 开发中, Curl 经常被用来测试连接,还有调用 REST 风格的 API。
# Fetch the headers of a URL.
curl -I http://google.com
HTTP/1.1 302 Found
Cache-Control: private
Content-Type: text/html; charset=UTF-8
Referrer-Policy: no-referrer
Location: http://www.google.com/?gfe_rd=cr&ei=0fCKWe6HCZTd8AfCoIWYBQ
Content-Length: 258
Date: Wed, 09 Aug 2017 11:24:01 GMT
# Make a GET request to a remote API.
curl http://numbersapi.com/random/trivia
29 is the number of days it takes Saturn to orbit the Sun.
Curl 的用法还可以比这更复杂。它有许多选项可以用来控制消息头,Cookie,身份验证等等这些要素。你可以通过 Everything curl 这本优秀的电子书来了解更多。
Tree
Tree 是一个小巧的命令行工具程序,它可以用可视化的效果向你展示一个目录下的文件。它的运行是递归的,会以树的形式遍历每个级别的嵌套关系,并显示出每一级目录。 如此你就可以快速地进行浏览并找到自己想要的文件。
tree . ├── css │ ├── bootstrap.css │ ├── bootstrap.min.css ├── fonts │ ├── glyphicons-halflings-regular.eot │ ├── glyphicons-halflings-regular.svg │ ├── glyphicons-halflings-regular.ttf │ ├── glyphicons-halflings-regular.woff │ └── glyphicons-halflings-regular.woff2 └── js ├── bootstrap.js └── bootstrap.min.js
它还拥有使用一种类正则表达式的模式来对结果集进行过滤的选项。
tree -P '*.min.*'
.
├── css
│ ├── bootstrap.min.css
├── fonts
└── js
└── bootstrap.min.js
Tmux
根据维基的描述,Tmux 是一个终端复用器,说人话就是,它是一个可以将多个终端连接到单个终端会话的工具。 一个 Tmux 终端带有三个分屏的效果 它让你可以在一个终端中进行程序之间的切换,添加分屏窗格,还有就是将多个终端连接到同一个会话,使它们保持同步。 当你在远程服务器上工作时,Tmux 特别有用,因为它可以让你创建新的选项卡,然后在选项卡之间切换,而无需反反复复的退出然后登录。
Disk usage – du
运行 du 命令会生成相关文件和有关目录的空间使用情况的报告。它很容易使用,也可以递归地运行,会遍历每个子目录并且返回每个文件的单个大小。 du 通常在你发现某个驱动器的空间不足,但不知道是因为什么造成的时候使用。使用此命令可以快速查看每个文件夹所占用的存储空间,从而把耗费存储的大户给找出来。
# Running this will show the space usage of each folder in the current directory.
# The -h option makes the report easier to read.
# -s prevents recursiveness and shows the total size of a folder.
# The star wildcard (*) will run du on each file/folder in current directory.
du -sh *
1.2G Desktop
4.0K Documents
40G Downloads
4.0K Music
4.9M Pictures
844K Public
4.0K Templates
6.9M Videos
还有一个用途类似的命令 df(Disk Free),它会返回关于可用磁盘空间的各种信息(与 du 正好相反)。
Git
Git 是迄今为止最流行的版本控制系统。它是现代 Web 开发的指定工具之一,我们根本没办法把它从列表中给删掉。 尽管有很多的第三方应用和工具可用,但是大多数人还是喜欢通过终端对 git 来进行本地访问。git CLI 真的很强大,可以用来处理那些盘根错节的项目历史。 如果想了解更多的关于 git 的信息,建议你看看我们的教程“30 分钟学会用 Git”。
Tar
Tar 是用来处理文件压缩的默认 Unix 工具。它能让你快速的将多个文件打成一个包,这样在后续就更加容易存储和移动它们了。
tar -cf archive.tar file1 file2 file3
使用 -x 选项可以对现有的 .tar 压缩包进行解压缩操作。
tar -xf archive.tar
注意大多数其它的格式,像 .zip 和 .rar 这些,都不能使用 tar 来打开,而是需要用其它的像 unzip 这样的工具来进行操作。 如今许多的 Unix 系统都运行着一个 tar 的扩展版本 (GNU tar) ,它也还可以执行限定文件大小的压缩操作。
# Create compressed gzip archive. tar -czf file.tar.gz inputfile1 inputfile2 # Extract .gz archive. tar -xzf file.tar.gz
如果你的操作系统并不支持该版本的 tar,还可以使用 gzip, zcat 或者 compress 来限制文件压缩包的大小。
md5sum
Unix 内置了一些像 md5sum、sha1sum 这样的命令行工具,它们在编程中有各自的作用,但最重要的是它们可以用来检查文件的完整性。 譬如,如果你从不受信的网络下载了一个 .iso 文件,这个文件中存在恶意脚本的风险。为了确认这个 .iso 是安全的,你可以生成它的 md5 或者其它摘要信息。
md5sum ubuntu-16.04.3-desktop-amd64.iso
0d9fe8e1ea408a5895cbbe3431989295 ubuntu-16.04.3-desktop-amd64.iso
然后将生成的字符串与原作者提供的(比如 UbuntuHashes)进行比较。
Htop
Htop 是个比内置的 top 任务管理更强大的工具。它提供了带有诸多选项的高级接口用于监控系统进程。 运行中的 htop 任务管理器 虽然 htop 在终端中运行,但它对鼠标操作支持良好。所以使用 htop 的菜单导航、选择进程,以及通过排序和过滤来管理任务都很容易。
Ln
Unix 里面的链接同 Windows 中的快捷方式类似,允许你快速地访问到一个特定的文件。链接可以通过 ln 命令创建出来,而且可以有两种类型 : 硬的(hard) 或者符号的(symbolic)。每种类型都有不同的属性而且各有其用途 (了解更多)。 这里有一个示例,展示了使用链接的最常见方式。假如说我们在桌面上有一个目录叫做 Scripts,里面整齐的摆放着我们最常用的 bash 脚本。每次我们想要调用其中的一个脚本的时候,我们会这样做:
~/Desktop/Scripts/git-scripts/git-cleanup
显然,这样做并不方便,每次我们都得写绝对路径。其实我们可以创建一个 symlink,将 Scripts 文件夹链接到 /usr/local/bin,这样就能让脚本在所有的目录下面都可以执行。
sudo ln -s ~/Desktop/Scripts/git-scripts/git-cleanup /usr/local/bin/
有了这个创建好的 symlink,我们现在就可以简单地通过其名称在任意一个打开的终端中执行脚本了。
git-cleanup
SSH
使用 ssh 命令,用户可以快速地连接到一个远程主机,然后登录进入其 Unix shell。这就使得通过自己本地机器的终端在服务器上提交指令成为了可能。 要定位一个连接,你只需要指定正确的 IP 地址或者 url 就行了。在你第一次连接到一台新的服务器的时候,会需要某种形式的认证。
ssh username@remote_host
如果你需要快速地在服务器上面执行一条命令,但又不想登录,在 url 之后加上一条命令就可以了。命令将会在服务器上执行,而执行结果也会从它那里返回。
ssh username@remote_host ls /var/www
some-website.com
some-other-website.com
你还可以用 SHH 做更多事情,像创建代理或者隧道,用私钥来保护你的连接,传输文件等。在这里的一个指南中你可以了解到更多信息。
Grep
Grep 是一个用来在文本中查找字符串的标准 Unix 工具。它可以从一个文件或者直接就是流的形式获取到输入, 通过一个正则表达式来分析内容,然后返回匹配的行。 该命令在需要对大型文件进行内容过滤的时候非常趁手。下面我们利用 grep 结合 date 命令,来在一个大型的日志文件中进行查找,然后生成一个只包含当天错误日志的新文件。
// Search for today's date (in format yyyy-mm-dd) and write the results to a new file.
grep "$(date +"%Y-%m-%d")" all-errors-ever.log > today-errors.log
另外一个用来操作字符串的强大工具就是 sed。它比起 grep 更加强大 (当然也更加复杂),可以执行几乎所有的字符串相关的操作任务,包括添加、删除还有替换字符串的内容。
Alias
许多的 Unix 命令,包括本文中提到的一些,在你加上许多选项之后,看起来都相当的长了。为了能更加容易记忆,你可以使用 alias 这个 bash 内置的命令来为它们创建一个短别名:
# Create an alias for starting a local web server.
alias server="python -m SimpleHTTPServer 9000"
# Instead of typing the whole command simply use the alias.
server
Serving HTTP on 0.0.0.0 port 9000 ...
只要你保持终端一直是打开的状态, 别名就一直会是可用的。如果想永久使用的话,你可以将 alias 命令操作写到你的 .bashrc 文件中去。