【THM】Linux Fundamentals Part1(Linux基础知识1)-学习

发布时间 2023-04-03 18:23:30作者: Hekeats

本文相关的TryHackMe实验房间链接:https://tryhackme.com/room/linuxfundamentalspart1

本文相关内容:踏上学习 Linux 基础知识的旅程,学习在交互式终端上运行一些最基本的Linux命令。

img

简介

欢迎来到“Linux 基础”系列的第一部分。你很可能使用的是 Windows 或 Mac 机器,这两者在视觉设计和操作方式上都有很多不同,就像 Windows、iOS 和 MacOS 一样,Linux只是另一种操作系统,也是世界上最流行的操作系统之一,Linux系统正在为智能汽车、安卓设备、超级计算机、家用电器、企业服务器等提供动力。

本文将为你提供以下Linux基础内容:

  • 在交互式Linux机器中运行你的第一个命令
  • 介绍一些用于与文件系统交互的基本Linux命令
  • 向你介绍用户和组如何在Linux上工作(以及这对渗透测试人员意味着什么)

Linux的一些背景知识

Linux在哪里使用?

相比于Windows系统,Linux操作系统要轻量级得多,你会惊讶地发现,你每天都有机会以某种形式使用Linux系统,Linux能够支持以下功能:

  • 用于搭建用户访问的网站

  • 用于车载娱乐信息系统和相关控制面板

  • 销售点(PoS-Point of Sale)系统,如商店的收银台

  • 关键基础设施,如交通灯控制器或工业传感器

Linux的特色

“Linux”这个名字实际上是基于UNIX(另一种操作系统)的多个操作系统的总称,由于UNIX是开源的,所以Linux的变体也各种各样——操作系统的不同用途催生出了不同的Linux变体。

例如,Ubuntu和Debian是比较常见的Linux发行版,Linux的可扩展非常强,也就是说,你可以把Ubuntu作为服务器(比如网站和web应用程序)运行,也可以把它作为一个成熟的个人操作系统运行。在本文中,我们将使用Ubuntu系统进行练习。

tips:Ubuntu服务器可以在只有512MB内存的系统上运行。

tips:类似于不同版本的Windows(7、8和10),Linux也有许多不同的版本以及发行版。

答题

image

运行简单的Linux命令

正如我们之前所讨论的那样,使用 Ubuntu 等Linux操作系统的关键原因是由于Linux操作系统的轻量级,但是,这并非意味着Linux并非没有缺点,例如,如果我们没有为Linux系统安装GUI,那么在Linux操作系统中通常就没有 GUI(图形用户界面,能提供与机器交互的桌面环境)可供我们使用。

如果我们想要与没有GUI的Linux操作系统发生交互,我们就必须通过“终端”来完成(即使系统安装了GUI,还是免不了依赖于“终端”来和Linux系统进行交互)。

“终端”是纯粹基于文本的,Linux操作系统的“终端”(Terminal)界面类似于下图:

image

我们可以通过终端命令来实现一些基本的操作,如导航到文件、输出文件内容以及创建文件等,这些命令的含义有时候是不言自明的。

让我们先了解以下两个基本命令:

  • echo:输出我们所提供的任何文本内容;
  • whoami:显示我们当前登录的用户名。

以下是相关命令的示例:

image

答题

使用和本文相关的实验房间所提供的Linux虚拟机进行操作:

image

使用Linux命令与文件系统交互

我们只介绍了“ echo”和“ whoami”命令,这还不能帮助我们实现导航到文件系统、读取文件内容以及写入内容到文件等操作;所以我们还需要学习更多的命令。

与文件系统交互

如前所述,能够在不依赖桌面环境的情况下浏览所登录的Linux机器是非常重要的,我们可以使用以下命令:

  • ls:该命令的全名是“listing”;
  • cd:该命令的全名是“change directory”;
  • cat:该命令的全名是“concatenate”;
  • pwd:该命令的全名是“print working directory”。

tips:上述四个命令是不言自明的,我们可以从上面四个命令的全名中猜测出各个命令的用途。

列出当前目录中的文件(ls)

在我们查找任何文件或文件夹的内容之前,我们需要知道Linux机器的当前目录下存在什么,我们可以使用ls命令(ls是listing的缩写)来列出当前目录中的文件。

image

在上面的截图中,我们可以看到当前有以下目录/文件夹:

  • Important Files
  • My Documents
  • Notes
  • Pictures

根据以上文件夹的名称,你可能会猜测到这些文件夹将包含什么内容。

