2024-08-13

在物理实体机上安装Kali Linux和Windows 11双系统的步骤如下:

  1. 准备工具:

    • 一个Kali Linux安装媒体(USB驱动器或DVD)。
    • Windows 11安装媒体(USB驱动器或DVD)。
    • 一个大于2GB的USB闪存驱动器,用于制作启动盘。
    • 一个分区管理工具,如GParted。
  2. 制作启动盘:

    • 使用工具如Etcher将Kali Linux和Windows 11的ISO映像分别写入到USB闪存驱动器。
  3. 分区硬盘:

    • 使用GParted或其他分区工具来分区硬盘。
    • 创建一个用于Windows 11的分区。
    • 创建一个用于Kali Linux的分区,并将其格式化为ext4。
  4. 安装Windows 11:

    • 重启计算机,从Windows 11的USB驱动器启动。
    • 遵循屏幕上的提示进行安装。
  5. 安装Kali Linux:

    • 重启计算机,从Kali Linux的USB驱动器启动。
    • 选择“Try Kali Linux”或“Install Kali Linux”。
    • 遵循屏幕上的提示进行安装,选择之前创建的ext4分区进行安装。
  6. 修复引导加载器:

    • 使用工具如GRUB Customizer修复和配置GRUB引导加载器,确保它能够引导两个操作系统。
  7. 调整启动顺序:

    • 在BIOS/UEFI设置中调整启动顺序,确保首选启动Kali Linux或Windows 11。
  8. 重启并测试:

    • 保存更改并重启。
    • 确保可以在启动时选择Windows 11或Kali Linux。

注意:具体步骤可能根据不同电脑和安装介质的差异而有所变化。

2024-08-13

在Linux中,tar 命令通常用于创建、维护、修改和提取tar文件。以下是一些基本的 tar 命令用法示例:

  1. 创建tar文件:



tar -cvf archive.tar file1 file2 file3
  1. 提取tar文件:



tar -xvf archive.tar
  1. 创建带有gzip压缩的tar文件:



tar -czvf archive.tar.gz file1 file2 file3
  1. 提取带有gzip压缩的tar文件:



tar -xzvf archive.tar.gz
  1. 创建带有bzip2压缩的tar文件:



tar -cjvf archive.tar.bz2 file1 file2 file3
  1. 提取带有bzip2压缩的tar文件:



tar -xjvf archive.tar.bz2

在这些命令中:

  • -c 代表创建新的归档文件。
  • -x 代表提取归档文件。
  • -v 代表在操作过程中显示详细信息。
  • -f 指定归档文件的名称。
  • -z 用于gzip压缩。
  • -j 用于bzip2压缩。

请根据需要选择适当的命令来创建或提取tar文件。

2024-08-13



# 设置GRUB2的默认时间为10秒
set timeout=10
 
# 检查是否存在(hd0)第一个硬盘,以及它是否有操作系统安装
insmod part_msdos
insmod ext2
set root='(hd0)'
search --no-floppy --fs-uuid --set=root YOUR-UUID-HERE
 
# 如果检测到了指定的UUID,则设置为GRUB2的根目录
if [ -n "$root" ]; then
  set prefix=($root)/boot/grub
  set grubpath=($root)/boot/grub
  insmod part_msdos
  insmod ext2
  set hiddenmenu=false
fi
 
# 设置GRUB2的启动项
set default=0
 
# 配置Linux内核启动参数
set linux_cmd_line="console=tty0 console=ttyS0,115200"
 
# 指定GRUB2菜单样式文件和位图文件
insmod png
set menu_styple=slimline
export menu_styple
insmod gfxterm
set gfxpayload=keep
insmod jpeg
 
# 定义一个函数来加载所有的模块
function load_all_modules {
  insmod part_msdos
  insmod ext2
  insmod jpeg
  insmod png
}
 
