任务1:Introduction
任务2:Deploy Your Linux Machine(部署 Linux 计算机)
使用以下凭证:
IP 地址:10.10.208.85
用户名:tryhackme
密码:tryhackme
任务3:Terminal Text Editors
到目前为止,在整个系列中,我们只使用命令和管道运算符 ( 和 ) 的组合在文件中存储文本。当您处理具有多行和排序的文件时,这不是一种有效的数据处理方式!
终端文本编辑器简介
您可以使用一些选项,所有这些选项都具有各种友好性和实用性。这个任务将向你介绍,但也将向你展示一个名为 (TryHackMe 有一个专门的房间!
- nano
- vim
nano
nano filename
Nano具有一些易于记忆的功能,并涵盖了您希望从文本编辑器中获得的最通用内容,包括:
- 搜索文本
- 复制和粘贴
- 跳转到行号
- 找出您所在的线路号
您可以通过按“Ctrl”键(在 Linux 上表示为 )和相应的字母来使用 nano 的这些功能。例如,要退出,我们需要按“Ctrl”和“X”退出 Nano。
VIM
VIM 是一个更高级的文本编辑器。虽然您不需要了解所有高级功能,但提及它对于增强您的 Linux 技能会很有帮助。
VIM 的一些好处,尽管需要更长的时间才能熟悉,包括:
- 可定制 - 您可以修改键盘快捷键以供您选择
- 语法高亮显示 - 如果您正在编写或维护代码,这将非常有用,使其成为软件开发人员的热门选择
- VIM 适用于可能未安装 nano 的所有终端
- 有很多资源,例如备忘单、教程和可供您使用的种类。
这里后面再去,先把这个room完成。
任务4:General/Useful Utilities(常规/有用的实用程序)
Downloading Files (Wget)(下载文件 (wget))
计算的一个非常基本的特性是传输文件的能力。例如,您可能想要下载程序、脚本甚至图片。值得庆幸的是,我们可以通过多种方式检索这些文件。
我们将介绍 .此命令允许我们通过 HTTP 从 Web 下载文件 -- 就像您在浏览器中访问文件一样。我们只需要提供我们想要下载的资源的地址。例如,如果我想将一个名为“myfile.txt”的文件下载到我的计算机上,假设我知道它的 Web 地址 -- 它将如下所示:
wget https://assets.tryhackme.com/additional/linux-fundamentals/part3/myfile.txt
Transferring Files From Your Host - SCP (SSH)
安全复制 (SCP) 就是这样 -- 一种安全复制文件的方法。与常规的 cp 命令不同,此命令允许您使用 SSH 协议在两台计算机之间传输文件,以提供身份验证和加密。
使用 SOURCE 和 DESTINATION 模型,SCP 允许您:
- 将文件和目录从您当前的系统复制到远程系统
- 从远程系统复制文件和目录到当前系统
前提是我们知道您当前系统上的用户和远程系统上的用户的用户名和密码。例如,让我们将示例文件从我们的机器复制到远程机器上,我已将其整齐地排列在下表中:
变量 | 价值 |
远程系统的 IP 地址 | 192.168.1.30 |
远程系统上的用户 | ubuntu |
本地系统上的文件名称 | important.txt |
我们希望在远程系统上存储文件的名称 | transferred.txt |
有了这些信息,让我们来编写我们的命令(记住 SCP 的格式只是 SOURCE 和 DESTINATION)
scp important.txt ubuntu@192.168.1.30:/home/ubuntu/transferred.txt
现在让我们反转它,并布局用于从我们未登录的远程计算机复制文件的语法
变量 | 价值 |
远程系统的 IP 地址 | 192.168.1.30 |
远程系统上的用户 | ubuntu |
远程系统上的文件名称 | documents.txt |
我们希望在系统上存储文件的名称 | notes.txt |
scp ubuntu@192.168.1.30:/home/ubuntu/documents.txt notes.txt
Serving Files From Your Host - WEB
Ubuntu 计算机预打包了 python3。Python 提供了一个名为 “HTTPServer” 的轻量级且易于使用的模块。此模块将您的计算机变成一个快速简便的 Web 服务器,您可以使用它来提供自己的文件,然后可以使用命令(如 和 )由另一台计算机下载它们。
curl
wget
Python3 的 “HTTPServer” 将在您运行命令的目录中提供文件,但这可以通过提供手册页中的选项来更改。简单地说,我们需要做的就是在终端中运行以启动模块!在下面的代码段中,我们从一个名为 “webserver” 的目录提供数据,该目录有一个名为 “file” 的目录。
现在,让我们使用 MACHINE_IP 地址和文件名下载文件。请记住,由于 python3 服务器运行的是端口 8000,因此您需要在 wget 命令中指定此端口。例如:wget
请注意,您需要打开一个要使用的新终端,并保留已在其中启动 Python3 Web 服务器的终端。这是因为,一旦您启动 Python3 Web 服务器,它将在该终端中运行,直到您取消它
让我们看一下下面的代码片段作为示例:

请记住,您需要在另一个终端中运行 wget 命令(同时保持运行 Python3 服务器的终端处于活动状态)。TryHackMe AttackBox 上的一个示例如下:
此模块的一个缺陷是您无法索引,因此您必须知道要使用的文件的确切名称和位置。这就是我更喜欢使用 Updog 的原因。什么是 Updog(GitHub - sc0tfree/updog: Updog is a replacement for Python's SimpleHTTPServer. It allows uploading and downloading via HTTP/S, can set ad hoc SSL certificates and use http basic auth.)?更高级但更轻量级的 Web 服务器。但现在,让我们坚持使用 Python 的 “HTTP Server”。
具体问题,以及操作
任务5:Processes 101(进程101)
进程是计算机上运行的程序。它们由内核管理,其中每个进程都有一个与之关联的 ID,也称为其 PID。PID 将按流程开始的顺序递增。即第 60 个进程的 PID 为 60。
Viewing Processes(查看进程)
我们可以使用友好的命令提供正在运行的进程列表作为用户的会话和一些其他信息,例如其状态代码、运行它的会话、它使用的 CPU 的使用时间以及正在执行的实际程序或命令的名称:ps
要查看其他用户运行的进程和不从会话运行的进程(即系统进程),我们需要为命令提供 aux,如下所示:ps aux
另一个非常有用的命令是 top 命令;top 为您提供有关系统上运行的进程的实时统计信息,而不是一次性视图。这些统计信息将每 10 秒刷新一次,但当您使用箭头键浏览各个行时,这些统计信息也会刷新。另一个深入了解您的系统的好方法是通过命令
top
管理进程
您可以发送终止进程的信号;有多种类型的信号与 kernel 处理进程的 “干净” 程度有关。要终止命令,我们可以使用适当命名的命令和我们希望终止的关联 PID。即,要终止 PID 1337,我们将使用
kill 进程号
比如终止pid为1227
kill 1227
- SIGTERM - 杀死进程,但允许它事先执行一些清理任务
- SIGKILL - 终止进程 - 事后不做任何清理
- SIGSTOP - 停止/暂停进程
流程如何开始?
ID 为 0 的进程是在系统引导时启动的进程。此进程是系统在 Ubuntu 上的 init,例如 systemd,它用于提供一种管理用户进程的方法,位于操作系统和用户之间。
例如,一旦系统启动并初始化,systemd 是最早启动的进程之一。我们想要启动的任何程序或软件都将作为所谓的 systemd 子进程启动。这意味着它由 systemd 控制,但将作为自己的进程运行(尽管共享 systemd 的资源)以方便我们识别等。
在引导时启动进程/服务
某些应用程序可以在我们拥有的系统启动时启动。例如,Web 服务器、数据库服务器或文件传输服务器。该软件通常很关键,并且通常由管理员在系统启动期间指示启动。
在此示例中,我们将告诉 apache Web 服务器手动启动 apache,然后告诉系统在启动时启动 apache2。
输入 -- 此命令允许我们与 systemd 进程/守护进程进行交互。继续我们的示例,systemctl 是一个易于使用的命令,它采用以下格式:
systemctl [option] [service]
例如,要告诉 apache 启动,我们将使用 .看起来很简单,对吧?与我们想停止 apache 相同,我们只需将 替换为 stop(而不是像我们提供的那样 start)
systemctl start apache2
[option]
我们可以用 :systemctl
- start
- stop
- enable
- disable
Linux 中的后台和前台简介
进程可以在两种状态下运行:在后台和在前台。例如,您在终端中运行的命令(例如 “echo”)或类似内容将在终端的前台运行,因为它是唯一未被告知在后台运行的命令。“Echo” 就是一个很好的例子,因为 echo 的输出会在前台返回给您,但在后台不会 - 以下面的屏幕截图为例。
在这里,我们正在运行 ,我们希望输出会像开始时一样返回给我们。但是在将运算符添加到命令后 ,我们只得到了 echo 进程的 ID,而不是实际输出 —— 因为它在后台运行。echo "Hi THM"
&
这对于复制文件等命令非常有用,因为这意味着我们可以在后台运行命令并继续执行我们希望执行的任何进一步命令(无需等待文件复制先完成)
我们可以在执行像脚本这样的事情时做同样的事情--而不是依赖&运算符--我们可以在键盘上使用 来后台处理一个进程。这也是 “暂停” 脚本或命令执行的有效方法,如下例所示:Ctrl + Z
此脚本将不断重复 “This will keep on looping until I stop!”,直到我停止或暂停该进程。通过使用 (如 T^Z 所示)。现在我们的终端不再充满消息 —— 直到我们将其前台化,我们将在下面讨论。
前台化进程
现在我们有一个进程在后台运行,例如,我们的脚本 “background.sh” 可以通过使用命令来确认,我们可以后退并将该进程带回前台进行交互。
用我们的 or 运算符对进程进行后台处理后,我们可以使用它来将其重新聚焦,如下所示,我们可以看到该命令正在用于将后台进程重新用于终端,脚本的输出现在返回给我们。Ctrl + Z
&
fg
fg
任务6:Maintaining Your System: Automation(定时任务)
用户可能希望将某个操作或任务安排在系统引导后进行。例如,运行命令、备份文件或启动您最喜欢的程序,例如 Spotify 或 Google Chrome。
我们将讨论这个过程,但更具体地说,我们如何通过使用 来与它进行交互。Crontab 是在启动期间启动的进程之一,它负责促进和管理 cron 作业。
crontab 只是一个特殊的文件,其格式可被进程识别,以逐步执行每一行。Crontabs 需要 6 个特定值:
价值 | 描述 |
MIN | 执行时间 |
HOUR | 执行时间 |
DOM | 在每月的哪一天执行 |
MON | 在一年中的哪个月份执行 |
DOW | 在一周中的哪一天执行 |
CMD | 将要执行的实际命令。 |
让我们使用备份文件的示例。您可能希望每 12 小时备份一次 “cmnatic” 的 “Documents”。我们将使用以下格式:
0 */12 * * * cp -R /home/cmnatic/Documents /var/backups/
ontabs 的一个有趣功能是它们还支持通配符或星号 ()。如果我们不想为该特定字段提供值,即我们不在乎它执行的是哪月、哪一天或哪一年 —— 只关心它每 12 小时执行一次,我们只只需放置一个星号。
一开始这可能会令人困惑,这就是为什么有一些很棒的资源,例如在线“Crontab 生成器”,它允许您使用友好的应用程序为您生成格式!以及网站“Cron Guru”!
可以使用 编辑 crontabs,您可以在其中选择编辑器(如 Nano)来编辑 crontab。
crontab -e
任务7:Maintaining Your System: Package Management(维护系统:软件包管理)
介绍软件包和软件存储库
当开发人员希望向社区提交软件时,他们会将其提交到 “apt” 存储库。如果获得批准,他们的程序和工具将被发布到野外。Linux 的两个最值得称赞的功能在这里得到了体现:用户可访问性和开源工具的优点。
在 Ubuntu 20.04 Linux 计算机上使用命令时,这些文件将用作网关/注册表。 ls
虽然操作系统供应商将维护他们自己的存储库,但您也可以将社区存储库添加到您的列表中!这允许您扩展操作系统的功能。可以使用命令或列出其他提供商来添加其他存储库!例如,一些供应商将拥有更靠近其地理位置的存储库。add-apt-repository
管理您的仓库 (添加和删除)
通常我们使用 apt 命令将软件安装到我们的 Ubuntu 系统上。该命令是软件包管理软件的一部分,也名为 apt。Apt 包含一整套工具,允许我们管理软件的包和源代码,并同时安装或删除软件。apt
添加仓库的一种方法是使用上面所示的命令,但我们将逐步手动添加和删除仓库。虽然您可以通过使用软件包安装程序来安装软件,例如 ,但 apt 的好处意味着,每当我们更新系统时 -- 包含我们添加的软件的存储库也会被检查是否有更新。 add-apt-repository
dpkg
在此示例中,我们将文本编辑器 Sublime Text 作为存储库添加到我们的 Ubuntu 计算机中,因为它不是默认 Ubuntu 存储库的一部分。添加软件时,我们下载的内容的完整性通过使用所谓的 GPG (Gnu Privacy Guard) 密钥来保证。这些密钥本质上是开发人员的安全检查,说“这是我们的软件”。如果密钥与您的系统信任的密钥和开发人员使用的密钥不匹配,则不会下载该软件。
因此,首先,我们需要为 Sublime Text 3 的开发人员添加 GPG 密钥。(请注意,TryHackMe 实例无法访问 Internet,因此我们不希望您将其添加到您部署的计算机中,因为它会失败。
1. 让我们下载 GPG 密钥并使用 apt-key 来信任它:wget -qO - https://download.sublimetext.com/sublimehq-pub.gpg | sudo apt-key add -
2. 现在我们已经将此密钥添加到我们的受信任列表中,我们现在可以将 Sublime Text 3 的存储库添加到我们的 apt 源列表中。一个好的做法是,为我们添加的每个不同的社区/第三方存储库提供一个单独的文件。
2.1. 让我们在 /etc/apt/sources.list.d 中创建一个名为 sublime-text.list 的文件,并输入仓库信息,如下所示:
2.2. 现在使用Nano或您选择的文本编辑器将Sublime Text 3仓库添加并保存到这个新创建的文件中:
2.3. 添加此条目后,我们需要更新 apt 以识别此新条目 -- 这是使用命令apt update
2.4. 成功更新后,我们现在就可以继续安装我们信任并添加到 apt 的软件了apt install sublime-text
删除包就像倒车一样简单。此过程通过使用命令或手动删除我们之前添加到的文件来完成。删除后,我们就可以只使用 i.e.add-apt-repository --remove ppa:PPA_Name/ppa
apt remove [software-name-here]
apt remove sublime-text
任务8:Maintaining Your System: Logs(维护您的系统:日志)
我们在 Linux 基础知识 第 1 部分 中简要介绍了日志文件以及它们可以在哪里找到。但是,让我们快速回顾一下。这些文件和文件夹位于 /var/log 目录中,包含系统上运行的应用程序和服务的日志记录信息。操作系统 (OS) 已经非常擅长在称为 “轮换” 的过程中自动管理这些日志。
我突出显示了 Ubuntu 计算机上运行的三个服务的一些日志:
- 一个 Apache2 Web 服务器
- fail2ban 服务的日志,例如,用于监控尝试的暴力破解
- 用作防火墙的 UFW 服务
这些服务和日志是监视系统运行状况并对其进行保护的好方法。不仅如此,Web 服务器等服务的日志还包含有关每个请求的信息 - 允许开发人员或管理员诊断性能问题或调查入侵者的活动。例如,下面有两种类型的日志文件值得关注:
- 访问日志access log
- 错误日志error log
任务9:Conclusions & Summaries(结论和总结)
欢迎来到 Linux 基础知识模块的结尾。随着时间的推移,您对 Linux 的熟悉程度会随着您与 Linux 的交互而提高。Linux 有可能相对轻松地完成非常强大的操作(希望您已经在本模块中发现了这一点)
回顾一下,这个房间向您介绍了以下主题:
- 使用终端文本编辑器
- 常规实用程序,例如使用 python Web 服务器下载和提供内容
- 流程概览
- 通过使用crontabs、包管理和查看日志来维护和自动化您的系统
在一些其他专门用于 Linux 工具或实用程序的 TryHackMe 教室中继续学习:
- Bash 脚本 - TryHackMe | Cyber Security Training
- 正则表达式 - https://tryhackme.com/room/catregex