美文网首页DBA数据库学习
DBA数据库笔记之(一)Linux及Shell基础

DBA数据库笔记之(一)Linux及Shell基础

作者: Mr培 | 来源:发表于2024-01-17 16:48 被阅读0次

DBA必会的Linux命令及Shell

Linux

Linux文件夹和文件操作常用命令详解

  • ls
1. ls -l 
# 权限 所有者 文件大小 最后修改时间
2. ls -lh
#大小 易读模式
3. ls -a
# 列出文件包括隐藏文件
  • cd

进入文件夹

1. cd ..
# 进入上一个文件夹
  • pwd

显示当前目录路径

  • mkdir

创建文件夹

1. mkdir -p
# 创建两级目录
  • touch

创建文件

  • rm

删除

- rm -r xxx
# 需要确认
- rm -rf  xxx
# 不需要确认直接删除
  • cp

复制

1. cp -rf * /data/aa
# 复制当前目录下所有文件及文件夹 到 /data/aa 下
  • mv

移动

  • du

查看使用空间

1. du -sh *
# 查看当前文件夹下所有文件和文件夹大小
2. du -sh .
# 查看当前文件夹和文件总大小
  • df

显示磁盘空间的使用情况

1. df -l
# 显示磁盘的使用情况
2. df -Th
# 易读方式显示磁盘的使用情况
  • wc

统计文件行数,单词数,字节数,字符数

1. wc |wc -l
# 统计当前文件夹的文件和文件夹总数
  • cat /etc/passwd|wc -l

统计整个文件有多少行

Linux文件编辑和内容显示常用命令详解

  • vim

编辑文件,不存在则创建,i编辑模式,esc+:wq 退出保存;esc+:q! 退出不保存;yy 拷贝当前行,p 粘贴;dd 删除某行;u 撤销上一步;/xx 查找


  • sed

替换文本

sed -i 's/aaa/xxx/g' 1.txt  
#将1.txt中aaa替换成xxx
  • cat

查看文件内容

1. cat > test.txt << EOF
# 向文件写入内容,输入EOF结束
# > 覆盖内容;>> 追加内容
2. echo "abc" > 1.txt
3. echo "abc" >> 1.txt
  • more

查看文件内容,一页一页显示

  • head

默认显示文件前10行

1. head 1.txt
2. head -n 5 1.txt
# 显示前5行内容
  • tail

默认显示最后10行

1. tail -n 5 1.txt
# 显示文件最后5行
2. tail -f 1.txt
# 实时打印文件内容

Linux字符串和文件查找命令详解

  • grep

查找文件中符合条件的字符串

1. grep xxx /etc/passwd
# 过滤 /etc/passwd 文件中的 xxx 关键字
2. grep ’^xxx‘ /etc/passwd
# 过滤已xxx开头的行
3. grep ’xxx$‘ /etc/passwd
# 过滤已xxx结尾的行
4. grep -v xxx /etc/passwd
# 过滤不包含xxx的行
5. grep -w xxx /etc/passwd
# 只过滤单词为 xxx 的行
  • find

列出文件系统中符合条件的文件

1. find / -name "passwd"
# 在 / 目录下查询名字为 passwd 的文件
2. find / -name "*.conf"
# 在 / 目录下查询以 .conf 结尾的文件
3. find /var/log/ -type -f
# 只查询文件
4. find /var/log/ -mtime + 7 
# 查询修改时间在七天以外的文件
5. find /data/aa/ -type -f -mtine +7 -name "*.log"
# 查询在修改时间为七天以外的以.log结尾的文件
6. find /data/aa/ -type -f -mtine +7 -name "*.log" -exec rm -f {} \;
# 删除掉在修改时间为七天以外的以.log结尾的文件
7. find /root/backup/data  -type f -name '*.sql' -mtime +7 -exec rm -rf {} \;
# 删除7天前的备份,只保留7天内的备份
  • which

显示执行命令的路径

1. which ls
1. which vim

Linux用户管理

  • useradd

创建用户, /home/ 下会创建对应的文件夹

1. passwd user 
# 为新建的用户配置密码
2. passwd -d user
# 删除用户密码
3. userdel user
# 删除用户,家目录不会删除
4. userdel -r user
# 连同家目录一起删除
  • groupadd

创建用户组

1. groupadd dba
# 创建用户组 dba
2. useradd -g dba lisi
# 在 dba组创建用户 lisi 
3. usermod -g dba zhangsan
# 修改用户 zhangsan 到用户组 dba
  • groupdel

