• [技术干货] 【合集】10月技术干货汇总
    Nginx、 Redis、MySQL、Linux、centos相关技术干货汇总:1、Nginx平滑升级核心原理与location配置案例详解 — 转载cid:link_52、 Linux下ping时出现unknown host问题的解决方法 — 转载cid:link_03、CentOS 7安装TigerVNC Server的流程 — 转载cid:link_14、 CentOS7安装nodejs18和yarn操作实践 — 转载cid:link_65、在CentOS 7上安装Node.js 18.20.4全过程 — 转载cid:link_76、 nginx状态码的使用及说明 — 转载cid:link_87、 Linux云服务器手动配置DNS的方法步骤 — 转载cid:link_98、Nginx搭建前端本地预览环境的完整步骤教学 — 转载cid:link_29、 Nginx实现前端重定向的三种方法介绍 — 转载cid:link_1010、 Linux本地部署DeepSeek的详细流程 — 转载cid:link_311、MySQL中OR条件查询引发索引失效的场景及解决方案 — 转载cid:link_412、SQL 中 CASE WHEN 及 SELECT CASE WHEN 的用法详解 — 转载cid:link_1113、 云服务器安装mysql后如何设置示例详解 — 转载cid:link_1214、一文详解如何基于mysql dump进行全量备份还原 — 转载cid:link_1315、Redis 基本数据类型和使用详解 — 转载https://bbs.huaweicloud.com/forum/thread-0208195355535039239-1-1.html
  • [技术干货] CentOS 7安装TigerVNC Server的流程 — 转载
    1. CentOS 7安装TigerVNC Server本文介绍如何在CentOS 7上安装VNC Server,以便远程访问。2. 安装TigerVNC Server建议使用非root用户安装,-y代表直接安装1sudo yum install -y tigervnc-server3. 配置VNC Service以下方法是新方法,以前是要配置/etc/sysconfig/vncservers,现在第一步是将默认提供的文件复制到/etc/systemd/system命令如下:1sudo cp /lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@:1.service接下来修改该配置文件1sudo vim /etc/systemd/system/vncserver@:1.service将其中<USER>替换为你想要的用户名,我这里是oracle,添加设置分辨率的参数-geometry 1280x720所有内容如下:1234567891011121314151617181920212223242526# The vncserver service unit file## Quick HowTo:# 1. Copy this file to /etc/systemd/system/vncserver@:<display>.service# 2. Edit <USER> and vncserver parameters appropriately#   ("runuser -l <USER> -c /usr/bin/vncserver %i -arg1 -arg2")# 3. Run `systemctl daemon-reload`# 4. Run `systemctl enable vncserver@:<display>.service`# . . . [Unit]Description=Remote desktop service (VNC)After=syslog.target network.target [Service]Type=forking# Clean any existing files in /tmp/.X11-unix environmentExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'ExecStart=/sbin/runuser -l oracle -c "/usr/bin/vncserver %i -geometry 1280x720"PIDFile=/home/oracle/.vnc/%H%i.pidExecStop=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :' [Install]WantedBy=multi-user.target保存文件并退出vim,重新加载配置1sudo systemctl daemon-reload也可以设置成开机启动1sudo systemctl enable vncserver@:1.service4. 修改防火墙首先判断firewalld是否启动,输入以下命令判断1sudo firewall-cmd --state如果启动应该输出1running如果是not running,执行下面命令1sudo systemctl start firewalld添加端口号5901-59051sudo firewall-cmd --permanent --zone=public --add-port=5901-5905/tcp重新加载防火墙1sudo firewall-cmd --reload可以使用下面命令查看端口号是否被加入1firewall-cmd --list-all-zones5. 设置VNC密码通过ssh,用oracle用户名登录到服务器,执行下面命令1vncserver终端会提示你输入密码,如下​You will require a password to access your desktops.Password:Verify:xauth:  file /home/oracle/.Xauthority does not existNew 'localhost.localdomain:1 (oracle)' desktop is localhost.localdomain:1Creating default startup script /home/oracle/.vnc/xstartupStarting applications specified in /home/oracle/.vnc/xstartupLog file is /home/oracle/.vnc/localhost.localdomain:1.log如果想修改密码,可以使用vncpasswd。现在已经有一个vnc服务在运行了,但我们需要使用刚刚配置的服务来启动,所以我们需要先杀死刚刚的vnc服务,使用下面命令。1vncserver -kill :1接下来,重启我们配置的服务12sudo systemctl daemon-reloadsudo systemctl restart vncserver@:1.service使用下面命令查看该服务是否正确运行1sudo systemctl status vncserver@:1.service -l如果正确启动,输出应为● vncserver@:2.service - Remote desktop service (VNC)   Loaded: loaded (/etc/systemd/system/vncserver@:2.service; enabled; vendor preset: disabled)   Active: active (running) since 日 2017-07-23 21:55:35 CST; 12h ago  Process: 8720 ExecStart=/usr/sbin/runuser -l oracle -c /usr/bin/vncserver %i -geometry 1280x720 (code=exited, status=0/SUCCESS)  Process: 8716 ExecStartPre=/bin/sh -c /usr/bin/vncserver -kill %i > /dev/null 2>&1 || : (code=exited, status=0/SUCCESS) Main PID: 8744 (Xvnc)   CGroup: /system.slice/system-vncserver.slice/vncserver@:2.service           ‣ 8744 /usr/bin/Xvnc :2 -desktop 127.0.0.1:2 (oracle) -auth /home/oracle/.Xauthority -geometry 1280x720 -rfbwait 30000 -rfbauth /home/oracle/.vnc/passwd -rfbport 5902 -fp catalogue:/etc/X11/fontpath.d -pn7月 23 21:55:32 127.0.0.1 systemd[1]: Starting Remote desktop service (VNC)...7月 23 21:55:35 127.0.0.1 systemd[1]: Started Remote desktop service (VNC).如果想配置多用户同时访问,需要将上面vncserver@:1.service,改为vncserver@:2.service,然后配置其中用户名、分辨率参数,再按我的步骤走一遍就可以了
  • [技术干货] CentOS7安装nodejs18和yarn操作实践 — 转载
    CentOS7安装nodejs18和yarn从nodejs18开始就不支持Centos7了,这是因为centos7的gilbc版本比较低,因此需要安装非官方构建的版本。Note:如果npm安装的包依赖于glibc,那得改用docker或者换操作系统了。1、到网站下载压缩包node-v18.19.0-linux-x64-glibc-217.tar.gz2、上传文件到服务器,并解压到文件夹/opt12# 将文件夹名称改短些mv node-v18.19.0-linux-x64-glibc-217  node-v183、进入/etc/profile.d文件夹,创建环境变量文件vi nodejs.sh,然后保存12export NODE_HOME=/opt/node-v18export PATH=.:$NODE_HOME/bin:$PATH重新加载环境变量source /etc/profile4、配置阿里云镜像仓库1npm config set registry=https://registry.npmmirror.com 安装yarn3npm install yarn -g默认安装的是1.22.21版本,要安装yarn3,需要先启用Corepack以下内容参考自(官网)[https://v3.yarnpkg.com/getting-started/install#nodejs-1617-or-186]12345corepack enable# 安装3.7.0corepack prepare yarn@3.7.0 --activate# 设置镜像仓库yarn config set npmRegistryServer https://registry.npmmirror.com
  • [技术干货] 在CentOS 7上安装Node.js 18.20.4全过程 — 转载
    安装1. 下载 Node.js 18访问官方网站,下载适用于 CentOS 7 的 Node.js 18 压缩包:1node-v18.20.4-linux-x64-glibc-217.tar.gz2. 上传和解压文件将下载的文件上传到 CentOS 7 服务器,并解压到 /opt 目录下:1tar -xzvf node-v18.20.4-linux-x64-glibc-217.tar.gz -C /opt3. 重命名解压后的文件夹为了方便后续操作,我们可以将解压后的文件夹重命名为更短的名称:1mv /opt/node-v18.20.4-linux-x64-glibc-217 /opt/node-v18.204. 配置环境变量接下来,我们需要配置环境变量,使系统能够识别 Node.js 命令。4.1 创建环境变量文件进入 /etc/profile.d 目录,创建一个名为 nodejs.sh 的文件:1vi /etc/profile.d/nodejs.sh4.2 添加环境变量在文件中添加以下内容:12export NODE_HOME=/opt/node-v18.20export PATH=.:$NODE_HOME/bin:$PATH4.3 重新加载环境变量保存文件后,执行以下命令以重新加载环境变量:1source /etc/profile配置 npm 镜像源在中国,由于网络环境的原因,使用官方的 npm 源可能会遇到速度慢的问题。为此,可以将 npm 的源配置为国内的一些镜像,以提高下载速度。以下是常用的 npm 镜像源设置方法:1. 淘宝源1npm config set registry https://registry.npmmirror.com2. 阿里云源1npm config set registry https://npm.aliyun.com3. 腾讯云源1npm config set registry https://mirrors.cloud.tencent.com/npm/4. 华为云源1npm config set registry https://mirrors.huaweicloud.com/repository/npm/5. 网易源1npm config set registry https://mirrors.163.com/npm/6. 中科院大学开源镜像站1npm config set registry https://mirrors.ustc.edu.cn/npm/7. 清华大学开源镜像站1npm config set registry https://mirrors.tuna.tsinghua.edu.cn/npm/8. 恢复官方 npm 源如果需要恢复到官方 npm 源,可以使用以下命令:1npm config set registry https://registry.npmjs.org验证安装安装完成后,可以通过以下命令验证 Node.js 和 npm 是否成功安装:12345[root@10-255-101-151 ~]# node -vv18.20.4[root@10-255-101-151 ~]# npm -v10.7.0[root@10-255-101-151 ~]# 注意事项如果使用 npm 安装的包依赖于 glibc,建议考虑使用 Docker 或更换操作系统。本文仅适用于 CentOS 7,其他操作系统请参考相应的安装指南。
  • [技术干货] php-fpm 启动失败 Permission denied
    Sep 12 12:17:16 centos7-os systemd[1]: start request repeated too quickly for php-fpm.service Sep 12 12:17:16 centos7-os systemd[1]: Failed to start The PHP FastCGI Process Manager. Sep 12 12:17:16 centos7-os systemd[1]: Unit php-fpm.service entered failed state. Sep 12 12:17:16 centos7-os systemd[1]: php-fpm.service failed. [root@centos7-os var]# /usr/local/php8/sbin/php-fpm -t [12-Sep-2025 12:18:24] NOTICE: configuration file /usr/local/php8/etc/php-fpm.conf test is successful [root@centos7-os var]# journalctl -u php-fpm --no-pager -n 50 -- Logs begin at Sun 2025-05-11 04:23:29 CST, end at Fri 2025-09-12 12:20:01 CST. -- Sep 12 12:17:15 centos7-os systemd[1]: Started The PHP FastCGI Process Manager. Sep 12 12:17:15 centos7-os systemd[1]: Starting The PHP FastCGI Process Manager... Sep 12 12:17:15 centos7-os php-fpm[25541]: [12-Sep-2025 12:17:15] ERROR: failed to open error_log (/usr/local/php8/var/log/php-fpm.log): Permission denied (13) Sep 12 12:17:15 centos7-os php-fpm[25541]: [12-Sep-2025 12:17:15] ERROR: failed to post process the configuration Sep 12 12:17:15 centos7-os php-fpm[25541]: [12-Sep-2025 12:17:15] ERROR: FPM initialization failed Sep 12 12:17:15 centos7-os systemd[1]: php-fpm.service: main process exited, code=exited, status=78/n/a Sep 12 12:17:15 centos7-os systemd[1]: Unit php-fpm.service entered failed state. Sep 12 12:17:15 centos7-os systemd[1]: php-fpm.service failed. Sep 12 12:17:15 centos7-os systemd[1]: php-fpm.service holdoff time over, scheduling restart. Sep 12 12:17:15 centos7-os systemd[1]: Started The PHP FastCGI Process Manager. Sep 12 12:17:15 centos7-os systemd[1]: Starting The PHP FastCGI Process Manager... Sep 12 12:17:15 centos7-os php-fpm[25544]: [12-Sep-2025 12:17:15] ERROR: failed to open error_log (/usr/local/php8/var/log/php-fpm.log): Permission denied (13) Sep 12 12:17:15 centos7-os php-fpm[25544]: [12-Sep-2025 12:17:15] ERROR: failed to post process the configuration Sep 12 12:17:15 centos7-os php-fpm[25544]: [12-Sep-2025 12:17:15] ERROR: FPM initialization failed Sep 12 12:17:15 centos7-os systemd[1]: php-fpm.service: main process exited, code=exited, status=78/n/a Sep 12 12:17:15 centos7-os systemd[1]: Unit php-fpm.service entered failed state. Sep 12 12:17:15 centos7-os systemd[1]: php-fpm.service failed. Sep 12 12:17:15 centos7-os systemd[1]: php-fpm.service holdoff time over, scheduling restart. Sep 12 12:17:15 centos7-os systemd[1]: Started The PHP FastCGI Process Manager. Sep 12 12:17:15 centos7-os systemd[1]: Starting The PHP FastCGI Process Manager... Sep 12 12:17:16 centos7-os php-fpm[25546]: [12-Sep-2025 12:17:16] ERROR: failed to open error_log (/usr/local/php8/var/log/php-fpm.log): Permission denied (13) Sep 12 12:17:16 centos7-os systemd[1]: php-fpm.service: main process exited, code=exited, status=78/n/a Sep 12 12:17:16 centos7-os systemd[1]: Unit php-fpm.service entered failed state. Sep 12 12:17:16 centos7-os systemd[1]: php-fpm.service failed. Sep 12 12:17:16 centos7-os systemd[1]: php-fpm.service holdoff time over, scheduling restart. Sep 12 12:17:16 centos7-os systemd[1]: Started The PHP FastCGI Process Manager. Sep 12 12:17:16 centos7-os systemd[1]: Starting The PHP FastCGI Process Manager... Sep 12 12:17:16 centos7-os php-fpm[25548]: [12-Sep-2025 12:17:16] ERROR: failed to open error_log (/usr/local/php8/var/log/php-fpm.log): Permission denied (13) Sep 12 12:17:16 centos7-os php-fpm[25548]: [12-Sep-2025 12:17:16] ERROR: failed to post process the configuration Sep 12 12:17:16 centos7-os php-fpm[25548]: [12-Sep-2025 12:17:16] ERROR: FPM initialization failed Sep 12 12:17:16 centos7-os systemd[1]: php-fpm.service: main process exited, code=exited, status=78/n/a Sep 12 12:17:16 centos7-os systemd[1]: Unit php-fpm.service entered failed state. Sep 12 12:17:16 centos7-os systemd[1]: php-fpm.service failed. Sep 12 12:17:16 centos7-os systemd[1]: php-fpm.service holdoff time over, scheduling restart. Sep 12 12:17:16 centos7-os systemd[1]: Started The PHP FastCGI Process Manager. Sep 12 12:17:16 centos7-os systemd[1]: Starting The PHP FastCGI Process Manager... Sep 12 12:17:16 centos7-os php-fpm[25554]: [12-Sep-2025 12:17:16] ERROR: failed to open error_log (/usr/local/php8/var/log/php-fpm.log): Permission denied (13) Sep 12 12:17:16 centos7-os php-fpm[25554]: [12-Sep-2025 12:17:16] ERROR: failed to post process the configuration Sep 12 12:17:16 centos7-os php-fpm[25554]: [12-Sep-2025 12:17:16] ERROR: FPM initialization failed Sep 12 12:17:16 centos7-os systemd[1]: php-fpm.service: main process exited, code=exited, status=78/n/a Sep 12 12:17:16 centos7-os systemd[1]: Unit php-fpm.service entered failed state. Sep 12 12:17:16 centos7-os systemd[1]: php-fpm.service failed. Sep 12 12:17:16 centos7-os systemd[1]: php-fpm.service holdoff time over, scheduling restart. Sep 12 12:17:16 centos7-os systemd[1]: start request repeated too quickly for php-fpm.service Sep 12 12:17:16 centos7-os systemd[1]: Failed to start The PHP FastCGI Process Manager. Sep 12 12:17:16 centos7-os systemd[1]: Unit php-fpm.service entered failed state. Sep 12 12:17:16 centos7-os systemd[1]: php-fpm.service failed. 从 journalctl 的日志来看,php-fpm 启动失败的根本原因是权限问题,具体表现为:ERROR: failed to open error_log (/usr/local/php8/var/log/php-fpm.log): Permission denied (13) php-fpm 进程无法写入日志文件 /usr/local/php8/var/log/php-fpm.log,导致服务初始化失败。解决方案1. 检查并修复日志文件权限# 确保日志目录存在 mkdir -p /usr/local/php8/var/log/ # 修改日志文件权限(假设 php-fpm 运行用户是 nginx 或 apache) chown -R nginx:nginx /usr/local/php8/var/log/ chmod 755 /usr/local/php8/var/log/ # 如果日志文件不存在,手动创建并设置权限 touch /usr/local/php8/var/log/php-fpm.log chown nginx:nginx /usr/local/php8/var/log/php-fpm.log chmod 644 /usr/local/php8/var/log/php-fpm.log2. 检查 php-fpm 运行用户查看 php-fpm.conf 或 www.conf(通常在 /usr/local/php8/etc/php-fpm.d/)确认运行用户:grep -E 'user|group' /usr/local/php8/etc/php-fpm.conf grep -E 'user|group' /usr/local/php8/etc/php-fpm.d/*.conf确保该用户(如 nginx、apache 或 www-data)对日志目录有写入权限。3. 检查 SELinux 状态(如果启用)# 查看 SELinux 状态 getenforce # 如果启用(Enforcing),尝试临时放宽限制 setenforce 0 # 测试 php-fpm 是否能启动 systemctl start php-fpm # 如果成功,说明是 SELinux 问题,需调整策略 chcon -R -t httpd_sys_rw_content_t /usr/local/php8/var/log/ setenforce 1 # 重新启用 SELinux 4. 清理残留进程并重启服务# 杀死残留的 php-fpm 进程 pkill php-fpm # 重置 systemd 启动限制 systemctl reset-failed php-fpm # 重新启动服务 systemctl start php-fpm systemctl status php-fpm5. 检查其他可能的问题PID 文件路径:确保 php-fpm.conf 中的 pid 路径(如 /run/php-fpm/php-fpm.pid)存在且可写:mkdir -p /run/php-fpm chown nginx:nginx /run/php-fpm端口冲突:确认 9000 端口未被占用:netstat -tulnp | grep 9000 验证修复# 检查日志是否有新错误 tail -f /usr/local/php8/var/log/php-fpm.log # 确认服务状态 systemctl status php-fpm总结根本原因:php-fpm 进程用户无权写入日志文件 /usr/local/php8/var/log/php-fpm.log。关键修复步骤:修正日志文件及目录的权限(chown + chmod)。确认 php-fpm 运行用户与权限匹配。处理 SELinux 限制(如启用)。清理残留进程并重启服务。
  • [技术干货] libjpeg-turbo-devel.x86_64 默认安装路径
    在 CentOS 7 或类似系统中,libjpeg-turbo-devel.x86_64 安装后,其开发文件(如头文件和库文件)通常位于以下标准路径:1. 头文件(.h 文件)路径:/usr/include/具体文件:jpeglib.h(核心头文件)jconfig.h、jerror.h、jmorecfg.h(辅助头文件)验证方法:ls /usr/include/jpeglib.h如果文件存在,会显示路径;否则提示“No such file”。2. 库文件(.so 动态库)路径:/usr/lib64/(64 位系统)具体文件:libjpeg.so(主库文件,可能是符号链接)libjpeg.so.62、libjpeg.so.62.3.0(版本化库文件)验证方法:ls /usr/lib64/libjpeg.so*输出应显示库文件列表,例如:/usr/lib64/libjpeg.so -> libjpeg.so.62.3.0 /usr/lib64/libjpeg.so.62 /usr/lib64/libjpeg.so.62.3.0 3. 开发文档(可选)路径:/usr/share/doc/libjpeg-turbo-devel-版本号/内容:示例代码、使用说明等(非必需,但有助于开发)。常见问题排查文件未找到:如果上述路径无文件,可能是安装未成功。尝试重新安装:sudo yum reinstall libjpeg-turbo-devel.x86_64检查安装包内容:rpm -ql libjpeg-turbo-devel.x86_64 | grep -E '\.h$|\.so$' 此命令会列出所有安装的头文件和库文件路径。路径不一致:某些系统或第三方仓库可能将文件安装到 /usr/local/include/ 或 /usr/local/lib64/。需检查这些路径:find /usr/local -name "jpeglib.h" 2>/dev/null find /usr/local -name "libjpeg.so*" 2>/dev/nullPHP 编译仍报错:确保 pkg-config 能识别 libjpeg:pkg-config --modversion libjpeg如果无输出,需手动设置 PKG_CONFIG_PATH:export PKG_CONFIG_PATH=/usr/lib64/pkgconfig:$PKG_CONFIG_PATH 或直接指定编译参数:export JPEG_CFLAGS="-I/usr/include" export JPEG_LIBS="-L/usr/lib64 -ljpeg" 总结标准安装路径:头文件:/usr/include/jpeglib.h库文件:/usr/lib64/libjpeg.so*验证命令:ls /usr/include/jpeglib.h && ls /usr/lib64/libjpeg.so*问题解决:通过 rpm -ql 或 find 定位文件,调整环境变量或编译参数。
  • [技术干货] centos7 清空日志文件
    在 CentOS 7 上清空日志文件可以释放磁盘空间并避免日志堆积导致系统问题。以下是几种常见方法:方法 1:使用 > 重定向清空单个日志文件> /var/log/filename.log示例:> /var/log/messages # 清空系统日志 > /var/log/secure # 清空安全日志(SSH 登录记录等) > /var/log/maillog # 清空邮件日志 > /var/log/cron # 清空定时任务日志 优点:快速直接,不删除文件本身(避免某些程序因文件不存在而报错)。适用于需要保留日志文件权限和所有者的情况。方法 2:使用 truncate 命令(推荐)truncate -s 0 /var/log/filename.log示例:truncate -s 0 /var/log/messages truncate -s 0 /var/log/nginx/access.log # 清空 Nginx 访问日志 优点:比 > 更高效,尤其适用于大日志文件。保留文件权限和 inode。方法 3:删除日志文件并重建(谨慎使用)rm -f /var/log/filename.log && touch /var/log/filename.log示例:rm -f /var/log/nginx/error.log && touch /var/log/nginx/error.log适用场景:需要彻底删除日志文件并重建(某些程序可能要求日志文件必须存在)。注意:删除后需确保相关服务(如 rsyslog、nginx)能自动重新创建文件。方法 4:使用 logrotate 自动清理(长期维护推荐)CentOS 7 默认使用 logrotate 管理日志轮转,可以配置定期清理旧日志。4.1 检查现有配置ls /etc/logrotate.d/ # 查看日志轮转配置文件 cat /etc/logrotate.conf # 查看全局配置 4.2 手动触发日志轮转logrotate -vf /etc/logrotate.conf # 强制轮转所有日志 logrotate -vf /etc/logrotate.d/nginx # 仅轮转 Nginx 日志 参数说明:-v:显示详细过程。-f:强制轮转(即使未达到时间/大小阈值)。4.3 自定义日志轮转规则编辑 /etc/logrotate.d/custom_log(示例):/var/log/myapp/*.log { daily missingok rotate 7 compress delaycompress notifempty create 0640 root adm sharedscripts postrotate /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true endscript }参数说明:daily:每天轮转。rotate 7:保留 7 份旧日志。compress:压缩旧日志(.gz)。notifempty:空日志不轮转。create 0640 root adm:重建日志文件并设置权限。方法 5:清理 journald 日志(Systemd 系统)如果使用 systemd-journald 管理日志:# 查看日志磁盘占用 journalctl --disk-usage # 清理 7 天前的日志 journalctl --vacuum-time=7d # 限制日志大小(例如 100M) echo "SystemMaxUse=100M" >> /etc/systemd/journald.conf systemctl restart systemd-journald常见日志文件路径日志类型路径系统日志/var/log/messages安全日志/var/log/secure邮件日志/var/log/maillog定时任务日志/var/log/cronNginx 访问日志/var/log/nginx/access.logNginx 错误日志/var/log/nginx/error.logMySQL 错误日志/var/log/mysqld.logDocker 日志/var/lib/docker/containers/*/*.log总结方法适用场景命令示例> 重定向快速清空单个日志> /var/log/messagestruncate高效清空大日志(推荐)truncate -s 0 /var/log/nginx/access.log删除并重建需要彻底重置日志文件rm -f /var/log/file.log && touch /var/log/file.loglogrotate长期自动管理日志轮转logrotate -vf /etc/logrotate.d/nginxjournalctl清理 Systemd 日志journalctl --vacuum-time=7d建议:定期检查 /var/log/ 目录大小:du -sh /var/log/。对关键服务(如 Nginx、MySQL)配置 logrotate 避免日志堆积。生产环境建议先备份日志再清理(如 cp /var/log/messages /var/log/messages.bak)。
  • [技术干货] centos history 用法详解
    在 CentOS 中,你可以通过 history 命令查看执行过的命令记录,然后重新执行其中的某条命令。以下是具体方法:1. 查看历史命令history 输出示例:100 ls -l 101 cd /tmp 102 yum install httpd 103 systemctl start httpd每条命令前的数字是 历史记录编号(如 100、101)。2. 重新执行某条历史命令方法 1:通过编号执行!<编号> 示例:重新执行编号为 102 的命令(yum install httpd):!102 方法 2:通过关键词执行!关键词示例:重新执行最近一条包含 yum 的命令:!yum方法 3:通过方向键浏览按 ↑ 或 ↓ 方向键,在终端历史记录中手动选择命令,按回车执行。3. 高级用法查看最近 N 条命令history <N> 示例:查看最近 5 条命令:history 5 清除历史记录history -c # 清除当前会话的历史记录 删除某条历史记录history -d <编号> 示例:删除编号为 102 的记录:history -d 102 4. 持久化历史记录默认情况下,history 记录存储在 ~/.bash_history 文件中,退出终端时自动保存。如果需要立即保存历史记录(不等待退出):history -a # 将当前会话的历史记录追加到文件 常见问题Q1: 为什么 !102 执行后提示 command not found?可能原因:历史记录编号不正确(先用 history 确认编号)。命令中包含特殊字符(如 *、?),需用引号包裹:!102 # 如果 102 是 `ls *.txt`,建议改用 `fc 102` 或手动输入 Q2: 如何禁用历史记录?临时禁用:unset HISTFILE 永久禁用:在 ~/.bashrc 中添加:unset HISTFILE 然后执行:source ~/.bashrc总结操作命令查看历史记录history执行编号为 N 的命令!N执行最近一条含关键词的命令!关键词查看最近 5 条命令history 5删除编号为 N 的历史记录history -d N立即保存历史记录history -a通过以上方法,你可以轻松管理和重用历史命令。
  • [技术干货] 【合集】技术干货汇总
     Redis、MySQL、Linux、centos相关技术干货汇总:1、 Redis大量数据插入过程 —转载cid:link_02、 MySQL中EXPLAIN命令的使用场景及作用解读 —转载cid:link_23、MySQL中CHAR和VARCHAR类型的区别及说明 —转载cid:link_34、 MySQL EXPLAIN中key_len使用的终极指南 —转载cid:link_15、 Linux权限管理与ACL访问控制详解 —转载cid:link_46、在Linux系统上连接GitHub的方法步骤(适用2025年) —转载cid:link_57、 linux定时top、netstat输出到文件方式 —转载cid:link_68、 在Linux中配置和使用CAN通信的详细指南 —转载cid:link_79、 centos编译安装mariadb的详细过程 —转载https://bbs.huaweicloud.com/forum/thread-0237192349738667016-1-1.html10、、PostgreSQL扩展UUID-OSSP的使用方法 —转载cid:link_8
  • [技术干货] centos编译安装mariadb的详细过程 —转载
    1:安装cmake环境安装MariaDB之前,首先要安装cmake,另外为了保证不缺依赖,使用yum或者rpm安装依赖:readline-devel,zlib-devel,openssl-devel,libaio-devel并且readline-devel依赖于ncurses-devel,如果使用yum的话会自动将所需依赖安装好,具体命令如下:12345yum -y install readline-develyum -y install zlib-develyum -y install openssl-develyum -y install libaio-develyum -y install ncurses-devel(1):进入/usr/local/download/目录1cd /usr/local/download(2):解压源码包123wget https://cmake.org/files/v3.12/cmake-3.12.0-rc1.tar.gz (3):解压CMake源码包123tar -zxvf cmake-3.12.0-rc1.tar.gz(4):进入cmark的源码目录123cd cmake-3.12.0-rc1(5):运行当前目录下的一个文件1./bootstrap(6):编译并安装(时间稍长)1gmake&&gmake install(7):查看版本号1cmake --version2:安装mariadb这个安装和php及nginx的安装类似,只是mariadb的编译是使用cmake这里提前预定mysql的安装目录为/usr/local/mariadb并且数据表文件目录为/usr/local/mariadb /mysqldata,(1):下载12cd /usr/local/downloadwget https://downloads.mariadb.org/f/mariadb-10.5.6/source/mariadb-10.5.6.tar.gz(2):创建用户及用户组12groupadd mysqluseradd -s /sbin/nologin -r -g mysql mysql(3):解压、预编译、编译安装123456789101112131415161718# 解压tar -zxvf mariadb-10.5.6.tar.gz# 进入目录cd mariadb-10.5.6# 预编译,将与cmake -j . \-DCMAKE_INSTALL_PREFIX=/usr/local/mariadb \-DMYSQL_DATADIR=/usr/local/mariadb/mysqldata/ \-DSYSCONFDIR=/usr/local/mariadb \-DMYSQL_USER=mysql \-DMYSQL_TCP_PORT=3306 \-DWITHOUT_TOKUDB=1 \-DMYSQL_UNIX_ADDR=/usr/local/mariadb/tmp/mysql.sock \-DDEFAULT_CHARSET=utf8 \-DDEFAULT_COLLATION=utf8_general_ci  # 编译安装make&&make install(4):配置启动文件及权限等12345678910111213141516171819202122232425262728293031# 进入安装目录cd /usr/local/mariadb/# 创建启动文件cp support-files/mysql.server /etc/init.d/mysqld# 添加执行权限chmod +x /etc/init.d/mysqld# 创建存放数据表目录mkdir -p mkdir /usr/local/mariadb/mysqldata/# 创建存放mysql.sock目录mkdir -p mkdir /usr/local/mariadb/tmp/# 修改mariadb目录权限chown -R mysql:mysql /usr/local/mariadb/# 创建mariadb配置文件vim /usr/local/mariadb/my.cnf[mysqld]basedir=/usr/local/mariadb/datadir=/usr/local/mariadb/mysqldata/port=3306pid-file=/usr/local/mariadb/mysqldata/mysql.pidsocket=/usr/local/mariadb/tmp/mysql.sock  [mysqld_safe]log-error=/usr/local/mariadb/mysqldata/mysql.log  [client]port=3306socket=/usr/local/mariadb/tmp/mysql.sockdefault-character-set=utf8  # 删除默认mariadb配置文件(默认加载默认的my.cnf文件,不删除,启动会报错)rm -rf /etc/my.cnf(5):数据初始化1/usr/local/mariadb/scripts/mysql_install_db --datadir=/usr/local/mariadb/mysqldata初始化成功:1234567891011121314151617181920212223242526272829303132[root@iZuf60ynur81p6k0ysvtneZ mariadb]# /usr/local/mariadb/scripts/mysql_install_db --datadir=/usr/local/mariadb/mysqldataInstalling MariaDB/MySQL system tables in '/usr/local/mariadb/mysqldata' ...OK  To start mysqld at boot time you have to copysupport-files/mysql.server to the right place for your system    Two all-privilege accounts were created.One is root@localhost, it has no password, but you need tobe system 'root' user to connect. Use, for example, sudo mysqlThe second is root@localhost, it has no password either, butyou need to be the system 'root' user to connect.After connecting you can set the password, if you would need to beable to connect as any of these users with a password and without sudo  See the MariaDB Knowledgebase at https://mariadb.com/kb or theMySQL manual for more instructions.  You can start the MariaDB daemon with:cd '.' ; ./bin/mysqld_safe --datadir='/usr/local/mariadb/mysqldata'  You can test the MariaDB daemon with mysql-test-run.plcd './mysql-test' ; perl mysql-test-run.pl  Please report any problems at https://mariadb.org/jira  The latest information about MariaDB is available at https://mariadb.org/.You can find additional information about the MySQL part at:https://dev.mysql.comConsider joining MariaDB's strong and vibrant community:https://mariadb.org/get-involved/(7):确保/usr/local/mariadb目录下的所有文件权限都是mysql1chown -R mysql:mysql /usr/local/mariadb/(8):启动mysql至此,mariadb安装成功,现在,我们来启动数据库:1/etc/init.d/mysqld start启动成功:1234[root@iZuf60ynur81p6k0ysvtneZ mariadb]# /etc/init.d/mysqld startStarting MariaDB.201015 17:26:58 mysqld_safe Logging to '/usr/local/mariadb/mysqldata/mysql.log'.201015 17:26:58 mysqld_safe Starting mariadbd daemon with databases from /usr/local/mariadb/mysqldata                                                           [  OK  ](9):简化mariadb操作命令默认操作mariadb命令:1/usr/local/mariadb/bin/mysql比较长,用着不太方便,简化方式其实和php是一样的:1vim /root/.bash_profile添加内容:1alias mysql=/usr/local/mariadb/bin/mariadb修改完成,重载一下文件:1source /root/.bash_profile或者创建软连接1ln -s /usr/local/mariadb/bin/mariadb /usr/bin/mariadb(10):链接mariadbMariadb默认没有密码,所以直接使用12345678910111213mysql -uroot -p如下所示:[root@iZuf60ynur81p6k0ysvtneZ mariadb]# mysql -uroot -pEnter password:Welcome to the MariaDB monitor.  Commands end with ; or \g.Your MariaDB connection id is 6Server version: 10.5.6-MariaDB Source distribution  Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.  Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.  MariaDB [(none)]> (11):重启服务器,运行mariadb报错:1ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/usr/local/mariadb/tmp/mysql.sock' (2)原因是找不到本地套接字文件mysql.sock默认位置是在/tmp/mysql.sock,但是我这里在my.cnf中配置了其位置:在/usr/local/mariadb/tmp/mysql.sock查看当前目录下是否有该文件,没有的话,重新启动mariadb,会自动生成mysql.sock文件,不要自己手动创建。使用如下命令:(该命令,是我在安装时已配置好)1/etc/rc.d/init.d/mysqld restart(12):设置开机启动确保rc.local 文件有执行权限,否则,开机启动不生效1vim /etc/rc.d/rc.local 添加如下内容:1/etc/rc.d/init.d/mysqld restart至此,centos编译安装mariadb完成。
  • [技术干货] CentOS 系统、数据库、网络面试知识点总结-转载
    Linux CentOS 面试知识点整理一、Linux 基础命令(一)文件和目录操作命令    功能    常用选项    示例ls    列出目录内容    -l(长格式)、-a(显示隐藏文件)、-h(易读格式)    ls -lhcd    切换目录    无    cd /etcpwd    显示当前工作目录    无    pwdmkdir    创建目录    -p(递归创建)    mkdir -p dir1/dir2/dir3rm    删除文件或目录    -r(递归删除)、-f(强制删除)    rm -rf file.txtcp    复制文件或目录    -r(递归复制)    cp -r file1 file2mv    移动或重命名文件或目录    无    mv file1 /dir面试知识点补充:批量删除特定文件类型:在实际工作中,可能需要批量删除某个目录下的特定文件类型。例如,删除所有.log文件,可以使用rm -f *.log。面试中可能会问到如何删除多个目录下的特定文件类型,可以使用find命令结合rm命令,例如find /path/to/directory -type f -name "*.log" -exec rm -f {} \;。rm -rf的谨慎使用:rm -rf命令非常强大,但也非常危险,因为它会强制删除文件或目录,且不会提示确认。面试官可能会问到如何避免误删除重要文件。一个常见的做法是使用rm -i(交互模式)进行删除,或者在脚本中添加额外的检查逻辑。cp和mv的区别:cp用于复制文件或目录,而mv用于移动或重命名文件或目录。面试中可能会问到它们的区别以及使用场景。cp适用于需要保留原始文件的情况,而mv适用于需要移动文件或重命名文件的情况。(二)文件查看和编辑命令    功能    示例cat    查看文件内容    cat file.txtmore 和 less    分页查看文件内容    less file.txthead 和 tail    查看文件头部和尾部内容    head -n 5 file.txt、tail -f file.logvi 或 vim    文本编辑器    命令模式(i进入插入模式,Esc退出,:wq保存退出)面试知识点补充:vim编辑器的高级用法:在面试中,可能会被问到vim编辑器的一些高级功能,例如使用正则表达式批量替换文本。可以使用:s/old/new/g命令替换文件中的所有old为new,或者使用:g/pattern/s/old/new/g命令只替换匹配pattern的行。日志文件的实时监控:tail -f命令用于实时查看文件的新增内容,常用于监控日志文件。面试中可能会问到如何结合grep命令过滤特定内容。例如,tail -f file.log | grep "error"可以实时显示包含error的日志内容。less和more的区别:less比more更强大,支持上下翻页和搜索功能。面试中可能会问到如何在less中搜索特定内容,可以使用/pattern向前搜索,使用?pattern向后搜索。(三)系统信息和进程管理命令    功能    示例uname    显示系统信息    uname -adf    显示磁盘空间使用情况    df -hdu    显示目录或文件的磁盘使用情况    du -sh /dirps    显示当前运行的进程    ps auxtop    实时显示系统中资源占用最高的进程    topkill    终止进程    kill -9 PIDnice 和 renice    调整进程优先级    nice -n 10 commandsystemctl    管理服务和系统状态    systemctl restart service面试知识点补充:查找占用磁盘空间最大的目录:面试中可能会问到如何查找占用磁盘空间最大的前几个目录。可以使用du -sh /dir/* | sort -rh | head -n 5命令。这个命令会列出指定目录下所有子目录的大小,并按降序排列,显示前5个最大的目录。使用ps和grep查找特定进程:面试中可能会问到如何查找特定进程。可以使用ps aux | grep process_name命令。例如,查找名为httpd的进程,可以使用ps aux | grep httpd。kill命令的信号类型:kill命令可以发送不同的信号给进程。面试中可能会问到常见的信号类型,例如SIGTERM(默认信号,请求进程终止)、SIGKILL(强制终止进程,kill -9)和SIGINT(中断信号,通常由Ctrl+C产生)。(四)网络相关命令命令    功能    示例ifconfig 或 ip    查看和配置网络接口    ip aping    测试网络连通性    ping -c 4 8.8.8.8netstat 或 ss    查看网络连接和监听端口    ss -tulncurl 或 wget    下载文件或测试HTTP请求    curl -O http://example.com/file.zip面试知识点补充:查看所有监听端口:面试中可能会问到如何查看当前系统的所有监听端口。可以使用ss -tuln命令。这个命令会列出所有TCP、UDP和监听状态的端口。使用ping和traceroute定位网络故障点:面试中可能会问到如何排查网络问题。可以使用ping命令测试网络连通性,使用traceroute命令查看数据包的传输路径。例如,traceroute 8.8.8.8可以显示到达目标IP的路径。curl命令的高级用法:curl命令不仅可以下载文件,还可以用于测试HTTP请求。面试中可能会问到如何使用curl发送POST请求。例如,curl -X POST -d "key=value" http://example.com/api可以发送一个POST请求。(五)用户和权限管理命令    功能    示例whoami    显示当前登录用户    whoamiwho    显示当前登录的用户信息    whosu    切换用户    su -useradd    创建用户    useradd usernamepasswd    设置用户密码    passwd usernamechmod    修改文件或目录的权限    chmod 755 file.txtchown    修改文件或目录的所有者    chown user:group file.txt面试知识点补充:批量创建用户:面试中可能会问到如何批量创建用户。可以使用useradd命令结合循环脚本实现。例如,使用for i in {1..10}; do useradd user$i; done可以批量创建user1到user10。设置目录的特殊权限:面试中可能会问到如何设置目录的特殊权限,例如setuid、setgid和sticky bit。可以使用chmod命令。例如,chmod +s file.txt可以设置setuid权限,chmod g+s dir可以设置setgid权限,chmod +t dir可以设置sticky bit权限。用户组管理:面试中可能会问到如何管理用户组。可以使用groupadd命令创建用户组,使用usermod命令将用户添加到用户组。例如,groupadd groupname可以创建一个用户组,usermod -aG groupname username可以将用户添加到用户组。(六)其他常用命令命令    功能    示例grep    在文件中搜索文本    grep "pattern" file.txtfind    查找文件或目录    find / -name "file.txt"history    显示命令历史    historyman    查看命令的手册页    man ls面试知识点补充:使用find命令查找特定权限的文件:面试中可能会问到如何查找具有特定权限的文件。可以使用find命令结合权限选项。例如,find / -perm 777可以查找权限为777的文件。清空命令历史:面试中可能会问到如何清空命令历史。可以使用history -c命令。此外,还可以通过编辑~/.bash_history文件来手动清空历史记录。man命令的高级用法:面试中可能会问到如何查看特定章节的手册页。可以使用man命令的章节选项。例如,man 1 ls可以查看ls命令的手册页,man 5 crontab可以查看crontab文件格式的手册页。二、数据库安装与配置(一)MySQL 安装使用yum安装MySQLsudo yum install -y mysql-community-serverAI写代码bash启动MySQL服务并设置开机自启sudo systemctl start mysqldsudo systemctl enable mysqld检查MySQL服务状态sudo systemctl status mysqld面试知识点补充:查看MySQL服务是否已经安装成功:面试中可能会问到如何查看MySQL服务是否已经安装成功。可以使用rpm -q mysql-community-server命令。如果返回mysql-community-server-版本号,则表示已安装成功。服务管理:面试中可能会问到如何查看服务的依赖关系。可以使用systemctl list-dependencies service命令。例如,systemctl list-dependencies mysqld可以查看MySQL服务的依赖关系。(二)MySQL 配置安全配置sudo mysql_secure_installationAI写代码bash1修改配置文件配置文件路径:/etc/my.cnf常见配置项:datadir、port、bind-address字符集配置[client]default-character-set = utf8mb4[mysql]default-character-set = utf8mb4[mysqld]character-set-server = utf8mb4collation-server = utf8mb4_unicode_ciAI写代码ini面试知识点补充:查看MySQL的当前字符集:面试中可能会问到如何查看MySQL的当前字符集。可以使用SHOW VARIABLES LIKE 'character_set_server';命令。动态修改MySQL配置:面试中可能会问到如何动态修改MySQL配置而无需重启服务。可以使用SET GLOBAL命令。例如,SET GLOBAL max_connections = 1000;可以动态修改最大连接数。(三)MySQL 文件路径数据文件路径:/var/lib/mysql配置文件路径:/etc/my.cnf日志文件路径:/var/log/mysql/面试知识点补充:查看MySQL的错误日志文件路径:面试中可能会问到如何查看MySQL的错误日志文件路径。可以使用SHOW VARIABLES LIKE 'log_error';命令。日志文件的自动轮转:面试中可能会问到如何设置日志文件的自动轮转。可以使用logrotate工具。例如,可以编辑/etc/logrotate.d/mysql文件,配置日志轮转策略。三、计算机网络各层详细知识点总结一、链路层(Link Layer)1. 核心概念功能:将数据封装成帧(Frame)。负责物理传输,包括信号的编码和解码。错误检测和纠正(通过CRC校验等)。流量控制(如滑动窗口机制)。提供硬件地址(MAC地址)。硬件地址(MAC地址):48位的唯一标识符,用于在局域网内识别设备。格式:XX:XX:XX:XX:XX:XX。2. 常见协议以太网(Ethernet):最常用的链路层协议,支持多种物理介质(如双绞线、光纤)。以太网帧结构:前导码(Preamble):用于同步。目标MAC地址(Destination MAC Address):6字节。源MAC地址(Source MAC Address):6字节。类型/长度字段(Type/Length):2字节。数据负载(Payload):46-1500字节。帧校验序列(FCS):4字节。无线局域网(WLAN):使用无线信号进行通信,遵循IEEE 802.11标准。支持多种加密方式(如WEP、WPA、WPA2)。点对点协议(PPP):用于点对点连接,常用于拨号上网。提供链路控制协议(LCP)和多种网络控制协议(NCP)。3. 面试问题问题1:以太网帧的结构是什么?答案:以太网帧包括前导码、目标MAC地址、源MAC地址、类型/长度字段、数据负载和帧校验序列(FCS)。问题2:如何检测和纠正链路层的错误?答案:使用循环冗余校验(CRC)进行错误检测,通过重传机制进行错误纠正。问题3:什么是MAC地址?它的作用是什么?答案:MAC地址是网络设备的唯一标识符,用于在链路层识别设备。它是一个48位的地址,通常以十六进制表示。问题4:以太网中的最小帧大小是多少?答案:以太网中的最小帧大小是64字节,包括8字节的前导码和4字节的FCS。问题5:什么是碰撞检测(CSMA/CD)?它在以太网中的作用是什么?答案:CSMA/CD(Carrier Sense Multiple Access with Collision Detection)是一种介质访问控制方法,用于检测和避免数据冲突。在以太网中,当多个设备尝试同时发送数据时,CSMA/CD机制可以检测到冲突并重新发送数据。二、网络层(Internet Layer)1. 核心概念功能:寻址:为每个网络设备分配一个唯一的IP地址。路由:根据IP地址将数据包从源主机发送到目标主机。分片和重组:将大数据包分割成小片段,以便在不同网络中传输。提供逻辑地址(IP地址)。IP地址:IPv4:32位地址,格式为A.B.C.D,分为A、B、C、D、E五类。IPv6:128位地址,格式为A:B:C:D:E:F:G:H,提供更多的地址空间。子网掩码:用于将IP地址划分为网络部分和主机部分。常见的子网掩码:255.255.255.0(/24)。2. 常见协议IP(Internet Protocol):网络层的核心协议,负责数据包的寻址和路由。IPv4:32位地址,格式为A.B.C.D。IPv6:128位地址,格式为A:B:C:D:E:F:G:H。ICMP(Internet Control Message Protocol):用于发送错误消息和操作信息。常见的ICMP消息类型:回显请求(ping)、回显应答、目的不可达。ARP(Address Resolution Protocol):将IP地址解析为MAC地址。常见的ARP消息类型:ARP请求、ARP应答。3. 面试问题问题1:IPv4和IPv6的主要区别是什么?答案:IPv4使用32位地址,而IPv6使用128位地址,提供了更多的地址空间。IPv6还支持无状态地址自动配置(SLAAC)和更好的安全性。问题2:什么是子网掩码?它的作用是什么?答案:子网掩码用于将IP地址划分为网络部分和主机部分。它帮助路由器确定数据包是否属于同一网络或需要转发到其他网络。问题3:如何查看当前主机的路由表?答案:在Linux系统中,可以使用route -n或ip route命令查看路由表。问题4:什么是CIDR(无类别域间路由)?它的作用是什么?答案:CIDR是一种IP地址的表示方法,通过子网掩码的位数来表示网络部分和主机部分。例如,192.168.1.0/24表示网络部分为192.168.1.0,子网掩码为255.255.255.0。CIDR的作用是提高IP地址的利用率,减少路由表的大小。问题5:什么是NAT(网络地址转换)?它的作用是什么?答案:NAT是一种将一个IP地址空间转换为另一个IP地址空间的技术,常用于将私有IP地址转换为公共IP地址。NAT的作用是节省公共IP地址资源,提高网络安全性。三、传输层(Transport Layer)1. 核心概念功能:提供可靠的、面向连接的传输服务(如TCP)。提供无连接的、不可靠的传输服务(如UDP)。流量控制和拥塞控制。提供端到端的通信。端口号:用于标识主机上的应用程序。范围:0-65535。常见的端口号:80(HTTP)、443(HTTPS)、22(SSH)、25(SMTP)。2. 常见协议TCP/IP 协议定义:TCP/IP 是一组用于互联网及相关网络的通信协议,包括 TCP 和 IP。层次结构:链路层:负责物理链路的管理,如以太网。网络层:负责数据包的路由和转发,主要协议是 IP。传输层:负责端到端的数据传输和可靠性保证,主要协议是 TCP 和 UDP。应用层:负责处理特定的应用程序之间的通信,主要协议是 HTTP、FTP、SMTP 等。TCP 协议特点:面向连接:在数据传输之前,必须建立一个可靠的连接。可靠传输:通过确认(ACK)、重传机制、滑动窗口等技术,确保数据的完整性和顺序性。应用场景:文件传输、网页浏览、邮件传输等。面试知识点补充:TCP 的三次握手和四次挥手过程:面试中可能会问到 TCP 的三次握手和四次挥手过程。三次握手过程如下:客户端发送一个 SYN 包到服务器,请求建立连接。服务器收到 SYN 包后,回复一个 SYN-ACK 包,确认客户端的请求。客户端收到 SYN-ACK 包后,发送一个 ACK 包到服务器,完成连接建立。四次挥手过程如下:客户端发送一个 FIN 包到服务器,请求关闭连接。服务器收到 FIN 包后,回复一个 ACK 包,确认客户端的请求。服务器发送一个 FIN 包到客户端,请求关闭连接。客户端收到 FIN 包后,发送一个 ACK 包到服务器,完成连接关闭。查看本机的 IP 地址:面试中可能会问到如何查看本机的 IP 地址。可以使用ifconfig或ip a命令。ip a命令是现代 Linux 系统中推荐使用的命令。UDP 协议定义:UDP 是一种无连接的、不可靠的传输层协议。特点:无连接:不需要建立连接,开销较小。不可靠:不提供确认和重传机制。应用场景:视频流、语音通话、游戏、DNS 查询等。面试知识点补充:UDP 和 TCP 的主要区别:面试中可能会问到 UDP 和 TCP 的主要区别。TCP 是面向连接的、可靠的传输协议,而 UDP 是无连接的、不可靠的传输协议。TCP 适用于对可靠性要求较高的场景,如文件传输和网页浏览;UDP 适用于对实时性要求较高的场景,如视频流和语音通话。使用 UDP 协议实现简单的数据传输:面试中可能会问到如何使用 UDP 协议实现简单的数据传输。可以使用netcat工具。例如,服务器端可以使用nc -u -l 1234监听 UDP 端口 1234,客户端可以使用nc -u server_ip 1234发送数据到服务器。3. 面试问题问题1:TCP和UDP的主要区别是什么?答案:TCP是面向连接的、可靠的传输协议,提供流量控制和拥塞控制,适用于对可靠性要求较高的应用。UDP是无连接的、不可靠的传输协议,适用于对实时性要求较高的应用。问题2:TCP的三次握手和四次挥手过程是什么?答案:三次握手:客户端发送一个SYN包到服务器,请求建立连接。服务器收到SYN包后,回复一个SYN-ACK包,确认客户端的请求。客户端收到SYN-ACK包后,发送一个ACK包到服务器,完成连接建立。四次挥手:客户端发送一个FIN包到服务器,请求关闭连接。服务器收到FIN包后,回复一个ACK包,确认客户端的请求。服务器发送一个FIN包到客户端,请求关闭连接。客户端收到FIN包后,发送一个ACK包到服务器,完成连接关闭。问题3:什么是滑动窗口协议?它的作用是什么?答案:滑动窗口协议是一种流量控制机制,用于控制发送方在等待确认之前可以发送的数据量。它通过动态调整窗口大小来优化网络利用率,防止发送方发送过多数据导致接收方溢出。问题4:TCP的拥塞控制机制有哪些?答案:TCP的拥塞控制机制包括慢启动(Slow Start)、拥塞避免(Congestion Avoidance)、快速重传(Fast Retransmit)和快速恢复(Fast Recovery)。问题5:UDP适用于哪些应用场景?答案:UDP适用于对实时性要求较高的应用,如视频流、语音通话、游戏和DNS查询。这些应用对延迟敏感,可以容忍一定程度的数据丢失。四、应用层(Application Layer)1. 核心概念功能:提供应用程序之间的通信接口。支持多种应用层协议,如HTTP、FTP、SMTP、DNS等。提供用户界面和应用程序逻辑。2. 常见协议HTTP协议HTTP(HyperText Transfer Protocol):定义:HTTP 是一种应用层协议,用于在客户端和服务器之间传输超文本数据。特点:无状态:每次请求都是独立的。基于 TCP:确保数据的可靠传输。请求/响应模型:客户端发送请求,服务器返回响应。请求和响应:请求行:包含请求方法(GET、POST、PUT、DELETE等)、请求的URL和HTTP版本。请求头:包含附加信息,如Host、User-Agent、Content-Type等。请求体:对于POST请求,包含要提交的数据。响应行:包含HTTP版本、状态码和状态消息。响应头:包含附加信息,如Content-Type、Content-Length等。响应体:包含服务器返回的数据,如HTML页面、JSON数据等。状态码:1xx:信息性状态码。2xx:成功状态码,如 200(请求成功)、201(资源已创建)。3xx:重定向状态码,如 301(永久重定向)、302(临时重定向)。4xx:客户端错误状态码,如 400(请求格式错误)、404(未找到资源)。5xx:服务器错误状态码,如 500(服务器内部错误)、503(服务不可用)。面试知识点补充:查看 HTTP 请求的详细信息:面试中可能会问到如何查看 HTTP 请求的详细信息。可以使用curl -v命令。例如,curl -v http://example.com可以显示 HTTP 请求和响应的详细信息。常见的 404 和 500 错误的原因及解决方法:面试中可能会问到常见的 404 和 500 错误的原因及解决方法。404 错误表示请求的资源未找到,可能是因为 URL 错误或文件不存在。500 错误表示服务器内部错误,可能是因为服务器配置错误或代码问题。解决方法包括检查 URL、检查服务器日志、检查应用程序代码等。HTTPS(HTTP Secure):特点:在HTTP基础上添加了SSL/TLS加密。应用场景:安全的网页浏览、电子商务、在线银行。FTP(File Transfer Protocol):特点:用于文件传输,支持文件上传和下载。应用场景:文件服务器、文件共享。SMTP(Simple Mail Transfer Protocol):特点:用于发送电子邮件。应用场景:邮件服务器。DNS(Domain Name System):特点:将域名解析为IP地址。应用场景:域名解析、负载均衡。3. 面试问题问题1:HTTP和HTTPS的主要区别是什么?答案:HTTPS在HTTP的基础上添加了SSL/TLS加密,确保数据传输的安全性。HTTPS使用端口443,而HTTP使用端口80。问题2:什么是HTTP状态码?常见的状态码有哪些?答案:HTTP状态码是服务器对客户端请求的响应状态的描述。常见的状态码包括:200:请求成功。301/302:重定向。400:请求格式错误。401:未授权。403:禁止访问。404:未找到资源。500:服务器内部错误。503:服务不可用。问题3:DNS的作用是什么?它是如何工作的?答案:DNS的作用是将域名解析为IP地址。当客户端请求一个域名时,DNS服务器会查找该域名对应的IP地址,并将结果返回给客户端。DNS解析过程包括递归查询和迭代查询。问题4:什么是RESTful API?它的特点是什么?答案:RESTful API是一种基于HTTP协议的网络应用程序接口,遵循REST(Representational State Transfer)架构风格。它的特点包括无状态、统一接口、资源导向、超媒体作为应用状态的引擎(HATEOAS)。问题5:什么是Web缓存?它的作用是什么?答案:Web缓存是一种存储机制,用于临时存储Web资源的副本。它的作用是减少对服务器的请求次数,提高响应速度,降低网络带宽的使用。————————————————                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。                        原文链接:https://blog.csdn.net/qq_25383607/article/details/148213617
  • [技术干货] CentOS7更换YUM源为国内源的操作步骤 --转载
    一、备份原有 YUM 源12# 备份系统默认源(避免操作失误可恢复)sudo cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak二、下载国内源配置文件任选以下一种源执行命令:阿里云镜像源1sudo wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo清华大学镜像源1sudo wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.tuna.tsinghua.edu.cn/repo/Centos-7.repo网易镜像源1sudo wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo中科大镜像源1sudo wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.ustc.edu.cn/repo/Centos-7.repo三、清理 YUM 缓存并更新12345# 清理旧缓存sudo yum clean all # 生成新缓存sudo yum makecache四、验证新源是否生效12# 查看仓库列表,确认源名称已变更sudo yum repolist成功标志:显示的仓库 URL 包含你选择的镜像源域名(如 aliyun、tuna 等)。五、测试安装软件(可选)12# 安装常用工具(如 vim),验证源可用性sudo yum install vim -y六、恢复默认源(备用)12345678# 删除国内源配置sudo rm -f /etc/yum.repos.d/CentOS-Base.repo # 还原备份文件sudo mv /etc/yum.repos.d/CentOS-Base.repo.bak /etc/yum.repos.d/CentOS-Base.repo # 清理并重建缓存sudo yum clean all && sudo yum makecache注意事项网络问题:• 若 wget 失败,检查链接是否拼写错误,或尝试 curl -O 替代。• 确保服务器网络可访问外网(部分内网环境需配置代理)。依赖冲突:• 更换源后若安装报错,尝试 sudo yum update 更新系统。多版本兼容性:• 本教程仅适用于 CentOS 7,其他版本需替换对应源的 .repo 文件链接。国内镜像源推荐优先级阿里云:稳定性高,更新及时。清华 TUNA:教育网首选,支持 IPv6。中科大:科研网络优化,响应速度快。
  • [分享交流] 下个centos7镜像下一半给我拦截了
     如图,为啥啊,好不容易找到个下载速度快的 
  • [技术干货] openEuler网络配置 -转载
     1、网卡规范名称 [root@server ~]# grubby --update-kernel ALL --args net.ifnames=0 # 内核中禁止使用net.ifnames模块,这样可以让网卡显示为ethx # 后再重启reboot,使内核生效, 网卡名则显示为eth开头 2、网卡配置文件目录         ——除RHEL9外配置网卡的配置文件目录  [root@server_node ~]# cd /etc/sysconfig/network-scripts/   [root@server_node network-scripts]# vim ifcfg-eth0 [root@server_node network-scripts]# cat ifcfg-eth0 DEVICE=eth0                    # 网卡名字 ONBOOT=yes                     # 网卡服务启动自动激活网卡 BOOTPROTO=dhcp                 # 网卡工作模式 NAME=eth0                      # 网络链接名称     [root@server_node network-scripts]# nmcli connection reload [root@server_node network-scripts]# nmcli connection up eth0 连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/42)  # 还可配置IP [root@server_node network-scripts]# vim ifcfg-eth1 [root@server_node network-scripts]# cat ifcfg-eth1 DEVICE=eth1                    # 设备名字 NAME=eth_1                     # 设备名称 ONBOOT=yes                     # 开网启动 BOOTPROTO=none                 # 工作方式 IPADDR1=172.25.254.100         # IP NETMASK=255.255.255.0          # 子网掩码 GATEWAY1=172.25.254.2          # 网关 DNS1=114.114.114.114           # DNS   [root@server_node network-scripts]# nmcli connection reload        # 法一 [root@server_node network-scripts]# nmcli connection up eth_1 [root@server_node ~]# systemctl restart NetworkManager             # 法二  3、网络配置脚本 #!/bin/bash cat >/etc/sysconfig/network-scripts/ifcfg-$1 <<EOF DEVICE=$1 ONBOOT=yes BOOTPROTO=none IPADDR1=$2 NETMASK1=255.255.255.0 DNS1=114.114.114.114 GATEWAY1=172.25.254.2 NAME=$1 EOF   nmcli connection reload nmcli connection up $1  ————————————————                              版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。                          原文链接:https://blog.csdn.net/weixin_68256171/article/details/141031954 
  • [技术干货] 移植指南(CentOS&openEuler)
    简要介绍Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。更多关于Kafka信息请参见:Kafka官网。硬件要求项目说明服务器TaiShan服务器CPU鲲鹏920处理器或鲲鹏916处理器磁盘分区对磁盘分区无要求网络可访问外网软件要求项目版本OpenJDK1.8.0_252Maven3.5.4Gradle4.10Kafka0.10.1.1CentOS系统项目版本CentOS7.6OS Kernel4.14.0GCC4.8.5openEuler系统项目版本openEuler20.03 LTS SP122.03 LTSOS Kernel4.19.90GCC7.3.0安装GCC挂载OS镜像。mount YOUR_OS.iso /media -o loop说明YOUR_OS.iso用实际的iso包名代替。备份repo文件,清空“/etc/yum.repos.d/”目录文件。cp -r /etc/yum.repos.d /etc/yum.repos.d-bak rm /etc/yum.repos.d/*须知请确认已经备份所有repo文件后,在rm删除界面输入“y”表示同意删除。配置Yum本地源。打开“/etc/yum.repos.d/Local.repo”文件。vi /etc/yum.repos.d/Local.repo按“i”进入编辑模式,在文件中添加以下内容。[Local] name=Local baseurl=file:///media/ enabled=1 gpgcheck=0按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。使Yum源配置生效。yum clean all yum makecache通过Yum源安装GCC相关软件。yum -y install gcc.aarch64 gcc-c++.aarch64 gcc-gfortran.aarch64 libgcc.aarch64修改GCC(解决-fsigned-char问题)寻找GCC所在路径(一般位于“/usr/bin/gcc”)。command -v gcc更改原GCC文件的名字(例如改成gcc-impl)。mv /usr/bin/gcc /usr/bin/gcc-impl配置GCC文件。新建GCC文件。vi /usr/bin/gcc按“i”进入编辑模式,填入如下内容。#! /bin/sh /usr/bin/gcc-impl -fsigned-char "$@"按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。给GCC文件添加可执行权限。chmod +x /usr/bin/gcc确认GCC是否可用。gcc --versionCentOS:回显如下所示即为安装成功。openEuler:回显如下所示即为安装成功。修改G++(解决-fsigned-char问题)寻找G++所在路径(一般位于“/usr/bin/g++”)。command -v g++更改原G++文件的名字(例如改成g++-impl)。mv /usr/bin/g++ /usr/bin/g++-impl配置G++文件。新建G++文件。vi /usr/bin/g++按“i”进入编辑模式,填入如下内容。#! /bin/sh /usr/bin/g++-impl -fsigned-char "$@"按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。给G++文件添加可执行权限。chmod +x /usr/bin/g++确认G++是否可用。g++ --versionCentOS:回显如下所示即为安装成功。openEuler:回显如下所示即为安装成功。安装依赖通过Yum源安装依赖的相关软件。yum install -y wget vim openssl-devel zlib-devel automake libtool make libstdc++-static glibc-static git snappy snappy-deve下载并解压安装到指定目录(此处以指定“/opt/tools/installed/”目录为例)。wget https://github.com/AdoptOpenJDK/openjdk8-binaries/releases/download/jdk8u252-b09/OpenJDK8U-jdk_aarch64_linux_hotspot_8u252b09.tar.gz tar -zxf OpenJDK8U-jdk_aarch64_linux_hotspot_8u252b09.tar.gz mkdir -p /opt/tools/installed/ mv jdk8u252-b09 /opt/tools/installed/配置Java环境变量。打开“/etc/profile”文件。vi /etc/profile按“i”进入编辑模式,在文件末尾添加如下代码。export JAVA_HOME=/opt/tools/installed/jdk8u252-b09 export PATH=$JAVA_HOME/bin:$PATH按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。使修改的环境变量生效。source /etc/profile检查OpenJDK是否安装成功。java -version回显如下所示即为安装成功。下载Gradle源码并安装到指定目录(此处以指定“/opt/tools/installed/”目录为例)。wget https://downloads.gradle.org/distributions/gradle-4.10-bin.zip --no-check-certificate unzip gradle-4.10-bin.zip mv gradle-4.10 /opt/tools/installed/修改Gradle环境变量。打开“/etc/profile”文件。vi /etc/profile按“i”进入编辑模式,在文件末尾增加下面代码。export GRADLE_HOME=/opt/tools/installed/gradle-4.10 export PATH=$GRADLE_HOME/bin:$PATH按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。使修改的环境变量生效。source /etc/profile