tips:你可以直接列出某个目录(文件夹)下的内容,而无需事先导航到对应目录,如使用ls Pictures命令将直接列出Pictures目录下的内容。

更改当前目录(cd)

现在我们知道当前目录下存在哪些文件夹,我们可以使用cd命令(change directory的简称)来切换到对应目录中;例如,如果我们想打开“Pictures”目录,就可以执行cd Pictures命令来切换目录,然后再使用ls命令——即可列出“Pictures”目录下的内容。

image

如上图所示,在Pictures目录下有四个jpg图像文件。

查看文件内容(cat)

当我们知道文件的存在之后,我们还可能想要查看文件的具体内容,此时我们可以使用cat命令,该命令可以简单地查看文本文件(或其他文件)的内容。

cat”是concatating的缩写,该命令可用于输出文件的具体内容(不仅仅是文本文件)。

在下面的截图中,我们可以看到如何使用lscat来查看“Documents”目录下的文件具体内容:

image

让我们来分析一下上图内容:

  1. 我们首先使用了ls命令,这让我们知道这台机器的“Documents”文件夹中有哪些文件可用,如上图中的“todo.txt”文件;
  2. 然后,我们使用cat todo.txt命令来输出这个“todo.txt”文件的内容,随后显示的内容为“Here's something important for me to do later!”

tips:我们也可以使用cat /home/ubuntu/Documents/todo.txt命令直接输出目标文本文件的内容。

用户名、密码、配置设置等敏感信息有时候也可能会存储在文件中,因此,我们可以尝试使用cat命令来查看一些可能包含敏感信息的文件的具体内容。

查找当前工作目录的完整路径(pwd)

在你使用终端浏览Linux机器的过程中,你当前的工作目录名称可以通过终端提示符得知;但是我们很容易忘记我们当前在文件系统中的确切位置(即当前工作目录的完整路径),这时我们就可以使用pwd命令来进行查看,pwd表示打印工作目录的完整路径(print working directory)。

假设我们目前在“Documents”文件夹中——但是该文件夹在Linux机器文件系统的哪个具体位置呢?

我们可以使用pwd命令进行查看,如下图所示:

image

让我们来分析一下上图内容:

  1. 根据当前的终端提示符,我们已经知道我们在“Documents”目录中,假设我们不知道“Documents”在系统中的具体位置。
  2. 我们可以使用pwd(打印工作目录)命令找到这个“Documents”文件夹的完整路径。
  3. 在输入pwd命令之后,Linux会告诉我们这个“Documents”目录存储在当前机器上的“/home/ubuntu/Documents”路径。
  4. 现在,如果我们发现自己在其他目录中,我们就可以使用cd /home/ubuntu/Documents将当前工作目录重新更改为“Documents”目录。

答题

使用和本文相关的实验房间所提供的Linux虚拟机进行操作:

image

查找文件

Linux的一个可取之处是使用它可能会帮助我们提高工作效率,话虽如此,你的效率当然取决于你对Linux命令的熟悉程度;随着时间的推移,当你习惯与操作系统(如Ubuntu)进行交互时,那些常用的Linux命令将开始变成你的肌肉记忆。

在Linux终端界面中,我们可以使用一组命令来快速搜索用户(在整个系统中)可以访问的文件,而不只是一直使用cdls来查找文件位置。

使用“find”命令

find命令既可以非常简单地使用,也可以和其他参数或命令组合使用,这取决于你具体想要做什么。

假设我们可以看到如下的一个可用目录列表:

image

  1. Desktop
  2. Documents
  3. Pictures
  4. folder1

一个目录可以包含更多的目录或文件,当我们为了寻找特定的文件而不得不查看每一个目录时,这就变得令人头疼了,所以我们可以使用find命令来简化上述过程。

假设我们已经知道我们正在寻找的文件的名称-但我们不知道它的确切位置,比如,我们想找到"password.txt"文件。

如果我们已经知道文件名,我们就可以简单地使用find -name password .txt命令,这将在当前目录下的每个文件夹中查找指定的文件,如下所示:

image

如上图所示,find命令已经设法找到目标文件——相关路径是folder1/passwords.txt;但是,如果我们不知道文件的具体名称或者想要搜索每个具有相同扩展名(如“.txt”)的文件,我们应该怎么做?

我们可以简单地使用通配符(*)来搜索任何以“.txt”(或者其他扩展名)结尾的文件和目录。

假设我们希望找到当前目录中的每个.txt文件,我们就可以构造find -name *.txt命令,这样我们就能够找到当前目录下的每个.txt文件以及它们的具体位置:

image