删除空的用户组

1. groupdel dba

Linux设置权限和属性

  • rwx

三种权限 7 = 4+2+1
r 查看权限 对应 4
w 修改权限 对应 2
x 执行权限 对应 1

1. ls -l
2. ll
第一位 d 文件夹; - 文件
后面 权限  所有者权限 用户组权限 其它用户权限
  • chmod

修改权限

1. chmod 777 yum.sh
  • chown

修改文件或目录的属有组,属有者

1. chown root.root 1.txt
# 修改1.txt的属有组为 root组下的root用户
2. chown -R root.root xx/
# 修改 xx/ 下的所有文件夹和文件 的属有组为 root组下的root用户

Linux压缩和解压命令详解

  • tar

z 通过gzip指令,c 建立压缩文件,v 显示指令执行过程,f 指定压缩文件,x 还原文件

1. tar -zcvf 1.tar.gz 1.txt
# 将1.txt压缩为1.tar.gz
2. tar -zxvf 1.tar.gz
# 解压文件
  • gzip
1. gzip 1.txt
# 压缩
2. gzip -d 1.txt.gz
# 解压
  • zip

压缩

yum install zip -y
# 安装zip命令
1. zip 1.txt.zip 1.txt
# 压缩文件
2. zip -e 1.txt.zip 1.txt
# 加密压缩
  • unzip

解压

1. unzip 1.txt.zip

Linux服务管理、性能收集相关命令详解

  • ps

显示当前进程的状态

1. ps -ef
# 查看所有的进程 -e 显示所有进程 f 显示进程之间的关系
2. ps -ef | grep sshd
# 判断某个进程是否启动
  • top

查看系统资源使用情况

  • kill

终止进程

1. kill -9 PID
# 强制终止进程
  • netstat

查看连接状态,查看某个进程的监听端口情况

yum install net-tools

1. netstat -anp|grep sshd
2. netstat -anp|grep 22
  • lsof

列出打开的文件
yum install lsof -y

1. lsof -i:22
# 22端口打开的文件
2. lsof -p PID
  • chkconfig

检查和设置系统服务

1. chkconfig --list
# 显示所有系统服务状态
2. chkconfig --list network
# 查看具体某个服务的状态
3. chkconfig --add mysql
# 新增新服务
4. chkconfig --del mysql
# 删除
5. chkconfug mysql on
# 开机启动
  • iosat

统计系统io状态
yum install sysstat -y

1. iostat -c
# 只显示cpu的情况
2. iostat -d
# 只显示磁盘的情况
3. iostat -d -k 1
# 以k为单位每秒刷新一次磁盘的情况
  • iotop

查看磁盘io状态
yum install iotop -y

1. iotop
2. iotop -p PID
# 查看某个进程的io状态
  • uptime

显示系统已经运行的时间和负载

Linux计划任务如何配置?

  • cat /etc/crontab
  • crontab -e

配置计划任务

0 * * * 脚本.sh >> ls.log
  • crontab -l

查看已有的定时任务

Shell

Shell字符串输出详解

  • 编写脚本
  1. vim 1.sh
#!/bin/bash
echo "Hello World"
# 输出普通字符串
echo -e "Hello \n World"
# -e 开启转义 【换行】
echo `date`
# 输出命令结果
echo -e "\033[34m xxx \033[0m"
# xxx 输出显示颜色
echo "xxx" > 1.txt
# 覆盖1.txt内容为xxx
echo "vvv" >> 1.txt
# 追加内容
  1. chmod +x 1.sh
    赋予执行权限
  2. ./1.sh
    执行脚本

Shell变量与参数传递详解

  • 变量
#!/bin/bash
name="张三"
echo "$name"
# 变量
now=`date + %Y%m%d%H%M%S`
echo "$now"
# 输出 命令date 且转换格式显示
echo "$?"
# 返回 0 上一条命令执行成功
  • 参数传递
#!/bin/bash
echo "脚本名是$0"
echo "一共有$#个参数"
echo "第一个参数是$1"
echo "第二个参数是$2"

sh xxx.sh aaa bbb

  • 读取从键盘输入的变量
#!/bin/bash
read -p "请输入名字: " name
echo "你好: $name"

Shell运算符有哪些?具体怎么使用?

  • 算数运算符
