2024-08-10



#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/uio.h>
 
int main() {
    int sv[2];
    int ret;
    char buf[100];
    struct iovec iov;
    struct msghdr msg;
 
    // 创建一个unix域的socket对
    ret = socketpair(AF_UNIX, SOCK_STREAM, 0, sv);
    if (ret == -1) {
        perror("socketpair");
        exit(1);
    }
 
    // 写数据
    iov.iov_base = "Hello, World!";
    iov.iov_len = strlen("Hello, World!");
    msg.msg_iov = &iov;
    msg.msg_iovlen = 1;
    if (sendmsg(sv[0], &msg, 0) == -1) {
        perror("sendmsg");
        exit(1);
    }
 
    // 读数据
    iov.iov_base = buf;
    iov.iov_len = sizeof(buf);
    msg.msg_iov = &iov;
    msg.msg_iovlen = 1;
    if ((ret = recvmsg(sv[1], &msg, 0)) == -1) {
        perror("recvmsg");
        exit(1);
    }
 
    // 输出读取的数据
    buf[ret] = '\0';
    printf("Received: %s\n", buf);
 
    // 关闭socket对
    close(sv[0]);
    close(sv[1]);
 
    return 0;
}

这段代码首先创建了一对unix域的socket对,然后使用sendmsg发送消息,使用recvmsg接收消息,并将接收到的数据输出到控制台。代码示例简洁,易于理解,并且包含了错误处理。

2024-08-10



#!/bin/bash
 
# 定义源目录和目标目录变量
source_dir="/path/to/source"
dest_dir="/path/to/destination"
 
# 创建目标目录,如果不存在的话
mkdir -p "$dest_dir"
 
# 使用rsync进行增量备份
rsync -av --delete "$source_dir/" "$dest_dir/"
 
# 打印备份完成的信息
echo "备份已完成。"

这段代码演示了如何使用rsync命令来执行文件的增量备份。它首先定义了源目录和目标目录的路径,然后创建目标目录(如果它不存在的话),并使用rsync命令进行备份。rsync的参数-av启用了归档模式并提供了详细输出,--delete选项确保目标目录中只包含源目录中存在的文件,即实现了增量备份。

2024-08-10



#!/bin/bash
 
# 更新系统软件仓库为中国区镜像
 
# 移除旧的仓库文件
sudo rm -f /etc/yum.repos.d/CentOS-*
sudo rm -f /etc/yum.repos.d/rocky-*.repo
 
# 更新dnf/yum软件包索引(可选)
sudo dnf clean all
sudo dnf makecache
 
# 添加中国区镜像仓库
echo "[rocky-os]
name=Rocky OS \$releasever - \$basearch
baseurl=https://mirrors.tuna.tsinghua.edu.cn/rockylinux/releases/\$releasever/\$basearch/os/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial
 
[rocky-appstream]
name=Rocky AppStream \$releasever - \$basearch
baseurl=https://mirrors.tuna.tsinghua.edu.cn/rockylinux/releases/\$releasever/\$basearch/appstream/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial
" | sudo tee /etc/yum.repos.d/rocky-mirror.repo
 
# 再次更新dnf/yum软件包索引
sudo dnf clean all
sudo dnf makecache
 
echo "已将软件仓库更新为中国区镜像。"

这段代码首先移除旧的仓库文件,然后添加了清华大学提供的Rocky Linux中国区镜像仓库。更新软件包索引是可选的,但推荐执行以确保后续的软件安装/更新操作能正常进行。

2024-08-10

在Linux系统中,审计日志是安全控制的核心部分,它记录了系统中发生的各种事件,包括用户登录信息、文件访问、程序执行等。

Linux提供了几个标准的日志查看工具,如lastwhowlastlog等,以及/var/log目录下的日志文件,如/var/log/auth.log(用于记录用户认证日志)、/var/log/syslog(系统日志)等。

以下是查看和分析Linux审计日志的一些基本命令和方法:

  1. 查看用户登录历史:



last
  1. 查看当前登录用户:



who
  1. 查看当前登录用户详细信息:



w
  1. 查看特定用户的登录历史:



lastlog -u username
  1. 查看认证日志(如SSH登录尝试):



sudo less /var/log/auth.log
  1. 使用grep搜索特定事件:



sudo grep "Oct 29" /var/log/auth.log
  1. 查看系统日志:



sudo less /var/log/syslog
  1. 使用journalctl查看系统日志(systemd系统):



sudo journalctl
  1. 审计文件和目录的更改:



sudo auditctl -w /path/to/file -p wa
sudo aureport -au

这些命令和方法可以帮助管理员检查和分析Linux系统的安全审计日志,从而确保系统的安全性。

2024-08-10

报错解释:

这个错误表明你的Ubuntu系统中缺少libssl.so.1.1libcrypto.so.1.1这两个库文件,这两个库通常是由OpenSSL提供的,是很多程序运行所必需的安全库。

解决方法:

  1. 打开终端。
  2. 执行以下命令安装缺失的库:



sudo apt-get update
sudo apt-get install libssl1.1

如果你的系统中没有libssl1.1的安装包,可能需要添加一个新的软件源来安装。可以尝试以下命令:




sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install libssl1.1
  1. 如果你的系统是Ubuntu 18.04或更早版本,可能需要添加新的软件源来获取libssl1.1



sudo add-apt-repository universe
sudo add-apt-repository ppa:ondrej/ssl
sudo apt-get update
sudo apt-get install libssl1.1
  1. 安装完成后,重新尝试运行你的程序。

如果你的程序依赖libcrypto.so.1.1,那么你可能需要安装libssl-dev包来获取开发库:




