美文网首页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