写在前面
本文为早期版本,可能有些许谬误,阅读时请注意甄别。
亲爱的探索者们:
欢迎踏上Linux实践征途!在启程之前,请仔细阅读这份导航手册:
-
知识储备
- ✅ 完整阅读《Linux学习建议》
- ✅ 掌握《Linux培训》核心知识
-
实践价值 每个任务都是真实场景的微缩景观,完成本作业你将收获:
- 🛠️ Linux环境搭建与运维的工程化思维
- 📝 技术文档写作的规范化能力
- 🔍 从报错信息中定位问题的火眼金睛
-
学术准则 允许使用AI工具辅助学习,但必须遵守:
- 🤖 所有AI生成内容必须经过终端验证
- 🚫 禁止直接复制模型输出作为答案
- 📚 引用第三方资源需按相关网站协议要求标注出处和作者。
特别提示:实验室将使用代码查重工具对所有提交内容进行交叉验证,请确保作业的原创性。
第零章
Level 1
- 掌握标准语法(标题/列表/代码块/表格)
- 熟练使用扩展语法(流程图/时序图/LaTeX公式)
- 实践Typora/VSCode等编辑器的进阶功能(目录生成/文档导出 PDF/HTML/版本控制)
Level 2
除了题目的答案,推荐使用 Markdown 详细记录以下内容:
- 操作日志:包含完整终端命令与输出
- 知识注解:对关键步骤添加原理说明
- 问题档案:记录遇到的错误及解决路径(建议使用代码块+注释的混合排版)
P.S. 优秀的笔记可以增加印象分哦~
Level 3(选做)
将记录的 Markdown 内容部署到个人博客系统(如 Wordpress、Typecho、Ghost、Hexo、Hugo、halo 等)。
在编写博客时,如果需要引用其他资料,请按照相关网站协议要求标注出处和作者。
规范要求:
- 添加CC-BY-NC-SA协议声明
- 引用第三方内容时,检查网站授权协议或者在文末"参考资料"规范标注 (示例:[1] TUNA. Ubuntu镜像使用指南[EB/OL]. https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/, 2023)
演示:
https://hs.cnies.org/archives/part0-level1
编译链接
作业提交
提交地址:https://f.wps.cn/g/IF4Q9gbs/
截止时间:2025年2月16日 23:59,过时不候
你需要填写:
- 姓名、学号、QQ号等个人信息
- 作业文件:包含作业答案的 Markdown 文件。请确保图片、超链接等元素链接准确、可被访问。你可以将图片上传到图床,或者将图片和 Markdown 文件一起打包提交,也可以导出 PDF 提交。如果图片无法正常显示将视为未完成。
- 博客地址:选做。需要提交永久可访问的部署链接,如果答案上传到博客可以只上传博客地址。
- 题目完成情况:勾选你完成的题目
第一章
zht想在自己的天选姬上装一个linux系统。
zht查阅资料后发现Ubuntu是生态较好的【发行版】之一,出于学习目的决定使用虚拟机进行安装。zht打开浏览器,在清华大学开源软件镜像站 下载了系统所需要的iso文件,通过搜索【虚拟机软件】得知VMware是其中一款使用广泛的软件。经过简单的教程学习与短暂的载入,zht成功的在虚拟机上安装了Ubuntu!西卡西,桌面空空如也。zht通过快捷键【Ctrl + Alt + T】打开了终端,正式开启了自己的linux之旅。
1.在安装虚拟机时,zht创建了一个名为“youzicha”的用户。在终端中输入
pwd
(也就是print working directory)可以查看当前所处的文件夹,如在桌面时为 /home/youzicha;
2.使用命令
ls
可以查看当前文件夹下的文件等,如 Desktop Documents Downloads etc.;点击图形化桌面上的Home文件夹,可以发现是一致的。
3.此时使用
cd Desktop
命令可以切换文件夹到Desktop下。
4.“我可是要成为linus linux的男人!” zht立马开始编写自己在Ubuntu上的第一个c程序。
他在Desktop文件夹下使用命令
mkdir firstStep
创建了一个名为"firstStep"的新文件夹 。
5.zht早就听过文本编辑器Vim的大名,于是他在终端输入
vim hello211Lab.c
打算使用vim创建并打开一个名叫hello211Lab.c的c文件。
6.发现出现如下信息:Command 'vim' not found, but can be installed with: …… “可恶,原来还要下载吗?vi你这家伙……” 根据提示,zht输入
sudo apt install vim
下载vim并进行下一步操作。
ps:vim的使用
"终于可以开始写代码啦!"zht在hello211Lab.c中输入
#include<stdio.h>
int main(int argc, char *argv[])
{
printf("Hello! My 211Lab!");
return 0;
}
并*退出保存。“不对,我该怎么运行啊?”
7.经过资料查阅,zht知道了.c文件需要编译出可执行文件才能运行。
在安装好gcc后,终端输入
gcc hello211Lab
可以发现产生了新文件 hello211Lab
8.再次输入
./hello211Lab
即可运行程序得到结果 Hello! My 211Lab!
ps:关于main函数参数“int argc, char *argv[]”
此外,命令【echo】也可以进行程序编写。输入 echo
得到 ./Desktop/firstStep/hello211Lab.c 10.他使用【cp】命令为其复制建立了一个后缀名为.bak的副本; 11.在/Desktop下使用【mv】即 *mv firstStep/ . 将所有的文件移动到此处,并使用命令【rm】 删除了自己建立的第一个文件夹。 zht不语,只是一味地看着桌面。他在思考、思考。 良久,良久。 他输入了【touch】(touch finale) 建立了一个名为”finale“的文件。他使用vim在其中写下: 共包含两道日常使用场景的题目,每道题目给出了当前的用户和路径。每道题目可能有一条或者多条指令。 近期,Deepseek 上线了 V3 和 R1 模型火爆全网。陈茗研师姐想要在他的电脑上部署 Deepseek R1 模型,使用 llama.cpp 框架进行推理。 陈茗研师姐的电脑配置如下,请协助完成以下操作: 首先,陈茗研从清华大学镜像站下载 Docker 27.5.1 静态二进制包(https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/static/stable/x86_64/docker-27.5.1.tgz): 解压源码包到 为了让当前用户在不切 root,或者不加 sudo 的情况下正常使用 Docker 命令,陈茗研师姐首先添加了 Docker 用户组 将当前用户添加到用户组 使权限生效 检查是否生效 编辑 添加执行权限并重新加载配置文件 启动 Docker 在 AI 社区 ModelScope 中,DeepSeek R1 模型的 GGUF 格式文件包含以下量化版本的模型 陈茗研师姐的电脑可以运行 llama.cpp 的仓库链接为 https://github.com/ggerganov/llama.cpp.git,他使用下面指令将仓库克隆到本地: 他使用下面指令构建了使用 CUDA 的 llama.cpp: cjgg 的博客宕机了,他想要收集并分析错误信息,整理文件结构,同时生成报告,你们帮他完成这个挑战嘛? 首先,cj 需要从从远程服务器 解压 使用下面命令将 查看了 在所有 对 cjgg 根据日志的信息进行分析后果断找到了问题所在。将修复完成后的日志打包为 有一天,wyh为了完成操作系统的一份大作业,找了一个开源的os项目,他把它clone了下来,并且开始在ubuntu22.04系统中搭配环境,使用apt包管理工具。 首先,他看到了CMakeLists.txt中有对cmake版本号的要求 首先要求cmake的最低版本是3.10,他使用了cmake --version来查看cmake的版本以及其他信息,但是遇到了error 不过,wyh一眼就看出了问题所在,他执行了sudo apt install cmake,便解决了这个问题,并且再次执行cmake --version,了解了软件包中cmake的版本信息 在当前软件包下,cmake的版本号是3.22.1,符合CMakeLists.txt的要求。但是,wyh很好奇,如果错误安装了不符合要求的cmake版本,会发生什么问题,于是他使用wget https://cmake.org/files/v3.9/cmake-3.9.0-Linux-x86_64.tar.gz,tar -zvxf cmake-3.9.0-Linux-x86_64.tar.gz,下载预编译的二进制文件(网址是https://cmake.org/files/v3.9/cmake-3.9.0-Linux-x86_64.tar.gz)解压缩,并且使用 安装了cmake 3.9.0,并且进行编译,遇到了以下错误 提示说,需要cmake 3.10或者更高版本,3.9.0的版本太低,然后他执行了 然后wyh想要确定目录结构是否正确 正确的目录结构 而wyh发现当前的目录结构缺少build文件夹,使用mkdir build创建了该文件夹,使用cd /build进入了该文件夹然后使用camke ..进行编译,生成了 提示: 小明参加了一个比赛,比赛内容是使用yolo进行目标检测,但是小明自己的显卡不足以支持大模型的训练,所以小明选择在某平台租用服务器进行训练。
首先,小明需要将本地的数据集打包成一个压缩文件,他使用tar -cvfz datdsets.tgz datasets 进行压缩,压缩成 有一天,小李想在ubuntu:22.04系统中做一个小实验,因为VM太慢了,所以小李选择在docker中使用docker pull ubuntu:22.04拉取一个ubuntu:22.04的镜像,然后小李使用docker run buntu:22.04运行这个容器,在经过一系列操作后,小李完成了实验,小明使用docker ps -a和dcoker pause 72fa7d384222查看所有容器并且暂停了CONTAINER ID为72fa7d384222的容器,然后,小李使用docker rmi ubuntu尝试删除ubuntu这个镜像,但是他遇到了一个错误 但小李一下子就想到了怎么解决,用docker stop 72fa7d384222和docker rmi ubuntu成功删除了容器和镜像。 你的任务是在 Linux 系统上下载、配置并运行OpenShot。
tips:
下载 AppImage 文件,网址为https://github.com/OpenShot/openshot-qt/releases/download/v3.1.1/OpenShot-v3.1.1-x86_64.AppImage
赋予执行权限
运行 AppImage 文件 你现在获得了一个 Linux中的根目录以外的文件要想被访问,需要将其“关联”到根目录下的某个目录来实现,这种关联操作就是“挂载”,这个目录就是“挂载点”,解除次关联关系的过程称之为“卸载”。 注意:“挂载点”的目录需要以下几个要求: (1)目录事先存在,可以用mkdir命令新建目录; (2)挂载点目录不可被其他进程使用到; (3)挂载点下原有文件将被隐藏。 假如你是一家公司的系统管理员,负责管理公司内部的多台服务器。某天,小智想要通过指令一SSH连接公司内部一台服务器(IP地址:192.168.1.100,用户名为zht),却发现无法连接,且该服务器上的Web服务也无法访问,所以你首先输入指令二查看所有网络接口信息,之后用指令三检查了网络的连通性,又通过指令四和指令五扫描检查服务器的SSH端口和HTTP端口是否开放,并输入指令六(请使用 >> <file></em></strong> 可以实现同样的效果,请注意:<strong>></strong> 会覆盖文件中的内容 ;而 <strong>>></strong> 则在文件末尾追加内容</p>
<p>命令【<strong><em>cat</em></strong>】可以输出文件中的信息,如 <strong><em>cat hello211Lab.c</em></strong> 会直接得到上述代码块中的内容。</p>
<hr />
<p>…………</p>
<p><strong>多年以后,当面对眼前的电脑,zht书记将会想起编写hello211Lab.c的那个下午。</strong></p>
<p>9.zht书记在 <strong>/home/youzicha</strong> 下使用命令【<strong>find</strong>】查找他在linux上所编写第一个c程序,不过他已记不清楚文件的全名,只知道是以Lab为结尾的c程序。</p>
<pre><code>find /home/youzicha f -name '*Lab.c'
cp hello211Lab.c hello211Lab.bakrm -r firstStep***万物迎春送残腊,一年结局在今宵。***第二章
Deepseek R1
一、安装 Docker
7uHeck@LAPTOP-114514:~$ wget https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/static/stable/x86_64/docker-27.5.1.tgz/opt/docker7uHeck@LAPTOP-114514:~$ sudo mkdir -p /opt/docker
7uHeck@LAPTOP-114514:~$ sudo tar -xvzf docker-27.5.1.tgz -C/opt/docker7uHeck@LAPTOP-114514:~$ sudo groupadd docker7uHeck@LAPTOP-114514:~$ sudo usermod -aG docker $USR7uHeck@LAPTOP-114514:~$ newgrp docker7uHeck@LAPTOP-114514:~$ docker --version/etc/systemd/system/docker.service 加入下面内容,然后通过 _____ 操作完成了保存并退出。此时已经将 Docker 注册为 service 服务。7uHeck@LAPTOP-114514:~$ vim /etc/systemd/system/docker.service
# 然后加入了下面内容
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
Type=notify
ExecStart=/opt/docker/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target7uHeck@LAPTOP-114514:~$ sudo chmod +x /opt/docker/dockerd7uHeck@LAPTOP-114514:~$ sudo systemctl daemon-reload二、下载模型
___ 参数的模型。三、在 Docker 中部署和使用 llama.cpp
7uHeck@LAPTOP-114514:~$ git clone https://github.com/ggerganov/llama.cpp.git7uHeck@LAPTOP-114514:llama.cpp$ docker build -t local/llama.cpp:full-cuda --target full -f .devops/cuda.Dockerfile .
7uHeck@LAPTOP-114514:llama.cpp$ docker run --gpus all -v ~/models:/models local/llama.cpp:full-cuda --run -m /models/?B/ggml-model-q4_0.gguf -p "Building a website can be done in 10 simple steps:" -n 512 --n-gpu-layers 1服务器运维日常
www.galaxry.top 的 114514 端口用户 GalaxryX300 的 /home/GalaxryX300/logs 目录下载压缩包 web_logs.tar.gz 到本地 /home/angel/logs,他使用了下面指令创建并将文件传输到本地:angel@LAPTOP-114514:~$ scp -P 114514 GalaxryX300@www.galaxry.top:/home/GalaxryX300/logs/web_logs.tar.gz /home/angel/logsweb_logs.tar.gz,生成目录 web_logs,删除原压缩包:angel@LAPTOP-114514:~$ tar -xvzf /home/angel/logs/web_logs.far.gz -C /home/angel/logs
angel@LAPTOP-114514:~$ rm /home/angel/logs/web_logs.far.gzweb_logs 目录的树状结构输出到 /home/angel/logs/dir_tree.txt:angel@LAPTOP-114514:~$ tree /home/angel/logs/web_logs >/home/angel/logs/dir_tree.txtweb_logs 目录结构,cjgg 决定在 web_logs 目录中查找所有扩展名为 .log 的文件,并使用 file 命令确认它们的类型:angel@LAPTOP-114514:~$ find /home/angel/logs/web_logs f -name "*.log" file {} \;.log 文件中搜索包含 ERROR 的行,将结果保存到 /opt/logs/error_summary.txt,然后统计 error_summary.txt 的总行数:angel@LAPTOP-114514:~$ grep -r "ERROR" /home/angel/logs/web_logs/*.log > /opt/logs/error_summary.txt
angel@LAPTOP-114514:~$ wc -l opt/logs/error_summary.txterror_summary.txt 按字母顺序排序,去重后统计每种错误出现的次数,结果保存为 error_stats.txt:angel@LAPTOP-114514:~$ sort /opt/logs/error_summary.txt | uniq -c > /opt/logs/error_stats.txtweb_logs_fixed.tar.gz,进行一系列分析后得到了 error_summary_fixed.txt。cjgg 将它对比原始 error_summary.txt,输出差异到 diff_result.txt: angel@LAPTOP-114514:~$ diff /opt/logs/error_summary.txt /opt/logs/error_summary_fixed.txt > /opt/logs/diff_result.txt第三章
cmake_minimum_required(VERSION 3.10)
project(AdvancedOS)N: Unable to locate package cmake
N: Unable to locate package cmake
E: No packages foundPackage: cmake
Version: 3.22.1-1ubuntu1.22.04.2
Priority: optional
Section: devel
Origin: Ubuntuexport PATH=pwd/cmake-3.9.0-Linux-x86_64/bin:$PATH添加了环境变量。CMake Error at CMakeLists.txt:1 (cmake_minimum_required):
CMake 3.10 or higher is required. You are running version 3.9.0
-- Configuring incomplete, errors occurred!rm -rf cmake-3.9.0-Linux-x86_64,删除了cmake,并且使用wget https://cmake.org/files/v3.9/cmake-3.9.0-Linux-x86_64.tar.gz重新下载了cmake 3.22.1版本,并且使用sudo apt install build-essential qtbase5-dev qtbase5-dev-tools libqt5charts5-dev安装了一系列依赖build-essential qtbase5-dev qtbase5-dev-tools libqt5charts5-devAdvancedOS/
├── CMakeLists.txt
├── include/
│ ├── kernel.h
│ ├── advanced_kernel.h
│ ├── network.h
│ ├── user_auth.h
│ ├── disk_manager.h
│ ├── logger.h
│ └── mainwindow.h
├── src/
│ ├── kernel.cpp
│ ├── advanced_kernel.cpp
│ ├── network.cpp
│ ├── user_auth.cpp
│ ├── disk_manager.cpp
│ ├── logger.cpp
│ ├── mainwindow.cpp
│ └── main.cpp
└── build/Makefile构建文件,最后使用make ..,读取 Makefile 文件中的规则,决定哪些文件需要重新编译,并执行相应的命令来生成目标文件(如可执行文件、库文件等),完成了这项大作业。cmake需要 CMakeLists.txt,make 需要 Makefile.tgz格式,并且使用scp -P 45847 datasets.taz root@i-2.gpushare.com:/hy-tmp,使用ssh传输协议,上传到服务器端口号为45847,用户为root,主机名为i-2.gpushare.com,本地相对路径为datasets,远地服务器路径为/hy-tmp。上传之后,请使用tar -xzfv /hy-tmp/datasets.tgz -C /hy-tmp对压缩文件进行解压缩,然后小明需要对数据集进行处理,他编写了test.py,并运行,因为小明还要处理其他事情,使用他使用nohup python test.py&在后台运行,并得知了此进程的作业ID:[1]和进程ID:[7520]。运行之后,小明想看一下当前运行的所有进程,于是使用了ps aux。但是,粗心的小明忽然想起自己犯了一个错误,使用kill 7520结束了该进程,修改错误后,重新运行,处理好数据集后,小明便开始训练模型了,训练完成后,小明使用scp -P 45847 datasets.taz root@i-2.gpushare.com:/hy-tmp/ultralytics/runs/detect/train1 result/从远程服务器将训练结果传输到本地,远程服务器地址为/hy-tmp/ultralytics/runs/detect/train1,本地相对路径为result,小明发现训练结果还不错,就结束了训练。Error response from daemon: conflict: unable to remove repository reference "ubuntu" (must force) - container 72fa7d384222 is using its referenced image b1d9df8ab815wget https://github.com/OpenShot/openshot-qt/releases/download/v3.1.1/OpenShot-v3.1.1-x86_64.AppImage
chmod +x OpenShot-v3.1.1-x86_64.AppImage
./OpenShot-v3.1.1-x86_64.AppImagemyiso.iso文件,你需要将其挂载到/mnt/iso目录下,注意该目录现在是不存在的,使用指令一和指令二完成这一步,在处理完成后,你还需要使用指令三解除挂载sudo makdir /mnt/iso
sudo mount -o loop myiso.iso /mnt/iso
sudo unmount /mnt/isoiproute2工具集中的命令)显示所有监听端口。假设服务器使用的是iptables作为防火墙工具,使用指令七查看当前防火墙规则(以root身份),并使用指令八添加规则允许SSH连接。如果HTTP端口开放但Web服务仍然无法访问,使用指令九检查httpd服务的状态,并使用指令十启动httpd服务。之后使用指令十一抓取服务器(网络接口为ens33)的网络流量,分析是否有异常流量或攻击行为。1.ssh zht@192.168.1.100
2.ip addr show
3.ping 192.168.1.100
4.nmap -p 192.168.1.100
5.nmap -p 80 192.168.1.100
6.ss -tuln
7.sudo iptables -L
8.sudo iptables -A INPUT -p tup --dport 22 -j ACCEPT
9.sudo systemctl status httpd
10.sudo systemctl start httpd
11.sudo systemctl -i ens33
Comments NOTHING