Effective Shell 4:移动!
Effective Shell 4:移动
这是我的 Effective Shell 系列的第四部分,该系列包含一些实用示例,展示了如何在 shell 或命令行中更有效地完成日常任务
在本文中,我们将探讨 shell 中导航的关键要素。
熟悉四处移动
您可能已经花了很多时间在 shell 中,运行各种命令行程序或使用用于开发项目或运营任务的工具。但您可能仍然会切换回更直观的范式来处理文件、目录和资源。
能够直接从 shell 执行日常文件和文件夹操作任务可以真正加快您的工作流程。 让我们看看一些常见的任务,看看我们如何在 shell 中使用它们。 在此过程中,我们还将介绍一些最常用的用于处理文件系统的工具和命令。
我在哪里?
要熟悉的第一条命令是 pwd
(“打印工作目录”)。此命令将回显当前绝对路径。您也可以使用 $PWD
环境变量
$ pwd
/Users/dave/repos/github/dwmkerr/effective-shell
$ echo $PWD
/Users/dave/repos/github/dwmkerr/effective-shell
根据您的 shell 或命令行设置(我们将在后面的章节中讨论),您也可能会在命令行上看到您的工作目录。
更改目录
最有可能的是,最熟悉的命令之一,cd
或 chdir
函数会更改当前目录
$ 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
等命令。
通常,您将在更改目录时指定一个路径。这可以是一个完全限定的路径,也可以是一个相对路径
$ cd /dev
$ cd ~/repos
$ cd ./github
您可以使用特殊链接 ..
,它是一个指向父目录的文件夹来“向上”移动
$ pwd
/Users/dave/repos/github/dwmkerr/effective-shell
$ cd ../../
$ pwd
/Users/dave/repos/github
浏览目录
进入目录后,我们通常希望查看其内容。这里的 ls
(“列出目录内容”)命令很有用
$ 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
(“长格式”)标志显示更多信息
$ 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
(“人类可读”)和 -s
(“按大小排序”)
$ 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
(“推入目录堆栈”)和 popd
(“从目录堆栈弹出”)命令从堆栈中添加或删除目录
$ pwd
/Users/dave/repos/github/dwmkerr/effective-shell
# OK - I'm writing my article at the moment, but want to check my downloads, and come back shortly...
# Move to the downloads folder...
$ ls
aws-nuke-v2.8.0-darwin-amd64
# OK cool - the tool I was downloading has arrived, let's use it...
cd aws-nuke-v2.8.0-darwin-amd64
./aws-nuke
# Now I want to go back to my article...
$ popd
~/Downloads ~/repos/github/dwmkerr/effective-shell
~/Downloads
$ popd
~/repos/github/dwmkerr/effective-shell
在这种情况下,使用 cd -
是不够的 — 这只会将我们从 aws-nuke
文件夹切换到 Downloads
,然后又切换回去。但是通过使用目录堆栈,我们可以保存我们所在的位置,移动,然后“弹出”到我们开始的地方。
自动补全
在使用 cd
等命令时按 tab
通常会显示一个自动补全菜单
$ cd ~/repos/ # press 'tab' now...
github/ gitlab/ local/ scratch/
再次按 Tab 键将在选项之间循环,而 shift-tab 将向后循环。 Enter 将选择一个选项,escape(或 Ctrl-C)将取消。
某些 shell(例如 zsh
)支持更高级的自动补全。例如,我们可以自动补全以填充部分指定的目录名称
% cd ~/r/g/d/e # press tab now...
% cd ~/repos/github/dwmkerr/effective-
effective-container-engineering/ effective-shell/
自动补全通常非常特定于 shell。我们将在后面的章节中更深入地研究可用的不同 shell。但总的来说,如果您不确定,按 Tab 键通常会显示一组合理的选项。
就是这样!
这是一个小章节,但很重要。稍后,当我们开始通过 shell 执行更多文件和系统操作时,移动和复制文件等等,我们将在此基础上构建。但首先了解如何使用 shell 在文件系统中移动的基础知识至关重要。