运算符 说明
+ 加法
- 减法
* 乘法
/ 除法
% 取余
== 比较两个数字是否相等
!= 比较两个数字是否不相等
#!/bin/bash
a=2
b=5
# 加法
echo $(($a + $b))
# 减法
echo $(($a - $b))
# 乘法
echo $(($a * $b))
# 除法
echo $(($a / $b))
# 取余
echo $(($a % $b))
# 比较 是否相等
if [$a == $b];then
    echo "a 等于 b"
else
    echo "a 不等于 b"
fi
# 比较 不相等
if [$a != $b];then
    echo "a 不等于 b"
else
    echo "a 等于 b"
fi
  • 关系运算符
运算符 说明
-eq 判断两个数是否相等
-ne 判断两个数是否不相等
-gt 判断左边的数是否大于右边的
-lt 判断左边的数是否小于右边的
-ge 判断左边的数是否大于等于右边的
-le 判断左边的数是否小于等于右边的
#!/bin/bash
a=2
b=5
# 判断两个数是否相等
if [$a -eq $b];then
    echo "a 等于 b"
else
    echo "a 不等于 b"
fi
# 判断两个数是否不相等
if [$a -ne $b];then
    echo "a 不等于 b"
else
    echo "a 等于 b"
fi
# 判断左边的数是否大于右边的
if [$a -gt $b];then
    echo "a 大于 b"
else
    echo "a 不大于 b"
fi
  • 布尔运算符
运算符 说明
! 非运算
-o 或运算
-a 与运算
#!/bin/bash
a=1
b=2
# 非运算
if [$a != $b];then
    echo "a 不等于 b"
else
    echo "a 等于 b"
fi
# 或运算
if [$a -eq 2 -o $b -eq 2];then
    echo "a或者b至少有一个等于2"
else
    echo "a和b都不等于2"
fi
# 与运算
if [$a -eq 2 -a $b -eq 2];then
    echo "a和b都等于2"
else
    echo "a和b都不等于2"
fi
  • 字符串运算符
运算符 说明
= 判断两个字符串是否相等
!= 判断两个字符串是否不相等
-z 判断字符串长度是否为0
-n 判断字符串长度是否不为0
#!/bin/bash
a='aaa'
b='bbb'
# 判断两个字符串是否相等
if [$a = $b];then
    echo "a等于b"
else
    echo "a不等于b"
fi
# 判断两个字符串是否不相等
if [$a != $b];then
    echo "a不等于b"
else
    echo "a等于b"
fi
# 判断字符串长度是否为0
if [-z $a];then
    echo "a的长度为0"
else
    echo "a的长度不为0"
fi
  • 文件判断运算符
运算符 说明
-d 判断文件夹是否存在
-f 判断文件是否存在
-e 判断文件或文件夹是否存在
#!/bin/bash
dir="/data/script/buk"
file="data/script/buk.sql"
# 判断文件夹是否存在
if [-d "$dir"];then
    echo "文件夹${dir}存在"
else
    echo "文件夹${dir}不存在"
fi
# 判断文件是否存在
if [-f "$file"];then
    echo "文件${file}存在"
else
    echo "文件${file}不存在"
fi
# 判断文件或文件夹是否存在
if [-e "$file"];then
    echo "文件或文件夹${file}存在"
else
    echo "文件或文件夹${file}不存在"
fi

Shell 流程控制详解

  • if ... else
#!/bin/bash
read -p "请输入分数:" score
if [$score -ge 0 -a $score -le 100];then
    echo "输入的分数在合理的范围"
else
    echo "输入的分数不在合理的范围"
fi
  • if ... elif ... else
#!/bin/bash
read -p "请输入分数:" score
if [$score -ge 0 -a $score -lt 60];then
    echo "不及格"
elif [$score -ge 60 -a $score -le 100];then
    echo "及格"
else
    echo "输入的分数不正确"
fi
  • case
#!/bin/bash
case "$1" in
"start")
    echo "Begin start mysql"
;;
"stop")
    echo "Begin stop mysql"
;;
*)
    echo "Please enter the coreect command"
;;
esac

sh xxx.sh start
sh xxx.sh stop
sh xxx.sh xxx

  • 循环

do 开始循环;done 结束循环

#!/bin/bash
for i in {1,2,3,6,7,8}
do
    echo $i
done

# 1~100循环
for i in `seq 100`
do
    echo $i
done

# 循环文本内容
for i in `cat 1.txt`
do
    echo $i
done

Shell 函数详解

  • 函数的定义与使用
#!/bin/bash
# 定义一个函数
function hello(){
    echo "Hello"
}

