# 命令 101
对于很多非专业人士来说,命令行界面( CLI 、 Terminal、 bash 或者 shell)是高不可攀的,不敢轻易地染指。但是在能掌握一些最基本的操作之后,对这一领域的认识就会完全改变了。
## 打开命令行界面
在 Mac 上,最常见的应用命令行就是 “Terminal.app”。它会预装在每一个 Mac OS X 系统中。你可以在你的 “Applications” 目录中的子目录 “Utilities” 中启动它。
在 Windows 上,就是本书之前的安装指南中所提到应用程序 “Git Bash”。你可以在 windows 的开始菜单里的 “Git” 目录中找到它。
## 找到你自己的方法
顾名思义,命令行界面是用来执行各种命令的终端界面。你可以键入一些命令然后通过回车键来运行它。很多的命令都默认地依靠在你当前所处的位置,这里所说的 “位置” 就是指当前你所在的目录。
好的,让我们来执行一个命令来找出我们当前的位置吧:
```
$ pwd
```
你可以很容易地记住这个命令,它代就表:“**p**rint(打印) **w**orking(工作) **d**irectory(目录)”。它将会返回给你当前你所位于的本地文件夹的路径。
对于切换当前的工作目录,你可以使用 “cd” 命令(这里的 “cd” 代表了 “**c**hange(切换)**d**irectory(目录)”)。例如向上移动一个目录(进入当前目录的上一层目录),你只需要执行:
```
$ cd ..
```
移动到它下层的一个子目录,你可以执行:
```
$ cd name-of-subfolder/sub-subfolder/
```
你经常会看到一种特殊的路径符号:“~”。这个标志代表你的用户帐户的主文件目录。其实你并不需要每次都键入繁琐的用户名路径,比如 “cd /Users/your-username/projects/”,你可以简单地执行下面这个命令:
```
$ cd ~/projects/
```
另一个非常重要的命令就是 “ls”,它可以显示出当前目录中的内容。我建议你在使用这个命令时永远加上两个参数:“-l” 结构化的列表格式来输出内容;“-a” 显示出隐含文件 (这在版本控制系统中非常重要的)。显示当前目录的内容:
```
$ ls -la
```
## 对文件的操作
很多重要的文件操作都可以非常方便地用命令来完成。
让我们来删除一个文件:
```
$ rm path/to/file.ext
```
如果想要删除一个文件夹,你应该加上 “-r” 参数 ( r 代表了 “recursive(递归)”):
```
$ rm -r path/to/folder
```
移动一个文件是很简单的:
```
$ mv path/to/file.ext different/path/file.ext
```
“mv” 命令也可以用来对一个文件进行重命名:
```
$ mv old-filename.ext new-filename.ext
```
假如你不是要移动这个文件而是复制它,用 “cp” 命令来替换那个 “mv” 命令就可以了。
最后,你可以使用 “make directory” 命令来创建一个目录:
```
$ mkdir new-folder
```
## 生成输出
命令行是无所不能的。它可以显示一个文件的内容,但是它却不可能像一个专业的文本编辑器那样方便。尽管如此,在某些时候它还是非常实用的。例如当你仅仅是想要进行一个快速的预览,或者当你正在远程服务器上工作时,GUI 应用程序并不支持的情况之下。
“cat” 命令会输出完整的文件内容:
```
$ cat file.ext
```
同样的,“head” 命令只会显示文件的前10行,“tail” 会显示文件的后10行。和其它其他应用程序一样,你可以通过简单地滚动鼠标来继续显示。
“less” 命令在这方面就有点不同了。
```
$ less file.ext
```
尽管它也可以用来显示文件内容,但是它能够控制页面流本身。也就是说,它只显示一个整页面的内容,然后等待你的明确指令。当显示的文件并不完整时,你会发现在屏幕的最后一行会显示出该文件的名称或者仅仅显示一个冒号(“:”),它会等待你的指令。敲击空格键可以向下翻页,“b” 可以向上翻页,“q” 可以退出 “less” 程序。
## 命令行让你的生活更容易
在用命令行工作时有一些小窍门可以让你使用起来更方便容易。
### TAB 键
当你输入文件或者目录(包括它的路径),利用 TAB 键就会非常方便。它会自动地把你的输入补全,这是非常有效率的。例如,如果你想要切换到一个不同的目录,你可以键入整个路径的每个字符:
```
$ cd ~/projects/acmedesign/documentation/
```
或者你也可以利用 TAB 键(自己尝试一下吧!):
```
$ cd ~/pr[TAB]ojects/ac[TAB]medesign/doc[TAB]umentation/
```
如果你键入的字符是不明确的(因为 “dev” 可能是 “development” 或者是 “developers” 目录……),命令行应用就不可能自动补全你的输入。在这种情况下,你可以再一次敲击 TAB 来得到所有匹配的内容,并且借此可以再键入更多的字符。
### 方向键
命令行界面可以保存一些你最新执行过的命令。使用键盘上的向上键,你可以一个一个地调出你刚刚使用过的命令(从最近使用过开始)。使用键盘的向下键则反之。
### CTRL 键
在键入命令时使用 CTRL+A 可以移动光标到行首,使用 CTRL+E 可以移动光标到行末。
然而,并不是所有的命令都是通过简单的回车就可以完成的,有些需要你的进一步的指令。如果你被卡在一个命令的中间而你希望终止它时,可以使用 CTRL+C 强行终止这个命令。在大多数情况下这是安全的。但是还是要小心,中止某些命令可能会让系统处于不稳定的状态。
- Learn Version Control with Git 中文版
- 前言
- Part 1 - 基础知识
- 什么是版本控制?
- 为什么要使用版本控制系统?
- 准备工作
- 版本控制的基本工作流程
- 从一个未被纳入版本控制的项目开始
- 从一个已被纳入版本控制的项目开始
- 工作在你的项目上
- Part 2 - 分支与合并
- 分支可以改变你的生命
- 在分支上工作
- 暂时保存更改
- 切换一个本地分支
- 合并改动
- 分支的工作流程
- Part 3 - 远程仓库
- 关于远程仓库
- 连接一个远程仓库
- 查看远程数据
- 整合远程的改动
- 发布一个本地分支
- 删除分支
- Part 4 - 高级应用
- 撤销操作
- 用 diff 来检查改动
- 处理合并冲突
- Rebase 代替合并
- 子模块
- git-flow 的工作流程
- 使用 SSH 公钥验证
- Part 5 - 工具与服务
- 桌面应用程序
- 比较和整合工具
- 代码托管服务
- 更多学习资源
- 附录
- 版本控制的最佳实践
- 命令 101
- 从 Subversion 过渡到 Git
- 为什么选择 Git