# 定义一个函数来设置Linux内核参数
function set_kernel_parameters {
  set root=(hd0,1)
  search --no-floppy --fs-uuid --set=root YOUR-UUID-HERE
  echo 'Loading Linux ...'
  linux /boot/vmlinuz-3.10.0-327.el7.x86_64 root=/dev/mapper/cl-root ro crashkernel=auto rd.lvm.lv=cl/root rd.lvm.lv=cl/swap rhgb quiet $linux_cmd_line
  echo 'Loading initial ramdisk ...'
  initrd /boot/initramfs-3.10.0-327.el7.x86_64.img
}
 
# 加载所有模块
load_all_modules
 
# 设置Linux内核参数
set_kernel_parameters

这个脚本提供了一个如何配置GRUB2的示例,包括设置默认启动时间、检测硬盘和文件系统、加载模块、设置菜单样式和启动项、以及定义函数来简化配置过程。这是一个基于实际需求和Linux发行版(如CentOS 7)的示例脚本。

2024-08-13

在嵌入式开发中,minicom是一个流行的串行通信程序。它允许用户通过串行端口发送和接收数据,类似于Windows的超级终端。

以下是一些常用的minicom命令:

  1. 安装minicom

在基于Debian的系统中,你可以使用以下命令安装minicom:




sudo apt-get install minicom

在基于Red Hat的系统中,你可以使用以下命令安装minicom:




sudo yum install minicom
  1. 运行minicom

要启动minicom,只需键入命令minicom。如果这是第一次运行,你可能需要配置一些设置。

  1. 配置minicom

在运行minicom之后,你可以通过按Ctrl+A,然后按Z来进入设置菜单。在这里,你可以更改波特率、串行端口等。

  1. 退出minicom

要退出minicom,你可以按Ctrl+A,然后按X

  1. 保存minicom配置

你可以通过运行minicom -s来保存你的设置。这将会让你选择一个配置文件,你可以把你的设置保存到这个文件中。

  1. 使用特定配置文件运行minicom

如果你已经保存了你的配置文件,你可以通过运行minicom -C filename来使用这个配置文件。

  1. 更改配置文件位置

默认情况下,minicom的配置文件位于~/.minirc.dfl。你可以通过设置MINICOM环境变量来更改这个位置。例如,你可以在你的.bashrc.profile文件中添加以下行:




export MINICOM=/etc/minicom

然后你可以把你的配置文件放在/etc/minicom目录下。

以上就是minicom的基本使用方法。在嵌入式开发中,minicom是一个非常有用的工具,可以用于与串行端口通信,进行调试和与嵌入式设备交互。

2024-08-13

在Linux中,权限管理主要涉及到文件和目录的权限。可以使用chmod命令来修改这些权限,而chown命令用来改变文件或目录的所有者。

权限管理示例

使用chmod修改权限

例如,给所有用户添加执行权限:




chmod a+x filename

移除组用户的写权限:




chmod g-w filename

设置文件的权限为755(所有者读写执行,组用户读执行,其他用户读执行):




chmod 755 filename

使用chown改变所有者

将文件所有者改为用户名newuser




chown newuser filename

同时改变所有者和组:




chown newuser:newgroup filename

递归更改权限和所有者

递归地将目录/mydir及其所有子目录和文件的所有者更改为newuser




chown -R newuser /mydir

递归地更改权限:




chmod -R 755 /mydir

这些命令应该在具有适当权限的用户下执行,通常需要root权限。

2024-08-13

在Linux中,您可以通过检查/etc/sudoers文件或使用sudo -l命令来确定用户是否具有sudo权限。以下是一个简单的脚本,用于检查特定用户是否具有sudo权限:




#!/bin/bash
 
# 用户名检查
if [ "$#" -ne 1 ]; then
    echo "Usage: $0 username"
    exit 1
fi
 
# 使用sudo -l命令检查用户是否具有sudo权限
if sudo -l -U "$1" 2>/dev/null | grep -q '^User'; then
    echo "$1 has sudo privileges"
else
    echo "$1 does not have sudo privileges"
fi

使用方法:

  1. 保存这个脚本为check_sudo.sh
  2. 给予执行权限:chmod +x check_sudo.sh
  3. 运行脚本:./check_sudo.sh your_username

请注意,这个脚本需要以root用户或具有sudo权限的用户来执行。

