65.9K
CodeProject 正在变化。 阅读更多。
Home

Effective Shell 4:移动!

starIconstarIconstarIconstarIconstarIcon

5.00/5 (1投票)

2019年3月11日

CPOL

4分钟阅读

viewsIcon

4415

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 或命令行设置(我们将在后面的章节中讨论),您也可能会在命令行上看到您的工作目录。

更改目录

最有可能的是,最熟悉的命令之一,cdchdir 函数会更改当前目录

$ 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 在文件系统中移动的基础知识至关重要。

© . All rights reserved.