分类 linux 下的文章

在 Linux 上安装了 etcd 后,可以通过以下几种方式查看它的状态:


方法一:使用 etcdctl 工具

etcdctl 是 etcd 的命令行工具,可以用于查看集群状态、成员信息等。

1. 查看 etcd 版本

etcdctl version

2. 设置环境变量(如果你是使用默认配置)

export ETCDCTL_API=3

3. 查看健康状态

etcdctl endpoint health

如果 etcd 正常运行,会返回类似:

127.0.0.1:2379 is healthy: successfully committed proposal: took = 1.233ms

4. 查看成员列表

etcdctl member list

5. 查看集群状态

etcdctl endpoint status --write-out=table

方法二:使用 systemd 查看服务状态

如果你是使用 systemd 安装/启动的 etcd,可以使用:

systemctl status etcd

也可以用:

journalctl -u etcd -f

实时查看日志输出。


方法三:查看进程和监听端口

查看是否有 etcd 进程运行:

ps aux | grep etcd

查看 etcd 是否监听了默认端口 2379:

ss -tunlp | grep 2379

方法四:通过 HTTP API(如果你开放了接口)

例如:

curl http://localhost:2379/health

返回:

{"health":"true"}

说明服务正常。

在 Bash 脚本中,if...then...fi 是最基础也是最常用的条件语句结构,类似于其他语言中的 if...else 结构。

🧱 基本语法格式

if 条件
then
    命令1
    命令2
fi

✅ 示例:

if [ -f /etc/passwd ]
then
    echo "文件存在"
fi
这个例子判断 /etc/passwd 是否存在并且是个普通文件。

✨ 加上 else 的格式:

if 条件
then
    命令1
else
    命令2
fi

示例:

if [ "$USER" = "root" ]
then
    echo "你是超级用户"
else
    echo "你不是 root 用户"
fi

🌈 多条件:if...elif...else...fi

if 条件1
then
    命令1
elif 条件2
then
    命令2
else
    命令3
fi

示例:

if [ "$1" = "start" ]
then
    echo "开始服务"
elif [ "$1" = "stop" ]
then
    echo "停止服务"
else
    echo "未知命令"
fi

🧠 条件表达式说明(最常用):

表达式含义
[ -f FILE ]文件存在且是普通文件
[ -d DIR ]目录存在
[ -z STRING ]字符串长度为 0
[ STRING1 = STRING2 ]两个字符串相等
[ NUM1 -eq NUM2 ]两个整数相等
[ NUM1 -lt NUM2 ]NUM1 小于 NUM2
[ 条件 ] && [ 条件 ]多个条件 "并且"

❗注意事项:

  • 方括号两边一定要留空格,如 [ "$USER" = "root" ](否则报错)
  • fi 是 if 的结束标志(fi 是 if 反过来)

🔧 小脚本示例:

#!/bin/bash

read -p "请输入一个数字: " num

if [ "$num" -gt 100 ]; then
    echo "大于 100"
elif [ "$num" -eq 100 ]; then
    echo "等于 100"
else
    echo "小于 100"
fi

grep 是 Linux 系统中非常强大且常用的命令行工具,用于在文件中搜索指定的字符串或正则表达式。其名称来自 "global regular expression print",意思是全局正则表达式打印。

基本语法:

grep [选项] '模式' 文件名

常用选项:

选项说明
-i忽略大小写
-v反向匹配,显示不包含匹配内容的行
-r 或 -R递归搜索目录中的所有文件
-n显示匹配行的行号
-l只列出包含匹配内容的文件名
-c统计匹配的行数
--color=auto高亮显示匹配的部分(大多数 Linux 发行版默认启用)

使用示例:

  1. 在文件中查找字符串

    grep "hello" file.txt

    查找 file.txt 文件中包含 "hello" 的行。

  2. 忽略大小写

    grep -i "hello" file.txt
  3. 查找不包含某字符串的行

    grep -v "error" log.txt
  4. 递归查找目录中匹配内容

    grep -r "main" ./src
  5. 查找支持正则表达式

    grep "^start" file.txt

    匹配以 "start" 开头的行。


