├── .gitignore ├── members ├── 000000 │ ├── notes │ │ └── readme.md │ └── readme.md ├── readme.md └── 水镜 │ └── 编程入门笔记 │ ├── .obsidian │ ├── app.json │ ├── appearance.json │ ├── core-plugins.json │ └── workspace.json │ ├── CMD与Powershell使用教程.md │ ├── Git使用教程.md │ ├── Jekyll使用教程.md │ ├── Linux使用教程.md │ ├── VS Code使用教程.md │ ├── images │ ├── CMD_Powershell-images │ │ ├── cmd_powershell.1.png │ │ ├── cmd_powershell.10.png │ │ ├── cmd_powershell.11.png │ │ ├── cmd_powershell.12.png │ │ ├── cmd_powershell.13.png │ │ ├── cmd_powershell.14.png │ │ ├── cmd_powershell.2.png │ │ ├── cmd_powershell.3.png │ │ ├── cmd_powershell.4.png │ │ ├── cmd_powershell.5.png │ │ ├── cmd_powershell.6.png │ │ ├── cmd_powershell.7.png │ │ ├── cmd_powershell.8.png │ │ └── cmd_powershell.9.png │ ├── Jekyll-images │ │ ├── jekyll.1.png │ │ ├── jekyll.10.png │ │ ├── jekyll.11.png │ │ ├── jekyll.12.png │ │ ├── jekyll.13.png │ │ ├── jekyll.14.png │ │ ├── jekyll.15.png │ │ ├── jekyll.16.png │ │ ├── jekyll.17.png │ │ ├── jekyll.18.png │ │ ├── jekyll.19.png │ │ ├── jekyll.2.png │ │ ├── jekyll.20.png │ │ ├── jekyll.21.png │ │ ├── jekyll.22.png │ │ ├── jekyll.23.png │ │ ├── jekyll.24.png │ │ ├── jekyll.25.png │ │ ├── jekyll.26.png │ │ ├── jekyll.27.png │ │ ├── jekyll.28.png │ │ ├── jekyll.29.png │ │ ├── jekyll.3.png │ │ ├── jekyll.30.png │ │ ├── jekyll.31.png │ │ ├── jekyll.32.png │ │ ├── jekyll.33.png │ │ ├── jekyll.34.png │ │ ├── jekyll.35.png │ │ ├── jekyll.36.png │ │ ├── jekyll.37.png │ │ ├── jekyll.4.png │ │ ├── jekyll.5.png │ │ ├── jekyll.6.png │ │ ├── jekyll.7.png │ │ ├── jekyll.8.png │ │ └── jekyll.9.png │ ├── Linux-images │ │ ├── linux.1.png │ │ ├── linux.10.png │ │ ├── linux.100.png │ │ ├── linux.101.png │ │ ├── linux.102.png │ │ ├── linux.103.png │ │ ├── linux.104.png │ │ ├── linux.105.png │ │ ├── linux.106.png │ │ ├── linux.107.png │ │ ├── linux.108.png │ │ ├── linux.109.png │ │ ├── linux.11.png │ │ ├── linux.110.png │ │ ├── linux.111.png │ │ ├── linux.112.png │ │ ├── linux.113.png │ │ ├── linux.114.png │ │ ├── linux.115.png │ │ ├── linux.116.png │ │ ├── linux.117.png │ │ ├── linux.12.png │ │ ├── linux.13.png │ │ ├── linux.14.png │ │ ├── linux.15.png │ │ ├── linux.16.png │ │ ├── linux.17.png │ │ ├── linux.18.png │ │ ├── linux.19.png │ │ ├── linux.2.png │ │ ├── linux.20.png │ │ ├── linux.21.png │ │ ├── linux.22.png │ │ ├── linux.23.png │ │ ├── linux.24.png │ │ ├── linux.25.png │ │ ├── linux.26.png │ │ ├── linux.27.png │ │ ├── linux.28.png │ │ ├── linux.29.png │ │ ├── linux.3.png │ │ ├── linux.30.png │ │ ├── linux.31.png │ │ ├── linux.32.png │ │ ├── linux.33.png │ │ ├── linux.34.png │ │ ├── linux.35.png │ │ ├── linux.36.png │ │ ├── linux.37.png │ │ ├── linux.38.png │ │ ├── linux.39.png │ │ ├── linux.4.png │ │ ├── linux.40.png │ │ ├── linux.41.png │ │ ├── linux.42.png │ │ ├── linux.43.png │ │ ├── linux.44.png │ │ ├── linux.45.png │ │ ├── linux.46.png │ │ ├── linux.47.png │ │ ├── linux.48.png │ │ ├── linux.49.png │ │ ├── linux.5.png │ │ ├── linux.50.png │ │ ├── linux.51.png │ │ ├── linux.52.png │ │ ├── linux.53.png │ │ ├── linux.54.png │ │ ├── linux.55.png │ │ ├── linux.56.png │ │ ├── linux.57.png │ │ ├── linux.58.png │ │ ├── linux.59.png │ │ ├── linux.6.png │ │ ├── linux.60.png │ │ ├── linux.61.png │ │ ├── linux.62.png │ │ ├── linux.63.png │ │ ├── linux.64.png │ │ ├── linux.65.png │ │ ├── linux.66.png │ │ ├── linux.67.png │ │ ├── linux.68.png │ │ ├── linux.69.png │ │ ├── linux.7.png │ │ ├── linux.70.png │ │ ├── linux.71.png │ │ ├── linux.72.png │ │ ├── linux.73.png │ │ ├── linux.74.png │ │ ├── linux.75.png │ │ ├── linux.76.png │ │ ├── linux.77.png │ │ ├── linux.78.png │ │ ├── linux.79.png │ │ ├── linux.8.png │ │ ├── linux.80.png │ │ ├── linux.81.png │ │ ├── linux.82.png │ │ ├── linux.83.png │ │ ├── linux.84.png │ │ ├── linux.85.png │ │ ├── linux.86.png │ │ ├── linux.87.png │ │ ├── linux.88.png │ │ ├── linux.89.png │ │ ├── linux.9.png │ │ ├── linux.90.png │ │ ├── linux.91.png │ │ ├── linux.92.png │ │ ├── linux.93.png │ │ ├── linux.94.png │ │ ├── linux.95.png │ │ ├── linux.96.png │ │ ├── linux.97.png │ │ ├── linux.98.png │ │ └── linux.99.png │ ├── blog.png │ ├── git-images │ │ ├── git.1.png │ │ ├── git.10.png │ │ ├── git.11.png │ │ ├── git.12.png │ │ ├── git.13.png │ │ ├── git.14.png │ │ ├── git.15.png │ │ ├── git.16.png │ │ ├── git.17.png │ │ ├── git.18.png │ │ ├── git.19.png │ │ ├── git.2.png │ │ ├── git.20.png │ │ ├── git.21.png │ │ ├── git.22.png │ │ ├── git.23.png │ │ ├── git.24.png │ │ ├── git.25.png │ │ ├── git.26.png │ │ ├── git.27.png │ │ ├── git.28.png │ │ ├── git.29.png │ │ ├── git.3.png │ │ ├── git.30.png │ │ ├── git.31.png │ │ ├── git.32.png │ │ ├── git.33.png │ │ ├── git.34.png │ │ ├── git.35.png │ │ ├── git.36.png │ │ ├── git.37.png │ │ ├── git.38.png │ │ ├── git.39.png │ │ ├── git.4.png │ │ ├── git.40.png │ │ ├── git.41.png │ │ ├── git.42.png │ │ ├── git.43.png │ │ ├── git.44.png │ │ ├── git.45.png │ │ ├── git.46.png │ │ ├── git.47.png │ │ ├── git.48.png │ │ ├── git.49.png │ │ ├── git.5.png │ │ ├── git.50.png │ │ ├── git.51.png │ │ ├── git.52.png │ │ ├── git.53.png │ │ ├── git.54.png │ │ ├── git.55.png │ │ ├── git.56.png │ │ ├── git.57.png │ │ ├── git.58.png │ │ ├── git.59.png │ │ ├── git.6.png │ │ ├── git.60.png │ │ ├── git.61.png │ │ ├── git.62.png │ │ ├── git.63.png │ │ ├── git.64.png │ │ ├── git.65.png │ │ ├── git.66.png │ │ ├── git.7.png │ │ ├── git.8.png │ │ └── git.9.png │ └── vscode-images │ │ ├── vscode.1.png │ │ ├── vscode.10.png │ │ ├── vscode.11.png │ │ ├── vscode.12.png │ │ ├── vscode.13.png │ │ ├── vscode.15.png │ │ ├── vscode.16.png │ │ ├── vscode.17.png │ │ ├── vscode.18.png │ │ ├── vscode.19.png │ │ ├── vscode.2.png │ │ ├── vscode.20.png │ │ ├── vscode.21.png │ │ ├── vscode.22.png │ │ ├── vscode.23.png │ │ ├── vscode.24.png │ │ ├── vscode.25.png │ │ ├── vscode.26.png │ │ ├── vscode.27.png │ │ ├── vscode.28.png │ │ ├── vscode.29.png │ │ ├── vscode.3.png │ │ ├── vscode.30.png │ │ ├── vscode.31.png │ │ ├── vscode.32.png │ │ ├── vscode.33.png │ │ ├── vscode.34.png │ │ ├── vscode.35.png │ │ ├── vscode.36.png │ │ ├── vscode.37.png │ │ ├── vscode.4.png │ │ ├── vscode.5.png │ │ ├── vscode.6.png │ │ ├── vscode.7.png │ │ ├── vscode.9.png │ │ └── vsocde.8.png │ └── redeme.md ├── readme.md └── task ├── 01_hello_react.md ├── 09_publish_walrus.md └── readme.md /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | build 3 | .idea 4 | .vscode 5 | # dependencies 6 | **/node_modules 7 | .pnpm-store/ 8 | /.pnp 9 | .pnp.js 10 | 11 | # testing 12 | /coverage 13 | 14 | # production 15 | **/build 16 | 17 | # misc 18 | .DS_Store 19 | .env.local 20 | .env.development.local 21 | .env.test.local 22 | .env.production.local 23 | npm-debug.log* 24 | yarn-debug.log* 25 | yarn-error.log* 26 | sui.log.* 27 | .history 28 | -------------------------------------------------------------------------------- /members/000000/notes/readme.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hoh-zone/lets-fullstack/20afd9ed444a4fe05eb5402ff33a924dc5f4b1ab/members/000000/notes/readme.md -------------------------------------------------------------------------------- /members/000000/readme.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hoh-zone/lets-fullstack/20afd9ed444a4fe05eb5402ff33a924dc5f4b1ab/members/000000/readme.md -------------------------------------------------------------------------------- /members/readme.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hoh-zone/lets-fullstack/20afd9ed444a4fe05eb5402ff33a924dc5f4b1ab/members/readme.md -------------------------------------------------------------------------------- /members/水镜/编程入门笔记/.obsidian/app.json: -------------------------------------------------------------------------------- 1 | {} -------------------------------------------------------------------------------- /members/水镜/编程入门笔记/.obsidian/appearance.json: -------------------------------------------------------------------------------- 1 | {} -------------------------------------------------------------------------------- /members/水镜/编程入门笔记/.obsidian/core-plugins.json: -------------------------------------------------------------------------------- 1 | { 2 | "file-explorer": true, 3 | "global-search": true, 4 | "switcher": true, 5 | "graph": true, 6 | "backlink": true, 7 | "canvas": true, 8 | "outgoing-link": true, 9 | "tag-pane": true, 10 | "properties": false, 11 | "page-preview": true, 12 | "daily-notes": true, 13 | "templates": true, 14 | "note-composer": true, 15 | "command-palette": true, 16 | "slash-command": false, 17 | "editor-status": true, 18 | "bookmarks": true, 19 | "markdown-importer": false, 20 | "zk-prefixer": false, 21 | "random-note": false, 22 | "outline": true, 23 | "word-count": true, 24 | "slides": false, 25 | "audio-recorder": false, 26 | "workspaces": false, 27 | "file-recovery": true, 28 | "publish": false, 29 | "sync": false 30 | } -------------------------------------------------------------------------------- /members/水镜/编程入门笔记/.obsidian/workspace.json: -------------------------------------------------------------------------------- 1 | { 2 | "main": { 3 | "id": "14d01ba0d5cb998a", 4 | "type": "split", 5 | "children": [ 6 | { 7 | "id": "d08583f655530715", 8 | "type": "tabs", 9 | "children": [ 10 | { 11 | "id": "dc9b5e4ae9be213c", 12 | "type": "leaf", 13 | "state": { 14 | "type": "markdown", 15 | "state": { 16 | "file": "Linux使用教程.md", 17 | "mode": "source", 18 | "source": false 19 | }, 20 | "icon": "lucide-file", 21 | "title": "Linux使用教程" 22 | } 23 | } 24 | ] 25 | } 26 | ], 27 | "direction": "vertical" 28 | }, 29 | "left": { 30 | "id": "4c4c9424d1f5f2ba", 31 | "type": "split", 32 | "children": [ 33 | { 34 | "id": "41f5171dc5fc5141", 35 | "type": "tabs", 36 | "children": [ 37 | { 38 | "id": "9ee6dd3fdb383632", 39 | "type": "leaf", 40 | "state": { 41 | "type": "file-explorer", 42 | "state": { 43 | "sortOrder": "alphabetical" 44 | }, 45 | "icon": "lucide-folder-closed", 46 | "title": "文件列表" 47 | } 48 | }, 49 | { 50 | "id": "86f9569c552adceb", 51 | "type": "leaf", 52 | "state": { 53 | "type": "search", 54 | "state": { 55 | "query": "", 56 | "matchingCase": false, 57 | "explainSearch": false, 58 | "collapseAll": false, 59 | "extraContext": false, 60 | "sortOrder": "alphabetical" 61 | }, 62 | "icon": "lucide-search", 63 | "title": "搜索" 64 | } 65 | }, 66 | { 67 | "id": "86676d3f0b65dd4e", 68 | "type": "leaf", 69 | "state": { 70 | "type": "bookmarks", 71 | "state": {}, 72 | "icon": "lucide-bookmark", 73 | "title": "书签" 74 | } 75 | } 76 | ] 77 | } 78 | ], 79 | "direction": "horizontal", 80 | "width": 300 81 | }, 82 | "right": { 83 | "id": "9c40cdd35cd5893a", 84 | "type": "split", 85 | "children": [ 86 | { 87 | "id": "c16e351a32ac6286", 88 | "type": "tabs", 89 | "children": [ 90 | { 91 | "id": "a17e820677ce7ee1", 92 | "type": "leaf", 93 | "state": { 94 | "type": "backlink", 95 | "state": { 96 | "collapseAll": false, 97 | "extraContext": false, 98 | "sortOrder": "alphabetical", 99 | "showSearch": false, 100 | "searchQuery": "", 101 | "backlinkCollapsed": false, 102 | "unlinkedCollapsed": true 103 | }, 104 | "icon": "links-coming-in", 105 | "title": "反向链接" 106 | } 107 | }, 108 | { 109 | "id": "2059bec24fbe3286", 110 | "type": "leaf", 111 | "state": { 112 | "type": "outgoing-link", 113 | "state": { 114 | "linksCollapsed": false, 115 | "unlinkedCollapsed": true 116 | }, 117 | "icon": "links-going-out", 118 | "title": "出链" 119 | } 120 | }, 121 | { 122 | "id": "da6f18a286410942", 123 | "type": "leaf", 124 | "state": { 125 | "type": "tag", 126 | "state": { 127 | "sortOrder": "frequency", 128 | "useHierarchy": true 129 | }, 130 | "icon": "lucide-tags", 131 | "title": "标签" 132 | } 133 | }, 134 | { 135 | "id": "ecbc8679e32dda05", 136 | "type": "leaf", 137 | "state": { 138 | "type": "outline", 139 | "state": {}, 140 | "icon": "lucide-list", 141 | "title": "大纲" 142 | } 143 | } 144 | ] 145 | } 146 | ], 147 | "direction": "horizontal", 148 | "width": 300, 149 | "collapsed": true 150 | }, 151 | "left-ribbon": { 152 | "hiddenItems": { 153 | "switcher:打开快速切换": false, 154 | "graph:查看关系图谱": false, 155 | "canvas:新建白板": false, 156 | "daily-notes:打开/创建今天的日记": false, 157 | "templates:插入模板": false, 158 | "command-palette:打开命令面板": false 159 | } 160 | }, 161 | "active": "dc9b5e4ae9be213c", 162 | "lastOpenFiles": [ 163 | "VS Code使用教程.md", 164 | "Jekyll使用教程.md", 165 | "CMD与Powershell使用教程.md" 166 | ] 167 | } -------------------------------------------------------------------------------- /members/水镜/编程入门笔记/CMD与Powershell使用教程.md: -------------------------------------------------------------------------------- 1 | # **简介** 2 | 本文主要内容: 3 | 1.分别介绍CMD与Powershell的概念 4 | 2.分别列出CMD与Powershell的常用命令 5 | 3.分别演示CMD与Powershell的常见使用 6 | 4.分别举例bat与ps1脚本的一些使用示例 7 | 8 | --- 9 | 10 | # **一.CMD与Powershell的概述** 11 | 12 | --- 13 | 14 | ## 1.CMD 15 | 16 | CMD(命令提示符)是**Windows 操作系统**中的一个**命令行界面**,用于执行各种命令行任务。它的作用主要集中在基本的**系统操作、文件管理、网络配置和诊断任务**等,尽管功能比 PowerShell 简单,但在日常使用中仍然非常实用。 17 | 18 | ### 1. 文件和目录管理 19 | 20 | CMD 最基本的功能是操作文件和文件夹。用户可以通过命令创建、删除、复制和移动文件及文件夹,也可以查看当前目录中的文件列表或更改当前工作目录。文件管理操作在维护和组织系统文件时非常常用。 21 | 22 | ### 2. 系统诊断和维护 23 | 24 | CMD 提供了许多系统维护相关的命令,用于检查系统健康状态、修复系统文件错误和获取有关计算机硬件和操作系统的信息。这些命令可以帮助用户排查系统问题,如文件损坏、磁盘错误等,确保计算机稳定运行。 25 | 26 | ### 3. 网络操作与诊断 27 | 28 | 通过 CMD,可以执行多种网络操作和测试。用户可以查看计算机的网络配置、测试与其他计算机或服务器的连接、追踪网络路径以及查看当前网络连接的状态。这些网络命令在解决网络连接问题或配置网络设置时非常有用。 29 | 30 | ### 4. 批处理与自动化 31 | 32 | CMD 支持批处理脚本,这使得用户可以自动执行一系列任务。批处理文件可以包含多个命令,按照顺序执行,从而自动化一些重复性的工作任务。批处理文件在系统管理和运维中经常使用,特别是需要定期执行的任务,如备份或清理。 33 | 34 | ### 5. 进程和服务管理 35 | 36 | CMD 提供了管理系统进程和服务的功能。用户可以查看当前正在运行的进程,终止不需要的进程,启动或停止系统服务。管理进程和服务对于监控和维护计算机的正常运行至关重要,特别是在处理性能问题或特定服务故障时。 37 | 38 | ### 6. 用户和权限管理 39 | 40 | CMD 允许用户管理系统账户和权限设置。这包括创建新用户、删除现有用户、更改用户密码以及将用户添加到系统组。这些功能在多用户系统或需要配置权限的环境中非常重要,特别是管理员在管理本地用户时。 41 | 42 | ### 7. 磁盘和分区管理 43 | 44 | CMD 具有一些磁盘管理命令,可以帮助用户查看和管理磁盘上的分区、格式化驱动器或检查磁盘的健康状况。这些命令可以在处理存储设备问题或重新组织磁盘空间时发挥作用。 45 | 46 | ### 8. 计划任务管理 47 | 48 | 用户可以通过 CMD 配置计划任务,自动执行某些命令或脚本。这对定期执行的任务(如备份、更新、清理等)非常有帮助,且可以精确控制任务执行的时间和频率。 49 | 50 | ### 9. 高级系统设置 51 | 52 | CMD 提供了某些高级系统设置的访问权限,包括管理启动配置、更新组策略等。系统管理员通常使用这些命令来修改系统行为或执行深度管理任务。 53 | 54 | ### 10. 调试与故障排查 55 | 56 | CMD 还提供了许多用于调试和故障排查的工具。例如,用户可以使用它检查系统的详细状态信息、查看日志,或测试与特定服务器的连接。它是排查问题、修复故障、提高计算机稳定性的重要工具。 57 | 58 | CMD 是一个功能丰富的工具,虽然它的界面基于文本,但它可以执行各种任务,尤其适用于系统管理、文件操作、批量任务自动化以及故障排查等场景。在现代 Windows 系统中,虽然 PowerShell 更加功能强大,但 CMD 依然是一个简单易用的工具,适合执行许多日常的系统操作。 59 | 60 | ### CMD 的局限性: 61 | 62 | CMD 虽然功能实用,但与现代工具(如 PowerShell)相比,功能较为基础,缺少编程和高级管理功能。而 PowerShell 不仅能够执行 CMD 的所有功能,还提供了更强大的脚本能力和系统管理功能。 63 | 64 | 总结:CMD 是一个简单但功能可靠的工具,适合执行文件操作、网络诊断、批处理任务等基本管理任务,但它在现代自动化需求中已经逐渐被 PowerShell 等功能更强的工具所取代。 65 | 66 | Windows批处理是使用CMD运行的一系列命令,通常以.bat或.cmd扩展名的文件保存 67 | 68 | --- 69 | 70 | ## 2.Powershell 71 | 72 | PowerShell 是一种基于命令行的任务自动化和配置管理框架,由 Microsoft 开发,专为系统管理员和高级用户设计。它具有以下几个主要功能和作用: 73 | 74 | ### 1. 命令行接口 (CLI) 75 | 76 | PowerShell 允许你使用命令(称为 **cmdlets**)执行各种任务,如文件操作、网络配置、服务管理等。它比传统的 CMD 提供了更强大的功能和更复杂的脚本处理能力。 77 | 78 | ### 2. 脚本编写和自动化 79 | 80 | PowerShell 支持编写脚本文件(通常扩展名为 .ps1),通过这些脚本,你可以自动化复杂的系统管理任务,比如批量创建用户、部署应用、备份数据等。系统管理员可以使用它自动化日常任务,提高工作效率。 81 | 82 | ### 3. 对象导向 83 | 84 | 与传统命令行不同,PowerShell 的输出是对象,而不是纯文本。这意味着可以轻松处理、过滤和操作这些数据,进行更精细的管理。例如,你可以获取系统中的进程,然后筛选或终止特定的进程。 85 | 86 | ### 4. 跨平台支持 87 | 88 | 虽然 PowerShell 最初是为 Windows 开发的,但现在它已经开源并跨平台支持,可以在 Linux 和 macOS 上运行。这使得它适合管理混合环境的企业或开发者。 89 | 90 | ### 5. 系统管理和配置 91 | 92 | PowerShell 提供了对 Windows 操作系统和应用程序的深入控制,用户可以通过它管理注册表、服务、进程、事件日志、网络配置、文件系统等。管理员也可以使用 PowerShell 执行远程管理。 93 | 94 | ### 6. 模块扩展和社区支持 95 | 96 | PowerShell 支持模块化扩展,你可以安装第三方模块以获得更多功能,像 Azure PowerShell 模块用于管理 Azure 资源。PowerShell 库还提供了大量社区和官方开发的脚本和模块,进一步增强了它的功能。 97 | 98 | ### 常见用法: 99 | 100 | - **启动 PowerShell**:按 Win+X,选择 "Windows PowerShell" 或 "Windows PowerShell (管理员)"。 101 | - **执行命令**:你可以在 PowerShell 中输入类似 Get-Process 来获取当前运行的进程,或用 Get-Help 查询命令的帮助文档。 102 | 103 | 如果你是开发人员或系统管理员,PowerShell 是非常强大且灵活的工具,适合用于自动化任务和复杂的系统管理。 104 | 105 | --- 106 | 107 | ## 3.区别 108 | 109 | PowerShell 和 CMD(命令提示符)是 Windows 操作系统中两种命令行接口,但它们在功能、设计和用途上有显著的区别。(不过都使用命令cls清屏)以下是一些主要差异: 110 | 111 | ### 1. 命令集和功能 112 | 113 | - **CMD**:CMD 是 Windows 操作系统的传统命令行界面,它使用一组相对简单的命令(如 dir, copy, del)来执行文件管理和一些基本的系统任务。CMD 的命令集较为有限,适合执行简单的任务。 114 | - **PowerShell**:PowerShell 是一个功能强大的任务自动化工具,提供了更为丰富和复杂的命令集(称为 **cmdlets**)。它可以管理文件系统、注册表、进程、服务、事件日志等,远超 CMD 的功能。 115 | 116 | ### 2. 基于文本 vs 基于对象 117 | 118 | - **CMD**:CMD 的输出都是纯文本。当你运行一个命令时,它会以文本格式输出结果。这意味着进一步处理或解析数据时,需要手动使用字符串操作。 119 | - **PowerShell**:PowerShell 的输出是 **对象**,而不是文本。每个 cmdlet 都输出.NET 对象,可以直接对这些对象进行操作,而不需要将输出转换为文本再解析。这使得数据处理更加简洁和高效。 120 | 121 | ### 3. 脚本能力 122 | 123 | - **CMD**:CMD 支持简单的批处理脚本(以 .bat 或 .cmd 为后缀),这些脚本文件可以自动执行一系列命令。然而,CMD 的脚本功能较为基础,缺少现代编程语言中的结构和灵活性。 124 | - **PowerShell**:PowerShell 提供了强大的脚本编写能力,支持复杂的编程结构,如循环、条件语句、函数和错误处理。PowerShell 脚本文件以 .ps1 作为扩展名,能够编写和自动化非常复杂的任务。 125 | 126 | ### 4. 跨平台支持 127 | 128 | - **CMD**:CMD 是 Windows 专用的命令行界面,只能在 Windows 系统中使用。 129 | - **PowerShell**:PowerShell(从 PowerShell Core 开始)是跨平台的,支持 Windows、Linux 和 macOS。这使得它在管理混合系统环境时非常有用。 130 | 131 | ### 5. 模块化和扩展性 132 | 133 | - **CMD**:CMD 的功能较为固定,没有模块化系统,无法轻松扩展其命令集。 134 | - **PowerShell**:PowerShell 具有模块化体系结构,允许用户加载模块以扩展其功能。用户可以安装官方或社区提供的模块,来支持更多任务,如管理云资源、网络设备等。 135 | 136 | ### 6. 管理员权限 137 | 138 | - **CMD**:虽然 CMD 可以通过“以管理员身份运行”提升权限,但其系统管理功能相对有限。 139 | - **PowerShell**:PowerShell 提供了更深入的系统管理功能,特别是在管理员权限下,可以执行高级任务,如管理注册表、Windows服务、事件日志、进程等。 140 | 141 | ### 7. 命令语法 142 | 143 | - **CMD**:CMD 的命令语法比较简单。例如,列出目录中的文件使用 dir。 144 | - **PowerShell**:PowerShell 的命令语法更像编程语言,通常遵循 动词-名词 格式。例如,列出目录中的文件使用 Get-ChildItem。这种命令格式使命令更加直观和一致。 145 | 146 | ### 8. 集成 .NET 147 | 148 | - **CMD**:CMD 与 .NET 无关,无法直接利用 .NET 框架的功能。 149 | - **PowerShell**:PowerShell 完全基于 .NET 框架,允许你直接使用 .NET 类和方法,这为编写复杂脚本和自动化任务提供了强大支持。 150 | 151 | ### 9. 远程管理 152 | 153 | - **CMD**:CMD 不具备本地化远程管理功能。 154 | - **PowerShell**:PowerShell 具有强大的远程管理能力,支持通过 PowerShell Remoting 连接到远程计算机,执行远程任务,非常适合管理员对大规模服务器或计算机网络进行管理。 155 | 156 | ### 什么时候使用 CMD 和 PowerShell? 157 | 158 | - **CMD**:如果你只是需要执行一些简单的命令,如导航目录、管理文件等,CMD 足够好用,启动速度也较快。 159 | - **PowerShell**:如果你需要自动化复杂的任务,进行系统管理、跨平台开发,或者需要更强大的编程能力,那么 PowerShell 是更好的选择。 160 | 161 | 总结: 162 | 163 | - CMD 适合执行简单的、快速的任务。 164 | - PowerShell 更现代化、功能更强大,适合需要复杂任务自动化和系统管理的场景。 165 | 166 | 你可以根据任务的复杂度选择最合适的工具! 167 | 168 | --- 169 | 170 | ## 4.win+R 171 | Win+R用于打开 “运行”对话框 172 | 在这个**对话框**中,你可以输入**程序名、文件名、文档名或互联网地址**,**快速启动**相应的**应用程序**或打开**文件** 173 | 你可以输入**cmd打开命令提示符**,也可输入**powershell打开终端** 174 | ![](/images/CMD_Powershell-images/cmd_powershell.1.png) 175 | 176 | --- 177 | 178 | # **二.CMD使用示例** 179 | 180 | --- 181 | 182 | 以我目前使用CMD的经验,主要有三个方面的用法 183 | 关于这些命令和bat中的语法,可以先去看看后面 184 | 下面演示都只用了最基本的命令与语法 185 | 更高级的目前我还没用到 186 | ## 1.查询信息 187 | 1.可以用ipconfig查询ip地址 188 | ![](/images/CMD_Powershell-images/cmd_powershell.2.png) 189 | 2.可以使用ping命令查看是否连接有网络,包括是否是科学环境 190 | ![](/images/CMD_Powershell-images/cmd_powershell.3.png) 191 | ## 2.使用bat脚本 192 | 再次介绍:BAT文件是批处理文件的一种,包含一系列可以在CMD中自动执行的命令,常用于自动化任务 193 | 需求:1.我每次想浏览Jekyll网站时,都需要运行一个命令,以此启动一个本地的开发服务器 194 | 通过运行这个bat文件,就能自动运行其中的命令 195 | ![](/images/CMD_Powershell-images/cmd_powershell.4.png) 196 | 2.可以写一个py文件的启动器 197 | ![](/images/CMD_Powershell-images/cmd_powershell.5.png) 198 | ## 3.进行文件间的操作 199 | 1.图中演示了我将ipconfig的输出重定向到了ip.txt 200 | ![](/images/CMD_Powershell-images/cmd_powershell.6.png) 201 | ## 4.核心概念 202 | 1.重定向运算 203 | ``` 204 | >> (是左边出内容追加到右边) 205 | > (是左边输出内容覆盖到右边) 206 | < (是右边出内容追加到左边) 207 | << (记忆:箭头哪边,内容向哪边走) 208 | ``` 209 | 2.管道运算 210 | ``` 211 | A `|` B (A的输出作为B的输入) 212 | ``` 213 | 3.命令帮助信息查看 214 | ``` 215 | 命令 /? 216 | ``` 217 | 使用此命令后会显示命令的用法,和参数的介绍 218 | ![](/images/CMD_Powershell-images/cmd_powershell.7.png) 219 | 4.更多的操作我目前并没怎么没有用到,如果有机会用到再更新 220 | 221 | --- 222 | 223 | # **三.CMD命令大全** 224 | 225 | --- 226 | 227 | CMD(命令提示符)有许多命令,用于文件管理、系统诊断、网络操作等。在这里,将根据日常使用的**重要性和频率**对 CMD 命令进行排序和介绍。 228 | 229 | ## 1. 文件和目录管理命令 230 | 231 | 这些是最常用的命令,用于操作文件和文件夹。 232 | 233 | - **dir**:列出当前目录的文件和子目录。 234 | ``` 235 | dir 236 | ``` 237 | - **cd**:改变当前目录,进入指定路径。 238 | ``` 239 | cd 路径 240 | ``` 241 | - **copy**:复制文件到指定位置。 242 | ``` 243 | copy source.txt 路径 244 | ``` 245 | - **move**:移动文件或重命名文件。 246 | ``` 247 | move source.txt 路径 248 | ``` 249 | - **del**:删除一个或多个文件。 250 | ``` 251 | del file.txt 252 | ``` 253 | - **mkdir**:创建新目录。 254 | ``` 255 | mkdir NewFolder 256 | ``` 257 | - **rmdir**:删除目录。 258 | 259 | ## 2. 系统诊断和修复命令 260 | 261 | 这些命令用于检查和修复系统,排查问题。 262 | 263 | - **sfc /scannow**:扫描并修复系统文件的完整性。 264 | ``` 265 | sfc /scannow 266 | ``` 267 | - **chkdsk**:检查磁盘并修复文件系统错误。 268 | ``` 269 | chkdsk C: /f 270 | ``` 271 | - **tasklist**:显示当前运行的所有进程。 272 | ``` 273 | tasklist 274 | ``` 275 | - **taskkill**:终止指定进程。 276 | ``` 277 | taskkill /IM notepad.exe /F 278 | ``` 279 | - **systeminfo**:显示系统的详细配置信息。 280 | ``` 281 | systeminfo 282 | ``` 283 | - **ipconfig**:显示网络接口的配置信息,如 IP 地址、子网掩码等。 284 | ``` 285 | ipconfig 286 | ``` 287 | - **ping**:测试与远程服务器的网络连接。 288 | ``` 289 | ping google.com 290 | ``` 291 | 292 | ## 3. 网络命令 293 | 294 | 这些命令用于诊断网络连接和配置网络设置。 295 | 296 | - **netstat**:显示当前的网络连接、端口和协议。 297 | ``` 298 | netstat -an 299 | ``` 300 | - **tracert**:显示到目标主机的路由路径。 301 | ``` 302 | tracert google.com 303 | ``` 304 | - **nslookup**:查询域名对应的 IP 地址或检查 DNS 解析问题。 305 | ``` 306 | nslookup google.com 307 | ``` 308 | - **net use**:映射或断开网络驱动器。 309 | ``` 310 | net use Z: \\server\sharedfolder 311 | ``` 312 | - **netsh**:管理网络配置(如 IP 设置、防火墙规则)。 313 | 314 | ## 4. 批处理命令 315 | 316 | 这些命令经常在批处理脚本(.bat 文件)中使用,以自动化重复任务。 317 | 318 | - **echo**:显示消息或启用/禁用命令回显。 319 | ``` 320 | echo Hello, World! 321 | ``` 322 | - **set**:设置或显示环境变量。 323 | ``` 324 | set PATH 325 | ``` 326 | - **pause**:在批处理文件中暂停命令执行,等待用户按键。 327 | ``` 328 | pause 329 | ``` 330 | - **if**:条件语句,判断是否执行某些命令。 331 | ``` 332 | if exist file.txt echo File exists 333 | ``` 334 | - **for**:循环处理文件或命令。 335 | ``` 336 | for %%f in (*.txt) do echo %%f 337 | ``` 338 | - **goto**:跳转到脚本中的某个标签,通常和 if 配合使用。 339 | ``` 340 | goto :start 341 | ``` 342 | 343 | ## 5. 用户和权限管理 344 | 345 | 这些命令用于管理用户账户和权限。 346 | 347 | - **net user**:管理用户账户(创建、删除、修改用户)。 348 | ``` 349 | net user username password /add 350 | ``` 351 | - **net localgroup**:管理本地用户组。 352 | ``` 353 | net localgroup administrators username /add 354 | ``` 355 | - **runas**:以其他用户身份执行命令。 356 | ``` 357 | runas /user:Administrator cmd 358 | ``` 359 | 360 | ## 6. 磁盘管理命令 361 | 362 | 这些命令用于管理硬盘驱动器和分区。 363 | 364 | - **diskpart**:管理磁盘分区(创建、删除、调整大小)。 365 | ``` 366 | diskpart 367 | ``` 368 | - **format**:格式化磁盘或分区。 369 | ``` 370 | format D: 371 | ``` 372 | 373 | ## 7. 进程和服务管理 374 | 375 | 这些命令用于查看、终止进程或管理系统服务。 376 | 377 | - **sc**:管理系统服务(启动、停止、查询服务状态)。 378 | 379 | **sc query wuauserv** 380 | 381 | - **shutdown**:关闭或重启计算机。 382 | 383 | **shutdown /s /t 0 # 立即关机 shutdown /r /t 0 # 立即重启** 384 | 385 | ## 8. 时间与计划任务管理 386 | 387 | 这些命令用于与系统时间、计划任务有关的操作。 388 | 389 | - **time**:显示或设置系统时间。 390 | 391 | **time** 392 | 393 | - **schtasks**:管理计划任务,自动执行任务。 394 | 395 | **schtasks /create /sc daily /tn "Backup" /tr "backup.bat" /st 23:00** 396 | 397 | ## 9. 高级管理命令 398 | 399 | - **bcdedit**:管理启动配置数据(修改启动选项)。 400 | 401 | **bcdedit /set {bootmgr} timeout 30** 402 | 403 | - **gpupdate**:更新组策略设置。 404 | 405 | **gpupdate /force** 406 | 407 | - **wmic**:Windows Management Instrumentation Command,用于查询和管理操作系统相关信息。 408 | 409 | **wmic process get name** 410 | 411 | ## 10.总结: 412 | 413 | 1. **文件和目录管理**:如 dir、cd、copy、del 等,是最基础的操作。 414 | 2. **系统诊断和修复**:如 sfc、chkdsk、ipconfig 等,用于维护和修复系统。 415 | 3. **网络操作**:如 ping、netstat、tracert,对于网络调试和故障排查非常有用。 416 | 4. **批处理和自动化**:如 echo、for、if,用于编写自动化脚本。 417 | 5. **用户和权限管理**:如 net user、runas,用于管理账户和权限。 418 | 419 | --- 420 | 421 | # **四.bat文件语法** 422 | 423 | --- 424 | 425 | 批处理文件(BAT 文件)的语法基于 Windows 的命令行工具 CMD。BAT 文件用于自动执行一系列命令,通常以 .bat 或 .cmd 为扩展名。编写 BAT 文件时,使用的是 CMD 中的命令及其特定的控制结构来控制脚本的流程。 426 | 427 | ## 1.基本语法结构 428 | 429 | BAT 文件的每一行通常包含一个命令,并且按照自上而下的顺序执行。常用的命令包括文件操作、系统管理、进程控制等。 430 | 431 | - **注释:** 使用 REM 或 :: 来注释代码,注释行不会执行。 432 | 433 | **REM This is a comment 434 | :: This is also a comment** 435 | 436 | - **显示消息:** 使用 echo 打印消息或控制命令回显。 437 | 438 | **echo Hello, World!** 439 | 440 | - **变量:** 使用 set 定义和访问变量。变量名用 % 包围来引用。 441 | 442 | **set myVar=123 echo %myVar%** 443 | 444 | - **禁用回显:** 在脚本开头使用 @echo off 来关闭命令回显,使得脚本只输出你想要的内容,而不是每个命令的执行行。 445 | 446 | **@echo off** 447 | 448 | ## 2.流程控制语法 449 | 450 | BAT 文件支持基本的流程控制语法,如条件语句、循环等。 451 | 452 | ### 条件语句 (if) 453 | 454 | - if用于执行条件判断。可以根据文件是否存在、字符串比较或者数值比较来决定代码的执行。 455 | 456 | - 存在判断: 457 | 458 | **if exist file.txt echo File exists** 459 | 460 | - 字符串比较: 461 | 462 | **if "%myVar%"=="123" echo Variable is 123** 463 | 464 | - 数值比较: 465 | 466 | **if %myVar% GEQ 100 echo Value is greater than or equal to 100** 467 | 468 | ### 循环语句 (for) 469 | 470 | - for 循环用于遍历文件、目录或变量集合。 471 | 472 | - 遍历文件: 473 | 474 | **for %%f in (*.txt) do echo %%f** 475 | 476 | - 遍历数字范围: 477 | 478 | **for /L %%i in (1, 1, 10) do echo %%i** 479 | 480 | ## 3.输入输出 481 | 482 | - **用户输入:** 使用 set /p 提示用户输入,并将输入存储到变量中。 483 | 484 | **set /p userInput=Enter your name: echo Hello, %userInput%** 485 | 486 | - **重定向输出:** 使用 >、>> 将命令的输出重定向到文件。 487 | 488 | - 将输出重定向到文件并覆盖该文件的内容。 489 | 490 | **echo This is a test > output.txt** 491 | 492 | - 将输出附加到文件末尾。 493 | 494 | **echo Another line >> output.txt** 495 | 496 | 497 | ## 4.子程序与跳转 498 | 499 | - **标签 (:)** 和 **跳转 (goto)**:可以通过标签创建脚本的不同部分,并使用 goto 跳转到某个标签。 500 | 501 | **goto :start :start echo This is the start** 502 | 503 | - **call 语句:** 用于调用另一个批处理文件或调用当前脚本的子例程。 504 | 505 | **call otherScript.bat** 506 | 507 | 508 | ## 5.错误处理 509 | 510 | - **errorlevel**:每个命令执行后会设置一个返回码,称为 errorlevel。可以通过检查 errorlevel 来执行错误处理。 511 | 512 | **if %errorlevel% neq 0 echo An error occurred** 513 | 514 | ## 6.批处理文件常见参数 515 | 516 | - **%1 到 %9**:批处理文件可以接收命令行参数,使用 %1 访问第一个参数,%2 访问第二个参数,依次类推。 517 | 518 | **echo First parameter is %1** 519 | 520 | - **shift**:用于左移参数,%2 变为 %1,%3 变为 %2。 521 | 522 | **shift** 523 | 524 | ## 7.批处理文件常用命令 525 | 526 | - **pause**:暂停脚本执行,等待用户按任意键继续。 527 | 528 | **pause** 529 | 530 | - **exit**:终止批处理文件的执行,并可选择返回错误码。 531 | 532 | **exit** 533 | 534 | 535 | ## 8.高级功能 536 | 537 | - **setlocal 和 endlocal**:用于限制变量的作用范围,使得在 setlocal 和 endlocal 之间定义的变量在该范围外无效。 538 | 539 | **setlocal set myVar=123 endlocal** 540 | 541 | - **环境变量操作**:批处理文件可以访问系统环境变量,如 PATH、TEMP 等,并进行修改或使用。 542 | 543 | 544 | ## 9.批处理文件的应用场景 545 | 546 | - **自动化任务**:定期执行备份、清理日志文件或其他维护任务。 547 | - **批量操作**:批处理文件可以批量处理大量文件,如重命名、复制或移动。 548 | - **系统配置和设置**:设置系统变量、安装软件或配置网络等。 549 | 550 | ## 10.总结: 551 | 552 | BAT 文件语法虽然简单,但在系统自动化和维护中非常有用。它结合了条件语句、循环、变量操作等功能,可以编写复杂的脚本来处理各种任务。如果需要实现更复杂的功能或与外部工具交互,批处理脚本也可以作为基础,通过调用其他程序实现更强大的自动化解决方案。 553 | 554 | --- 555 | 556 | # **五.Powershell命令大全** 557 | 558 | --- 559 | 560 | PowerShell 是一个功能强大的命令行界面和脚本语言,支持多种命令(cmdlets),这些命令用于系统管理、文件操作、网络管理等。以下是按重要性排序的一些常用 PowerShell 命令及其简要说明: 561 | 562 | ## 1.基本命令 563 | 564 | - **Get-Command**:获取可用的所有命令及其详细信息。 565 | - **Get-Help**:显示有关 PowerShell 命令和语法的帮助信息。 566 | - **Get-Process**:获取当前正在运行的进程列表。 567 | - **Get-Service**:获取当前计算机上所有服务的状态。 568 | 569 | ## 2.文件和目录管理 570 | 571 | - **Get-ChildItem**:列出目录中的文件和子目录(相当于 CMD 中的 dir)。 572 | - **Set-Location**:改变当前工作目录(相当于 CMD 中的 cd)。 573 | - **Copy-Item**:复制文件或目录。 574 | - **Move-Item**:移动文件或目录。 575 | - **Remove-Item**:删除文件或目录。 576 | - **New-Item**:创建新文件或目录。 577 | 578 | ## 3.系统管理 579 | 580 | - **Get-EventLog**:获取系统事件日志。 581 | - **Clear-Host**:清除 PowerShell 窗口中的所有内容。 582 | - **Get-ExecutionPolicy**:查看当前的脚本执行策略。 583 | - **Set-ExecutionPolicy**:设置 PowerShell 脚本的执行策略。 584 | 585 | ## 4.网络管理 586 | 587 | - **Test-Connection**:测试与远程主机的网络连接(相当于 ping 命令)。 588 | - **Get-NetAdapter**:获取网络适配器的详细信息。 589 | - **Get-NetIPAddress**:获取 IP 地址配置。 590 | - **New-NetFirewallRule**:创建新的防火墙规则。 591 | 592 | ## 5.用户和权限管理 593 | 594 | - **Get-LocalUser**:列出本地用户账户。 595 | - **New-LocalUser**:创建新的本地用户账户。 596 | - **Remove-LocalUser**:删除本地用户账户。 597 | - **Add-LocalGroupMember**:将用户添加到本地组中。 598 | 599 | ## 6.服务和进程管理 600 | 601 | - **Start-Service**:启动指定服务。 602 | - **Stop-Service**:停止指定服务。 603 | - **Restart-Service**:重启指定服务。 604 | - **Stop-Process**:终止指定进程。 605 | 606 | ## 7.脚本和自动化 607 | 608 | - **Invoke-Command**:在本地或远程计算机上执行命令或脚本块。 609 | - **Start-Job**:启动后台作业。 610 | - **Get-Job**:获取后台作业的信息。 611 | - **Receive-Job**:接收后台作业的输出。 612 | 613 | ## 8.对象和管道处理 614 | 615 | - **Select-Object**:选择对象的特定属性。 616 | - **Where-Object**:过滤对象集合,返回满足条件的对象。 617 | - **Sort-Object**:对对象集合进行排序。 618 | 619 | ## 9.注册表操作 620 | 621 | - **Get-Item**:获取指定路径的注册表项。 622 | - **Set-Item**:设置注册表项的值。 623 | - **Remove-Item**:删除注册表项或值。 624 | 625 | ## 10.获取系统信息 626 | 627 | - **Get-ComputerInfo**:获取计算机的系统信息。 628 | - **Get-WmiObject**:访问 Windows 管理工具(WMI)以获取系统的详细信息。 629 | 630 | ## 11.环境变量 631 | 632 | - **Get-ChildItem Env:**:列出所有环境变量。 633 | - **Set-Item Env:VariableName**:设置或修改环境变量。 634 | 635 | ## 12.其他常用命令 636 | 637 | - **Write-Host**:向控制台输出信息。 638 | - **Read-Host**:从用户获取输入。 639 | - **Exit**:退出 PowerShell 会话。 640 | 641 | ## 13.总结 642 | 643 | 以上列举的是一些重要且常用的 PowerShell 命令,按照其在日常使用中的重要性进行排序。这些命令可以帮助用户完成许多任务,从基础的文件管理到复杂的系统管理和自动化操作。PowerShell 的强大之处在于它的命令组合能力和对象处理能力,用户可以通过管道将一个命令的输出直接传递给另一个命令,从而实现更复杂的操作。 644 | 645 | --- 646 | 647 | # **六.ps1文件语法** 648 | 649 | --- 650 | 651 | PSL 文件通常是指 PowerShell 脚本文件,其扩展名为 .ps1。PowerShell 脚本使用 PowerShell 语言编写,支持丰富的语法和功能。以下是对 PowerShell 脚本(PSL 文件)语法的详细介绍: 652 | 653 | ## 1.**基本结构** 654 | 655 | - **脚本注释**: 656 | 657 | - 单行注释使用井符号 658 | 659 | **# This is a comment** 660 | 661 | - 多行注释使用 <# 和 #>: 662 | 663 | **<# This is a multi-line comment It can span multiple lines #>** 664 | 665 | ## 2.变量 666 | 667 | - **定义变量**:使用 $ 符号定义变量,等号(=)用于赋值。 668 | 669 | **$myVariable = "Hello, World!"** 670 | 671 | - **使用变量**:在字符串中使用变量时,可用双引号引用。 672 | 673 | **Write-Host "The message is: $myVariable"** 674 | 675 | ## 3.数据类型 676 | 677 | **$stringVar = "This is a string" $intVar = 42 $arrayVar = @(1, 2, 3, 4) $hashTable = @{"key1" = "value1"; "key2" = "value2"}** 678 | 679 | ## 4.流程控制 680 | 681 | - **条件语句**: 682 | 683 | **if ($condition) { # Do something } elseif ($otherCondition) { # Do something else } else { # Do another thing }** 684 | 685 | - **循环语句**: 686 | 687 | - for 循环: 688 | 689 | **for ($i = 0; $i -lt 10; $i++) { Write-Host $i }** 690 | 691 | - foreach 循环: 692 | 693 | **foreach ($item in $arrayVar) { Write-Host $item }** 694 | 695 | - while 循环: 696 | 697 | **$counter = 0 while ($counter -lt 5) { Write-Host $counter $counter++ }** 698 | 699 | ## 5.函数 700 | 701 | - **定义函数**:使用 function 关键字定义一个函数。 702 | 703 | **function MyFunction { param ($param1, $param2) Write-Host "Parameter 1 is $param1" Write-Host "Parameter 2 is $param2" } MyFunction "Value1" "Value2"** 704 | 705 | ## 6.错误处理 706 | 707 | - **try、catch 和 finally**: 708 | 709 | **try { # Code that might throw an exception } catch { Write-Host "An error occurred: $_" } finally { # Code that runs regardless of success or failure }** 710 | 711 | ## 7.模块和导入 712 | 713 | - **导入模块**:使用 Import-Module 导入 PowerShell 模块。 714 | 715 | **Import-Module ModuleName** 716 | 717 | ## 8.输入和输出 718 | 719 | - **输出到控制台** 720 | 721 | **Write-Host "This is output to the console"** 722 | 723 | - **获取用户输入** 724 | 725 | **$userInput = Read-Host "Enter your name" Write-Host "Hello, $userInput!"** 726 | 727 | ## 9.管道 728 | 729 | - PowerShell支持管道(`|`)将一个命令的输出直接传递给另一个命令。 730 | 731 | **Get-Process `|` Where-Object { $_.CPU -gt 100 }** 732 | 733 | ## 10.文件操作 734 | 735 | - **读取文件** 736 | 737 | **$content = Get-Content "C:\path\to\file.txt"** 738 | 739 | - **写入文件** 740 | 741 | **"Hello, World!" `|` Out-File "C:\path\to\output.txt"** 742 | 743 | ## 11 对象和属性 744 | 745 | - PowerShell 的强大之处在于对对象的处理,可以访问对象的属性和方法。 746 | 747 | **$process = Get-Process `|` Where-Object { $_.Name -eq "powershell" } Write-Host "Process ID: $($process.Id)"** 748 | 749 | ## 12.自动化和计划任务 750 | 751 | - **创建计划任务**: 752 | 753 | **$action = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "C:\path\to\script.ps1" $trigger = New-ScheduledTaskTrigger -At 7am -Daily Register-ScheduledTask -Action $action -Trigger $trigger -TaskName "MyTask"** 754 | 755 | ## 13.模块的创建与使用 756 | 757 | - **创建模块**:将相关的函数和命令放入一个 .psm1 文件中。 758 | - **使用模块**:导入模块并调用模块中的函数。 759 | 760 | ## 14.管道和流 761 | 762 | - 管道允许多个命令连接在一起,可以有效处理数据流。 763 | - **示例**: 764 | 765 | **Get-Service `|` Where-Object { $_.Status -eq 'Running' }** 766 | 767 | ## 15.自动完成和参数 768 | 769 | - PowerShell 支持命令的自动完成功能,并可以使用参数简化命令的输入。 770 | 771 | ## 16.总结 772 | 773 | PowerShell 脚本(PSL 文件)语法强大且灵活,支持多种编程结构,使其能够用于系统管理、自动化任务、文件处理等多种场景。通过合理使用这些语法结构,用户可以编写高效、可维护的脚本来完成复杂的操作。 774 | 775 | --- 776 | 777 | # **七.Powershell使用示例** 778 | 779 | --- 780 | 781 | ## 1.配置环境 782 | 783 | ### 1.1.执行策略介绍 784 | 785 | 执行策略(Execution Policy)是 PowerShell 中的一个安全功能,用于控制脚本和配置文件的运行权限。它通过限制脚本的执行来保护系统不受潜在恶意代码的影响。主要的执行策略有: 786 | 787 | 1. **Restricted**:默认策略,不允许任何脚本运行。 788 | 2. **AllSigned**:只允许运行由受信任的发布者签名的脚本。 789 | 3. **RemoteSigned**:本地脚本可以运行,远程脚本必须签名。 790 | 4. **Unrestricted**:允许所有脚本运行,但在执行远程脚本时会有警告。 791 | 5. **Bypass**:不进行任何检查,允许所有脚本运行。 792 | 6. **Undefined**:没有设置策略,PowerShell 会回到默认策略。 793 | 794 | 可以通过 PowerShell 中的 Get-ExecutionPolicy 命令查看当前策略,通过 Set-ExecutionPolicy 命令更改策略。修改执行策略时需要考虑安全性和系统的需求。 795 | 796 | ### 1.2.运行命令检查执行策略 797 | 798 | 我这已经提前更改过了,初始是限制的 799 | 800 | **Get-ExecutionPolicy -List** 801 | 802 | ![](/images/CMD_Powershell-images/cmd_powershell.8.png) 803 | 804 | ### 1.3.更改执行策略 805 | 更改CurrentUser 的策略为RemoteSigned 806 | 807 | **Set-ExecutionPolicy RemoteSigned -Scope CurrentUser** 808 | 809 | 810 | ## 2.批量重命名文件名 811 | 812 | ### 2.1.需求 813 | 814 | 我需要对一个目录下的所有png图片按照时间顺序进行指定格式的重命名 815 | 816 | ### 2.2.编写代码 817 | 818 | 文件后缀是ps1,不要写成psl了,数字1与字母l很像 819 | ![](/images/CMD_Powershell-images/cmd_powershell.9.png) 820 | 821 | ### 2.3.在终端中运行 822 | 823 | 需处理的文件 824 | ![](/images/CMD_Powershell-images/cmd_powershell.10.png) 825 | 运行命令 826 | ![](/images/CMD_Powershell-images/cmd_powershell.11.png) 827 | 完成处理 828 | ![](/images/CMD_Powershell-images/cmd_powershell.12.png) 829 | 830 | ### 2.4.python实现相同操作 831 | 832 | ![](/images/CMD_Powershell-images/cmd_powershell.13.png) 833 | ![](/images/CMD_Powershell-images/cmd_powershell.14.png) 834 | 835 | ## 3.注意事项 836 | 837 | ### 1.文件名命名最好不要用中文和空格 838 | 839 | 在**文件路径**中使用**中文字符和空格**可能导致路径**解析错误**,特别是在某些编程语言和工具中。这可能导致文件**无法找到或命令无法执行**,增加了开发和调试的复杂性。因此,使用英文字符和下划线等替代方式更为稳妥 840 | 841 | --- 842 | 843 | # **八.完结** 844 | 845 | --- 846 | 847 | **关于CMD与Powershell,我目前并没有使用到过多的功能,相比于ps1脚本,更多人应该更喜欢py脚本,本文也仅简要介绍ps1与bat脚本,更多的功能请自行探索** 848 | 849 | -------------------------------------------------------------------------------- /members/水镜/编程入门笔记/Git使用教程.md: -------------------------------------------------------------------------------- 1 | # **简介** 2 | 本文主要内容: 3 | 1.介绍Git的概念 4 | 2.详细演示Git环境的配置 5 | 3.列出Git的常用命令 6 | 4.在一定程度上演示如何在VS Code上使用Git管理GitHub上的仓库 7 | Git官网:[https://git-scm.com/](https://git-scm.com/) 8 | GitHub官网:[https://github.com/](https://github.com/) 9 | VS Code官网:[https://code.visualstudio.com/](https://code.visualstudio.com/) 10 | 11 | --- 12 | 13 | # **一.Git的概述** 14 | --- 15 | Git 是一个**分布式版本控制**系统,用于管理项目中的代码变化,特别适合多人协作开发。它的主要功能包括: 16 | 17 | 1. **版本控制**:Git 可以记录代码的每一次变动,使你可以查看、比较并恢复到之前的任意版本。 18 | 19 | 2. **分支和合并**:Git 允许创建分支以开发不同的功能或修复问题。分支上的改动可以独立进行,最后再将它们合并到主分支。 20 | 21 | 3. **分布式**:与传统的版本控制系统不同,Git 是分布式的。每个开发者都有完整的项目历史,可以离线进行代码管理和提交。 22 | 23 | 4. **协作开发**:Git 很适合团队合作,支持多人并行开发。当开发者提交代码后,可以通过 pull request 合并到主项目中,确保代码的连续性和质量。 24 | 25 | ## 1.Git的核心概念 26 | - **Repository (仓库)**:存储项目的文件和其历史记录的地方。可以是本地仓库或远程仓库(如 GitHub 上的仓库)。 27 | - **Commit (提交)**:一次代码变动的快照,包括改动的具体内容和提交说明。 28 | - **Branch (分支)**:并行开发的通道。每个分支都是代码历史的独立线条,可以独立于其他分支工作。 29 | - **Merge (合并)**:将一个分支上的改动合并到另一个分支。 30 | - **Pull (拉取)**:从远程仓库获取最新的更改并合并到本地分支。 31 | - **Push (推送)**:将本地仓库的更改上传到远程仓库。 32 | 33 | ## 2.Git的常用命令 34 | - git init:初始化一个新的 Git 仓库。 35 | - git clone:克隆远程仓库到本地。 36 | - git status:查看当前工作区的状态(有哪些改动)。 37 | - git add:将改动添加到暂存区。 38 | - git commit -m "消息":提交暂存区的改动,并添加描述信息。 39 | - git push:将本地提交推送到远程仓库。 40 | - git pull:从远程仓库拉取更新并合并到本地分支。 41 | - git branch:查看所有分支,或创建、删除分支。 42 | - git checkout:切换到另一个分支。 43 | 通过 Git,开发者能够更好地管理代码版本,尤其是在复杂项目中,它可以极大地提高效率并减少冲突。 44 | 45 | --- 46 | 47 | # **二.配置Git环境** 48 | --- 49 | ## 1.下载Git 50 | 网址:[https://git-scm.com/downloads](https://git-scm.com/downloads) 51 | ![](/images/git-images/git.1.png) 52 | ![](/images/git-images/git.2.png) 53 | 54 | --- 55 | 56 | ## 2.安装Git 57 | 安装过程有**许多**步骤,**一般来说**全部默认即可,一路**next**直到**install**结束 58 | 但是可以选择一下使用哪个**编辑器** 59 | 下面的图是对安装过程各个步骤的解释 60 | 1.可自选**路径** 61 | ![](/images/git-images/git.3.png) 62 | 2.图中标注了选项的**含义** 63 | ![](/images/git-images/git.4.png) 64 | 3.这个页面是询问是否希望在Windows的开始菜单,创建一个名为“Git”的文件夹,存放Git的快捷方式 65 | ![](/images/git-images/git.5.png) 66 | 67 | ### 2.1.选择编辑器 68 | **4.这里需要选择一个默认编辑器 69 | 注意:不是给你下载选的编辑器,只是告诉Git需要文本编辑时默认打开哪个 70 | 不论你选择vim还是VS Code作为默认编辑器,都需要自己下载 71 | 一般来说Git会内置一个vim编辑器,不过功能很少 72 | 我已经下载了VS Code编辑器,之后的演示基本都在VS Code上进行 73 | VS Code编辑器使用Git主要用VS Code打开文件夹,进入资源管理器操作,当然也可终端使用命令** 74 | ~~至于Vim编辑器,我没用过并不怎么清楚~~ 75 | 76 | ### 2.2.Vim编辑器和VS Code编辑器对比 77 | #### 1. Vim 编辑器: 78 | - **特点**: 79 | 80 | - **轻量级**:Vim 是一个非常轻量级的文本编辑器,速度快且占用资源少。 81 | - **命令行界面**:运行在终端中,非常适合那些喜欢使用键盘操作的人。 82 | - **键盘驱动**:Vim 的操作主要依赖于快捷键,不使用鼠标。这使得它在熟练使用后非常高效,但初学者需要一定的学习成本。 83 | - **跨平台**:可以在任何系统上使用,包括 Windows、Linux、macOS。 84 | 85 | - **适用人群**: 86 | 87 | - 熟悉命令行操作,喜欢使用键盘而不依赖鼠标的用户。 88 | - 需要快速轻量的编辑器来编辑简单的文件(如 Git 提交消息)。 89 | 90 | - **适合场景**: 91 | 92 | - 如果你在终端环境下工作较多,并且已经习惯或愿意学习 Vim 的快捷键,Vim 是一个非常高效的工具。 93 | - 你只需要一个简洁、快速的编辑器来修改 Git 的提交信息或进行简单的代码编辑。 94 | 95 | #### 2.VS Code编辑器: 96 | - **特点**: 97 | 98 | - **图形界面**:VS Code 是一个现代化的图形化编辑器,提供了丰富的界面和强大的功能。 99 | - **插件丰富**:VS Code 有大量的插件可供安装,支持多种编程语言、Git 集成、调试工具等。 100 | - **直观易用**:对于初学者和熟悉图形界面操作的用户,VS Code 更加直观,使用起来更方便。 101 | - **集成 Git**:VS Code 有内置的 Git 支持,提供了友好的界面来处理 Git 操作(如提交、查看历史、冲突解决等)。 102 | 103 | - **适用人群**: 104 | 105 | - 喜欢使用功能丰富的 IDE 或 GUI 编辑器的用户。 106 | - 需要更强大的代码编辑、调试和扩展功能。 107 | - 喜欢鼠标操作或者还不太熟悉命令行操作的用户。 108 | 109 | - **适合场景**: 110 | 111 | - 你更注重编程效率,喜欢通过扩展插件和图形化界面处理 Git。 112 | - 你需要更多的工具支持,如代码自动补全、调试、扩展库等功能。 113 | 114 | #### **3.编辑器总结** 115 | - 如果你**熟悉命令行**,需要一个轻量级、高效的编辑器,**Vim** 是不错的选择。 116 | - 如果你更喜欢**图形化界面**,希望使用一个功能丰富、易于扩展的编辑器,**VS Code** 可能更适合你,尤其是如果你在 Git 操作中经常需要进行代码修改或调试。 117 | 118 | 这是默认的Vim编辑器 119 | ![](/images/git-images/git.6.png) 120 | **我选择使用VS Code编辑器,根据你的需求选择** 121 | ![](/images/git-images/git.7.png) 122 | 5. 123 | ![](/images/git-images/git.8.png) 124 | 6. 125 | ![](/images/git-images/git.9.png) 126 | 127 | ### 2.3.SSH介绍 128 | SSH(**Secure Shell**)是一种用于通过不安全的网络安全登录到远程计算机的协议。它主要用于在两个系统之间建立加密的连接,以便安全地执行命令行、传输文件和进行系统管理等操作。SSH 通过加密技术,保证了传输的数据不被窃听或篡改,通常用于服务器管理和远程开发工作。 129 | 130 | #### SSH 的主要功能: 131 | - **远程登录**:可以在本地计算机上通过终端控制远程服务器。 132 | - **文件传输**:通过 scp 或 sftp 等方式在本地和远程机器之间安全地传输文件。 133 | - **端口转发**:通过 SSH 隧道实现的端口转发功能,可以把本地端口重定向到远程机器上的端口,用于保护其他通信协议的安全。 134 | 135 | #### OpenSSH 是什么? 136 | **OpenSSH** 是 SSH 协议的一个开源实现,广泛应用于各类操作系统中(特别是类 Unix 系统,如 Linux 和 macOS)。它不仅支持 SSH 协议本身,还包括一些相关的工具,例如: 137 | 138 | - ssh:用于远程登录。 139 | - scp 和 sftp:用于安全地传输文件。 140 | - ssh-agent 和 ssh-add:用于管理 SSH 密钥和自动登录。 141 | - sshd:SSH 服务器程序,允许远程登录到本地系统。 142 | 143 | OpenSSH 是目前最常用的 SSH 实现之一,由于其开源和安全性,它在服务器管理和远程开发中被广泛使用。 144 | 145 | 在你的 Git 安装过程中,选择使用 **OpenSSH** 意味着 Git 将使用 SSH 协议来执行安全的远程操作,比如在 Git 仓库中通过 SSH 进行拉取或推送操作。 146 | 147 | 图中有两个选择: 148 | 1. **Use bundled OpenSSH**(使用 Git 附带的 OpenSSH):这意味着 Git 会使用 Git 自带的 ssh.exe,也就是你不需要单独安装 SSH 程序,直接使用 Git 包含的版本。 149 | 150 | 2. **Use external OpenSSH**(使用外部的 OpenSSH):这选项意味着你已经在系统中安装了 OpenSSH,Git 将使用系统中已有的 ssh.exe,而不是安装 Git 自己的版本。这个选择适用于你已经有外部的 OpenSSH 安装并且想用系统默认的 SSH 配置。 151 | 一般选择**默认**即可 152 | 153 | 7.![](/images/git-images/git.10.png)8.![](/images/git-images/git.11.png) 154 | 9.![](/images/git-images/git.12.png)10.![](/images/git-images/git.14.png) 155 | 11.![](/images/git-images/git.15.png)12.![](/images/git-images/git.16.png) 156 | 13. 157 | ![](/images/git-images/git.13.png) 158 | 14. 159 | ![](/images/git-images/git.18.png) 160 | 15..**安装完成**![](/images/git-images/git.19.png) 161 | 162 | --- 163 | 164 | ## 3.设置用户签名 165 | **Git首次安装必须设置用户签名,否则无法提交代码** 166 | 鼠标**右键**点击桌面,打开**Open Git Bash Here** 167 | (**没看到就是在更多选项**) 168 | ![](/images/git-images/git.20.png) 169 | 可以用命令查看版本: 170 | ``` 171 | git --version 172 | ``` 173 | 如果觉得字体小,可以**Ctrl+鼠标滚轮**放大 174 | ``` 175 | git config --global user.name 176 | git config --global user.email 177 | ``` 178 | (用户名和邮箱任意设置即可,不会去查验邮箱是否真实) 179 | ![](/images/git-images/git.21.png) 180 | 上述操作后,C盘的用户的用户下会生成一个.gitconfig文件,里面有你设置的用户名和邮箱 181 | ![](/images/git-images/git.22.png) 182 | 183 | --- 184 | 185 | # **三.编辑器常用命令** 186 | 187 | --- 188 | 189 | ## Vim 编辑器常用命令 190 | ### 1. 模式切换 191 | 192 | - i:进入插入模式(开始编辑文本)。 193 | - Esc:退出插入模式,回到普通模式。 194 | - :q:退出 Vim。 195 | - :w:保存文件。 196 | - :wq:保存并退出。 197 | - :q!:强制退出(不保存修改)。 198 | - :x:保存并退出(与 :wq 类似)。 199 | 200 | ### 2. 文件操作 201 | 202 | - vim filename:打开文件,若文件不存在则新建文件。 203 | - :e filename:打开其他文件。 204 | - :w filename:另存为指定文件名。 205 | 206 | ### 3. 移动光标 207 | 208 | - h:向左移动一个字符。 209 | - j:向下移动一行。 210 | - k:向上移动一行。 211 | - l:向右移动一个字符。 212 | - gg:移动到文件开头。 213 | - G:移动到文件末尾。 214 | - w:移动到下一个单词的开头。 215 | - b:移动到上一个单词的开头。 216 | 217 | ### 4. 文本编辑 218 | 219 | - x:删除光标下的字符。 220 | - dd:删除当前行。 221 | - yy:复制当前行。 222 | - p:粘贴。 223 | - u:撤销上一步操作。 224 | - Ctrl + r:重做上一步操作。 225 | 226 | ### 5. 查找和替换 227 | 228 | - /keyword:查找 keyword。 229 | - n:跳到下一个匹配项。 230 | - N:跳到上一个匹配项。 231 | - :%s/old/new/g:全局替换 old 为 new。 232 | - :n,m s/old/new/g:从第 n 行到第 m 行替换 old 为 new。 233 | 234 | --- 235 | 236 | ## VS Code 编辑器常用命令 237 | 238 | ### 1. 基础命令 239 | 240 | - Ctrl + P / Cmd + P:快速打开文件(输入文件名)。 241 | - Ctrl + N / Cmd + N:新建文件。 242 | - Ctrl + S / Cmd + S:保存文件。 243 | - Ctrl + Shift + S / Cmd + Shift + S:另存为。 244 | - Ctrl + W / Cmd + W:关闭当前文件。 245 | - Ctrl + Shift + P / Cmd + Shift + P:打开命令面板。 246 | 247 | ### 2. 导航 248 | 249 | - Ctrl + Tab / Cmd + Tab:切换打开的文件。 250 | - Ctrl + G / Cmd + G:跳转到指定行号。 251 | - Ctrl + Shift + O / Cmd + Shift + O:按符号(函数/类名)跳转。 252 | - Ctrl + T / Cmd + T:搜索并跳转到符号。 253 | 254 | ### 3. 编辑 255 | 256 | - Ctrl + Z / Cmd + Z:撤销。 257 | - Ctrl + Shift + Z / Cmd + Shift + Z:重做。 258 | - Ctrl + X / Cmd + X:剪切。 259 | - Ctrl + C / Cmd + C:复制。 260 | - Ctrl + V / Cmd + V:粘贴。 261 | - Ctrl + / / Cmd + /:注释/取消注释当前行。 262 | - Alt + Up / Option + Up:上移当前行。 263 | - Alt + Down / Option + Down:下移当前行。 264 | 265 | ### 4. 多光标编辑 266 | 267 | - Alt + Click / Option + Click:添加光标。 268 | - Ctrl + Alt + Down / Cmd + Option + Down:向下添加光标。 269 | - Ctrl + Alt + Up / Cmd + Option + Up:向上添加光标。 270 | 271 | ### 5. 代码格式化和调试 272 | 273 | - Shift + Alt + F / Shift + Option + F:格式化代码。 274 | - F5:启动/继续调试。 275 | - F9:设置/取消断点。 276 | - F10:逐过程调试。 277 | - F11:逐语句调试。 278 | 279 | ### 6. 搜索和替换 280 | 281 | - Ctrl + F / Cmd + F:查找。 282 | - Ctrl + H / Cmd + H:替换。 283 | - Ctrl + Shift + F / Cmd + Shift + F:全局搜索。 284 | 285 | ## 总结 286 | 287 | - **Vim** 的命令主要围绕键盘快捷键,操作高效但学习曲线较陡。 288 | - **VS Code** 则更偏向图形化操作,并提供命令面板,既支持鼠标操作也支持丰富的键盘快捷键,更加适合现代开发者的多任务操作。 289 | 290 | --- 291 | 292 | # **四.Git常用命令** 293 | 294 | --- 295 | 296 | ## 1. 基本 Git 操作 297 | 298 | ### 1.1. 初始化仓库 299 | 300 | - git init:初始化一个新的 Git 仓库。 301 | 302 | ### 1.2. 克隆仓库 303 | 304 | - git clone [url]:从远程仓库克隆项目。 305 | 306 | ### 1.3. 查看状态 307 | 308 | - git status:查看当前文件状态,包括未跟踪的文件、修改文件、暂存文件等。 309 | 310 | ### 1.4. 添加文件到暂存区 311 | 312 | - git add [filename]:将单个文件添加到暂存区。 313 | - git add .:将当前目录下所有更改添加到暂存区。 314 | 315 | ### 1.5. 提交更改 316 | 317 | - git commit -m "[message]":提交暂存区中的更改,并附加提交信息。 318 | - git commit -a -m "[message]":将已跟踪文件的更改自动暂存并提交(不包括新文件)。 319 | 320 | ### 1.6. 查看提交历史 321 | 322 | - git log:查看提交历史。 323 | - git log --oneline:以简短的形式查看提交历史。 324 | 325 | ### 1.7. 查看差异 326 | 327 | - git diff:查看工作区和暂存区的文件差异。 328 | - git diff --staged:查看已暂存文件的差异。 329 | 330 | --- 331 | 332 | ## 2. 分支操作 333 | 334 | ### 2.1. 查看分支 335 | 336 | - git branch:查看本地分支列表。 337 | 338 | ### 2.2. 创建新分支 339 | 340 | - git branch [branch-name]:创建一个新的分支。 341 | 342 | ### 2.3. 切换分支 343 | 344 | - git checkout [branch-name]:切换到指定分支。 345 | - git switch [branch-name]:切换分支的更现代命令。 346 | 347 | ### 2.4. 创建并切换分支 348 | 349 | - git checkout -b [branch-name]:创建并切换到新分支。 350 | - git switch -c [branch-name]:新版本的等效命令。 351 | 352 | ### 2.5. 合并分支 353 | 354 | - git merge [branch-name]:将指定分支合并到当前分支。 355 | 356 | ### 2.6. 删除分支 357 | 358 | - git branch -d [branch-name]:删除分支(若该分支的更改已被合并)。 359 | - git branch -D [branch-name]:强制删除分支(即使未合并)。 360 | 361 | --- 362 | 363 | ## 3. 远程操作 364 | 365 | ### 3.1. 查看远程仓库 366 | 367 | - git remote -v:查看远程仓库地址。 368 | 369 | ### 3.2. 添加远程仓库 370 | 371 | - git remote add [name] [url]:添加远程仓库。 372 | 373 | ### 3.3. 推送到远程仓库 374 | 375 | - git push [remote] [branch]:将本地分支推送到远程仓库。 376 | - git push -u [remote] [branch]:设置默认推送的上游分支,并推送。 377 | 378 | ### 3.4. 拉取远程仓库的更改 379 | 380 | - git pull:从远程仓库拉取并合并更改。 381 | 382 | ### 3.5. 从远程仓库获取更新 383 | 384 | - git fetch:从远程仓库获取更改,但不自动合并。 385 | 386 | --- 387 | 388 | ## 4. 撤销更改 389 | 390 | ### 4.1. 取消文件暂存 391 | 392 | - git reset HEAD [filename]:将文件从暂存区移除,但保留工作区的更改。 393 | 394 | ### 4.2. 撤销文件修改 395 | 396 | - git checkout -- [filename]:撤销工作区的修改,恢复到上一次提交的状态。 397 | 398 | ### 4.3. 重置到特定提交 399 | 400 | - git reset --hard [commit]:重置当前分支到指定的提交,并丢弃之后的更改。 401 | 402 | --- 403 | 404 | ## 5. 标签操作 405 | 406 | ### 5.1. 创建标签 407 | 408 | - git tag [tag-name]:创建一个轻量标签。 409 | - git tag -a [tag-name] -m "[message]":创建带注释的标签。 410 | 411 | ### 5.2. 查看标签 412 | 413 | - git tag:列出所有标签。 414 | 415 | ### 5.3. 推送标签到远程仓库 416 | 417 | - git push origin [tag-name]:推送单个标签。 418 | - git push origin --tags:推送所有标签。 419 | 420 | --- 421 | 422 | ## 6. 其他有用命令 423 | 424 | ### 6.1. 清理未跟踪的文件 425 | 426 | - git clean -f:删除未跟踪的文件。 427 | 428 | ### 6.2. 查看全局配置 429 | 430 | - git config --list:查看所有 Git 配置信息。 431 | 432 | ### 6.3. 设置全局用户名和邮箱 433 | 434 | - git config --global user.name "[name]":设置用户名。 435 | - git config --global user.email "[email]":设置邮箱。 436 | 437 | --- 438 | 439 | # 五.Git Bash使用示范 440 | 441 | --- 442 | 443 | ## 1.初始化本地库 444 | ### 1.1.创建文件,打开Git Bash 445 | ![](/images/git-images/git.23.png) 446 | ### 1.2.使用命令git init 447 | ``` 448 | git init 449 | ``` 450 | ![](/images/git-images/git.24.png) 451 | 452 | --- 453 | 454 | ## 2.查看本地库状态 455 | 使用命令: 456 | ``` 457 | git status 458 | ``` 459 | ![](/images/git-images/git.25.png) 460 | 461 | --- 462 | 463 | ## 3.创建项目 464 | ### 3.1.使用vim创建文件 465 | ![](/images/git-images/git.26.png) 466 | ![](/images/git-images/git.27.png) 467 | ![](/images/git-images/git.28.png) 468 | **我还是更喜欢在VS Code中使用Git 469 | 后续操作都在VS Code中进行 470 | 在VS Code中的终端使用命令与在这里的Git Bash一样 471 | 而且VS Code中有对于Git命令的图形化操作** 472 | 473 | --- 474 | 475 | # **六.VS Code中使用Git** 476 | 477 | --- 478 | 479 | ## 1.安装插件 480 | ### 1.markdownlint 插件 481 | ![](/images/git-images/git.29.png) 482 | #### 功能介绍 483 | 484 | - **自动检测格式问题**:Markdownlint 可以自动检查 Markdown 文件中的格式问题,确保文档符合标准规范。它会提供即时反馈,帮助你在编辑时快速识别和修复潜在的错误。 485 | - **自定义规则**:你可以根据项目需求配置自定义的检查规则,以适应不同的文档风格和要求。 486 | - **集成到工作流中**:Markdownlint 与 VS Code 紧密集成,提供实时反馈,让你在撰写文档时无缝管理格式,提升文档质量。 487 | 488 | ### 2.Git Graph 插件 489 | ![](/images/git-images/git.30.png) 490 | #### 功能介绍 491 | 492 | - **可视化 Git 历史**:Git Graph 提供直观的图形界面,展示 Git 仓库的提交历史、分支、合并情况,帮助你快速理解代码的演变和分支结构。 493 | - **便捷操作**:通过图形化界面,你可以方便地创建和切换分支、提交更改、查看提交差异、解决冲突等,无需输入命令行。 494 | - **增强的代码审查体验**:通过可视化展示,Git Graph 使得团队成员可以更轻松地进行代码审查和协作,提高团队开发效率。 495 | 496 | --- 497 | 498 | ## 2.使用VS Code创建项目 499 | **注意:需要先创建一个文件用作Git仓库** 500 | **VS Code上图形化界面使用Git在源代码管理** 501 | 502 | **快捷键:Ctrl+Shift+G** 503 | 504 | ![](/images/git-images/git.63.png) 505 | **初始化仓库后源代码管理旁边三个点里面有对应的Git 命令相同的操作** 506 | ![](/images/git-images/git.65.png) 507 | ### 2.1.使用VS Code打开文件夹 508 | ![](/images/git-images/git.66.png) 509 | ### 2.1.打开终端 510 | 快捷键:(反引号一般在键盘左上角,特殊原因这里无法打出) 511 | ``` 512 | Crtl+反引号 513 | ``` 514 | 使用命令初始化仓库:(去源代码管理点击初始化仓库也行) 515 | ``` 516 | git init 517 | ``` 518 | ![](/images/git-images/git.31.png) 519 | ### 2.2.新建文件 520 | ![](/images/git-images/git.32.png) 521 | 522 | ### 2.3.提交到暂存区并添加到本地库 523 | #### 方法一(使用终端操作) 524 | #### 1.提交到暂存区 525 | 在**终端**输入命令 526 | ``` 527 | git add hello.txt # 添加单个文件 528 | git add . # 添加当前目录下所有文件 529 | ``` 530 | #### 2.添加到本地库 531 | 在**终端**输入命令 532 | ``` 533 | git commit -m "first commit" hello.txt 534 | ``` 535 | **注意:这里的first commit是指这个提交的代码的称呼** 536 | ![](/images/git-images/git.33.png) 537 | #### 方法二(使用源代码管理) 538 | **快捷键:Ctrl Shitf G** 539 | 也可在左侧栏点击打开 540 | #### 1.提交到暂存区 541 | ![](/images/git-images/git.34.png) 542 | #### 2.添加到本地库 543 | **注意:提交上面的框框里要输入提交的代码的称呼,不然提交不成功** 544 | ![](/images/git-images/git.35.png) 545 | **这些提交可以理解为一个版本,并且会生成一个版本号(哈希值) 546 | 你可以使用命令任意更改当前项目是哪一个版本** 547 | 548 | ### 2.4.修改文件 549 | **直接修改对应的文件就行了,修改完再暂存提交** 550 | ![](/images/git-images/git.36.png)![](/images/git-images/git.37.png) 551 | 552 | ### 2.5.切换到不同的提交 553 | 你每提交一次,都会生成一个哈希值,也可以理解为一个版本对应一个版本号 554 | #### 1.查看哈希值 555 | 使用命令: 556 | ``` 557 | git reflog #追踪本地HEAD引用的所有变动记录 558 | git log #查看本地项目的提交历史 559 | ``` 560 | 两个命令任选一个,这里推荐第一个,它默认只显示哈希值的前7位 561 | 使用这种缩写的哈希值已经够了,第二个命令显示完全的哈希值 562 | #### 2.补充介绍分页器 563 | 当你在命令行运行 **git log**或**git reflog** 时,Git 会进入一种**分页器(pager)**的显示模式,通常是 **less 分页器**。这种模式允许你逐页查看长输出内容,如 Git 提交记录 (log)。由于提交记录可能会非常长,分页器可以方便地滚动和查看历史记录。 564 | 565 | 具体特性: 566 | 分页显示:git log 的输出通过分页器按页显示,默认一次显示一个屏幕大小的内容,而不是全部输出到终端。 567 | 568 | 导航:在 less 分页器中,你可以使用以下键进行导航: 569 | 570 | - **向上滚动**:按 k 或方向键上。 571 | - **向下滚动**:按 j 或方向键下。 572 | - **翻页**:按 空格键 向下翻页,按 b 向上翻页。 573 | - **跳到末尾**:按 G。 574 | - **跳到开头**:按 g。 575 | - **退出分页器**:你按下 q 后,才能退出 less 分页器,回到普通的命令行界面。这是 less 的退出命令。 576 | 577 | 为什么使用分页器? 578 | 当输出的信息非常多时,直接输出到命令行会导致信息快速滚动,无法看清或逐一阅读。而 less 允许你控制滚动,按页查看长输出。 579 | 580 | 常见提示: 581 | 如果不想进入分页器,可以在 git log 命令后加上 --oneline 参数,这样每条提交记录只显示一行,通常不会超过终端的可视区域。 582 | ``` 583 | git log --oneline 584 | ``` 585 | 你也可以通过 GIT_PAGER 环境变量或者使用 git log --no-pager 禁用分页器: 586 | ``` 587 | git --no-pager log 588 | ``` 589 | 这种分页器模式非常常见,除了 git log,其他长输出的命令(如 man 命令)也会进入 less 或类似的分页模式。 590 | #### 3.命令: **git reset 哈希值** 591 | - **作用**:git reset 用于将当前分支的 HEAD(指向当前分支最新提交的指针)重置为指定的提交。 592 | - **状态变化**:这会改变分支的历史记录(对于非共享分支),并且根据所用的选项(如 --soft、--mixed 或 --hard),会影响索引和工作目录的状态: 593 | - **--soft**:仅重置 HEAD,索引和工作目录保持不变。 594 | - **--mixed**(默认):重置 HEAD 和索引,工作目录保持不变。 595 | - **--hard**:重置 HEAD、索引和工作目录,将所有更改丢弃。 596 | 597 | ![](/images/git-images/git.38.png) 598 | ![](/images/git-images/git.39.png) 599 | ### 2.6.使用分支 600 | 可以选择在**终端**使用**命令**创建分支 601 | 也可以使用**源代码管理**里的图形界面 602 | 使用的相关命令可见上文 603 | ![](/images/git-images/git.40.png) 604 | ![](/images/git-images/git.64.png) 605 | ### 2.7.合并分支 606 | #### 2.7.1.在新建的分支里的文件做出修改并提交 607 | **注意:合并时要到你想合并到的那个分支下,而不是在你修改内容的分支下 608 | 如图上面搜索栏,点master合并并没有效果** 609 | ![](/images/git-images/git.41.png) 610 | #### 2.7.1.返回需要合并到的分支进行合并 611 | 可以使用命令 612 | ``` 613 | git checkout 分支名 614 | ``` 615 | ![](/images/git-images/git.42.png) 616 | 选择你需要的合并的分支就能完成合并了 617 | ![](/images/git-images/git.43.png) 618 | 619 | --- 620 | 621 | # 七.使用代码托管平台(GitHub) 622 | 623 | --- 624 | 625 | GitHub官网:[https://github.com/](https://github.com/) 626 | ## 1.创建远程仓库 627 | ![](/images/git-images/git.44.png) 628 | ![](/images/git-images/git.45.png) 629 | ## 2.添加文件到远程存储库 630 | **注意:在VS Code中的源代码管理中的图形界面拉取或推送需要先添加远程存储库 631 | 这需要你登陆你的GitHub账号,点击添加远程存储库,会自动提示你登录 632 | 当然克隆不用登陆,接下来我会演示图形界面推送,和终端中用命令拉取** 633 | ![](/images/git-images/git.46.png) 634 | **在上图拉取、推送里选择推送,然后选择你的仓库,就能推送成功 635 | 在你对项目进行修改后,暂存提交,然后推送,就能更新你的GitHub仓库了 636 | 如果你是在源代码管理里提交,会自动弹出一个同步的按钮,就是把你的修改更新到GitHub仓库 637 | 如果你选择终端使用命令也可以完成这些操作** 638 | ![](/images/git-images/git.47.png) 639 | ![](/images/git-images/git.48.png) 640 | 641 | --- 642 | 643 | ## 3.从远程存储库库克隆文件到本地 644 | **注意:克隆文件不需要登陆** 645 | **先创建一个存储项目的文件,再到仓库中复制Https地址** 646 | ![](/images/git-images/git.49.png) 647 | **使用命令克隆** 648 | ``` 649 | git clone 地址 650 | ``` 651 | ![](/images/git-images/git.50.png)![](/images/git-images/git.51.png) 652 | 653 | --- 654 | 655 | ## 4.团队内协作 656 | ### 4.1.邀请协作的人 657 | 点击add people后,输入你需要邀请的人的**用户名**,就会生成一个**邀请函(网址)** 658 | ![](/images/git-images/git.52.png) 659 | 将这个**邀请函**复制,**发给你需要邀请的人** 660 | **当然被邀请的人GitHub绑定的邮箱会收到一份邀请函,也可确认** 661 | ![](/images/git-images/git.53.png) 662 | 然后被邀请的人把你给的邀请函输入到浏览器中,就有一个**需要确认的是否加入这个项目** 663 | 664 | ![](/images/git-images/git.54.png) 665 | 被邀请人同意后,就能直接修改这个仓库,push不再需要权限 666 | ![](/images/git-images/git.55.png) 667 | 668 | --- 669 | 670 | ## 5.跨团队协作 671 | ### 5.1.fork项目 672 | 就是把别人的仓库复制一份到自己账号下 673 | ![](/images/git-images/git.56.png) 674 | ### 5.2.做出修改 675 | ### 5.3.发出pull请求 676 | 就是让别人合并你修改的部分 677 | ![](/images/git-images/git.57.png) 678 | ![](/images/git-images/git.58.png) 679 | ![](/images/git-images/git.59.png) 680 | ### 5.4.仓库管理者同意pull请求 681 | 仓库管理者会看到一个pull request 682 | ![](/images/git-images/git.60.png) 683 | 点击Merge pull request就能成功合并 684 | ![](/images/git-images/git.61.png) 685 | 合并成功后内容做出修改,并且贡献者中会多出你的用户名 686 | ![](/images/git-images/git.62.png) 687 | 688 | --- 689 | 690 | # 八.完结 691 | 692 | --- 693 | 694 | **使用VS Code管理Git项目是非常方便的,喜欢使用命令的话 695 | 用VS Code提供的终端也是一样的,本文演示的地方可能一部分是用命令 696 | 一部分是图形界面操作,可能看起来较为混乱,目的是想将两者都介绍一下 697 | 其实专注于一者就能完成所有Git的操作,当然也可两者结合使用** 698 | -------------------------------------------------------------------------------- /members/水镜/编程入门笔记/Jekyll使用教程.md: -------------------------------------------------------------------------------- 1 | # **简介** 2 | 本文主要内容: 3 | 1.介绍Jekyll的概念 4 | 2.详细演示如何使用Jekyll来搭建静态网站 5 | 3.演示如何通过Github Pages部署 6 | 4.演示如何获得现成的静态网站 7 | 作者实现的静态网站:[verumkey.github.io](https://verumkey.github.io) 8 | 项目仓库:[https://github.com/Verumkey/verumkey.github.io](https://github.com/Verumkey/verumkey.github.io) 9 | Jekyll官方文档:[https://jekyllrb.com/docs/](https://jekyllrb.com/docs/) 10 | 11 | --- 12 | 13 | # **一.Jekyll概述** 14 | 15 | --- 16 | 17 | Jekyll 是一个静态网站生成器,专为博客和文档类网站设计,广泛用于 GitHub Pages。它的主要特点是将 Markdown、Liquid 模板和静态文件(如 CSS、JavaScript、图片等)转化为完整的 HTML 静态页面。因为生成的是静态页面,Jekyll 网站速度快、安全性高,且不需要数据库支持。 18 | 19 | ## Jekyll 的工作原理: 20 | 21 | 1. **Markdown 文件**:你撰写的内容通常以 Markdown 格式保存,它是一种简单的标记语言,易于编写和阅读。 22 | 2. **模板(Layout)和组件(Includes)**:Jekyll 使用 Liquid 模板引擎(由 Shopify 开发),允许你创建可复用的 HTML 模板和组件来组织页面结构,比如头部、脚部等。 23 | 3. **静态文件**:除了内容和模板,Jekyll 还会处理所有静态资源,比如 CSS、JS 和图片。 24 | 4. **生成 HTML**:运行 Jekyll 时,它会读取这些内容并结合模板生成静态 HTML 文件,最终输出一个可直接部署的网站。 25 | 26 | ## Jekyll 的特点: 27 | 28 | - **易于部署**:你可以将 Jekyll 站点托管在 GitHub Pages 上,GitHub 会自动帮你运行 Jekyll,并生成你的网站。 29 | - **支持 Markdown**:方便编写内容,尤其是对于写作博客或技术文档。 30 | - **无数据库需求**:Jekyll 不需要数据库支持,所有内容都以文件形式存储,速度更快,适合小型或中型网站。 31 | - **插件支持**:Jekyll 允许用户通过插件扩展功能,比如添加搜索、自动标签生成等。 32 | 33 | ## 基本使用步骤: 34 | 35 | 1. **安装 Jekyll**:通过 Ruby 安装。命令是 gem install jekyll bundler。 36 | 2. **创建新站点**:运行命令 jekyll new my-site 创建一个新项目。 37 | 3. **启动开发服务器**:进入站点文件夹后,运行 jekyll serve 启动本地服务器,Jekyll 会自动编译文件并提供本地预览。 38 | 4. **配置 _config.yml**:通过配置文件定制站点,比如设置站点标题、描述、URL、主题等/ 39 | 5. **添加内容**:在 _posts 文件夹中添加新的 Markdown 文件,即可发布新的博客文章或页面。 40 | 41 | --- 42 | 43 | # **二.在Windows上配置Jekyll** 44 | 45 | --- 46 | 47 | ## 1.安装Ruby和DevKit 48 | 网址:[https://rubyinstaller.org/downloads/](https://rubyinstaller.org/downloads/) 49 | ![](/images/Jekyll-images/jekyll.1.png) 50 | 51 | --- 52 | 53 | ## 2.安装Bundler和Jekyll 54 | 在命令行或终端输入: 55 | ``` 56 | gem install bundler jekyll 57 | ``` 58 | ![](/images/Jekyll-images/jekyll.2.png) 59 | 60 | --- 61 | 62 | # **三.创建Jekyll网站项目** 63 | 64 | --- 65 | 66 | ## 1.创建一个存放项目的文件 67 | ![](/images/Jekyll-images/jekyll.3.png) 68 | 69 | --- 70 | 71 | ## 2.创建一个Jekyll网站项目 72 | ### 2.1.使用cd命令进入你上面创建的文件的目录下 73 | **注意:如果你使用的是cmd,要先切换盘符** 74 | ``` 75 | D: 76 | cd "D:\Work\My-Website" 77 | ``` 78 | ### 2.2.输入命令:jekyll new 文件名 79 | ``` 80 | jekyll new my-website 81 | ``` 82 | ### 2.3.进入创建的文件安装项目依赖 83 | ``` 84 | cd my-website 85 | bundle install 86 | ``` 87 | ### 2.4.运行本地服务器以预览网站 88 | ``` 89 | bundle exec jekyll serve 90 | ``` 91 | ### 2.5.图片演示 92 | ![](/images/Jekyll-images/jekyll.4.png) 93 | ![](/images/Jekyll-images/jekyll.5.png) 94 | **这就是一个静态网站** 95 | ![](/images/Jekyll-images/jekyll.6.png) 96 | ### 2.5.编辑脚本快速打开 97 | 每次浏览Jekyll网站时,都需要**重新运行**budle exec jekyll serve命令,以此启动一个本地的**开发服务器**,使你能够在浏览器中访问你的**网站** 98 | ``` 99 | D: 100 | cd "D:\Work\My-Website\my-website" 101 | bundle exec jekyll serve 102 | ``` 103 | ![](/images/Jekyll-images/jekyll.7.png) 104 | 105 | --- 106 | 107 | # **四.在GitHub上配置静态网站** 108 | 109 | --- 110 | 111 | ## 1.创建仓库 112 | ![](/images/Jekyll-images/jekyll.8.png) 113 | **GitHub 对静态网页托管的特殊规则决定了你的个人或组织站点的仓库名必须为** 114 | ``` 115 | 用户名.github.io 116 | ``` 117 | ![](/images/Jekyll-images/jekyll.9.png) 118 | ### 规定由来 119 | GitHub 对静态网页托管的特殊规则决定了你的个人或组织站点的仓库名必须为 用户名.github.io。这是因为 GitHub Pages 在为个人或组织提供顶级域名托管时,需要使用固定的命名约定。具体原因如下: 120 | 121 | #### 1. **唯一识别的顶级域名**: 122 | 123 | 个人或组织级的 GitHub Pages 网站会使用特定的顶级域名,形式为 https://用户名.github.io。GitHub 通过仓库名匹配该域名来提供唯一的托管地址。 124 | 125 | - 例如,如果你的 GitHub 用户名是 exampleuser,那么 GitHub Pages 会自动把 exampleuser.github.io 解析为你 exampleuser.github.io 仓库中的内容。这个仓库名直接与该域名绑定,便于 GitHub 自动识别和生成网站。 126 | 127 | #### 2. **自动部署机制**: 128 | 129 | GitHub Pages 自动识别带有 .github.io 后缀的仓库名,并将其视为用户的顶级个人或组织站点。当你提交代码到这个仓库时,GitHub Pages 的服务会立即自动触发站点的构建和部署过程。 130 | 131 | 如果你的仓库名是其他的,比如 my-website,虽然它也可以用来生成 GitHub Pages 网站,但它只能通过二级域名访问,例如 https://用户名.github.io/my-website/,而不是直接的 用户名.github.io。 132 | 133 | #### 3. **区别于项目页面**: 134 | 135 | GitHub Pages 支持两种类型的站点: 136 | 137 | - **用户/组织页面**:这种站点与 GitHub 用户名直接相关,域名是 用户名.github.io,并且仓库名必须为 用户名.github.io。 138 | - **项目页面**:你可以为 GitHub 中的任何项目创建页面,域名格式为 https://用户名.github.io/项目名。项目页面的仓库名没有强制要求。 139 | 140 | 通过强制 用户名.github.io 这样的仓库命名规则,GitHub Pages 可以清楚区分个人/组织站点与项目站点,并将它们映射到不同的 URL 上。 141 | 142 | 因此,要求个人或组织网站的仓库名必须是 用户名.github.io,是为了确保每个用户或组织都有一个唯一且固定的顶级域名来展示其内容,并简化自动部署和解析流程。 143 | 144 | --- 145 | 146 | ## 2.配置Jekyll 147 | ### 2.1.启用GitHub Action 148 | ![](/images/Jekyll-images/jekyll.10.png) 149 | ### 2.2.GitHub Action介绍 150 | 151 | GitHub Actions 是 GitHub 提供的一项持续集成(CI)和持续交付(CD)服务,允许你在 GitHub 仓库中自动执行各种任务和工作流。它让你能够编写、共享和执行自动化流程,以便在代码提交时执行测试、构建、部署等操作。 152 | 153 | #### 核心功能: 154 | 155 | 1. **自动化工作流**:GitHub Actions 允许你定义一系列自动化任务(称为 "工作流"),这些工作流可以在特定事件(如代码推送、Pull Request、Issue 创建等)发生时触发。 156 | 157 | 2. **持续集成和持续交付**:它可以用来自动化测试、构建和发布代码。例如,每当你推送代码到 GitHub 时,GitHub Actions 可以自动运行单元测试、构建项目,甚至将应用部署到服务器上。 158 | 159 | 3. **灵活性与可扩展性**:GitHub Actions 允许你根据自己的需求,灵活地定义自定义工作流。工作流是通过 YAML 文件定义的,存储在仓库的 .github/workflows/ 目录中。你可以使用 GitHub 自带的动作(Actions)或创建自定义的动作。 160 | 161 | 162 | #### GitHub Actions 的基本概念: 163 | 164 | 1. **工作流(Workflow)**: 165 | 166 | - 工作流是由一系列自动化任务组成的。它们是 GitHub Actions 的核心,用来定义你想自动化的过程。工作流文件使用 YAML 语法编写,放置在 .github/workflows/ 目录下。 167 | - 每个工作流可以根据事件(如代码提交、Pull Request 等)被触发。 168 | 2. **事件(Event)**: 169 | 170 | - 事件是触发工作流的特定动作,比如代码的 push、pull_request,创建 Issue,或者手动触发。 171 | - 例如,当你推送代码时,可以触发一个测试工作流,确保新代码不会破坏现有功能。 172 | 3. **任务(Job)**: 173 | 174 | - 工作流由一个或多个任务组成。每个任务可以在不同的虚拟机环境(例如 Ubuntu、macOS 或 Windows)上运行,并且任务可以并行或按顺序执行。 175 | 4. **步骤(Step)**: 176 | 177 | - 每个任务由多个步骤组成。步骤是在运行环境中执行的单个命令或操作。可以使用现有的 Actions 或者在步骤中编写自定义的 Shell 脚本。 178 | 5. **动作(Action)**: 179 | 180 | - 动作是 GitHub Actions 中的可复用组件,你可以在步骤中调用它们。GitHub 提供了很多官方的 Actions(如 actions/checkout 用于检出代码),并且社区中也有许多开源的 Actions 可以使用。 181 | - 你也可以编写自己的动作,来实现自定义需求。 182 | 183 | #### GitHub Actions 的用途: 184 | 185 | 1. **自动化测试**:每当代码变更时自动运行测试,确保代码的质量。 186 | 2. **持续集成**:合并代码时自动构建和测试项目,避免引入错误。 187 | 3. **自动部署**:在代码推送到某个分支时,自动将项目部署到服务器或云端。 188 | 4. **代码审查**:自动检查代码格式、代码覆盖率等问题,帮助维护代码质量。 189 | 5. **发布管理**:自动生成版本、打包应用,甚至发布到包管理平台(如 npm、Docker 等)。 190 | 191 | 使用 GitHub Actions 对于 Jekyll 项目的帮助主要体现在自动化、灵活性和自定义能力方面。以下是一些具体的优点和场景,说明 GitHub Actions 如何提升你的 Jekyll 项目体验: 192 | 193 | #### 1. **自动化构建和部署**: 194 | 195 | - **自动化构建**:通过 GitHub Actions,你可以设置在每次提交代码时自动构建 Jekyll 网站。这样可以确保每次更新后网站的最新版本都会被生成并可用。 196 | - **定期部署**:可以配置定期触发的工作流,自动生成和部署 Jekyll 网站,无需手动操作。 197 | 198 | #### 2. **自定义构建过程**: 199 | 200 | - **使用特定版本的 Ruby 和 Jekyll**:可以在工作流中指定使用的 Ruby 和 Jekyll 版本,确保在构建过程中的一致性,避免因环境差异导致的问题。 201 | - **预处理和后处理步骤**:在构建前后执行特定的命令,比如优化图片、清理文件、运行自定义脚本等,以确保生成的站点符合你的需求。 202 | 203 | #### 3. **集成其他工具**: 204 | 205 | - **测试和验证**:可以在构建过程中添加自动化测试,确保 Jekyll 生成的内容符合特定标准,比如 Markdown 语法、链接有效性等。 206 | - **部署到其他平台**:除了 GitHub Pages,你还可以通过 GitHub Actions 将生成的 Jekyll 网站部署到其他平台(如 Netlify、AWS S3、Vercel 等),增强灵活性。 207 | 208 | #### 4. **使用自定义插件**: 209 | 210 | - **支持更多 Jekyll 插件**:GitHub Pages 默认只支持一部分 Jekyll 插件。如果你使用了自定义或不在默认列表中的插件,GitHub Actions 允许你在自己的工作流中设置环境,支持这些插件的使用。 211 | 212 | #### 5. **持续集成和持续交付(CI/CD)**: 213 | 214 | - **实现 CI/CD 流程**:通过 GitHub Actions,可以实现完整的 CI/CD 流程,在代码更新时自动进行构建、测试和部署。这使得团队协作时更容易保证代码的质量。 215 | 216 | #### 6. **简化复杂的部署需求**: 217 | 218 | - **配置和管理更复杂的部署需求**:如果你的项目需要处理多个分支、子模块或复杂的文件结构,GitHub Actions 可以提供更强大的控制能力,帮助你管理这些需求。 219 | 220 | ### 2.3.安装Jekyll依赖 221 | ![](/images/Jekyll-images/jekyll.11.png) 222 | ### 2.4.Jekyll依赖作用 223 | ### 1. **自动构建 Jekyll 网站**: 224 | 225 | - 选择这个选项后,GitHub Actions 会自动帮你构建 Jekyll 网站,而不需要你手动运行构建命令。你只需要提交内容更新(比如新的 Markdown 文件),GitHub Actions 就会自动生成静态网页。 226 | 227 | ### 2. **预安装 GitHub Pages 依赖**: 228 | 229 | - 这个选项会确保 GitHub Pages 构建过程中所需的 Jekyll 依赖(例如 github-pages Gem 和其他插件)已经预先安装好。这样你就不需要自己去担心依赖的安装和配置问题。 230 | 231 | ### 3. **简化部署流程**: 232 | 233 | - 通过使用 GitHub Actions,整个构建和发布的流程变得自动化且透明。每次你向仓库提交代码或文章时,GitHub Actions 会自动运行,安装依赖、生成 HTML 文件,并将其部署到你的 GitHub Pages 网站。 234 | 235 | ### 4. **确保版本一致性**: 236 | 237 | - 当你选择这个选项时,GitHub Pages 使用的 Jekyll 及其插件的版本会和你在本地或其他地方使用的保持一致。这避免了因为版本差异带来的潜在问题,保证你的 Jekyll 网站能够正常生成。 238 | 239 | #### **总结**: 240 | 241 | - 选择这个选项意味着每次你更新仓库内容时,GitHub Actions 会自动构建你的 Jekyll 网站,并确保所需的依赖已经预先安装好,从而简化了整个网站的生成和部署过程。如果你不选择这个,依然可以用手动配置的方式,但使用 GitHub Actions 自动化这一过程会更加方便。 242 | 243 | **直接提交即可** 244 | ![](/images/Jekyll-images/jekyll.12.png) 245 | ### 2.5.查看网站 246 | **直接在浏览器中输入你的仓库名即可** 247 | ``` 248 | 用户名.github.io 249 | ``` 250 | ![](/images/Jekyll-images/jekyll.13.png) 251 | 当然现在什么都没有 252 | ![](/images/Jekyll-images/jekyll.14.png) 253 | 254 | --- 255 | 256 | ## 3.将Jekyll项目push到仓库 257 | ### 3.1.打开上传 258 | ![](/images/Jekyll-images/jekyll.15.png) 259 | ### 3.2.复制粘贴 260 | 打开你创建的Jekyll项目,**将所有文件全选拖动复制进去** 261 | ![](/images/Jekyll-images/jekyll.16.png) 262 | ### 3.3.提交 263 | ![](/images/Jekyll-images/jekyll.17.png) 264 | ### 3.5.查看网站 265 | 等待Action自动部署完成,然后点击进去 266 | ![](/images/Jekyll-images/jekyll.18.png) 267 | 成功部署后,点击链接,就是你的静态网站网址 268 | ![](/images/Jekyll-images/jekyll.19.png) 269 | **静态网站成功搭建** 270 | ![](/images/Jekyll-images/jekyll.20.png) 271 | 272 | --- 273 | 274 | # **五.修改Jekyll项目** 275 | 276 | --- 277 | 278 | **介绍:这里演示使用VS Code管理我们的项目** 279 | ## 1.将远程仓库克隆到本地 280 | 打开用来保存项目的文件夹,然后克隆远程仓库 281 | 其实不用初始化,直接克隆就行了 282 | ![](/images/Jekyll-images/jekyll.21.png) 283 | 284 | --- 285 | 286 | ## 2.进入克隆的目录下修改文件 287 | 示例:我对index.markdown做出了更改 288 | ![](/images/Jekyll-images/jekyll.22.png) 289 | 290 | --- 291 | 292 | ## 3.本地运行 293 | 本地修改一些文件运行后会根据规则生成一些文件,而在GitHub仓库里修改不会显示 294 | ![](/images/Jekyll-images/jekyll.23.png) 295 | ![](/images/Jekyll-images/jekyll.24.png) 296 | 297 | --- 298 | 299 | ## 4.push到远程仓库 300 | ### 4.1.提交更改 301 | **注意:要打开克隆的这个目录,原来的目录** 302 | ![](/images/Jekyll-images/jekyll.25.png) 303 | ### 4.2.推送 304 | ![](/images/Jekyll-images/jekyll.26.png) 305 | 可以在仓库中看到正在push 306 | ![](/images/Jekyll-images/jekyll.27.png) 307 | ### 4.3.查看网站 308 | **可以看出,我们本地打开后是一个样,原封不动push上去竟然还有些差别 309 | 这是为什么?~~我也不知道~~ 310 | 我们添加一些文件代替默认的配置,就不会出现这种情况了** 311 | ![](/images/Jekyll-images/jekyll.28.png) 312 | 313 | --- 314 | 315 | # **六.Jekyll 项目文件结构及作用** 316 | 317 | --- 318 | 319 | ## 1.主要文件 320 | 321 | 1. **_config.yml** 322 | 323 | - 这是 Jekyll 项目的配置文件,定义站点的基本信息和行为,例如站点标题、作者、URL、插件、主题等。 324 | - 常见配置项: 325 | - title: 网站的名称 326 | - author: 作者名称 327 | - baseurl: 网站的基本 URL(如果不在根目录下托管) 328 | - permalink: 定义文章 URL 的格式 329 | - theme: 使用的 Jekyll 主题 330 | - markdown: 指定 Markdown 解析器(通常是 kramdown) 331 | 332 | 2. **index.html** 333 | 334 | - 这是网站的主页文件,通常是一个静态 HTML 文件或包含 Jekyll 模板标记的文件。 335 | - 它会根据 _config.yml 中的配置渲染成主页。 336 | 337 | 3. **_posts/** 338 | 339 | - 存放所有博客文章的目录,所有文章都以 .md 或 .html 格式编写。 340 | - 文章文件命名格式:YYYY-MM-DD-title.md(年-月-日-文章标题),这个命名方式用于生成文章的 URL 和时间归档。 341 | - 每篇文章都需要设置 **Front Matter**(前置信息),用于指定元数据。 342 | 343 | 4. **_layouts/** 344 | 345 | - 存放网站布局文件的目录,Jekyll 用这些布局文件来包裹内容页面。 346 | - 常见的布局文件: 347 | - default.html: 网站的默认布局 348 | - post.html: 单篇文章的布局 349 | - page.html: 普通页面的布局 350 | 351 | 5. **_includes/** 352 | 353 | - 存放可重用的部分或片段的目录,这些片段可以在其他模板文件中通过(有些问题,无法打出)引用 354 | 355 | - 常见的包括导航栏、页脚、头部、或其他重复的 HTML 片段。 356 | 357 | 6. **_sass/** 358 | 359 | - 存放 SASS(CSS 预处理器)文件的目录,用于自定义样式。 360 | - 这些文件通常通过主样式文件导入,并编译成单个 CSS 文件。 361 | 362 | 7. **_site/** 363 | 364 | - Jekyll 将项目编译生成的静态网站文件都会存储在这个目录中,生成的 HTML 文件可以直接部署到服务器上。 365 | - 注意:该文件夹在生成时自动创建,不需要手动修改。 366 | 367 | 8. **assets/** 368 | 369 | - 存放项目的静态资源文件,比如图片、CSS、JavaScript 等。 370 | - 通常开发者会把自定义的样式或脚本放在这个目录中。 371 | 372 | 9. **Gemfile** 373 | 374 | - 用于 Ruby 环境的依赖管理,包含 Jekyll 和其他插件的安装信息。 375 | - bundle install 命令会依据该文件安装必要的依赖。 376 | 377 | 10. **pages/**(可选) 378 | 379 | - 通常用于存放自定义的页面,比如关于页面、联系页面等。 380 | - 这些页面的布局可以与博客文章不同。 381 | 382 | --- 383 | 384 | ## 2.发文章的规则 385 | 386 | 1. **文章文件命名**: 387 | 388 | - 格式为 YYYY-MM-DD-title.md 或 YYYY-MM-DD-title.html,其中 YYYY-MM-DD 是发布日期,title 是文章的简短描述,通常以短横线 - 分隔单词。 389 | - 例如:2024-10-19-my-first-post.md。 390 | 391 | 2. **Front Matter(前置信息)**: 392 | 393 | - 文章必须在文件的顶部包含 Front Matter,这是用 YAML 格式定义的元数据,用三条短横线包裹。 394 | 395 | - 常用字段: 396 | - layout: 指定使用哪个布局文件(通常是 post) 397 | - title: 文章标题 398 | - date: 文章发布日期 399 | - categories: 文章分类,可以用于按分类归档 400 | - tags: 文章标签,用于更细的分类或标签云展示 401 | 402 | 3. **使用 Markdown 或 HTML 编写**: 403 | 404 | - 文章主体可以使用 Markdown(通常是 .md 文件)编写,Jekyll 会自动将其转换为 HTML。 405 | - 也可以直接使用 .html 文件,编写自定义的 HTML 内容。 406 | 407 | 4. **URL 生成规则**: 408 | 409 | - 根据文件名的日期和 _config.yml 中的 permalink 配置,Jekyll 会自动生成每篇文章的 URL。 410 | - 默认的 URL 规则通常是:/year/month/day/title/。 411 | 412 | 5. **Drafts(草稿)**: 413 | 414 | - 如果文章存放在 _drafts/ 目录下,并没有指定发布日期,Jekyll 默认不会发布这些草稿文章。 415 | - 如果要预览草稿,可以使用 jekyll serve --drafts 命令运行。 416 | 417 | 6. **发布文章时的注意事项**: 418 | 419 | - 确保 Front Matter 的日期是当前或过去的日期,否则 Jekyll 不会将其作为已发布的文章显示。 420 | - 若设置了 future: true 配置项,Jekyll 可以显示未来的文章(即发布日期在未来)。 421 | 422 | --- 423 | 424 | ## 3,总结 425 | 426 | Jekyll 的文件结构和规则简单而清晰,每个目录和文件都各司其职。通过合理使用 Front Matter 和布局文件,你可以灵活地创建和管理博客文章,同时根据需要自定义网站的外观和功能。 427 | 428 | --- 429 | 430 | # **七.Markdown基本语法** 431 | 432 | --- 433 | 434 | 在Jekyll中,提交在_post中特定格式的markdown文件会自动转换问html文件 435 | 所以需要熟悉它的用法,用来写文章 436 | Markdown 是一种轻量级的标记语言,常用于格式化文本。它的语法简单易懂,适合用于写作和排 版。以下是 Markdown 常用语法的总结: 437 | 438 | ## 1. 标题 439 | 440 | 使用 # 来表示标题。# 的数量决定了标题的级别(1-6级)。 441 | 442 | **# 一级标题 ## 二级标题 ### 三级标题 #### 四级标题 ##### 五级标题 ###### 六级标题** 443 | 444 | ## 2. 段落和换行 445 | 446 | 段落通过一个或多个空行分隔。要在段落中插入换行,可以在行尾添加两个空格,然后按 Enter。 447 | 448 | ## 3. 强调 449 | 450 | - **加粗**:使用 ** 或 __ 包围文本。 451 | - _斜体_:使用 * 或 _ 包围文本。 452 | - ~~删除线~~:使用 ~~ 包围文本。 453 | 454 | **加粗文本** *斜体文本* ~~删除线文本~~ 455 | 456 | ## 4. 列表 457 | 458 | - **无序列表**:使用 *、+ 或 - 开始每个列表项。 459 | - **有序列表**:使用数字和点号(如 1.、2.)表示。 460 | 461 | 无序列表: 462 | * 项目一 * 项目二 * 子项目一 * 子项目二 463 | * 有序列表: 1. 第一项 2. 第二项 1. 子项一 2. 子项二 464 | 465 | ## 5. 链接 466 | 467 | 使用 [链接文本](URL) 创建链接。 468 | ``` 469 | [OpenAI](https://www.openai.com) 470 | ``` 471 | [OpenAI](https://www.openai.com) 472 | ## 6. 图片 473 | ``` 474 | ![示例图片](https://example.com/image.jpg) 475 | ``` 476 | ## 7. 引用 477 | 478 | 使用 > 来创建引用。 479 | 480 | > 这是一段引用文本。 481 | 482 | ## 8. 代码 483 | 484 | - **行内代码**:使用反引号 包围代码。 485 | - **代码块**:使用三个反引号 包围多行代码,可以指定语言。 486 | 487 | ``` 488 | 这是一个代码块。 489 | ``` 490 | ## 9. 水平线 491 | 492 | 使用三个或更多的 *、- 或 _ 创建水平线。 493 | ``` 494 | --- 495 | ``` 496 | --- 497 | ## 10. 表格 498 | 499 | 使用 | 分隔列,并使用 - 创建表头。 500 | ``` 501 | | 列1 | 列2 | 列3 | 502 | |-----|-----|-----| 503 | | 数据1 | 数据2 | 数据3 | 504 | | 数据4 | 数据5 | 数据6 | 505 | ``` 506 | ## 11. 任务列表 507 | 使用 - [ ] 创建任务列表项。 508 | ``` 509 | - [ ] 待办事项1 510 | - [x] 已完成事项 511 | ``` 512 | 513 | --- 514 | 515 | # 八.fork别人的静态网站仓库 516 | 517 | --- 518 | 519 | 上文都是介绍怎么自己做静态网站,可能要花费不少时间精力 520 | 我们可以fork别人的项目,做出更改 521 | ## 1.找到一个合适的静态网站仓库并fork 522 | 仓库名是用户名+.github.io的都是 523 | 这里我以自己的仓库为例:[https://github.com/Verumkey/verumkey.github.io](https://github.com/Verumkey/verumkey.github.io) 524 | ![](/images/Jekyll-images/jekyll.29.png) 525 | 仓库名必须是:**用户名.github.io** 526 | ![](/images/Jekyll-images/jekyll.30.png) 527 | ## 2.启用GitHub Action 528 | ![](/images/Jekyll-images/jekyll.31.png) 529 | ## 3.安装Jekyll站点 530 | ![](/images/Jekyll-images/jekyll.32.png) 531 | 直接提交 532 | ![](/images/Jekyll-images/jekyll.33.png) 533 | ## 4.做出修改并保存 534 | ## 5.查看网站 535 | 我这里仅改了下标题 536 | ![](/images/Jekyll-images/jekyll.34.png) 537 | ## 6.自定义域名 538 | 1.在你的域名的域名商那里添加**五条DNS记录** 539 | **1个CNAME记录**,**主机记录为www**,**记录值为你的仓库名** 540 | (我这里就是verumkey.github.io) 541 | **4个A记录**,**主机记录选@** 542 | **记录值填写GitHub的ip地址 543 | 一.185.199.109.153 544 | 二.185.199.111.153 545 | 三.185.199.110.153 546 | 四. 185.199.108.153 547 | 解析请求来源和TTL默认即可** 548 | ![](/images/Jekyll-images/jekyll.36.png) 549 | ![](/images/Jekyll-images/jekyll.35.png) 550 | 551 | 2.然后去你的**仓库的Settings**的**Pages**里找到**Custon Domain** 552 | 3.设置你刚才添加了DNS记录的域名的**主域名** 553 | 4.等待验证成功 554 | ![](/images/Jekyll-images/jekyll.37.png) 555 | 556 | --- 557 | 558 | # **九.完结** 559 | 560 | --- 561 | 562 | **就我目前的理解: 563 | 0.演示中只生成了最基础的Jekyll文件,像丰富网站内容的话,还有一些文件需要添加 564 | 1.index.markdown是默认的页面,当你添加了一个index.html作为主页后,记得删除 index.markdown,否则还会显示原来的,因为它的优先级较高 565 | 2.可以添加一个_layouts文件和_includes文件,再进行一些配置来添加页眉页脚 566 | 3.chatgpt是个好工具,我对Jekyll的了解很大一部分缘于它 567 | 4.关于具体怎么修改Jekyll项目,我也不是很清楚,~~所以我做的静态网站那么简陋~~ 568 | 可以去看看官方文档,或找找其它教学 569 | 5.以后有经验了,我再回来** 570 | - [ ] 更新怎么丰富网站内容 571 | -------------------------------------------------------------------------------- /members/水镜/编程入门笔记/Linux使用教程.md: -------------------------------------------------------------------------------- 1 | # 简介 2 | 本文主要内容: 3 | 1.在Windows系统的基础上演示再安装Ubuntu系统 4 | 2.演示在vmare上运行一个Ubuntu系统的虚拟机 5 | 3.介绍Linux的相关知识和常用命令 6 | Linux镜像大全:[https://www.linux.org/pages/download/](https://www.linux.org/pages/download/) 7 | 8 | --- 9 | 10 | # 二.双系统配置Ubuntu 11 | 12 | --- 13 | 14 | **注意:在安装Ubuntu系统前,我们先需要确定当前Windows系统的引导方式 15 | 安装的Ubuntu系统需要与当前的Windows系统具有相同的引导方式,才能设置双系统菜单 16 | 一些可能陌生的名词在第1点有介绍 17 | 演示中的电脑配置: 18 | 引导方式为:UEFI引导 19 | 磁盘分区格式为GPT 20 | 如果你的电脑配置与我不相同,操作下去可能有些不同** 21 | 22 | --- 23 | 24 | ## 1.基础知识介绍 25 | ### 1.1.引导的简介 26 | 引导(Booting)是指计算机在开机时进行的一系列过程,其目的是加载操作系统,使计算机能够正常工作。引导过程通常包括以下几个主要步骤: 27 | 28 | 1. **硬件初始化**: 29 | 30 | - 当计算机通电后,首先由固件(BIOS或UEFI)进行硬件自检(POST),确保关键组件(如内存、CPU、硬盘等)正常。 31 | 32 | 2. **引导加载程序(Bootloader)**: 33 | 34 | - 通过固件找到存储设备上的引导加载程序(如GRUB、LILO等),并将控制权转移给它。引导加载程序负责加载操作系统内核。 35 | 36 | 3. **操作系统加载**: 37 | 38 | - 引导加载程序从硬盘或其他存储设备加载操作系统的内核到内存中,并启动操作系统。 39 | 40 | 4. **系统初始化**: 41 | 42 | - 操作系统内核完成初始化,设置硬件驱动程序、文件系统等,为用户和应用程序提供服务。 43 | 44 | 引导过程是计算机启动的重要环节,成功引导后,用户可以使用计算机进行各种操作。引导的方式可以分为传统的BIOS引导和现代的UEFI引导,选择合适的引导方式可以提高系统的性能和安全性。 45 | 46 | --- 47 | 48 | ### 1.2.BIOS模式的简介 49 | BIOS模式是指基本输入输出系统(Basic Input/Output System)的一种引导方式,它是在计算机启动时加载和执行的固件。BIOS负责硬件初始化和操作系统的加载。它是早期计算机的引导方式,主要用于x86架构的计算机。 50 | 51 | 引导方式指的是计算机启动时如何加载操作系统的方式。主要的引导方式有: 52 | 53 | 1. **BIOS引导**: 54 | 55 | - 使用MBR(主引导记录)格式。 56 | - 限制在2TB的磁盘大小,最多支持四个主分区。 57 | 58 | 2. **UEFI引导**: 59 | 60 | - 是BIOS的继任者,支持更大的硬盘(超过2TB)。 61 | - 使用GPT(GUID分区表)格式,支持更多的分区。 62 | - 提供更快的启动速度和更强的安全性(如Secure Boot)。 63 | 64 | --- 65 | 66 | ### 1.3.磁盘分区格式的简介 67 | 磁盘分区格式是定义磁盘如何组织和管理存储空间的结构。主要有以下几种分区格式: 68 | 69 | 1. **MBR(主引导记录)**: 70 | 71 | - 传统分区格式,支持最多四个主分区(或三个主分区和一个扩展分区)。 72 | - 最大支持2TB的磁盘空间。 73 | - 使用较旧的BIOS引导。 74 | 75 | 2. **GPT(GUID分区表)**: 76 | 77 | - 现代分区格式,支持更大的硬盘(超过2TB)和更多的分区(通常是128个)。 78 | - 采用UEFI引导,提供更强的安全性和灵活性。 79 | - 包含冗余的分区表,提高了数据的可靠性。 80 | 81 | 3. **动态磁盘**: 82 | 83 | - Windows系统特有的分区管理方式,可以创建跨多个物理磁盘的卷,支持更复杂的磁盘管理功能,如镜像和条带化。 84 | 85 | --- 86 | 87 | ### 1.4.BIOS模式与分区格式的对应关系 88 | 89 | 1. **传统BIOS模式(Legacy BIOS)**: 90 | 91 | - 通常使用**MBR(主引导记录)**分区格式。 92 | - 在这种模式下,支持最多四个主分区,最大磁盘大小为2TB。 93 | - 安装操作系统时,若选择Legacy模式,系统会要求将磁盘格式化为MBR。 94 | 95 | 2. **UEFI模式**: 96 | 97 | - 通常使用**GPT(GUID分区表)**分区格式。 98 | - 支持更大的磁盘(超过2TB)和更多的分区(通常是128个)。 99 | - 安装操作系统时,若选择UEFI模式,系统会要求将磁盘格式化为GPT。 100 | 101 | 一般BIOS模式是传统,磁盘分区格式就是MBR 102 | 一般BIOS模式是UEFI,磁盘分区格式就是GPT 103 | 104 | --- 105 | 106 | ### 1.5.ventoy的简介 107 | Ventoy 是一个开源工具,用于创建可启动的 USB 驱动器。与传统的方法不同,Ventoy 允许用户将多个 ISO 文件直接复制到 USB 驱动器上,而无需重新格式化或每次都写入 USB 驱动器。以下是 Ventoy 的一些主要特点: 108 | 109 | 1. **多重 ISO 支持**:用户可以在同一个 USB 驱动器上存储多个 ISO 文件,并在启动时选择要加载的 ISO。 110 | 111 | 2. **快速创建**:只需一次性格式化 USB 驱动器并安装 Ventoy,之后可以随意添加、删除或更新 ISO 文件。 112 | 113 | 3. **兼容性**:Ventoy 支持多种操作系统的 ISO,包括 Linux 发行版、Windows 安装镜像等。 114 | 115 | 4. **UEFI 和 BIOS 支持**:Ventoy 支持 UEFI 和传统 BIOS 启动,确保在不同类型的计算机上都能使用。 116 | 117 | 5. **简单易用**:用户界面友好,使用简单,无需复杂的命令行操作。 118 | 119 | 6. **开源**:Ventoy 是开源软件,可以免费使用,并且可以根据需要进行定制。 120 | 121 | 122 | Ventoy 的使用非常适合需要频繁测试或安装不同操作系统的开发者和系统管理员。 123 | 124 | --- 125 | 126 | ### 1.6.镜像的简介 127 | 镜像(Image)通常是指某个操作系统或软件的完整复制品,通常以文件的形式存在,包含了所有安装文件和配置设置。常见的镜像格式有 ISO 文件,这种文件可以用于创建可启动的 USB 驱动器或光盘。 128 | 129 | --- 130 | 131 | ### 1.7.BitLocker的简介 132 | BitLocker 是微软 Windows 操作系统中的一个全盘加密功能,用于保护存储在计算机上的数据。以下是 BitLocker 的一些关键特点和功能: 133 | 134 | 1. **全盘加密**:BitLocker 能够加密整个驱动器,包括系统驱动器和数据驱动器,从而保护存储在其上的所有文件。 135 | 136 | 2. **安全性**:通过使用 AES(高级加密标准)加密算法,BitLocker 提供强大的数据保护,防止未授权访问。 137 | 138 | 3. **TPM 支持**:BitLocker 可以与计算机的 TPM(受信任的平台模块)芯片结合使用,以增强安全性。TPM 存储加密密钥并提供安全启动功能。 139 | 140 | 4. **多种解锁方式**:用户可以通过多种方式解锁加密的驱动器,包括密码、PIN 码、USB 密钥和恢复密钥。 141 | 142 | 5. **数据恢复**:如果用户忘记密码或丢失解锁密钥,可以使用 BitLocker 恢复密钥来访问加密数据。 143 | 144 | 6. **管理工具**:Windows 提供图形界面和命令行工具(如 manage-bde)来管理 BitLocker 加密。 145 | 146 | 147 | 使用场景: 148 | 149 | - **保护敏感数据**:适用于需要保护机密或敏感信息的个人用户和企业。 150 | - **防止数据泄露**:在设备被盗或丢失的情况下,BitLocker 可以防止未授权访问存储在驱动器上的数据。 151 | 152 | 要启用 BitLocker,通常需要在 Windows 专业版或企业版上使用。在控制面板的“系统和安全”部分,可以找到 BitLocker 的设置选项。 153 | 154 | --- 155 | 156 | ### 1.8.BIOS界面的Boot的简介 157 | 在 BIOS(基本输入输出系统)中,“Boot”指的是计算机启动的过程和相关设置。以下是“Boot”在 BIOS 中的几个关键方面: 158 | 159 | **1. 启动顺序** 160 | 161 | - 引导设备优先级:Boot 设置中包含启动设备的顺序,例如硬盘、光驱、USB 驱动器和网络。这决定了计算机在启动时从哪个设备加载操作系统。 162 | - 可更改顺序:用户可以根据需要调整启动顺序,例如设置 USB 驱动器为首选启动设备,以便从 USB 设备安装操作系统。 163 | 164 | **2. 引导选项** 165 | 166 | - 引导选项菜单:某些 BIOS 提供了一个引导选项菜单,允许用户在启动时选择特定的引导设备,通常通过按下特定的键(如 F12)访问。 167 | 168 | **3. 引导模式** 169 | 170 | - Legacy BIOS 和 UEFI:现代计算机通常使用 UEFI(统一可扩展固件接口)作为替代传统的 BIOS。Boot 设置中可能有选项来选择使用 Legacy 或 UEFI 模式,影响操作系统的引导方式。 171 | 172 | **4. 安全启动(Secure Boot)** 173 | 174 | - 安全启动设置:一些系统允许启用或禁用安全启动,这是一种防止未授权软件在系统启动时加载的安全功能。 175 | 176 | **5. 引导记录** 177 | 178 | - 引导记录设置:在某些情况下,用户可以查看或修改与引导相关的记录,以确保系统能够正确加载操作系统。 179 | 180 | 在 BIOS 中,Boot 设置是配置计算机启动过程的关键部分,确保操作系统能够从正确的设备加载。通过调整这些设置,你可以优化系统的启动顺序和引导方式,以适应不同的需求。 181 | 182 | --- 183 | 184 | ### 1.9.Secure Boot的简介 185 | **Secure Boot** 可能会影响双系统安装,特别是当你尝试安装的操作系统不支持或未正确签名以通过 Secure Boot 验证时。以下是一些具体情况: 186 | 187 | **1. 不支持的操作系统** 188 | 189 | - 某些操作系统(例如某些 Linux 发行版)可能默认情况下不支持 Secure Boot。如果你在 Secure Boot 启用的状态下尝试安装这样的操作系统,可能会遇到启动失败或无法安装的问题。 190 | 191 | **2. 驱动程序和签名** 192 | 193 | - 如果你要安装的操作系统或其驱动程序未经过签名,Secure Boot 将阻止它们加载,从而影响系统的启动过程。 194 | 195 | **3. UEFI 和 Legacy 模式** 196 | 197 | - 在安装双系统时,你可能需要根据不同操作系统的需求选择 UEFI 模式或 Legacy 模式。如果 Secure Boot 启用,确保所有操作系统都兼容 UEFI 和 Secure Boot。 198 | 199 | **4. 需要禁用 Secure Boot** 200 | 201 | - 在某些情况下,特别是当安装的操作系统不支持 Secure Boot 时,你可能需要在 BIOS/UEFI 设置中禁用 Secure Boot。这将允许你安装并运行不受 Secure Boot 保护的操作系统。 202 | 203 | --- 204 | 205 | ### 1.10.挂载点的简介 206 | **挂载点** 是指在操作系统中用于访问文件系统的目录。它是一个特定的目录路径,系统通过这个路径将外部存储设备(如硬盘驱动器、USB 驱动器、网络共享等)连接到操作系统的文件系统中。通过挂载点,用户可以访问和操作存储在这些设备上的文件和目录。 207 | 208 | 1. **文件系统结构**: 209 | 210 | - 在 Linux 和类 Unix 系统中,所有文件和目录都以根目录 / 为基础构成一个统一的文件系统结构。任何外部存储设备都需要被“挂载”到这个结构中,才能被访问。 211 | 212 | 2. **挂载过程**: 213 | 214 | - 当你将设备连接到计算机时,需要通过挂载命令(如 mount)将其挂载到某个目录。例如,你可能将一个 USB 驱动器挂载到 /mnt/usb 目录下,这样就可以通过访问 /mnt/usb 来查看和操作 USB 驱动器中的文件。 215 | 216 | 3. **卸载(Unmounting)**: 217 | 218 | - 当你不再需要访问该设备时,可以通过卸载命令(如 umount)将其从文件系统中移除。这确保了数据的完整性,并释放系统资源。 219 | 220 | **实际示例:** 221 | 222 | - 假设你有一个外部硬盘,你可以在终端中使用如下命令将其挂载到 /media/external 目录: 223 | 224 | **sudo mount /dev/sdb1 /media/external** 225 | 226 | 之后,你可以通过访问 /media/external 来访问外部硬盘中的文件。 227 | 228 | 总结:挂载点是访问外部存储设备的关键概念,通过将设备挂载到特定的目录,用户可以在统一的文件系统中管理和操作不同的存储资源。 229 | 230 | --- 231 | 232 | ### 1.11.根挂载点的简介 233 | 在文件系统中,/ 代表根目录(root directory),是整个文件系统的起始点。它是 Linux 和类 Unix 系统中所有文件和目录的顶层目录。下面是根目录的一些重要概念: 234 | 235 | 1. **文件系统的基础** 236 | 237 | - **树状结构**:所有的文件和目录都从根目录 / 开始,形成一个树状结构。根目录下可以有多个子目录和文件,所有其他目录(如 /home、/usr、/etc 等)都是根目录的子目录。 238 | 239 | 2. **挂载点的含义** 240 | 241 | - **挂载点的父级**:当你将设备挂载到某个目录时,那个目录的路径会成为挂载点。例如,假设你将一个 USB 驱动器挂载到 /media/usb,则 /media/usb 就是这个 USB 驱动器的挂载点,而根目录 / 是整个文件系统的根。 242 | - **根目录的重要性**:挂载点可以是根目录下的任意目录,但最终所有的挂载和访问都与根目录相连。 243 | 244 | 3. **示例** 245 | 246 | - 在 Linux 系统中,如果你输入 ls /,将显示根目录下的所有文件和目录列表。 247 | 248 | - 如果你将一个硬盘分区挂载到 /mnt/data,你可以通过访问 /mnt/data 来查看该分区的内容,而 /mnt 和 /mnt/data 都是根目录的子目录。 249 | 250 | 总结:/作为根目录是整个文件系统的起点,所有挂载点都是相对于根目录的路径。通过挂载点,用户可以在统一的文件系统中访问和管理不同的存储设备。 251 | 252 | --- 253 | 254 | ### 1.12.软件源和镜像服务器的简介 255 | 软件源和镜像服务器是 Linux 及其他类 Unix 系统中用于管理和安装软件包的重要概念。 256 | 软件源(Software Repository) 257 | 258 | 软件源是一个集中存储软件包的地方,通常包含了大量可供用户安装和更新的软件。这些软件包会经过审核和测试,以确保它们的安全性和稳定性。软件源的主要功能包括: 259 | 260 | - **软件安装**:用户可以通过包管理工具(如 apt、yum、dnf 等)从软件源下载并安装软件包。 261 | - **软件更新**:软件源提供了软件的最新版本,用户可以方便地更新已安装的软件。 262 | - **依赖管理**:包管理工具能够自动处理软件包之间的依赖关系,确保所需的库和工具一同安装。 263 | 264 | 镜像服务器(Mirror Server) 265 | 266 | 镜像服务器是软件源的复制版本,它们通常分布在不同地理位置,以便于用户更快地下载软件包。镜像服务器的特点包括: 267 | 268 | - **负载均衡**:多个镜像服务器可以分散用户请求,减少单一服务器的负载,提高下载速度。 269 | - **地理位置优化**:用户可以选择离自己地理位置最近的镜像服务器,以获得更快的下载速度。 270 | - **数据同步**:镜像服务器定期与主软件源同步,以确保提供最新的软件包。 271 | 272 | 总结:软件源和镜像服务器共同为用户提供了方便的软件管理功能。通过合理配置和选择镜像服务器,用户可以高效地安装和更新所需的软件,提高使用体验。 273 | 274 | --- 275 | 276 | ### 1.13.GParted的简介 277 | GParted(GNOME Partition Editor)是一个用于管理硬盘分区的图形化工具,通常在 Ubuntu 和其他 Linux 发行版中使用。它的主要功能包括: 278 | 279 | 1. **创建、删除和调整分区**:用户可以轻松创建新的分区、删除不再需要的分区,以及调整现有分区的大小。 280 | 281 | 2. **格式化分区**:GParted 支持多种文件系统格式,包括 ext4、NTFS、FAT32 等,用户可以对分区进行格式化。 282 | 283 | 3. **移动分区**:用户可以移动分区位置,以重新组织硬盘上的数据。 284 | 285 | 4. **检查和修复分区**:GParted 允许用户检查分区的完整性,并修复可能出现的错误。 286 | 287 | 5. **支持多种存储设备**:GParted 可以管理硬盘驱动器、SSD、USB 驱动器等多种存储设备。 288 | 289 | 290 | GParted 的用户界面直观友好,适合用户进行硬盘管理,尤其是在进行系统安装、分区调整或数据备份时。使用 GParted 需要一定的权限,因此通常需要以管理员身份运行。 291 | 292 | --- 293 | 294 | ### 1.14.GRUB的简介 295 | 296 | GRUB (Grand Unified Bootloader) 是一款开源的启动引导程序,主要用于在计算机启动时加载操作系统。它常见于 Linux 和其他 Unix 类系统中,但也可以引导 Windows 等操作系统。GRUB 的主要功能是让用户在系统启动时选择加载的操作系统或内核,特别适合多系统或双系统环境,例如 Linux 和 Windows 并存的情况下。 297 | 298 | GRUB 的工作流程分为以下几步: 299 | 300 | 1. **阶段1:加载启动引导器** 301 | 在 BIOS 或 UEFI 完成硬件初始化后,GRUB 的第一阶段代码会被加载。它通常存储在磁盘的主引导记录(MBR)或 UEFI 分区中,负责将控制权传递给 GRUB 阶段2。 302 | 303 | 2. **阶段2:加载核心程序** 304 | GRUB 阶段2会显示启动菜单,让用户选择操作系统或特定内核版本。用户也可以通过 GRUB 命令行手动输入内核参数或进行系统修复。 305 | 306 | 3. **加载内核并启动操作系统** 307 | 一旦选定了内核,GRUB 会将内核和相关的初始 RAM 磁盘 (initramfs) 加载到内存,并将控制权交给操作系统内核以启动系统。 308 | 309 | 310 | 当你安装 Ubuntu 作为双系统时,Ubuntu 会默认安装 **GRUB(Grand Unified Bootloader)**。GRUB 是一个启动引导程序,它能够检测并列出系统上已安装的所有操作系统,允许你在启动时选择要加载的操作系统。通常在双系统中,GRUB 会被配置为引导菜单的默认管理程序,负责启动 Ubuntu 和 Windows 等系统。 311 | 312 | #### 为什么 Ubuntu 的启动优先级比 Windows 高时才能启动 GRUB? 313 | 314 | 1. **GRUB 安装位置**:GRUB 通常安装在硬盘的主引导记录(MBR)或 EFI 分区中。GRUB 负责接管启动过程,因此当 BIOS/UEFI 设置中指定 Ubuntu(或带有 GRUB 的分区)为启动优先级更高时,GRUB 就会运行并显示启动菜单,供你选择启动 Ubuntu 或 Windows。 315 | 316 | 2. **启动顺序的影响**:如果你在 BIOS/UEFI 设置中将 Windows 的引导项放在优先级更高的位置,系统会直接使用 Windows 自带的启动引导程序,而不是 GRUB。Windows 启动引导程序通常不会列出 Ubuntu,除非进行特别配置(例如使用第三方引导管理器)。因此,只有在 Ubuntu 的启动项优先级高于 Windows 时,GRUB 才会被加载并展示选择菜单,从而引导任意一个操作系统。 317 | 318 | 319 | 简而言之,GRUB 作为默认的引导管理器,只有在它先于 Windows 的启动项被执行时,才能发挥作用并展示操作系统选择菜单。如果优先启动 Windows,则会跳过 GRUB 320 | 。 321 | GRUB 具有灵活的配置能力,通过编辑其配置文件(通常位于 /boot/grub/grub.cfg)可以设置默认启动项、超时时间、图形界面等。其支持的文件系统也非常多,如 ext4、NTFS 和 FAT 等,确保了多系统兼容性。 322 | 323 | 在 GRUB 启动菜单中,序号是从 **0** 开始的。这意味着菜单中的第一个启动项对应于序号 0,第二个是序号 1,以此类推。这种从 0 开始的计数方式在配置文件中也保持一致,比如当你在 GRUB 配置文件中设置 GRUB_DEFAULT=0 时,它将默认选择第一个启动项。 324 | 325 | GRUB 目前有两个主要版本:Legacy GRUB 和 GRUB 2。GRUB 2 是更现代的版本,具有更好的模块化和扩展性,广泛用于主流 Linux 发行版中。 326 | 327 | --- 328 | 329 | ### 1.15.UEFI HardnDisk Drive BBS Priorities的简介 330 | UEFI Hard Disk Drive BBS Priorities 是主板 BIOS/UEFI 设置中的一项功能,用来配置硬盘的启动优先级。它决定了计算机在启动时,从哪些硬盘或者存储设备中加载操作系统,并按照优先级顺序依次尝试启动。 331 | 332 | 在这个设置中,你可以: 333 | 334 | 1. 设定不同硬盘的启动顺序:如果你有多块硬盘(例如一个固态硬盘和一个机械硬盘),可以在此调整启动的先后顺序。 335 | 336 | 337 | 2. 影响操作系统加载顺序:计算机会根据设定的优先级,尝试从首选硬盘启动操作系统。如果首选硬盘不可用,会自动切换到下一个硬盘。 338 | 339 | 340 | 341 | 这种设置对多系统配置(如 Windows 和 Linux 的双系统)以及多硬盘系统特别重要。 342 | 343 | --- 344 | 345 | ## 2.查看BIOS模式 346 | 使用**Win+R**打开 **“运行”对话框** 347 | 输入:**Msinfo32** 348 | 可以看到我的**BIOS模式**是**UEFI** 349 | 如果显示是**传统**,那用的就是**BIOS引导** 350 | 如果显示是**UEFI**,用的就是**UEFI引导** 351 | ![](/images/Linux-images/linux.1.png) 352 | 353 | --- 354 | 355 | ## 3.查看磁盘分区格式 356 | 一般看到**BIOS模式**是什么就能确定**磁盘分区格式**了,当然也可以去查看 357 | 右键点击开始,然后点击**磁盘管理** 358 | ![](/images/Linux-images/linux.2.png) 359 | 鼠标右键点击当前**Windows系统所在的硬盘**,再点击**属性** 360 | 提前说一下:这些C盘D盘右边**一般会**有一个**Bitlocker已加密**的显示 361 | 我这里没有是因为我已经关掉了,下文会介绍一般需要关掉它 362 | ![](/images/Linux-images/linux.3.png) 363 | 可以看到我这里的磁盘分区格式是GPT 364 | ![](/images/Linux-images/linux.4.png) 365 | 366 | --- 367 | 368 | ## 4.安装镜像 369 | Ubuntu镜像:[https://ubuntu.com/download/desktop](https://ubuntu.com/download/desktop) 370 | LTS 是 "Long Term Support" 的简写,意为“长期支持”。LTS 版本的操作系统会获得更长时间的支持和更新,通常是五年,这包括安全更新和软件包更新。 371 | ![](/images/Linux-images/linux.5.png) 372 | 373 | --- 374 | 375 | ## 5.制作Ubuntu安装盘 376 | ### 5.1.下载ventoy 377 | ventoy开源项目地址:[https://github.com/ventoy/Ventoy](https://github.com/ventoy/Ventoy) 378 | ventoy下载地址:[https://sourceforge.net/projects/ventoy/](https://sourceforge.net/projects/ventoy/) 379 | ![](/images/Linux-images/linux.6.png) 380 | 解压并打开 381 | ![](/images/Linux-images/linux.7.png) 382 | ### 5.2.插入U盘 383 | 注意:制作成安装盘后,U盘**原来的数据**都会被**清空** 384 | 在**设备**里选择你的U盘 385 | **分区格式(MBR 或 GPT)**会影响你在 USB 驱动器上安装系统时,**目标磁盘的分区格式** 386 | 可以看到**默认的是MBR**,我的Windows系统所在硬盘分区格式是**GPT**,所以**修改**一下 387 | 如果你的Windows系统所在硬盘分区格式就是MBR,就不用修改 388 | 我这里u盘已经安装了ventoy,没安装时设备内部ventoy版本那是空的 389 | ![](/images/Linux-images/linux.8.png) 390 | ### 5.3.在U盘上安装ventoy 391 | **点击左上角配置选项->点击分区类型->选择GPT->安装** 392 | 安装成功后会弹出恭喜**安装成功**的窗口,然后U盘名字变为**ventoy** 393 | ### 5.4.将Ubuntu镜像复制到安装盘 394 | 前文下载的**8Ubuntu镜像**直接**复制**过来就成功制作了**Ubuntu安装盘** 395 | ![](/images/Linux-images/linux.9.png) 396 | 397 | --- 398 | 399 | ## 6.关闭BitLocker 400 | 如果启用了**BitLocker**,C盘和D盘右边都会显示**BitLocker已经启用** 401 | 如果已经关闭了或没有启用,就跳过这一小点 402 | BitLocker的密码一般在你第一次激活Windows系统的账号里 403 | 关闭它比较省事,之后再打开就行 404 | ![](/images/Linux-images/linux.10.png) 405 | 406 | ### 6.1.BitLocker可能触发条件 407 | BitLocker 会在以下情况下要求输入 48 位的恢复密码: 408 | 409 | 1. **TPM 出现问题**: 410 | 411 | - 如果计算机的 TPM(受信任的平台模块)在启动过程中未能正常工作,BitLocker 可能无法验证计算机的安全性,从而要求输入恢复密码。 412 | 2. **系统硬件更改**: 413 | 414 | - 当计算机的硬件组件(如主板、TPM 芯片或启动驱动器)发生更改时,BitLocker 可能会要求输入恢复密码以确保数据的安全性。 415 | 3. **BIOS/UEFI 设置更改**: 416 | 417 | - 如果更改了 BIOS/UEFI 设置,例如禁用了安全启动或重置了 BIOS/UEFI,BitLocker 也可能会要求输入恢复密码。 418 | 4. **Windows 更新或修复**: 419 | 420 | - 在进行某些系统更新或修复操作时,BitLocker 可能会触发恢复模式,要求输入密码。 421 | 5. **启动顺序变化**: 422 | 423 | - 如果启动顺序更改为尝试从不同的设备启动,BitLocker 可能会要求验证身份。 424 | 6. **未按预期关机**: 425 | 426 | - 如果计算机在非正常情况下关机(如断电),下次启动时可能会要求输入恢复密码。 427 | 428 | 在启用 BitLocker 时,系统会生成一个 48 位的恢复密码,并提示用户进行备份,以防在上述情况下无法访问数据。 429 | 430 | ### 6.2.关闭BitLocker 431 | 在搜索栏中搜索设备加密设置或管理BitLocker 432 | ![](/images/Linux-images/linux.11.png) 433 | 关闭需要一些时间,请耐心等待 434 | 成功后可进入磁盘管理器在C盘、D盘就不会显示有BitLocker已加密的字样了 435 | ![](/images/Linux-images/linux.12.png) 436 | 437 | --- 438 | 439 | ## 7.为Ubuntu挤出硬盘空间 440 | 鼠标右键点击开始,打开磁盘管理 441 | ![](/images/Linux-images/linux.2.png) 442 | 挑选一个分区为Ubuntu系统挤出空间 443 | 这里我选择D盘这个分区,然后点击压缩卷 444 | ![](/images/Linux-images/linux.13.png) 445 | 这里输入压缩空间量就是压缩出来空间的大小 446 | 我这里就填10240MB 447 | ![](/images/Linux-images/linux.14.png) 448 | 未分配的10GB就是刚才压缩出来的硬盘空间 449 | 补充:1G=1024MB 450 | 压缩出来的分区应该显示的是未分配 451 | 452 | ![](/images/Linux-images/linux.15.png) 453 | 454 | --- 455 | 456 | ## 8.进入BIOS界面进行设置 457 | 重启电脑,重启过程中点击F2 458 | (怕错过一直点也行,不同品牌的电脑快捷键和BIOS界面可能有所不同) 459 | ![](/images/Linux-images/linux.16.png) 460 | 461 | ### 8.1.关闭Secure Boot 462 | Secure Boot的选项一般在安全里,选择Disabled以关闭 463 | ![](/images/Linux-images/linux.17.png) 464 | 465 | ### 8.2.boot option priorities 466 | 这是**启动优先级**的意思,在Boot里面,一般来说**默认**启动优先级最高的是**U盘** 467 | 如果不是,**需要将U盘设为最优先启动项** 468 | 退出时记得保存,退出时会提醒你保存,按**F10可直接保存** 469 | ![](/images/Linux-images/linux.18.png) 470 | 471 | --- 472 | 473 | ## 9.进入U盘的Ubuntu系统 474 | 首先插入U盘重启电脑,进入ventoy的界面 475 | 选择我们安装的Ubuntu镜像,回车 476 | ![](/images/Linux-images/linux.19.png) 477 | 选择第一个以默认Boot启动,回车 478 | ![](/images/Linux-images/linux.20.png) 479 | 选择第一个,试用或安装Ubuntu,回车 480 | ![](/images/Linux-images/linux.21.png) 481 | 482 | --- 483 | 484 | ## 10.安装Ubuntu系统到硬盘 485 | 1.下滑,选择中文 486 | ![](/images/Linux-images/linux.22.png) 487 | 2.连接网络 488 | ![](/images/Linux-images/linux.23.png) 489 | 3.选择安装Ubuntu 490 | ![](/images/Linux-images/linux.24.png) 491 | 4.选择交互安装 492 | ![](/images/Linux-images/linux.25.png) 493 | 5.选择默认集合 494 | ![](/images/Linux-images/linux.26.png) 495 | 6.推荐选择这两个 496 | ![](/images/Linux-images/linux.27.png) 497 | 7.选择手动分区 498 | ![](/images/Linux-images/linux.28.png) 499 | 8.选择我们之前为安装Ubuntu系统而**压缩出来的硬盘空间**,并点击**+号** 500 | 注意:这里对**文件大小的计算方式不同**,我们在Windows压缩出来的10个G在这里显示是10.74G 501 | 根据你压缩出来的硬盘空间大概**估算一下选择**,**不要选错了!** 502 | 很容易**辨别**的是,我们这种**压缩出来的空间前面**有个**剩余空间**的标记 503 | ![](/images/Linux-images/linux.29.png) 504 | 9.**挂载点**选择**根挂载点** ,挂载点介绍见上文1.10 505 | 简而言之就是这个分区拿来储存Ubuntu系统的所有数据 506 | ![](/images/Linux-images/linux.30.png) 507 | 10.选择用于安装引导程序的设备 508 | 你刚才选的**在哪个硬盘**就选择哪个硬盘 509 | 这里的**nvme0n1**就是指代**我的硬盘**,上面那个是我们的安装盘 510 | ![](/images/Linux-images/linux.31.png) 511 | 11.进行一些设置 512 | ![](/images/Linux-images/linux.32.png) 513 | 12.选择时区 514 | ![](/images/Linux-images/linux.33.png) 515 | 13.安装 516 | ![](/images/Linux-images/linux.34.png) 517 | 14.安装完成后会提示你**重启** 518 | 会有一个界面让你拔掉U盘,再回车 519 | 15.安装完成 520 | ![](/images/Linux-images/linux.35.png) 521 | 522 | --- 523 | 524 | ## 11.设置镜像服务器 525 | 软件源和镜像服务器介绍见上文1.12 526 | ![](/images/Linux-images/linux.36.png)![](/images/Linux-images/linux.37.png) 527 | 它会自动更新,直接**停止**,再点击**设置**就行 528 | ![](/images/Linux-images/linux.38.png) 529 | 先点击下载自右边的链接进入下图的界面,然后点击**选择最佳服务器** 530 | ![](/images/Linux-images/linux.39.png) 531 | 等待一段时间,他会给你选择一个最佳的服务器,然后我们**直接点选择服务器** 532 | ![](/images/Linux-images/linux.40.png) 533 | 最后你关闭的时候会更新软件缓存,就大功告成 534 | ![](/images/Linux-images/linux.41.png) 535 | 536 | --- 537 | 538 | ## 12.对Ubuntu的硬盘空间进行扩容 539 | 要是用久了发现硬盘空间不够用,我们就可以进行**扩容** 540 | 541 | ### 12.1.压缩硬盘空间 542 | 从**多余的分区**中**压缩**出来一些**硬盘空间** 543 | 忘了**操作**的可以返回上文**(一.7.为Ubuntu挤出硬盘空间)**,是一样的操作 544 | 我这里压缩了10个G 545 | ![](/images/Linux-images/linux.15.png) 546 | 547 | ### 12.2.进入U盘的Ubuntu系统 548 | 和上文**(一.9.进入U盘的Ubuntu系统)**一样 549 | 550 | ### 12.3.选择试用Ubuntu 551 | 选择语言为中文,一路到下图这一步就要注意了 552 | **一定要选择试用Ubuntu** 553 | 其实你一进来或选完语言九点右上角的X关闭这个窗口就行 554 | 这本来就是**运行在U盘的Ubuntu系统** 555 | ![](/images/Linux-images/linux.49.png) 556 | 557 | ### 12.4.使用GParted扩容 558 | 注意:这期间会弹出一些需要确认的窗口 559 | **1.打开终端(快捷键:Ctrl+Alt+G) 560 | 2.运行命令以安装和启动GParted** 561 | GParted的简介见上文**(一.1.13.GParted的简介)** 562 | 563 | **sudo apt install gparted #下载GParted 564 | gparted #打开GParted** 565 | 566 | ![](/images/Linux-images/linux.42.png) 567 | 3.右键点击我们需要扩容的Ubuntu系统的分区 568 | ![](/images/Linux-images/linux.43.png) 569 | 4.可以在**上方拖动**进行扩容,也可以点击**新大小右边的+**进行扩容 570 | 5.扩容完成后点击调整大小,然后确认 571 | ![](/images/Linux-images/linux.44.png) 572 | ![](/images/Linux-images/linux.45.png) 573 | 6.点击**绿色的✓**应用全部操作完成扩容 574 | ![](/images/Linux-images/linux.46.png) 575 | 7.重启退出,**不要提前把U盘拔了**,能**提示的时候再拔** 576 | ![](/images/Linux-images/linux.47.png) 577 | 安装好Ubuntu系统后,原来显示**未分配**的分区会变为**状态良好** 578 | 原来是97.67GB,可以看到扩容10GB成功了 579 | ![](/images/Linux-images/linux.48.png) 580 | 581 | --- 582 | 583 | ## 13.启用GRUB 584 | 不同电脑的操作可能不同 585 | 关键在于**把Ubuntu高的启动优级设置的比Windows系统的高** 586 | 如果你细心一些,会发现一个问题 587 | 有两个操作系统,该怎么选择进入哪一个操作系统? 588 | 如果你直接重启,会发现直接进入Windows系统,看不到Ubuntu系统在哪 589 | 这时候就需要启用GRUB了 590 | 介绍见上文**(一.1.14.GRUB的简介)** 591 | 还是重启电脑进入BIOS设置界面 592 | 操作与上文**(一.8.进入BIOS设置界面进行设置)**相同 593 | 1.找到**UEFI Hard Disk Drive BBS Priorities** 594 | 介绍见上文**(一.1.15.UEFI HardnDisk Drive BBS Priorities的简介)** 595 | ![](/images/Linux-images/linux.87.png) 596 | 将Boot Option 1设置为Ubuntu 597 | ![](/images/Linux-images/linux.88.png) 598 | 2.现在退出,在启动时会进入GRUB的界面 599 | 这是完全的界面 600 | ![](/images/Linux-images/linux.89.png) 601 | 602 | --- 603 | 604 | ## 14.修改GRUB配置文件 605 | 接下来我们要设置默认选择Windows系统,10s倒计时自动进入 606 | 这是启动的菜单,你没修改GRUB配置文件时默认进的时Ubuntu 607 | 这个**菜单的序号是从0开始**的,比如第五个Windows的序号是4 608 | ![](/images/Linux-images/linux.90.png) 609 | 这是页尾,可以看到我设计了一个倒计时 610 | ![](/images/Linux-images/linux.91.png) 611 | ### 14.1.进入Ubuntu系统 612 | 1.打开**终端**(快捷键**Ctrl+Alt+t**) 613 | 2.输入**命令**用nano文本编辑器打开**GRUB配置的模板文件**: 614 | **sudo nano /etc/default/grub** 615 | ![](/images/Linux-images/linux.92.png) 616 | 设置**默认启动的序号**和**启动倒计时** 617 | 再次强调:**序号是从0开始的!** 618 | **^是指Ctrl键**,比如退出就是Ctrl+C 619 | ![](/images/Linux-images/linux.93.png) 620 | ### 14.2.更新GRUB配置文件 621 | 上文修改的是**GRUB配置的模板文件**,我们还要更新到**实际的GRUB配置文件** 622 | 使用**命令**更新到实际的GRUB配置文件: 623 | **sudo update-grub** 624 | ![](/images/Linux-images/linux.94.png) 625 | ### 14.3.配置成功 626 | 现在重启就能进入GRUB界面,可以选择进入Ubuntu系统,也可以倒计时结束默认进入Windows系统 627 | 628 | --- 629 | 630 | # 三.虚拟机中安装Ubuntu 631 | 632 | --- 633 | 634 | ## 1.虚拟机基础知识介绍 635 | ### 1.1.内存 636 | 虚拟机(VM)的内存作用与物理计算机中的内存类似,用于存储操作系统、应用程序以及正在运行的进程的临时数据。虚拟机的内存主要用于以下几个方面: 637 | 638 | 1. **操作系统和应用程序的运行**:虚拟机的内存会分配给操作系统和应用程序,以确保它们能够正常运行。操作系统使用这部分内存来管理进程和任务,应用程序则使用它来存储当前运行的数据和变量。 639 | 640 | 2. **进程管理**:每个正在运行的进程都会占用一部分虚拟内存空间。操作系统通过调度算法将这些进程管理在内存中,使其能够快速响应用户操作。 641 | 642 | 3. **虚拟内存技术**:虚拟机也使用虚拟内存技术,将物理内存与硬盘上的交换空间(或页面文件)结合使用。这使得虚拟机可以处理比分配给它的物理内存更多的数据。 643 | 644 | 4. **缓存和缓冲区**:虚拟机会将常用的数据存储在内存中,以减少对磁盘的访问,提高性能。例如,文件系统的缓存、数据库的查询结果等都会被存放在内存中,以提高数据读取的速度。 645 | 646 | 5. **共享内存**:在一些情况下,虚拟机可能需要与宿主机或其他虚拟机进行通信,内存也可以用于共享数据,尤其是通过共享内存机制来实现高效的数据交换。 647 | 648 | 649 | 总之,虚拟机的内存决定了它可以运行多么复杂的操作系统和应用程序,内存越大,虚拟机的性能通常也越好,尤其是当同时运行多个任务时。 650 | 651 | --- 652 | 653 | ### 1.2.处理器数量和每个处理器的内核数量 654 | 虚拟机(VM)的处理器数量和每个处理器的内核数量是决定其计算性能的重要参数,它们直接影响虚拟机的并发处理能力和整体性能表现。以下是处理器数量和内核数量的具体作用: 655 | 656 | #### 1. 处理器数量(vCPU数量) 657 | 658 | 虚拟机的“处理器”通常指虚拟中央处理单元(vCPU),它是由宿主机的物理CPU资源虚拟化后分配给虚拟机的计算单元。vCPU的数量表示虚拟机可以利用多少个并行计算资源。vCPU数量越多,虚拟机能同时处理更多的并发任务。 659 | 660 | - **多任务处理**:更多的vCPU可以让虚拟机同时处理多个任务或线程。例如,当多个应用程序或进程在虚拟机上同时运行时,虚拟机可以将它们分配到不同的vCPU上进行并行处理,提升效率。 661 | 662 | - **提高性能**:对于并行计算密集型任务(如多线程应用、数据库服务器、大型Web应用等),增加vCPU数量可以显著提高性能。虚拟机可以利用多个vCPU分担计算负载,减少单个处理器的负载压力。 663 | 664 | - **资源分配与隔离**:在虚拟化环境中,宿主机可以将其物理CPU资源分配给多个虚拟机,而每个虚拟机有自己的vCPU。这使得可以在同一台物理服务器上运行多个独立的虚拟机,彼此隔离并独立分配计算资源。 665 | 666 | 667 | #### 2. 每个处理器的内核数量 668 | 669 | 处理器的“内核”指的是每个vCPU中的物理或虚拟处理单元。一个多核处理器可以在同一时间执行多个独立的计算任务,核心数量决定了vCPU的内部并行处理能力。 670 | 671 | - **提高并行计算能力**:更多的内核意味着可以同时执行更多的线程或进程。多核虚拟机可以更好地处理需要并行计算的任务(如视频编码、科学计算、数据处理等),每个核心可以同时运行不同的线程,提高执行效率。 672 | 673 | - **提升多线程性能**:现代应用程序,尤其是多线程应用,可以有效利用多核处理器。每个线程可以分配到不同的核心上运行,这样可以加速任务完成时间。 674 | 675 | - **负载分担**:多核心处理器可以将计算负载均匀分布在多个核心上,避免单一核心的过载,从而提升系统的响应速度和整体性能。 676 | 677 | 678 | #### 3. vCPU数量和内核数量的关系 679 | 680 | 虚拟机的vCPU数量和每个vCPU的内核数量往往一起决定了虚拟机的计算能力。一般来说: 681 | 682 | - **更多的vCPU**:能够同时处理更多的任务,提高并行处理能力,适合多任务、并发较高的场景。 683 | - **更多的内核**:能够提高每个vCPU的内部处理能力,适合计算密集型、多线程的应用。 684 | 685 | #### 4. 实际应用场景 686 | 687 | - **Web服务器**:对于负载较高的Web服务器,增加vCPU和每个vCPU的内核数量可以应对大量的并发请求,提高吞吐量。 688 | - **数据库服务器**:数据库操作通常涉及大量的计算和IO操作,更多的vCPU和内核可以显著提高查询和事务处理速度。 689 | - **开发与测试**:虚拟机常用于开发和测试环境,多vCPU和多内核配置可以快速构建复杂的应用环境并进行高并发测试。 690 | 691 | #### 5. 资源分配与权衡 692 | 693 | 在配置虚拟机时,需要在性能需求与资源分配之间做平衡。虽然增加vCPU和内核数量可以提高虚拟机的性能,但它们消耗的宿主机资源也会相应增加。如果分配的vCPU或内核数量超过宿主机的实际物理资源,可能会导致资源争用,影响整体性能。 694 | 695 | #### 总结 696 | 697 | - **vCPU数量**决定了虚拟机能够并行处理多少个任务或线程。 698 | - **每个vCPU的内核数量**决定了虚拟机处理每个任务时的效率,尤其是在处理多线程应用时表现明显。 699 | 700 | --- 701 | 702 | ### 1.3.软盘设备和 CD/DVD设备 703 | 1. **软盘(autoinst.flp)**:软盘驱动器(floppy disk)在现代操作系统中已经基本被淘汰。这个虚拟软盘驱动器可能是在虚拟机创建时自动添加的。如果你不需要使用软盘镜像(如 autoinst.flp 文件),通常可以将其移除,以简化虚拟机配置。 704 | 705 | 2. **CD/DVD 1 (SATA) - autoinst.iso**:这个光驱设备正在使用名为 autoinst.iso 的ISO镜像文件,通常这个文件可能与自动化安装脚本或配置相关。如果你已经安装了操作系统或不再需要这个ISO镜像,可以选择移除这个CD/DVD设备。 706 | 707 | 3. **CD/DVD 2 (SATA) - ubuntu.iso**:第二个光驱设备挂载了一个 ubuntu.iso 文件。这应该是你用来安装 Ubuntu 操作系统的ISO文件。如果你已经安装完成了操作系统,并且不再需要使用安装介质,也可以选择移除这个设备。 708 | #### 是否可以移除: 709 | 710 | - **软盘设备**:如果你不需要软盘镜像,可以安全移除。 711 | - **CD/DVD设备**:如果虚拟机已经完成系统安装,且你不再需要这些ISO镜像文件,可以移除它们,减少虚拟机的硬件设备数量。 712 | 713 | 移除这些设备不会影响虚拟机的正常运行,尤其是在系统已经安装好的情况下。只要虚拟机在使用这些设备时不会加载镜像文件,就可以自由移除。 714 | 715 | --- 716 | 717 | ### 1.4.网络适配器的常见模式 718 | 在虚拟机中,网络适配器的网络连接模式决定了虚拟机与宿主机、其他虚拟机以及外部网络之间的通信方式。常见的几种网络连接模式包括: 719 | 720 | #### 1. 桥接模式(Bridged Mode) 721 | 722 | 桥接模式允许虚拟机直接连接到宿主机所在的物理网络,就像它是网络中的一台独立的物理计算机。 723 | 724 | - **工作原理**:虚拟机通过宿主机的物理网卡与局域网(LAN)直接通信。虚拟机会从局域网中的路由器或DHCP服务器获取自己的IP地址,与宿主机和其他物理设备在同一网络段上。 725 | - **优点**:虚拟机可以像其他物理设备一样与网络上的其他设备直接通信。适用于需要与宿主机和局域网中的其他设备通信的场景,如服务器虚拟化、测试网络设备等。 726 | - **缺点**:需要网络中有可用的IP地址,可能受限于局域网的配置。 727 | 728 | #### 2. NAT模式(Network Address Translation Mode) 729 | 730 | NAT模式通过宿主机共享网络连接,虚拟机在宿主机的网络环境下访问外部网络。虚拟机使用的是宿主机的IP地址,通过网络地址转换来实现外部访问。 731 | 732 | - **工作原理**:虚拟机通过宿主机的网络连接访问外部网络,但它使用宿主机的IP地址进行通信,而虚拟机本身处于私有IP地址空间内。 733 | - **优点**:虚拟机可以轻松访问外部网络(如互联网),而不需要独立的IP地址配置。适合需要访问外部网络,但不需要与局域网内其他设备通信的场景。 734 | - **缺点**:虚拟机只能通过宿主机访问外部网络,局域网内的其他设备无法直接访问虚拟机,除非手动设置端口转发。 735 | 736 | #### 3. 仅主机模式(Host-only Mode) 737 | 738 | 仅主机模式将虚拟机与宿主机隔离在一个虚拟网络中,虚拟机与宿主机可以通信,但无法访问外部网络。 739 | 740 | - **工作原理**:虚拟机与宿主机在一个独立的虚拟局域网中通信,虚拟机无法通过宿主机的物理网卡访问外部网络。 741 | - **优点**:适合虚拟机与宿主机或其他虚拟机进行独立网络通信的场景,例如用于测试和开发不需要外部网络连接的应用。 742 | - **缺点**:虚拟机无法访问外部网络(如互联网),如果需要访问,需要额外配置NAT或端口转发。 743 | 744 | #### 4. 自定义模式(Custom Mode) 745 | 746 | 有时,虚拟机管理工具会提供自定义的网络配置选项,让用户可以在不同的虚拟网络(例如多个虚拟网卡或不同的虚拟交换机)之间进行配置。 747 | 748 | - **工作原理**:用户可以定义不同的虚拟交换机或网络,虚拟机可以连接到这些自定义的网络中。适合复杂的虚拟网络拓扑场景,如测试多种网络配置或跨虚拟机的专用网络通信。 749 | 750 | #### 5. 内网模式(Internal Network Mode) 751 | 752 | 一些虚拟化工具(如VirtualBox)提供内网模式,虚拟机可以在一个完全隔离的内部虚拟网络中通信,而与宿主机和外部网络没有任何联系。 753 | 754 | - **工作原理**:所有连接到内网模式的虚拟机可以互相通信,但它们无法访问宿主机或外部网络。适合用于模拟完全隔离的网络环境,如测试局域网内的通信协议或安全配置。 755 | 756 | - **优点**:用于虚拟机之间的私有通信,确保虚拟机之间的网络流量不会泄露到外部网络。 757 | 758 | - **缺点**:虚拟机无法访问外部网络或宿主机,需要配置其他网络适配器来实现访问。 759 | 760 | 761 | #### 6. NAT网络模式(NAT Network Mode) 762 | 763 | 与普通NAT模式类似,但NAT网络模式允许多个虚拟机共享同一个NAT网络,同时还能彼此通信。 764 | 765 | - **工作原理**:多个虚拟机通过宿主机的网络访问外部网络,并且可以在NAT网络中互相通信。类似于NAT模式,但适合多个虚拟机共享一个虚拟网络。 766 | - **优点**:虚拟机可以访问外部网络,并且多个虚拟机在同一虚拟网络中可以互相通信。 767 | - **缺点**:虚拟机无法直接被局域网或宿主机以外的设备访问。 768 | 769 | #### 总结 770 | 771 | - **桥接模式**:虚拟机作为网络中独立的节点,适合需要局域网通信的场景。 772 | - **NAT模式**:适合需要虚拟机访问外部网络但不需要局域网通信的场景。 773 | - **仅主机模式**:适合虚拟机与宿主机或其他虚拟机之间的网络通信,不需要外部网络。 774 | - **自定义/内网模式**:用于创建复杂或完全隔离的网络环境。 775 | 776 | 根据你的使用场景,可以选择合适的网络模式进行配置。 777 | 778 | --- 779 | 780 | ### 1.5.加速3D图形 781 | “加速3D图形”是指虚拟机中的3D图形硬件加速功能,这个功能允许虚拟机通过宿主机的物理GPU(图形处理单元)来处理三维图形渲染任务,从而提高虚拟机中运行的应用程序或操作系统的图形性能。以下是“加速3D图形”的作用及其意义: 782 | 783 | #### 1. 加速3D图形的作用 784 | 785 | 在虚拟机中启用3D图形加速后,虚拟机中的应用程序可以利用宿主机的GPU来处理3D渲染任务,而不只是依赖虚拟机本身的虚拟CPU进行图形处理。这可以显著提升虚拟机中的图形性能。 786 | 787 | - **图形性能提升**:启用加速3D图形后,虚拟机中的图形计算任务(如游戏、3D设计软件、图形密集型应用)可以由物理GPU处理,使得图形渲染速度更快、画面更流畅。 788 | 789 | - **减少CPU负担**:没有3D加速时,虚拟机依赖于虚拟CPU来进行图形处理,这通常导致性能较差,尤其是在运行图形密集型任务时。而启用3D加速后,图形计算转移到宿主机的GPU上,可以释放CPU资源用于其他任务,提升整体系统性能。 790 | 791 | - **更好的用户体验**:启用3D加速后,虚拟机能够更流畅地显示现代操作系统的图形界面(如Windows、Linux的3D桌面效果),例如Aero效果、窗口动画和透明效果等。 792 | 793 | 794 | #### 2. 适用场景 795 | 796 | 加速3D图形功能主要用于以下几类场景: 797 | 798 | - **3D应用程序和游戏**:如果你在虚拟机中运行需要强大图形处理能力的3D软件(如AutoCAD、Blender等3D建模软件)或游戏,启用3D加速可以显著提高运行效果。 799 | 800 | - **现代操作系统图形界面**:一些操作系统(如Windows 10/11、某些Linux发行版)采用复杂的桌面环境和用户界面,3D加速有助于确保这些操作系统在虚拟机中运行时的界面流畅度。 801 | 802 | - **视频处理和图像编辑**:视频编辑软件和一些高级图像处理工具会使用GPU加速来提升处理速度。在虚拟机中启用3D加速可以让这些软件更快完成渲染、编码等操作。 803 | 804 | 805 | #### 3. 硬件要求 806 | 807 | 要启用3D图形加速,宿主机需要满足以下条件: 808 | 809 | - **宿主机支持硬件加速**:宿主机的GPU必须支持硬件加速功能。现代的独立显卡(如NVIDIA、AMD)和部分集成显卡(如Intel Iris系列)都支持硬件加速。 810 | 811 | - **虚拟机软件支持**:虚拟化软件(如VMware Workstation、VirtualBox)需要支持3D加速功能,并且在虚拟机设置中启用该功能。 812 | 813 | - **宿主机GPU驱动**:确保宿主机的GPU驱动是最新版本,并支持虚拟化的硬件加速功能。 814 | 815 | 816 | #### 4. 如何启用加速3D图形 817 | 818 | 通常,你可以在虚拟机的设置中找到启用3D加速的选项。例如,在VMware Workstation中: 819 | 820 | 1. 打开虚拟机的设置。 821 | 2. 选择“显示器”选项。 822 | 3. 勾选“加速3D图形”复选框。 823 | 824 | 类似地,在其他虚拟化平台中(如VirtualBox),你也可以在显示器设置中启用3D加速。 825 | 826 | #### 5. 可能的限制和注意事项 827 | 828 | - **性能受限于宿主机的GPU**:虚拟机中的图形性能仍然取决于宿主机的GPU能力。如果宿主机的GPU较弱,启用3D加速的效果可能不明显。 829 | 830 | - **宿主机资源占用**:启用3D加速后,虚拟机会占用宿主机的GPU资源。如果虚拟机与宿主机同时运行图形密集型任务,宿主机的性能可能会受到影响。 831 | 832 | - **驱动兼容性**:虚拟机中的操作系统需要正确的虚拟图形驱动才能充分利用3D加速功能。如果虚拟机中的驱动不兼容或版本过旧,3D加速可能无法正常工作。 833 | 834 | 835 | #### 总结 836 | 837 | “加速3D图形”功能使虚拟机能够通过宿主机的GPU处理3D图形任务,提升图形性能,特别是在需要运行3D软件、图形密集型应用、现代操作系统界面时有显著效果。如果你在虚拟机中运行这些任务,启用3D加速将会大幅改善用户体验。 838 | 839 | --- 840 | 841 | ### 1.6.虚拟机中的磁盘 842 | 在虚拟机中安装Ubuntu时,选项 **“擦除磁盘并安装 Ubuntu”** 所指的“磁盘”是**虚拟机的磁盘**,而不是你物理计算机上的硬盘。这是虚拟机软件为这个虚拟机创建的一个虚拟硬盘(VHD或VMDK等格式),它相当于是虚拟机的独立存储设备。 843 | #### 1. 擦除磁盘并安装 Ubuntu 844 | 845 | 当你选择“擦除磁盘并安装 Ubuntu”时,Ubuntu会格式化并使用**虚拟机创建的虚拟硬盘**。它并不会影响到你物理主机(真实电脑)的硬盘,只是清空了虚拟机内部的虚拟硬盘。如果之前安装了其他系统或文件,这个选项会删除它们并进行全新安装。 846 | 847 | #### 2. 虚拟机硬盘空间是哪里来的? 848 | 849 | 虚拟机的硬盘是在你**创建虚拟机**时,**手动分配的空间**。例如,你可以为虚拟机分配一个50GB的虚拟硬盘空间。这个硬盘并不是真实的物理硬盘,它只是虚拟机软件(如 VMware 或 VirtualBox)在你物理硬盘上的一个文件(虚拟磁盘文件)。 850 | 851 | #### 3. 虚拟硬盘空间是否实际占用物理硬盘空间? 852 | 853 | - **动态分配(Thin Provisioning)**:如果你在虚拟机中选择了“动态分配”硬盘,虚拟磁盘文件不会立即占用你分配的所有空间。例如,你给虚拟机分配了50GB硬盘,但只有当你在虚拟机里逐步使用硬盘时,它才会逐渐增长。例如,如果Ubuntu系统仅用了10GB,虚拟磁盘文件只会占用物理硬盘上的10GB。 854 | - **固定分配(Thick Provisioning)**:如果你选择了“固定分配”硬盘,虚拟机会立即占用你分配的全部空间。比如你分配了50GB,虚拟磁盘文件会立即在物理硬盘上占用50GB的空间,即使虚拟机里面只用了2GB。 855 | 856 | #### 4. 硬盘空间是如何管理的? 857 | 858 | 虚拟机的硬盘空间是作为一个**独立文件**存在的,这个文件存储在你物理机的硬盘上。当你启动虚拟机时,操作系统(如Ubuntu)会将其视为正常的硬盘空间,和在真实电脑上操作没有差别。你分配给虚拟机的硬盘空间实际占用了你物理电脑的存储。 859 | 860 | #### 5. 未使用的虚拟磁盘空间还在原来的地方吗? 861 | 862 | - 如果你采用了**动态分配**,那么未使用的虚拟硬盘空间**不会立即占用**物理硬盘的空间,物理机上的硬盘依然保留这些空间。 863 | - 如果你采用了**固定分配**,即使没有用到虚拟硬盘中的所有空间,这部分硬盘也已经被分配出去,占用了物理硬盘的空间。 864 | 865 | #### 总结 866 | 867 | - 虚拟机中的“擦除磁盘并安装 Ubuntu”指的是虚拟机中的**虚拟硬盘**,不影响物理主机上的真实磁盘。 868 | - 虚拟硬盘是在创建虚拟机时分配的,它的空间来源于物理硬盘,但可以选择**动态**或者**固定**分配,动态分配下未使用的部分不会占用物理空间,固定分配则会立即占用。 869 | 870 | --- 871 | 872 | ## 2.下载VMware 873 | Broadcom官网:[https://support.broadcom.com/](https://support.broadcom.com/) 874 | 1.VMware是这家公司的产品,需要先登录才能下载 875 | 没有账号就先注册,注册需要一个邮箱,再填一些信息 876 | (邮箱需真实,会给你邮箱发验证码,信息可以随便填) 877 | ![](/images/Linux-images/linux.50.png) 878 | 2.点击Software->VMware Cloud Foundation->My Downloads 879 | ![](/images/Linux-images/linux.51.png) 880 | 3.下滑找到VMware Workstation Pro 881 | ![](/images/Linux-images/linux.52.png) 882 | 4.选择个人版 883 | ![](/images/Linux-images/linux.53.png) 884 | 5.第一次下载需要填一些信息,随便填 885 | ![](/images/Linux-images/linux.54.png) 886 | 6.打开下载的安装包进行安装 887 | ![](/images/Linux-images/linux.55.png) 888 | 7.选择安装位置,是否需要添加到系统PATH看你需求 889 | ![](/images/Linux-images/linux.56.png) 890 | 8.如果你自定义了安装目录就会弹出这个警告 891 | 简单来说就是如果是推荐的目录,进行一些对VMware的操作需要管理员权限 892 | 现在对VMware的操作不需要什么权限了 893 | ![](/images/Linux-images/linux.57.png) 894 | 9.这也看你需不要,不需要就不勾选 895 | 10.后面还有个快捷方式,可以勾上 896 | ![](/images/Linux-images/linux.58.png) 897 | 11.如果你自定义了安装位置,可能会遇到下图的情况 898 | 这是系统找不到该文件的默认位置 899 | 你在浏览里找到要求的这个文件再点确定就行 900 | ![](/images/Linux-images/linux.59.png) 901 | 902 | 12.安装完成 903 | ![](/images/Linux-images/linux.60.png) 904 | 905 | --- 906 | 907 | ## 3.下载Ubuntu镜像 908 | ubantu镜像:[https://ubuntu.com/download/desktop](https://ubuntu.com/download/desktop) 909 | LTS 是 "Long Term Support" 的简写,意为“长期支持”。LTS 版本的操作系统会获得更长时间的支持和更新,通常是五年,这包括安全更新和软件包更新。 910 | ![](/images/Linux-images/linux.5.png) 911 | 912 | --- 913 | 914 | ## 4.创建虚拟机 915 | ### 4.1.打开VMware 916 | 有密钥可以输一下,没有就选第一个 917 | ![](/images/Linux-images/linux.61.png) 918 | ### 4.2.创建新的虚拟机 919 | ![](/images/Linux-images/linux.62.png) 920 | 下一步 921 | ![](/images/Linux-images/linux.63.png) 922 | 选择我们下载好的光盘映像文件,再点下一步 923 | ![](/images/Linux-images/linux.64.png) 924 | 填写信息 925 | ![](/images/Linux-images/linux.65.png) 926 | ![](/images/Linux-images/linux.66.png) 927 | 根据需要设置虚拟磁盘的大小 928 | ![](/images/Linux-images/linux.67.png) 929 | 取消这个创建后打开(因为我们还需要进行其它设置),再点击完成 930 | ![](/images/Linux-images/linux.68.png) 931 | ### 4.3.编辑虚拟机 932 | 内存,处理器,网路i适配器这些概念见上文(三.1基础知识介绍) 933 | 1.打开点击虚拟机设置 934 | ![](/images/Linux-images/linux.69.png) 935 | 2.可以修改内存 936 | ![](/images/Linux-images/linux.70.png) 937 | 3.可以修改处理器数量和每个处理器内核 938 | ![](/images/Linux-images/linux.71.png) 939 | 4.可以移除软盘和CD/DVD (SATA) 940 | 5.网络链接选择桥接模式 941 | ![](/images/Linux-images/linux.72.png) 942 | 6.确定 943 | 944 | --- 945 | 946 | ## 5.开启虚拟机 947 | 1.开机虚拟机 948 | ![](/images/Linux-images/linux.73.png) 949 | 2.不管什么界面,就是顺着安装走 950 | ![](/images/Linux-images/linux.74.png) 951 | 3.选择语言 952 | ![](/images/Linux-images/linux.75.png) 953 | 4.一路默认即可 954 | 5.这里默认擦除磁盘并安装Ubuntu即可 955 | ![](/images/Linux-images/linux.76.png) 956 | 6.设置信息 957 | ![](/images/Linux-images/linux.77.png) 958 | 7.选择时区 959 | ![](/images/Linux-images/linux.78.png) 960 | 8.安装 961 | ![](/images/Linux-images/linux.79.png) 962 | 9.安装完成后重启 963 | ![](/images/Linux-images/linux.80.png) 964 | 10.会让你回车进入 965 | ![](/images/Linux-images/linux.81.png) 966 | 11.可以调节一些分辨率吧 967 | 先点击显示设置 968 | ![](/images/Linux-images/linux.82.png) 969 | 我这里选择与我的电脑一样的分辨率 970 | ![](/images/Linux-images/linux.83.png) 971 | 972 | --- 973 | 974 | ## 6.设置镜像服务器 975 | 具体操作与(上文一.10.设置镜像服务器)一样,这里不再赘述 976 | ![](/images/Linux-images/linux.84.png) 977 | ![](/images/Linux-images/linux.85.png) 978 | 上面栏目的按键的作用,在把鼠标移上去后有解释 979 | ![](/images/Linux-images/linux.86.png) 980 | 981 | --- 982 | 983 | ## 7.查询ip和启动SSH服务 984 | ### 7.1.基础知识介绍 985 | #### SSH 986 | SSH 是一种网络协议,用于安全地访问和管理远程计算机。它通过加密的连接提供安全的命令行界面,允许用户远程执行命令、管理文件、以及进行安全的文件传输(如 SFTP)。 987 | SSH 可以同时支持这IPv4和IPv6协议 988 | #### IPv4 989 | IPv4(Internet Protocol version 4)是互联网上最广泛使用的网络协议之一,使用 32 位地址格式,提供大约 42 亿个地址。IPv4 地址通常以四个十进制数表示,如 192.168.1.1。 990 | 我们之后传输文件都会用到ip地址 991 | #### IPv6 992 | 这是 IPv4 的继任者,使用 128 位地址,提供几乎无限的地址空间,旨在解决 IPv4 地址枯竭的问题。IPv6 地址通常以八组十六进制数表示。 993 | ### 7.2.查询ip 994 | 我们这里演示使用ipv4地址 995 | 可以使用命令:**ifconfig** 996 | 一般需要先安装一下工具才能使用: 997 | **sudo apt install net-tools** 998 | 如果安装失败,可以换一下镜像服务器 999 | ![](/images/Linux-images/linux.95.png) 1000 | ### 7.3.启动SSH服务 1001 | 先安装openssh-server: 1002 | **sudo apt install openssh-server** 1003 | 然后开启SSH(每次使用SSH都需要用此命令打开服务): 1004 | **sudo systemctl start ssh** 1005 | 设置成开机自动启动(就成一直打开的状态了): 1006 | **sudo systemctl enable ssh** 1007 | 随后查看SSH服务状态: 1008 | **sudo systemctl status ssh** 1009 | 使用此命令后会进入分页器状态,按q退出 1010 | ![](/images/Linux-images/linux.96.png) 1011 | 1012 | --- 1013 | 1014 | ## 8.传输文件(VS Code) 1015 | 我们需要先下载插件,再配置环境 1016 | ### 8.1.Remote - SSH 插件 1017 | ![](/images/Linux-images/linux.97.png) 1018 | ### 8.2.主要功能 1019 | VS Code 的 Remote - SSH 插件允许你通过 SSH 远程连接到其他计算机,直接在 VS Code 中进行开发。这是一个非常强大的工具,适用于以下场景: 1020 | 1021 | 1. **远程开发**:你可以在本地计算机上使用 VS Code,但实际上是在远程服务器上运行代码。这对于服务器、云环境或容器的开发特别有用。 1022 | 1023 | 2. **无缝集成**:通过这个插件,你可以访问远程机器上的文件,使用终端和调试工具,几乎就像在本地开发一样。 1024 | 1025 | 3. **环境配置**:你可以在远程机器上安装所需的扩展和配置,VS Code 会自动同步这些设置。 1026 | 1027 | 4. **安全性**:通过 SSH 连接,数据传输是加密的,确保了安全性。 1028 | 1029 | 1030 | 使用方法: 1031 | 1032 | - 安装插件后,通过命令面板(Ctrl+Shift+P)选择“Remote-SSH: Connect to Host”,然后输入远程主机的 SSH 地址,进行连接。 1033 | 1034 | ### 8.3.配置文件 1035 | 打开命令面板,(F1,搜索栏输入一个>,Ctrl+Shift+P都行),输入命令: 1036 | **remote ssh: open ssh configuration file** 1037 | 选第一个 1038 | ![](/images/Linux-images/linux.98.png) 1039 | **Host填入我们虚拟机的别名 1040 | HostName填入我们虚拟机的ip地址 1041 | User填入我们虚拟机上连接到用户的用户名** 1042 | ![](/images/Linux-images/linux.99.png) 1043 | ### 8.4.连接虚拟机 1044 | 打开命令面板,使用命令: 1045 | **remote ssh : connect current windows to host** 1046 | 第一个当前窗口打开,第二个另外一个窗口打开 1047 | ![](/images/Linux-images/linux.100.png) 1048 | 1049 | ![](/images/Linux-images/linux.101.png) 1050 | 我们虚拟机的系统是Linux,后面再输个密码 1051 | ![](/images/Linux-images/linux.102.png) 1052 | 可以直接打开虚拟机上的文件,但需要输入密码 1053 | ![](/images/Linux-images/linux.103.png) 1054 | 我打开桌面文件创建了一个py程序 1055 | ![](/images/Linux-images/linux.104.png) 1056 | ![](/images/Linux-images/linux.105.png) 1057 | VS Code左侧会出现一个远程资源管理器 1058 | 因为权限问题,只会显示你打开的文件 1059 | 终端可以直接使用linux上的命令 1060 | 如果要复制文件,你打开需要复制到的文件夹,然后把需要复制的文件拖进去就行了 1061 | 总的来说,VS Code中使用SSH连接更偏向开发,而不是传输文件 1062 | ![](/images/Linux-images/linux.106.png) 1063 | 1064 | --- 1065 | 1066 | ## 9.传输文件(MabaXterm) 1067 | 下载网址:[https://mobaxterm.mobatek.net/download.html](https://mobaxterm.mobatek.net/download.html) 1068 | 下载免费版的即可 1069 | ![](/images/Linux-images/linux.107.png) 1070 | 可以看到常用的有两个版本,简单来说: 1071 | 第一个是便携版,无需安装就可直接运行 1072 | 第二个是安装版,需要安装,有更多功能 1073 | ![](/images/Linux-images/linux.108.png) 1074 | 我这里使用的是安装版,把下载的安装包解压后,点击msi文件安装 1075 | ![](/images/Linux-images/linux.109.png) 1076 | 点击Session(指一个与远程服务器或系统的连接会话) 1077 | ![](/images/Linux-images/linux.110.png) 1078 | 然后点击SSH,输入ip和用户名 1079 | ![](/images/Linux-images/linux.111.png) 1080 | 初次连接需要输入密码 1081 | ![](/images/Linux-images/linux.112.png) 1082 | 第一次用还需要设置一个主密码,在你进行特定操作时进行验证 1083 | ![](/images/Linux-images/linux.113.png) 1084 | 我们成功连接了,可以进行文件间的传输了,拖动或点击上传图标都可以 1085 | MobaXterm还有许多功能,需要自行探索 1086 | ![](/images/Linux-images/linux.114.png) 1087 | 1088 | --- 1089 | 1090 | ## 10.传输文件(WinSCP) 1091 | 下载网址:[https://winscp.net/eng/download.php](https://winscp.net/eng/download.php) 1092 | ![](/images/Linux-images/linux.115.png) 1093 | 打开进去,添加站点点新建标签页就会弹出这个页面 1094 | 主机名是我们虚拟机的ip地址,连接前确保虚拟机打开了SSH服务 1095 | ![](/images/Linux-images/linux.116.png) 1096 | 可以鼠标右键点击文件进行上传和下载,也可拖动进行 1097 | ![](/images/Linux-images/linux.117.png) 1098 | 1099 | --- 1100 | 1101 | # 四.使用Linux 1102 | 1103 | --- 1104 | 1105 | ## 1.关于Linux的一些网站 1106 | 有几个网站提供了详细的 Linux 命令及其介绍: 1107 | 1108 | 1. **Linux Command** ([https://linuxcommand.org/](https://linuxcommand.org/)) 1109 | 这个网站提供了大量的 Linux 命令及其用法,适合初学者和有经验的用户。 1110 | 1111 | 2. **SS64** [https://ss64.com/bash/](https://ss64.com/bash/) 1112 | 这个网站包含了 Bash 命令的完整列表,每个命令都有详细的说明和用法示例。 1113 | 1114 | 3. **TLDP** (The Linux Documentation Project) [https://tldp.org/](https://tldp.org/) 1115 | 提供各种文档和指南,包括 Linux 命令和系统管理的手册。 1116 | 1117 | 4. **Cheat Sheet** [https://www.cheat-sheets.org/](https://www.cheat-sheets.org/) 1118 | 这个网站提供了多个主题的备忘单,包括常用的 Linux 命令,方便快速查找。 1119 | 1120 | 5. **Die.net** [https://linux.die.net/](https://linux.die.net/) 1121 | 这是一个提供 Linux 命令及其手册页的网站,可以查找特定命令的详细信息。 1122 | 1123 | --- 1124 | 1125 | ## 2.Shell的简介 1126 | ### 终端与 Shell 的关系 1127 | 1128 | - **终端**: 这是一个用于输入和输出的界面,用户通过终端与操作系统交互。在现代 Linux 系统中,终端通常指的是图形界面的终端模拟器(如 GNOME Terminal、Konsole、xterm 等)或纯文本的控制台(TTY)。 1129 | 1130 | - **Shell**: 这是一个在终端中运行的程序,用户通过它输入命令并接收结果。常见的 Shell 包括 Bash、Zsh 和 Fish 等。 1131 | 1132 | ### Linux 命令 1133 | 1134 | - **Linux 命令**: 通常指的是可以在 Shell 中执行的命令。这些命令用于各种任务,如文件管理、系统监控和网络操作等。例如,**ls**、**cp**、**mv**、**grep** 等都是常见的 Linux 命令。 1135 | 1136 | - **Shell 命令**: 更准确地说,Linux 命令实际上是 Shell 命令,因为它们是在特定的 Shell 环境中执行的。因此,当人们提到“Linux 命令”时,通常是指 Shell 中可用的命令。 1137 | 1138 | ### 总结 1139 | 1140 | - **终端** 是与用户交互的界面。 1141 | - **Shell** 是终端中的命令解释器,执行用户输入的命令。 1142 | - **Linux 命令** 是在 Shell 中执行的命令。 1143 | 1144 | 所以,Linux 终端通常与 Shell 是密切相关的,Linux 命令指的就是在 Shell 中可以执行的命令。 1145 | 1146 | --- 1147 | 1148 | ## 3.Linux的常用快捷键 1149 | 在 Linux 中,尤其是在使用终端时,有许多快捷键可以提高效率。以下是一些常用的 Linux 快捷键及其功能: 1150 | ### 终端快捷键 1151 | 1152 | 1. **基本操作** 1153 | 1154 | - **Ctrl + C**: 终止当前运行的命令。 1155 | - **Ctrl + Z**: 将当前运行的命令暂停并放入后台。 1156 | - **fg**: 将最近放入后台的命令恢复到前台运行。 1157 | - **bg**: 将最近放入后台的命令在后台继续运行。 1158 | 1159 | 2. **命令行编辑** 1160 | 1161 | - **Ctrl + A**: 移动光标到命令行的开头。 1162 | - **Ctrl + E**: 移动光标到命令行的结尾。 1163 | - **Ctrl + U**: 删除光标前的所有文本。 1164 | - **Ctrl + K**: 删除光标后的所有文本。 1165 | - **Ctrl + W**: 删除光标前一个单词。 1166 | - **Ctrl + Y**: 粘贴之前删除的文本(来自 **Ctrl + U**、**Ctrl + K** 或 **Ctrl + W**)。 1167 | 1168 | 3. **命令历史** 1169 | 1170 | - **Ctrl + R**: 启动反向搜索命令历史,可以输入命令的一部分来查找。 1171 | - **Ctrl + N**: 向下浏览命令历史。 1172 | - **Ctrl + P**: 向上浏览命令历史。 1173 | - **!!**: 执行上一条命令。 1174 | 1175 | 4. **光标移动** 1176 | 1177 | - **左箭头** / **右箭头**: 在命令行中移动光标。 1178 | - **Ctrl + 左箭头** / **Ctrl + 右箭头**: 在命令行中按单词移动光标。 1179 | 1180 | ### 系统快捷键 1181 | 1182 | 1. **桌面环境快捷键(如 GNOME 或 KDE)** 1183 | 1184 | - **Alt + F2**: 打开运行对话框,可以输入命令直接运行。 1185 | - **Ctrl + Alt + T**: 打开新的终端窗口。 1186 | - **Super (Windows 键) + D**: 最小化所有窗口并显示桌面。 1187 | - **Alt + Tab**: 在打开的应用程序之间切换。 1188 | 1189 | 2. **文件管理器快捷键** 1190 | 1191 | - **Ctrl + N**: 打开新窗口。 1192 | - **Ctrl + Shift + N**: 创建新文件夹。 1193 | - **Delete**: 删除选中的文件或文件夹。 1194 | 1195 | ### 文本编辑器(如 Vim 或 Nano) 1196 | 1197 | - **Vim 快捷键** 1198 | 1199 | - **i**: 进入插入模式。 1200 | - **Esc**: 退出插入模式。 1201 | - **:w**: 保存文件。 1202 | - **:q**: 退出 Vim。 1203 | - **:wq**: 保存并退出。 1204 | - **Nano 快捷键** 1205 | 1206 | - **Ctrl + O**: 保存文件。 1207 | - **Ctrl + X**: 退出 Nano。 1208 | - **Ctrl + G**: 显示帮助。 1209 | 1210 | ### 其他常用快捷键 1211 | 1212 | - **Ctrl + Alt + F1** 到 **Ctrl + Alt + F6**: 切换到不同的 TTY(文本终端)。 1213 | - **Ctrl + Alt + F7**: 返回到图形界面。 1214 | 1215 | --- 1216 | 1217 | ## 4.Linux目录的简介 1218 | Linux 文件系统采用树状结构,所有文件和目录都从根目录(**/**)开始。以下是一些主要的 Linux 目录及其功能: 1219 | 1220 | ### 1. **/** (根目录) 1221 | 1222 | - 文件系统的顶层目录,所有其他目录都从这里开始。 1223 | 1224 | ### 2. **/bin** 1225 | 1226 | - 存放基本的用户命令和可执行文件,如 **ls**、**cp**、**mv**、**cat** 等。 1227 | 1228 | ### 3. **/sbin** 1229 | 1230 | - 存放系统管理命令和可执行文件,通常需要管理员权限才能执行,如 **shutdown**、**reboot**、**ifconfig** 等。 1231 | 1232 | ### 4. **/etc** 1233 | 1234 | - 存放系统配置文件。这里的文件通常是纯文本格式,可以编辑和修改系统设置。 1235 | 1236 | ### 5. **/dev** 1237 | 1238 | - 存放设备文件,包括所有的硬件设备,如硬盘、终端、打印机等。在 Linux 中,设备也被视为文件。 1239 | 1240 | ### 6. **/proc** 1241 | 1242 | - 虚拟文件系统,提供关于系统和进程的信息。文件是动态生成的,包含内存使用、CPU 状态等信息,如 **/proc/cpuinfo** 和 **/proc/meminfo**。 1243 | 1244 | ### 7. **/var** 1245 | 1246 | - 存放可变数据文件,如日志文件(在 **/var/log** 中)、邮件、缓存和临时文件等。 1247 | 1248 | ### 8. **/tmp** 1249 | 1250 | - 存放临时文件,通常在系统重启后会被清空。 1251 | 1252 | ### 9. **/usr** 1253 | 1254 | - 存放用户级别的程序和文件,通常包含以下子目录: 1255 | - **/usr/bin**: 存放大多数用户命令的可执行文件。 1256 | - **/usr/sbin**: 存放系统管理命令。 1257 | - **/usr/lib**: 存放库文件和共享库。 1258 | - **/usr/share**: 存放共享数据,如文档和图标。 1259 | 1260 | ### 10. **/home** 1261 | 1262 | - 每个用户的个人目录,用户的文件、配置和数据存储在这里。例如,用户 **user1** 的家目录通常是 **/home/user1**。 1263 | 1264 | ### 11. **/root** 1265 | 1266 | - 超级用户(root 用户)的家目录,通常是 **/root**。 1267 | 1268 | ### 12. **/media** 1269 | 1270 | - 挂载点,用于临时挂载可移动设备(如 USB 驱动器、CD-ROM 等)。 1271 | 1272 | ### 13. **/mnt** 1273 | 1274 | - 通常用于临时挂载文件系统的地方,管理员可以在这里手动挂载额外的设备。 1275 | 1276 | ### 14. **/opt** 1277 | 1278 | - 存放额外的、可选的应用程序和软件包,通常用于大型软件包或应用程序。 1279 | 1280 | ### 15. **/boot** 1281 | 1282 | - 存放启动加载程序和内核文件。这里的文件在系统启动时被使用。 1283 | 1284 | ### 总结 1285 | 1286 | Linux 目录结构清晰、层次分明,使得系统的管理和操作更为高效。理解这些目录及其功能是使用和管理 Linux 系统的重要基础。 1287 | 1288 | --- 1289 | 1290 | ## 5.Linux终端各种颜色的含义 1291 | 在 Linux 终端中,文件和目录的颜色编码提供了视觉上的帮助,帮助用户快速识别不同类型的文件和目录。颜色的具体表示可能因终端的配置而有所不同,但以下是常见的颜色及其代表的含义: 1292 | ### 常见颜色及其含义 1293 | 1294 | 1. **蓝色** 1295 | 1296 | - **目录**: 代表普通目录。 1297 | 1298 | 1. **绿色** 1299 | 1300 | - **可执行文件**: 代表可执行的程序或脚本。 1301 | 1302 | 1. **红色** 1303 | 1304 | - **压缩文件**: 代表压缩文件(如 **.zip**、**.tar.gz** 等)。 1305 | 1306 | 1. **紫色(洋红色)** 1307 | 1308 | - **图像文件**: 代表图像文件(如 **.jpg**、**.png** 等)。 1309 | 1310 | 1. **青色(青蓝色)** 1311 | 1312 | - **符号链接**: 代表指向其他文件或目录的符号链接。 1313 | 1314 | 1. **黄色** 1315 | 1316 | - **设备文件**: 代表设备文件,通常位于 **/dev** 目录下。 1317 | 1318 | 1. **白色** 1319 | 1320 | - **普通文件**: 代表普通文件。 1321 | 1322 | 1. **亮蓝色** 1323 | 1324 | - **目录(特殊目录)**: 可能用于标识系统的特殊目录。 1325 | 1326 | 1. **亮绿色** 1327 | 1328 | - **可执行文件(特别的)**: 可能用于标识系统的特殊可执行文件。 1329 | 1330 | 1331 | ### 颜色配置 1332 | 1333 | 终端中的颜色设置通常由环境变量 **LS_COLORS** 控制。你可以通过以下命令查看当前的颜色设置: 1334 | 1335 | **echo $LS_COLORS** 1336 | 1337 | 如果需要自定义颜色,你可以编辑 **~/.bashrc** 或 **~/.bash_profile** 文件,并设置 **LS_COLORS** 变量。 1338 | 1339 | 默认情况下,使用 **ls** 命令时,通常会带有 **--color** 选项,显示带颜色的文件和目录。示例如下: 1340 | 1341 | **ls --color=auto** 1342 | 1343 | 这将自动根据文件类型使用颜色。 1344 | 1345 | --- 1346 | 1347 | ## 6.Linux的一些辅助操作 1348 | ### Tab 键的作用 1349 | 1350 | 在 Linux 终端中,**Tab 键**主要用于自动补全功能,具体作用如下: 1351 | 1352 | 1. **命令补全**: 当你开始输入一个命令时,按下 Tab 键会自动补全命令。例如,输入 **ls** 后按 Tab,终端会尝试补全该命令。 1353 | 1354 | 2. **文件和目录补全**: 当输入文件或目录名时,按 Tab 键会自动补全输入。例如,输入 **cd Doc** 后按 Tab,如果当前目录下有名为 **Documents** 的目录,终端会自动补全为 **cd Documents**。 1355 | 1356 | 3. **显示可选项**: 如果有多个可能的补全选项,按下 Tab 键两次,终端会显示所有匹配的选项。例如,输入 **ls /u** 后按 Tab 两次,可能会显示 **/usr/** 和 **/var/** 等可选目录。 1357 | 1358 | 1359 | ### **man** 命令 1360 | 1361 | **man**(manual的缩写)命令用于查看系统中的手册页(man pages),提供关于命令、系统调用和库函数的详细说明。使用格式如下: 1362 | 1363 | **man [命令]** 1364 | 1365 | #### 示例: 1366 | 1367 | - 查看 **ls** 命令的手册: 1368 | 1369 | **man ls** 1370 | 1371 | - 查看 **man** 命令本身的手册: 1372 | 1373 | **man man** 1374 | 1375 | #### 手册页的简介 1376 | 在 Linux 的 **man** 命令查看手册页时,有几个基本的键盘操作可以用来翻页、滚动和退出。以下是常用的操作键: 1377 | 1378 | **翻页和滚动:** 1379 | 1380 | - **空格键 (Space)**: 向下翻一页。 1381 | - **Enter**: 向下滚动一行。 1382 | - **上箭头**: 向上滚动一行。 1383 | - **下箭头**: 向下滚动一行。 1384 | - **Ctrl + B**: 向上翻一页(Back)。 1385 | - **Ctrl + F**: 向下翻一页(Forward)。 1386 | - **Ctrl + U**: 向上滚动半页(Up)。 1387 | - **Ctrl + D**: 向下滚动半页(Down)。 1388 | 1389 | **搜索:** 1390 | 1391 | - **/**: 启动向前搜索,可以输入你要搜索的关键词并按 Enter。 1392 | - **?**: 启动向后搜索,同样输入关键词并按 Enter。 1393 | - **n**: 跳转到下一个搜索结果。 1394 | - **N**: 跳转到上一个搜索结果。 1395 | 1396 | **退出:** 1397 | 1398 | - **q**: 退出手册页。 1399 | 1400 | **其他操作:** 1401 | 1402 | - **h**: 显示帮助信息,提供常用的命令和快捷键的总结。 1403 | 1404 | #### 手册页结构 1405 | 1406 | 手册页通常分为多个部分,包括: 1407 | 1408 | - **NAME**: 命令的名称和简短描述。 1409 | - **SYNOPSIS**: 命令的使用语法。 1410 | - **DESCRIPTION**: 命令的详细描述和选项。 1411 | - **EXAMPLES**: 使用命令的示例(并非所有手册都有)。 1412 | - **SEE ALSO**: 相关命令或手册的参考。 1413 | 1414 | #### 常用选项 1415 | 1416 | - **man -k [关键词]**: 根据关键词搜索手册页。 1417 | - **man -f [命令]**: 显示命令的简短描述。 1418 | ### **whatis** 命令 1419 | 1420 | **whatis** 命令用于显示指定命令或主题的简短描述。它通常用来快速了解某个命令的功能。使用格式如下: 1421 | 1422 | **whatis [命令]** 1423 | 1424 | #### 示例: 1425 | 1426 | - 查询 **ls** 命令的简短描述: 1427 | 1428 | **whatis ls** 1429 | 1430 | - 查询 **grep** 命令的简短描述: 1431 | 1432 | **whatis grep** 1433 | 1434 | 1435 | #### 注意事项 1436 | 1437 | - **whatis** 命令依赖于 man 数据库,通常在系统更新后需要更新手册数据库,可以通过以下命令更新: 1438 | 1439 | **mandb** 1440 | 1441 | ### 总结 1442 | 1443 | - **Tab 键**: 在 Linux 终端中用于命令和文件的自动补全。 1444 | - **man** 命令**: 用于查看详细的命令手册。 1445 | - **whatis** 命令**: 用于快速查看命令的简短描述。 1446 | 1447 | 这些工具和功能可以大大提高在 Linux 系统中工作和操作的效率。 1448 | 1449 | --- 1450 | 1451 | ## 7.Linux常用命令 1452 | 以下是按使用频率排序的常用 Linux 命令,并简要介绍了它们的功能: 1453 | ### 1. ls (List) 1454 | 1455 | - **功能**:列出当前目录下的文件和文件夹。 1456 | - **示例**:**ls -l** 显示详细的文件信息(权限、大小、日期等)。 1457 | 1458 | ### 2. cd (Change Directory) 1459 | 1460 | - **功能**:用于在文件系统中更改当前目录。 1461 | - **示例**:**cd /home/user** 切换到用户的主目录。 1462 | 1463 | ### 3. pwd (Print Working Directory) 1464 | 1465 | - **功能**:显示当前所在的工作目录。 1466 | - **示例**:**pwd** 返回当前路径,比如 **/home/user**。 1467 | 1468 | ### 4. mkdir (Make Directory) 1469 | 1470 | - **功能**:创建新的文件夹。 1471 | - **示例**:**mkdir new_folder** 创建名为 **new_folder** 的目录。 1472 | 1473 | ### 5. rm (Remove) 1474 | 1475 | - **功能**:删除文件或目录。 1476 | - **示例**:**rm file.txt** 删除文件,**rm -r folder** 递归删除文件夹及其内容。 1477 | 1478 | ### 6. cp (Copy) 1479 | 1480 | - **功能**:复制文件或目录。 1481 | - **示例**:**cp file.txt /home/user/** 将 **file.txt** 复制到 **/home/user/** 目录。 1482 | 1483 | ### 7. mv (Move) 1484 | 1485 | - **功能**:移动或重命名文件。 1486 | - **示例**:**mv file.txt /home/user/** 移动文件,或 **mv old_name.txt new_name.txt** 重命名文件。 1487 | 1488 | ### 8. cat (Concatenate) 1489 | 1490 | - **功能**:查看文件内容,或将多个文件合并输出。 1491 | - **示例**:**cat file.txt** 显示文件内容。 1492 | 1493 | ### 9. touch 1494 | 1495 | - **功能**:创建空文件或更新现有文件的时间戳。 1496 | - **示例**:**touch newfile.txt** 创建空文件 **newfile.txt**。 1497 | 1498 | ### 10. chmod (Change Mode) 1499 | 1500 | - **功能**:更改文件或目录的权限。 1501 | - **示例**:**chmod 755 script.sh** 设置 **script.sh** 为可执行权限。 1502 | 1503 | ### 11. chown (Change Owner) 1504 | 1505 | - **功能**:更改文件或目录的所有者。 1506 | - **示例**:**chown user:group file.txt** 更改文件的所有者和组。 1507 | 1508 | ### 12. find 1509 | 1510 | - **功能**:在文件系统中搜索文件或目录。 1511 | - **示例**:**find /home -name "file.txt"** 在 **/home** 目录下查找 **file.txt** 文件。 1512 | 1513 | ### 13. grep 1514 | 1515 | - **功能**:从文件中搜索匹配的文本。 1516 | - **示例**:**grep "keyword" file.txt** 在 **file.txt** 中搜索包含 "keyword" 的行。 1517 | 1518 | ### 14. echo 1519 | 1520 | - **功能**:输出文本或变量的值。 1521 | - **示例**:**echo "Hello, World!"** 输出文本,**echo $PATH** 显示环境变量 **PATH**。 1522 | 1523 | ### 15. df (Disk Free) 1524 | 1525 | - **功能**:显示文件系统的磁盘使用情况。 1526 | - **示例**:**df -h** 以人类可读的格式显示磁盘使用情况。 1527 | 1528 | ### 16. du (Disk Usage) 1529 | 1530 | - **功能**:查看文件或目录占用的磁盘空间。 1531 | - **示例**:**du -sh /home/user/** 查看用户目录的大小。 1532 | 1533 | ### 17. ps (Process Status) 1534 | 1535 | - **功能**:显示当前系统运行的进程。 1536 | - **示例**:**ps aux** 列出所有进程的详细信息。 1537 | 1538 | ### 18. top 1539 | 1540 | - **功能**:实时显示系统进程和资源使用情况。 1541 | - **示例**:**top** 显示 CPU、内存使用等进程状态。 1542 | 1543 | ### 19. kill 1544 | 1545 | - **功能**:结束进程。 1546 | - **示例**:**kill 1234** 结束进程号为 **1234** 的进程,**kill -9 1234** 强制结束。 1547 | 1548 | ### 20. nano / vim / vi 1549 | 1550 | - **功能**:文本编辑器,**nano** 是易用的命令行文本编辑器,**vim** 和 **vi** 功能更强大,适合高级用户。 1551 | - **示例**:**nano file.txt** 或 **vim file.txt** 编辑文件。 1552 | 1553 | ### 21. sudo (Superuser Do) 1554 | 1555 | - **功能**:以超级用户权限执行命令。 1556 | - **示例**:**sudo apt update** 更新软件包信息。 1557 | 1558 | ### 22. apt / yum / dnf 1559 | 1560 | - **功能**:包管理器,用于安装、更新、删除软件包。**apt** 用于基于 Debian 的系统(如 Ubuntu),**yum** 和 **dnf** 用于基于 RedHat 的系统。 1561 | - **示例**:**sudo apt install package** 安装软件包。 1562 | 1563 | ### 23. wget 1564 | 1565 | - **功能**:从网络下载文件。 1566 | - **示例**:**wget http://example.com/file.zip** 下载文件。 1567 | 1568 | ### 24. curl 1569 | 1570 | - **功能**:传输数据,支持多种协议(HTTP、FTP等),通常用于 API 调用或文件下载。 1571 | - **示例**:**curl https://api.example.com** 发送 GET 请求。 1572 | 1573 | ### 25. tar 1574 | 1575 | - **功能**:用于压缩和解压缩文件。 1576 | - **示例**:**tar -czvf archive.tar.gz /path/to/directory** 压缩目录,**tar -xvzf archive.tar.gz** 解压缩。 1577 | 1578 | ### 26. zip/unzip 1579 | 1580 | - **功能**:压缩和解压缩 ZIP 文件。 1581 | - **示例**:**zip -r archive.zip folder** 压缩目录,**unzip archive.zip** 解压缩文件。 1582 | 1583 | ### 27. ssh (Secure Shell) 1584 | 1585 | - **功能**:远程登录到另一台 Linux 服务器。 1586 | - **示例**:**ssh user@hostname** 通过 SSH 登录远程服务器。 1587 | 1588 | ### 28. scp (Secure Copy) 1589 | 1590 | - **功能**:通过 SSH 进行安全的文件传输。 1591 | - **示例**:**scp file.txt user@remote:/path/to/destination** 将文件传输到远程服务器。 1592 | 1593 | ### 29. history 1594 | 1595 | - **功能**:显示用户输入过的命令历史记录。 1596 | - **示例**:**history** 列出最近的命令,**!123** 执行历史记录中第 123 个命令。 1597 | 1598 | ### 30. reboot / *shutdown 1599 | 1600 | - **功能**:重新启动或关闭系统。 1601 | - **示例**:**sudo reboot** 重新启动系统,**sudo shutdown -h now** 立即关闭系统。 1602 | 1603 | ### 31. alias 1604 | 1605 | - **功能**:为命令创建别名。 1606 | - **示例**:**alias ll='ls -l'** 将 **ll** 设置为 **ls -l** 的别名。 1607 | 1608 | ### 32. unalias 1609 | 1610 | - **功能**:删除命令别名。 1611 | - **示例**:**unalias ll** 删除 **ll** 的别名。 1612 | 1613 | ### 33. awk 1614 | 1615 | - **功能**:一个强大的文本处理工具,用于模式匹配和文本过滤。 1616 | - **示例**:**awk '{print $1}' file.txt** 输出每行的第一个字段。 1617 | 1618 | ### 34. sed (Stream Editor) 1619 | 1620 | - **功能**:用于对文件内容进行文本替换、删除等操作。 1621 | - **示例**:**sed 's/old/new/g' file.txt** 将文件中所有的 "old" 替换为 "new"。 1622 | 1623 | ### 35. head 1624 | 1625 | - **功能**:显示文件的前几行。 1626 | - **示例**:**head -n 10 file.txt** 显示文件的前 10 行。 1627 | 1628 | ### 36. tail 1629 | 1630 | - **功能**:显示文件的最后几行。 1631 | - **示例**:**tail -n 10 file.txt** 显示文件的最后 10 行,**tail -f file.txt** 实时监视文件更新。 1632 | 1633 | ### 37. sort 1634 | 1635 | - **功能**:对文件内容进行排序。 1636 | - **示例**:**sort file.txt** 对文件的行进行排序。 1637 | 1638 | ### 38. uniq 1639 | 1640 | - **功能**:删除文件中的重复行。 1641 | - **示例**:**uniq file.txt** 去除重复的行。 1642 | 1643 | ### 39. wc (Word Count) 1644 | 1645 | - **功能**:计算文件中的行数、单词数、字符数。 1646 | - **示例**:**wc file.txt** 输出文件的行数、单词数和字符数。 1647 | 1648 | ### 40. basename 1649 | 1650 | - **功能**:获取路径中去掉目录部分的文件名。 1651 | - **示例**:**basename /home/user/file.txt** 输出 **file.txt**。 1652 | 1653 | ### 41. dirname 1654 | 1655 | - **功能**:获取文件的目录路径。 1656 | - **示例**:**dirname /home/user/file.txt** 输出 **/home/user**。 1657 | 1658 | ### 42. diff 1659 | 1660 | - **功能**:比较两个文件的不同。 1661 | - **示例**:**diff file1.txt file2.txt** 显示两个文件之间的差异。 1662 | 1663 | ### 43. ln 1664 | 1665 | - **功能**:创建文件或目录的符号链接或硬链接。 1666 | - **示例**:**ln -s file.txt link_to_file.txt** 创建一个符号链接。 1667 | 1668 | ### 44. locate 1669 | 1670 | - **功能**:快速查找文件。 1671 | - **示例**:**locate file.txt** 查找系统中所有名为 **file.txt** 的文件。 1672 | 1673 | ### 45. updatedb 1674 | 1675 | - **功能**:更新 **locate** 命令使用的数据库。 1676 | - **示例**:**sudo updatedb** 更新文件索引。 1677 | 1678 | ### 46. mount 1679 | 1680 | - **功能**:挂载文件系统到指定目录。 1681 | - **示例**:**sudo mount /dev/sdb1 /mnt** 将 **/dev/sdb1** 分区挂载到 **/mnt** 目录。 1682 | 1683 | ### 47. umount 1684 | 1685 | - **功能**:卸载文件系统。 1686 | - **示例**:**sudo umount /mnt** 卸载挂载的文件系统。 1687 | 1688 | ### 48. dd 1689 | 1690 | - **功能**:用于低级别复制和转换文件或设备数据,通常用于创建磁盘映像。 1691 | - **示例**:**dd if=/dev/sda of=/dev/sdb** 复制磁盘。 1692 | 1693 | ### 49. fdisk 1694 | 1695 | - **功能**:用于查看和管理磁盘分区表。 1696 | - **示例**:**sudo fdisk -l** 列出所有分区信息。 1697 | 1698 | ### 50. df (Disk Free) 1699 | 1700 | - **功能**:显示文件系统的磁盘空间使用情况。 1701 | - **示例**:**df -h** 以人类可读的格式显示磁盘使用情况。 1702 | 1703 | ### 51. du 1704 | 1705 | - **功能**:查看文件或目录占用的磁盘空间。 1706 | - **示例**:**du -sh /home/user/** 查看用户目录的大小。 1707 | 1708 | ### 52. nc (Netcat) 1709 | 1710 | - **功能**:网络工具,用于调试和通信。 1711 | - **示例**:**nc -l 12345** 启动监听端口 12345。 1712 | 1713 | ### 53. ifconfig 1714 | 1715 | - **功能**:配置或显示网络接口。 1716 | - **示例**:**ifconfig** 显示网络接口信息。 1717 | 1718 | ### 54. ip 1719 | 1720 | - **功能**:更现代的网络接口管理工具,替代 **ifconfig**。 1721 | - **示例**:**ip addr** 显示网络接口及 IP 地址。 1722 | 1723 | ### 55. ping 1724 | 1725 | - **功能**:用于测试网络连接和延迟。 1726 | - **示例**:**ping google.com** 测试到 Google 的网络连接。 1727 | 1728 | ### 56. traceroute 1729 | 1730 | - **功能**:追踪数据包从源到目的地经过的路径。 1731 | - **示例**:**traceroute google.com** 查看数据包的传输路径。 1732 | 1733 | ### 57. netstat 1734 | 1735 | - **功能**:显示网络连接、路由表和接口统计信息。 1736 | - **示例**:**netstat -an** 显示所有网络连接。 1737 | 1738 | ### 58. ss 1739 | 1740 | - **功能**:类似于 **netstat**,用于显示网络连接。 1741 | - **示例**:**ss -tuln** 显示监听的套接字。 1742 | 1743 | ### 59. uptime 1744 | 1745 | - **功能**:显示系统已运行的时间、当前时间和负载。 1746 | - **示例**:**uptime** 显示系统运行时长。 1747 | 1748 | ### 60. htop 1749 | 1750 | - **功能**:一个增强版的 **top**,用于实时查看系统资源使用情况。 1751 | - **示例**:**htop** 启动 htop 监控工具。 1752 | 1753 | ### 61. dmesg 1754 | 1755 | - **功能**:显示内核环缓冲区的消息,通常用于调试系统问题。 1756 | - **示例**:**dmesg** 查看启动日志。 1757 | 1758 | ### 62. journalctl 1759 | 1760 | - **功能**:查看和过滤系统日志。 1761 | - **示例**:**journalctl -xe** 查看系统日志中最新的错误。 1762 | 1763 | ### 63. who 1764 | 1765 | - **功能**:显示当前登录到系统的用户。 1766 | - **示例**:**who** 列出当前在线用户。 1767 | 1768 | ### 64. w 1769 | 1770 | - **功能**:显示当前登录用户及其活动。 1771 | - **示例**:**w** 列出用户的登录时间和活动。 1772 | 1773 | ### 65. useradd 1774 | 1775 | - **功能**:添加新用户。 1776 | - **示例**:**sudo useradd username** 添加新用户。 1777 | 1778 | ### 66. usermod 1779 | 1780 | - **功能**:修改用户帐户信息。 1781 | - **示例**:**sudo usermod -aG sudo username** 将用户添加到 sudo 组。 1782 | 1783 | ### 67. userdel 1784 | 1785 | - **功能**:删除用户。 1786 | - **示例**:**sudo userdel username** 删除用户帐户。 1787 | 1788 | ### 68. passwd 1789 | 1790 | - **功能**:更改用户密码。 1791 | - **示例**:**passwd username** 为 **username** 更改密码。 1792 | 1793 | ### 69. groupadd 1794 | 1795 | - **功能**:创建新用户组。 1796 | - **示例**:**sudo groupadd groupname** 创建新组。 1797 | 1798 | ### 70. groups 1799 | 1800 | - **功能**:显示用户所属的组。 1801 | - **示例**:**groups username** 查看用户所属的组。 1802 | 1803 | ### 71. tar 1804 | 1805 | - **功能**:用于打包和解压缩文件。 1806 | - **示例**:**tar -czvf archive.tar.gz folder/** 压缩目录。 1807 | 1808 | ### 72. gzip 1809 | 1810 | - **功能**:压缩文件。 1811 | - **示例**:**gzip file.txt** 将文件压缩为 **file.txt.gz**。 1812 | 1813 | ### 73. gunzip 1814 | 1815 | - **功能**:解压缩 gzip 文件。 1816 | - **示例**:**gunzip file.txt.gz** 解压缩文件。 1817 | 1818 | ### 74. bzip2 1819 | 1820 | - **功能**:使用 bzip2 压缩文件。 1821 | - **示例**:**bzip2 file.txt** 将文件压缩为 **fileHere is the continuation of 70 additional Linux commands, completing the list: 1822 | 1823 | ### 74. bzip2 1824 | 1825 | - **功能**:使用 bzip2 压缩文件。 1826 | - **示例**:**bzip2 file.txt** 将文件压缩为 **file.txt.bz2**。 1827 | 1828 | ### 75. bunzip2 1829 | 1830 | - **功能**:解压缩 bzip2 文件。 1831 | - **示例**:**bunzip2 file.txt.bz2** 解压缩文件。 1832 | 1833 | ### 76. xargs 1834 | 1835 | - **功能**:将标准输入的输出作为命令的参数。 1836 | - **示例**:**cat files.txt | xargs rm** 删除列表中的文件。 1837 | 1838 | ### 77. find 1839 | 1840 | - **功能**:查找文件或目录。 1841 | - **示例**:**find /home -name "file.txt"** 在 **/home** 目录下查找名为 **file.txt** 的文件。 1842 | 1843 | ### 78. locate 1844 | 1845 | - **功能**:基于数据库快速查找文件。 1846 | - **示例**:**locate file.txt** 查找文件。 1847 | 1848 | ### 79. chown 1849 | 1850 | - **功能**:更改文件的所有者。 1851 | - **示例**:**sudo chown user:group file.txt** 更改文件的所有者为 **user**,组为 **group**。 1852 | 1853 | ### 80. chgrp 1854 | 1855 | - **功能**:更改文件的组。 1856 | - **示例**:**sudo chgrp groupname file.txt** 将文件的组更改为 **groupname**。 1857 | 1858 | ### 81. chmod 1859 | 1860 | - **功能**:更改文件权限。 1861 | - **示例**:**chmod 755 file.txt** 设置文件权限为所有者可读写执行,组和其他人可读执行。 1862 | 1863 | ### 82. umask 1864 | 1865 | - **功能**:设置文件创建时的默认权限掩码。 1866 | - **示例**:**umask 022** 创建文件的默认权限为 755。 1867 | 1868 | ### 83. scp 1869 | 1870 | - **功能**:通过 SSH 安全地复制文件。 1871 | - **示例**:**scp file.txt user@server:/path** 将文件复制到远程服务器。 1872 | 1873 | ### 84. rsync 1874 | 1875 | - **功能**:高效地同步文件和目录。 1876 | - **示例**:**rsync -avz /source/ /destination/** 同步源目录到目标目录。 1877 | 1878 | ### 85. ssh 1879 | 1880 | - **功能**:通过 SSH 连接到远程服务器。 1881 | - **示例**:**ssh user@server** 连接到远程服务器。 1882 | 1883 | ### 86. wget 1884 | 1885 | - **功能**:从网络下载文件。 1886 | - **示例**:**wget http://example.com/file.txt** 下载文件。 1887 | 1888 | ### 87. curl 1889 | 1890 | - **功能**:从网络传输数据,支持多种协议。 1891 | - **示例**:**curl http://example.com** 从网页获取内容。 1892 | 1893 | ### 88. uptime 1894 | 1895 | - **功能**:显示系统已运行时间和负载。 1896 | - **示例**:**uptime** 显示系统正常运行的时间。 1897 | 1898 | ### 89. free 1899 | 1900 | - **功能**:显示系统内存的使用情况。 1901 | - **示例**:**free -h** 以人类可读格式显示内存使用。 1902 | 1903 | ### 90. vmstat 1904 | 1905 | - **功能**:显示系统的虚拟内存统计。 1906 | - **示例**:**vmstat** 实时监控系统性能。 1907 | 1908 | ### 91. lsof 1909 | 1910 | - **功能**:显示当前打开的文件。 1911 | - **示例**:**lsof | grep filename** 查看哪些进程打开了特定文件。 1912 | 1913 | ### 92. top 1914 | 1915 | - **功能**:实时显示系统进程的运行情况。 1916 | - **示例**:**top** 显示进程及资源使用情况。 1917 | 1918 | ### 93. kill 1919 | 1920 | - **功能**:终止指定进程。 1921 | - **示例**:**kill -9 PID** 强制终止进程。 1922 | 1923 | ### 94. pkill 1924 | 1925 | - **功能**:根据进程名终止进程。 1926 | - **示例**:**pkill firefox** 关闭所有 Firefox 进程。 1927 | 1928 | ### 95. killall 1929 | 1930 | - **功能**:终止所有匹配的进程。 1931 | - **示例**:**killall apache2** 终止所有 **apache2** 进程。 1932 | 1933 | ### 96. cron 1934 | 1935 | - **功能**:用于定时执行任务的守护进程。 1936 | - **示例**:**crontab -e** 编辑定时任务。 1937 | 1938 | ### 97. at 1939 | 1940 | - **功能**:用于计划在特定时间运行一次性任务。 1941 | - **示例**:**echo "sh backup.sh" | at 2pm** 计划在下午 2 点运行备份脚本。 1942 | 1943 | ### 98. batch 1944 | 1945 | - **功能**:在系统负载较低时运行批处理任务。 1946 | - **示例**:**echo "tar -czf backup.tar.gz /data" | batch** 任务将在系统负载较低时执行。 1947 | 1948 | ### 99. hostname 1949 | 1950 | - **功能**:显示或设置系统的主机名。 1951 | - **示例**:**hostname** 显示当前主机名。 1952 | 1953 | ### 100. whoami 1954 | 1955 | - **功能**:显示当前登录用户的用户名。 1956 | - **示例**:**whoami** 输出当前用户名称。 1957 | 1958 | ### 101. uptime 1959 | 1960 | - **功能**:显示系统启动时间及负载。 1961 | - **示例**:**uptime** 显示系统运行时长。 1962 | 1963 | ### 102. dstat 1964 | 1965 | - **功能**:实时显示系统的资源使用情况。 1966 | - **示例**:**dstat** 实时监控 CPU、内存和网络使用。 1967 | 1968 | ### 103. passwd 1969 | 1970 | - **功能**:更改用户密码。 1971 | - **示例**:**passwd** 为当前用户更改密码。 1972 | 1973 | ### 104. groupadd 1974 | 1975 | - **功能**:创建一个新的用户组。 1976 | - **示例**:**sudo groupadd developers** 创建一个名为 **developers** 的用户组。 1977 | 1978 | ### 105.useradd 1979 | 1980 | - **功能**:创建一个新用户。 1981 | - **示例**:**sudo useradd username** 创建新用户。 1982 | 1983 | ### 106. usermod 1984 | 1985 | - **功能**:修改现有用户的属性。 1986 | - **示例**:**sudo usermod -aG groupname username** 将用户添加到一个组中。 1987 | 1988 | ### 107. deluser 1989 | 1990 | - **功能**:删除用户。 1991 | - **示例**:**sudo deluser username** 删除用户账户。 1992 | 1993 | ### 108. modprobe 1994 | 1995 | - **功能**:加载或移除内核模块。 1996 | - **示例**:**sudo modprobe module_name** 加载内核模块。 1997 | 1998 | ### 109. lsmod 1999 | 2000 | - **功能**:列出已加载的内核模块。 2001 | - **示例**:**lsmod** 显示当前加载的内核模块。 2002 | 2003 | ### 110. rmmod 2004 | 2005 | - **功能**:卸载内核模块。 2006 | - **示例**:**sudo rmmod module_name** 卸载指定的内核模块。 2007 | 2008 | ### 111. depmod 2009 | 2010 | - **功能**:生成模块依赖信息。 2011 | - **示例**:**sudo depmod** 生成模块依赖信息文件。 2012 | 2013 | ### 112. iwconfig 2014 | 2015 | - **功能**:配置无线网络接口。 2016 | - **示例**:**iwconfig wlan0 essid "network_name"** 配置无线网络。 2017 | 2018 | ### 113. ifup 2019 | 2020 | - **功能**:启动网络接口。 2021 | - **示例**:**sudo ifup eth0** 启动以太网接口。 2022 | 2023 | ### 114. ifdown 2024 | 2025 | - **功能**:关闭网络接口。 2026 | - **示例**:**sudo ifdown eth0** 关闭以太网接口。 2027 | 2028 | ### 115. dhclient 2029 | 2030 | - **功能**:获取或释放 DHCP 分配的 IP 地址。 2031 | - **示例**:**sudo dhclient eth0** 获取新的 IP 地址。 2032 | 2033 | ### 116. host 2034 | 2035 | - **功能**:DNS 查找工具,用于解析域名到 IP。 2036 | - **示例**:**host google.com** 获取 Google 的 IP 地址。 2037 | 2038 | ### 117. dig 2039 | 2040 | - **功能**:更高级的 DNS 查找工具。 2041 | - **示例**:**dig example.com** 查询 DNS 信息。 2042 | 2043 | ### 118. nslookup 2044 | 2045 | - **功能**:查询域名或 IP 地址的 DNS 记录。 2046 | - **示例**:**nslookup google.com** 查询 DNS 记录。 -------------------------------------------------------------------------------- /members/水镜/编程入门笔记/VS Code使用教程.md: -------------------------------------------------------------------------------- 1 | # **简介** 2 | 本文主要内容: 3 | 1.介绍VS Code的概念 4 | 2.详细演示VS Code对一些编程语言的环境配置: 5 | - C/C++ 6 | - Python 7 | - HTML+CSS+JS 8 | 9 | 3.介绍一些方便的快捷操作 10 | VS Code官网:[https://code.visualstudio.com/](https://code.visualstudio.com/) 11 | (官网的文档中有对该软件使用的全面介绍) 12 | 13 | --- 14 | 15 | # **一.VS Code的概述** 16 | 17 | --- 18 | 19 | Visual Studio Code (VS Code) 是由微软开发的一个免费、开源、跨平台的源代码编辑器,支持Windows、macOS 和 Linux 系统。它以轻量级、速度快、功能强大著称,特别适合现代编程工作流。VS Code 的主要特点包括: 20 | 21 | 1. **多语言支持** 22 | VS Code 支持多种编程语言,包括但不限于:JavaScript、Python、C++、Java、Go、HTML/CSS、TypeScript 等。借助扩展,几乎可以支持任何编程语言。 23 | 24 | 2. **丰富的扩展功能** 25 | VS Code 有一个庞大的扩展市场,用户可以安装各种插件来增强编辑器的功能,例如调试工具、代码片段、代码格式化、版本控制支持等。这些插件使得 VS Code 可以适应各种开发需求。你可以使用这些扩展来定制和优化你的开发环境。 26 | 27 | 3. **集成的终端** 28 | VS Code 提供了一个集成终端,允许你直接在编辑器中运行命令行程序,无需切换窗口。这非常适合开发者进行实时编译、运行、调试程序。 29 | 30 | 4. **调试功能** 31 | VS Code 提供了强大的调试工具,可以轻松设置断点、监控变量、调试前端和后端应用程序。你可以通过配置文件来调试Node.js、Python、C++等多种语言的项目。 32 | 33 | 5. **Git 和版本控制** 34 | VS Code 内置了 Git 支持,可以让你在图形化界面中执行大部分 Git 操作,比如提交、合并分支、查看历史记录等。这对版本管理非常方便,适合与 GitHub 等平台结合使用。 35 | 36 | 6. **智能代码补全** 37 | VS Code 采用了 IntelliSense 技术,能够智能地补全代码,提供语法建议、函数提示、自动导入库等功能,极大提高了编码效率。 38 | 39 | 7. **多平台支持** 40 | VS Code 可以在 Windows、macOS 和 Linux 上运行,开发者可以在任何操作系统上享受一致的开发体验。此外,它还支持远程开发,通过 SSH 或 Docker 直接在远程服务器上编写、调试代码。 41 | 42 | 8. **轻量且高度可定制** 43 | VS Code 虽然功能强大,但仍然保持了轻量的特性。用户可以根据需求定制界面、快捷键、主题等,来创造个性化的开发环境。 44 | 45 | 9. **社区支持和文档** 46 | VS Code 拥有一个活跃的开发者社区,用户可以通过论坛、文档、教程、示例代码等方式获取支持和帮助。 47 | 48 | **总结** 49 | VS Code 是一个功能强大且高度可定制的编辑器,适用于从前端开发、后端开发到数据科学等各种编程领域。它凭借简洁的界面和强大的扩展性成为了现代开发者的首选工具之一。 50 | 51 | --- 52 | 53 | # **二.下载** 54 | 55 | --- 56 | 57 | ## 1.下载VS Code 58 | 网址:[https://code.visualstudio.com/](https://code.visualstudio.com/) 59 | ![](/images/vscode-images/vscode.1.png) 60 | 61 | --- 62 | 63 | # **三.配置中文环境** 64 | 65 | --- 66 | 67 | ## 1.打开扩展 68 | ![](/images/vscode-images/vscode.2.png) 69 | 70 | ## 2.安装中文包 71 | 72 | ### 2.1.在搜索栏中搜索Chinese 73 | ### 2.2.选择简体中文安装 74 | ### 2.3.重启 75 | ![](/images/vscode-images/vscode.3.png) 76 | 77 | --- 78 | 79 | # **四.根据所需语言配置环境(C/C++)** 80 | 81 | --- 82 | 83 | **不需要此语言请跳过** 84 | ## 1.安装插件 85 | ### 1.1.C/C++ 插件 86 | 87 | - **用途**:这是由微软官方提供的插件,主要用于在 VSCode 上开发和调试 C/C++ 代码。它提供了丰富的功能来增强 C/C++ 开发的体验。 88 | - **功能**: 89 | - 代码自动补全:帮助你快速编写代码,并提示函数、变量和类型。 90 | - 语法高亮:为 C/C++ 代码提供清晰的语法高亮显示。 91 | - 调试支持:通过 VSCode 内置的调试功能,可以使用 GDB、LLDB 或 Visual Studio 调试器来调试 C/C++ 程序。 92 | - IntelliSense:通过提供自动补全、悬停信息和参数提示等功能,提高代码编写的效率。 93 | - 多平台支持:该插件支持在 Windows、Linux 和 macOS 平台上工作。 94 | 95 | ![](/images/vscode-images/vscode.4.png) 96 | 97 | --- 98 | 99 | ### 1.2.C/C++ Compile Run 插件 100 | 101 | - **用途**:该插件简化了在 VSCode 上编译和运行 C/C++ 程序的过程,特别适合需要快速测试代码的开发者。 102 | - **功能**: 103 | - 一键编译和运行:你只需按一个快捷键(通常是 F6),就可以编译并立即运行代码,而不必手动编写终端命令。 104 | - 灵活的配置:你可以通过配置文件自定义编译和运行命令。 105 | - 适合小型项目:这个插件更适合快速测试小型 C/C++ 项目,因为它不提供完整的调试功能。 106 | 107 | ![](/images/vscode-images/vscode.5.png) 108 | 109 | --- 110 | 111 | ### 1.3.Better C++ Syntax 插件 112 | 113 | - **用途**:这个插件专注于改进 C++ 代码的语法高亮显示和格式化,提供比默认的 C++ 高亮显示更丰富的特性。 114 | - **功能**: 115 | - 改进的语法高亮:为 C++ 提供更精确的语法高亮,特别是模板和更复杂的语言特性。 116 | - 支持现代 C++:该插件支持 C++11、C++14、C++17 等现代 C++ 标准,确保新的语言特性也能得到良好的高亮。 117 | - 自定义语法高亮:你可以根据自己的需求自定义 C++ 的高亮规则。 118 | 119 | ![](/images/vscode-images/vscode.6.png) 120 | 121 | --- 122 | 123 | ## 2.配置开发者工具集MinGW,获得UCRT 124 | 125 | 注意:UCRT是为C和C++设计的标准运行时库,通过MSYS2安装ucrt64工具链时,实际上安装了一个基于UCRT的GCC工具链(这个工具链中包括编译器(gcc,c++),链接器,库文件等) 126 | ### 2.1.下载MSYS2 127 | 网址:[https://code.visualstudio.com/docs/cpp/config-mingw](https://code.visualstudio.com/docs/cpp/config-mingw) 128 | 注:该网站是英文的,可以使用浏览器自带翻译,翻译成中文,后续配置内容在网站下也有讲解 129 | ![](/images/vscode-images/vscode.7.png) 130 | ### 2.2.安装后复制网站中的命令输入 131 | **pacman -S --needed base-devel mingw-w64-ucrt-x86_64-toolchain** 132 | 注意:安装时碰到Enter a selection (default=all):,回车就行,网站上说的也有 133 | ![](/images/vscode-images/vscode.8.png) 134 | ### 2.3.复制ucrt64文件中的bin文件地址 135 | 在电脑文件中找到ucrt64文件下的bin文件(就在安装MSYS2的文件中),并复制bin文件的文件地址 136 | ![](/images/vscode-images/vscode.9.png) 137 | ### 2.4.添加到Windows环境变量的Path路径中 138 | .将ucrt64的bin文件地址到 Windows环境变量的Path路径中 139 | #### 2.4.1.打开系统环境变量界面 140 | 在搜索栏中搜索系统环境变量并打开 141 | ![](/images/vscode-images/vscode.10.png) 142 | #### 2.4.2. 进入Path变量编辑界面 143 | 点击环境变量,在用户/系统变量中,选择Path变量,然后选择编辑 144 | #### 2.4.3. 新建并放入复制的地址 145 | 点击新建,将复制的文件地址复制进去,最后点击确定退出 146 | #### 2.4.4.图片演示 147 | ![](/images/vscode-images/vscode.11.png) 148 | ![](/images/vscode-images/vscode.12.png) 149 | ![](/images/vscode-images/vscode.13.png) 150 | 151 | --- 152 | 153 | ## 3.编写C/C++程序 154 | 155 | ### 3.1.创建一个文件 156 | ![](/images/vscode-images/vscode.15.png) 157 | ### 3.2.通过VScode打开你上面创建的文件 158 | ![](/images/vscode-images/vscode.16.png) 159 | ### 3.3.创建文本文件,后缀需为.c或.cpp,再在弹出的语言选择中选择c++ 160 | ![](/images/vscode-images/vscode.17.png) 161 | ### 3.4.编写代码并运行,可以在终端看到输出结果 162 | ![](/images/vscode-images/vscode.18.png) 163 | ### 3.5.设置在控制台中输出结果 164 | #### 3.5.1.打开C/C++ Compile Run的设置 165 | ![](/images/vscode-images/vscode.19.png) 166 | #### 3.5.2.下滑勾选选项Run-in-external-terminal 167 | ![](/images/vscode-images/vscode.20.png) 168 | #### 3.5.3.配置环境完成 169 | ![](/images/vscode-images/vscode.21.png) 170 | 171 | --- 172 | 173 | # **五.根据所需语言配置环境(Python)** 174 | 175 | --- 176 | 177 | **不需要此语言请跳过** 178 | ## 1下载Python解释器 179 | 网址:[https://www.python.org/downloads/](https://www.python.org/downloads/) 180 | ![](/images/vscode-images/vscode.22.png) 181 | ![](/images/vscode-images/vscode.23.png)(下面两个选项要勾上,第一个就是运行Python程序时会调用它,第二个是把它添加到系统路径,让系统可以直接调用它) 182 | ## 2.安装插件 183 | ### 2.1.python 插件 184 | ![](/images/vscode-images/vscode.24.png) 185 | ### 2.2.python的主要功能 186 | - **代码智能提示**:提供 Python 代码的自动补全、函数参数提示、变量/函数定义跳转等功能。 187 | - **调试支持**:集成调试器,可以直接在 VS Code 中进行 Python 代码的调试,设置断点、变量监视和调用堆栈查看等。 188 | - **代码检查**:支持代码静态分析工具,如 Pylint 和 Flake8,帮助你发现代码中的潜在错误和格式问题。 189 | - **虚拟环境和 Conda 支持**:可以轻松选择和管理不同的 Python 解释器、虚拟环境或 Conda 环境。 190 | - **Jupyter 支持**:可以在 VS Code 中直接运行 Jupyter Notebooks,进行交互式的 Python 开发,特别适合数据科学工作流。 191 | - **测试集成**:支持常用的测试框架(如 unittest、pytest),便于运行和调试测试用例。 192 | 这个插件是 Python 开发者在 VS Code 中工作的基础工具,帮助进行代码编写、调试、测试和管理开发环境。 193 | 194 | --- 195 | 196 | ### 2.3.Python Extension Pack 插件 197 | ![](/images/vscode-images/vscode.26.png) 198 | 199 | ### 2.4.Python Extension Pack 的主要功能: 200 | **Python Extension Pack** 是为 Visual Studio Code 的 Python 开发者设计的一组插件包,包含了多个非常有用的扩展,主要包括: 201 | 1. **Python** - 提供核心功能,如代码检查(linting)、调试(包括多线程和远程调试)、智能感知(IntelliSense)、代码格式化、重构、单元测试,以及用于数据科学任务的 Jupyter Notebook 支持。 202 | 2. **Jinja** - 提供 Jinja 模板语言的语法高亮和代码片段。 203 | 3. **Django** - 为 Django Web 开发添加了特定的语法和代码片段。 204 | 4. **Visual Studio IntelliCode** - 基于机器学习的 AI 辅助工具,帮助提供智能代码补全和建议。 205 | 5. **Python Environment Manager** - 帮助你在 VS Code 中查看和管理 Python 环境及其依赖包。 206 | 6. **Python Docstring Generator** - 辅助自动生成 Python 函数和类的文档注释。 207 | 7. **Python Indent** - 自动纠正 Python 代码的缩进。 208 | 8. **Jupyter** - 提供对 Jupyter Notebook 的支持,适用于数据科学、机器学习和科学计算等任务。 209 | 210 | --- 211 | 212 | ## 3.编写Python程序 213 | 214 | ### 3.1创建一个文件 215 | ![](/images/vscode-images/vscode.15.png) 216 | ### 3.2.通过VScode打开你上面创建的文件 217 | ![](/images/vscode-images/vscode.16.png) 218 | ### 3.3.创建文本文件,后缀需为.py,再在弹出的语言选择中选择python 219 | ![](/images/vscode-images/vscode.17.png) 220 | ### 3.4.编写代码并运行,可以在终端看到输出结果 221 | ![](/images/vscode-images/vscode.25.png) 222 | 223 | --- 224 | 225 | # **六.根据所需语言配置环境(HTML+CSS+JS)** 226 | 227 | --- 228 | 229 | **不需要此语言请跳过** 230 | ## 1.安装插件 231 | ### 1.2.HTML CSS Support 插件 232 | ![](/images/vscode-images/vscode.27.png) 233 | ### 1.3.HTML CSS Support的主要功能 234 | 235 | - 为 HTML 文件中的元素提供 CSS 类名的自动补全。你在 HTML 文件中编辑时,输入 `class` 属性时,插件会自动从项目中的 CSS 文件中获取可用的类名并建议补全。 236 | - 支持从链接的 CSS 文件中提取类名,还包括嵌入在 HTML 中的 `