From cd866842dc880fe1acc6b29097c87edfa3d0b58c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?46=E4=BB=98=E8=82=96=E8=82=96?= <2182204697@qq.com> Date: Sat, 13 Jul 2024 11:02:05 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AC=94=E8=AE=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...0706\345\256\211\350\243\205postgresql.md" | 8 +- ...75\344\270\216\350\277\230\345\216\237.md" | 54 +++ ...26\347\250\213\345\205\245\351\227\250.md" | 312 ++++++++++++++++++ ...25\345\217\212\350\257\255\345\217\245.md" | 138 ++++++++ 4 files changed, 508 insertions(+), 4 deletions(-) create mode 100644 "46\344\273\230\350\202\226\350\202\226/24-0709postgresql\345\244\207\344\273\275\344\270\216\350\277\230\345\216\237.md" create mode 100644 "46\344\273\230\350\202\226\350\202\226/24-0712Shell\347\274\226\347\250\213\345\205\245\351\227\250.md" create mode 100644 "46\344\273\230\350\202\226\350\202\226/24-0712shell\344\270\255\347\232\204\346\265\213\350\257\225\345\217\212\350\257\255\345\217\245.md" diff --git "a/46\344\273\230\350\202\226\350\202\226/24-0706\345\256\211\350\243\205postgresql.md" "b/46\344\273\230\350\202\226\350\202\226/24-0706\345\256\211\350\243\205postgresql.md" index 90d9b23..93c1e5d 100644 --- "a/46\344\273\230\350\202\226\350\202\226/24-0706\345\256\211\350\243\205postgresql.md" +++ "b/46\344\273\230\350\202\226\350\202\226/24-0706\345\256\211\350\243\205postgresql.md" @@ -5,10 +5,10 @@ 1. 找到postgresql官网,linux-->debian ```bash - sudo apt install -y postgresql-common - sudo /usr/share/postgresql-common/pgdg/apt.postgresql.org.sh - 更新 sudo apt update - 下载 sudo apt install postgresql + apt install -y postgresql-common + /usr/share/postgresql-common/pgdg/apt.postgresql.org.sh + 更新 apt update + 下载 apt install postgresql 查看 whereis postgresql 查看版本 psql --version ``` diff --git "a/46\344\273\230\350\202\226\350\202\226/24-0709postgresql\345\244\207\344\273\275\344\270\216\350\277\230\345\216\237.md" "b/46\344\273\230\350\202\226\350\202\226/24-0709postgresql\345\244\207\344\273\275\344\270\216\350\277\230\345\216\237.md" new file mode 100644 index 0000000..fff9515 --- /dev/null +++ "b/46\344\273\230\350\202\226\350\202\226/24-0709postgresql\345\244\207\344\273\275\344\270\216\350\277\230\345\216\237.md" @@ -0,0 +1,54 @@ +### 备份与还原 + +- 物理备份 + + - 冷备份:停止服务,再备份 + + - 温备份: 停止写入,只能读取 + + - 热备份:不停止服务,直接备份 + +- 逻辑备份: + - 完全备份:完整的备份 + - 差异备份:有差异的备份 + - 增量备份:根据增加的量进行备份,二进制的日志 + +### postgreSQL的备份和恢复 + +```bash +#备份 +pg_dump -U postgres -d test -f /tmp/post_test.sql +pg_dump -U postgres -d test > /tmp/post_test.sql +pg_dump -U postgres -Fc test > /tmp/post_test.dump # 用pg_restore来恢复 +# 恢复 +su postgres +psql -h 127.0.0.1 -U postgres -d 要恢复的数据库 -f 备份的地址 +psql -h 127.0.0.1 -U postgres -d 要恢复的数据库 < 备份的地址 + +#备份一个或多个表 +pg_dump -U postgres -d test -t 表名1 -t 表2 > /tmp/post_test.sql +# 恢复 +su postgres +psql -h 127.0.0.1 -U postgres -d 要恢复的数据库 -f 备份的地址 +psql -h 127.0.0.1 -U postgres -d 要恢复的数据库 < 备份的地址 + +# 备份所有数据库 +pg_dumpall -U > 位置 +# 恢复所有数据库 +psql < 位置 + +# 如果加了-h 主机,就要密码,而且一般要指定-U这个选项指定用户名 + + +# 压缩备份单个数据 +pg_dump -U postgres -d test -t teacher -t student | gzip > /tmp/ts.sql.gz +# 压缩恢复单个数据库 +gunzip < /tmp/ts.sql.gz | psql -h 127.0.0.1 -U postgres -d test + +#所有 +pg_dumpall | gzip > /tmp/222.sql.gz +gunzip < /tmp/222.sql.gz | psql + +``` + + diff --git "a/46\344\273\230\350\202\226\350\202\226/24-0712Shell\347\274\226\347\250\213\345\205\245\351\227\250.md" "b/46\344\273\230\350\202\226\350\202\226/24-0712Shell\347\274\226\347\250\213\345\205\245\351\227\250.md" new file mode 100644 index 0000000..56d33a4 --- /dev/null +++ "b/46\344\273\230\350\202\226\350\202\226/24-0712Shell\347\274\226\347\250\213\345\205\245\351\227\250.md" @@ -0,0 +1,312 @@ +## 一、SHELL + +### (一)什么是shell + +Shell是一个命令的解释器,它在操作系统的最外层,负责直接将与用户进行对话,把用户输入的命令给操作系统,并处理各种各样的操作系统的输出结果,输出到屏幕反馈给用户。 + +使用SHELL的对话方式: + +1. 交互式(Interactive):用户输入一条命令,Shell 解释并执行一条。 +2. 非交互式,又叫批处理(Batch):用户事先编写一个 Shell 脚本(Script)文件,其中包含诸多命令,Shel1 会一次执行完所有命令。 + +查看当前系统支持哪些类型的shell : cat /etc/shells + + + +### (二)什么是shell脚本 + +shell脚本:就是把原来的Linux语句或命令放在一个文件中,然后通过这个程序文件去执行时,我们就说这个程序为shell脚本或shell程序,我们可以在脚本中输入一系统命令以及相关语法语句组合。 + +Shell 脚本需要用到很多的 Linux 命令以及结合之前学习过的正则表达法、管道符,重定向等语法规则来完成指定任务。把它们有机结合起来形成了一个功能强大的shell脚本。 + +#### 1.shell脚本的基本格式 + +首先来创建一个基础的脚本 + +```bash +root@class3:~# vim t.sh +#!/bin/bash +# 第一行开头"#!/bin/bash",表示此行以下的代码语句是通过/bin/bash程序来解释执行。 +# #!/bin/bash为默认的解释器还有其他类型的解释器,#!/bin/python #!/bin/expect +# this is shell +# 第二行为注释内容,以#开头为注释信息,执行时被忽略。可以写一些shell脚本的介绍 +echo "hello world" +mkdir /opt/test +touch /opt/test/a.txt +ls -l /opt +#第3+行为执行语句或命令 +``` + +shell脚本文件一般以.sh结尾 + +那么如何去执行呢? + +#### 2.执行SHELL脚本的三种方式 + +1. 脚本路径执行:可以是绝对路径,也可以是相对路径。需要权限 + + ```bash + root@class3:~# /root/t.sh #绝对路径 + root@class3:~# ./t.sh #相对路径 + # 需要权限 + root@class3:~# chmod +x t.sh + ``` + +2. shell解释器执行:指定使用bash去执行,不需要权限 + + ```bash + root@class3:~#bash t.sh + ``` + +3. source或.:也可以直接执行,不需要权限,但是会影响当前环境 + + ```bash + root@class3:~#source t.sh + root@class3:~#. t.sh + ``` + + | 执行方式 | 是否需要权限 | 是否影响当前环境 | + | :-------------- | :----------: | :--------------: | + | 脚本路径执行 | yes | no | + | shell解释器执行 | no | no | + | source或. | no | yes | + + 因为路径和shell解释器形式,其实是开一个子进程,在子进程中执行脚本,所以不会影响到原来的环境 + +#### 3.shell脚本执行逻辑 + +1. 顺序执行:程序按从上到下顺序执行 +2. 选择执行:程序执行过程中,根据条件的不同,进行选择不同分支继续执行 if +3. 循环执行:程序执行过程中需要重复执行多次某段语句 while for + + + +### (三)脚本错误调试 bash -x -n + +#### 1.命令错误 + +默认后续的命令还会继续执行,可以使用 bash -x 进行观察 + +```bash +root@class1:~# cat tt.sh +#!/bin/bash +echo 111 +eho 222 +echo 333 + +root@class1:~# bash -x tt.sh ++ echo 111 +111 ++ eho 222 +tt.sh: 行 3: eho: 未找到命令 # 检测到错误 ++ echo 333 +333 +``` + +#### 2.语法错误 + +会导致后续的命令不继续执行,可以用bash -n 检查错误,但是提示的出错行数可能会因为嵌套结构而显得不准确 + +```bash +root@class1:~# cat tt.sh +#!/bin/bash +echo 111 +eho 666 +if +echo 777 + + +root@class1:~# bash -x tt.sh # 可能发现所有错误 ++ echo 111 +111 ++ eho 666 +tt.sh: 行 3: eho: 未找到命令 +tt.sh: 行 6: 语法错误:未预期的文件结束符 +root@class1:~# bash -n tt.sh # 只能发现语法错误 +tt.sh: 行 6: 语法错误:未预期的文件结束符 +``` + +## 二、变量 + +**自定义变量 语法为** : 变量名=变量值 + +- =号两边不能有空格 +- 变量名称**不能以数字开头** +- 字符串加引号 +- 变量名前加$,表示使用变量的值 + +```bash +root@class1:~#myage=18 # 注意没有空格 +``` + +**交互式定义变量 :** read -p + +语法 : read p "提示语" 变量名 + +```bash +# 语法 : read p "提示语" 变量名 +root@class1:~# read -p "请输入一个日期" date +请输入一个日期666 +date=666 +root@class1:~# echo $date +666 + +``` + +#### **只读变量** + +只读变量在声明后不能更改其值。在Bash shell中,通过readonly 命令来声明位置变量 + +```bash +root@class1:~# readonly name=张三 +root@class1:~# echo $name +张三 +root@class1:~# name=李四 +-bash: name: 只读变量 +# 一旦建立后,无法进行追加和删除 +root@class1:~# unset name +-bash: unset: name: 无法取消设定:只读variable +``` + +#### **预定义变量** + +预定义变量是Shell在启动时就已经存在的变量,它们由系统自动初始化,并且具有特定含义和用途。例如 + +```bash +$HOME #当前用户的家目录路径。 +$USER 或 $LOGNAME #当前用户的用户名。 +$PATH #用于查找可执行文件的路径列表。 +$PWD #当前工作目录(Present Working Directory) +# 可以同过env命令进行查看当前系统有哪预定义变量 +``` + +#### **环境变量** + +环境变量是一种特殊的预定义变量,不仅在当前Shell会话中可用,还会被所有子进程继承。 + +在当前shell环境中定义的变量是无法自动被其它子进程继承的,需要通过export命令去赋予 + +#### **位置变量** + +指的是从命令行传递给脚本或函数的参数。每个参数都有一个编号,从 $0 开始,其中 $0 是脚本本身的名字,而 $1、$2、$3 等依次对应第一个、第二个、第三个参数等。 + +```bash +#!/bin/bash +echo "脚本的文件名 $0" #会打印出脚本的文件名 +echo "$1" #脚本后面的第一个参数 +echo "$2" #脚本后面的第二个参数 +echo "$3" #脚本后面的第三个参数 +echo "${10}" #脚本后面的第十个参数 + +#①:$0是一个特殊变量,它代表脚本的文件名 +#②:${10}必须用大括号括起来,否则将$看成变量,在后面加0 +#$# 参数的个数 + +!/bin/bash + 将脚本接收的第一个参数赋值给FILE变量 +read -p "请输入你要删除的文件名: " FILE +if [ $0 = $FILE ];then exit; +else + read -p "你是否真的要删除$FILE :" YN +if [ $YN = 'y' ] + then rm $FILE; echo "已删除$FILE" +else + echo "已取消删除" +fi +fi + +echo "程序退出" + + +``` + +### 特殊变量与符号 + +#### 1.符号 + +在变量中,有一些特殊符号,需要我们去掌握 + +| 符号 | 名称 | 作用 | +| ------ | ------ | ------------------- | +| " " | 双引号 | 弱引用 可以识别变量 "$name",将变量转成值 | +| ‘ ’ | 单引号 | 强引用 不能识别变量 '$name',不变值 | +| { } | 大括号 | 定义变量名的范围 ${dizhi}30 | +| \`` | 反撇 | 调用命令的执行结果 ,另一种写法$( 命令 ) \`命令` ||| + +#### 2.特殊变量 + +在预定义变量中,还存在一些特殊变量,比如在之前说到的$0就是一种特殊变量 + +| $* | 代表一个整体,把所有位置参数当成整体返回,所有参数 | +| ---- | ---------------------------------------------------------- | +| $@ | 代表独立个体,把所有位置参数当成个体返回,查询与上面的区别 | +| $? | 上一条命令的执行结果是否成功。正确为0,返回任何非0值为异常 | +| $# | 代表位置参数个数 | +| $0 | 代表当前脚本的名称 | +| $$ | 当前bash的pid | + + + +### (四)四则运算 + +加法 + + +减法 - + +乘法 \ * :*表示乘。但是因为其有特殊含义,需要加上\转义符进行转义,表达原本的意思 + +除法 / + +#### 1.expr运算 + +基本格式为:expr 变量 + 变量 (注意空格) + +```bash +expr $a+$b # 错误 +expr $a + $b +sum=$(expr $a + $b) +``` + +#### 2.使用(())运算 + +将变量a与b相加,格式为 :(( 变量名=算数表达式 )) + +```bash +(( sum=a + b )) +echo $sum +#()内可以直接调用变量,不需要加$符号 +``` + +#### 3.使用let运算 + +格式为 let 运算结果变量名=运算表达式 + +``` +let sum=$a + $b; +``` + +#### 4.方括号[ ]运算 + +语法为:运算结果变量名=$[算术表达式] + +```bash +a=1 +b=2 +sum=$[a+b] +echo $sum +``` + + + +尝试用脚本来实现一些运维的工作: + +1. 用脚本去自动备份数据库 +2. 用脚本去安装nginx, + + + +# Shell相关文档 + +https://blog.csdn.net/hy199707/article/details/135820345 + +https://www.runoob.com/linux/linux-shell.html diff --git "a/46\344\273\230\350\202\226\350\202\226/24-0712shell\344\270\255\347\232\204\346\265\213\350\257\225\345\217\212\350\257\255\345\217\245.md" "b/46\344\273\230\350\202\226\350\202\226/24-0712shell\344\270\255\347\232\204\346\265\213\350\257\225\345\217\212\350\257\255\345\217\245.md" new file mode 100644 index 0000000..f37b28f --- /dev/null +++ "b/46\344\273\230\350\202\226\350\202\226/24-0712shell\344\270\255\347\232\204\346\265\213\350\257\225\345\217\212\350\257\255\345\217\245.md" @@ -0,0 +1,138 @@ +### Shell中的测试及语句 + +#### 一:简单条件测试 + +1. 语法:[ 操作符 文件/目录 ] +2. 常用操作符 + +| -d | 测试是否为目录(Directory) | +| ---- | ------------------------------- | +| -e | 测试目录或文件是否存在(Exist) | +| -f | 测试是否为文件(File) | + +3. 测试后用$? 进行检测是否正确 + +#### 二:逻辑测试 + +1. 语法:[ 表达式1 ] 操作符 [ 表达式2 ] 或者 命令1 操作符 命令2 + +2. 常用操作符 + + - | && | 逻辑的与,"而且"的意思。 前面命令成功才会执行后面命令 | + | ---- | ------------------------------------------------------------ | + | \|\| | 逻辑的或,"或者"的意思。 第一个成功,不会执行第二个,第一个失败,第二个成功 | + | ! | 逻辑的否。 | + +#### 三:整数比较 + +1. 语法:[ 整数 操作符 整数 ] + +2. 常用操作符 + + - | -eq | 判断是否等于 | + | ---- | ------------------ | + | -ne | 判断是否不等于 | + | -gt | 判断是否大于 | + | -lt | 判断是否小于 | + | -le | 判断是否等于或小于 | + | -ge | 判断是否大于或等于 | + +#### 四:字符串比较 + +1. 语法:[字符串1 操作符 字符串2] + +2. 常用操作符 + + - | = | 比较字符串内容是否相同。 | + | ---- | ------------------------ | + | != | 比较字符串内容是否不同。 | + | z | 判断字符串内容是否为空。 | + +#### 五:条件测试语句 + +1. #### if 条件语句 + + - 单分支结构 + + ```bash + 1|if [判断条件];then + 2|需要执行的命令 + 3|fi + ``` + + - 双分支结构 + + ```bash + 1|if [判断条件];then + 2|需要执行的命令 + 3|else + 4|条件不成立时需要执行的命令 + 5|fi + ``` + + - 多分支结构 + + ```bash + 1|if [判断条件1];then + + 2|命令序列1 + + 3|elif [判断条件2];then + + 4|命令序列2 + + 5|elif 判断条件3;then + + 6|命令序列3 + + 7|else + + 8|以上条件都为假的命令序列 #托底命令 + + 9|fi + ``` + + + +2. #### case条件语句 + + ```bash + 1 case $变量名 in + 2 模式1) # 判断条件 + 3 命令1... # 判断为该模式后需要执行的命令 + 4 ;; + 5 模式2) + 6 命令2... + 7 ;; + 8 模式3|模式4) # 可以用'|'分隔多个模式进行联合匹配 + 9 命令3... + 10 ;; + 11 *) + 12 default_commands... # 匹配所有未明确列出的其他情况(可选) + 13 ;; + 14 esac # 内容的结尾格式,与if语句中的fi类似 + ``` + + + +3. #### 循环语句 + + - for 语句 + + ```bash + 1 for 变量名 in 取值列表 ;do + 2 命令序列 + 3 done + ``` + + - while语句 + + ```bash + while 判断条件 + do + 命令1 + done + #语法与if相似 + ``` + + \ No newline at end of file -- Gitee