news 2026/5/5 1:29:41

二、初识rocky linux

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
二、初识rocky linux

1.进入Rocky_Linux虚拟机,按Win键,点击下方的终端

2.熟悉命令

  • ls --- 查看当前目录下的文件
  • pwd --- 查看当前目录的绝对路径
  • cd --- 切换到指定目录

3.熟悉命令

  • vi --- 打开文本文件,若不存在则创建

4.熟悉命令

  • mkdir --- 创建文件夹

5.演示系统管理登录,如图点击登出

6.点击未列出

7.使用管理员账号,输入root

8.输入密码

9.演示网页服务,yum安装http服务

  • yum -y install --- 用于安装服务,-y是安装过程中默认确认

10.启动http服务

  • systemctl start --- 启动服务

11.打开火狐浏览器

12.访问本地localhost,可以看到服务打开

13.关闭http服务

  • systemctl stop --- 关闭服务

14.刷新可以看到连接失败

15.熟悉命令

  • systemctl restart --- 重启服务,常用于修改了服务参数后重启
  • systemctl enable --- 开启服务开机自启
  • systemctl disable --- 关闭服务开机自启

16.打开文本编辑器

17.将以下贪吃蛇代码复制到文本中,并且保存

<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>经典贪吃蛇</title> <style> * { margin: 0; padding: 0; box-sizing: border-box; font-family: 'Arial', sans-serif; } body { background: linear-gradient(135deg, #1a2a6c 0%, #b21f1f 50%, #1a2a6c 100%); min-height: 100vh; display: flex; flex-direction: column; align-items: center; justify-content: center; color: #fff; padding: 20px; } .game-container { background: rgba(0, 0, 0, 0.7); backdrop-filter: blur(8px); border-radius: 16px; padding: 20px; box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3); text-align: center; } .game-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 20px; gap: 30px; } .info-panel { background: rgba(255, 255, 255, 0.1); padding: 10px 20px; border-radius: 8px; min-width: 100px; } .info-panel h3 { font-size: 16px; margin-bottom: 5px; opacity: 0.8; } #score, #speed { font-size: 24px; font-weight: bold; color: #ffd700; } .btn { background: #ff6b6b; color: #fff; border: none; padding: 10px 20px; border-radius: 8px; font-size: 16px; cursor: pointer; transition: all 0.3s ease; } .btn:hover { background: #ff4949; transform: translateY(-2px); } /* 游戏网格 */ .game-grid { display: grid; grid-template-columns: repeat(20, 1fr); gap: 1px; background: #333; border: 2px solid #fff; border-radius: 8px; overflow: hidden; } .grid-cell { width: 20px; height: 20px; background: #111; } .grid-cell.snake { background: #00ff00; border-radius: 3px; } .grid-cell.food { background: #ff0000; border-radius: 50%; } /* 游戏结束弹窗 */ .game-over { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0, 0, 0, 0.85); display: flex; flex-direction: column; align-items: center; justify-content: center; z-index: 100; display: none; } .game-over h2 { font-size: 48px; margin-bottom: 20px; color: #ff6b6b; text-shadow: 0 0 10px rgba(255, 107, 107, 0.5); } .game-over p { font-size: 28px; margin-bottom: 30px; } .game-over .btn { font-size: 18px; padding: 12px 24px; } /* 响应式调整 */ @media (max-width: 500px) { .grid-cell { width: 15px; height: 15px; } .game-header { flex-direction: column; gap: 10px; } .game-over h2 { font-size: 36px; } .game-over p { font-size: 24px; } } </style> </head> <body> <div class="game-container"> <div class="game-header"> <div class="info-panel"> <h3>得分</h3> <p id="score">0</p> </div> <div class="info-panel"> <h3>速度</h3> <p id="speed">1</p> </div> <button class="btn" id="restart-btn">重新开始</button> </div> <div class="game-grid" id="game-grid"></div> </div> <div class="game-over" id="game-over"> <h2>游戏结束!</h2> <p>最终得分:<span id="final-score">0</span></p> <button class="btn" id="replay-btn">再来一局</button> </div> <script> // 游戏配置 const config = { gridSize: 20, // 网格尺寸(20x20) initialSpeed: 200, // 初始移动间隔(毫秒) speedStep: 10, // 每吃一次食物加速(毫秒) minSpeed: 80 // 最小移动间隔(最快速度) }; // 游戏状态 let gameState = { snake: [ // 蛇身(坐标数组,头部在前) { x: 10, y: 10 } // 初始位置 ], direction: 'right', // 初始方向 nextDirection: 'right',// 下一个方向(解决方向切换冲突) food: { x: 5, y: 5 }, // 食物位置 score: 0, // 得分 speed: 1, // 速度等级 moveInterval: null, // 移动定时器 isPaused: false // 是否暂停 }; // DOM 元素 const gameGrid = document.getElementById('game-grid'); const scoreEl = document.getElementById('score'); const speedEl = document.getElementById('speed'); const gameOverEl = document.getElementById('game-over'); const finalScoreEl = document.getElementById('final-score'); const restartBtn = document.getElementById('restart-btn'); const replayBtn = document.getElementById('replay-btn'); // 初始化游戏 function initGame() { // 重置游戏状态 gameState = { snake: [{ x: 10, y: 10 }], direction: 'right', nextDirection: 'right', food: generateFood(), score: 0, speed: 1, moveInterval: null, isPaused: false }; // 更新 UI scoreEl.textContent = gameState.score; speedEl.textContent = gameState.speed; gameOverEl.style.display = 'none'; // 创建网格 createGrid(); // 启动游戏 startGame(); // 绑定键盘事件 bindKeyboardEvents(); } // 创建游戏网格 function createGrid() { gameGrid.innerHTML = ''; gameGrid.style.gridTemplateColumns = `repeat(${config.gridSize}, 1fr)`; // 创建网格单元格 for (let y = 0; y < config.gridSize; y++) { for (let x = 0; x < config.gridSize; x++) { const cell = document.createElement('div'); cell.className = 'grid-cell'; cell.dataset.x = x; cell.dataset.y = y; gameGrid.appendChild(cell); } } // 渲染蛇和食物 renderSnake(); renderFood(); } // 生成随机食物(不与蛇身重叠) function generateFood() { let food; do { food = { x: Math.floor(Math.random() * config.gridSize), y: Math.floor(Math.random() * config.gridSize) }; } while ( // 检查食物是否在蛇身上 gameState.snake.some(segment => segment.x === food.x && segment.y === food.y) ); return food; } // 渲染蛇 function renderSnake() { // 清除之前的蛇 document.querySelectorAll('.grid-cell.snake').forEach(cell => { cell.classList.remove('snake'); }); // 渲染新蛇身 gameState.snake.forEach(segment => { const cell = document.querySelector(`.grid-cell[data-x="${segment.x}"][data-y="${segment.y}"]`); if (cell) cell.classList.add('snake'); }); } // 渲染食物 function renderFood() { // 清除之前的食物 document.querySelectorAll('.grid-cell.food').forEach(cell => { cell.classList.remove('food'); }); // 渲染新食物 const cell = document.querySelector(`.grid-cell[data-x="${gameState.food.x}"][data-y="${gameState.food.y}"]`); if (cell) cell.classList.add('food'); } // 移动蛇 function moveSnake() { if (gameState.isPaused) return; // 更新方向(避免180度转弯) const directionMap = { up: { dx: 0, dy: -1, opposite: 'down' }, down: { dx: 0, dy: 1, opposite: 'up' }, left: { dx: -1, dy: 0, opposite: 'right' }, right: { dx: 1, dy: 0, opposite: 'left' } }; // 确保不能反向移动 if (gameState.nextDirection !== directionMap[gameState.direction].opposite) { gameState.direction = gameState.nextDirection; } const { dx, dy } = directionMap[gameState.direction]; const head = { x: gameState.snake[0].x + dx, y: gameState.snake[0].y + dy }; // 检查碰撞(边界或自身) if ( head.x < 0 || head.x >= config.gridSize || // 边界碰撞 head.y < 0 || head.y >= config.gridSize || gameState.snake.some(segment => segment.x === head.x && segment.y === head.y) // 自身碰撞 ) { gameOver(); return; } // 添加新头部 gameState.snake.unshift(head); // 检查是否吃到食物 if (head.x === gameState.food.x && head.y === gameState.food.y) { // 加分 gameState.score += 10; scoreEl.textContent = gameState.score; // 加速 gameState.speed++; speedEl.textContent = gameState.speed; restartMoveInterval(); // 生成新食物 gameState.food = generateFood(); renderFood(); } else { // 没吃到食物,移除尾部 gameState.snake.pop(); } // 重新渲染蛇 renderSnake(); } // 启动游戏(设置移动定时器) function startGame() { // 清除之前的定时器 if (gameState.moveInterval) { clearInterval(gameState.moveInterval); } // 计算当前速度(初始速度 - 加速步数 * 速度步长,不低于最小速度) const currentSpeed = Math.max( config.initialSpeed - (gameState.speed - 1) * config.speedStep, config.minSpeed ); // 设置新定时器 gameState.moveInterval = setInterval(moveSnake, currentSpeed); } // 重启移动定时器(加速时调用) function restartMoveInterval() { startGame(); } // 游戏结束 function gameOver() { clearInterval(gameState.moveInterval); finalScoreEl.textContent = gameState.score; gameOverEl.style.display = 'flex'; } // 绑定键盘事件 function bindKeyboardEvents() { document.addEventListener('keydown', (e) => { switch (e.key) { case 'ArrowUp': gameState.nextDirection = 'up'; break; case 'ArrowDown': gameState.nextDirection = 'down'; break; case 'ArrowLeft': gameState.nextDirection = 'left'; break; case 'ArrowRight': gameState.nextDirection = 'right'; break; case ' ': // 空格键暂停/继续 gameState.isPaused = !gameState.isPaused; break; } }); } // 绑定按钮事件 restartBtn.addEventListener('click', initGame); replayBtn.addEventListener('click', initGame); // 初始化游戏 window.addEventListener('load', initGame); </script> </body> </html>

18.点击如下目录

19.点击如下目录

20.点击如下目录

21.点击如下目录

22.修改名称并保存

23.进入到对应目录,确认文件已经保存

24.访问以下URL贪吃蛇成功运行

25.查看rocky linux的内网ip

  • ifconfig --- 查看ip信息

26.使用xshell访问Rocky_Linux虚拟机

27.填写如图信息并连接

28.接受并保存

29.输入用户名

30.输入密码

31.可以看到成功连接到rocky linux

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/5 1:25:53

Leaflet地图瓦片纠偏实战:从坐标偏移到精准定位的解决方案

1. 为什么你的Leaflet地图总是对不准&#xff1f; 最近接手一个物联网项目时&#xff0c;我遇到了一个让人抓狂的问题——设备坐标在Leaflet地图上总是偏离实际位置几百米。明明在后端已经做了坐标系转换&#xff0c;用官方地图验证坐标也没问题&#xff0c;但一放到Leaflet里就…

作者头像 李华
网站建设 2026/4/15 23:22:35

CosyVoice2-0.5B保姆级教程:录音上传→文本输入→流式播放全流程详解

CosyVoice2-0.5B保姆级教程&#xff1a;录音上传→文本输入→流式播放全流程详解 想不想拥有一个专属的AI语音助手&#xff0c;让它用你或者任何人的声音&#xff0c;说出任何你想说的话&#xff1f;今天&#xff0c;我就带你手把手玩转一个超级强大的声音克隆神器——CosyVoi…

作者头像 李华
网站建设 2026/4/15 23:19:34

想把 Chrome 插件变成独立的桌面程序

想把 Chrome 插件变成独立的桌面程序&#xff0c;有几种不同的方法&#xff0c;从简单到复杂都有。我把它们整理成了几种方案&#xff0c;你可以根据自己的需求和技术背景来选择&#xff1a;方案一&#xff1a;使用 Chrome 自带功能——创建快捷方式如果你只是想拥有一个像 App…

作者头像 李华
网站建设 2026/4/15 23:17:26

Python 生成器和迭代器高级应用指南

Python 生成器和迭代器高级应用指南 1. 什么是迭代器&#xff1f; 迭代器是一个实现了 __iter__() 和 __next__() 方法的对象。它允许我们逐个访问集合中的元素&#xff0c;而不需要一次性加载所有元素到内存中。 class MyIterator:def __init__(self, start, end):self.curren…

作者头像 李华