如何使用cd、pwd和ls探索Linux服务器上的文件系统

来自菜鸟教程
跳转至:导航、​搜索

介绍


熟悉命令行是利用 Linux 服务器平台强大功能的第一步。 它也是您可能希望在此环境中进行的基本上所有与服务器相关的活动的必要先决条件。

虽然许多工具都存在图形替代方案,但学习命令行是一项技能,可以让您以大多数 GUI(图形用户界面)无法实现的方式高效、快速和灵活地工作。

我们都必须从某个地方开始,因此我们将在本文中介绍非常基础的内容:如何导航您的系统并找出其中的内容。

先决条件


这篇文章是非常基础的,所以它不假设太多的先验知识。 但是,您需要登录到您的 VPS 实例才能开始探索。 您可用于执行此操作的选项很大程度上取决于您在家中使用的操作系统。

当您 创建一个新的 DigitalOcean droplet 时,您将收到一个密码并提供一个 IP 地址来访问您的新服务器。 使用链接的文章了解如何连接到您的 VPS。

ssh root@your_IP

另一种选择是使用 DigitalOcean 控制面板右上角的“控制台访问”按钮。 这将直接在您的 Web 浏览器窗口中创建一个虚拟终端会话。

用 pwd 找出你在哪里


此时,您应该已登录到您的 Linux 机器。 您可能会看到如下所示的内容:

root@your_hostname:~# 

这是提示。 这是我们输入命令的地方。

但不仅如此。 您也位于服务器文件系统中的特定位置。 您将始终位于服务器文件层次结构中的一个位置或另一个位置,这会影响您键入的命令的操作方式。

这类似于在本地计算机上打开文件浏览器。 您可以单击不同的文件夹以前往文件系统中的不同位置。 如果您转到文件浏览器的编辑菜单,您可能会有一些选项适用于您所在的特定文件夹中的项目。

命令行只是同一想法的文本表示。

那么我们在文件系统中的确切位置是什么? 提示本身有一个线索。 在提示符末尾的 #$ 字符之前(这取决于您登录的用户),您将看到一个波浪号 (~)。 这代表您的“主”目录。

您的主目录是存储用户文件的地方。 ~ 字符是此目录的简写。

另一种找出您在文件系统中的位置的方法是使用名为 pwd 的命令。 这将是您的第一个命令!

在终端中输入这些字符,然后按 ENTER:

pwd

/root

/root 目录是根(管理)用户的主目录。 如果您以其他用户身份登录,您将看到如下内容:

pwd

输出

/home/your_username

对于本教程,您登录的是哪个用户都没有关系,因此任何一个输出都可以。

用 ls 环顾四周


现在您知道您当前所在的目录。 但是我们怎么知道这个目录中有什么?

我们可以使用一个名为 ls 的命令来询问我们的服务器当前目录中有哪些文件和目录。 现在在命令提示符处输入:

ls

这应该只是将您返回到命令提示符,而不会给您任何信息。 命令失败了吗? 不,它成功了,它只是没有在您当前目录中找到任何文件或文件夹。

让我们创建一些测试文件,看看当这个目录中有文件时 ls 的行为。 输入这个来创建一些文件:

touch file{1..5}

这将在我们的当前目录中创建 5 个名为 file1、file2、...、file5 的文件。

让我们重试 ls 命令,看看它会做什么:

ls

file1  file2  file3  file4  file5

精彩的。 该命令现在识别出我们的主目录中有一些文件。

大多数命令都有默认行为,当您像我们上面那样调用它时会执行这些行为。 但是,大多数命令行为也可以通过将可选参数传递给命令来增强。 你可能听到这些被称为“选项”、“参数”、“标志”或“参数”。

有时,它们会激活可通过命令获得的可选功能,而有时它们会指定应针对该命令执行的对象。

让我们从第一种情况开始。

探索 ls 选项


并非所有命令都有内置帮助选项,但我们很多都有。 大多数情况下,您可以通过在命令末尾添加 --help-h 来访问它。 我们现在可以用 ls 命令试试这个:

ls --help

Usage: ls [OPTION]... [FILE]...
List information about the FILEs (the current directory by default).
Sort entries alphabetically if none of -cftuvSUX nor --sort is specified.

Mandatory arguments to long options are mandatory for short options too.
  -a, --all                  do not ignore entries starting with .
  -A, --almost-all           do not list implied . and ..
      --author               with -l, print the author of each file
  -b, --escape               print C-style escapes for nongraphic characters
      --block-size=SIZE      scale sizes by SIZE before printing them.  E.g.,