# 调用函数
hello
  • 函数的参数传递
#!/bin/bash
# 定义一个函数
function one(){
    echo "函数的第一个参数是:$1"
}

# 调用函数
one xxx
  • 函数的返回值
#!/bin/bash
# 定义一个函数
function sum(){
    numsum=$(($1 + $2))
    return $numsum
}

# 调用函数
sum 3 5
# 打印函数结果
echo "$?"

Shell 输入输出重定向详解

  • 输入重定向
  1. vim 1.txt
#!/bin/bash
aaa
  1. read a < 1.txt
    将1.txt的内容重定向a
  2. echo $a
  • 输出重定向的覆盖

echo "bbb" > 1.txt

  • 输出重定向的追加

echo "bbb" >> 1.txt

  • 错误输出

xxx 2 > err.log
执行 xxx 所报的错会 写到 err.log中

  • 输出的信息全重定向到指定文件

xxx &> 2.txt
ls &> 2.txt

  • 不输出信息

ls > /dev/null 2>&1
/dev/null 相当于黑洞,不会记录任何信息

初级DBA必会之基础环境搭建

使用Shell编写自动部署MYSQL脚本

  1. 准备

mkdir -p /data/script/install_mysql8
/data/script/install_mysql8/ 下准备 my.cnf, mysql8.tar, mysql.server

  1. 编写脚本

cd /data/script/install_mysql8
vim install_mysql8.sh

#!/bin/bash
# 解压
if [-d "/usr/local/mysql"];then
    echo "/usr/local/mysql文件夹已经存在,请确定是否安装了MYSQL"
    exit
fi
echo "正在解压压缩包"
tar xf mysql8.tar
# 移动解压后的mysql
mv mysql8 /usr/local/mysql
echo "解压完毕"

# 创建MySQL相关目录
if [-d "/data/mysql"];then
    echo "/data/mysql文件夹已经存在,请确定是否安装了MySQL"
    exit
fi
mkdir /data/mysql/{binlog,data,log,tmpdir,conf} -p

# 判断是否有MySQL进程
mysql_pid=`ps -ef | grep mysqld|wc -l`
if [$mysql_pid -eq 1];then
    echo "MySQL进程没有运行"
else
    echo "MySQL进程运行,请检查"
fi    

# 创建MySQL用户
mysql_user=`cat /etc/passwd|grep -w mysql|wc -l`
if [$mysql_user -eq 1];then
    echo "MySQL用户已经存在"
else
    echo "MySQL用户不存在,开始添加MySQL用户"
    groupadd mysql
    useradd -g mysql mysql
    echo "添加MySQL用户成功"
fi

# 修改权限
chown -R mysql.mysql /data/mysql/
chown -R mysql.mysql /usr/local/mysql/

# 增加配置文件
cp ./my.cnf /data/mysql/conf/

# 初始化
echo "开始初始化"
/usr/local/mysql/bin/mysqld --defaults-file=/data/mysql/conf/my.cnf --user=mysql --initialize

# 判断初始化是否成功
mysql_init=`cat /data/mysql/log/mysql.err|grep -i "root@localhost:" | wc -l`
if [$mysql_init -eq 1];then
    echo "MySQL初始化成功"
else
    echo "MySQL初始化失败"
    exit
fi

# 获取临死密码
temp_pwd=$(grep 'temporary password' /data/mysql/log/mysql.err)
pwd=${temp_pwd##*}
echo "临时密码是: ${pwd}"

# 配置启动脚本
if [! -f "/etc/init.d/mysql.server"];then
    cp mysql.server /etc/int.d/ -rf
    chmod 700 /etc/init.d/mysql.server
fi

# 启动MySQL
/etc/init.d/mysql.server start

# 增加环境变量
mysql_path=`grep 'export PATH=$PATH:/usr/local/mysql/bin' /etc/profile|wc -l`
if [$mysql_path -eq 0];then
    echo "export PATH=\$PATH:/usr/local/mysql/bin" >> /etc/profile
    source /etc/profile
fi

# 通过临时密码登录MySQL并修改密码
mysql -uroot -p${pwd} --connect-expired-password -e "alter user user() identified by 'mysql';"
echo "MySQL8.0.25安装完成"
  1. 测试脚本

chmod +x install_mysql.sh
./install_mysql.sh

相关文章

网友评论

    本文标题:DBA数据库笔记之(一)Linux及Shell基础

    本文链接:https://www.haomeiwen.com/subject/jpalodtx.html