2024-08-12

在Linux中,进程控制主要涉及到创建、终止和管理进程。以下是一些常用的进程控制命令和函数:

  1. fork():创建一个新进程(子进程),该进程是原始进程(父进程)的复制品。



#include <unistd.h>
pid_t fork(void);
  1. exec():用新的进程替换当前进程的映像。



#include <unistd.h>
int execl(const char *path, const char *arg, ...);
int execlp(const char *file, const char *arg, ...);
int execle(const char *path, const char *arg, ..., char *const envp[]);
int execv(const char *path, char *const argv[]);
int execvp(const char *file, char *const argv[]);
int execve(const char *path, char *const argv[], char *const envp[]);
  1. wait():父进程等待一个子进程终止。



#include <sys/wait.h>
pid_t wait(int *status);
  1. waitpid():等待一个指定的子进程终止。



#include <sys/wait.h>
pid_t waitpid(pid_t pid, int *status, int options);
  1. kill():发送信号给进程。



#include <sys/types.h>
#include <signal.h>
int kill(pid_t pid, int sig);
  1. exit():终止当前进程。



#include <stdlib.h>
void exit(int status);
  1. getpid():获取当前进程的ID。



#include <sys/types.h>
#include <unistd.h>
pid_t getpid(void);
  1. getppid():获取当前进程的父进程ID。



#include <sys/types.h>
#include <unistd.h>
pid_t getppid(void);

示例代码(创建一个子进程,子进程执行ls命令并打印结果,然后子进程退出,父进程等待子进程结束并打印其终止状态):




#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
 
int main() {
    pid_t pid = fork();
 
    if (pid == -1) {
        // 错误处理
        perror("fork failed");
        exit(EXIT_FAILURE);
    } else if (pid == 0) {
        // 子进程
        execlp("ls", "ls", (char*)NULL);
        // 如果exec调用失败,则子进程将执行以下代码
        perror("execlp failed");
        exit(EXIT_FAILURE);
    } else {
        // 父进程
        int status;
        pid_t wpid = waitpid(pid, &status, 0);
        if (wpid == -1) {
            perror("waitpid failed");
        } else {
            printf("子进程终止,PID=%d\n", wpid);
            if (WIFEXITED(status)) {
                printf("子进程正常结束,退出状态=%d\n", WEXITSTATUS(status));
            } else {
                printf("子进程异常结束\n");
            }
        }
    }
 
    return 0;
}

这段代码首先使用fork()创建一个子进程,然后在子进程中使用execlp()执行ls命令。父进程则使用waitpid()等待

2024-08-12

在Linux终端查询显卡信息,可以使用以下命令:

  1. lspci - 列出所有PCI设备,包括显卡。



lspci | grep VGA
  1. lshw - 列出硬件配置信息,需要管理员权限。



sudo lshw -C display
  1. glxinfo - 提供与OpenGL相关的显卡信息,需要安装mesa-utils



glxinfo | grep -i opengl
  1. nvidia-smi - 如果你使用的是NVIDIA显卡,可以使用此命令查看GPU状态。



nvidia-smi

请根据你的显卡类型和需求选择合适的命令。

2024-08-12

在Linux下安装Redis和Another Redis Desktop Manager的步骤如下:

  1. 安装Redis:



# 更新包管理器的仓库列表
sudo apt-update
 
# 安装Redis服务器
sudo apt-get install redis-server
 
# 启动Redis服务
sudo systemctl start redis-server
 
# 确认Redis正在运行
redis-cli ping
  1. 安装Another Redis Desktop Manager:

    • 对于基于Debian的系统(如Ubuntu):
    
    
    
    # 下载最新版的ARDM(替换为实际版本号)
    wget https://github.com/qishibo/AnotherRedisDesktopManager/releases/download/v1.4.4/AnotherRedisDesktopManager-1.4.4-linux-x64.deb
     
    # 安装下载的deb包
    sudo dpkg -i AnotherRedisDesktopManager-1.4.4-linux-x64.deb
     
    # 如果遇到依赖问题,则可以使用以下命令解决
    sudo apt-get install -f
    • 对于基于RPM的系统(如CentOS):
    
    
    
    # 下载最新版的ARDM(替换为实际版本号)
    wget https://github.com/qishibo/AnotherRedisDesktopManager/releases/download/v1.4.4/AnotherRedisDesktopManager-1.4.4-linux-x64.tar.gz
     
    # 解压缩
    tar xvzf AnotherRedisDesktopManager-1.4.4-linux-x64.tar.gz
     
    # 进入解压后的文件夹
    cd AnotherRedisDesktopManager-1.4.4-linux-x64
     
    # 运行应用程序
    ./AnotherRedisDesktopManager