如上图所示,我们已经成功找到了:

  1. 位于./folder1目录下的passwords.txt文件;
  2. 位于./Document目录下的todo.txt文件。

使用“grep”命令

另一个值得学习的实用程序是grep命令的使用,grep命令能够允许我们在文件的内容中搜索我们正在寻找的特定值。

以web服务器的访问日志为例,假设某个web服务器的access.log有244条日志记录。

image

在此处,使用像cat这样的命令并不能很好地解决内容查找问题,例如,如果我们想搜索这个日志文件,以查看某个用户/IP地址访问了哪些内容,考虑到我们想要找到一个特定的值,所以用cat命令直接查看这个包含244个条目的日志文件内容并不是那么有效。

我们可以尝试使用grep来搜索一个文件的全部内容,以找到我们想要查找的特定值;以上述的访问日志文件为例,假设我们希望找到IP地址“81.143.211.90”访问过的所有内容(注意,这是虚构的),我们可以如下操作:使用grep "81.143.211.90" access.log命令。

image

如上图所示,我们已经使用grep命令搜索了access.log文件,然后终端界面向我们显示了一些条目,这些条目都是在access.log日志文件中与目标IP相关的内容。

答题

使用和本文相关的实验房间所提供的Linux虚拟机进行操作:

grep "THM" access.log

image

Shell操作符介绍

学习Linux操作符能够加强你对Linux命令的了解,有一些重要的操作符值得我们注意。

本小节将简单介绍以下几个基础操作符:

  • &:此操作符允许你在终端的后台运行命令。
  • &&:此操作符允许你在终端的一行中组合多个命令。
  • >:这个操作符是一个重定向器——这意味着我们可以从命令中获取输出(例如使用cat输出一个文件)并将其定向到其他地方,当我们将输出重定向到一个有内容的文本文件时,原文件的文本内容会被自动覆盖。
  • >>:此操作符执行与>操作符相同的功能,但最终效果是附加输出内容到原文件内容的结尾而不是直接替换(这意味着不会覆盖任何内容)。

接下来,让我们简单地介绍一下以上四种操作符。

操作符 "&"

这个操作符允许我们在后台执行命令。

假设我们现在想复制一个大文件,这将花费很长时间,并且在复制文件期间我们无法做任何其他事情;因此,我们可以选择使用"&"操作符将命令后台化,该操作符的作用是允许我们执行一个命令并将其放置在后台,而当命令在后台执行时,我们就可以继续利用终端来做其他事情。

操作符"&&"

我们可以使用"&&"操作符来组合我们要执行的命令列表,并且使用该操作符组合的每个有效命令都会得到执行,例如command1 && command2,但是要注意的一点是:只有在command1命令执行成功时,command2命令才会随后得到执行。

操作符 ">"

这个操作符就是所谓的重定向器。使用该操作符时,我们可以从命令中获取输出内容,并能将该输出内容发送到其他地方。

一个很好的例子是使用">"操作符重定向echo命令的输出,假设我们想要创建一个名为,并且要求它的内容为“hey”,我们就可以使用以下命令:echo hey > welcome

image

tips:如果上图例子中的“welcome”文件本身就有内容,那么使用上述之后,“welcome”文件的原内容将被“hey”所覆盖。

操作符 ">>"

这个操作符其实也是一个输出重定向器,就像我们前面所讨论的操作符(">")一样;然而, ">>"操作符的不同之处在于:它不会覆盖原文件中的任何内容,而是会将输出内容附加到原文件内容的最后。

在前面的例子中,我们有一个包含“hey”内容的文件“welcome”,如果我们使用echo命令组合 ">"操作符向文件中添加“hello”,那么“welcome”文件的内容将只有“hello”而没有“hey”(因为使用">"操作符会覆盖原文件的内容)。

当我们使用 ">>"操作符时,重定向的输出内容将附加到原文件内容的末尾,而不会直接替换(覆盖)原文件的内容:echo hello >> welcome

image

答题

阅读本小节的内容,并且使用和本文相关的实验房间所提供的Linux虚拟机进行操作。

image

小结

本文所介绍的内容是你在与 Linux 机器交互时将要使用的最基本功能,只要你经常使用这些Linux命令,你将能够很快熟悉这些Linux基础内容。

现在快速回顾一下,本文简单介绍了以下内容:

  • 了解关于Linux的一些简单背景知识。
  • 与Linux机器进行简单交互。
  • 运行一些最基本的Linux命令。
  • 介绍如何简单地与Linux中的文件系统进行交互,使用findgrep等命令来更有效地查找目标文件。
  • 通过了解一些 shell 操作符来增强你的命令使用基础。