Linux运维从入门到精通

Linux运维从入门到精通 龟速更新ing虽然还有好多没更新默认安装好了centos7如何实现Linux的远程连接首先我要知道主机的IP地址有了IP电脑才能知道要访问的对象ip -a #获取IP地址 #如果没有用可以使用ifconfig在自己主机上的IP地址一般使用的是ens33这张网卡所以只要看ens33下的这个IP就行了获取了IP地址以后就可以打开SSH软件建立会话建立SSH链接没有特殊情况的话端口号是22问题ens33网卡没有IPV4cd /etc/sysconfig/network-scripts/进入网络配置文件目录。输入vi ifcfg-ens33编辑网卡配置文件。将ONBOOTno改为ONBOOTyes表示开机自动启动网卡。保存并退出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复制到Bpwd显示当前用户的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下检查权限的顺序检查是否为文件所有者检查是否属于文件所属组应用其他用户权限我们修改权限的命令是chmod用户类别u:所有者g所属组o其他a所有操作符添加-移除设置权限字符r读w写x执行例如chmod ux file.txt #给文件的所有者添加执行权限 chmod g-w,o-r file.txt #给所属组移除写权限给其他用户移除读取权限 chmod urwx,grx,ofile.txt #一次性设置所有用户权限覆盖原有设置chmod数字模式r4,w2,x1,无权限0要什么权限就是把数字相加就好了修改文件所有者chown可以修改文文件的所有者和所有组chown [选项] [所有者][:[组]] 文件名 -R递归修改目录及其所有内容的归属Linux系统服务管理systemctl命令systemctl是管理系统服务的主命令行工具是systemmd的前端接口。主要是启动/重启/停止服务、查看状态、设置开机自启等。服务是后台持续运行、提供特定功能且无需交互的程序。systemctl[选项][命令][服务单元名称]#核心语法结构 #核心命令包括start/stop/status/enable开机自启/restart/reloadLinux系统监控与日志查看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这个包教程告诉我要先安装一个拓展仓库然后再去安装htopyum 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的种类比较多如bashshcshksh等等。为什么会有那么多这是因为随着Linux和unix的发展而划分出的流派。使用哪一种会在文件头部写明。比如#!/bin/bash就相当于告诉系统等一会儿用这个执行。再Shell脚本中使用‘’进行变量赋值如varvalue并通过‘$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 用户创建成功 doneMysql安装#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的话好像会有出入应该是字段会不一样我看过帖子的目测vi /etc/my.cnf到文件最下方输入skip-grant-tables然后wq退出。然后按照正常方法进入mysql由于我们输入了skip-grant-tables跳过验证所以我们可以无需密码就进入mysql。把mysql.user表中属于root的authentication_string填写为空然后再退出。update user set authentication_string WHERE User root AND Host localhost;回到my.cnf把skip-grant-tables删除然后重启。重新设置密码如果直接在第四步设置由于skip-grant-tables的存在会导致操作失败UPDATE user SET authentication_string 要设置的密码 WHERE User root AND Host localhost;权限管理创建用户CREATE USER usernamehost IDENTIFIED BY password;创建本地用户CREATE USER devlocalhost IDENTIFIED BY !Aa123456创建远程登录用户CREATE USER consumer% IDENTIFIED BY !Aa123456要注意的是主机地址可以是localhost本地%任意ip或者具体ip密码需要复合安全策略8位及以上含大小写字母、数字、符号给用户授权格式GRANT AUTHORITY_LIST ON DATABASE.TABLE TO USERNAMEHOST全局权限GRANT ALL PRIVILEGES ON *.* TO USERNAMEHOST剩下的就是正常按照按照sql语句中的关键字作为权限符SELECT,INSERT,UPDATE,DELETE,CREATE,ALTER,DROP,INDEX……列级权限会跟上述格式有些出入在这里举个例子GRANT SELECT(ID,NAME),UPDATE(PRICE) ON MYDB.ORIDYCTS TO USERNAMEHOST要注意的是输入完以后要使用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 --whereid1000 backupfilename.sql备份单个数据库mysqldump -u root -p --single-transaction --routines --events databasename backupfilename.sql--single-transaction 确保InnoDB表一致性--routines和--events 包含存储过程和定时任务MySQL高级特性MySQL是可以多实例运行的就是可以在一台服务器上运行多个MySQL。他的资源是隔离的可以针对不同的性能进行调优由于是多实例每个实例都有独立的数据目录、配置文件、端口号、日志文件独立的进程和资源调配cpu、内存设置mysql开机自启sudo systemctl enable mysqld创建第二个实例的数据目录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多个实例共用一个启动文件配置文件[mysqld] basedir /usr/local/mysql datadir /data/mysql socket/tmp/mysql2.sock port3307 log-error/data/mysql2/mysql-error.log pid-file/data/mysql2/mysql.pid skip-name-resolve1 symbolic-llinks0 explicit-defaults_for_timestamp1 key_buffer_size256M server-id2初始化实例mysqld --defaults-file/etc/my.cnf.d/mysql2.cnf --initialize --usermysql然后在我们配置的log-error的地方会生成密码我们查看文件获取密码ammmm多实例报错了过两天补Redis安装redisyum update yum install epel-release yum -y install redisredis的配置文件位于/etc/redis/redis.conf或者/etc/redis.confredis默认只能本地访问如果要让别人访问的话就要修改bind配置修改成0.0.0.0设置一个访问密码的话就要修改requirepass,我找到的话是在480行被注释掉了设置开机自启systemctl start redissystemctl enable redisredis提供了专门得命令端叫做redis-cli一般设置redis的键值set key value get keyHash一般具有极高的唯一性用于快速检索。列表一般用于消息队列支持从两端插入和弹出属性如PUSH和RPRP。通过LRANGE命令可以获取列表中指定范围的元素实现数据的分页和批量处理。BLPOP和BRPOP命令允许用户对列表进行阻塞式弹出常用于实现消息队列。集合是redis中的一种数据类型用于存储不重复的无序字符串redis提供了SADD、SMEMBERS命令来添加获取集合中的元素。可以运用于如用户的关注列表。有序集合Zset一般会关联一个二double类型的分数根据分数进行排序。ZSet提供了丰富的操作命令如ZADD添加元素、ZRANGE获取指定范围元素、ZREVRANK获取元素的逆序排名等。Redis的主从复制redis主从复制可以避免单点损坏和数据丢失。原理其实就是redis允许将数据从A复制到B,当A节点发生故障可以由B节点接管。