实践部分:
文章目录
介绍
恭喜!你刚刚被 Google 公司聘为初级系统管理员,这是一家快速发展的科技初创公司。这是你第一天上班,你的主管指派你负责公司迄今为止最雄心勃勃的项目:"凤凰计划"------一款革命性的应用程序,它将彻底改变企业管理数字化工作流程的方式。
你的首要任务是了解凤凰计划的开发服务器的"地形"。这需要进行必要的侦察,以了解系统的身份、用户以及当前的运行状态。
在本次挑战中,你将使用基本的 Linux 命令来收集有关新环境的关键信息。你将识别你的用户帐户,检查系统详细信息,查看其他登录用户,检查用户和群组信息,监控实时性能,并将你的发现汇编成一份综合报告。
此次初步评估将作为凤凰计划未来所有工作的基础。您今天的细致工作将确保项目明天的成功。
Day1:地形
首次登录和环境检查
在新系统上,你的第一步是验证你的身份和操作系统的基本特性。这可以确认你的身份和你正在使用的是正确的设备。
任务
找出当前用户的用户名。
显示操作系统的内核名称。
要求
所有命令都必须在终端中执行。
使用whoami命令来识别当前用户。
使用该uname命令显示内核名称。
示例
完成此步骤后,您应该看到类似以下内容的输出:
bash
# Command output showing current user
labex
# Command output showing kernel name
Linux
这些结果确认了您作为labexLinux 系统用户的身份,这对于建立您的工作环境至关重要。

检查系统信息和正常运行时间
确认自身身份后,了解完整的系统环境以及运行时间非常重要。这些信息对于系统监控和维护规划至关重要。
任务
显示全面的系统信息,包括操作系统详细信息、内核版本和硬件架构。
检查系统运行的时间以及当前系统负载。
要求
使用该uname -a命令显示所有系统信息。
使用该uptime命令显示系统正常运行时间和平均负载。
示例
运行所需的命令后,您应该看到类似以下内容的输出:
bash
# Comprehensive system information
Linux labex-virtual-machine 5.15.0-76-generic #83-Ubuntu SMP Thu Jun 15 19:16:32 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
# System uptime and load information
14:51:52 up 183 days, 2:55, 0 users, load average: 6.02, 1.80, 0.94
第一个输出显示了详细的系统信息,包括内核版本、主机名和体系结构。第二个输出表明系统已运行 183 天,当前平均负载显示了不同时间段的系统性能。
提示
该uname -a命令在一行中显示所有可用的系统信息。
该uptime命令显示系统运行了多长时间、用户数量以及系统平均负载。
系统负载平均值表示 1、5 和 15 分钟内的平均系统负载。

收集用户和组详细信息
了解用户的权限至关重要。您需要知道您的用户 ID (UID)、主组 ID (GID) 以及您所属的任何其他组,因为这些决定了您在系统上的访问权限。
任务
显示当前用户帐户的详细用户和组信息。
要求
使用id命令检索您的用户和组标识符。
示例
当您运行所需的命令时,您应该看到类似以下内容的输出:
bash
uid=5000(labex) gid=5000(labex) groups=5000(labex),27(sudo),121(ssl-cert),5002(public)
此输出显示:
uid=5000(labex):您的用户 ID 为 5000,用户名为"labex"
gid=5000(labex):您的主组 ID 为 5000,组名为"labex"
groups=...:您属于多个组,包括"sudo"(管理权限)、"ssl-cert"(SSL 证书访问)和"public"(共享资源)
了解这些权限对于了解您可以访问和修改哪些系统资源至关重要。
提示
当不带任何参数运行时,该id命令默认显示当前用户的信息。
输出将清楚地标记 UID、GID 和补充组