使用Another Redis Desktop Manager的简单步骤:

  1. 打开Another Redis Desktop Manager。
  2. 点击左上角的+号,添加你的Redis服务器连接信息。
  3. 在新建的连接中填写Redis服务器的hostportpassword等信息。
  4. 点击"Test Connection"测试连接是否成功。
  5. 如果连接成功,你可以开始使用Another Redis Desktop Manager来管理你的Redis数据。
2024-08-12

在Windows系统上配置SSH的公钥私钥以实现与Linux服务器的免密登录,可以按照以下步骤进行:

  1. 安装SSH客户端:

    可以使用PuTTY或者使用Windows 10以上版本自带的OpenSSH客户端。

  2. 生成公钥和私钥:

    打开命令提示符或者PowerShell,使用ssh-keygen命令生成公钥和私钥。

    
    
    
    ssh-keygen -t rsa -b 4096

    按照提示完成公钥和私钥的生成,默认情况下,它们会被保存在~/.ssh/id_rsa(私钥)和~/.ssh/id_rsa.pub(公钥)。

  3. 将公钥传输到Linux服务器:

    可以使用ssh-copy-id命令将公钥复制到服务器上。

    
    
    
    ssh-copy-id username@your_server_ip

    其中username是你的Linux服务器上的用户名,your_server_ip是服务器的IP地址。

  4. 登录服务器验证:

    第一次登录服务器时,可能需要接受公钥并设置密码(如果服务器启用了密码登录)。登录后,如果配置正确,你将不需要再次输入密码。

以下是示例代码:




# 安装OpenSSH客户端(Windows 10或更高版本)
# 打开PowerShell或命令提示符
# 生成SSH密钥对
ssh-keygen -t rsa -b 4096
 
# 将公钥复制到Linux服务器
ssh-copy-id username@your_server_ip
 
# 登录服务器验证
ssh username@your_server_ip

确保替换usernameyour_server_ip为实际的用户名和服务器IP地址。

2024-08-12

在Linux中,可以使用unshare命令来创建一个新的命名空间。以下是一个创建新的命名空间并在其中运行shell的例子:




unshare --uts --ipc --net --pid --mount --fork --propagation private /bin/bash

解释各选项:

  • --uts:创建一个新的UTS(Unix Time-sharing System)命名空间。
  • --ipc:创建一个新的IPC(Inter-Process Communication)命名空间。
  • --net:创建一个新的网络命名空间。
  • --pid:创建一个新的PID(Process ID)命名空间。
  • --mount:创建一个新的挂载点命名空间。
  • --fork:在新的命名空间中运行命令,而不是在原始命名空间中。
  • --propagation:设置挂载传播类型为private,意味着挂载点在此命名空间中是私有的。
  • /bin/bash:要在新命名空间中运行的命令,这里是启动bash shell。

运行上述命令后,您将获得一个新的命名空间,并在其中有一个shell进程,可以在其中运行进程而不影响原始命名空间。

2024-08-12

达梦数据库是一款国产数据库,以下是一些在使用达梦数据库时常用的Linux和数据库命令:

Linux命令:

  1. 查看达梦数据库服务状态:



dminfo
  1. 启动达梦数据库服务:



dmserver /path/to/dm.ini
  1. 停止达梦数据库服务:



dmctl -u /path/to/dm.ini
  1. 远程连接达梦数据库:



disql -h hostname -u username -p password

数据库命令:

  1. 登录达梦数据库:



connect 'username/password@hostname:port/DATABASE_NAME'
  1. 创建数据库:



CREATE DATABASE dbname;
  1. 查看所有表:



SELECT * FROM tablename;
  1. 创建用户:



CREATE USER 'username'@'host' IDENTIFIED BY 'password';
  1. 授权用户:



GRANT ALL PRIVILEGES ON dbname.tablename TO 'username'@'host';

注意:具体命令可能根据您的环境和版本有所不同,请参考达梦数据库的官方文档。

2024-08-12

在CentOS 7桌面版上安装ToDesk远程控制的步骤如下:

  1. 首先,你需要添加ToDesk的官方仓库。创建一个新的repo文件:



sudo vi /etc/yum.repos.d/todesk.repo
  1. 在打开的编辑器中,添加以下内容:



[todesk]
name=ToDesk Repository
baseurl=https://repo.todesk.com/linux/release/1.0/el$releasever/$basearch/
enabled=1
gpgcheck=0
  1. 保存文件并退出编辑器。
  2. 接下来,安装ToDesk:



sudo yum install todesk
  1. 安装完成后,你可以在应用菜单中找到ToDesk,或者通过终端启动它:



todesk

ToDesk安装完成后,你可以使用它来远程控制其他安装有ToDesk的设备。在ToDesk界面上,你可以扫描二维码或输入对方设备的ID来建立连接。

