Linux实操速记-基础2
Linux实操速记-基础2
包管理
RPM
RedHat Package Manager(RedHat软件包管理工具)的缩写,类似windows的setup.exe,这一文件格式名称虽然打上了RedHat的标志,但理念是通用的,其他linux的分发版本都有采用
- rpm
- -qa 【| grep xx】 看看当前系统安装了哪些软件,grep是否安装了xx软件
- 包名格式:名称-版本号.适用操作系统.适合架构:firefox-60.2.2-1.el7.centos.x86_64
- -q 软件包名:查询软件包是否安装 rpm -q firefox
- -qi 软件包名:查询软件包详细信息 rpm -qi firefox
- -ql 软件包名:查询软件包中的文件 rpm -ql firefox
- -qf 文件全路径名: 查询改文件属于哪个软件包生成的
- -e 软件包名:删除软件包
- 如果该软件包被依赖可能会提示无法删除,强制删除可以加上--nodeps,示例:rpm -e --nodeps 包名
- -ivh 软件包全路径:安装本地软件包
- i 安装
- v 提示
- h 进度条
- -qa 【| grep xx】 看看当前系统安装了哪些软件,grep是否安装了xx软件
YUM
yum是一个shell前端软件包管理器,基于RPM包管理,能从指定的服务器自动下载RPM包并且安装,可以自动处理依赖关系,并且一次安装所有依赖的软件包
- yum
- list 【| grep xx】 查询yum服务器是否有xx软件包
- install xx 下载安装xx软件包
搭建JavaEE环境
JDK
账号:307936641@qq.com
密码:Test307936
以上可以下载到jdk包,输入账户密码下载
1.mkdir /opt/jdk
2.cd /opt/jdk
3.tar -zxvf jdk-8u261-linux-x64.tar.gz
4.mkdir /usr/local/java
5.mv /opt/jdk/jdk1.8.0_261 /usr/local/java
6.配置环境变量vim /etc/profile
export JAVA_HOME=/usr/local/java/jdk1.8.0_261
export PATH=$JAVA_HOME/bin:$PATH
7.source /etc/profile 执行脚本,让环境变量生效
8.java -version ; javac -version 测试是否安装成功
tomcat
1.mkdir /opt/tomcat
2.cd /opt/tomcat
3.tar -zxvf apache-tomcat-8.5.59.tar.gz
4.mkdir /usr/local/tomcat
5.mv /opt/tomcat/apache-tomcat-8.5.59 /usr/local/tomcat
6./usr/local/tomcat/apache-tomcat-8.5.59/bin/startup.sh (运行启动tomcat,也可以设置自启动)
idea
暂不考虑
mysql
mysql-5.7.26-1.el7.x86_64.rpm-bundle.tar
1.mkdir /opt/mysql
2.cd /opt/mysql
3.tar -xvf mysql-5.7.26-1.el7.x86_64.rpm-bundle.tar
4.检查冲突的maradb是否存在 rpm -qa | grep mari
5.rpm -e nodeps mariadb-libs 删除冲突的内置数据库
6.按顺序安装
rpm -ivh mysql-community-common-5.7.26-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.26-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.26-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.26-1.el7.x86_64.rpm
7.运行systemctl start mysqld.service
8.设置root用户密码(默认生成的随机密码查看命令 grep “password” /var/log/mysqld.log)
9.mysql -u -root -p 登入mysql服务
10.个人环境可以使用set global validate_password_policy=0;提示密码设置策略(默认值为1,生产环境中一定要设置复杂密码)
0:低,只对长度要求8位
1:中,要求长度、数字、大小写、特殊字符
2:高,要求长度、数字、大小写、特殊字符、字典文件
11.set password for 'root'@'localhost'=password('long+3977878')
12.运行flush privileges;使得密码生效
13.重新登入验证mysql -u -root -p;show databases;显示数据库
Shell编程
基础语法
-
脚本格式
-
!/bin/bash 固定开头标识
- 文件后缀.sh
- 单行注释#
- 多行注释:<<! 换行 代码 换行 !
-
-
执行脚本
- 脚本需要赋予可执行权限:chmod u+x 脚本文件路径,直接执行脚本
- 不用赋予执行权限,直接使用命令:sh 脚本文件路径
-
变量定义
-
系统变量:系统中常驻的环境变量
- echo 可以打印一些变量值,如:echo $HOME $PATH
- set 可以打印所有的系统变量查看
- 规则
- export 变量名=变量值 将shell变量输出为环境变量/全局变量
- source 配置文件 让修改后的配置信息立即生效(统一配置在/etc/profile文件)
- echo $变量名 查询环境变量的值
-
用户自定义变量
-
位置参数变量
获取执行脚本时输入的携带参数
- $n n为数字,从0位置开始获取,0为命令本身字符串,当n大于1位时记得使用${10}来取值
- $* 获取所有携带参数,不带命令,把参数当成一个整体
- $@ 获取所有携带参数,不带命令,把参数区分对待,可用于循环
- $# 获取所有携带参数的个数
-
预定义变量
shell设计者预先定义好的变量
- $$ 获取当前进程-进程号-PID
- $! 后台运行的最后一个进程的进程号(PID)
- $? 最后一次执行的命令的返回状态,如果变量为0,证明上个命令正确执行,非零不正确执行,具体非零值由命令自己决定
-
-
运算符
- 基本语法
- "$((运算式))" 或 "$[运算式]" 或者 expr m + n
- 如果使用expr运算符间要有空格,如果希望expr的结果赋给某个变量,使用反引号括起来,同时expr运算一般分布运算,一次做一个加减乘除
- + 假发 - 减法 \* 乘法 / 除法 % 取余
- 基本语法
-
条件判断
- 基本语法
- [ condition ] 注意condition前后有空格(非空为真,$?进行验证的时候,0为真)
- 应用
- [ szl ] 返回true
- [] 返回false
- [ condition ] && echo OK || echo notOK 条件condition为真执行&&后面语句,不满足执行||后面语句
- 常用判断条件
- 字符串比较
- =
- 两个整数比较
- -lt 小于
- -le 小于等于
- -eq 等于
- -gt 大于
- -ge 大于等于
- -ne 不等于
- 文件权限判断
- -r 有读取的权限
- -w 有写的权限
- -x 有执行权限
- 文件类型判断
- -f 文件存在且是一个常规文件
- -e 文件存在
- -d 文件存在并是一个目录
- 应用
- “ok” 是否等于 “ok” 使用 =
- 23是否大于等于22 使用 -ge
- /root/shcode/aaa.txt目录的文件是否存在 使用-f
- 字符串比较
- 基本语法
-
流程控制
-
分支:
#单分支 if [ condition ] then echo "执行代码" fi #多分支 if [ condition ] then echo "执行代码1" elif [ condition ] then echo "执行代码2" fi #case语句 case $变量名 in "值1") echo "执行代码1" ;; "值2") echo "执行代码2" ;; *) echo "都不满足执行" ;; esac
-
循环
#方式1 for 变量 in 值1 值2 值3... do 程序 done #如循环输出 for i in "$@" do echo "num is $i" done ------------------------------------- #方式2 for((初始值;循环控制条件;变量变化)) do 程序 done #如求和 SUM=0 for((i=1;i<=100;i++)) do SUM=$[$SUM+$i] done echo "sum=$SUM" ------------------------------------- #while循环 while[ condision ] do 程序 done #如根据输入数据求和 SUM=0 i=0 while [ $i -le $1 ] do SUM=$[$SUM+$i] i=$[$i+1] done echo "执行结果$SUM"
-
-
输入
-
read (选项)(参数)
- 选项 -p 指定读取值时的提示符;
- 选项 -t 指定取值时等待的时间(秒),如果没有在指定的时间内输入,就不在等待
- 参数 变量名 指定读取值的变量名
- 应用
# 案例1 读取控制台输入一个NUM1值 read -p "请输入一个数NUM1=" NUM1 # 案例2 读取控制台输入的一个NUM2值,在10秒内输入 read -t 10 -p "请输入一个数NUM2,限制时间10秒" NUM2
-
-
函数
-
系统函数:预先定义好的函数,可以直接调用
- basename [pathname] [suffix] 取出路径中的文件名,如果命令放上扩展名,则把扩展名一并去掉
- dirname [文件绝对路径] 取出文件名中除去文件名的部分,只剩下目录部分
-
自定义函数
-
基本语法
[ function ] funname[()] { Action [return int;] } # 调用直接写函数名:funname [值] # 案例:计算输入两个参数的和(动态获取),getSum # 定义函数 function getSum(){ SUM=$[$n1+$n2] echo "两数和:$SUM" } # 输入两个数 read -p "输入n1=" n1 read -p "输入n2=" n2 #调用函数 getSum $n1 $n2
-
-
综合案例
需求
1.每天凌晨2:30备份 数据库Szl 到/data/backup/db
2.备份开始和备份结束能够给出提示信息
3.备份的文件要求以备份时间为文件名,并打包成.tar.gz文件
4.备份后检查是否有10天前的备份,如果有将其删除
实现
- 安装部署mysql,并建立数据库
- 备份数据脚本建立
- 设定任务调度
备份数据库脚本
#!/bin/bash
#备份目录
BACKUP=/data/backup/db
#当前时间
DATETIME=$(date +%Y-%m-%d_%H%M%S)
echo $DATETIME
#数据库地址
HOST=localhost
#数据库用户名
DB_USER=root
#数据库密码
DB_PW=long+3977878
#备份的数据库名称
DATABASE=Szl
#创建备份目录,不存在则创建
[ ! -d "${BACKUP}/${DATETIME}" ] && mkdir -p "${BACKUP}/${DATETIME}"
#备份数据库,并指定输出文件进行压缩
mysqldump -u${DB_USER} -p${DB_PW} --host=${HOST} -q -R --databases ${DATABASE} | gzip > ${BACKUP}/${DATATIME}/$DATATIME.sql.gz
#将文件处理成tar.gz
cd ${BACKUP}
tar -zcvf $DATETIME.tar.gz ${DATATIME}
#删除对应的备份目录
rm -rf ${BACKUP}/${DATETIME}
#删除10天前的备份文件
find ${BACKUP} -atime +10 -name "*.tar.gz" -exec rm -rf {} \;
echo "备份数据库${DATABASE}成功"
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?