监控实时系统性能
系统侦察的一个关键部分是观察其当前性能。这包括检查 CPU 和内存使用情况,以及查看哪些进程正在运行。该top命令是执行此任务的标准工具。
任务
启动交互式系统监控工具来查看活动进程和资源使用情况。
观察输出片刻后退出该工具。
要求
使用top命令启动监控界面。
top运行完成后,按q键退出并返回命令提示符。
示例
当您启动系统监控工具时,您将看到类似于以下内容的动态显示:
bash
top - 10:45:00 up 1:15, 1 user, load average: 0.00, 0.01, 0.05
Tasks: 123 total, 1 running, 122 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.1 us, 0.1 sy, 0.0 ni, 99.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 1987.2 total, 890.5 free, 540.1 used, 556.6 buff/cache
MiB Swap: 2048.0 total, 2048.0 free, 0.0 used. 1234.5 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 169404 12920 8584 S 0.0 0.6 0:01.50 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
...
该显示屏显示:
系统摘要:当前时间、正常运行时间、用户和平均负载
任务摘要:总进程及其状态(运行、休眠等)
CPU 使用率:按类别细分 CPU 利用率
内存使用情况:总内存、空闲内存、已用内存和可用内存
进程列表:按 CPU 使用率排序的正在运行的进程,包括 PID、用户和资源消耗
显示每隔几秒自动更新一次,提供实时系统监控。
提示
top提供正在运行系统的动态实时视图。它会自动刷新。
关键q是退出程序的标准方法top。

生成系统状态报告
最后,您将把发现整合到一个简单的文本文件中。这是记录系统在特定时间点状态的常见做法。您将使用输出重定向将多个命令的输出保存到单个文件中。
任务
system_report.txt在当前目录中创建一个名为的文件( ~/project)。
whoami该文件必须包含、uname -a(所有系统信息)和命令的输出uptime。
要求
最终报告文件必须命名为system_report.txt。
您必须使用输出重定向运算符(>和>>)将命令输出写入文件。
必须在目录中创建该文件~/project。
示例
完成此步骤后,您的system_report.txt文件应包含类似以下内容的输出:
bash
labex
Linux labex-virtual-machine 5.15.0-76-generic #83-Ubuntu SMP Thu Jun 15 19:16:32 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
10:50:01 up 1:20, 1 user, load average: 0.00, 0.01, 0.05
该报告文件表明:
第 1 行:当前用户身份(来自whoami命令)
第 2 行:完整的系统信息,包括内核版本、主机名和架构(来自uname -a命令)
第 3 行:系统正常运行时间和当前平均负载(来自uptime命令)
该文件是系统当前状态的快照,对于文档记录和故障排除非常有用。您可以cat在创建后使用命令验证文件内容。
提示
使用>运算符重定向第一个命令的输出。这将创建文件(如果文件已存在,则覆盖它)。
使用>>运算符将后续命令的输出附加到文件而不删除其现有内容。
该uptime命令显示系统已运行多长时间。

