news 2026/7/27 8:39:45

Linux运维从入门到精通

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux运维从入门到精通

龟速更新ing!(虽然还有好多没更新)

默认安装好了centos7

如何实现Linux的远程连接?

首先我要知道主机的IP地址,有了IP电脑才能知道要访问的对象

ip -a #获取IP地址 #如果没有用可以使用ifconfig

在自己主机上的IP地址一般使用的是ens33这张网卡,所以只要看ens33下的这个IP就行了

获取了IP地址以后就可以打开SSH软件建立会话

建立SSH链接没有特殊情况的话端口号是22

问题:ens33网卡没有IPV4

cd /etc/sysconfig/network-scripts/进入网络配置文件目录。

输入vi ifcfg-ens33编辑网卡配置文件。

将ONBOOT=no改为ONBOOT=yes,表示开机自动启动网卡。

保存并退出vi,输入:wq。

service network restart 重启网络
这样ens33网卡的IPV4就出现了(至少我是这样的)

Linux的目录结构

Linux系统是单根结构,意思就是Linux的所有目录起始目录都是/

而windows是但根结构,有CDEF这些盘,属于多根结构

Linux的设计师这么设计的原因是所有东西都是从根目录开头使文件比较好找

Linux的基本命令

命令格式:命令 -选项 参数

ls:查看目录下全部文件

-l 长格式化,相当于显示更多详细的信息

-lh 将长格式化中所显示出来的内存进行单位换算(K/M/G)

-a 显示隐藏文件

cp:复制命令

-r 复制的对象使文件夹

cp -r A B

从A复制到B

pwd:显示当前用户的home目录

mkdir:创建文件夹

-p 告诉mkdir有多少个层级一件创建,同时也可以在同级目录下创建多个文件夹。就比如说

/etc/{a,b,c}

tough:创建文件

cat:查看文件全部内容

more:分页查看

mv:移动文件

rm:删除文件

-rf 强制删除(慎用)

which:返回要找文件的绝对路径

find:在指定目录下搜索文件

find [搜索起始路径] -name "文件名"

grep:在文件中搜索关键字

-l 只统计行数(以回车统计换行)

-w 只统计单词数

-c 只统计字节数

-m 只统计字符数

|管道符

将左边命令的标准输出,作为右边命令的标准输入

echo:在屏幕上输出内容,类似于高级语言中的print

在echo中不能够直接输出文件中的内容。比如说我现在有一个文件a,文件a中写了1234。我现在想让echo输出1234我不能直接写echo a,这样的话他的返回结果就是a。那如果想要返回结果是1234的话那么就要这么写

echo 'a' echo $(a) $()=''#作用是一样的

就是先执行里面的内容

>:覆盖写入

>>:前面的结果输出到后面去,追加写入

tail:默认显示文件后10行

-n 指定显示尾部行数

-f 持续跟踪文件尾部变化,实时显示新内容

Linux用户和权限

当我们输入ls -l查看详细信息时候会出现类似以下内容:

-rw-r--r--. 1 root root 96009 6月 5 2025 build_chain.sh

字段1(权限字符串)

字段2(硬链接数):1或2

字段3(所有者)

字段4(所属组)

字段5(大小)

字段1由10个字符构成

第一个字符表示文件类型

-普通文件

d目录

l软连接

b块设备文件

c字符设备文件

将剩下的9个字符平分成三份-

第一段表示所有者

第二段表示所属组

第三段表示其他人

rwx权限的含义

r:阅读权限

w:写权限

x:执行权限

Linux下检查权限的顺序

  1. 检查是否为文件所有者
  2. 检查是否属于文件所属组
  3. 应用其他用户权限

我们修改权限的命令是chmod

用户类别u:所有者,g:所属组,o:其他,a:所有

操作符+:添加,-:移除;=:设置

权限字符r:读,w:写,x:执行

例如

chmod u+x file.txt #给文件的所有者添加执行权限 chmod g-w,o-r file.txt #给所属组移除写权限,给其他用户移除读取权限 chmod u=rwx,g=rx,o=file.txt #一次性设置所有用户权限,覆盖原有设置

chmod数字模式

r=4,w=2,x=1,无权限=0

要什么权限就是把数字相加就好了

修改文件所有者

chown:可以修改文文件的所有者和所有组

chown [选项] [所有者][:[组]] 文件名 -R:递归修改目录及其所有内容的归属

Linux系统服务管理:systemctl命令

systemctl是管理系统服务的主命令行工具,是systemmd的前端接口。主要是启动/重启/停止服务、查看状态、设置开机自启等。