2024-08-13

netstat 是一个在 Linux 系统中用来显示网络状态信息的命令行工具。它可以显示接口统计、路由表、网络连接等信息。

以下是 netstat 命令的一些常用选项和用法:

  • -a--all:显示所有连接和监听端口。
  • -t--tcp:显示 TCP 协议的连接。
  • -u--udp:显示 UDP 协议的连接。
  • -n--numeric:直接使用数字形式显示地址和端口号。
  • -l--listening:显示监听中的服务端口。
  • -p--program:显示每个连接的程序名。
  • -r--route:显示路由表。
  • -e--extend:显示详细信息。
  • -s--statistics:显示每种协议的统计信息。

示例:

查看所有连接(包括监听状态的端口):




netstat -a

显示所有 TCP 连接:




netstat -at

显示所有 UDP 连接:




netstat -au

显示所有连接,包括监听端口,并显示相关进程信息:




netstat -ap

显示路由表:




netstat -r

显示所有连接的统计信息:




netstat -s

以上命令提供了 netstat 的基本用法,可以根据需要组合选项以获取特定的信息。

2024-08-13

ETCD是一个分布式键值存储系统,被广泛用于服务发现、配置共享和一致性保证等场景。以下是在Linux环境下安装、配置ETCD以及常用命令的简要步骤和示例:

  1. 安装ETCD:

使用官方提供的安装脚本,可以自动下载并安装ETCD。




curl -L https://github.com/etcd-io/etcd/releases/download/v3.5.0/etcd-v3.5.0-linux-amd64.tar.gz | tar xz
mv etcd-v3.5.0-linux-amd64/etcd* /usr/local/bin/
  1. 配置ETCD:

ETCD可以通过配置文件或命令行参数进行配置。以下是一个基本的配置文件示例(/etc/etcd/etcd.conf):




# [member]
ETCD_NAME=default
ETCD_DATA_DIR="/var/lib/etcd/default"
# ETCD_WAL_DIR=""
# ETCD_SNAPSHOT_COUNT="10000"
# ETCD_HEARTBEAT_INTERVAL="100"
# ETCD_ELECTION_TIMEOUT="1000"
 
# [cluster]
# ETCD_LISTEN_PEER_URLS="http://localhost:2380"
# ETCD_LISTEN_CLIENT_URLS="http://localhost:2379"
# ETCD_INITIAL_ADVERTISE_PEER_URLS="http://localhost:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://localhost:2379"
# ETCD_INITIAL_CLUSTER="default=http://localhost:2380"
# ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-1"
# ETCD_INITIAL_CLUSTER_STATE="new"
# ETCD_STRICT_RECONFIG_CHECK="false"
# ETCD_ENABLE_V2="true"
 
# [proxy]
# ETCD_PROXY="off"
# ETCD_PROXY_FAILURE_WAIT="5000"
# ETCD_PROXY_REFRESH_INTERVAL="30000"
# ETCD_PROXY_DIAL_TIMEOUT="1000"
# ETCD_PROXY_WRITE_TIMEOUT="5000"
# ETCD_PROXY_READ_TIMEOUT="0"
 
# [security]
# ETCD_CERT_FILE=""
# ETCD_KEY_FILE=""
# ETCD_CLIENT_CERT_AUTH="false"
# ETCD_TRUSTED_CA_FILE=""
# ETCD_AUTO_TLS="false"
# ETCD_PEER_CERT_FILE=""
# ETCD_PEER_KEY_FILE=""
# ETCD_PEER_CLIENT_CERT_AUTH="false"
# ETCD_PEER_TRUSTED_CA_FILE=""
# ETCD_PEER_AUTO_TLS="false"
 
# [logging]
# ETCD_DEBUG="false"
# ETCD_LOG_PACKAGE_LEVELS=""
# ETCD_LOG_OUTPUT="default"
 
# [profiling]
# ETCD_ENABLE_PPROF="false"
# ETCD_METRICS="basic"
  1. 启动ETCD服务:

可以使用配置文件启动ETCD,也可以直接在命令行中指定参数。

