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字符串输出详解
- 编写脚本
- 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
# 追加内容
- chmod +x 1.sh
赋予执行权限 - ./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 输入输出重定向详解
- 输入重定向
- vim 1.txt
#!/bin/bash
aaa
- read a < 1.txt
将1.txt的内容重定向a - 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脚本
- 准备
mkdir -p /data/script/install_mysql8
/data/script/install_mysql8/ 下准备 my.cnf, mysql8.tar, mysql.server
- 编写脚本
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安装完成"
- 测试脚本
chmod +x install_mysql.sh
./install_mysql.sh
网友评论