服务是后台持续运行、提供特定功能且无需交互的程序。

systemctl[选项][命令][服务单元名称]#核心语法结构 #核心命令包括start/stop/status/enable(开机自启)/restart/reload

Linux系统监控与日志查看

top命令是Linux中比较常用的一个监控实时工具包,类似于Windows中的任务管理器,可以动态显示进程资源占用情况,如cpu,内存,并排序。

htop是top命令的增强版,支持鼠标交互、有进程树、可以批量kill进程,但是需要另外安装。

sudo yum install -y htop #CentOS sudo apt install -y htop #Ubuntu

无法下载htop

在学习的过程中我无法下载htop,首先告诉我下载失败,我去问了万能的deepseek大人,deepseek大人告诉我

CentOS 7已停止维护(2024年6月30日结束生命周期),官方镜像源已迁移到归档仓库

并且给出了解决方案

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup #备份原有repo文件 curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo # 使用阿里云镜像源(CentOS 7归档) yum clean all yum makecache #清理缓存并生成新缓存

执行完以后是不报错了,但是显示没有htop这个包,教程告诉我要先安装一个拓展仓库,然后再去安装htop

yum install epel-release -y

至此解决所有问题可以开始下载htop

比较常用的交互命令

鼠标点击排序/选择

/快速搜索进程

t切换进程树视图

k杀死选中进程

接下来我们要用命令查看磁盘空间

主要分为df和du命令

df命令报告文件系统的磁盘空间使用情况,显示整个磁盘分区的信息

-h 人类可读

-t 显示类型

du命令估算文件或目录占用的磁盘空间,显示具体项目的大小

-h 可读

-s 总计

-c 汇总

-a 所有

Linux的日志主要存储在/var/log目录下

常见的日志文件主要有

messages:系统主日志

secure:安全认证日志

cron:定时任务日志

boot.log:系统启动日志

系统轮转会自动归档、压缩和删除旧日志

Linux日期、时间与时区管理

date命令可以查看时间

默认格式下不符合中文阅读习惯

常用的格式化符号

%Y年份,%m二位数月份,%H24小时制小时(00-23),%S秒

Linux网络传输:端口与端口查看

在Linux中的/etc/services告诉我们Linux默认保留端口的文档

netstat适用于显示网络连接、路由表和协议统计信息的命令行工具

常用的选项组和

-a显示所有连接

-n以数字的形式显示地址和端口

-p显示关联的进程PID和名称

-t只显示TCP连接

-u只显示UDP连接

Shell脚本

shell就是一个命令解释器,如果没有shell的话就没有办法使用命令。

如何写shell脚本?

shell的种类比较多,如bash,sh,csh,ksh等等。为什么会有那么多?这是因为随着Linux和unix的发展而划分出的流派。

使用哪一种会在文件头部写明。比如

#!/bin/bash

就相当于告诉系统等一会儿用这个执行。

再Shell脚本中,使用‘=’进行变量赋值,如var=value,并通过‘$var‘来使用变量

#!/bin/bash #定义目录名称 DIRNAME='/data/backup' mkdir -p ${DIRNAME} echo "变量的值为:${DIRNAME}"

if语句的基本格式

if[条件]; then #bool为真执行 fi if [条件]; then #bool为真执行 elif[条件]; then #bool为真执行 else #bool为假执行 fi
#条件式举例说明 条件式判断文件夹是否存在 if[ -d data ]; then echo '目录存在' fi #检测文件是否存在 if [ -f /etc/hosts ]; then echo "系统hosts文件存在" fi #!!!![]首尾内部必须添加空格,不然会报错。不要问我怎么知道的
#!/bin/bash for i in {1..5} do echo "数值:$i" done #进阶一点的写法就是可以看文件 for i in $(ls /) do echo "$i" done #要批量创建用户 for i in ${cat /shell/uname.log} #告诉系统以这个文件里的内容作为循环变量,他是一行一行读取的 do useradd ${i} echo "用户创建成功" done

Mysql安装

#case语句基本语法 case 变量 in 模式1) 执行操作1 ;;#双分号代表结束 模式2 | 模式3) #多条件用|分割 执行操作2 ;; *)#默认分支(其他情况) 执行操作 ;; esac #结束标记

MySQL5.7默认没有在CentOS官方的仓库中,无法直接通过yum指令去安装,我们需要手动添加yum仓库。

rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022

然后我们就可以开始安装mysql了,我们要安装的是MySQL5.7社区版服务,指令如下

yum -y install mysql-community-server

提示找不到这个包

我按照这个指令操作,但是现实没有相对应的mysql包,于是我又去求助了万能的deepseek大人

