在日常工作中,无论是开发项目还是执行运维任务,经常需要在命令行界面中操作。尽管可能已经习惯了使用各种命令行程序,但有时仍然会切换到更直观的图形界面来处理文件和目录。本文将介绍如何在命令行中直接执行文件和文件夹操作,以提高工作效率。
首先,需要熟悉如何在命令行中定位当前工作目录。最常用的命令是pwd
(print working directory),它会显示当前的绝对路径。此外,还可以使用环境变量$PWD
来获取当前路径:
$ pwd
/Users/dave/repos/github/dwmkerr/effective-shell
$ echo $PWD
/Users/dave/repos/github/dwmkerr/effective-shell
在某些shell或命令行设置中,当前工作目录可能会直接显示在命令行提示符中。
接下来,学习如何切换目录。cd
(change directory)命令是最熟悉的命令之一,它用于改变当前目录:
$ pwd
/Users/dave/repos/github/dwmkerr/effective-shell
$ cd
$ pwd
/users/dave
$ cd -
~/repos/github/dwmkerr/effective-shell
$ pwd
/Users/dave/repos/github/dwmkerr/effective-shell
$ cd ~
$ pwd
/users/dave
这里看到,不带参数执行cd
命令会将带到用户的home
目录,这个目录总是可以通过环境变量$HOME
访问。执行cd -
会切换回上一个目录,这在需要快速跳转到某个位置然后返回时非常有用。
可以使用~
作为家目录的别名,快速移动到个人文件夹,例如:cd ~/Downloads
。
当进入一个目录后,经常需要查看目录内容。这时,ls
(list directory contents)命令就派上用场了:
$ pwd
/Users/dave/repos/github/dwmkerr/effective-shell
$ ls
1-navigating-the-command-line LICENSE
2-clipboard-gymnastics README.md
3-getting-help sed.1
4-moving-around
默认情况下,ls
命令会列出文件和目录。可以使用-l
(long format)标志来显示更多信息:
$ ls -l
total 48
drwxr-xr-x 6 dave staff 192 Mar 5 16:01 1-navigating-the-command-line
drwxr-xr-x 5 dave staff 160 Oct 10 2017 2-clipboard-gymnastics
drwxr-xr-x 4 dave staff 128 Dec 19 2017 3-getting-help
drwxr-xr-x 3 dave staff 96 Mar 7 15:39 4-moving-around
-rw-r--r-- 1 dave staff 1066 Jun 10 2017 LICENSE
-rw-r--r-- 1 dave staff 561 Mar 7 15:30 README.md
-rw-r--r-- 1 dave staff 15707 Mar 5 16:01 sed.1
现在可以看到权限、链接计数(这个在不同平台上可能不太有用)、所有者、组、大小和修改日期(以及名称)。
可以使用更多的标志,如-h
(human readable)和-S
(sort by size),使大小更易于阅读,并按大小排序:
$ ls -lhS
total 48
-rw-r--r-- 1 dave staff 15K Mar 5 16:01 sed.1
-rw-r--r-- 1 dave staff 1.0K Jun 10 2017 LICENSE
-rw-r--r-- 1 dave staff 561B Mar 7 15:30 README.md
drwxr-xr-x 6 dave staff 192B Mar 5 16:01 1-navigating-the-command-line
drwxr-xr-x 5 dave staff 160B Oct 10 2017 2-clipboard-gymnastics
drwxr-xr-x 4 dave staff 128B Dec 19 2017 3-getting-help
drwxr-xr-x 3 dave staff 96B Mar 7 15:39 4-moving-around
ls
命令有很多选项。在“获取帮助”章节中,将学习如何获取更多关于命令的信息。
有时,可能需要移动到多个目录,然后返回到起始位置。这在编写脚本时特别有用。可以使用pushd
(push onto directory stack)和popd
(pop from directory stack)命令将目录添加到或从堆栈中移除:
$ pwd
/Users/dave/repos/github/dwmkerr/effective-shell
# 现在正在写文章,但想检查一下下载文件夹,然后马上回来...
# 移动到下载文件夹...
$ cd ~/Downloads
$ ls
aws-nuke-v2.8.0-darwin-amd64
# 好的,下载的工具已经到了,让使用它...
cd aws-nuke-v2.8.0-darwin-amd64
./aws-nuke
# 现在想回到文章...
$ popd
'~/Downloads' '~/repos/github/dwmkerr/effective-shell'
'~/Downloads'
$ popd
'~/repos/github/dwmkerr/effective-shell'
在这种情况下,使用cd -
是不够的——它只会将从aws-nuke
文件夹切换到Downloads
,然后再切换回来。但是通过使用目录栈,可以保存当前位置,移动,然后“pop”回起始位置。
在使用像cd
这样的命令时,按下tab
键通常会显示一个自动补全菜单:
$ cd ~/repos/ # 现在按 'tab'...
github/ gitlab/ local/ scratch/
再次按下tab
键将循环浏览选项,shift-tab
将反向循环。按回车键将选择一个选项,按Esc
(或Ctrl-C
)将取消。
一些shell,如zsh
,支持更高级的自动补全。例如,可以自动补全部分指定的目录名:
% cd ~/r/g/d/e # 现在按 tab...
% cd ~/repos/github/dwmkerr/effective-
effective-container-engineering/ effective-shell/