sudo apt-get install libssl-dev

请确保在执行这些命令时你有足够的权限(通常是sudo权限)。如果你在安装过程中遇到问题,请确保你的系统是最新的,并且尝试搜索相关错误信息来找到更具体的解决方案。

2024-08-10

在Linux系统中,可以使用cpufreq子系统来查看和设置CPU的频率。以下是如何查看和设置CPU频率的例子:

查看CPU当前频率:




cpufreq-info

或者使用:




cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq

查看CPU可用的频率范围:




cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_available_frequencies

设置CPU频率到特定值(例如设置为2.0GHz):




sudo cpufreq-set -f 2000000

设置CPU以保持在最大频率:




sudo cpufreq-set -g performance

设置CPU以保持在节能模式:




sudo cpufreq-set -g powersave

请注意,cpufreq-infocpufreq-set工具可能需要安装cpufrequtils包。可以使用包管理器安装它,例如使用apt-get




sudo apt-get install cpufrequtils

这些命令适用于大多数基于Linux的系统,但是某些系统可能会有特定的CPU频率控制策略。

2024-08-10

Linux系统可能因为多种原因导致文件系统变为只读模式,常见原因包括文件系统错误、磁盘硬件故障、电源问题等。

解决方法:

  1. 文件系统错误:运行fsck命令来检查和修复文件系统。

    
    
    
    sudo fsck /dev/sdXn

    其中sdXn需要替换为正确的磁盘分区标识。

  2. 磁盘硬件故障:检查硬件连接,可能需要更换硬盘。
  3. 电源问题:确保系统有稳定的电源供应。
  4. 挂载选项问题:检查当前的挂载选项,确保没有包含只读的选项。可以通过mount命令重新挂载为读写模式。

    
    
    
    sudo mount -o remount,rw /partition

    替换/partition为实际的分区路径。

  5. 内核参数:如果是因为内核参数导致的只读模式,可以尝试修改内核参数,例如roerrors选项。
  6. 超级块损坏:如果超级块损坏,可以尝试用e2fsck修复。

在进行任何修复操作之前,请确保备份重要数据以防数据丢失。如果不确定如何操作,请咨询专业的Linux系统管理员或技术支持。

2024-08-10

在Linux系统中,可以使用scprsync命令来在两台服务器之间传输文件和文件夹。

使用scp传输文件或文件夹

scp是一个基于SSH(Secure Shell)的命令,可以用于安全地传输文件。

传输文件:




scp /path/to/local/file username@remote_host:/path/to/remote/directory

传输文件夹:




scp -r /path/to/local/directory username@remote_host:/path/to/remote/directory

使用rsync传输文件或文件夹

rsync是一个更强大的文件和目录同步工具,它可以增量传输文件,只传输改变的部分,从而节约带宽和时间。

传输文件:




rsync /path/to/local/file username@remote_host:/path/to/remote/directory

传输文件夹:




rsync -r /path/to/local/directory username@remote_host:/path/to/remote/directory

为了使用rsync,你可能需要在远程主机上安装rsync服务。

确保你有在两台服务器之间进行SSH连接的权限,并且如果使用scprsync,你需要在本地和远端主机上输入正确的用户名和密码或使用SSH密钥进行认证。

2024-08-10

在Linux系统中,core文件是程序崩溃时生成的一个内存转储文件,它可以用于调试分析程序崩溃的原因。以下是配置core文件的方法:

  1. 通过ulimit命令配置core文件的大小和路径:



ulimit -c unlimited   # 设置core文件大小无限制
ulimit -c 0           # 禁止生成core文件
ulimit -c 100         # 设置core文件大小为100KB
ulimit -c /path/core   # 设置core文件的存储路径
  1. 通过编辑/etc/security/limits.conf文件来配置core文件的行为:



*               soft    core            unlimited
*               hard    core            unlimited

上述配置将对所有用户生效,设置core文件大小为无限制。

  1. 在程序中使用setrlimit函数来配置core文件的大小:



#include <sys/time.h>
#include <sys/resource.h>
 
struct rlimit rl;
 
rl.rlim_cur = RLIM_INFINITY;
rl.rlim_max = RLIM_INFINITY;
 
if (setrlimit(RLIMIT_CORE, &rl) < 0) {
    // 设置core文件大小失败处理
}
  1. 如果想要在生成core文件时包含进程的PID,可以设置环境变量CORE_PATTERN



export CORE_PATTERN=core.%e.%p

以上是配置core文件的方法,具体使用哪种方法取决于你的需求和环境。

2024-08-10

在Linux服务器上开启22端口(SSH默认端口)通常意味着需要确保SSH服务正在运行。以下是如何检查SSH服务状态并开启22端口的步骤:

  1. 检查SSH服务状态:



sudo systemctl status ssh

如果服务没有运行,可以使用以下命令启动:




sudo systemctl start ssh
  1. 确认SSH服务开机自启:



sudo systemctl enable ssh
  1. 如果防火墙正在运行(如ufwfirewalld),确保允许22端口:

对于ufw




sudo ufw allow 22/tcp
sudo ufw reload

对于firewalld




sudo firewall-cmd --permanent --add-port=22/tcp
sudo firewall-cmd --reload
  1. 确认端口开放:



sudo netstat -tulnp | grep :22

或者使用ss命令:




sudo ss -tnlp | grep :22

如果22端口已经开放,以上命令应该会显示SSH服务正在使用该端口。如果端口没有显示,可能需要检查SSH配置文件(/etc/ssh/sshd_config)是否正确,并且确保没有其他服务占用了22端口。