# Work_Text **Repository Path**: MiiiA-1230/Work_Text ## Basic Information - **Project Name**: Work_Text - **Description**: 工作学习中的经历及经验总结 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-07-24 - **Last Updated**: 2025-12-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 本分支为张豪本人创建 下方沙海拾贝为零散内容,考虑后期整理 云原生服务:容器化、容器运行时、编排工具、CI/CD、微服务架构、不可变基础设施、服务网格、可观测性 GO + container.d + Kubernetes + Devops IT运维小工具 > https://666666.dev/#/ ## 注意事项: 提交格式:date + 姓名(内容) Tools文件夹中主从复制脚本似乎存在问题,可能是提交版本错误,使用时需进行修改。ssh中的playbook可以执行 ## 沙滩拾贝: windows下使用CMD查看端口或进程 > netstat -ano | findstr /i "端口号" > tasklist | findstr /i "进程号" > tasklist | findstr /i "进程名" > findstr类似grep,tasklist类似ps docker如何通过当前宿主机上部署的容器来获取容器内的jar包: > 先通过ps -ef查看该容器进程号 > 再通过cat /proc/进程号pid/cgroup查看容器id > 然后docker ps | grep 容器id > 最后用docker cp 容器id:/path/to/file /path/to/destination 如何通过ps来查看某个服务的端口: > ps aux | grep nginx > lsof -i -a -p nginx进程号 攻击方式: > 伪装成sshd 服务端,然后利用ssh协议进行文件传输 > 设置定时任务,在做一个无限递归的脚本,干扰服务器正常运行 du -sh 目标文件路径 > 查看该文件的大小(以K或M或G为单位) 使用navicat导入sql文件时无法完全导入,推测原因是导入文件过大或版本与Mysql8.0不兼容导致 > 使用mysql命令导入似乎比navicat更快更完备 能复制粘贴就别手动输入,你永远不知道Il1|丨I应该输那个 > 罗马数字1、小写l、大写I、或操作符|、中文字符丨、数字1你知道哪个是哪个吗? vim中取消自动格式 > :set no paste/:set paste ```bash set -euo pipefail # 其中的 -u 表示遇到不存在的变量就会报错 ``` > 用于增加shell脚本代码健壮性 清理内存 > sync; sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches'; 这个普通权限也可以清理内存。 > sync; echo 3 > /proc/sys/vm/drop_caches > sync:这条命令会将所有未写入磁盘的文件系统缓冲区数据同步到磁盘上,确保内存中的改动已经被保存到持久存储中。 > echo 3 > /proc/sys/vm/drop_caches:这条命令通过向/proc/sys/vm/drop_caches文件写入数字3来触发内核清理所有的缓存。数字3代表同时清理页面缓存、dentries以及inodes缓存。 rm -r在不同场景中的表现 > rm -r 在交互模式和非交互模式下,rm -r命令的删除行为是不同的。在交互模式下,rm -r命令会提示用户确认是否删除,而在非交互模式下,rm -r命令会直接删除文件。 检查脚本而不会实际执行 > bash -n > 如果脚本中有语法错误,bash -n会输出错误信息。如果没有错误信息,则表示脚本语法正确 统计状态信息并统计次数,且按照次数排序 > tail -200f xxx.txt | awk -F'~' '{print $6}' | awk -F'<' '{print $3}' | awk '{sub(/>$/, ""); print}' | sort -n | uniq -c | sort -nr 检查进程占用资源量 > top -p , 检查网线是否正常接入网卡接口 > ethtool <网卡名称> | grep "Link detected" // 显示为YES即正常连接 > ethtool -p <网卡名称> 10 // 让网卡指示灯闪烁10秒 后台启动jar包并把输出重定向到日志文件中,并在终端关闭后交给系统管理 > nohup java -jar xfxxxt-4a-93.jar > /4a.log.out_4 2>&1 & ### Redis - redis可以设置把数据存到哪,在运行权限足够高的情况下甚至可以存到root文件夹下。所以,如果用root用户运行redis,在redis被攻破的情况下就可以把ssh文件存在root下了。关键是redis的安全机制小白接触的不多,部署云服务器的时候如果没有注意,就会中招。 - redis默认没有密码,配置文件里有一个仅限本地访问的配置,而网上许多服务器部署redis的教程都要把那个限制代码删了而不说明为什么。 这样一通操作,就导致redis直接在公网裸奔。 而且新手特别喜欢用root运行redis,还不改端口号,redis可以设置文件存到哪,root下redis可以把公钥文件存到对应目录下,一旦别人扫到你的redis端口,而且又没设密码,就可以这么干了。 - redis缓存中的数据被死锁后会不停复制自己,可能需要清空缓存+重启服务的方式来保护redis缓存的安全。 ### MySQL ``` 过滤12点以来的ip访问次数(限单日日志文件) grep -E '20250421(1[2-9]|2[0-3])' interface.log | awk -F'\\|~\\|' '{ip[$4]++} END{for(i in ip) print i,ip[i]}' | sort -nrk2 在上一条中增加过滤没有报错的信息数量,若未报错信息与全部信息数量相等则无错误 grep -E '20250421(1[2-9]|2[0-3])' interface.log | grep -v 'ERROR' | awk -F'\\|~\\|' '{ip[$4]++} END{for(i in ip) print i,ip[i]}' | sort -nrk2 按ip过滤12点之后的信息 grep -E '20250421(1[2-9]|2[0-3])' interface.log | awk -F'\\|~\\|' '$4 == "10.162.4.62"' ``` ### PL/SQL: - 在WINDOWS下安装时,如需远程连接oracle服务器,可以安装instantclient或oracle本身的client。两者区别在于前者为轻量级应用,只能实现简单的命令操作,而后者可以执行复杂的命令。安装完毕后在plsql中配置oracle主目录和oci.dll地址,若仍未出现connect as选择框,且提示Make sure you have the 64 bits Oracle Client installed,应检查检查Instant Client自己对应的Microsoft Visual Studio Redistributable是否有安装。(https://blog.csdn.net/makanglei1994/article/details/86523737) ### Oracle - 在 Oracle 数据库中,更改用户密码时是否需要使用双引号取决于密码中是否包含特殊字符。具体来说:不含特殊字符的密码:不需要使用双引号;含特殊字符的密码:需要使用双引号。 ### MongoDB - 根据表中嵌套数据查询相应信息的操作命令 ```Shell db.nja_operator.find( {"organizationUnit.commonName": "xx公司"}, {"organizationUnit": 1} ) ``` ### Nginx - 隐藏服务器版本信息 ```Shell server_tokens off; ``` - SSL/TLS安全配置 ```Shell ssl_protocols TLSv1.2 TLSv1.3; ``` - 防止点击劫持 ```Shell add_header X-Frame-Options "SAMEORIGIN"; ``` - 防止跨站脚本攻击(XSS) ```Shell add_header X-XSS-Protection "1; mode=block"; ``` - 防止MIME嗅探 ```Shell add_header X-Content-Type-Options "nosniff"; ``` - 限制请求大小和超时 ```Shell client_max_body_size 10M; client_body_timeout 60; client_header_timeout 60; keep_alive_timeout 60; ``` - 防止浏览器缓存敏感信息 ```Shell add_header Cache-Control "no-cache, no-store, must-revalidate"; ``` - 设置安全的Cookie ```Shell add_header Set-Cookie "cookie_name=value; Path=/; Secure; HttpOnly"; ``` - 处理跨域请求 ```Shell if ($request_method = 'OPTIONS') {} ``` ### Prometheus - Prometheus中,其架构大致分为服务端及客户端两部分。服务端负责监控,客户端负责收集数据。以下为监控nginx中的某一接口的练手脚本(仅便于理解) ``` nginx.conf中的配置: log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; server { listen 80; location /abc123 { return 200 "Hello,abc123"; } access_log /var/log/nginx/access.log main; } ---------------------------------------------------------------------- Prometheus中的配置: scrape_configs: - job_name: 'pushgateway' static_configs: - targets: ['localhost:9091'] ---------------------------------------------------------------------- 自定义脚本内容: #!/bin/bash LOG_FILE="/var/log/nginx/access.log" PUSHGATEWAY_URL="http://localhost:9091/metrics/job/nginx" # 使用awk解析日志并计算请求次数 REQUEST_COUNT=$(awk '$7 == "/abc123" {count++} END {print count}' $LOG_FILE) # 计算QPS(假设脚本每分钟运行一次) QPS=$(awk '$7 == "/abc123" {count++} END {print count/60}' $LOG_FILE) # 检查REQUEST_COUNT是否为空 if [ -z "$REQUEST_COUNT" ]; then REQUEST_COUNT=0 fi # 检查QPS是否为空 if [ -z "$QPS" ]; then QPS=0 fi # 调试信息 echo "REQUEST_COUNT: $REQUEST_COUNT" echo "QPS: $QPS" # 发送数据到Prometheus Pushgateway echo "nginx_abc123_requests_total $REQUEST_COUNT" | curl --data-binary @- $PUSHGATEWAY_URL echo "nginx_abc123_qps $QPS" | curl --data-binary @- $PUSHGATEWAY_URL ---------------------------------------------------------------------- nginx -t systemctl reload nginx promtool check config /etc/prometheus/prometheus.yml systemctl restart prometheus crontab -e \ * * * * * /path/to/script.sh chmod +x /path/to/script.sh ``` ### GCC编译器 - 当电脑出现GCC无法进行编译的问题时,可能是因为用户名有空格导致的。 参考资料:https://cloud.tencent.com/developer/article/1685073 ## ansible.cfg的配置项 '''shell [defaults] host_key_checking = False # 方式一:忽略主机密钥检查,即SSH时取消交互式检查,无需输入yes/no ------------------------------------------------------------------- [defaults] ansible_ssh_common_args = '-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null' # 方式二:为Ansible专门配置SSH 选项,而不是全局禁用主机密钥检查 ''' ## 配置ansible主机清单 '''shell # 方式一 [web] 192.168.133.111 ansible_ssh_user=root ansible_ssh_pass=123456 192.168.133.112 ansible_ssh_user=root ansible_ssh_pass=123456 192.168.133.123 ansible_ssh_user=root ansible_ssh_pass=123456 ------------------------------------------------------------------- # 方式二 [web] 192.168.133.111 192.168.133.112 192.168.133.123 [web:vars] ansible_ssh_user=root ansible_ssh_pass=123456 ------------------------------------------------------------------- # 方式三 [web] 192.168.133.111 192.168.133.112 192.168.133.123 # 在/etc/ansible目录下创建目录group_vars,然后再创建文件web.yml,以组名命名的yml文件 vim /etc/ansible/group_vars/web.yml # 内容如下 ansible_ssh_user: root ansible_ssh_pass: 123456 '''