使用配置文件启动:




etcd --config-file /etc/etcd/etcd.conf

直接在命令行中指定参数启动:




etcd --name my-etcd-1 --data-dir /var/lib
2024-08-13

在Linux系统中,有多种方法可以设置开机自启脚本或服务。/etc/init.d/etc/rc.d/rc.local 是两个不同时期的开机自启配置方式:

  1. /etc/init.d 方式主要用于SystemV init系统,现在较少使用,已被systemd取代。你可以将脚本放入这个目录,然后通过update-rc.d命令来配置。
  2. /etc/rc.d/rc.local 方式是在启动完成后执行的,类似于Windows的“启动”目录。将脚本放入这个文件,它会在系统启动的最后阶段被执行。

对于systemd(现代Linux系统),推荐使用systemctl来管理服务的自启。

例如,将一个脚本my_script.sh设置为开机自启:




# 首先确保脚本可执行
chmod +x /path/to/my_script.sh
 
# 然后创建一个systemd服务文件
sudo nano /etc/systemd/system/my_script.service
 
# 添加以下内容
[Unit]
Description=My Script Service
 
[Service]
Type=simple
ExecStart=/path/to/my_script.sh
 
[Install]
WantedBy=multi-user.target
 
# 启用并启动服务
sudo systemctl enable my_script.service
sudo systemctl start my_script.service

如果你的系统仍使用init系统,可以使用类似的方法:




# 将脚本放入init.d目录
sudo cp /path/to/my_script.sh /etc/init.d/my_script
sudo chmod +x /etc/init.d/my_script
 
# 链接到适当的运行级别
sudo update-rc.d my_script defaults

对于rc.local方式:




# 编辑rc.local文件
sudo nano /etc/rc.d/rc.local
 
# 在文件底部添加你的脚本
/path/to/my_script.sh
 
# 确保文件可执行
sudo chmod +x /etc/rc.d/rc.local

请根据你的系统类型选择合适的方法。如果你使用的是systemd管理的系统,推荐使用systemctl设置服务。

2024-08-13

在Linux环境下,我们可以使用C语言来编写一个简单的UDP服务器。以下是一个基本的UDP服务器实现的例子:




#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <netinet/in.h>
 
#define BUFF_LEN 1024
#define SERVER_PORT 8080
 
int main() {
    struct sockaddr_in server_addr;
    struct sockaddr_in client_addr;
    socklen_t client_len;
    int server_fd;
    char buffer[BUFF_LEN];
 
    // 创建socket
    server_fd = socket(AF_INET, SOCK_DGRAM, 0);
    if (server_fd < 0) {
        perror("socket creation failed");
        exit(EXIT_FAILURE);
    }
 
    // 设置服务器地址结构
    memset(&server_addr, 0, sizeof(server_addr));
    server_addr.sin_family = AF_INET;
    server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
    server_addr.sin_port = htons(SERVER_PORT);
 
    // 绑定socket到服务器地址
    if (bind(server_fd, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) {
        perror("bind failed");
        exit(EXIT_FAILURE);
    }
 
    printf("Server is running on port %d\n", SERVER_PORT);
    printf("Waiting for messages...\n");
 
    while (1) {
        client_len = sizeof(client_addr);
        // 接收客户端消息
        ssize_t len = recvfrom(server_fd, buffer, BUFF_LEN, 0, (struct sockaddr *)&client_addr, &client_len);
        if (len < 0) {
            perror("recvfrom error");
            continue;
        }
        buffer[len] = '\0';
        printf("Received message: %s\n", buffer);
 
        // 回复客户端消息
        const char *response = "Received";
        sendto(server_fd, response, strlen(response), 0, (struct sockaddr *)&client_addr, client_len);
    }
 
    close(server_fd);
    return 0;
}

这段代码创建了一个UDP服务器,监听在端口8080上的消息。当服务器接收到消息时,它会打印出来,并向发送消息的客户端回复一个"Received"字符串。这个简单的UDP服务器提供了一个基本的框架,可以根据实际需求进行扩展和修改。