添加MySQL官方Yum仓库

# 下载MySQL仓库安装包(适用于CentOS 7) wget https://repo.mysql.com/mysql80-community-release-el7-11.noarch.rpm # 如果wget不可用,用curl替代 curl -O https://repo.mysql.com/mysql80-community-release-el7-11.noarch.rpm

安装仓库包

rpm -Uvh mysql80-community-release-el7-11.noarch.rpm

检查仓库是否启用

yum repolist enabled | grep mysql

安装MySQL服务器

yum install mysql-community-server -y

由于我忘记了root密码

所以采取以下方法进行操作

我这里用的是mysql8,如果是mysql5.7的话好像会有出入,应该是字段会不一样(我看过帖子的目测

  1. vi /etc/my.cnf
  2. 到文件最下方输入skip-grant-tables然后wq退出。
  3. 然后按照正常方法进入mysql,由于我们输入了skip-grant-tables跳过验证,所以我们可以无需密码就进入mysql。
  4. 把mysql.user表中属于root的authentication_string填写为空,然后再退出。
    update user set authentication_string = '' WHERE User = 'root' AND Host = 'localhost';
  5. 回到my.cnf把skip-grant-tables删除,然后重启。
  6. 重新设置密码,如果直接在第四步设置,由于skip-grant-tables的存在会导致操作失败
    UPDATE user SET authentication_string = '要设置的密码' WHERE User = 'root' AND Host = 'localhost';

权限管理

创建用户

CREATE USER 'username'@'host' IDENTIFIED BY 'password';

创建本地用户

CREATE USER 'dev'@'localhost' IDENTIFIED BY '!Aa123456'

创建远程登录用户

CREATE USER 'consumer'@'%' IDENTIFIED BY '!Aa123456'

要注意的是主机地址可以是localhost(本地),%(任意ip)或者具体ip

密码需要复合安全策略(8位及以上,含大小写字母、数字、符号)

给用户授权格式

GRANT AUTHORITY_LIST ON DATABASE.TABLE TO 'USERNAME'@'HOST'

全局权限

GRANT ALL PRIVILEGES ON *.* TO 'USERNAME'@'HOST'

剩下的就是正常按照按照sql语句中的关键字作为权限符

SELECT,INSERT,UPDATE,DELETE,CREATE,ALTER,DROP,INDEX……

列级权限会跟上述格式有些出入,在这里举个例子

GRANT SELECT(ID,NAME),UPDATE(PRICE) ON MYDB.ORIDYCTS TO 'USERNAME'@"HOST"

要注意的是,输入完以后要使用FLUSH PRIVILEGES来刷新权限,如果要撤销权限的话只用吧GRANT改成REVOKE就可以了

数据库备份

mysql使用mysqldump工具来备份

使用mysqldump可以到处数据库结构和数据,生成sql语句,便于数据迁移和备份。

我安装的版本默认已经提供了mysqldump,别的版本尚且不知

基本语法

我在实操的时候发现-p[password]的这种方法不知道为什么一直报错,但是直接-p再输入密码就是好的。

mysqldump -u[username] -p[password] [option] [databasename] [tablename] > backupname.sql

如果要备份多个表只用将[tablename]变成table1 table2这样子就行了可以使用--where进行筛选

mysqldump -u root -p [databasename] table1 table2 --where="id<1000" > backupfilename.sql

备份单个数据库

mysqldump -u root -p --single-transaction --routines --events databasename > backupfilename.sql

--single-transaction 确保InnoDB表一致性

--routines和--events 包含存储过程和定时任务

MySQL高级特性

MySQL是可以多实例运行的,就是可以在一台服务器上运行多个MySQL。

他的资源是隔离的,可以针对不同的性能进行调优

由于是多实例,每个实例都有独立的数据目录、配置文件、端口号、日志文件

独立的进程和资源调配(cpu、内存)

  1. 设置mysql开机自启
    sudo systemctl enable mysqld
  2. 创建第二个实例的数据目录
    sudo mkdir -p /data/mysql2 sudo chown -R mysql:mysql /data/mysql2 #创建日志目录 sudo mkdir -p /var/log/mysql2 sudo chown -R mysql:mysql /var/log/mysql2

    多个实例共用一个启动文件

  3. 配置文件
    [mysqld] basedir = /usr/local/mysql datadir =/data/mysql socket=/tmp/mysql2.sock port=3307 log-error=/data/mysql2/mysql-error.log pid-file=/data/mysql2/mysql.pid skip-name-resolve=1 symbolic-llinks=0 explicit-defaults_for_timestamp=1 key_buffer_size=256M server-id=2
  4. 初始化实例
    mysqld --defaults-file=/etc/my.cnf.d/mysql2.cnf --initialize --user=mysql
  5. 然后在我们配置的log-error的地方会生成密码,我们查看文件获取密码

ammmm多实例报错了,过两天补

Redis

安装redis

yum update yum install epel-release yum -y install redis

redis的配置文件位于/etc/redis/redis.conf或者/etc/redis.conf

redis默认只能本地访问,如果要让别人访问的话就要修改bind配置,修改成0.0.0.0

设置一个访问密码的话就要修改requirepass,我找到的话是在480行,被注释掉了

设置开机自启

systemctl start redis&systemctl enable redis

redis提供了专门得命令端叫做redis-cli

一般设置redis的键值

set key value get key

Hash一般具有极高的唯一性,用于快速检索。

列表一般用于消息队列,支持从两端插入和弹出属性,如PUSH和RPRP。通过LRANGE命令可以获取列表中指定范围的元素,实现数据的分页和批量处理。BLPOP和BRPOP命令允许用户对列表进行阻塞式弹出,常用于实现消息队列。

集合是redis中的一种数据类型,用于存储不重复的无序字符串,redis提供了SADD、SMEMBERS命令来添加获取集合中的元素。可以运用于如用户的关注列表。

有序集合Zset一般会关联一个二double类型的分数,根据分数进行排序。ZSet提供了丰富的操作命令,如ZADD添加元素、ZRANGE获取指定范围元素、ZREVRANK获取元素的逆序排名等。

Redis的主从复制

redis主从复制可以避免单点损坏和数据丢失。原理其实就是redis允许将数据从A复制到B,当A节点发生故障可以由B节点接管。

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

Ultralytics:解读SCDown模块

Ultralytics&#xff1a;解读SCDown模块前言相关介绍Ultralytics 简介前提条件实验环境SCDown&#xff08;可分离卷积下采样模块&#xff09;代码实现功能初始化参数前向方法使用示例流程示意图代码解读注意事项优缺点优点缺点参考文献前言 由于本人水平有限&#xff0c;难免出…

作者头像 李华
网站建设 2026/7/27 8:35:49

AI Agent开发核心架构与Google ADK实战指南

1. 从零理解AI Agent开发的核心架构在当今AI技术快速发展的时代&#xff0c;Google开源的Agent Development Kit&#xff08;ADK&#xff09;为开发者提供了一个强大的框架来构建智能代理系统。ADK不是一个独立的大模型&#xff0c;而是一个"智能操作系统"&#xff0…

作者头像 李华
网站建设 2026/7/27 8:34:40

AD-Copilot:工业异常检测新范式与多模态技术实践

1. 工业异常检测的痛点与AD-Copilot的突破 工业生产线上的质检环节&#xff0c;往往需要工人用肉眼比对产品与标准模板的差异。这种工作看似简单&#xff0c;实则暗藏挑战&#xff1a;微小划痕的识别需要将图片放大到像素级比对&#xff0c;色差检测要求在不同光照条件下保持判…

作者头像 李华
网站建设 2026/7/27 8:31:19

基于机器视觉的水果质量检测技术实践

1. 水果质量检测的行业背景与挑战 水果作为全球农产品贸易中的重要商品&#xff0c;其质量直接决定了市场价格和消费者满意度。在传统的水果分选流水线上&#xff0c;主要依赖人工目检进行品质筛选&#xff0c;这种方式存在几个明显的痛点&#xff1a; 效率瓶颈 &#xff1a;…

作者头像 李华
网站建设 2026/7/27 8:31:13

HarmonyOS7 ArkUI 视频列表 - 封面卡片、播放量、关注按钮实战

文章目录前言从界面倒推代码交互入口在哪里代码里的重点片段 1&#xff1a;toggleFollow(id: number) {片段 2&#xff1a;likesDisplay(count: number): string {使用方式完整代码收个尾前言 这篇不讲空概念&#xff0c;直接从页面代码拆。能复用的不是某个颜色值&#xff0c…

作者头像 李华
网站建设 2026/7/27 8:31:02

PyPI供应链攻击深度解析:从LiteLLM恶意包事件看开源依赖安全

1. 事件概述&#xff1a;LiteLLM PyPI包安全事件深度解析最近在AI开发圈和开源安全领域&#xff0c;一个事件引发了不小的震动&#xff1a;一个名为“litellm”的Python包在PyPI&#xff08;Python Package Index&#xff09;官方仓库中被发现植入了恶意代码。如果你最近执行过…

作者头像 李华