• [技术干货] pg_rman在恢复服务器上恢复源库的备份-转载
    文章目录 说明 恢复笔记 待恢复的数据库文件所在目录与文件层级如下 检查事项 具体操作 修改3: mv recovery.conf recovery.done 需要重置 wal 日志然后启库 检查效果 补充笔记(2024-02-07更新) pg_rman 安装与使用参考: pg_rman 编译安装与使用  说明 需求是能启库就行, 可以接受数据丢失, 恢复步骤有偷懒, 本文仅供个人记录笔记使用, 请不要完全照抄 规范合理的步骤是需要使用 recovery.conf 文件, 写清楚目标环境上的归档日志路径(当前提前得将源库中的wal日志拷贝到目标环境归档路径下) 来启动并恢复 恢复笔记 以 db_test 为例:  待恢复的数据库文件所在目录与文件层级如下 /data/restore/pg_restore/backups/db_test20231216/014025/backup.ini  检查事项 0.目录级别与生产环境保持一致,如果不一致, 需要自己手动创建确保一致, 1.最上级目录(20231216同级目录)存在 pg_rman.ini 2.20231216/014025下存在 file_database.txt 3.文件 20231216/014025/backup.ini 中的 STATUS=OK      -bash-4.2$ cat backup.ini     # configuration     BACKUP_MODE=FULL     WITH_SERVERLOG=false     COMPRESS_DATA=true     # result     TIMELINEID=5     START_LSN=4bb/4e000028     STOP_LSN=4bb/7e81c420     START_TIME='2023-02-15 01:35:03'     END_TIME='2023-02-15 07:42:53'     RECOVERY_XID=181372900     RECOVERY_TIME='2023-02-15 06:04:45'     TOTAL_DATA_BYTES=233395485133     READ_DATA_BYTES=233408059346     READ_ARCLOG_BYTES=32782681011     WRITE_BYTES=35758753390     BLOCK_SIZE=8192     XLOG_BLOCK_SIZE=8192     STATUS=OK  具体操作 创建恢复目录(你要将 数据库备份集恢复到哪里去), 相当于是执行了 pg_rman -B $BACKUP_PATH init mkdir -p   /data/restore/2023_pg_restore/db_test/data 1 检查待恢复的数据库文件集合是否正常, 如果显示 OK 则可以继续操作, 如果显示 RUNNING或者ERROR 则说明备份文件集合有问题, 需要重新弄一份新的 pg_rman -B /data/restore/pg_restore/backups/db_test show  具体恢复命令 (-D 指向你要将数据库文件集合恢复到哪里去) pg_rman -B /data/restore/pg_restore/backups/db_test restore -D /data/restore/2023_pg_restore/db_test/data 这里如果报 ARC_PATH 相关的错误(ERROR), 需要手动创建该目录 ,如果只是报 warning 可以先忽略 比如: mkdir -p /data/restore/2023_pg_restore/db_test/arc_log mkdir -p /data/restore/2023_pg_restore/db_test/srv_log 更新 /data/restore/pg_restore/backups/db_test/pg_rman.ini 文件  修改 配置文件 /data/restore/2023_pg_restore/db_test/data/postgresql.conf 与 /data/restore/2023_pg_restore/db_test/data/backup_label(如果存在的话) 修改1: 禁用 archive_mode 修改2: 修改 log_directory 与 data_directory 与 hba_file 配置项中的 data 值 与 /data/restore/2023_pg_restore/db_test/data 保持一致  修改3: mv recovery.conf recovery.done 修改4: mv backup_label backup_label_lxm 修改5: 将 listen_addresses= ‘10.33.45.110’ 改为 listen_addresses = ‘*’  手动启动数据库 (-D 启动哪个目录对应的数据库实例 ) pg_ctl start -D /data/restore/2023_pg_restore/db_test/data 如果还报错, 查看日志文件  -bash-4.2$ tailf /data/restore/2023_pg_restore/db_test/data/pg_log/postgresql-25.*csv 2023-12-25 15:44:37.909 HKT,,,119321,,658932e5.1d219,4,,2023-12-25 15:44:37 HKT,,0,FATAL,XX000,"could not locate required checkpoint record",,"If you are not restoring from a backup, try removing the file ""/data/restore/2023_pg_restore/db_test/data/backup_label"".",,,,,,,"" 2023-12-25 15:44:37.910 HKT,,,119317,,658932e5.1d215,1,,2023-12-25 15:44:37 HKT,,0,LOG,00000,"startup process (PID 119321) exited with exit code 1",,,,,,,,,"" 2023-12-25 15:44:37.910 HKT,,,119317,,658932e5.1d215,2,,2023-12-25 15:44:37 HKT,,0,LOG,00000,"aborting startup due to startup process failure",,,,,,,,,"" 2023-12-25 15:49:10.374 HKT,,,136964,,658933f6.21704,1,,2023-12-25 15:49:10 HKT,,0,LOG,00000,"database system was interrupted; last known up at 2023-12-16 02:17:39 HKT",,,,,,,,,"" 2023-12-25 15:49:10.375 HKT,,,136964,,658933f6.21704,2,,2023-12-25 15:49:10 HKT,,0,LOG,00000,"could not open tablespace directory ""pg_tblspc/0/PG_9.4_201409291"": No such file or directory",,,,,,,,,"" 2023-12-25 15:49:10.459 HKT,,,136964,,658933f6.21704,3,,2023-12-25 15:49:10 HKT,,0,LOG,00000,"invalid primary checkpoint record",,,,,,,,,"" 2023-12-25 15:49:10.459 HKT,,,136964,,658933f6.21704,4,,2023-12-25 15:49:10 HKT,,0,LOG,00000,"invalid secondary checkpoint record",,,,,,,,,""  FATAL,XX000,"could not locate required checkpoint record", 需要重置 wal 日志然后启库 Report bugs to <pgsql-bugs@postgresql.org>. -bash-4.2$ pg_resetxlog -f /data/restore/2023_pg_restore/db_test/data Transaction log reset -bash-4.2$  -bash-4.2$  pg_ctl start -D /data/restore/2023_pg_restore/db_test/data server starting -bash-4.2$ 2023-12-25 15:50:13 HKT::@:[138504]: LOG:  redirecting log output to logging collector process 2023-12-25 15:50:13 HKT::@:[138504]: HINT:  Future log output will appear in directory "/data/restore/2023_pg_restore/db_test/data/pg_log". 检查效果 -bash-4.2$ netstat -anp |grep 5472 (Not all processes could be identified, non-owned process info  will not be shown, you would have to be root to see it all.) tcp        0      0 0.0.0.0:5472            0.0.0.0:*               LISTEN      138504/postgres      tcp6       0      0 :::5472                 ::: *                    LISTEN      138504/postgres      unix  2      [ ACC ]     STREAM     LISTENING     2208435216 138504/postgres      /tmp/.s.PGSQL.5472 unix  3      [ ]         STREAM     CONNECTED     154721   -                     unix  3      [ ]         STREAM     CONNECTED     154720   -    -bash-4.2$ psql -p 5472 psql (9.4.14) Type "help" for help.  postgres=# \l+                                                                     List of databases    Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   |  Size   | Tablespace |                Description                  -----------+----------+----------+-------------+-------------+-----------------------+---------+------------+--------------------------------------------  db_test   | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |                       | 69 GB   | pg_default |   repmgr    | repmgr   | UTF8     | en_US.UTF-8 | en_US.UTF-8 |                       | 687 MB  | pg_default |   template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +| 6729 kB | pg_default | unmodifiable empty database            |          |          |             |             | postgres=CTc/postgres |         |            |   template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +| 8697 kB | pg_default | default template for new databases            |          |          |             |             | postgres=CTc/postgres |         |            |   补充笔记(2024-02-07更新) 1. 修改 /postgresql/hq/bk/restore/pg_restore/backups/iobs/pg_rman.ini  将 ARCLOG_PATH 值改为一个新路径, 例如/postgresql/hq/bk/restore/2023_pg_restore/iobs_new_arc_log, 需要先手动创建该路径并授予 postgres的属主权限  2. 执行 pg_rman -B /postgresql/hq/bk/restore/pg_restore/backups/iobs/ restore -D /postgresql/hq/bk/restore/2023_pg_restore/iobs_new_lxm2 >> ./res.log 2>&1 & 进行恢复  3. 检查恢复结果 tail res.log -bash-4.2$ tail res.log  LOG: (16485/16492) 00000009000010B800000014 LOG: (16486/16492) 00000009000010B800000015 LOG: (16487/16492) 00000009000010B800000016 LOG: (16488/16492) 00000009000010B800000017 LOG: (16489/16492) 00000009000010B800000018 LOG: (16490/16492) 00000009000010B800000019 LOG: (16491/16492) 00000009000010B80000001A LOG: (16492/16492) 00000009000010B80000001B LOG: backup 2024-02-24 01:35:25 is valid INFO: restore complete. Recovery starts automatically when the PostgreSQL server is started.  4.进入新的 data目录  cd /postgresql/hq/bk/restore/2023_pg_restore/iobs_new_lxm2  cp postgresql.conf postgresql.conf_bak_`date +%F`  cp recovery.conf recovery.conf_bak_`date +%F`  vim recovery.conf  将 recovery_target_timeline 值改为 'latest'  vim postgresql.conf 修改里面的相关路径 包括如下配置 -bash-4.2$ diff postgresql.conf postgresql.conf_bak_20240311  2,3c2,3 < data_directory                    ='/postgresql/hq/bk/restore/2023_pg_restore/iobs_new_lxm2' < hba_file                        ='/postgresql/hq/bk/restore/2023_pg_restore/iobs_new_lxm2/pg_hba.conf' --- > data_directory                    ='/postgresql/pg5472/data' > hba_file                        ='/postgresql/pg5472/data/pg_hba.conf' 7c7 < listen_addresses                   = '*' --- > listen_addresses                   = '10.33.45.110' 57,58c57,58 < #archive_command = 'test ! -f /postgresql/pgbackup/iobs/archlog/%f && cp %p /postgresql/pgbackup/iobs/archlog/%f' < archive_command = 'test ! -f /postgresql/hq/bk/restore/2023_pg_restore/iobs_new_arc_log/%f && cp %p /postgresql/hq/bk/restore/2023_pg_restore/iobs_new_arc_log/%f' --- > archive_command = 'test ! -f /postgresql/pgbackup/iobs/archlog/%f && cp %p /postgresql/pgbackup/iobs/archlog/%f' >  67c67 < log_directory = '/postgresql/hq/bk/restore/2023_pg_restore/iobs_new_lxm2/pg_log' --- > log_directory = '/postgresql/pg5472/data/pg_log' -bash-4.2$  5. 启动数据库 postmaster -D /postgresql/hq/bk/restore/2023_pg_restore/iobs_new_lxm2 &  6. 登录(根据配置文件中 listen_port 为 5472 -bash-4.2$ psql -p 5472 psql (9.4.14) Type "help" for help.  postgres=# show data_directory ;                   data_directory                    ---------------------------------------------------  /postgresql/hq/bk/restore/2023_pg_restore/iobs_new_lxm2 (1 row)                              版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。                          原文链接:https://blog.csdn.net/yueludanfeng/article/details/137179651 
  • [技术干货] linux之用户和权限-转载
    在 Linux 中,管理用户和权限是一个重要的方面,因为它决定了用户可以访问和修改哪些文件和程序。以下是一些关于用户和权限管理的基本命令和常见问题的解答:  如何切换用户? 使用 su (switch user) 命令可以切换用户。  示例:切换到用户 username。  su - username 如果你没有指定用户(即只输入 su),默认会切换到超级用户(root)。在切换用户时,系统通常会要求输入目标用户的密码。  如何查看当前用户? whoami  whoami 命令显示当前用户的用户名。  whoami id  id 命令显示当前用户的 UID(用户 ID)、GID(组 ID)和所属的用户组。  id 如何查看和修改文件权限? ls -l  使用 ls -l 可以查看文件的权限。  ls -l filename 输出会显示文件的权限、所有者和所属组。  chmod  chmod (change mode) 命令用于修改文件或目录的权限。  示例:给 file.txt 文件所有者添加执行权限。  chmod u+x file.txt 示例:给 file.txt 设置具体权限(所有者读写执行,组读执行,其他用户读)。  chmod 754 file.txt 如何添加或删除用户? useradd  useradd 命令用于创建新用户。  示例:添加新用户 newuser。  sudo useradd newuser userdel  userdel 命令用于删除用户。  示例:删除用户 olduser。  sudo userdel olduser 如何修改用户密码? 使用 passwd 命令可以修改用户的密码。  示例:修改当前用户的密码。  passwd 如果你是超级用户,可以为其他用户设置密码。  sudo passwd username 没有文件运行权限怎么办? 如果你试图运行一个没有执行权限的文件,你可以使用 chmod 命令为该文件添加执行权限,如上面 chmod 的例子所示。  如何查看用户所属的用户组? groups  groups 命令显示当前用户所属的所有用户组。  groups 若要查看特定用户所属的用户组:  groups username id  id 命令也可以用来查看用户所属的用户组。  id username 如何修改文件的所有者或所属组? chown  chown (change owner) 命令用于修改文件或目录的所有者。  示例:将 file.txt 的所有者更改为 newowner。  sudo chown newowner file.txt chgrp  chgrp (change group) 命令用于修改文件或目录的所属组。  示例:将 file.txt 的所属组更改为 newgroup。  sudo chgrp newgroup file.txt 如何切换到 root 用户? 使用 su 命令可以切换到 root 用户。  su - 你需要输入 root 用户的密码。如果你使用的是 sudo,可以使用以下命令切换到 root 用户:  sudo -i 或  sudo su - 在使用 sudo 时,你需要输入自己的密码,而不是 root 的密码。  这些命令和概念是 Linux 用户和权限管理的基础。管理员通常需要熟练 ————————————————                              版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。                          原文链接:https://blog.csdn.net/hebtu666/article/details/139309127 
  • [技术干货] Linux-查看服务器--硬件配置信息-转载
    在Linux服务器上查看硬件配置信息,可以使用一系列命令行工具。以下是一些常用命令来获取不同硬件组件的详细信息: 查看CPU信息: cat /proc/cpuinfo:显示处理器类型、型号、频率、核心数等详细信息。 lscpu:提供更为人性化的CPU架构和核心数量等信息。 查看内存信息:  free -h 或 free -m:显示当前系统中内存的使用情况(以合适的单位如GB或MB显示)。 dmidecode -t memory:获取更详细的内存条信息,包括插槽数量、大小、速度等。 查看硬盘信息:  fdisk -l 或 lsblk -f:列出所有磁盘及其分区情况。 hdparm -I /dev/sda(替换 /dev/sda 为你的磁盘设备名):获取SATA硬盘的详细参数。 smartctl -a /dev/sda(适用于S.M.A.R.T.支持的磁盘):获取硬盘健康状况和详细信息。 查看网络接口信息:  ip addr show 或 ifconfig(部分新系统已弃用 ifconfig):显示网络接口及IP地址配置。 ethtool eth0(替换 eth0 为你的网卡设备名):查看网络接口的详细信息,如速度、双工模式等。 查看主板、BIOS以及其他硬件信息:  lshw:全面展示系统硬件结构,包括主板、显卡、声卡等各种设备信息。 dmidecode:从DMI表中读取系统硬件信息,例如制造商、产品序列号、BIOS版本等。 查看RAID阵列信息:  对于软RAID,可以查看 /proc/mdstat 来了解MDADM管理的RAID状态。 对于硬RAID,可能需要特定厂商提供的工具,如HP Smart Array阵列则使用 hpacucli 命令。 ————————————————                              版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。                          原文链接:https://blog.csdn.net/weixin_72186894/article/details/136240066 
  • [问题求助] ABC运行环境中有一个目录使用率100%,是否会影响系统的正常运行?
    环境信息:ABC_20.3环境问题一句话总结:在进行ABC运行环境巡检时,发现下图的目录空间的使用率已达到100%,是否会影响业务系统的正常运行?此目录下的tmpfs是什么文件?能否删除?。问题现象截图:使用场景或目的:不涉及。操作步骤:无希望优化的地方或希望实现的效果:租户账号:nxx项目名称: 天津xx
  • [技术干货] Linux systemd 定时任务
    说到 Linux 定时任务,大家用得最多的就是 crond 服务,但其实 systemd 也有类似的功能。我们不但可以通过 systemd 来管理服务,还能设置定时任务,那就是 systemd timer。与 crond 相比,systemd 定时任务具有以下优点:更高的精度:systemd 定时任务可以精确到秒,而 crond 只能精确到分钟。可以限制资源使用:使用 systemd 定时任务可以设置内存和 CPU 的使用限制,比如最多使用 50% 的 CPU。更灵活的配置:systemd 定时任务可以通过条件、依赖关系等进行配置,以控制任务的执行。相比之下,crond 的配置相对简单,灵活性较低。举个例子,假设我们要通过 crond 配置多个大文件的远程备份(使用 scp、rsync 或 ftp 的方式),但由于大文件的网络传输时间不确定,因此下一个文件的备份任务开始时间几乎都是按照经验估计的。这可能导致上一个任务的网络传输尚未完成,下一个任务已经开始,同时占用网络带宽,然后又启动了下一个任务,形成恶性循环。而使用 systemd timer 可以建立任务之间的依赖关系,例如在第一个备份任务完成后再启动第二个备份任务,以此类推。systemd timer 原理systemd 定时任务基于 systemd 的单元管理器。它使用两种类型的单元来管理定时任务:.timer 单元和 .service 单元。.timer 单元:.timer 单元定义了定时规则,包括启动时间、间隔时间等。每个 .timer 单元都对应一个或多个关联的 .service 单元。.service 单元:.service 单元定义了要在计时器触发时运行的服务或命令。当 .timer 触发时,相关联的 .service 单元将被启动。systemd 定时任务原理是:systemd 定期检查每个 .timer 单元中定义的定时规则,以确定是否触发相应的定时器。一旦定时器触发,systemd 将启动与该定时器关联的 .service 单元,从而执行预定的任务。在正式介绍 systemd 定时任务之前,我们先要了解什么是单元(unit)。systemd 单元简单来讲,单元就是 systemd 的最小管理单位,是单个进程的描述。一个个单元相互调用和依赖,组成一个庞大的任务管理系统。systemd 中的 unit 有很多类型,下面是一些常见的 unit 类型:.service:service 单元,也就是我们常说的系统服务.target:target 单元,其实就是一堆 unit 的集合,比如常见的 multi-user.target.timer:timer 单元,负责定时任务。.slice:slice 单元,负责资源的分配。每个 unit 都有一个描述文件(unit 负责干什么、怎么干...),它们分散在三个目录:/lib/systemd/system:系统默认的 unit 文件/etc/systemd/system:包含用户自定义的 unit 文件,如果设置了开机自启动,则该目录下的 unit 描述文件会创建一个符号链接。/usr/lib/systemd/system:用户自己定义的 unit 文件,也会包含一些系统默认的 unit 文件大多数 linux 发行版中 /lib 是 /usr/lib的软链接,所以 1 和 3 其实是同一目录,作用自然应该是相同的。其实可以简单分成两类:/etc/systemd/system:用户自定义的 unit 文件/usr/lib/systemd/system:系统默认的 unit 文件和用户安装软件的 unit 文件# 查看所有 unit $ systemctl list-unit-files # 查看所有 Service unit $ systemctl list-unit-files --type service # 查看所有 Timer unit $ systemctl list-unit-files --type timer关于 systemd unit 相关的内容这里就不细讲了,大家可以看我之前的文章:《systemctl 命令设置开机自启动失败 》设置 systemd 定时任务有一个检查 https 证书是否过期的脚本 check_https.sh,我们现在需要系统定期执行这个脚本,除此之外,系统在开机之后也会执行这个脚本。首先创建一个 service unit[root@localhost ~]# cat /usr/lib/systemd/system/check-https.service [Unit] Description=check https certificates [Service] Type=oneshot ExecStart=check_https.sh [Install] WantedBy=multi-user.targetType=oneshot 表示 service 以一次性(Oneshot)方式运行。这意味着当启动 service 时,它将执行一次,并在完成后退出。然后我们创建一个 timer unitService unit 只是定义了如何执行任务,要定时执行这个 Service,还必须定义 Timer unit[root@localhost ~]# cat /usr/lib/systemd/system/check-https.timer [Unit] Description=Runs check https every day [Timer] OnUnitActiveSec=24h Unit=check-https.service [Install] WantedBy=multi-user.target我们着重来看下 [Timer] 部分:OnActiveSec:定时任务生效后,多少时间开始执行任务OnBootSec:系统启动后,多少时间开始执行任务OnStartupSec:Systemd 进程启动后,多少时间开始执行任务OnUnitActiveSec:该 unit 上次执行后,等多少时间再次执行OnUnitInactiveSec: 定时任务上次关闭后多少时间,再次执行OnCalendar:基于绝对时间,而不是相对时间执行AccuracySec:如果因为各种原因,任务必须推迟执行,推迟的最大秒数,默认是60秒Unit:真正要执行的任务,默认是同名的带有.service 后缀的 unitPersistent:如果设置了该字段,即使定时任务到时没有启动,也会自动执行相应的 unitWakeSystem:如果系统休眠,是否自动唤醒系统上面的 timer 文件里,OnUnitActiveSec=24h 表示 24 小时执行一次任务。下面是其他的写法:1、在系统启动 15 分钟后执行,并在系统运行时,每周执行一次[Timer] OnBootSec=15min OnUnitActiveSec=1w Unit=check-https.service2、每周周一执行,如果到时定时任务没有启动,会立即执行[Timer] OnCalendar=weekly Persistent=true Unit=check-https.service3、每周日凌晨三点执行(时间格式:Year-Month-Day Hour:Minute:Second)[Timer] OnCalendar=Sun *-*-* 03:00:00 Unit=check-https.service官方文档:cid:link_1然后我们启动这个定时任务,并设置开机自启动# 重新加载配置 systemctl daemon-reload systemctl start check-https.timer systemctl enable check-https.timer其他一些定时任务命令:# 查看所有正在运行的定时任务 systemctl list-timers # 关闭定时任务 systemctl stop check-https.timer # 查看定时任务状态 systemctl status check-https.timer
  • [技术干货] Linux启动过程以及7种运行级别
    Linux启动过程Linux启动需要经历一些步骤,这些步骤确保系统能够在各种不同的硬件和配置条件下可靠地启动和运行,并且具有足够的灵活性以适应不同的使用场景和需求,具体步骤如下:BIOS/UEFI初始化(硬件初始化):执行基本输入输出系统(BIOS)或统一可扩展接口(UEFI)中的初始化程序。这些程序负责硬件的自检、加载引导程序等操作,这确保了系统能够正确地与硬件交互,并且提供了基本的硬件支持。引导加载程序(Boot Loader):BIOS/UEFI初始化后,控制权被传递给引导加载程序,从而加载操作系统的内核映像和必要的初始化RAM磁盘映像,以及传递启动参数给内核;这个过程是系统启动的关键一步,确保了正确的内核被加载并且系统启动参数被正确传递。Linux内核启动:引导加载程序将控制权交给Linux内核。内核启动时,会初始化硬件、加载必要的驱动程序以及创建第一个用户进程(init进程);这确保了系统能够正确地与硬件交互,并且能够访问存储在磁盘上的文件系统。init进程启动:init 进程是 Linux 系统的第一个用户空间进程,它负责启动系统的其他进程和服务;通过 init 进程,系统可以在启动时根据需要启动不同的服务,并且提供了系统运行级别的管理和切换功能。运行级别初始化:根据系统的默认运行级别,init 进程会启动相应的运行级别。每个运行级别都定义了一组需要启动的系统服务和进程。通过运行级别,管理员可以根据需要轻松地切换系统的运行状态,并且可以根据需要启动或停止不同的服务。系统初始化和用户登录:一旦系统处于适当的运行级别并启动了所需的服务,系统就会初始化各种设置和环境。如果是多用户环境,系统会等待用户登录。登录后,用户可以开始使用系统。Linux中的7种运行级别通过设置不同的运行级别,管理员可以实现系统启动时的自定义配置,例如启用或禁用特定服务、加载特定的内核模块等。这种灵活性使得 Linux 系统可以更好地适应不同的使用场景和需求。单用户模式(runlevel 1):也称为救援模式,系统在此模式下只启动最基本的服务和进程,通常用于系统修复和维护。多用户模式(runlevel 2、3、4):这些运行级别通常用于多用户环境下,系统启动基本的网络服务,但不包含图形用户界面。多用户图形界面模式(runlevel 5):系统启动图形用户界面和相关服务,适用于桌面系统或需要图形界面的服务器环境。关机(runlevel 0):系统关闭所有服务并停止运行;重新启动(runlevel 6):系统重新启动;与运行级别相关的 Bash 指令通常用于管理系统的运行级别以及执行与运行级别相关的操作。以下是一些常用的与运行级别相关的 Bash 指令:runlevel #显示当前系统的运行级别 telinit <运行级别> #用于改变系统的运行级别 init <运行级别> #传统的系统初始化程序,也可用来改变系统的运行级别 chkconfig --list # 显示所有系统服务及其在各个运行级别下的启用情况 chkconfig <服务名> on # 将指定服务在启动时自动启用 chkconfig <服务名> off # 将指定服务在启动时取消自动启用
  • [技术干货] CentOS上搭建SFTP
    在CentOS上安装SFTP服务通常是通过安装OpenSSH来实现的,因为OpenSSH默认提供了SFTP功能。以下是在CentOS上安装SFTP的步骤:一、安装OpenSSH服务器:sudo yum install openssh-server启动SSH服务:sudo systemctl start sshd确保SSH服务随系统启动而启动:sudo systemctl enable sshd检查SSH服务状态:sudo systemctl status sshd这将显示SSH服务是否正在运行以及其他相关信息。现在,你的CentOS服务器上应该已经安装并运行了SFTP服务。你可以使用任何支持SFTP的客户端(如WinSCP、FileZilla等)连接到服务器。确保使用SSH协议(端口22)进行连接,并使用具有适当权限的用户凭据进行身份验证。二、配置sftp用户、访问目录等下面是一个完整的例子,假设我们要创建一个名为sftpuser的用户,限制他只能访问/sftp目录,并且使用特定的SSH配置文件。创建SFTP用户:sudo useradd -m -s /sbin/nologin sftpuser设置用户密码:sudo passwd sftpuser创建用户的SFTP根目录:sudo mkdir /sftp设置根目录的权限(根目录必须是root用户,否则sftp连接不上):sudo chown root:root /sftpsudo chmod 755 /sftp在根目录下层建立子目录方可以写入(根目录只能读取不能写入,因为根目录必须是root用户,而sftp访问的用户却是我们新建的sftpuser)mkdir /sftp/sharedatachown sftpuser:sftpuser /sftp/sharedata创建新用户自定义ssh配置简单点直接修改/etc/ssh/sshd_config也可以,这样服务启动选项sshd.service就不用改了创建用户的SSH配置文件目录:sudo mkdir /home/sftpuser/.ssh复制系统SSH配置文件到用户目录:sudo cp /etc/ssh/sshd_config /home/sftpuser/.ssh/sshd_config编辑用户的SSH配置文件:sudo vi /home/sftpuser/.ssh/sshd_config在这个文件中,确保你有适当的配置,例如使用ChrootDirectory限制用户访问,以及其他任何你想要自定义的配置。注意将这个配置节放到最后,否则老是报错: "Directive 'UseDNS' is not allowed within a Match block" 表明在 Match 块中不允许使用 UseDNS 这个指令。Match User sftpuser    ChrootDirectory /sftp    ForceCommand internal-sftp    AllowTcpForwarding noX11Forwarding no给新用户的用户目录递归设置归属chown -R sftpuser:sftpuser /home/sftpuser给配置文件设置读取权限chmod 755 /home/sftpuser/.ssh/sshd_config修改SSH服务启动选项打开SSH服务的启动选项文件,可以使用systemctl status sshd查看找到(通常在 /etc/systemd/system/sshd.service 或 /etc/init.d/sshd 或/usr/lib/systemd/system/sshd.service),并修改为:ExecStart=/usr/sbin/sshd -f /home/sftpuser/.ssh/sshd_config -D $OPTIONS或者/usr/sbin/sshd -f /home/sftpuser/.ssh/sshd_config $OPTIONS重新加载SSH服务:systemctl daemon-reloadsystemctl restart sshd现在,用户sftpuser被限制在sftp目录下,并且只能使用SFTP进行文件传输。他们的SSH配置文件位于/home/sftpuser/.ssh/sshd_config,这样他们可以自定义他们的SSH行为而不影响其他用户或系统级别的配置。查看错误日志:检查系统日志:如果问题仍然存在,请查看系统日志文件,如 /var/log/auth.log 或 /var/log/secure,以获取有关写入文件失败的详细信息。日志文件中可能会提供关于出现问题的原因的线索。三、多SFTP用户如何配置SSH服务启动选项只能指定一个配置文件。如果你想要为多个用户指定不同的配置,你需要为每个用户创建单独的配置文件,并在启动选项中指定这些文件。例如,如果你有两个用户 sftpuser1 和 sftpuser2,你可以为他们分别创建不同的配置文件,然后在SSH服务的启动选项中指定这些文件。为每个用户创建配置文件:sudo cp /etc/ssh/sshd_config /home/sftpuser1/.ssh/sshd_configsudo cp /etc/ssh/sshd_config /home/sftpuser2/.ssh/sshd_config编辑每个用户的配置文件并根据需要进行自定义:sudo vi /home/sftpuser1/.ssh/sshd_configMatch User sftpuser1    ChrootDirectory /sftp    ForceCommand internal-sftp    AllowTcpForwarding no    X11Forwarding nosudo vi /home/sftpuser2/.ssh/sshd_configMatch User sftpuser2    ChrootDirectory /sftp/other_directory    ForceCommand internal-sftp    AllowTcpForwarding no    X11Forwarding no修改SSH服务的启动选项,分别指定每个用户的配置文件:ExecStart=/usr/sbin/sshd -f /home/sftpuser1/.ssh/sshd_config -f /home/sftpuser2/.ssh/sshd_config -D $OPTIONS或者/usr/sbin/sshd -f /home/sftpuser1/.ssh/sshd_config -f /home/sftpuser2/.ssh/sshd_config $OPTIONS这样配置后,每个用户将使用自己的配置文件,可以分别定制他们的SSH行为。
  • [技术干货] docker 修改运行容器环境变量
    第一步:查看Docker Root目录docker info | grep 'Docker Root'第二步:查到容器的长id(container id)方式一:docker inspect pdmaas | grep "Id"方式二:docker ps -a --no-trunc | grep pdmaas第三步:停止容器docker stop [容器名|容器id]第四步:编辑修改环境变量env建议:修改前先备份!!!vim ${Docker Root}/containers/${container-id}/config.v2.json 或 vim ${Docker Root}/containers/${container-id}/config.jsonjson文件代码是压缩的,可以使用sz path命令下载下来格式化后再编辑,再用rz -y命令上传覆盖第五步:重载服务的配置文件systemctl daemon-reload第六步:重启docker转载自https://www.cnblogs.com/bgyb/p/18191197systemctl restart docker
  • [技术干货] Nginx配置允许跨域
    要在Nginx中配置允许跨域(Cross-Origin Resource Sharing, CORS),你需要修改Nginx的配置文件(通常是nginx.conf或者某个包含在nginx.conf中的单独的配置文件)。下面是一个基本的例子,展示了如何在Nginx中设置CORS:打开你的Nginx配置文件。这通常是/etc/nginx/nginx.conf或者/etc/nginx/conf.d/default.conf,或者一个特定站点的配置文件在/etc/nginx/sites-available/或/etc/nginx/conf.d/目录下。在你想要允许跨域请求的server块或location块中添加add_header指令。下面是一个简单的例子,它允许来自任何源的跨域请求,并允许所有的请求方法(GET, POST, PUT, DELETE等)和请求头:server { listen 80; server_name your.domain.com; location / { # ... 其他的配置 ... # 允许跨域请求 if ($request_method = 'OPTIONS') { add_header 'Access-Control-Allow-Origin' '*'; add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; # # 自定义的头部可能需要额外的配置 # add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range'; # # 告诉客户端,实际请求可以预检,并返回一个非简单请求的预检结果且缓存该结果 # add_header 'Access-Control-Max-Age' 1728000; add_header 'Content-Type' 'text/plain; charset=utf-8'; add_header 'Content-Length' 0; return 204; } if ($request_method = 'POST' || $request_method = 'GET' || $request_method = 'PUT' || $request_method = 'DELETE') { add_header 'Access-Control-Allow-Origin' '*'; add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, DELETE'; add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range'; # # 如果需要处理跨域Cookie,请取消下面的注释 # # add_header 'Access-Control-Allow-Credentials' 'true'; } # ... 其他的代理或静态文件配置 ... } }注意:* 允许来自任何源的请求,但在生产环境中,出于安全考虑,你应该明确指定允许的源。如果你需要处理跨域Cookie(即withCredentials设置为true的XHR/Fetch请求),则必须设置Access-Control-Allow-Credentials为true,并且Access-Control-Allow-Origin不能设置为*,而应该是一个具体的源(如http://example.com)。在处理OPTIONS预检请求时,Nginx直接返回204状态码,这告诉浏览器请求是允许的,并且不需要实际发送请求体。请根据你的实际需求调整允许的HTTP方法和请求头。修改完Nginx配置文件后,重新加载或重启Nginx服务以使更改生效:sudo nginx -s reload # 或者 sudo systemctl reload nginx # 或者完全重启Nginx服务 sudo systemctl restart nginx本文来自博客园,作者:dashery,转载请注明原文链接:cid:link_0
  • [技术干货] 逻辑地址和物理地址及逻辑磁盘和物理磁盘
    一、逻辑地址和物理地址1.1 含义:逻辑地址和物理地址是计算机内存管理中的两个核心概念,它们在计算机系统中扮演着不同的角色。逻辑地址(Logical Address),也称为虚拟地址(Virtual Address),是由操作系统提供给程序使用的地址。这些地址是在程序中使用的,但并不是实际存在的地址。逻辑地址的大小和位数取决与处理器的架构和操作系统的设计,通常是一个定长的二进制数值。在执行指令时,CPU会将逻辑地址转换未物理地址来取数据。物理地址(Physical Address),是指内存中实际的地址,他表示内存模块中每个存储的单元(通常是字节)的唯一标识符,因此具有唯一性,且直接与内存相关联。物理地址通常是以一个十六进制表示的数字,他确定了计算机中的实际内存位置。总结来说,逻辑地址是虚拟的,而物理地址是实际的。逻辑地址是程序中使用的地址,它需要经过转换后才能访问到实际的物理地址。在内存管理中,操作系统根据自己的算法将逻辑地址转换为物理地址,使得程序能够正常地读取和写入内存中的数据。逻辑地址与物理地址之间存在着映射关系,但它们并不相等,还需要经过地址映射的过程。Top二、逻辑磁盘和物理磁盘2.1含义逻辑磁盘和物理磁盘的关系可以通过LVM(Logical Volume Manager)系统来理解。在LVM中,物理存储设备如硬盘分区或整个硬盘被转换为物理卷(Physical Volume,简称PV),这些物理卷然后聚集形成卷组(Volume Group,简称VG)。在卷组之上,可以创建逻辑卷(Logical Volume,简称LV)。这些逻辑卷是标准的块设备,可以在其上建立文件系统,相当于非LVM系统中的分区。具体来说,物理卷对应的是硬件存储,是磁盘或者磁盘分区,是物理存在。而卷组和逻辑卷则是逻辑上的存在。逻辑卷是在卷组上建立的,可以根据业务需求扩展或收缩,提供更大的灵活性和管理便利。此外,逻辑磁盘也可以在逻辑上再次进行划分,例如,有多个物理磁盘通过RAID和技术组成一个虚拟磁盘后,还可以将这个虚拟磁盘划分为多个逻辑磁盘。这些逻辑磁盘可能并不一定位于同一块物理磁盘上,它们可能是跨多个物理磁盘的,这样可以提高I/O效率。
  • [技术干货] 使用tc命令模拟linux网络延迟环境
    tc(Traffic Control)是 Linux 中用于流量控制和网络模拟的强大工具。你可以使用它来模拟网络延迟、带宽限制、数据包丢失等。以下是一个使用 tc 模拟网络延迟的基本步骤:1.查看当前的 qdisc(队列规则)和 filter(过滤器)首先,确保你的网络接口没有设置任何 qdisc。你可以使用以下命令查看:tc qdisc show dev <interface>其中 <interface> 是你的网络接口名称,如 eth0。2. 设置根 qdisc为了应用 tc 规则,你需要在网络接口上设置一个 qdisc。最常用的 qdisc 是 handleroot,但在这里我们将使用 htb(层次化令牌桶)作为示例,因为它允许我们设置更复杂的规则(尽管对于简单的延迟模拟,这并不是必需的)。tc qdisc add dev <interface> root handle 1: htb3. 添加延迟规则现在,你可以添加一个延迟规则。假设你想为所有从 <interface> 发送的数据包添加 100ms 的延迟:tc qdisc add dev <interface> parent 1:1 netem delay 100ms注意:上面的命令中,1:1 是一个子 qdisc 的句柄。在 htb qdisc 下,我们通常使用这种子 qdisc 来应用特定的规则。但是,对于简单的延迟模拟,你也可以直接使用 root qdisc,即:tc qdisc change dev <interface> root netem delay 100ms4. 验证设置你可以使用 ping 或其他网络工具来验证延迟是否已应用。5. 删除规则当你完成模拟并希望删除这些规则时,可以使用以下命令:tc qdisc del dev <interface> root这将删除网络接口上的所有 qdisc 和相关的规则。6. 注意tc 规则在重启或网络接口重新加载后将失效。如果你希望这些规则在重启后仍然生效,你可能需要考虑将它们添加到启动脚本或 systemd 服务中。但是,请注意,这样做可能会影响生产环境的网络性能。始终在测试环境中验证你的更改。本文来自博客园,作者:dashery,转载请注明原文链接:cid:link_0
  • [技术干货] Centos7安装weblogic
    1、配置java环境weblogic运行依赖java环境,所以第一步先配置java环境上传、解压jdk安装包[root@bogon ~]# rz -be[root@bogon ~]# tar -zxvf jdk1.8.tar.gz配置java环境变量[root@bogon ~]# vim /etc/profileexport JAVA_HOME=/opt/jdk1.8export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/libexport PATH=$JAVA_HOME/bin:$PATH保存后执行刷新配置文件[root@bogon ~]# source /etc/profile查看jdk版本,有如下结果说明java环境配置成功[root@bogon ~]# java -versionjava version "1.8.0_231"Java(TM) SE Runtime Environment (build 1.8.0_231-b11)Java HotSpot(TM) 64-Bit Server VM (build 25.231-b11, mixed mode)2、新建用户、用户组weblogic[root@bogon ~]# groupadd weblogic[root@bogon ~]# useradd -g weblogic weblogic3、创建安装目录[root@bogon ~]# mkdir -pv /opt/weblogic/Install[root@bogon ~]# mkdir -pv /opt/weblogic/Oracle/Middleware[root@bogon ~]# chown weblogic.weblogic /opt/weblogic/install -R[root@bogon ~]# chown weblogic.weblogic /opt/weblogic/Oracle/Middleware -R4、在weblogic安装目录分别创建两个文件(wls.rsp oraInst.loc)[root@bogon ~]# cd /opt/weblogic/Install[root@bogon weblogic]# vim wls.rsp[ENGINE]Response File Version=1.0.0.0.0[GENERIC]ORACLE_HOME=/opt/weblogic/Oracle/MiddlewareINSTALL_TYPE=WebLogic ServerMYORACLESUPPORT_USERNAME=MYORACLESUPPORT_PASSWORD=DECLINE_SECURITY_UPDATES=tureSECURITY_UPDATES_VIA_MYORACLESUPPORT=falsePROXY_HOST=PROXY_PORT=PROXY_USER=PROXY_PWD=<SECURE VALUE>COLLECTOR_SUPPORTTHUB_URL=[root@bogon weblogic]# vim oraInst.locInventory_loc=/opt/weblogic/oraInventoryInst_group=weblogic注意:两个文件不能有中文注释和多余的空格5、上传、解压安装包上传安装包到/opt/weblogic/Install[root@bogon weblogic]# rz -be[root@bogon weblogic]# unzip fmw_14.1.1.0.0_wls_lite_quick_Disk1_1of1.zip6、安装weblogic[root@bogon weblogic]# su - weblogic[weblogic@bogon ~]$ cd /app/weblogic/Install[weblogic@bogon weblogic]$ java -jar fmw_14.1.1.0.0_wls_lite_quick_generic.jar -silent -responseFile /opt/weblogic/Install/wls.rsp -invPtrLoc /opt/weblogic/Install/oraInst.loc等待安装完成5-10分钟左右The installation of Oracle Fusion Middleware 12c WebLogic Server and Coherence 12.2.1.3.0 completed successfully.Logs successfully copied to /opt/weblogic/oraInventory/logs.[weblogic@bogon weblogic]$出现successfully即为安装完成7、创建Domain(域)需要切换root账户在此目录下创建至此文件夹mkdir -p 确保目录名称存在,不存在的就建一个 最好复制 不要创建错误[weblogic@bogon weblogic]$ su - root[root@bogon ~]# mkdir -p /opt/weblogic/Oracle/Middleware/user_projects/domains/base_domain/[root@bogon ~]# cd /opt/weblogic/Oracle/Middleware/wlserver/common/bin/ 注意:/opt/weblogic/Oracle/Middleware/如果没有wlserver目录,去/opt/weblogic/Install/下边找 或者直接将wlserver移动到/opt/weblogic/Oracle/Middleware/[root@bogon ~]# mv /opt/weblogic/Install/wlserver /opt/weblogic/Oracle/Middleware/8、执行wlst.sh文件[root@bogon bin]# sh wlst.sh注:稍等几分钟 会查找所有的jar文件,出现如下就可以进行下一步的操作Welcome to WebLogic Server Administration Scripting ShellType help() for help on available commandswls:/offline>依次执行以下:wls:/offline> readTemplateForUpdate('/opt/weblogic/Oracle/Middleware/wlserver/common/templates/wls/wls.jar')wls:/offline/base_domain> cd ('Server/AdminServer')wls:/offline/base_domain/Server/AdminServer> set('ListenAddress','')wls:/offline/base_domain/Server/AdminServer> set('ListenPort',7001) 设置访问端口 自定义 要把防火墙开放wls:/offline/base_domain/Server/AdminServer> cd('/')wls:/offline/base_domain> cd('Security/base_domain/User/weblogic')wls:/offline/base_domain/Security/base_domain/User/weblogic> cmo.setPassword('weblogic1234') 设置密码 至少英文加数字wls:/offline/base_domain/Security/base_domain/User/weblogic> setOption('OverwriteDomain','true')wls:/offline/base_domain/Security/base_domain/User/weblogic> writeDomain('/opt/weblogic/Oracle/Middleware/user_projects/domains/base_domain/') 写入领域 这个目录就是刚才创建的wls:/offline/base_domain/Security/base_domain/User/weblogic> closeTemplate()wls:/offline> exit()9、启动weblogic[root@bogon bin]# cd /opt/weblogic/Oracle/Middleware/user_projects/domains/base_domain[root@bogon bin]# ./startWeblogic.sh启动比较慢,启动后浏览器访问http://ip:7001/console访问前注意检查防火墙是否关闭10、编写启停管理脚本[root@bogon weblogic]# vim startAdmin.sh#!/bin/sh#export USER_MEM_ARGS="-Xms4096m -Xmx4096m -XX:MaxPermSize=512m"nohup sh /app/weblogic/Oracle/Middleware/user_projects/domains/base_domain/bin/startWebLogic.sh > admin.log 2>&1 &[root@bogon weblogic]# vim stopAdmin.sh#!/bin/shps -ef|grep Name=AdminServer |grep -v grep|head -n 1|awk '{print $2}'|xargs -t -i kill -9 {}欢迎各位同仁来提意见与建议!
  • [技术干货] Linux系统中如何查看磁盘情况
    Linux不像windows系统那样方便的图形界面,特别是作为服务器使用的时候,只有命令行可以使用。我有个云服务器平时用来做一些数据分享用的,最近想看看磁盘和其中文件的占用情况,于是搜索并学习了一些查看磁盘空间信息的命令,命令虽然简单,但对我自己来说还是有些新的东西值得记录。1. df首先,登录服务器用df命令查看磁盘情况:/home/projects/databook# df . Filesystem 1K-blocks Used Available Use% Mounted on /dev/vda1 51420828 14018512 35079240 29% / 输出包含当前文件系统的磁盘使用情况。df命令有个-h参数,可以更好的展示磁盘情况:/home/projects/databook# df -h . Filesystem Size Used Avail Use% Mounted on /dev/vda1 50G 14G 34G 29% /-h参数一般是用来显示帮助信息的,但是对于df命令,h表示human,也就是以人类易读的方式显示。上面的输出表示这个磁盘的使用量,包括我的虚拟服务器上的所有内容——可执行文件、库和支持文件等等。总容量 50G,目前只使用了29%,剩余的还比较充裕。2. du接下来,我想看看databook目录的文件占用情况。这需要使用 du 命令:/home/projects/databook# du -hd 1 . 24K ./certs 4.0K ./download 3.2M ./admin-ui 2.9M ./public 108K ./output 181M ./upload 472K ./markdown-files 207M . 同样,-h参数表示以人类易读的方式显示,-d 1参数表示 du 只进入一个目录级别(也就是当前目录)。从输出可以看出,upload目录稍微大点,其他目录都还好。最后一行 207M 是整个目录占用磁盘的大小。我希望按照文件/文件夹 占用磁盘空间大小的顺序来显示,这样可以快速定位到占用空间大的 文件/文件夹。3. du | sort但是,du命令并没有按磁盘空间排序的参数,所以尝试结合 sort 命令来排序。/home/projects/databook# du -hd 1 . | sort -n 2.9M ./public 3.2M ./admin-ui 4.0K ./download 24K ./certs 108K ./output 181M ./upload 207M . 472K ./markdown-filessort命令的-n参数表示按数字排序,不过文件夹大小不仅有数字,还有单位(比如M,K这些)。所以,这样排序对我们用处不大。接着,尝试所有文件统一用字节表示,然后在排序:/home/projects/databook# du -kd 1 . | sort -n 4 ./download 24 ./certs 108 ./output 472 ./markdown-files 2948 ./public 3224 ./admin-ui 184532 ./upload 211112 . du命令的-k参数表示用字节表示文件/文件夹的大小。这样虽然可以正常排序,但是可读性差,字节并不是人类易读的方式,还是MB,GB更好理解。进一步调查,发现sort命令居然也有-h参数,也是为了读取人类易读格式的值。/home/projects/databook# du -hd 1 . | sort -hr 207M . 181M ./upload 3.2M ./admin-ui 2.9M ./public 472K ./markdown-files 108K ./output 24K ./certs 4.0K ./download 这样就满足了我查询磁盘空间的要求。sort命令的-r参数表示从大到小排序,因为我关注的是大文件,所以想把它们排在前面。补充:-h参数是在2009年添加到GNU sort 的。
  • [技术干货] 升级openssh前安装zlib报异常configure aborting
    事情是这样的,因为系统漏洞问题,需要升级openssh,从OpenSSH_9.3p1升级到OpenSSH_9.3p2系统版本:CentOS 7升级OpenSSH_9.3p2之前需要先升级zlib从官网下载wget https://www.zlib.net/zlib-1.3.1.tar.gz解压tar -zxvf zlib-1.3.1.tar.gz cd zlib-1.3.1 ./configure --prefix=/usr/zlib执行配置的时候报错** ./configure aborting. 在其他服务器上执行的时候是没有报错的,查了一下,需要安装build-essential,但是CentOS没有build-essential,所以问题应该不在这里查看./configure.log提示libmpc.so.3不能打开find / -name libmpc.so.3没有找到这个文件 于是在之前正常配置的服务器上执行同样的命令查了一下在/usr/lib和/usr/lib64下有这两个文件,那么问题简单了,直接把这个文件从另一个服务器上考过来放到同样的地方应该就行了(因为是64位系统,所以只取lib64下的就行了)上传后重新执行./configure --prefix=/usr/zlib发现问题依然存在,继续查看日志 这次提示缺少libmpfr.so.4,同样的操作,再从别的服务器上把libmpfr.so.4平移过来,中间步骤省略了,依然是在/usr/lib64里再次执行./configure --prefix=/usr/zlib配置成功 其实写这个文章之所以把步骤写出来,就是不想让大家遇到问题只想到补充libmpc.so.3和libmpfr.so.4这两个文件,在操作的时候发现每个服务器其实缺少的文件不一定一样,所以有问题应该先分析日志,然后缺少哪个就去有文件的服务器上去找,然后平移过来就可以了转载自https://www.cnblogs.com/xiu123/p/18211147
  • Linux 防火墙只允许指定IP 端口访问
    开启和关闭防火墙命令如下:查看防火状态systemctl status firewalld2:暂时关闭防火墙systemctl stop firewalld3:永久关闭防火墙systemctl disable firewalldsystemctl stop firewalld.service4:重启防火墙systemctl enable firewalld5、查看防火墙已开通的端口:sudo firewall-cmd --list-ports6、开放指定端口:firewall-cmd --zone=public --add-port=80/tcp --permanent命令含义:–zone #作用域;–add-port=3306/tcp #添加端口,格式为:端口/通讯协议;–permanent #永久生效,没有此参数重启后失效7、从Linux防火墙中删除已开放的端口:firewall-cmd --zone=public --remove-port=6379/tcp给指定的IP开放/关闭指定的端口:添加规则// 允许ip127.0.0.1访问8888端口firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="127.0.0.1" port protocol="tcp" port="8888" accept"//重新载入一下防火墙设置,使设置生效firewall-cmd --reload//查看已设置规则firewall-cmd --zone=public --list-rich-rules 删除规则 //限制IP为127.0.0.1的地址禁止访问8888端口即禁止访问机器firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="127.0.0.1" port protocol="tcp" port="8888" reject" //删除已设置规则firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address=" 127.0.0.1" port protocol="tcp" port="8888" accept"转载自https://www.cnblogs.com/supyang/p/18213072