diff --git a/docs/L0/linux/readme.md b/docs/L0/linux/readme.md
new file mode 100644
index 000000000..788dcb501
--- /dev/null
+++ b/docs/L0/linux/readme.md
@@ -0,0 +1,1079 @@
+# Linux+InternStudio 关卡
+
+
+
+
+😀Hello大家好,欢迎来到**书生大模型**实战营,这里是实战营为第一次参加实战营同学,和来自各个行业的没有Linux基础知识的同学准备的基础课程,在这里我们会教大家如何使用**InternStudio开发机**,以及掌握一些基础的**Linux知识**,让大家不至于在后面的课程中无从下手,希望对大家有所帮助。在这里[关卡任务](./task.md)中为大家准备了一些关卡任务,当大家完成必做关卡任务并打卡后,就会获得当前关卡的算力奖励了,**让我们开始吧!**
+
+## 1. InternStudio开发机介绍
+
+InternStudio 是大模型时代下的云端算力平台。基于 InternLM 组织下的诸多算法库支持,为开发者提供开箱即用的大语言模型微调环境、工具、数据集,并完美兼容 🤗 HugginFace 开源生态。
+
+如果大家想了解更多关于InternStduio的介绍的话可以查看下面的文档:[ InternStudio](https://aicarrier.feishu.cn/wiki/GQ1Qwxb3UiQuewk8BVLcuyiEnHe)
+
+https://studio.intern-ai.org.cn/
+
+首先打开上面的链接进入InternStudio,完成登录会自动跳转到控制台界面,如下图所示:
+
+
+
+
+下面给大家讲一下每一个序号对应页面的功能:
+
+①. 在这里可以创建**开发机**,以及修改开发机配置和查看相关日志等。
+
+
+
+
+②. 这里可以**可视化**查看开发机中的文件及文件夹,而且如果你创建了两个开发机,那么他们使用的云盘是一个。(因为每一个开发机都是一个Docker 容器,存储云盘挂载的都是一个,关于专业名词解释可以看:[ 专业名词解释](https://aicarrier.feishu.cn/wiki/Uyvuwtvnjipsr3kaRUdc9PKvnZd))在这里你可以上传文件或者文件夹,以及创建文件,还可以查看隐藏文件。
+
+
+
+
+③. 这是开发机新增的功能,如果大家要做项目的话,可以向小助手申请资源,团队的功能是所有成员**共享算力资源**,避免造成资源浪费。(毕竟烧的可都是💴啊)
+④. 这里是用来配置**SSH密钥**的,我们在后面会讲到如何使用。
+⑤. 最后这个地方是来编辑你的个人信息的,以及查看你**算力资源**的具体使用。
+
+上面就是InternStudio平台的简单介绍,下面让我们来看一下如何创建开发机,我们来到首页,点击“**创建开发机**”
+
+
+
+
+这里我们选择创建**个人开发机**,名称为**test**,**Cuda**版本为12.2,**资源配置**选择10%,时长默认就行。
+
+创建完成以后在**开发机**界面可以看到刚刚创建的开发机,点击进入开发机。
+
+
+
+
+进入开发机以后可以看到开发机的主页面,开发机有三种模式可以选择:**JupyterLab、终端和VScode**
+
+
+
+
+其中:
+
+①. **JupyterLab**:一个交互式的编程和教学环境,同时内置终端,可以很方便地查看文件,执行代码等
+②. **终端**(Terminal, 最轻量级):主要进行命令行操作,或者运行脚本和简单程序
+③. **VSCode**:网页中集成的VSCode,也可以在本地VSCode中通过SSH连接远程开发,下面就会讲如何配置远程连接。
+
+
+
+
+4. 这个是资源使用情况,在后续的课程中会使用到。
+
+## 2. SSH及端口映射
+
+上面我们介绍了**InternStudio平台**,以及如何创建开发机,这一小节,我们要了解什么是**SSH**、**为什么使用远程连接**、如何使用SSH**远程连接**开发机、什么是**端口映射**以及如何进行**端口映射**。
+
+### 2.1 什么是SSH?
+
+**SSH**全称Secure Shell,中文翻译为安全外壳,它是一种**网络安全协议**,通过加密和认证机制实现安全的访问和文件传输等业务。SSH 协议通过对网络数据进行加密和验证,在不安全的网络环境中提供了安全的网络服务。
+
+SSH 是(C/S架构)由**服务器**和**客户端**组成,为建立安全的 SSH 通道,双方需要先建立 TCP 连接,然后协商使用的版本号和各类算法,并生成相同的**会话密钥**用于后续的对称加密。在完成用户认证后,双方即可建立会话进行数据交互。
+
+那在后面的实践中我们会**配置SSH密钥**,配置密钥是为了当我们远程连接开发机时不用重复的输入密码,那**为什么要进行远程连接呢**?
+
+远程连接的好处就是,如果你使用的是远程办公,你可以通过SSH远程连接开发机,这样就可以在本地进行开发。而且如果你需要跑一些本地的代码,又没有环境,那么远程连接就非常有必要了。
+
+### 2.2 如何使用SSH远程连接开发机?
+
+#### 2.2.1 使用密码进行SSH远程连接
+
+首先我们使用输入密码的方式进行SSH远程连接,后面我们会讲如何配置免密登录。
+
+当完成开发机的创建以后,我们需要打开自己电脑的powerShell终端,使用**Win+R**快捷键打开运行框,输入powerShell,打开powerShell终端。(如果你是Linux或者Mac操作系统,下面的步骤都是一样的)
+
+我们回到开发机平台,进入**开发机**页面找到我们创建的开发机,点击**SSH连接**。
+
+
+
+
+
+
+
+> 然后复制**登录命令**,这里的37367是开发机所使用的SSH端口,一般使用的都是22端口,没有这个端口号的话是连不上SSH的,并且每个人的端口都不一样,所以如果大家在连接开发机时出现连不上的情况,那就需要检查一下是不是端口错了。
+
+将复制的命令粘贴到powershell中,然后回车,这里我们需要输入密码,我们将登录命令下面的密码复制下来,然后粘贴到终端中,这里密码粘贴密码是不显示的,这是正常的。
+
+> 注意:powershell使用鼠标右键进行粘贴。
+
+最后回车出现以下内容就代表成功了:
+
+
+
+
+
+
+
+当我们连接上开发机以后,可以使用`hostname`查看开发机名称,使用`uname -a`查看开发机内核信息,使用`lsb_release -a`查看开发机版本信息,使用`nvidia-smi`查看GPU的信息,这些命令我们后面都会讲到,如果想要退出远程连接,输入两次`exit`就可以了。
+
+#### 2.2.2 配置SSH密钥进行SSH远程连接(可选)
+
+但是在我们开发学习的时候,每次远程都输入密码比较麻烦,我们可以设置SSH key来跳过输入密码这一步骤,在ssh命令中我们可以使用**ssh-keygen**命令来生成密钥
+
+> 如果大家计算机的用户名是中文的,InternStudio会识别不了,这种情况就需要用密码来登录SSH,不过不影响使用,大家不用担心。
+
+> SSH密钥是一种安全便捷的登录认证方式,用于在SSH协议中进行身份验证和加密通信。
+
+**ssh-keygen**支持RSA和DSA两种认证密钥。
+
+常用参数包括:
+
+- -t:指定密钥类型,如dsa、ecdsa、ed25519、rsa。
+- -b:指定密钥长度。
+- -C:添加注释。
+- -f:指定保存密钥的文件名。
+- -i:读取未加密的ssh-v2兼容的私钥/公钥文件。
+
+这里我们使用RSA算法生成密钥,命令为:
+
+```Bash
+ssh-keygen -t rsa
+```
+
+输入命令后**一路回车**就可以了,这里的密钥默认情况下是生成在`~/.ssh/`目录下的,`~`表示的是家目录,如果是windows就是`C:\Users\{your_username}\`。在powerShell中可以使用`Get-Content`命令查看生成的密钥,如果是linux操作系统可以使用`cat`命令。
+
+
+
+
+
+然后我们回到开发机平台,在首页点击配置**SSH Key**,接着点击**添加SSH公钥**,
+
+
+
+
+
+
+
+将刚刚生成的密钥复制下来,粘贴到公钥框中,名称会被自动识别到,最后点击立即添加,SSH Key就配置完成了。
+
+
+
+
+完成SSH Key创建以后,重启**终端**进行远程连接,就会跳过密码输入这一步了。
+
+#### 2.2.3 使用VScode进行SSH远程连接
+
+当然也可以使用SSH远程连接软件,例如:**Windterm、Xterminal**等。这里我们使用VScode进行远程连接,使用VScode的好处是,本身它就是代码编辑器,进行代码修改等操作时会非常方便。
+
+如果要在VScode中进行远程连接,我们还需要安装一套插件,如何安装VScode大家可以网上搜索一下非常简单。
+
+
+
+
+如果你已经安装好了VScode,可以在点击左侧的扩展页面,在搜索框中输入“SSH”,第一个就是我们要安装的插件,点开它“Install”就可以了。
+
+
+
+
+安装完成插件以后,点击侧边栏的远程连接图标,在SSH中点击“+”按钮,添加开发机SSH连接的登录命令。
+
+
+
+
+我们将登录命令复制下来,然后将命令粘贴到弹出的窗口中,最后回车:
+
+
+
+
+
+
+
+配置文件这一块默认就好,当然你也可以自定义,下面是配置文件的具体内容:(这里包括了你所有远程连接过的信息)
+
+```Bash
+Host ssh.intern-ai.org.cn #主机ip也可以是域名
+ HostName ssh.intern-ai.org.cn #主机名
+ Port 37367 #主机的SSH端口
+ User root #登录SSH使用的用户
+ StrictHostKeyChecking no
+ UserKnownHostsFile /dev/null
+```
+
+> 后面的一些配置选项,如果想要手动添加就需要按照上面的格式对相应部分进行修改。
+>
+> 如果将*`StrictHostKeyChecking`*` no`和*`UserKnownHostsFile`*` /dev/null`删除掉会跳出指纹验证的弹窗:
+>
+> 
+>
+> `StrictHostKeyChecking no`表示禁用严格的主机密钥检查。这意味着当连接到一个新的 SSH 服务器时,不会严格验证服务器的主机密钥,可能会带来一定的安全风险。
+>
+> `UserKnownHostsFile /dev/null`则是将用户已知的主机密钥文件设置为 /dev/null ,这实质上是忽略了对已知主机密钥的记录和使用。
+>
+> 但是在一般的安全实践中,不建议随意禁用严格的主机密钥检查。
+
+然后在右下角弹出来的提示窗口中点击“连接”就可以远程到开发机中了。
+
+
+
+
+
+
+
+远程连接完成以后,可以选择打开的文件夹,也可以称为工作目录,你可以选择开发机中的也可以选择本地的,开发机中的文件夹,就是我们前面提到的**云盘**。
+
+当下一次进行远程连接的时候,就不需要输入登录命令等信息了,只需要打开vscode的远程连接就可以看到第一次连接的开发机信息,下面的`root`代表我们第一连接开发机时使用的是`/root`工作目录。
+
+
+
+
+并且下图中的`->`表示进入开发机后需要重新选择工作目录:
+
+
+
+
+而下图中的`->`表示进入上一次开发机选择的工作目录:
+
+
+
+
+每次选择的工作目录都会在这个开发机信息下面显示:(这里就多了一个lagent的工作目录)
+
+
+
+
+下面我们来介绍一下什么时**端口映射**。
+
+### 2.3. 端口映射
+
+#### 2.3.1 什么是端口映射?
+
+**端口映射**是一种网络技术,它可以将外网中的任意端口映射到内网中的相应端口,实现内网与外网之间的通信。通过端口映射,可以在外网访问内网中的服务或应用,实现跨越网络的便捷通信。
+
+那么我们使用开发机为什么要进行端口映射呢?
+
+因为在后续的课程中我们会进行模型**web_demo**的部署实践,那在这个过程中,很有可能遇到web ui加载不全的问题。这是因为开发机Web IDE中运行web_demo时,直接访问开发机内 http/https 服务可能会遇到代理问题,外网链接的**ui资源**没有被加载完全。
+
+所以为了解决这个问题,我们需要对运行web_demo的连接进行端口映射,将**外网链接映射到我们本地主机**,我们使用本地连接访问,解决这个代理问题。下面让我们实践一下。
+
+
+
+
+我们先根据一个图了解一下开发机端口映射是如何工作的:
+
+> 下面会有实践步骤这里先理解如何进行端口映射的
+
+```Bash
+ssh -p 37367 root@ssh.intern-ai.org.cn -CNg -L 7860:127.0.0.1:7860 -o StrictHostKeyChecking=no
+```
+
+上面是一个端口映射命令,在主机上运行该命令即可进行端口映射,下面用一个流程图了解端口映射的过程:
+
+
+
+
+
+> 个人PC会远程连接到开发机唯一暴露在外的37367端口,(这个在SSH的时候提到过每个人的开发机暴露的端口都不一样),并设置隧道选项。暴露端口是作为中转站进行流量的转发。
+>
+> - `-C`:启用压缩,减少传输数据量。
+> - `-N`:不执行远程命令,只建立隧道。
+> - `-g`:允许远程主机连接到本地转发的端口。
+>
+> 当在个人PC上执行这个SSH命令后,SSH客户端会在本地机器的7860端口上监听。
+>
+> 任何发送到本地7860端口的流量,都会被SSH隧道转发到远程服务器的127.0.0.1地址上的7860端口。
+>
+> 这意味着,即使开发机的这个端口没有直接暴露给外部网络,我们也可以通过这个隧道安全地访问远程服务器上的服务。。
+
+#### 2.3.2 如何进行端口映射?
+
+##### 2.3.2.1 使用 ssh 命令进行端口映射
+
+我们还是来到开发机界面,找到我们的开发机,点击**自定义服务**,复制第一条命令,
+
+
+
+
+```Bash
+ssh -p 37367 root@ssh.intern-ai.org.cn -CNg -L {本地机器_PORT}:127.0.0.1:{开发机_PORT} -o StrictHostKeyChecking=no
+```
+
+下面给他大家介绍一下命令各部分的含义:
+
+- `-p 37367`:是指定 SSH 连接的端口为 37367,这个前面提到过。
+- `root@ssh.intern-ai.org.cn`:表示要以 `root` 用户身份连接到 `ssh.intern-ai.org.cn` 这个主机。
+- `-CNg`:
+ - `-C` 通常用于启用压缩。
+ - `-N` 表示不执行远程命令,仅建立连接用于端口转发等。
+ - `-g` 允许远程主机连接到本地转发的端口。
+- `-L {本地机器_PORT}:127.0.0.1:{开发机_PORT}`:这是设置本地端口转发,将本地机器的指定端口(由 `{本地机器_PORT}` 表示)转发到远程主机(这里即 `ssh.intern-ai.org.cn`)的 `127.0.0.1` (即本地回环地址)和指定的开发机端口(由 `{开发机_PORT}` 表示)。
+- `-o StrictHostKeyChecking=no`:关闭严格的主机密钥检查,这样可以避免第一次连接时因为未知主机密钥而产生的提示或错误。
+
+当你运行一个web demo的时候,就可以使用这个命令进行端口映射,举个例子:
+
+我们创建一个hello_world.py文件,在文件中填入以下内容:
+
+```Python
+import socket
+import re
+import gradio as gr
+
+# 获取主机名
+def get_hostname():
+ hostname = socket.gethostname()
+ match = re.search(r'-(\d+)$', hostname)
+ name = match.group(1)
+
+ return name
+
+# 创建 Gradio 界面
+with gr.Blocks(gr.themes.Soft()) as demo:
+ html_code = f"""
+
+
+
+
+
+
+
+
+