适用于: Linux 上的 .NET
本部分的目标
培训的这一部分侧重于 Linux 特殊目录、如何以超级用户身份运行命令(根目录),以及如何使用包管理器安装和卸载应用程序。
使用包管理器安装和删除包需要根权限。 因此,必须首先了解如何以超级用户身份运行命令。
Linux 特殊目录
对于此培训,无需深入了解如何管理 Linux。 但是,某些特殊目录的摘要非常有用,因为你将在训练的其余部分使用它们。
Directory | 说明 |
---|---|
/ | 根目录(顶级文件夹)。 |
bin/ | 包含用户二进制文件、可执行文件。 |
/sbin | 包含用户二进制文件、可执行文件。 |
/etc | 包含本地系统和应用程序的配置文件。 例如,你将在 /etc/system 目录中创建一些配置文件,使 ASP.NET Core 应用程序可由系统自动启动。 |
/home | 包含每个用户的主目录。 例如 , /home/<username>。 |
tmp/ | 用于存储由系统和应用程序创建的临时文件的临时目录。 |
/usr | 存储可共享文件,包括可执行文件、库和文档。 例如,.NET 运行时和 SDK 安装在 /usr/share/dotnet/ 目录中。 |
/var | 存储变量数据文件。 例如,Apache 将根网站的内容存储在 /var/www/html 目录中,并将日志文件存储在 /var/log/apache2/ 目录中。 虽然没有必要,但你将在此目录中发布 Web 应用程序。 |
备注
在 Linux 中,此项输入区分大小写。 因此, /home 和 /Home 是不同的目录,文件名和文件名是不同的文件。
首次连接到 Linux 虚拟机时,将从根目录开始。 此目录将为 /home/<username>。
根目录快捷方式为 ~ (波形符)。 随时可以使用 cd ~
该命令返回到主目录。
查看并尝试以下命令(如以下屏幕截图所示):
-
pwd
(打印工作目录):打印当前目录和 /etc/systemd 目录。 -
echo
:打印 ~ (root) 目录的值。 -
cd ~
:返回根目录。
此示例不包括列出目录内容。 但是,本培训的后续步骤包括处理文件和文件夹。 其中一些任务需要超级用户权限。 下一部分介绍如何将自己提升为超级用户状态。
以超级用户身份运行命令
超级用户是最特权的用户帐户。 它具有对所有文件和文件夹的根(无限制)访问权限,并完全控制计算机的操作。 系统管理员使用此帐户进行系统维护。
在类似 UNIX 的系统上,超级用户的传统名称是“root”。 根用户可以为标准用户执行其他限制的任务,包括以下任务:
- 更改系统目录
- 更改用户权限
- 更改文件所有权
- 与系统相关的任务,例如重启
- 安装某些应用程序
可通过多种方式以根帐户用户身份运行命令。 一个是使用 sudo su
命令。 在此命令中,sudo
缩写superuser do
su
为“切换用户”。还可以使用su
命令在标准用户之间切换。
重要
成为根帐户用户后,执行的所有操作在根上下文中运行。 因此,应谨慎行事,因为根帐户有权访问整个系统。
若要演示权限问题,请在名为 /etc 的特殊文件夹中创建文本文件。
/etc/ 文件夹是系统配置文件所在的位置。 此文件夹可防止其内容被标准用户更改。
运行下面的命令:
echo hello world > /etc/helloworld.txt
该 echo
命令将后面的所有文本写入输出。 尖括号 (>
) 指示系统将输出 发送到 /etc/helloworld.txt 文件而不是控制台。 此行为类似于 Windows 的工作原理。
备注
Linux 区分大小写: Helloworld.txt、 helloworld.txt 和 helloworld。Txt 是不同的文件。
无需提供文件扩展名。 名称“helloworld”本身是完全有效的。 (此处仅使用“txt”扩展作为示例。
运行此命令时,会收到权限 被拒绝 错误消息。
操作失败, 因为 /etc 文件夹是标准用户无法更改的特殊文件夹。 通过运行 id
命令验证用户。
若要成为根帐户用户,请 sudo su
运行以下命令。
你应该注意到两件事:当你成为根时,美元符号字符 ($
) 变为磅号字符 (#
)。 此外,用户名将更改为 root。 如果再次运行相同的 id
命令,则会看到根的用户和组 ID 为 0。
重要
现在,你已将自己提升到会话中的“超级用户”角色,你可以完全访问系统。 请记住,这是一种潜在的危险情况,在继续时应谨慎行事。
现在,再次运行相同的命令:
echo hello world > /etc/helloworld.txt
这一次,你不会收到任何错误消息。 若要验证文件是否已创建,请运行以下命令:
ll /etc/hello*
该 ll
命令列出指定文件夹中的文件和子文件夹。 在此示例中,参数值将 /etc/hello*
命令输出限制为名称开头 hello
的文件或文件夹。
输出显示文件已创建。 如果要检查文件的内容,该怎么办? 此命令 cat
可在此处提供帮助。 若要查看内容,请运行 cat /etc/helloworld.txt
。
该 cat
命令按顺序读取文件,并将其内容写入标准输出。 因此,它会在控制台中写入“hello world”。
为了防止在提升到根状态时可能会损坏系统的错误,最好退出根会话并返回到标准用户会话以避免一些危险的操作。 为此,请运行 exit
。 可以看到英镑符号恢复为美元符号,用户名显示为标准用户。
对于其他做法,请在标准用户上下文中运行相同的ll
cat
命令。 你将看到无法在 /etc/ 文件夹中创建文件,但可以列出该文件并读取内容。
使用“sudo”前缀运行命令
可以使用格式以 root 身份运行命令,而不是成为会话中的根 sudo <command>
帐户用户。 此方法更安全,因为它将仅以超级用户身份运行给定命令。
例如,如果在未提升为超级用户状态时运行 restart
,则结果如下所示。
若要改为以超级用户身份运行此命令,可以将会话上下文更改为根(通过运行 sudo su
)或添加 sudo
前缀,如下所示:
sudo reboot
现在,重启操作按预期由虚拟机运行。
包管理器
包管理器用于在 Linux 中安装、升级和删除应用程序。 有几个不同的包管理器,例如 DPKG(Debian 包管理系统)、RPM(Red Hat 程序包管理器),SUSE 包管理器的 Zypper 本身是低级别。 因此,使用包管理器直接管理软件可能很困难。 幸运的是,这些工具有包装器可以更轻松地安装和卸载软件。 例如,yum 是 RPM(Red Hat 程序包管理器)的包装器,APT 是 DPKG(Debian 包管理系统)的包装器。
本教程假定你正在运行 Ubuntu 包管理系统。 此系统派生自 Debian GNU/Linux 分发版使用的同一系统。 因此,可以使用 APT 安装软件。
根据 Linux 选择,可能需要使用其他工具。 例如,如果运行的是 Red Hat,则可以使用 yum 安装或卸载软件。
升级包管理器数据库
APT 适用于可用包的数据库。 建议更新包管理器,然后在全新安装后升级包。
若要更新 Ubuntu 上的包数据库,请运行 sudo apt update
。 请注意,前缀 sudo
在命令之前 apt
输入。 这样,即可将命令作为根用户运行 apt
,而不会实际将会话上下文更改为根用户的会话上下文。
update 命令实际上不会升级任何已安装的软件包。 而是更新包数据库。 实际升级由 sudo apt upgrade
命令完成。
键入 Y 并按 Enter 后,包将升级。
使用包管理器搜索包
以下示例演示如何使用包管理器搜索包,演示如何安装和卸载 Apache 2 Web 服务器。
首先,使用 apt search
命令搜索“apache Web 服务器”。 APT 执行全文搜索,并显示结果。 你将使用包名称 apache2
安装 Apache HTTP 服务器。
备注
命令的使用。
sudo
不会添加前缀,因为不必是根用户才能搜索包。
可以在 Web 浏览器中搜索“如何在 Ubuntu 上安装 Apache”来查找包名称和 APT 命令,而不是执行 APT search
该操作。 在此示例中,应找到 此官方的 Ubuntu 文档,该文档 清楚地说明了如何在 Apache 2
Ubuntu 上安装。
显示包的详细信息
若要验证你是否具有正确的包,请运行 apt show
以查看包详细信息,如以下屏幕截图所示。 同样,请注意 sudo
,此处不需要前缀。
列出已安装的包并使用 grep 筛选列表
确定找到的包是所需的包后,必须确保它尚未安装在目标服务器上。
为此,请使用 apt list --installed
命令列出虚拟机上已安装的应用程序。 还可以添加 grep 命令来筛选结果,以仅显示包含 apache2
的应用程序。
备注
该 grep
命令在文件中搜索给定的术语。 该工具非常强大,因为它提供了多种选项,例如使用正则表达式或字符串进行搜索、反转搜索结果、忽略区分大小写、使用多个搜索词进行搜索以及递归搜索支持。
运行 apt list --installed | grep apache2
时,应会看到该包未安装在虚拟机上。
安装包
确定已找到所需的包且尚未安装,接下来可以继续安装。 运行以下命令:
sudo apt install apache2
备注
这一次,我们将使用 sudo
命令作为前缀,因为此命令会更改系统。 因此,它必须是正确运行的根帐户。 包管理器足以提示你是否真正想要真正安装应用程序。
键入 Y (是),然后按 Enter 进行安装 Apache2
。 包管理器将显示一个进度栏,用于指示安装的状态。
如果再次运行相同的 apt list --installed | grep apache2
命令,会看到 Apache 2 包与自动安装的一些其他 apache2 相关包一起安装。
虽然已安装 Apache 2,但实际上必须使用 Nginx。 因此,不再需要 Apache,可以从虚拟机中删除该包。
删除包
安装包(在本例中为 Apache 2)是可逆的。 如果确定不需要包,则可以删除该包。 有两个命令选项可用于删除包:
apt remove
:此命令删除二进制文件,但不删除配置文件。 如果打算重新安装包并想要保留相同的配置,则此功能非常有用。apt purge
:此命令删除二进制文件和配置文件。
使用 apt remove
根用户查看结果来删除包。 为此,请运行 sudo apt remove apache2
。 当系统提示你确认删除时,键入 Y,然后按 Enter。
命令输出会告诉你以下信息:
- APT 检测到有自动安装的包,并且不再需要包。
- APT 仅删除了
apache2
包,建议运行sudo apt autoremove
以删除关联的包。
再次列出已安装的包。 你会看到该 apache2
包已删除,但随包一起提供的自动安装的包将保持安装状态。
按照建议再次运行 sudo apt autoremove
以删除剩余包。
再列出已安装的包一次。 现在,应不会安装与 apache2 相关的包。
此过程未完成。 请记住,配置文件 apt remove
的区别在于 apt purge
是否删除配置文件。 在本练习中,你未将其删除。 那么它在哪里?
查找文件不涉及包管理器。 而是对 Linux 中的文件运行标准搜索。 有多种方法可以执行此操作。 最常见的搜索命令之一是 find
。 但是,此命令也令人困惑,因此我们不会在此处讨论。 相反,我们将使用 whereis
。
备注
Linux 记录得很好。 几乎每个命令都有一个有用的帮助页面可用。
使用人与信息命令在 Linux 中显示帮助页。 例如,若要自行了解有关命令的详细信息 find
,请运行 man find
或 info find
。
根据“帮助”页, whereis
定义如下所示:
whereis
找到指定命令名称的二进制文件、源文件和手动文件。
如果运行 whereis apache2
,应找到 /etc/apache2 安装。
请记住, /etc/ 目录是系统配置文件所在的位置。 若要了解“apache2”是文件还是文件夹,请运行 ll /etc/apache2
。 可以看到,这是一个文件夹,其中包含 apache2 配置文件。
你希望 apache2
包含这些文件和文件夹,因为你使用了 apt remove
不删除配置文件的命令。
最后一步,运行 apt purge
命令以查看其效果。 即使删除包,也可以运行清除来清理安装文件夹。 以下屏幕截图显示 whereis
找不到任何内容。 这是因为 purge
命令将配置文件与二进制文件一起删除。
后续步骤
第三方信息免责声明
本文中提到的第三方产品由 Microsoft 以外的其他公司提供。 Microsoft 不对这些产品的性能或可靠性提供任何明示或暗示性担保。