一、MySQL 数据库基础:安装并操作 “结构化数据”(工作必用)
实际工作中,很多数据需要 “结构化存储”(比如用户信息、订单记录),不能只存在文本文件里(不好查询、容易乱)。MySQL 是最常用的关系型数据库(就像 “电子表格的集合”,但能高效查询、关联数据),今天学 “安装 MySQL + 基本的增删改查”(新增、删除、修改、查询数据)。
1. 什么是 MySQL?(用例子秒懂)
- 你有 100 个用户的信息(姓名、年龄、电话),存在文本文件里查 “年龄> 30 的用户” 要逐行找;
- 存在 MySQL 里,一条命令就能查出结果(
select * from users where age>30;
),高效且不易出错。
2. 实操:安装 MySQL 并完成基础操作
步骤 1:安装 MySQL 服务器(需要管理员权限)
bash
sudo apt update
sudo apt install mysql-server # 安装MySQL服务,输入密码后按y
安装完成后,MySQL 会自动启动,验证是否运行:
bash
sudo systemctl status mysql # 显示“active (running)”说明启动成功
步骤 2:首次登录 MySQL(设置安全选项)
MySQL 默认 root 用户(管理员)没有密码,需要先初始化安全设置:
bash
sudo mysql_secure_installation # 启动安全配置向导
按以下步骤操作(全程选最安全的选项,小白不用纠结):
- 提示 “是否设置密码验证强度?”→ 输入
0
(最低强度,允许简单密码,方便测试); - 提示 “设置 root 用户密码”→ 输入一个简单密码(比如
123456
,实际工作用复杂密码),回车后重复输入; - 提示 “是否删除匿名用户?”→ 输入
y
(删除,避免陌生人登录); - 提示 “是否禁止 root 远程登录?”→ 输入
y
(默认只允许本机登录,安全); - 提示 “是否删除 test 数据库?”→ 输入
y
(没用,删除); - 提示 “是否刷新权限?”→ 输入
y
(让设置生效)。
步骤 3:登录 MySQL(进入数据库操作界面)
bash
sudo mysql -u root -p # -u root:用root用户登录;-p:提示输入密码
输入刚才设置的密码(123456
),回车后进入 MySQL 命令行(提示符变成mysql>
),表示登录成功。
3. MySQL 基本操作:增删改查(用 “用户表” 举例)
场景:创建一个 “用户信息表”(user_info
),存储id
(编号)、name
(姓名)、age
(年龄),并练习 “新增用户、查询用户、修改年龄、删除用户”。
(1)创建数据库(相当于 “新建一个文件夹”)
sql
-- MySQL命令以分号结尾,区分大小写(但习惯小写)
create database mytest; -- 创建一个叫mytest的数据库
use mytest; -- 进入这个数据库(后续操作都在这个库下)
- 输出
Database changed
表示成功进入mytest
数据库。
(2)创建表(相当于 “在文件夹里新建一个电子表格”)
sql
-- 创建user_info表,定义3个字段:id(自增编号)、name(姓名)、age(年龄)
create table user_info (
id int auto_increment primary key, -- id:整数,自动增长,作为主键(唯一标识)
name varchar(50) not null, -- name:字符串(最长50字符),不能为空
age int -- age:整数,可空(允许不填)
);
- 输出
Query OK, 0 rows affected (0.01 sec)
表示表创建成功。
(3)新增数据(往表中 “填内容”)
sql
-- 插入3条用户数据
insert into user_info (name, age) values ('张三', 25);
insert into user_info (name, age) values ('李四', 30);
insert into user_info (name, age) values ('王五', 35);
- 每条命令输出
Query OK, 1 row affected (0.00 sec)
表示插入成功。
(4)查询数据(“查找表中的内容”,最常用)
sql
-- 1. 查询所有用户(*表示“所有字段”)
select * from user_info;
-- 输出会像表格一样显示:
+----+--------+------+
| id | name | age |
+----+--------+------+
| 1 | 张三 | 25 |
| 2 | 李四 | 30 |
| 3 | 王五 | 35 |
+----+--------+------+
-- 2. 条件查询:只查年龄>30的用户
select * from user_info where age > 30;
-- 输出:
+----+--------+------+
| id | name | age |
+----+--------+------+
| 3 | 王五 | 35 |
+----+--------+------+
(5)修改数据(“更新表中的内容”)
sql
-- 把李四的年龄改成32
update user_info set age=32 where name='李四';
-- 验证:再次查询
select * from user_info where name='李四'; -- 会显示age=32
(6)删除数据(“删除表中的内容”,谨慎使用!)
sql
-- 删除id=1的用户(张三)
delete from user_info where id=1;
-- 验证:查询所有用户,张三已消失
select * from user_info;
(7)退出 MySQL
sql
exit; -- 回到Linux终端
二、Logstash 入门:批量收集分散的日志(日志分析第一步)
实际工作中,日志可能分散在多个地方(比如/var/log/nginx/
、/var/log/auth.log
、应用自己的日志目录),手动查看太麻烦。Logstash 是 “日志收集工具”,能把分散的日志 “集中搬到一个地方”(比如存到文件或数据库),像 “快递员把不同地址的包裹集中送到仓库”。
1. Logstash 的核心功能(简单理解)
- 输入(Input):从哪里取日志(比如文件、网络);
- 过滤(Filter,可选):对日志做简单处理(比如提取关键信息);
- 输出(Output):把处理后的日志送到哪里(比如本地文件、 Elasticsearch)。
2. 实操:用 Logstash 收集auth.log
到一个文件
步骤 1:安装 Java(Logstash 依赖 Java,先安装)
bash
sudo apt install openjdk-11-jdk # 输入密码后按y,等待安装完成
步骤 2:安装 Logstash
bash
# 添加Elastic官方源(Logstash属于Elastic公司)
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elasticsearch-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/elasticsearch-keyring.gpg] https://artifacts.elastic.co/packages/8.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic.list > /dev/null
# 更新源并安装Logstash
sudo apt update
sudo apt install logstash # 输入密码后按y,安装时间可能较长
步骤 3:创建 Logstash 配置文件(定义 “输入、输出”)
bash
sudo nano /etc/logstash/conf.d/collect_auth_log.conf # 配置文件名随便起,.conf结尾
步骤 4:写入简单配置(只做 “输入→输出”,不过滤)
conf
input { # 输入:从auth.log文件取日志
file {
path => "/var/log/auth.log" # 日志文件路径
start_position => "beginning" # 从文件开头开始读
}
}
output { # 输出:把日志写到一个新文件
file {
path => "/home/你的用户名/linux_study/logstash_output/auth.log.collect" # 输出文件路径(自己定义)
codec => line { format => "%{message}" } # 按行输出,保持原日志格式
}
}
- 替换
/home/你的用户名/
为你的实际路径(比如/home/zhangsan/
); - 创建输出目录(否则 Logstash 会报错):
bash
mkdir -p ~/linux_study/logstash_output # -p表示递归创建目录
步骤 5:启动 Logstash 并测试
bash
# 用管理员权限启动,指定配置文件
sudo /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/collect_auth_log.conf
步骤 6:验证日志是否被收集
打开新终端,往auth.log
里写一条测试日志(触发 Logstash 收集):
bash
sudo echo "这是一条测试日志,会被Logstash收集" >> /var/log/auth.log
查看 Logstash 的输出文件,能看到这条测试日志:
bash
cat ~/linux_study/logstash_output/auth.log.collect
步骤 7:停止 Logstash
在 Logstash 运行的终端,按Ctrl+C
停止。
三、Shell 脚本接收参数:让脚本 “处理不同文件不用改代码”
之前写的脚本(比如system_check.sh
)只能处理固定内容,今天学 “让脚本接收参数”—— 比如运行./process_file.sh file1.txt
处理file1.txt
,运行./process_file.sh file2.txt
处理file2.txt
,不用每次改脚本里的文件名,像 “函数能接收不同的输入”。
1. 脚本参数的表示方法(记 3 个就够了)
$0
:脚本本身的名字(比如process_file.sh
);$1
:第一个参数(比如运行./process_file.sh a.txt
,$1
就是a.txt
);$2
:第二个参数(以此类推,$n
表示第 n 个参数);$#
:参数的总个数(判断用户是否输入了足够的参数)。
2. 实操:写一个 “接收文件名参数” 的脚本(统计文件行数)
步骤 1:创建脚本count_lines.sh
bash
nano ~/linux_study/count_lines.sh
步骤 2:写入以下内容(带参数判断和处理)
bash
#!/bin/bash
# 功能:统计指定文件的行数(接收一个文件名参数)
# 判断用户是否输入了参数($#是参数个数,-eq 0表示“等于0”)
if [ $# -eq 0 ]; then
echo "错误:请输入要统计的文件名!用法:$0 文件名"
exit 1 # 退出脚本,返回错误状态(1表示出错)
fi
# 提取第一个参数(要统计的文件)
filename=$1
# 判断文件是否存在
if [ ! -f "$filename" ]; then
echo "错误:文件$filename不存在!"
exit 1
fi
# 统计行数并输出结果(wc -l统计行数)
line_count=$(wc -l < "$filename") # < 表示“从文件读内容,不显示文件名”
echo "文件$filename的行数是:$line_count"
步骤 3:加执行权限并测试
bash
chmod +x count_lines.sh
# 测试1:输入正确的文件名(比如long_text.txt)
./count_lines.sh long_text.txt
# 输出:文件long_text.txt的行数是:XX(具体行数根据你的文件)
# 测试2:不输入参数(应该报错)
./count_lines.sh
# 输出:错误:请输入要统计的文件名!用法:count_lines.sh 文件名
# 测试3:输入不存在的文件名(比如nonexist.txt)
./count_lines.sh nonexist.txt
# 输出:错误:文件nonexist.txt不存在!
今日必练实操清单(25 分钟搞定)
-
MySQL 操作:
- 重新登录 MySQL(
sudo mysql -u root -p
),进入mytest
数据库(use mytest;
); - 新增 2 条用户数据(
insert into user_info (name, age) values ('赵六', 28), ('孙七', 40);
); - 查询年龄 > 30 的用户(
select * from user_info where age>30;
),应该能看到王五和孙七; - 退出 MySQL(
exit
)。
- 重新登录 MySQL(
-
Logstash 收集日志:
- 按步骤配置 Logstash,收集
/var/log/syslog
到~/linux_study/logstash_output/syslog.collect
; - 往
/var/log/syslog
写一条测试日志(sudo echo "Logstash测试" >> /var/log/syslog
),查看输出文件是否有这条日志。
- 按步骤配置 Logstash,收集
-
带参数的脚本:
- 用
count_lines.sh
统计day1_note.txt
和day2_note.txt
的行数,对比结果是否正确。
- 用
今日总结(3 句话记住核心)
- MySQL 基础:
create database
建库→create table
建表→insert/select/update/delete
增删改查,登录命令是mysql -u 用户名 -p
,数据结构化存储必用。 - Logstash 入门:写配置文件定义 “input(从哪取)、output(往哪送)”,启动命令
logstash -f 配置文件
,日志收集第一步。 - 脚本参数:
$1
接收第一个参数,$#
判断参数个数,让脚本 “一个代码处理多个文件”,不用重复改代码。