Linux基础知识
Linux的背景知识
Linux 在哪里使用?
可以公平地说,Linux 比 Windows 等操作系统 (OS) 更令人生畏。两种变体都有自己的优点和缺点。例如,Linux 轻量级得多,您会惊讶地发现您很有可能每天都以某种形式使用 Linux!Linux 支持以下功能:
- 您访问的网站
- 汽车娱乐/控制面板
- 销售点 (PoS) 系统,例如商店的结账台和收银机
- 关键基础设施,例如交通灯控制器或工业传感器
Linux 的风味
“Linux”这个名称实际上是基于 UNIX(另一种操作系统)的多个操作系统的总称。由于 UNIX 是开源的,Linux 的变体具有各种形状和大小——最适合系统的用途。
例如,Ubuntu 和 Debian 是一些更常见的 Linux 发行版,因为它具有很强的可扩展性。也就是说,您可以将 Ubuntu 作为服务器(例如网站和 Web 应用程序)或作为成熟的桌面运行。对于本系列,我们将使用 Ubuntu。
Ubuntu Server 可以在只有 512MB RAM 的系统上运行
与拥有不同版本的 Windows(7、8 和 10)类似,Linux 也有许多不同的版本/发行版。
命令 echo whoami
正如我们之前所讨论的,使用 Ubuntu 等操作系统的一大卖点是它们的轻量级。当然,这并非没有缺点,例如,通常没有 GUI(图形用户界面)或我们可以用来与机器交互的桌面环境(除非它已经被安装)。与这些系统交互的很大一部分是使用“终端”。
“终端”是纯粹基于文本的,起初令人生畏。但是,如果我们分解一些命令,一段时间后,您很快就会熟悉使用终端!
我们需要能够执行基本功能,例如导航到文件、输出内容和生成文件!这样做的命令是不言自明的(当然,一旦你知道它们是什么......)
让我们从我在下表中分解的第一个命令中的两个开始:
命令 |
描述 |
echo |
输出我们提供的任何文本 |
whoami |
找出我们当前登录的用户! |
tryhackme@linux1:~$ echo "Hello Friend!"
tryhackme@linux1:~$ whoami
到目前为止,我们只介绍了“ echo ”和“ whoami ”命令。当您考虑我们需要做的事情时,并没有那么有用——包括导航文件系统、读取和写入文件系统。
在此任务中,我们将学习命令以便我们可以做到这一点。就像上一个任务一样,我将在下一个标题的表中显示命令,并显示正在使用的这些命令的示例。
命令 ls cd cat pwd
与文件系统交互
正如我之前所说,能够在不依赖桌面环境的情况下导航您登录的机器非常重要。毕竟,如果我们哪儿也去不了,登录还有什么意义呢?
命令 |
全名 |
ls |
清单 |
cd |
更改目录 |
cat |
连接 |
pwd |
打印工作目录 |
列出我们当前目录中的文件 (ls)
在我们做任何事情之前,比如找出任何文件或文件夹的内容,我们首先需要知道存在什么。这可以使用“ls”命令(列表的缩写)来完成
tryhackme@linux1:~$ ls 'Important Files' 'My Documents' Notes Pictures
在上面的截图中,我们可以看到有以下目录/文件夹:
- 重要文件
- 我的文件
- 笔记
- 图片
您可以根据文件夹的名称来猜测文件夹包含的内容。
专业提示:您可以列出目录的内容,而无需使用ls和目录名称导航到该目录。 ls Pictures
更改当前目录 (cd)
现在我们知道存在哪些文件夹,我们需要使用“ cd ”命令(change directory 的缩写)切换到该目录。假设我想打开“图片”目录——我会做“ cd Pictures ”。再次,我们想找出这个“图片”目录的内容,为此,我们将再次使用“ ls ”:
tryhackme@linux1:~/Pictures$ ls dog_picture1.jpg dog_picture2.jpg dog_picture3.jpg dog_picture4.jpg
在这种情况下,看起来有 4 张狗的照片!
输出文件的内容 (cat)
虽然知道文件的存在是件好事——但除非我们能够查看文件的内容,否则它并没有多大用处。
我们将继续讨论一些可用的工具,这些工具允许我们在稍后的房间将文件从一台机器传输到另一台机器。但现在,我们将讨论使用名为“ cat”的命令来简单地查看文本文件的内容。
“Cat”是连接的缩写 & 是我们输出文件内容(不仅仅是文本文件!)的绝佳方式。
在下面的屏幕截图中,您可以看到我如何结合使用“ls”来列出名为“Documents”的目录中的文件:
tryhackme@linux1:~/Documents$ ls todo.txt tryhackme@linux1:~/Documents$ cat todo.txt Here's something important for me to do later!
我们应用了此任务前面的一些知识来执行以下操作:
- 使用“ ls ”让我们知道这台机器的“文档”文件夹中有哪些文件。在这种情况下,它被称为“todo.txt”。
- 然后我们用来 cat todo.txt 连接/输出这个“todo.txt”文件的内容,其中的内容是“这是我稍后要做的重要事情!”
专业提示:您可以使用 cat 和目录名称 cat 来输出目录中文件的内容,而无需导航到它。
cat /home/ubuntu/Documents/todo.txt
有时,诸如用户名、密码(是的——真的……)、标志或配置设置之类的东西存储在可以使用“cat”检索这些文件的文件中。
找出我们当前工作目录 (pwd) 的完整路径
当您在 Linux 机器中导航时,您会注意到,您当前正在使用的目录的名称将列在您的终端中。
很容易忘记我们在文件系统上的确切位置,这就是我想介绍“ pwd ”的原因。这代表打印工作目录。 _
使用之前的示例机器,我们当前位于“Documents”文件夹中——但是它在 Linux 机器的文件系统中的确切位置是什么?我们可以使用下面的屏幕截图中的“pwd”命令找到它:
tryhackme@linux1:~/Documents$ pwd /home/ubuntu/Documents tryhackme@linux1:~/Documents$
让我们分解一下:
- 由于我们的终端,我们已经知道我们在“文档”中,但此时,我们不知道“文档”存储在哪里,以便我们将来可以轻松地返回它。
- 我已经使用“ pwd ”(p rint w orking d irectory)命令找到这个“Documents”文件夹的完整文件路径。
- Linux 告诉我们这个“Documents”目录存储在机器上的“/home/ubuntu/Documents”中,这对我们很有帮助——很高兴知道!
- 现在以后,如果我们发现自己在不同的位置,我们可以将 cd /home/ubuntu/Documents 我们的工作目录更改为这个“文档”目录。
命令find grep
尽管目前看来还不是这样,但 Linux 的一个可取之处就是您可以真正高效地使用它。话虽如此,您当然只能像熟悉它一样高效。随着时间的推移,当您与 Ubuntu 等操作系统交互时,像我们已经介绍过的那些基本命令将开始成为肌肉记忆。
一个很好的方式来展示你可以如何高效地使用这样的系统是使用一组命令来快速搜索我们的用户可以访问的整个系统中的文件。无需始终如一地使用 cd 并 ls 找出什么在哪里。相反,我们可以使用诸如此类的命令为 find 我们自动执行此类操作!
这是 Linux 开始变得有点令人生畏的地方——但我们将分解它并让您轻松进入。
使用find
find 命令非常棒,因为它可以非常简单地使用,也可以非常复杂地使用,具体取决于您要执行的操作。但是,让我们首先坚持基本原则。
采取下面的片段; 我们可以看到我们可用的目录列表:
tryhackme@linux1:~$ ls Desktop Documents Pictures folder1 tryhackme@linux1:~$
- 桌面
- 文件
- 图片
- 文件夹1
现在,当然,目录本身可以包含更多的目录。当我们不得不查看每一个文件只是为了尝试查找特定文件时,这变得令人头疼。我们可以用来find为我们做这件事!
让我们从简单开始,假设我们已经知道要查找的文件的名称——但不记得它的确切位置!在这种情况下,我们正在寻找“passwords.txt”
如果我们记得文件名,我们可以简单地使用find -name passwords.txt 命令将在我们当前目录中的每个文件夹中查找该特定文件,如下所示:
tryhackme@linux1:~$ find -name passwords.txt ./folder1/passwords.txt tryhackme@linux1:~$
“find”已设法找到该文件——事实证明它位于 folder1/passwords.txt 中——太棒了。但是假设我们不知道文件的名称,或者想搜索每个扩展名为“.txt”的文件。发现让我们也这样做吧!
我们可以简单地使用所谓的通配符 (*) 来搜索任何以 .txt 结尾的内容。在我们的例子中,我们想要找到当前目录中的每个 .txt 文件。我们将构建一个命令,例如find -name *.txt . “查找”已经能够找到每个 .txt 文件,然后给我们每个文件的位置:
tryhackme@linux1:~$ find -name *.txt ./folder1/passwords.txt ./Documents/todo.txt tryhackme@linux1:~$
查找已成功找到:
- “folder1”中的“passwords.txt”
- “文档”中的“todo.txt”
那不是那么难,是吧!
使用 Grep
另一个值得学习的实用工具是使用grep. 该grep命令允许我们在文件内容中搜索我们正在寻找的特定值。
以 Web 服务器的访问日志为例。在这种情况下,Web 服务器的 access.log 有 244 个条目。
tryhackme@linux1:~$ wc -l access.log 244 access.log tryhackme@linux1:~$
使用像这样的命令cat在这里不会太好。比方说,如果我们想搜索这个日志文件以查看某个用户/IP 地址访问过的东西?考虑到我们想要找到一个特定的值,查看 244 个条目并不是那么有效。
我们可以使用grep此文件的全部内容来搜索我们正在搜索的值的任何条目。以Web服务器的访问日志为例,我们希望看到IP地址“81.143.211.90”访问过的所有内容(注意这是虚构的)
tryhackme@linux1:~$ grep "81.143.211.90" access.log 81.143.211.90 - - [25/Mar/2021:11:17 + 0000] "GET / HTTP/1.1" 200 417 "-" "Mozilla/5.0 (Linux; Android 7.0; Moto G(4))" tryhackme@linux1:~$
“Grep”已经搜索过这个文件并向我们展示了我们提供的任何条目以及包含在这个日志文件中的 IP。
运算符 & && > >>
Linux 运算符是增强您使用 Linux 的知识的绝佳方式。有几个重要的运算符值得注意。我们将涵盖基础知识并将它们相应地分解为一口大小的块。
在概述中,我将展示以下运算符:
符号/运算符 |
描述 |
& |
该操作员允许您在终端后台运行命令。 |
&& |
该运算符允许您在终端的一行中组合多个命令。 |
> |
这个运算符是一个重定向器——这意味着我们可以从命令中获取输出(例如使用 cat 输出文件)并将其定向到其他地方。 |
>> |
此运算符执行与运算符相同的功能>,但附加输出而不是替换(意味着不会覆盖任何内容)。 |
让我们更详细地介绍这些。
操作员 ”&”
该运算符允许我们在后台执行命令。例如,假设我们要复制一个大文件。这显然需要相当长的时间,并且在文件成功复制之前我们无法做任何其他事情。
“&” shell 运算符允许我们执行命令并让它在后台运行(例如这个文件副本)允许我们做其他事情!
操作员 ”&&”
从其搭档“&”的熟悉程度来看,此 shell 运算符有点误导。与“&”运算符不同,我们可以使用“&&”来制作要运行的命令列表,例如command1 && command2。但是,值得注意的是,只有在成功command2时才会运行。command1
运算符“>”
这个运算符就是所谓的输出重定向器。这实质上意味着我们从运行的命令中获取输出并将该输出发送到其他地方。
一个很好的例子是重定向echo我们在任务 4 中学到的命令的输出。当然,运行诸如echo howdy将“howdy”返回到我们的终端的东西——这不是很有用。相反,我们可以做的是将“你好”重定向到诸如新文件之类的东西!
假设我们想创建一个名为“welcome”的文件,其中包含消息“hey”。我们可以echo hey > welcome在我们想要使用内容“嘿”创建文件的地方运行,如下所示:
tryhackme@linux1:~$ echo hey > welcome
tryhackme@linux1:~$ cat welcome hey
注意:如果文件ie“welcome”已经存在,内容将被覆盖!
运算符“>>”
这个运算符也是一个输出重定向器,就像>我们讨论的前面的运算符 ( ) 一样。但是,这个运算符的不同之处在于它不会覆盖文件中的任何内容,例如,它只是将输出放在末尾。
继续我们之前的例子,我们有文件“welcome”,其中包含“hey”的内容。如果使用 echo 使用> 运算符将“hello”添加到文件,则文件现在将只有“hello”而没有“hey”。
运算>>符允许将输出附加到文件的底部——而不是像这样替换内容:
tryhackme@linux1:~$ echo hello >> welcome
tryhackme@linux1:~$ cat welcome hey hello
SSH
事实上,浏览器内功能使用的协议与我们今天将要使用的协议完全相同。该协议简称为Secure Shell或SSH ,是连接远程Linux机器命令行并与之交互的常用手段。
什么是 SSH 及其工作原理?
Secure Shell 或 SSH 只是一种加密形式的设备之间的协议。使用密码学,我们以人类可读的格式发送的任何输入都经过加密,以便在网络上传输——一旦到达远程机器,就会在网络上解密,如下图所示。
您可以在 TryHackMe 房间了解各种加密类型。但是现在,我们只需要了解:
- SSH 允许我们远程在另一台设备上执行命令。
- 在设备之间发送的任何数据在通过网络(例如 Internet)发送时都会被加密
命令 ls -a --help man -h
大多数命令允许提供参数。这些参数由连字符和称为标志或开关的特定关键字标识。
稍后我们将讨论如何确定哪些命令允许提供参数并理解这些命令的确切作用。
-a
使用命令时,除非另有说明,否则它将执行其默认行为。例如, ls 列出工作目录的内容。但是,不会显示隐藏文件。我们可以使用标志和开关来扩展命令的行为。
使用我们的ls示例,ls通知我们只有一个名为“folder1”的文件夹,如下面的屏幕截图中突出显示的那样。 请注意,以下屏幕截图中的内容仅为示例。
tryhackme@linux2:~$ ls folder1 tryhackme@linux2:~$
但是,在使用-a参数(缩写为--all)之后,我们现在突然有了一个包含更多文件和文件夹的输出,例如“.hiddenfolder”。带有“ . ”的文件和文件夹是隐藏文件。
tryhackme@linux2:~$ ls -a .hiddenfolder folder1 tryhackme@linux2:~$
--help
接受这些的命令也将有一个--help选项。此选项将列出该命令接受的可能选项,提供简要说明和如何使用它的示例。
tryhackme@linux2:~$ 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 with -l, scale sizes by SIZE when printing them; e.g., '--block-size=M'; see SIZE format below -B, --ignore-backups do not list implied entries ending with ~ -c with -lt: sort by, and show, ctime (time of last modification of file status information); with -l: show ctime and sort by name; otherwise: sort by ctime, newest first -C list entries by columns --color[=WHEN] colorize the output; WHEN can be 'always' (default if omitted), 'auto', or 'never'; more info below -d, --directory list directories themselves, not their contents -D, --dired generate output designed for Emacs' dired mode -f do not sort, enable -aU, disable -ls --color -F, --classify append indicator (one of */=>@|) to entries --file-type likewise, except do not append '*' --format=WORD across -x, commas -m, horizontal -x, long -l, single-column -1, verbose -l, vertical -C --full-time like -l --time-style=full-iso -g like -l, but do not list owner --group-directories-first tryhackme@linux2:~$
实际上,此选项是所谓的手册页(manual 的缩写)的格式化输出,其中包含Linux命令和应用程序的文档。
man
手册页是系统命令和应用程序的重要信息来源,可在Linux机器上使用,可在机器本身和网上访问。
要访问此文档,我们可以使用man命令,然后提供我们想要阅读文档的命令。使用我们的 ls 示例,我们将像这样man ls查看手册页ls:
tryhackme@linux2:~$ man ls LS(1) User Commands LS(1) NAME ls - list directory contents SYNOPSIS ls [OPTION]... [FILE]... DESCRIPTION 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 with -l, scale sizes by SIZE when printing them; e.g., '--block-size=M'; see SIZE format below Manual page ls(1) line 1 (press h for help or q to quit)
-h 以“人类可读”的方式显示输出
命令 touch mkdir cp mv rm file
在与Linux机器上的文件系统交互时,我们介绍了一些最基本的命令。例如,我们介绍了如何使用和 来列出和查找文件夹的内容,以及如何 find 使用 cd.
在此任务中,我们将学习更多与文件系统交互的命令,以便我们能够:
- 创建文件和文件夹
- 移动文件和文件夹
- 删除文件和文件夹
更具体地说,以下命令:
命令 |
全名 |
目的 |
touch |
触碰 |
创建文件 |
mkdir |
制作目录 |
创建文件夹 |
cp |
复制 |
复制文件或文件夹 |
mv |
移动 |
移动文件或文件夹 |
rm |
消除 |
删除文件或文件夹 |
file |
文件 |
判断文件类型 |
提示:与使用 cat 类似,我们可以为所有这些命令提供完整的文件路径,即 directory1/directory2/note
创建文件和文件夹(touch、mkdir)
在Linux上创建文件和文件夹是一个简单的过程。首先,我们将介绍创建一个文件。touch 命令只接受一个参数——我们要给我们创建的文件的名称。例如,我们可以使用touch note. 值得注意的是 touch 只是创建一个空白文件。您需要使用诸如 echo 之类的命令或诸如 nano 之类的文本编辑器来将内容添加到空白文件中。
tryhackme@linux2:~$ touch note tryhackme@linux2:~$ ls folder1 note
这是创建文件夹的类似过程,只涉及使用命令mkdir并再次提供我们要分配给目录的名称。例如,使用创建目录“mydirectory” mkdir mydirectory。
tryhackme@linux2:~$ mkdir mydirectory tryhackme@linux2:~$ ls folder1 mydirectory note
删除文件和文件夹 (rm)
rm与我们到目前为止所介绍的命令相比,它非常出色。您可以简单地使用删除文件rm。-R但是,您需要在要删除的目录名称旁边提供开关。
tryhackme@linux2:~$ rm note tryhackme@linux2:~$ ls folder1 mydirectory
tryhackme@linux2:~$ rm -R mydirectory tryhackme@linux2:~$ ls folder1
复制和移动文件和文件夹(cp、mv)
复制和移动文件是Linux机器上的一项重要功能。从 开始cp,此命令有两个参数:
1.现有文件的名称
2.复制时我们希望分配给新文件的名称
cp将现有文件的全部内容复制到新文件中。在下面的截图中,我们将“note”复制到“note2”。
tryhackme@linux2:~$ cp note note2 tryhackme@linux2:~$ ls folder1 note note2
移动文件需要两个参数,就像 cp 命令一样。但是,不是复制和/或创建新文件,mv而是合并或修改我们作为参数提供的第二个文件。您不仅可以用来mv将文件移动到新文件夹,还可以用来mv重命名文件或文件夹。例如,在下面的屏幕截图中,我们将文件“note2”重命名为“note3”。“note3”现在将具有“note2”的内容。
tryhackme@linux2:~$ mv note2 note3 tryhackme@linux2:~$ ls folder1 note note3
确定文件类型 file
通常具有误导性并经常使人们感到困惑的是从文件中推测文件的目的或内容可能是什么。文件通常具有所谓的扩展名以简化此操作。例如,文本文件通常具有“.txt”的扩展名。但这不是必需的。
到目前为止,我们在示例中使用的文件还没有扩展名。在不知道文件存在原因的上下文的情况下——我们真的不知道它的用途。输入file命令。该命令接受一个参数。例如,我们将使用file来确认我们例子中的“note”文件是否确实是一个文本文件,就像这样file note。
tryhackme@linux2:~$ file note note: ASCII text
命令 ls -lh su
ls -lh
正如您现在已经发现的那样,某些用户无法访问某些文件或文件夹。我们之前已经探索了一些命令,这些命令可用于确定我们拥有什么访问权限以及它将我们带到哪里。
在我们之前的任务中,我们学习了如何通过标志和开关扩展命令的使用。ls以列出当前目录内容的命令为例。使用-l开关时,我们可以看到十列,如下面的屏幕截图所示。然而,我们只对前三列感兴趣:
tryhackme@linux2:~$ ls -lh -rw-r--r-- 1 cmnatic cmnatic 0 Feb 19 10:37 file1 -rw-r--r-- 8 cmnatic cmnatic 0 Feb 19 10:37 file2
su
尽管令人生畏,但这三列对于确定文件或文件夹的某些特征以及我们是否可以访问它非常重要。一个文件或文件夹可以有几个特征,这些特征决定了哪些操作是允许的,哪些用户或组有能力执行给定的操作——例如:
- 读
- 写
- 执行
tryhackme@linux2:~$ su user2 Password: user2@linux2:/home/tryhackme$
让我们在此任务顶部的初始屏幕截图中使用“cmnatic.pem”文件。它有“-”指示器突出显示它是一个文件,然后是“rw”。这意味着只有文件的所有者可以读写这个“cmnatic.pem”文件,但不能执行它。
简要说明:用户和组之间的差异
我们在Linux基础知识第 1 部分(即普通用户和系统用户之间的区别)中简要探讨了这一点。Linux 的伟大之处在于权限可以非常细化,虽然一个用户在技术上拥有一个文件,但如果设置了权限,那么一组用户也可以对完全相同的文件拥有相同或不同的一组权限文件而不影响文件所有者本身。
让我们将其置于现实世界中;运行 Web 服务器的系统用户必须具有读取和写入有效 Web 应用程序文件的权限。然而,网络托管公司等公司将不得不允许他们的客户上传他们自己的网站文件,而无需成为网络服务器系统用户——这会危及所有其他客户的安全。
我们将在下面学习在用户之间切换所需的命令。
在用户之间切换
多亏了命令,在Linux安装上的用户之间切换su很容易。除非你是 root 用户(或通过 sudo 使用 root 权限),否则你需要知道两件事来促进用户帐户的这种转换:
- 我们希望切换到的用户
- 用户密码
该su命令需要几个可能与您相关的开关。例如,登录后执行命令或指定要使用的特定 shell。 我鼓励您阅读手册页以su了解更多信息。但是,我将介绍-lor--login开关。
简单地说,通过提供-l开关su,我们启动一个 shell,它更类似于登录系统的实际用户——我们继承了新用户的更多属性,即环境变量等。
tryhackme@linux2:~$ su user2 Password: user2@linux2:/home/tryhackme$
例如,当使用su切换到“user2”时,我们的新会话会将我们拖放到以前用户的主目录中。
tryhackme@linux2:~$ su -l user2 Password: user2@linux2:~$ pwd user2@:/home/user2$
现在,在使用 之后-l ,我们的新会话自动将我们放入“用户”的主目录中。
目录 /etc /var /root /tmp
/ETC
此根目录是系统中最重要的根目录之一。etc 文件夹(etcetera 的缩写)是存储操作系统使用的系统文件的常用位置。
例如,下面屏幕截图中突出显示的 sudoers 文件包含有权以 root 用户身份运行 sudo 或一组命令的用户和组的列表。
下面还突出显示了“ passwd ”和“ shadow ”文件。这两个文件对于Linux来说是特殊的,因为它们显示了您的系统如何以称为 sha512 的加密格式存储每个用户的密码。
tryhackme@linux2:/etc$ ls shadow passwd sudoers sudoers.d
/var
“/var”目录(其中“var”是变量数据的缩写)是Linux安装中的主要根文件夹之一。此文件夹存储系统上运行的服务或应用程序经常访问或写入的数据。例如,来自正在运行的服务和应用程序的日志文件写在这里 ( /var/log ),或者其他不一定与特定用户关联的数据(即数据库等)。
tryhackme@linux2:/var$ ls backups log opt tmp
/root
与/home目录不同,/root 文件夹实际上是“根”系统用户的家。除了了解这是“root”用户的主目录之外,这个文件夹没有任何其他内容。但是,值得一提的是,逻辑上的假设是该用户默认将其数据存放在诸如“ /home/root ”的目录中。
root@linux2:~# ls myfile myfolder passwords.xlsx
/tmp
这是在Linux安装中找到的唯一根目录。/tmp 目录是“临时”的缩写,它是易变的,用于存储只需要访问一次或两次的数据。和电脑内存一样,电脑重启后,这个文件夹的内容就被清空了。
在渗透测试中对我们有用的是默认情况下任何用户都可以写入此文件夹。这意味着一旦我们可以访问一台机器,它就可以作为存储诸如我们的枚举脚本之类的东西的好地方。
root@linux2:/tmp# ls todelete trash.txt rubbish.bin
命令 nano VIM
到目前为止,在整个系列中,我们只使用echo命令和管道运算符(>和>>)的组合将文本存储在文件中。当您处理多行和多类型的文件时,这不是处理数据的有效方法!
引入终端文本编辑器 nano
您可以使用几个选项,所有选项都具有各种友好性和实用性。此任务将向您介绍nano但也会向您展示一个名为的替代项VIM(TryHackMe 有一个专门的房间!)
使用 Nano 很容易上手!要使用 nano 创建或编辑文件,我们只需使用nano filename-- 将“文件名”替换为您要编辑的文件的名称。
tryhackme@linux3:/tmp# nano myfile GNU nano 4.8 myfile ^G Get Help ^O Write Out ^W Where Is ^K Cut Text ^J Justify ^C Cur Pos M-U Undo M-A Mark Text ^X Exit ^R Read File ^\ Replace ^U Paste Text ^T To Spell ^_ Go To Line M-E Redo M-6 Copy Text
一旦我们按回车键执行命令,nano就会启动!我们可以从哪里开始输入或修改我们的文本。您可以使用“向上”和“向下”箭头键在每一行中导航,或者使用键盘上的“Enter”键开始新的一行。
tryhackme@linux3:/tmp# nano myfile GNU nano 4.8 myfile Modified Hello TryHackMe I can write things into "myfile" ^G Get Help ^O Write Out ^W Where Is ^K Cut Text ^J Justify ^C Cur Pos M-U Undo M-A Mark Text ^X Exit ^R Read File ^\ Replace ^U Paste Text ^T To Spell ^_ Go To Line M-E Redo M-6 Copy Text
Nano 具有一些易于记忆的功能,涵盖了您希望从文本编辑器中获得的最通用的功能,包括:
- 搜索文本
- 复制和粘贴
- 跳转到行号
- 找出你所在的行号
您可以通过按“ Ctrl ”键(在 Linux 上表示为^)和相应的字母来使用 nano 的这些功能。例如,要退出,我们会想按“ Ctrl ”和“ X ”来退出 Nano。
虚拟机 VIM
VIM 是一个更高级的文本编辑器。虽然您不需要了解所有高级功能,但提及它有助于提高您的 Linux 技能。
命令 wget scp
下载文件 wget
计算的一个非常基本的特征是传输文件的能力。例如,您可能想要下载程序、脚本甚至图片。值得庆幸的是,我们可以通过多种方式检索这些文件。
我们将介绍wget. 此命令允许我们通过 HTTP 从 Web 下载文件——就像您在浏览器中访问文件一样。我们只需要提供我们希望下载的资源的地址。例如,如果我想下载一个名为“myfile.txt”的文件到我的机器上,假设我知道它的网址——它看起来像这样:
wget https://assets.tryhackme.com/additional/linux-fundamentals/part3/myfile.txt
从您的主机传输文件 - SCP (SSH)
安全复制,或 SCP,就是这样一种安全复制文件的方法。与常规 cp 命令不同,此命令允许您使用 SSH 协议在两台计算机之间传输文件,以提供身份验证和加密。
在 SOURCE 和 DESTINATION 模型上工作,SCP 允许您:
- 将文件和目录从当前系统复制到远程系统
- 将文件和目录从远程系统复制到当前系统
前提是我们知道您当前系统上的用户和远程系统上的用户的用户名和密码。例如,让我们将一个示例文件从我们的机器复制到远程机器,我已经在下表中整齐地列出了它:
Variable |
Value |
远程系统的IP地址 |
192.168.1.30 |
远程系统上的用户 |
Ubuntu |
本地系统上的文件名 |
重要.txt |
我们希望在远程系统上存储文件的名称 |
转移.txt |
有了这些信息,让我们来制作我们的scp命令(记住 SCP 的格式只是 SOURCE 和 DESTINATION)
scp important.txt ubuntu@192.168.1.30:/home/ubuntu/transferred.txt
scp现在让我们反转这个并设计用于从我们未登录的远程计算机复制文件的 语法
Variable |
Value |
远程系统的IP地址 |
192.168.1.30 |
远程系统上的用户 |
Ubuntu |
远程系统上的文件名 |
文档.txt |
我们希望在我们的系统上存储文件的名称 |
笔记.txt |
该命令现在将如下所示:scp ubuntu@192.168.1.30:/home/ubuntu/documents.txt notes.txt
从您的主机提供文件 - WEB
Ubuntu 机器预打包了 python3。Python 提供了一个名为“HTTPServer”的轻量级且易于使用的模块。该模块将您的计算机变成一个快速简单的 Web 服务器,您可以使用它来提供您自己的文件,然后它们可以由另一个计算机使用 和 等命令curl下载wget。
Python3 的“HTTPServer”将为您运行命令的目录中的文件提供服务,但这可以通过提供可在手册页中找到的选项来更改。简单地说,我们需要做的就是运行python3 -m http.server以启动模块!在下面的屏幕截图中,我们从名为“webserver”的目录提供服务,该目录有一个名为“file”的目录。
tryhackme@linux3:/tmp# python3 -m http.server Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
现在,让我们wget使用计算机的 IP 地址和文件名来下载文件。该模块的一个缺陷是您无法建立索引,因此您必须知道您希望使用的文件的确切名称和位置。这就是我更喜欢使用 Updog 的原因。什么是 Updog?一个更高级但更轻量级的网络服务器。但现在,让我们坚持使用 Python 的“HTTP 服务器”。
tryhackme@linux3:/tmp# wget http://127.0.0.1:8000/file 2021-05-04 14:26:16 http://127.0.0.1:8000/file Connecting to http://127.0.0.1:8000... connected. HTTP request sent, awaiting response... 200 OK Length: 51095 (50K) [text] Saving to: ‘file’ file 100%[=================================================>] 49.90K --.-KB/s in 0.04s 2021-05-04 14:26:16 (1.31 MB/s) - ‘file’ saved [51095/51095]
在上面的屏幕截图中,我们可以看到wget已成功将名为“file”的文件下载到我们的机器上。这个请求由 SimpleHTTPServer 记录,就像任何 Web 服务器一样,我在下面的屏幕截图中捕获了这一点。
tryhackme@linux3:/tmp# python3 -m http.server Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ... 127.0.0.1 - - [04/May/2021/14:26:09] "GET /file HTTP/1.1" 200 -
命令 ps kill systemd
进程是在您的机器上运行的程序。它们由内核管理,其中每个进程都有一个与之关联的 ID,也称为其 PID。PID 按照进程启动的顺序递增。即第 60 个进程的 PID 为 60。
查看进程 ps
我们可以使用友好的ps命令提供一个正在运行的进程列表作为我们的用户会话和一些附加信息,例如它的状态代码、正在运行它的会话、它使用的 CPU 的使用时间以及名称正在执行的实际程序或命令:
请注意在上面的屏幕截图中,第二个进程 ps 的 PID 是 204,然后在它下面的命令中,它会递增到 205。
要查看其他用户运行的进程和不从会话运行的进程(即系统进程),我们需要向命令提供auxps,如下所示:ps aux
请注意,我们总共可以看到 5 个进程——请注意我们现在如何拥有“root”和“cmnatic”
另一个非常有用的命令是 top 命令;top 为您提供有关系统上运行的进程的实时统计信息,而不是一次性视图。这些统计数据将每 10 秒刷新一次,但在您使用箭头键浏览各行时也会刷新。另一个深入了解系统的好命令是通过top命令
管理流程 kill
您可以发送终止进程的信号;有多种类型的信号与内核处理进程的确切程度相关。要终止命令,我们可以使用适当命名的kill 命令和我们希望终止的关联 PID。即,要终止 PID 1337,我们将使用kill 1337.
以下是我们可以在进程被杀死时发送给进程的一些信号:
- SIGTERM - 终止进程,但允许它事先做一些清理任务
- SIGKILL - 终止进程 - 事后不做任何清理
- SIGSTOP - 停止/暂停进程
进程如何启动? systemd
让我们从命名空间开始。操作系统 (OS) 使用命名空间最终将计算机上可用的资源拆分为(例如 CPU、RAM 和优先级)进程。把它想象成把你的电脑分成几块——类似于一块蛋糕。该切片内的进程将可以访问一定量的计算能力,但是,这将是每个进程总体上实际可用的一小部分。
命名空间对于安全性非常有用,因为它是一种将进程与另一个进程隔离开来的方式——只有位于同一命名空间中的进程才能相互看到。
我们之前讨论过 PID 的工作原理,这就是它发挥作用的地方。ID为0的进程是系统启动时启动的进程。这个进程是 Ubuntu 上系统的 init,例如systemd,它用于提供一种管理用户进程的方式,它位于操作系统和用户之间。
例如,一旦系统启动并初始化,systemd就是最先启动的进程之一。我们想要启动的任何程序或软件都将作为systemd的子进程启动。这意味着它由systemd控制,但会作为自己的进程运行(尽管共享来自systemd 的资源)以方便我们识别等。
让进程/服务在引导时启动
一些应用程序可以在我们拥有的系统启动时启动。例如,Web 服务器、数据库服务器或文件传输服务器。该软件通常很关键,并且经常被管理员告知在系统启动期间启动。
在这个例子中,我们将告诉 apache web 服务器手动启动 apache,然后告诉系统在启动时启动 apache2。
输入使用——这个命令允许我们与systemdsystemctl进程/守护进程进行交互。继续我们的示例,systemctl 是一个易于使用的命令,它采用以下格式:systemctl [option] [service]
例如,要告诉 apache 启动,我们将使用systemctl start apache2. 看起来很简单,对吧?与如果我们想停止 apache 相同,我们只需将 stop 替换[option]为 stop (而不是像我们提供的那样开始)
我们可以做四个选项systemctl:
- 开始
- 停止
- 使能够
- 停用
Linux后台和前台 简介
进程可以在两种状态下运行:在后台和在前台。例如,您在终端中运行的命令(例如“echo”或类似的东西)将在终端的前台运行,因为它是唯一没有被告知在后台运行的命令。“Echo”是一个很好的例子,因为 echo 的输出将在前台返回给您,但不会在后台返回给您 - 例如下面的屏幕截图。
我们在这里运行echo "Hi THM" ,我们希望输出像开始时一样返回给我们。但是在将&运算符添加到命令后,我们得到的只是回显进程的 ID 而不是实际输出——因为它在后台运行。
这对于复制文件等命令非常有用,因为这意味着我们可以在后台运行该命令并继续执行我们希望执行的任何其他命令(无需等待文件复制先完成)
在执行脚本之类的事情时,我们可以做完全相同的事情——而不是依赖 & 运算符,我们可以Ctrl + Z在键盘上使用来后台处理。这也是“暂停”脚本或命令执行的有效方法,如下例所示:
该脚本将不断重复“这将一直循环直到我停止!” 直到我停止或暂停该过程。通过使用Ctrl + Z(如T^Z所示)。现在我们的终端不再充满消息——直到我们将其置于前台,我们将在下面讨论。
前台处理
现在我们有一个后台运行的进程,例如我们的脚本“background.sh”,可以使用命令确认ps aux,我们可以后退,将这个进程带回前台进行交互。
在我们的进程后台使用Ctrl + Zor&运算符的情况下,我们fg可以像下面这样将其重新聚焦,我们可以看到该fg命令正在用于使后台进程在终端上重新使用,脚本的输出是现在还给我们。
自动化 crontabs
用户可能希望安排某个动作或任务在系统启动后发生。例如,运行命令、备份文件或启动您喜欢的程序,例如 Spotify 或 Google Chrome。
我们将讨论这个cron过程,但更具体地说,我们如何通过使用crontabs. Crontab 是在引导期间启动的进程之一,负责促进和管理 cron 作业。
crontab 只是一个特殊的文件,其格式可被进程识别cron以逐步执行每一行。Crontabs 需要 6 个特定值:
Value |
描述 |
min |
什么分钟执行 |
hour |
什么时间执行 |
dom |
每月的哪一天执行 |
mon |
在一年中的哪一个月执行 |
dow |
一周中的哪一天执行 |
cmd |
将要执行的实际命令。 |
让我们以备份文件为例。您可能希望每 12 小时备份一次“cmnatic”的“文档”。我们将使用以下格式:
0 *12 * * * cp -R /home/cmnatic/Documents /var/backups/
crontabs 的一个有趣特性是它们还支持通配符或星号 ( *)。如果我们不希望为该特定字段提供值,即我们不关心它执行的月、日或年——只要它每 12 小时执行一次,我们只需放置一个星号即可。
这可能一开始就令人困惑,这就是为什么有一些很棒的资源,例如在线“ Crontab 生成器”,它允许您使用友好的应用程序为您生成格式!以及网站“ Cron Guru ”!
可以使用 编辑 Crontab crontab -e,您可以在其中选择一个编辑器(例如 Nano)来编辑您的 crontab。
包管理
介绍软件包和软件回购协议
当开发人员希望向社区提交软件时,他们会将其提交到“apt”存储库。如果获得批准,他们的程序和工具将被发布到野外。 Linux 的两个最具救赎性的特性在这里闪耀:用户可访问性和开源工具的优点。
在 Ubuntu 20.04 Linux 机器上使用该ls命令时,这些文件用作网关/注册表。
虽然操作系统供应商将维护他们自己的存储库,但您也可以将社区存储库添加到您的列表中!这允许您扩展操作系统的功能。可以使用 add-apt-repository命令或列出其他提供程序来添加其他存储库!例如,一些供应商会有一个离他们的地理位置更近的存储库。
管理您的存储库(添加和删除)
通常我们使用 apt 命令将软件安装到我们的 Ubuntu 系统上。该apt命令是包管理软件的一部分,也称为 apt。Apt 包含一整套工具,使我们能够管理软件的包和源,同时安装或删除软件。
添加存储库的一种方法是使用 add-apt-repository我们上面说明的命令,但我们将逐步 完成手动添加和删除存储库。虽然您可以通过使用软件包安装程序(例如 )来安装软件dpkg,但 apt 的好处意味着每当我们更新我们的系统时——包含我们添加的软件片段的存储库也会被检查是否有更新。
在此示例中,我们将把文本编辑器 Sublime Text 作为存储库添加到我们的 Ubuntu 机器中,因为它不是默认 Ubuntu 存储库的一部分。添加软件时,我们下载的完整性通过使用所谓的 GPG(Gnu Privacy Guard)密钥来保证。这些密钥本质上是来自开发人员的安全检查,“这是我们的软件”。如果密钥与您的系统信任和开发人员使用的不匹配,则不会下载该软件。
因此,首先,我们需要为 Sublime Text 3 的开发人员添加 GPG 密钥。(请注意,TryHackMe 实例无法访问互联网,因此我们不希望您将其添加到您部署的机器中,因为它会失败。)
1.让我们下载 GPG 密钥并使用 apt-key 来信任它: wget -qO - https://download.sublimetext.com/sublimehq-pub.gpg | sudo apt-key add -
2.现在我们已经将这个密钥添加到我们的信任列表中,我们现在可以将 Sublime Text 3 的存储库添加到我们的 apt 源列表中。一个好的做法是为我们添加的每个不同的社区/第 3 方存储库创建一个单独的文件。
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
删除包就像反转一样简单。这个过程是通过使用add-apt-repository --remove ppa:PPA_Name/ppa命令或手动删除我们之前添加的文件来完成的。一旦删除,我们就可以使用apt remove [software-name-here]ieapt remove sublime-text
日志
我们在 Linux 基础知识第 1 部分中简要介绍了日志文件以及它们的位置。但是,让我们快速回顾一下。这些文件和文件夹位于 /var/log 目录中,包含系统上运行的应用程序和服务的日志记录信息。操作系统 (OS) 非常擅长在称为“轮换”的过程中自动管理这些日志。
我突出显示了在 Ubuntu 机器上运行的三个服务的一些日志:
- Apache2 网络服务器
- fail2ban 服务的日志,例如用于监视尝试的暴力破解
- 用作防火墙的 UFW 服务
这些服务和日志是监控系统健康状况和保护系统的好方法。不仅如此,网络服务器等服务的日志还包含有关每个请求的信息——允许开发人员或管理员诊断性能问题或调查入侵者的活动。例如,下面两种类型的日志文件是您感兴趣的:
- 访问日志
- 错误日志
当然,还有一些日志存储有关操作系统如何自行运行以及用户执行的操作(例如身份验证尝试)的信息。
__EOF__
本文链接:https://www.cnblogs.com/mushika/p/17441926.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?