概括
干得漂亮!您顺利完成了在 Google 公司的第一天工作,并为凤凰计划奠定了基础。
在本次挑战中,您练习了使用每个系统管理员必须掌握的几个基本命令:
whoami:在 Project Phoenix 服务器上确认您的用户身份。
uname:检查操作系统信息并确保兼容性。
who:查看还有谁在开发服务器上工作。
id:检查您的用户和组成员资格以获得正确的访问控制。
top:监控系统进程和资源使用情况,以确保最佳性能。
输出重定向(>和>>):在专业报告中记录您的发现。
这些命令构成了您的系统管理员工具包的基础。您今天的全面评估已为 Project Phoenix 环境做好了准备,为接下来激动人心的开发工作做好了准备。明天,您将以数字架构师的身份开始组织项目的文件结构!
介绍
欢迎来到 Google 公司的第二天!昨天系统侦察工作取得成功后,您已晋升为凤凰计划的数字架构师。您详尽的文档记录和对细节的关注给开发团队留下了深刻的印象。
然而,有一个紧急问题需要您立即关注。前任系统管理员突然离职,凤凰计划的文件一片混乱。源代码、文档和配置文件都散落在同一个目录中。关键设置如果没有备份,很容易受到攻击,而且过期的日志文件也让您昨天检查过的开发服务器变得杂乱无章。
你的任务是构建一个简洁、逻辑清晰、高效的文件结构,以支持不断壮大的开发团队。通过创建合理的目录、组织文件、保护备份以及清理旧数据,你将为凤凰计划的成功奠定基础。
首席开发人员 Sundar Pichai 指望你把这片混乱的开发环境打造成一个井然有序、专业的开发环境。你今天的工作将直接影响团队的生产力和项目的进度。让我们开始吧!
Day2: 数字架构师
设置项目目录结构
您的首要任务是在目录中创建合适的目录结构phoenix_project。良好的目录结构可以区分不同类型的文件,使项目更易于导航和维护。
任务
导航到~/project/phoenix_project目录。
创建三个新的子目录:src用于源代码、config用于配置文件和docs用于文档。
要求
所有新目录都必须在目录内创建~/project/phoenix_project。
目录名称必须正好是src、、config和docs。
您应该使用单个命令同时创建所有三个目录。
示例
完成此步骤后,您的目录结构应如下所示:
bash
~/project/phoenix_project/
├── config/
├── docs/
├── src/
├── README.md
├── config.json
└── main_app.py
ls -F当您在目录中运行时~/project/phoenix_project,您应该看到:
bash
README.md config/ config.json docs/ main_app.py src/
/目录名称后面的符号表示它们是目录,而不是文件。
-F命令中的选项用于ls在每个文件名后附加一个字符,以指示文件的类型。以下是一些常见的指示符:
/目录名称末尾的A
*可执行文件末尾的A
@符号链接末尾的A
|命名管道末尾的A
例如,运行ls -F可能会产生如下输出:
bash
file1.txt file2.txt* directory1/ symlink@
这有助于您快速识别目录中的文件类型。
提示
使用cd命令更改当前目录。
该mkdir命令用于创建新目录。
mkdir可以接受多个参数来一次创建多个目录。

导航和创建项目文件
新的目录结构完成后,就可以将现有项目文件移到它们指定的目录了。这将清理项目的根目录,使文件更容易找到。
任务
将文件移动main_app.py到src目录中。
将文件移动config.json到config目录中。
将文件移动README.md到docs目录中。
要求
~/project/phoenix_project在执行移动操作之前,请确保您位于目录中。
使用mv命令重新定位每个文件。
示例
移动文件后,您的项目结构应如下组织:
bash
~/project/phoenix_project/
├── config/
│ └── config.json
├── docs/
│ └── README.md
└── src/
└── main_app.py
当您ls -F在根~/project/phoenix_project目录中运行时,它应该只显示目录:
bash
config/ docs/ src/
bash
在这里插入代码片
每个文件现在应该位于其相应的子目录中:
ls src/→main_app.py
ls config/→config.json
ls docs/→README.md
提示
该mv命令用于移动或重命名文件和目录。
基本语法是mv [SOURCE] [DESTINATION]。
例如,要移动file.txt到名为 的目录documents,您可以使用mv file.txt documents/。
注意: .代表当前目录, ... 代表父级目录.

备份关键配置文件
该config.json文件包含 Project Phoenix 的关键设置。在进行任何修改之前,创建备份是至关重要的安全措施。您的下一个任务是创建此文件的副本。
任务
创建该文件的备份副本config.json。
要求
必须在目录内创建备份文件~/project/phoenix_project/config/。
备份文件必须准确命名config.json.bak。
示例
创建备份后,您的config目录应包含两个文件:
bash
~/project/phoenix_project/config/
├── config.json
└── config.json.bak
ls当您在目录中运行时~/project/phoenix_project/config/,您应该看到:
bash
config.json config.json.bak
两个文件应该具有相同的内容,因为该.bak文件是原始文件的精确副本:
bash
# These commands should show identical output
cat config.json
cat config.json.bak
提示
该cp命令用于复制文件和目录。
语法是cp [SOURCE] [DESTINATION]。
您需要提供源文件的完整路径和新备份文件的完整路径。