2024-08-12

在Linux中,我们可以使用多种命令来查看和设置系统的日期和时间。以下是一些常用的命令:

  1. date:显示当前日期和时间。



date
  1. clock:显示硬件时钟的时间。



clock
  1. hwclock:显示硬件时钟的时间,并可以用来设置硬件时钟。



hwclock
  1. cal:显示当前月份的日历。



cal
  1. timedatectl:设置或查看系统时间和日期(需要systemd)。



timedatectl
  1. ntpdate:通过网络时间协议(NTP)来同步网络时间。



ntpdate pool.ntp.org
  1. hwclock --systohc:将系统时间同步到硬件时钟。



hwclock --systohc
  1. date MMDDhhmm[[CC]YY][.ss]:设置日期和时间,格式为 月日时分年.秒



date 0321142120.30

请注意,你可能需要管理员权限来更改系统时间。使用 sudo 来获取这些权限。例如,sudo date MMDDhhmm[[CC]YY][.ss]

2024-08-12

在嵌入式Linux系统中,设备树(Device Tree)是一种描述硬件设备的数据结构,它使得内核可以在启动时配置和初始化硬件设备。

以下是一个简单的设备树示例,描述了一个简单的GPIO控制器:




/ {
    compatible = "fsl,imx6ul-14x14";
    #address-cells = <1>;
    #size-cells = <1>;
 
    gpio@0209c000 {
        compatible = "fsl,imx6ul-gpio", "fsl,imx35-gpio";
        reg = <0x0209c000 0x1000>;
        interrupts = <GIC_SPI 55 IRQ_TYPE_LEVEL_HIGH>;
        clocks = <&clks IMX6UL_CLK_GPIO1_IPG>;
        gpio-controller;
        #gpio-cells = <2>;
    };
};

在这个设备树中,我们定义了一个GPIO控制器,并指定了它的寄存器地址、中断号和时钟。gpio-controller属性表示这是一个GPIO控制器,#gpio-cells属性定义了必须要指定多少个32位值来指定一个GPIO。

在Linux内核中,设备树文件通常具有.dts.dtsi扩展名。在嵌入式系统中,设备树通常是编译进内核映像的一部分,或者作为启动参数提供给内核。

设备树文件通常使用Device Tree Source (DTS)格式编写,然后通过Device Tree Compiler (DTC)转换成二进制格式,以便内核可以解析。

在Linux系统中,设备树的处理通常在启动时进行,通过bootloader将设备树传递给Linux内核,然后内核会解析设备树,并根据设备树的描述初始化硬件设备。

设备树的处理和解析通常在内核启动的初始化阶段完成,相关代码通常在/kernel/arch/arm/boot/dts/目录下。

在用户空间,设备树也可以用来配置硬件,通过 /sys/firmware/devicetree/ 目录下的信息可以查看设备树的内容,并且可以通过 /sys/class/ 下的设备类别查看和控制硬件设备。

2024-08-12

在Linux中,有许多基本的命令用于执行不同的任务。以下是一些常见的Linux命令:

  1. ls:列出目录中的文件和文件夹。



ls
  1. cd:改变当前工作目录。



cd /path/to/directory
  1. pwd:打印当前工作目录的全路径。



pwd
  1. touch:创建一个空文件。



touch filename
  1. cat:查看文件内容。



cat filename
  1. cp:复制文件或文件夹。



cp source destination
  1. mv:移动或重命名文件或文件夹。



mv source destination
  1. rm:删除文件或文件夹。



rm filename
  1. mkdir:创建新的目录。



mkdir directoryname
  1. rmdir:删除空目录。



rmdir directoryname
  1. grep:在文件中查找字符串。



grep "string" filename
  1. find:在系统中查找文件。



find /path/to/search -name "filename"
  1. chmod:改变文件或目录的权限。



chmod 755 filename
  1. chown:改变文件或目录的所有者。



chown newowner filename
  1. tar:压缩或解压文件。



tar -cvf archive.tar files
  1. gzip:压缩文件。



gzip filename
  1. ps:查看当前运行的进程。



ps aux
  1. kill:终止进程。



kill PID
  1. ifconfig:查看或配置网络接口。



ifconfig
  1. ping:检测网络连接。



ping host
  1. man:查看命令手册。



man command
  1. apt-get:在Debian和Ubuntu中安装或删除软件包。



apt-get install packagename
  1. yum:在Red Hat和CentOS中安装或删除软件包。



yum install packagename
  1. reboot:重新启动计算机。



reboot
  1. shutdown:关闭计算机。



shutdown now

这些命令涵盖了日常操作的大部分,每个命令都有其特定的选项和参数,可以进行更复杂的操作。要了解特定命令的详细信息和用法,可以使用man命令查看手册,如man ls