From 0bafed132d9cc91b17ebdeba2eea7583fa62a4c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8C=83=E4=BD=B3=E6=AC=A3?= <14091193+fanjxin@user.noreply.gitee.com> Date: Sun, 1 Dec 2024 22:53:07 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BB=83=E4=B9=A0=E5=A4=A7=E6=95=B4=E5=90=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...40\351\242\230\346\225\264\345\220\210.md" | 652 ++++++++++++++++++ 1 file changed, 652 insertions(+) create mode 100644 "\350\214\203\344\275\263\346\254\243/11\346\234\210Mvc\347\273\203\344\271\240\351\242\230\346\225\264\345\220\210.md" diff --git "a/\350\214\203\344\275\263\346\254\243/11\346\234\210Mvc\347\273\203\344\271\240\351\242\230\346\225\264\345\220\210.md" "b/\350\214\203\344\275\263\346\254\243/11\346\234\210Mvc\347\273\203\344\271\240\351\242\230\346\225\264\345\220\210.md" new file mode 100644 index 0000000..562bcdd --- /dev/null +++ "b/\350\214\203\344\275\263\346\254\243/11\346\234\210Mvc\347\273\203\344\271\240\351\242\230\346\225\264\345\220\210.md" @@ -0,0 +1,652 @@ +## Linux练习题 +## 1. + ***1.尝试使用以下几种方式分别登录服务器,说明它们分别的注意事项,并说明它们之间的区别:ssh客户端,tabby应用,xShell,putty*** + ### 注意事项 + (拓展和总结) +#### 1.SSH命令行: +:**适合熟悉命令行的用户,注意密钥管理和安全性** +使用注意事项: +a.命令熟悉度:需要熟悉SSH命令。 +b.自动化脚本:在编写自动化脚本的时候,确保脚本的安全性,避免在脚本中明文储存密码。 +c.环境变量:注意环境变量对SSH客户端和服务器软件。 +#### 2.Tabby: +**:提供现代化的界面和丰富的功能,注意多台同步和插件的的安全性** +安全性注意事项: + +密码管理: +建议使用Tabby的密码管理器功能来存储和管理SSH密钥和密码,避免在配置文件中明文存储敏感信息。 +加密存储: +确保Tabby的配置文件和数据存储是加密的,以防止敏感信息泄露。 +插件安全性: +仅安装来自可信来源的插件,避免安装未知或不可信的插件,以防止安全漏洞。 +使用注意事项: + +a:多平台同步: +如果使用多台设备,注意Tabby的配置同步功能,确保同步的安全性,避免敏感信息在传输过程中泄露。 +b:会话管理: +定期清理不再使用的会话配置,避免不必要的连接信息残留。 +c:文件传输: +使用Tabby内置的SFTP功能时,注意文件权限和传输的安全性,避免传输敏感文件到不安全的位置。 +#### 3. Xshell +**提供企业级功能,注意许可证合规和高级安全功能的使用** +安全性注意事项: + +许可证合规: +确保使用合法的许可证,避免使用盗版软件,以防止安全风险和法律问题。 +高级安全功能: +充分利用Xshell提供的多种加密和验证方式,如双因素认证(2FA)、公钥认证等。 +会话加密: +确保所有会话数据在传输过程中都是加密的,避免使用不安全的协议(如Telnet)。 +使用注意事项: + +a.多标签管理: +合理管理多个标签会话,避免打开过多的标签导致资源占用过高。 +b.脚本编写: +如果使用Xshell的脚本编写功能,确保脚本的安全性,避免脚本注入攻击。 +c.会话文件: +注意会话文件的存储位置和权限,避免敏感信息泄露。 +#### PuTTY +**适合轻重级需求,注意密钥管理和会话配置** +安全性注意事项: + +密钥管理: +妥善管理PuTTY的私钥文件(.ppk),避免私钥泄露。 +建议使用强密码短语保护私钥。 +会话保存: +避免在PuTTY的会话保存中存储敏感信息,如密码和密钥。 +更新补丁: +定期更新PuTTY到最新版本,以修补已知的安全漏洞。 +使用注意事项: + +a.多窗口管理: +PuTTY不支持多标签会话管理,注意管理多个PuTTY窗口,避免混乱。 +b.会话配置: +合理配置PuTTY的会话参数,如字体、颜色、窗口大小等,以提高使用体验。 +c.文件传输: +使用PuTTY的PSCP工具进行文件传输时,注意文件权限和传输的安全性。 + + ### 区别: +| 功能/特性 | SSH命令行 | Tabby | Xshell | PuTTY | +|------------------|--------------------|--------------------------------|--------------------------------|-----------------------------| +| **平台支持** | Windows(需额外安装)、Linux、macOS | Windows、macOS、Linux | Windows | Windows、macOS、Linux | +| **多标签会话** | 不支持,需手动管理 | 支持多标签会话 | 支持多标签会话 | 不支持,需手动管理 | +| **SFTP支持** | 需要额外工具 | 内置SFTP功能 | 支持SFTP | 需要额外工具 | +| **脚本自动化** | 支持 | 支持(通过插件) | 支持(高级脚本编写) | 有限支持 | +| **串口连接** | 不支持 | 支持 | 支持 | 不支持 | +| **高级功能** | 有限(需命令行操作)| 插件扩展功能丰富 | 动态端口转发、脚本编写 | 基础功能 | +| **用户界面** | 命令行界面(CLI) | 图形用户界面(GUI),现代化界面 | 图形用户界面(GUI),专业级界面 | 图形用户界面(GUI),简单界面 | +| **多平台同步** | 手动管理 | 支持 | 有限支持 | 手动管理 | +| **安全性** | 依赖于用户配置 | 提供基本安全功能 | 提供高级安全功能,适合企业级 | 提供基本安全功能 | +| **许可证** | 免费开源 | 免费开源 | 免费版(功能有限),商业版需付费 | 免费开源 | +| **适用场景** | 命令行操作、脚本自动化 | 现代化界面、多平台用户 | 企业级用户、高级安全需求 | 轻量级、简单需求 | + +## 2. +***2.更新软件源,命令:apt update,并了解这一步的实际用处和意义*** +### 实际用处: +**apt update 主要的功能是刷新本地软件包索引,使其与远程软件仓库保持同步** +### 意义: +1.通过定期更新软件包,可以修补已知的安全漏洞和错误,提高系统的安全性和稳定性。 +2.通过使用 apt update 和 apt upgrade,开发者可以确保开发环境中的所有工具和库都是最新的,从而提高开发效率。 +3.apt update 和 apt upgrade 命令简化了依赖管理过程,使得开发者可以轻松地管理和更新项目依赖项。 +4.支持远程开发,确保开发环境的一致性和最新性。 + +## 3. +***更新软件和补丁,命令:apt upgrade -y,并了解这一步的实际用处意义*** +a.自动更新: 通过自动更新所有已安装的软件包,确保系统中的软件包都是最新版本,包含最新的功能、安全补丁和错误修复。 +b.简化操作: -y 参数自动确认所有提示,简化了升级过程,适用于自动化脚本和批处理操作。 +c.安全性: 定期运行 apt upgrade -y 可以修补已知的安全漏洞,提高系统的安全性。 +d.稳定性: 更新软件包可以避免由于版本不兼容导致的问题,提高系统的稳定性。 +e.开发效率: 最新的开发工具和库可以提供新的功能和改进,帮助开发者更高效地完成开发任务。 + +## 4. +***熟悉并完成*** +1.查看当前目录下的文件和文件夹 + +2.查看当前路径 + +3.创建一个新的文件夹 + + +## 5. +**在服务器上面安装sdk环境** + + + +## 6. + +a.安装: + 完成nginx部署的10个静态网站 +``` + 主要步骤: + 安装nginx + 上传网页 + 配置nginx配置文件 + 测试nginx配置文件,命令:nginx -t + 强制让nginx加载配置文件,命令:nginx -s reload +``` +### 静态网站(h5作业里的哈哈哈) + + + +## 7.部署简单的mvc项目 +一、在服务器上安装了运行环境或者是调试环境(必要条件) +1、如何安装SDK包管理器 + - 先下载个文件 wget curl + - 注册文件 + - 删除已经注册过的文件 rm + - 更新软件源 apt update + - 安装sdk apt install dontnet-sdk-8.0 +2、在Linux上安装软件或者应用的常用方式如下: +- 1、包管理器(对用户来说最简单) +- 2、使用二进制文件安装(对用户来说次简单) +- 3、编译安装(对用户来说最难) + +二、讲打包好的程序上传到指定目录(必要条件) + - 1、scp工具scp -r ./* root@xxxx.xxx:/var/www/xxxx.xxx `scp工具(Tabby Terminal软件` + - 2、xftp + +三、一般建议使用Nginx做反向代理(PS:如果不做反向代理,则这条可以不用) + + +# MVC练习 +```cs +//1.***创建一个控制台项目,没有任何选项,体会项目名称和什么有关系*** +dotnet new console -n Blog +//2、创建一个控制项目,项目名称Blog +dotnet new console -o Blog +//3、创建一个控制台项目,输出到Blog目录 +dotnet new mvc -n BlogMVC +//4、创建一个MVC项目,指定项目名称 +dotnet new mvc -o BlogMVC +//5、创建一个MVC项目,指定输出目录 +//使用命令行工具,运行以下命令创建解决方案: +dotnet new sln -n ComprehensiveSolution +//6.创建MVC项目:a: +dotnet new mvc -n BlogMVC +//b:创建三个类库项目: +dotnet new classlib -n ClassLibrary1 +dotnet new classlib -n ClassLibrary2 +dotnet new classlib -n ClassLibrary3 +//c:将所有项目添加到解决方案中: +dotnet sln add BlogMVC/BlogMVC.csproj +dotnet sln add ClassLibrary1/ClassLibrary1.csproj +dotnet sln add ClassLibrary2/ClassLibrary2.csproj +dotnet sln add ClassLibrary3/ClassLibrary3.csproj +//7、创建一个项目,在默认控制器(Home)下,新增一个Action方法,名为Ok,同时为其创建对应视图以显示这个视图 +//在Controllers文件夹下的HomeController.cs中添加以下方法: +public IActionResult Ok() +{ + return View(); +} +//创建视图文件,在Views/Home文件夹下创建Ok.cshtml文件,并添加以下内容: +
This is the Ok view.
+ +//7. 创建一个项目,创建一个新的控制器,名为Blogs,新的控制器拥有一个名为Index的Action,该方法返回一个视图,视图显示“神级预判” +//在Controllers文件夹下创建一个新的控制器BlogsController.cs,并添加以下内容: +public class BlogsController : Controller +{ + public IActionResult Index() + { + return View(); + } +} +//8.创建视图文件,在Views/Blogs文件夹下创建Index.cshtml文件,并添加以下内容: +神级预判
+ +//9. 给第8题的新控制器,添加一个新的Action,名为Music,不接受任何参数,并返回对应的视图,视图显示“顶级打野” +//在BlogsController.cs中添加以下方法: +public IActionResult Music() +{ + return View(); +} +//创建视图文件,在Views/Blogs文件夹下创建Music.cshtml文件,并添加以下内容: +顶级打野
+//10. 给第8题的新控制器,新增一个Action,名为List,不接受任何参数,并返回对应视图,视图显示一个经典CRUD界面 +//在BlogsController.cs中添加以下方法: +public IActionResult List() +{ + return View(); +} +//创建视图文件,在Views/Blogs文件夹下创建List.cshtml文件,并添加以下HTML代码来模拟CRUD界面: +这里是CRUD界面
+//11. 新增一个控制器,名为Products,该控制器具有一个名为Edit的Action,这个Action接受一个int类型的参数id,显示这个id +//在Controllers文件夹下创建一个新的控制器ProductsController.cs,并添加以下内容: +public class ProductsController : Controller +{ + public IActionResult Edit(int id) + { + return View(id); + } +} +//12.创建视图文件,在Views/Products文件夹下创建Edit.cshtml文件,并添加以下内容: +ID: @Model
+//在11题的新控制器中,新增一个名为Create的Action,该Action接受一个类型为Students的参数,并展示该参数的姓名属性 +//首先,需要定义Student模型。在项目中创建一个新的文件夹Models,并在其中创建Student.cs文件,内容如下: +namespace YourProjectName.Models +{ + public class Student + { + public string Name { get; set; } + public int Age { get; set; } + public double Height { get; set; } + } +} +//在ProductsController.cs中添加以下方法: +public IActionResult Create(Student student) +{ + return View(student); +} +//创建视图文件,在Views/Products文件夹下创建Create.cshtml文件,并添加以下内容: +Name: @Model.Name
+``` + +# 专项练习1-控制器传参 + +```cs + public IActionResult Index(int Id) + { + return Content(Id.ToString) + } +``` + +```cs + public IActionResult Index_2(string Id){ + return Content(Id) + } +``` + +```cs + public IActionResult Index_2(string name){ + return Content(name) + } +``` + +```cs + public class BlogContriller : Controller{ + [HttpPost] + public IActionResult Create([FromBody] BlogCreateDto blogCreateDto){ + return Content(blogCreateDto.Title) + } + } + public class BlogCreateDto{ + // Title等为自动属性 + public string Title{get;set;}=null!; + public string Author{get;set;}=null!; + public string Content{get;set;}=null!; + } +``` + + + + + +```cs + public class BlogContriller : Controller{ + [HttpPost] + public IActionResult Create([FromBody] Products productCreateDto){ + return Content(blogCreateDto.Title) + } + } + public class Products{ + public string Name{get;set;}=null!; + public string Price{get;set;}=null!; + public string Stock{get;set;}=null!; + } + ``` + + + + + +```cs + public class BlogContriller : Controller{ + [HttpPost] + public IActionResult Create_2([FromBody] Students studentCreateDto){ + return Content(blogCreateDto.Title) + } + } + public class Students{ + public string Name{get;set;}=null!; + public string Price{get;set;}=null!; + public string Stock{get;set;}=null!; + } + ``` + + + +# 专项练习3-基础能力 + + ```cs + public IActionResult WW(){ + // 生成随机数 + Random random=new Random(); + // 范围[0,100] + int num=random.Next(0,101); + return View(num); + } +``` + +```cs + public IActionResult HH(){ + // 1.生成随机数 + Random random=new Random(); + // 2.范围(0,100] + int num=random.Next(1,101); + return View(num); + } +``` + +```CS +public IActionResult Bb(){ + // 生成随机数 + Random random=new Random(); + // 2.定一个列表 类型为int + var num=new List标题 | +作者 | +内容 | +操作 | + + @foreach(var item in @Model) + { +
---|---|---|---|
@item.Title | +@item.Author | +@item.Content | ++ + + | +
@Model.Content
+ +标题 | +作者 | +内容 | +操作 | + + @foreach(var item in @Model.BlogCreateDto) + { +
---|---|---|---|
@item.Title | +@item.Author | +@item.Content | ++ + + | +