. . .

这将为您提供有关正确使用命令的一些指导,并让您了解哪些选项可用于更改默认行为。 左侧的列为您提供了用于增强命令的字符,右侧的列描述了每个标志。

我们添加的 --help 是我们可以传递的选项的示例。

另一种了解您感兴趣的命令可用选项的方法是查看手册。 这是通过键入 man 后跟您感兴趣的命令来完成的。 现在就试试:

man ls

您可以使用箭头键滚动页面,然后键入“q”退出。

如您所见,ls 有很多选项,我们可以将它们传递给命令以更改其行为。 让我们尝试一些。

ls -l

-rw-r--r-- 1 root root 0 Feb 28 19:45 file1
-rw-r--r-- 1 root root 0 Feb 28 19:45 file2
-rw-r--r-- 1 root root 0 Feb 28 19:45 file3
-rw-r--r-- 1 root root 0 Feb 28 19:45 file4
-rw-r--r-- 1 root root 0 Feb 28 19:45 file5

这向我们展示了相同的五个文件,但它以“长”格式显示它们。 这为我们提供了有关文件的更多信息,例如所有者(第一个“root”)、组所有者(第二个“root”)、文件的大小 (0)、文件最后修改的日期以及其他一些信息信息。

让我们尝试另一种选择:

ls -a

.   .aptitude       .bashrc  file2  file4  .profile  .ssh
..  .bash_history  file1    file3  file5  .rnd      .viminfo

这向我们展示了一些我们以前没有看到的文件。 -a 标志与 --all 标志同义。 这向我们显示了当前目录中的 all 文件,包括隐藏文件。

在 Linux 系统中,默认情况下,所有以点号命名的文件都是隐藏的。 它们不是秘密的,任何人都可以找到它们,它们只是为了便于文件管理而远离。 通过传递 -a 标志,我们可以告诉 ls 也显示这些文件。

我们也可以传递多个标志,只需将它们串在一起即可:

ls -l -a

drwx------  4 root root 4096 Feb 28 19:45 .
drwxr-xr-x 23 root root 4096 May  3  2013 ..
drwx------  2 root root 4096 Feb 28 17:19 .aptitude
-rw-------  1 root root 2036 Feb 28 18:20 .bash_history
-rw-r--r--  1 root root  570 Jan 31  2010 .bashrc
-rw-r--r--  1 root root    0 Feb 28 19:45 file1
. . .

这很好用,但我们也可以像这样折叠选项标志:

ls -la

这将完全一样,并且需要更少的输入。

另一个有趣的选项是 -R 标志,它以递归方式列出文件。 由于我们在主目录中拥有的唯一目录是隐藏的,因此我们也必须传递 -a 选项:

ls -Ra

    .:
.   .aptitude      .bashrc  file2  file4  .profile  .ssh
..  .bash_history  file1    file3  file5  .rnd      .viminfo

./.aptitude:
.  ..  cache  config

./.ssh:
.  ..  authorized_keys

现在我们知道如何更改 ls 的行为方式,让我们更改 ls 操作的“对象”。

在其他目录上使用 ls


默认情况下,ls 会列出当前目录的内容。 但是,我们可以在命令末尾传递我们希望查看其内容的任何目录的名称。

例如,我们可以通过键入以下命令查看所有 Linux 系统上都可用的名为 /etc 的目录的内容:

ls /etc

acpi         fstab        magic        rc.local
adduser.conf        fstab.d      magic.mime   rc.local.orig
aliases         fuse.conf    mailcap      rcS.d
aliases.db      gai.conf     mailcap.order    reportbug.conf
alternatives        groff        mailname     resolvconf
anacrontab      group        mail.rc      resolv.conf
apm         group-       manpath.config   rmt
. . .

我们在这里看到这个目录中有很多文件。

任何以斜杠 (/) 开头的目录路径都称为“绝对”路径。 这是因为它专门从最高目录(根目录)引用目录路径,根目录由“/”字符指定。

引用目录的另一种方法是使用“相对”路径。 这将查找相对于您当前所在目录的目录。 这些目录规范不以斜杠开头。

我们当前的文件夹中没有任何非隐藏目录,所以让我们快速做一些演示。 我们还将在里面添加一些文件。 现在不要担心这些命令,它们只是用来演示一个想法,所以只需按原样输入它们:

mkdir dir{1..3}
touch dir{1..3}/test{A,B,C}

这将创建一些目录,其中包含一些文件。 我们可以使用普通的 ls 命令查看目录:

ls

dir1  dir2  dir3  file1  file2   file3  file4  file5

为了查看“dir1”目录中的内容,我们 可以 给出我们上面演示的绝对路径,方法是将我们想要查看的目录附加到当前目录值的末尾。 我们可以找到当前目录:

pwd

/root

然后将我们感兴趣的目录添加到最后:

ls /root/dir1

testA  testB  testC 

但我们不必这样做。 我们可以通过命名目录来引用当前目录中的目录,如下所示:

ls dir1

testA  testB  testC

如果我们不以斜杠开始路径规范,则操作系统会查找从当前目录开始的目录路径。

到处走


到目前为止,我们已经学习了如何确定我们在文件系统中的位置,并且我们已经学习了如何使用 ls 命令来查找有关某些目录中文件的一些信息。

但是我们如何改变我们的工作目录呢? 更改我们的工作目录将允许我们使用来自不同位置的相对路径。 通常,从包含文件的目录中对文件进行操作会更容易。

我们可以使用 cd 命令在文件层次结构中移动。 此命令代表更改目录。

在其最基本的用法中,我们只需键入:

cd

这似乎不会做任何事情。 事实上,它没有。 cd 在没有任何附加信息的情况下所做的就是更改您的主目录。 由于我们已经在我们的主目录中,因此该命令无需执行任何操作。

关于如何使用该命令的更一般的想法是这样的:

cd /path/to/directory

在这种情况下,应将 /path/to/directory 替换为您要移动到的目录位置的路径。 例如,要切换到由单个斜杠 (/) 指定的“根”目录,也就是树的顶部,我们可以键入:

cd /

注意:根目录(由单个正斜杠“/”指定)与root用户的主目录(位于“/root”)不同。 起初这可能会令人困惑,但请记住目录树的顶部称为文件系统根。

您可能已经注意到您的命令提示符已更改。

就在“#”或“$”之前,目录列表已经从波浪号(记住,看起来像“~”的符号代表用户的主目录)变成了文件系统的“根”目录。

我们可以再次使用 pwd 命令来验证我们现在是否在不同的目录中:

pwd

/

我们还可以查看新目录中的文件:

ls

bin   etc      lib         media  proc  sbin     sys  var
boot  home    lib64       mnt    root  selinux  tmp  vmlinuz
dev   initrd.img  lost+found  opt    run   srv      usr

我们已经成功地搬到了另一个地方。 现在,让我们尝试使用相对路径移动到新目录。 我们看到在这个目录中有一个叫做usr的目录。 通过键入以下内容进行更改:

cd usr

如您所见,我们也可以将相对路径与 cd 一起使用。 我们如何回到根目录? 我们可以输入我们之前使用的相同的 cd / 命令,但让我们尝试一些不同的东西。

让我们尝试使用相对路径向上移动树。 我们如何使用相对路径引用包含当前文件夹的文件夹?

我们可以使用特殊的语法来引用包含我们当前目录的目录。 包含我们当前目录的目录称为其“父”目录。 我们可以使用两个点 (...) 来引用父目录。

让我们回到一个级别:

cd ..
pwd

/

如您所见,我们回到了根目录。 我们也可以用一个点来引用我们的当前目录:

ls .

bin   etc      lib         media  proc  sbin     sys  var
boot  home    lib64       mnt    root  selinux  tmp  vmlinuz
dev   initrd.img  lost+found  opt    run   srv      usr

这在许多在此阶段可能不是很明显的情况下很有用,但您将欣赏稍后轻松引用当前目录的能力。

正如我们之前所说,“~”符号引用我们的主目录。 让我们将其用作另一个目录路径的开始,以更改为我们家中的“dir1”:

cd ~/dir1
pwd

/root/dir1

我们现在已经很容易地移动到主目录中的一个目录,使用“~”符号替换路径的第一部分。

但是如果我们在更改目录之前忘记做某事并想回到我们最近的目录怎么办? 我们可以通过键入以下内容返回到之前的目录:

cd -
pwd

/

我们回到了上一个目录。

让我们回到我们的主目录来结束。 我们可以通过使用波浪号作为切换路径来做到这一点。 但是您可能还记得,cd 的默认模式是如果我们不添加任何路径,则将我们返回到我们的主目录。 让我们尝试一下:

cd
pwd

/root

如您所见,我们再次回到了我们的主目录。

结论


您现在应该拥有探索文件系统所需的工具。 您还不知道如何调查文件,但您应该能够轻松地在系统中导航,跟踪您所在的位置,并查看您周围的文件。