小技巧:

  • 可以与 pipe (|) 命令结合使用,从其他命令的输出中筛选信息:

    dmesg | grep usb
  • 与正则表达式配合,处理文本非常灵活。

grep -q

grep -q 是 grep 命令的一个非常实用的选项,意思是 安静模式(quiet / silent),它不会输出任何匹配结果,只通过返回码(退出状态码)来表示是否匹配成功。


✅ 功能说明:

  • 当使用 q 选项时,grep 不会在终端显示任何匹配的文本。
  • 它仅通过退出码来判断是否有匹配行。

🔢 退出状态码说明:

退出码含义
0找到匹配项
1未找到匹配项
2出现错误(如文件不存在等)

🧪 使用示例:

  1. 判断一个文件是否包含某个字符串:

    if grep -q "error" log.txt; then
        echo "日志中包含错误"
    else
        echo "日志中未发现错误"
    fi
    
  2. 配合 && 或 || 使用:

    grep -q "success" result.txt && echo "任务成功"
    grep -q "fail" result.txt || echo "任务未失败"

拉取镜像

docker pull mysql:latest
想要比较稳定的版本可以用5.7或者8.0 (或者8.4?) 比如mysql:5.7 或mysql:8.0

部署镜像

docker run -p 3306:3306 --name mymysql -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest  

docker run
启动一个新的 Docker 容器。

-p 端口映射
--name 为这个容器指定一个名称

-v 将当前工作目录挂载到容器内的目录 $PWD表示当前目录,可以根据需要自行修改

-e 设置环境变量

-d 以后台模式运行容器(detached mode),容器启动后不会阻塞当前的终端,会在后台运行。

mysql:latest 指定使用最新版本的 MySQL 官方镜像。如果没有本地镜像,Docker 会从 Docker Hub 拉取最新的 MySQL 镜像。

使用

由于 mysql 的安全策略,现在还不能使用 root/123456 来访问数据库
运行下面命令来进入容器

docker exec -it mymysql /bin/bash

这条命令的作用是在已经运行的容器内启动一个交互式 Bash Shell,让你直接进入容器内部进行操作。

docker exec exec 命令用于在一个已经处于运行状态的容器中执行新的命令。
-it

-i:交互式(interactive),让命令在前台保持对键盘输入的监听。
-t:伪终端(pseudo-TTY),为容器内的进程分配一个伪终端,方便进行命令行操作。

/bin/bash 指定要在容器中执行的命令,这里是 Bash Shell。执行后会打开一个终端会话环境,可以在容器内输入各种 Shell 命令。

之后运行以下命令进去mysql

mysql -uroot -p123456

-u 表示用户
-p 表示密码

创建root用户和权限授予

步骤 1:创建用户或修改用户密码

如果用户不存在,使用 CREATE USER 创建用户并设置密码

CREATE USER 'root'@'%' IDENTIFIED BY 'root';
CREATE USER 'root'@'127.0.0.1' IDENTIFIED BY 'root';
CREATE USER 'root'@'localhost' IDENTIFIED BY 'root';

如果用户已存在,使用 ALTER USER 修改用户密码

ALTER USER 'root'@'%' IDENTIFIED BY 'root';
ALTER USER 'root'@'127.0.0.1' IDENTIFIED BY 'root';
ALTER USER 'root'@'localhost' IDENTIFIED BY 'root';

步骤 2:授予权限

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.0.0.1' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;

步骤 3:刷新权限(可选)

在 MySQL 8.0 及更高版本中,GRANT 语句会自动刷新权限,因此通常不需要手动执行 FLUSH PRIVILEGES;。但如果你进行了其他权限表的直接修改,可以使用:

FLUSH PRIVILEGES;