From 792a21564ae041319b9a756e979496b9ce892373 Mon Sep 17 00:00:00 2001 From: XXXX Date: Wed, 10 Jul 2024 08:26:54 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9C=80=E5=90=8E=E7=9A=84=E4=BD=9C=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../## \345\256\211\350\243\205apache.md" | 238 ++++++++++++++++++ ...67\347\273\204\347\256\241\347\220\206.md" | 129 ++++++++++ ...73\345\212\241\347\273\203\344\271\240.md" | 22 ++ ...57\345\242\203\345\217\230\351\207\217.md" | 191 ++++++++++++++ ...45\345\205\205\345\221\275\344\273\244.md" | 194 ++++++++++++++ ...07\344\273\275\350\277\230\345\216\237.md" | 86 +++++++ .../2024.7.6postgresql.md" | 109 ++++++++ ...7\344\273\275\350\277\230\345\216\2372.md" | 113 +++++++++ 8 files changed, 1082 insertions(+) create mode 100644 "\346\270\251\346\230\237\350\276\260/## \345\256\211\350\243\205apache.md" create mode 100644 "\346\270\251\346\230\237\350\276\260/2024.6.14\347\224\250\346\210\267\345\222\214\347\224\250\346\210\267\347\273\204\347\256\241\347\220\206.md" create mode 100644 "\346\270\251\346\230\237\350\276\260/2024.6.15\345\221\250\346\234\237\344\273\273\345\212\241\347\273\203\344\271\240.md" create mode 100644 "\346\270\251\346\230\237\350\276\260/2024.6.18\347\216\257\345\242\203\345\217\230\351\207\217.md" create mode 100644 "\346\270\251\346\230\237\350\276\260/2024.7.3\350\241\245\345\205\205\345\221\275\344\273\244.md" create mode 100644 "\346\270\251\346\230\237\350\276\260/2024.7.4\346\225\260\346\215\256\345\272\223\347\232\204\345\244\207\344\273\275\350\277\230\345\216\237.md" create mode 100644 "\346\270\251\346\230\237\350\276\260/2024.7.6postgresql.md" create mode 100644 "\346\270\251\346\230\237\350\276\260/20247.9\345\244\207\344\273\275\350\277\230\345\216\2372.md" diff --git "a/\346\270\251\346\230\237\350\276\260/## \345\256\211\350\243\205apache.md" "b/\346\270\251\346\230\237\350\276\260/## \345\256\211\350\243\205apache.md" new file mode 100644 index 0000000..4f76992 --- /dev/null +++ "b/\346\270\251\346\230\237\350\276\260/## \345\256\211\350\243\205apache.md" @@ -0,0 +1,238 @@ +## 安装apache + +先将网页文件备份,因为安装apache会将nginx覆盖 + +安装Apache + +```bash +apt update +apt install apache2 +``` + +因为原先安装nginx所以需要更改nginx端口或者更改apache端口 + +```bash +# 进入配置文件 +cd /etc/nginx +# 因为配置独立分开,所以配置文件不是nginx.conf,而是conf.d/域名.conf +# 将端口更改为8080 +``` + +![858f226ac1424827598bd23d8e788d9](assets/20.png) + +```bash +# 保存退出后测试配置文件并重启nginx服务 +/sbin/nginx -t +systemctl restart nginx +``` + +华为云添加安全组 + +控制台 - 安全组 + +![c29573ba1058e3ecbc072ada2d78bdc](assets/21.png) + +选择安全组 + +点击配置规则 + +![770b2fda0a02caf1730a1180f55e1eb](assets/22.png) + +点击快速添加规则 + +![c75bfb24c26ec247b9f38564ab7477d](assets/23.png) + +选择相应端口号添加即可 + +```bash +# nginx配置过ssl证书,做了https与http的重定向 +# 用http协议打开网页加上端口号可以访问 +# 但是https不行,因为暂时没有找到https更改端口号的方法,https默认端口号为443 +``` + +## 安装防火墙utw + +```bash +apt install utw +``` + + + +## apache 添加二级域名 + +### 华为云域名解析添加新的域名解析 + +#### 点击云解析服务DNS + +![25](assets\24.PNG) + +#### 点击管理解析 + +![26](assets\25.PNG) + +#### 点击添加记录集 + +![27](assets\26.PNG) + +#### 将主机记录填写新的二级域名(别名) + +![28](assets\27.PNG) + +#### 配置apache文件 + +```bash +# 进入apache配置文件的目录 +cd /etc/apache2/sites-available +# 修改配置文件000-default.conf +``` + +![29](assets\28.PNG) + +#### 测试重启服务 + +```bash +# 测试apache服务 +apache2ctl configtest +# 重启apache服务 +systemctl restart apache2 +``` + +#### 最后查看网页别名+域名 + +```bash +jh.leejaehyunow.top +``` + +可能会出现443端口冲突,记得在ports.conf将端口改成其他 + +## apache 配置SSL证书 + +#### 上传证书文件到指定路径 + +``` +# 连接 +sftp root@60.204.154.55 +# 找到路径 +``` + +可以在apache2里新建一个文件夹ssl将密钥文件放进去 + +![](assets\29.png) + +#### 修改apache配置文件 + +sites-available目录下的000-default.conf文件 + +![31](assets\30.PNG) + +```bash +# 安装证书 +SSLEngine on +SSLCertificateFile /etc/apache2/ssl/server.crt +SSLCertificateKeyFile /etc/apache2/ssl/server.key +``` + +在apache2.conf文件最后一行添加内容 + +![bf4ed8fca05f89876e6322c0d419711](assets\31.PNG) + +``` +LoadModule ssl_module modules/mod_ssl.so +``` + +#### 开启ssl模块 + +```bash +a2enmod ssl +``` + +## 安装MySQL + +#### 下载MySQL + +这个是下载mysql所以建议选好位置,可以在家目录操作 + +```bash +wget https://dev.mysql.com/get/mysql-apt-config_0.8.30-1_all.deb +dpkg -i mysql-apt-config_0.8.30-1_all.deb +``` + +#### 安装MySQL + +```bash +apt update +apt install mysql-server +``` + +如果出现报错找不到mysql-server包可以试试替换一下仓库源 + +```bash +# 进入软件源目录 +cd /etc/apt/ + +# 修改sources.list文件 +vim sources.list + +# 将内容替换 +deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye main contrib non-free +deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye main contrib non-free +deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-updates main contrib non-free +deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-updates main contrib non-free +deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-backports main contrib non-free +deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-backports main contrib non-free +deb https://mirrors.tuna.tsinghua.edu.cn/debian-security bullseye-security main contrib non-free +deb-src https://mirrors.tuna.tsinghua.edu.cn/debian-security bullseye-security main contrib non-free +``` + +![b0d51178867d47b4c5f72094e5f8973](assets\32) + +![806a34133e4295731bc003d713c1dca](\assets\33) + +![309c75e5b444a601b9401b9a0658f62](\assets\34) + +安装过程中会显示设置mysql root密码 + +#### 连接数据库 + +```bash +mysql -u root -p +``` + +## MySQL 连接远程 + +#### 进入mysql + +```bash +mysql -u root -p +``` + +#### 添加权限 + +```mysql +use mysql; +# 查看用户 +select user,host from user; +# 修改用户权限 +update user set host='%' where user='root'; +grant all privileges on *.* to 'root'@'%' with grant option; +# 更新列表 +flush privileges; +``` + +可以用native连接或者cmd连接试试 + +```bash +# cmd 连接 mysql 命令 +mysql -h 域名或ip -P mysql端口号 -u mysql用户名 -p +``` + +##### 若连接不上去华为云设置安全组添加规则 + +## 安装postgresql + +```bash +apt update +apt install postgresql -y +# 验证postgresql版本 +sudo -u postgres psql -c "SELECT version();" +``` diff --git "a/\346\270\251\346\230\237\350\276\260/2024.6.14\347\224\250\346\210\267\345\222\214\347\224\250\346\210\267\347\273\204\347\256\241\347\220\206.md" "b/\346\270\251\346\230\237\350\276\260/2024.6.14\347\224\250\346\210\267\345\222\214\347\224\250\346\210\267\347\273\204\347\256\241\347\220\206.md" new file mode 100644 index 0000000..23d4751 --- /dev/null +++ "b/\346\270\251\346\230\237\350\276\260/2024.6.14\347\224\250\346\210\267\345\222\214\347\224\250\346\210\267\347\273\204\347\256\241\347\220\206.md" @@ -0,0 +1,129 @@ +## 用户和用户组管理 + +- 用户管理 + - 添加账户 useradd -m -s /bin/bash db2 + - 删除账户 userdel -r db2 + - 修改账户 usermod [选项同添加账户] db2 + - 查看帐户 getent passwd db2 +- 用户组管理 + - 添加用户组 groupadd stu1 + - 删除用户组 groupdel stu1 + - 添加用户到用户组 usermod -aG stu1 db2 +- 密码管理 + - 设置密码 passwd +- sudo权限管理 + - usermod -aG sudo xxx + - 修改/etc/sudoers文件 +- 登录权限管理 +- 用户环境管理 + - 用户配置文件 : .bashrc + - 用户环境变量: $PATH、$HOME、$SHELL + +## 文件与目录的权限管理 + +- https://www.runoob.com/linux/linux-file-attr-permission.html + + ![20240605092950](./assets/20240605092950.png) + +- 文件类型 + - -普通文件 + - d目录 + - l连接文件 + - b c s p 等其它文件 + +- 基本权限 + - r 读 + - w 写 + - x 执行 + +- 权限表示 + - 字符表示 + - 数字表示 + - 4 代表 r + - 2 代表 w + - 1 代表 x + - 权限修改 + - chmod 修改权限 + - chown 修改拥有者 + - chgrp 修改所属组 + - 权限的继承 + - 目录权限下文件和目录的影响 + - umask + - 特权权限 + - SUID + - SGID + - SBIT + - 隐藏权限 + - i + - 用在文件上,无法对该文件进行任何修改 + - 用在目录上,无法在里面创建新文件,但可以修改已有文件 + - a + - 除了可追加内容外,无法进行其它修改 + - 隐藏权限的操作 + - 修改隐藏权限 chattr + - chattr +i XXX + - chattr -i XXX + - 查看隐藏权限 + - lsattr + + + +### 权限管理练习 + +1. 创建/guanli 目录,在/guanli下创建zonghe 和 jishu 两个目录(一条命令) +2. 添加组帐号zonghe、caiwu、jishu,GID号分别设置为2001、2002、2003 +3. 创建jerry、kylin、tsengia、obama用户,其中的kylin用户帐号在2020年12月30日后失效 +4. 将jerry、kylin、tsengia、obama等用户添加到zonghe组内 +5. 创建handy、cucci用户,其中cucci帐号的登录Shell设置为“/sbin/nologin” +6. 将handy、cucci等用户添加到jishu组内 +7. 将上述的所有用户均要求加入到guanli组内 +8. 将zonghe组内的obama用户删除 +9. 为jerry用户设置密码为“123456”(使用普通方法)为cucci用户设置密码为“redhat” +10. 将jerry用户锁定,并查看锁定状态 +11. 打开两个xshell窗口,通过(who 或者 w)命令查看连接状态,并通过fuser杀掉其中一个 +12. 查看cucci用户,属于那些组,并查看其详细信息 +13. 手工创建账号student(预留) +14. 设置权限及归属:/guanli目录属组设为guanli, /guanli/zonghe目录的属组设为zonghe /guanli/jishu目录的属组设为jishu,设置3个目录都是禁止其他用户访问的权限 +15. 建立公共目录/ceshi允许技术组内的所有用户读取、写入、执行文件, 禁止其他用户读、写、执行 +16. 清除jerry用户密码 +17. 锁定cucci用户密码并查看状态 +18. 修改obama用户的UID为8888 +19. 通过passwd命令修改kylin用户的最长密码使用期限为60天 +20. 通过id groups等命令查看用户handy信 + + + +1、创建/guanli 目录,在/guanli下创建zonghe 和 jishu 两个目录(一条命令) [root@localhost ~]# mkdir -p /guanli/zonghe &&mkdir /guanli/jishu + 2、添加组帐号zonghe、caiwu、jishu,GID号分别设置为2001、2002、2003 [root@localhost ~]# groupadd -g 2002 caiwu && groupadd -g 2003 jishu [root@localhost ~]# groupadd -g 2001 zonghe + +3、创建jerry、kylin、tsengia、obama用户,其中的kylin用户帐号在2020年12月30日后失效 [root@localhost ~]# useradd jerry && useradd -e 2020-12-30 kylin && useradd tsengia && useradd obama + +4、将jerry、kylin、tsengia、obama等用户添加到zonghe组内 [root@localhost ~]# gpasswd -M jerry,kylin,tsengia,obama zonghe + +5、创建handy、cucci用户,其中cucci帐号的登录Shell设置为“/sbin/nologin” [root@localhost ~]# useradd handy && useradd cucci [root@localhost ~]# usermod -s /sbin/nologin cucci + +6、将handy、cucci等用户添加到jishu组内 [root@localhost ~]# gpasswd -M handy,cucci jishu + +7、将上述的所有用户均要求加入到guanli组内 [root@localhost ~]# groupadd guanli [root@localhost ~]# gpasswd -M jerry,kylin,tsengia,obama,handy,cucci guanli + +8、将zonghe组内的obama用户删除 [root@localhost ~]# gpasswd -d obama zonghe 正在将用户“obama”从“zonghe”组中删除 + +9、为jerry用户设置密码为“123456”(使用普通方法) 为cucci用户设置密码为“redhat”(使用--stdin方法) [root@localhost ~]# passwd jerry 更改用户 jerry 的密码 。 新的 密码: 无效的密码: 密码少于 8 个字符 重新输入新的 密码: passwd:所有的身份验证令牌已经成功更新。 [root@localhost ~]# echo "redhat" |passwd --stdin cucci 更改用户 cucci 的密码 。 passwd:所有的身份验证令牌已经成功更新。 +10、将jerry用户锁定,并查看锁定状态 [root@localhost ~]# usermod -L jerry [root@localhost ~]# passwd -S jerry jerry LK 2019-07-30 0 99999 7 -1 (密码已被锁定。) 11、打开两个xshell窗口,通过(who 或者 w)命令查看连接状态,并通过fuser杀掉其中一个 [root@localhost ~]# w [root@localhost ~]# fuser -k /dev/pts/2 +12、查看cucci用户,属于那些组,并查看其详细信息 [root@localhost ~]# groups cucci cucci : cucci jishu guanli [root@localhost ~]# finger cucci Login: cucci Name: Directory: /home/cucci Shell: /sbin/nologin Never logged in. No mail. No Plan. +13、手工创建账号student [root@localhost ~]# vi /etc/passwd student:x:1014:1014::/home/student:/bin/bash [root@localhost ~]# vi /etc/shadow student::18107:0:99999:7::: [root@localhost ~]# vi /etc/group student:x:1014: [root@localhost ~]# mkdir /home/student [root@localhost ~]# cd /etc/skel/ [root@localhost skel]# ls -a | cp .b* /home/student/ + +14、设置权限及归属: /guanli目录属组设为guanli /guanli/zonghe目录的属组设为zonghe /guanli/jishu目录的属组设为jishu 设置3个目录都是禁止其他用户访问的权限 [root@localhost ~]# chown :guanli /guanli &&chown :zonghe /guanli/zonghe/ &&chown :jishu /guanli/jishu/ && chmod -R o-rwx /guanli/ + +15、建立公共目录/ceshi 允许技术组内的所有用户读取、写入、执行文件 禁止其他用户读、写、执行 [root@localhost ceshi]# chown :jishu /ceshi/ [root@localhost ceshi]# chmod g=rwx,o-rwx /ceshi/ + +16、清除jerry用户密码 [root@localhost ceshi]# passwd -d jerry 清除用户的密码 jerry。 passwd: 操作成功 + +17、锁定cucci用户密码并查看状态 [root@localhost ceshi]# passwd -l cucci 锁定用户 cucci 的密码 。 passwd: 操作成功 [root@localhost ceshi]# passwd -S cucci cucci LK 2019-07-30 0 99999 7 -1 (密码已被锁定。) + +18、修改obama用户的UID为8888 [root@localhost ceshi]# usermod -u 8888 obama + +19、通过passwd命令修改kylin用户的最长密码使用期限为60天 [root@localhost ceshi]# passwd -x 60 kylin 调整用户密码老化数据kylin。 passwd: 操作成功 + +20、通过id groups finger等命令查看用户handy信息 [root@localhost ceshi]# id handy uid=1012(handy) gid=1012(handy) 组=1012(handy),2003(jishu),2006(guanli) [root@localhost ceshi]# groups handy handy : handy jishu guanli [root@localhost ceshi]# finger handy Login: handy Name: Directory: /home/handy Shell: /bin/bash Never logged in. No mail. No Plan. + diff --git "a/\346\270\251\346\230\237\350\276\260/2024.6.15\345\221\250\346\234\237\344\273\273\345\212\241\347\273\203\344\271\240.md" "b/\346\270\251\346\230\237\350\276\260/2024.6.15\345\221\250\346\234\237\344\273\273\345\212\241\347\273\203\344\271\240.md" new file mode 100644 index 0000000..dc7a7df --- /dev/null +++ "b/\346\270\251\346\230\237\350\276\260/2024.6.15\345\221\250\346\234\237\344\273\273\345\212\241\347\273\203\344\271\240.md" @@ -0,0 +1,22 @@ +### 周期任务练习 + +执行在家目录touch a.txt + +1. 每天3:00执行一次 +2. 每周六2:00执行 +3. 每周六1:05执行 +4. 每周六1:25执行 +5. 每天8:40执行 +6. 每天3:50执行 +7. 每周一到周五的3:40执行 +8. 每周一到周五的3:41开始,每10分钟执行一次 +9. 每天的10:31开始,每2小时执行一次 +10. 每周一到周三的9:30执行一次 +11. 每周一到周五的8:00,每周一到周五的9:00执行一次 +12. 每天的23:45分执行一次 +13. 每周三的23:45分执行一次 +14. 每周一到周五的9:25到11:35、13:00到15:00之间,每隔10分钟执行一次 +15. 每周一到周五的8:30、8:50、9:30、10:00、10:30、11:00、11:30、13:30、14:00、14:30、5:00分别执行一次 +16. 每天16:00、10:00执行一次 +17. 每天8:10、16:00、21:00分别执行一次 +18. 每天7:47、8:00分别执行一次 \ No newline at end of file diff --git "a/\346\270\251\346\230\237\350\276\260/2024.6.18\347\216\257\345\242\203\345\217\230\351\207\217.md" "b/\346\270\251\346\230\237\350\276\260/2024.6.18\347\216\257\345\242\203\345\217\230\351\207\217.md" new file mode 100644 index 0000000..3aa8764 --- /dev/null +++ "b/\346\270\251\346\230\237\350\276\260/2024.6.18\347\216\257\345\242\203\345\217\230\351\207\217.md" @@ -0,0 +1,191 @@ +## 环境变量 + +理解和使用Linux环境变量对于管理和配置系统至关重要。以下是关键的知识点、常用场景以及示例的综合整理: + +### 1. 环境变量的类型和作用 + +- **用户级别环境变量**: + - 存储在用户家目录的个人配置文件中,例如 `~/.bashrc`、`~/.profile`。 + - 用于定义**用户个性化**的Shell设置,如别名、路径等。 + +- **系统级别环境变量**: + - 存储在系统范围的配置文件中,如 `/etc/environment`、`/etc/profile` 。 + - 为**所有用户和系统服务**提供全局的环境设置。java_home + +### 2. 环境变量的加载顺序和文件 + +- **系统启动加载**:/etc/environment + +- **登录Shell加载顺序**: + - 首先加载 `/etc/profile`,然后根据用户登录方式加载 `~/.profile`(存在性依次加载)。 + - 非登录shell: su 切换用户 等 source + +- **交互式Shell加载顺序**: + - 加载 `~/.bashrc` 或类似文件,用于设置用户个性化的Shell环境。 + - 不同的shell加载不同的文件,bash才加载.bashrc,zsh加载.zshrc + - 交互式:提供命令行窗口,非交互式:直接写在脚本里 +- **总结来说** + - 配置文件的理论加载顺序通常是 `/etc/environment` > `/etc/profile` > `~/.profile` > `~/.bashrc`。【实验】 + +### 3. 设置环境变量的方法 + +​ 设置变量的位置:命令行(临时),脚本文件(永久) + +#### 3.1 临时设置环境变量:临时变量(局部),临时环境变量(全部) + +​ 可以使用 `export` 命令来临时设置一个环境变量,例如: + +```bash +export MY_VAR="value" # export 变量名=值 环境变量是全局的,整个环境有效 +MY_VAR="value" # 少了export 就是临时变量,不是全局的 +``` + +​ 这种设置只在当前Shell会话中有效,关闭Shell会话后会失效。 + +#### 3.2 永久设置环境变量: + +​ **用户级别的** : 编辑用户的 `~/.bashrc` 或 `~/.profile` 文件,并添加如下行: + +```bash +export MY_VAR="value" +``` + +​ 保存文件后,新的设置会在下次登录时生效。 + +​ **系统级别的:** 编辑 `/etc/environment` 或 /etc/profile文件,并添加类似以下行: + +```plaintext +MY_VAR="value" +``` + +这里不需要使用 `export` 命令。保存文件后,变量会在系统启动时生效。 + +#### 3.3 环境变量的设置和使用示例 + +3.1 设置路径变量(PATH) + +```bash +# 在 ~/.bashrc 中添加 +export PATH=$PATH:/path/to/your/scripts +``` + +3.2 定义Java环境变量(JAVA_HOME) + +```bash +# 在 ~/.bashrc 或 /etc/environment 中添加 +export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 +export PATH=$JAVA_HOME/bin:$PATH +``` + +3.3 设置代理服务器(HTTP_PROXY、HTTPS_PROXY) + +```bash +# 在 ~/.bashrc 中添加 +export HTTP_PROXY=http://proxy.example.com:8080 +export HTTPS_PROXY=http://proxy.example.com:8080 +``` + +3.4 配置编辑器(EDITOR) + +```bash +# 在 ~/.bashrc 中添加 +export EDITOR=/usr/bin/vim +``` + +3.5 设置语言和地区(LANG、LC_系列变量) + +```bash +# 在 ~/.bashrc 或 /etc/environment 中添加 +export LANG=en_US.UTF-8 +export LC_ALL=en_US.UTF-8 +``` + +3.6 自定义命令别名(alias) + +```bash +# 在 ~/.bashrc 中添加 +alias ll='ls -alF' +alias grep='grep --color=auto' +``` + +3.7 设置临时环境变量 + +```bash +# 临时设置变量 +export MY_VAR="value" +``` + +### 4. 常用环境变量 + +**系统级** + +* `PATH` 可执行文件的搜索路径 +* `LANG` 定义系统的语言环境和字符集, export LANG=zh_CN.utf8,编辑文件不乱码 +* `LANGUAGE` 用于设置消息语言的优先级 ,提示语言为中文 +* `EDITOR` 默认文本编辑器 editor + +**用户级** + +* **`HOME`** :当前用户的主目录。 +* **`USER`**:当前用户名。 +* **`UID`**:当前用户的用户ID。 +* **`SHELL`**:当前用户的默认Shell。 + +### 5. 临时变量与环境变量 + +定义一个变量时,在变量名前加了export关键字,就是环境变量,作用域是全局环境子子进程中也有效,否则就是临时变量,只在当前脚本文件或shell中有效。 + +命令行示例: + +```bash +MY_NAME="张三" # 临时变量(局部) +echo $MY_NAME +bash -c 'echo $MY_NAME' +# 什么结果?对比下面的效果 + +export MY_NAME="张三" # 临时变量(全局) +echo $MY_NAME +bash -c 'echo $MY_NAME' # 子进程 +# 看下效果 +``` + + + +脚本文件示例 : + +`test1.sh` + +```bash +#!/bin/bash +MY_NAME="张三" # 前面加上export再试一次 +echo "test:我的名字是:$MY_NAME" +./subscript.sh +``` + +`test2.sh`: + +```bash +#!/bin/bash +echo "test2:你的名字是: $MY_NAME" +``` + +**临时变量**:在脚本中定义但不导出的变量仅在脚本执行期间有效,不会影响其他 shell 会话或子进程。 + +**环境变量**:使用 `export` 导出的变量在当前 shell 会话和所有子进程中都有效。 + +### 6. 总结: + +### 4.1 分类 + +#### 按生命周期分 + +- 永久环境变量 写在指定类型的配置文件,永不失效 ~/.bashrc /etc/profile.d/xxx.sh +- 临时环境变量 临时使用export 命令设置的环境变量 退出终端即失效 + +#### 按作用域分 + +* 系统级环境变量 对所有用户生效 /etc/profile.d/xxx.sh +* 用户级环境变量 只对当前用户生效 ~/.bashrc + + + diff --git "a/\346\270\251\346\230\237\350\276\260/2024.7.3\350\241\245\345\205\205\345\221\275\344\273\244.md" "b/\346\270\251\346\230\237\350\276\260/2024.7.3\350\241\245\345\205\205\345\221\275\344\273\244.md" new file mode 100644 index 0000000..e407f62 --- /dev/null +++ "b/\346\270\251\346\230\237\350\276\260/2024.7.3\350\241\245\345\205\205\345\221\275\344\273\244.md" @@ -0,0 +1,194 @@ +补充命令: + +1. 排序sort + 1. 默认是以每一行第一个字符的ASCII码,升序 + 2. 数字在字母前 + 3. -r 倒序 + 4. -k 2 比较第2列 + 5. -k2.2 比较第2列的第2个字符 + 6. 如果比较的是数字的大小,一般会-n + 7. -u 去重 +2. 去重uniq + 1. 先sort排序 + 2. 后uniq + 3. -c 显示重复次数 +3. wc -l 统计文件数|内容行数 + 1. nl + 2. cat -n + 3. vim :set nu 显示行号 +4. cut + 1. -d 指定分割符 + 2. -f 指定要显示的列 + 3. -f M,N + 4. -f M-N +5. 三贱客 + 1. grep + 1. 本意是显示匹配关键字所在的行(模糊搜索) + 2. 过滤 + 3. -A 2 后2行 + 4. -B 2 前2行 + 5. -C 2 前后2行 + 2. sed + 1. 增加 + 1. 前加 i\内容 + 1. 行加 2i\内容 + 2. 匹配加 /www/i\内容 + 2. 后加 a\内容 + 1. 行2a\内容 + 2. 匹配 /www/a\内容 + 3. 多个选项一起 -e 选项 -e 选项 + 2. 删除 + 1. d + 1. 删除行 2d + 2. 删除匹配的行 /关键字/d + 3. 修改 + 1. s/旧/新/ 将每一行第一个旧,换成新 + 2. s/旧/新/g 将每一行每一个旧,换成新 + 4. 查找 + 1. /要查找的内容/p -n + 5. 保存 + 1. -i + 3. awk + 1. awk -F 分割符 'BEGIN {动作} 条件模式 {动作} END {动作}' 文件 + 4. column -t 文件名将文件内容以表格显示 + +服务器的各种应用的安装 + +1. nginx +2. apache + 1. ssl 比较复杂 + 2. 手动启用SSL模块 + 3. 配置文件比较多 + 4. 找的教程其它版本的 + 1. 尽量少用百度,用bing + 2. ai考验关键字和问的方式 + 3. 搜索的结果,千千万。。。 + + + +数据库 + +1. 如何执行sql脚本文件 + +2. 刷经典50题。 + +3. 有余力的同学,可以刷 https://leetcode.cn/problemset/ 力扣 + +4. 配置成允许远程访问数据库 + + 1. 直接改表,新user中的要远程登录的用户的host值由localhost改成%或指定的ip + 2. 授权法 + 1. 可以控制允许的权限 + +5. 常见的错误分类: + + 1. syntax 语法问题 + + 2. access denied 访问被拒绝 , + + 3. Failed to ... start...启动失败。。。 + + 4. ### Command not found(命令不存在) + + 5. ### No such file or directory(没有这样的文件或目录) + + 6. ### Permission denied(权限不足),权限被拒绝 deny 拒绝,allow允许 + + 7. ### File exists(文件已存在) + + 8. ### Invalid argument(无效参数) invalid无效 + + 9. ### Service not found(服务未找到) Unit asdfasdf.service could not be found + + 10. ### Unable to locate package(无法找到包) Unable不能够 + + 11. Unknown 未知的 + + 12. connect 连接 + + + + + + 练习: + + 1. 继续完成mysql,postgresql的安装,(apache2) + + 2. 配置端口,开启远程访问的权限 + + 3. 刷50题或力扣题目,(同时搞定如何使用sql文件) + + 4. 如何将数据库备份和恢复 + + + + postgresql + + + + + + + + + + + + Linux的家族主流 + + 1. RedHat:redhat,centos.... + 1. yum + 2. apache :httpd + 3. .rpm + 2. Ubantu:ubantu ,dedian + 1. apt + 2. apache2 + 3. .deb 二进制的安装包。dpkg -i nginx.deb. + 3. debian 安装 。。。 + + + + 程序安装方式 + + 1. apt包管理工具,自由在线安装,自由安装需要的一些依赖包 apt install vim + 1. apt 包管理工具,软件源(菜单) install mysql + 2. + 2. 手动下载的安装包,压缩包等。要自己安装依赖包 + 1. wget http://www.xxx.com/vim 直接下载到服务器 + 2. 先下到个人电脑,用scp上传到服务器 + 3. sftp + 4. tar.gz... .deb 二进制的安装包。.exe + 3. 下载源码,再编译安装 + 4. mysql 主流版本是5.7 8.0 + 5. 版本 x.y.z + + + + + + + + 数据库的操作 + + 1. 创建数据库 + 2. 刷经典50题 + 3. 生成sql脚本文件(作业),如何在linux导入sql文件,执行它, + 4. 如何备份和恢复数据库 < > + 5. 让你的数据库可以远程登录 + 6. 数据库分 + 1. 服务端:提供数据库服务那一端。mysql-server + 2. 客户端: 连接服务器并使用数据库的那一端。cmd + 7. 如何修改端口3307 + 1. 配置文件.conf .cnf + + + + + + + + + + + + \ No newline at end of file diff --git "a/\346\270\251\346\230\237\350\276\260/2024.7.4\346\225\260\346\215\256\345\272\223\347\232\204\345\244\207\344\273\275\350\277\230\345\216\237.md" "b/\346\270\251\346\230\237\350\276\260/2024.7.4\346\225\260\346\215\256\345\272\223\347\232\204\345\244\207\344\273\275\350\277\230\345\216\237.md" new file mode 100644 index 0000000..192c911 --- /dev/null +++ "b/\346\270\251\346\230\237\350\276\260/2024.7.4\346\225\260\346\215\256\345\272\223\347\232\204\345\244\207\344\273\275\350\277\230\345\216\237.md" @@ -0,0 +1,86 @@ +1. 逻辑备份:默认情况下是,即备份结构又备份数据 + + 1. mysqldump: 单库备份,不会包含建库语句。所以恢复时要先指定数据库。 + + 1. 要么在恢复时,先指定好数据库(这个数据可以任意) + + ```bash + mysqldump -u root -p test2 > /tmp/test.sql + ``` + + 2. 指定多个库的备份,已经包含建库语句了,所以恢复时不指定数据库 + + 1. --databases 库1 库2 .. + + 2. ```bash + mysqldump -u root -p --databases test2 test3 > /tmp/test.sql + ``` + + 3. 备份所有数据库 + + 1. ```bash + mysqldump -u root -p --all-databases > /tmp/test.sql + ``` + + 4. 备份单个表 + + 1. ```bash + # mysqldump -u 用户名 -p 库名 表名> 备份的文件路径 + mysqldump -u root -p mysql_test student> /tmp/test.sql + ``` + + 5. 备份多个表 + + 1. ```bash + # mysqldump -u 用户名 -p 库名 表名1 表2 .. > 备份的文件路径 + mysqldump -u root -p mysql_test student course> /tmp/test.sql + ``` + + 6. 只备份数据库结构,但不备份数据 + + 1. ```bash + mysqldump -u root -p --no-data mysql_test > /tmp/student.sql + ``` + + 7. 只备份数据,但不备份结构 + + 1. ```bash + mysqldump -u root -p --no-create-info mysql_test > /tmp/student.sql + ``` + + 8. 备份数据库,压缩输出 + + 1. ```bash + mysqldump -u root -p mysql_test | gzip > /tmp/test.sql.gz # 先压缩再备份 + gzip -d < /tmp/test.sql.gz | mysql -u root -p # gzip -d = gunzip + gunzip < /tmp/test.sql.gz | mysql -u root -p + ``` + + + +2. 还原(导入) + + 1. mysql -u root -p 数据库名 < 要恢复的文件 (前提是这个数据库名要真实存在) + + ```bash + mysql -u root -p test2 < /tmp/test.sql + ``` + + + + 2. 登录mysql后,先选择要恢复的数据库,再用source 要恢复的文件来恢复 + + ```bash + use test2; + source /tmp/test.sql + ``` + + + +3. 商业的备份工具 + +4. phpmyadmin + +5. 第三方的连接客户端也可以备份 + +6. 想想如何实现自动备份(周期任务,预习shell脚本的写法,全量和增量的备份) \ No newline at end of file diff --git "a/\346\270\251\346\230\237\350\276\260/2024.7.6postgresql.md" "b/\346\270\251\346\230\237\350\276\260/2024.7.6postgresql.md" new file mode 100644 index 0000000..1e796cf --- /dev/null +++ "b/\346\270\251\346\230\237\350\276\260/2024.7.6postgresql.md" @@ -0,0 +1,109 @@ +1.安装mysql,简单的操作sql语句,开远程。(postgresql),安装对应的客户端 +2.如何操作sql脚本。 +3.经典50题 +4.如何去备份和恢复。 +5.如何生成1000万条数据。不管你用什么方式。告诉我你的主机完成这一项多少时间。 +6.测试查询,怎么优化。 + +1.安装PostgreSQL :apt install postgresql + +数据库和linux是我们两大技能点。 找工作的钥匙! + +DBA:DataBase Adminstrator + + + + + +1. 基本操作 + + ```postgresql + 最近一直在学习Postgresql,下面是自己整理的Postgresql的常用命令 + + + + + 本地登录postgresql,先切换到postgres这个用户 + su postgres + 再连接postgresql,用psql命令,默认什么参数和选项都不写。表示直接连接本地的数据库 + psql + + 连接数据库时可以指定用户和数据库 + psql -U user -d dbname + 本地不需要密码????不用密码! + + 列举数据库,相当于mysql的show databases + \l # list + + 切换数据库,相当于mysql的use dbname + \c dbname # change + + 列举表,相当于mysql的show tables + \dt \desc table + + 查看表结构,相当于desc tblname,show columns from tbname + \d tblname + + \di 查看索引 + + 创建数据库: + create database [数据库名]; + 删除数据库: + drop database [数据库名]; + *重命名一个表: + alter table [表名A] rename to [表名B]; + *删除一个表: + drop table [表名]; + + *在已有的表里添加字段: + alter table [表名] add column [字段名] [类型]; + *删除表中的字段: + alter table [表名] drop column [字段名]; + *重命名一个字段: + alter table [表名] rename column [字段名A] to [字段名B]; + *给一个字段设置缺省值: + alter table [表名] alter column [字段名] set default [新的默认值]; + *去除缺省值: + alter table [表名] alter column [字段名] drop default; + 在表中插入数据: + insert into 表名 ([字段名m],[字段名n],......) values ([列m的值],[列n的值],......); + 修改表中的某行某列的数据: + update [表名] set [目标字段名]=[目标值] where [该行特征]; + 删除表中某行数据: + delete from [表名] where [该行特征]; + delete from [表名];--删空整个表 + 创建表: + create table ([字段名1] [类型1] ;,[字段名2] [类型2],......<,primary key (字段名m,字段名n,...)>;); + \copyright 显示 PostgreSQL 的使用和发行条款 + \encoding [字元编码名称] + 显示或设定用户端字元编码 + \h [名称] SQL 命令语法上的说明,用 * 显示全部命令 + \prompt [文本] 名称 + 提示用户设定内部变数 + \password [USERNAME] 修改密码 + securely change the password for a user + \q 退出 psql + + ``` + + + +2. 设置远程访问 + + 1. 改两个conf + 2. 设置密码 + 3. 防火墙和安全组开放5432端口,试着改端口 + 4. 本地使用客户端去连接 + + 3.批量生成1000万条数据。各种尝试,优化查询 + + 4.其它操作同MySQL + + **注意 pg_hba.conf 的最后加密方式,不要选trust** + + + + + +​ + diff --git "a/\346\270\251\346\230\237\350\276\260/20247.9\345\244\207\344\273\275\350\277\230\345\216\2372.md" "b/\346\270\251\346\230\237\350\276\260/20247.9\345\244\207\344\273\275\350\277\230\345\216\2372.md" new file mode 100644 index 0000000..3ecb96f --- /dev/null +++ "b/\346\270\251\346\230\237\350\276\260/20247.9\345\244\207\344\273\275\350\277\230\345\216\2372.md" @@ -0,0 +1,113 @@ +备份的分类 + +- 物理 +- 逻辑备份 +- 冷备份:停止服务,再备份 +- 温备份: 停止写入。只能读取 +- 热备份:不停止服务,直接备份 +- +- 逻辑备份: + - 完全备份,全量备份 + - 差异备份 + - 增量备份:二进制的日志 + +MySQL: + +- 备份与还原 + + ```bash + # 备份单个数据库 + mysqldump -u root -p 要备份的数据库 > 保存的位置 + mysqldump -u root -p Jd50 > /tmp/t1.sql + # 恢复单个数据库 + mysql -u root -p 要还原的数据库 < 保存的位置 + # 单个数据库的恢复需要先创建好,名字任意 + mysql -u root -p Jd50 < /tmp/t1.sql + # 另一种恢复方法,先登录mysql,再use要被恢复的数据库 + source 保存的位置 + + + # 多个数据库一起备份 + mysqldump -u root -p --databases 库1 库2 ... > 保存的位置 + mysqldump -u root -p --databases u1 u2 u3 > /tmp/u234.sql + # 多个数据库一起恢复 + mysql -u root -p < 保存的位置 + mysql -u root -p < /tmp/u234.sql + # 另一种恢复方法,先登录mysql + source 保存的位置 + + + # 备份所有数据库 + mysqldump -u root -p --all-databases > 保存的位置 + # 多个数据库一起恢复 + mysql -u root -p < 保存的位置 + # 另一种恢复方法,先登录mysql + source 保存的位置 + + + # 备份某个数据库单个表 + mysqldump -u root -p 要备份的数据库 表名 > 保存的位置 + # 恢复单个数据库单个表 + mysql -u root -p 要还原的数据库 < 保存的位置 + + # 备份某个数据库多个表 + mysqldump -u root -p 要备份的数据库 表名1 表2 > 保存的位置 + # 恢复单个数据库多个表 + mysql -u root -p 要还原的数据库 < 保存的位置 + + # 备份压缩和解压缩 + mysqldump -u root -p 要备份的数据库 表名1 表2 | gzip > 保存的位置.gz + # 还原压缩包格式的备份 + # 1 + gunzip < 保存的位置.gz | mysql -u root -p + gunzip -c 保存的位置.gz | mysql -u root -p + # 2 + gzip -d < 保存的位置.gz | mysql -u root -p + gzip -cd 保存的位置.gz | mysql -u root -p + + # 逻辑备份,且是全量的,结构和数据一起备份了 + # 只备份结构,或只备份数据的等操作。。。。 + + # 尝试自己写脚本,通过周期任务实现自动备份 + ``` + + + +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 + +``` + -- Gitee