重组团队共享资源
你发现了谜题的另一部分:一个名为shared_docs 的目录,位于~/project/shared_docs。该目录包含重要的团队指南和 API 规范,它们与项目的其他文档并列。你的任务是将其集成到主项目结构中。
任务
将整个shared_docs目录及其所有内容移动到~/project/phoenix_project/docs/目录中。
要求
源目录是~/project/shared_docs。
目标路径是~/project/phoenix_project/docs/。
必须移动整个目录,而不仅仅是其内容。
示例
移动目录后shared_docs,您的文档结构应如下所示:
bash
~/project/phoenix_project/docs/
├── README.md
└── shared_docs/
├── api_spec.doc
└── team_guidelines.txt
ls当您在目录中运行时~/project/phoenix_project/docs/,您应该看到:
bash
README.md shared_docs/
该shared_docs目录应包含其所有原始文件:
bash
ls ~/project/phoenix_project/docs/shared_docs/
bash
api_spec.doc team_guidelines.txt
原始位置~/project/shared_docs应该不再存在。
提示
该mv命令对目录的作用与对文件的作用相同。
当您移动目录时,其所有内容都会自动随之移动。
该命令将类似于mv [SOURCE_DIRECTORY] [DESTINATION_DIRECTORY]。

归档和删除过期的日志文件
您的最后一项任务是进行一些日常维护。~/project/logs目录中正在累积日志文件,而 2023 年之后的日志文件已不再用于日常操作。为了节省空间并保持整洁,您需要将这些旧日志压缩为一个归档文件,然后删除原始文件。
任务
导航到~/project/logs目录。
创建一个名为old_logs.tar.gz 的压缩 tar 档案,其中包含自 2023 年以来的所有日志文件。
归档成功创建后,删除刚刚归档的原有2023个日志文件。
要求
最终档案必须准确命名old_logs.tar.gz。
档案必须位于~/project/logs目录中。
2023只有名称中包含的日志文件才应该被存档并随后被删除。
自 2024 年 ( ) 起的日志文件app_2024-05-01.log不得包含在存档中,也不得删除。
示例
归档之前,您的日志目录包含:
bash
~/project/logs/
├── app_2023-01-15.log
├── app_2024-05-01.log
└── db_2023-02-20.log
完成归档任务后,您的日志目录应如下所示:
bash
~/project/logs/
├── app_2024-05-01.log
└── old_logs.tar.gz
ls当您在目录中运行时~/project/logs/,您应该看到
bash
app_2024-05-01.log old_logs.tar.gz
提示
使用该tar命令创建存档。选项-czf组合非常强大:(c创建)、z(使用 gzip 压缩)和f(指定文件名)。
您可以使用通配符 ( ) 选择与某个模式匹配的多个文件。例如, _2023-*.log将匹配所有以 结尾的.log文件_2023-。
该rm命令用于移除(删除)文件。使用通配符时请小心!

概括
出色的工作,数字架构师!您成功地将凤凰项目从混乱的开发环境转变为井然有序的开发环境。Sundar Pichai 和整个开发团队都对您的工作感到非常满意。您构建了合理的目录结构,组织了关键文件,通过备份保护了配置,并通过归档旧日志清理了系统资源。
这些基本的 Linux 命令行技能mkdir------ 、mv、cp、tar和rm------构成了专业系统管理的支柱。您今天的组织工作奠定了坚实的基础,将为 Phoenix 项目的整个开发生命周期提供支持。
开发团队现在可以在结构合理的环境中高效工作了。明天,当团队遇到第一个技术问题时,你将作为日志调查员接受新的挑战。你的系统化组织方法将帮助你更好地解决问题!