2024-08-23

mkfs 是一个在 Linux 系统中用来创建文件系统的工具。它可以创建多种不同类型的文件系统,例如 ext2, ext3, ext4, xfs, btrfs, vfat, ntfs 等。

以下是一些使用 mkfs 命令创建文件系统的示例:

  1. 创建一个 ext4 文件系统:



sudo mkfs.ext4 /dev/sdX1

在这个例子中,/dev/sdX1 是要创建文件系统的磁盘分区。

  1. 创建一个 xfs 文件系统:



sudo mkfs.xfs /dev/sdX1
  1. 创建一个 vfat 文件系统:



sudo mkfs.vfat /dev/sdX1

在这个例子中,/dev/sdX1 是要创建文件系统的磁盘分区。

注意:

  • 在运行 mkfs 命令之前,请确保磁盘分区未被挂载。如果已经挂载,你需要先卸载它。
  • 使用 mkfs 命令会删除磁盘分区上所有现有的数据,请在运行命令前备份重要数据。
  • 替换 /dev/sdX1 为你自己的磁盘分区路径。

使用 mkfs 命令时,你可以添加额外的参数来定制文件系统的选项,例如设置块大小或指定标签等。查看 man mkfs 或者 mkfs.FS_TYPE --help 来获取特定文件系统类型的更多信息和可用选项。

2024-08-23



# 定义nginx运行的用户和用户组
user www-data;
 
# 启动进程数
worker_processes auto;
 
# 全局错误日志及PID文件路径
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
 
# 事件模块
events {
    worker_connections 768; # 每个进程的最大连接数
    # 更多的并发连接可以使用"epoll"
    use epoll; # 事件驱动模型
    # 在FreeBSD上使用"kqueue"
    # use kqueue;
}
 
# HTTP服务器配置
http {
    # 设置日志格式
    access_log /var/log/nginx/access.log;
 
    # 默认请求的MIME类型设置
    include /etc/nginx/mime.types;
    default_type application/octet-stream;
 
    # 设置用于网页缓存文件的目录
    client_body_temp_path /var/cache/nginx/client_temp;
    proxy_temp_path /var/cache/nginx/proxy_temp_path;
    fastcgi_temp_path /var/cache/nginx/fastcgi_temp;
    uwsgi_temp_path /var/cache/nginx/uwsgi_temp;
    scgi_temp_path /var/cache/nginx/scgi_temp;
 
    # 设置日志的缓冲时间
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;
    # 包含其他的配置文件
    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
 
    # 服务器配置
    server {
        listen 80;
        server_name www.example.com example.com;
        # 重定向HTTP到HTTPS
        return 301 https://$server_name$request_uri;
    }
 
    # SSL证书配置
    server {
        listen 443 ssl http2;
        server_name www.example.com example.com;
 
        # SSL证书和私钥的路径
        ssl_certificate /etc/nginx/ssl/www.example.com.crt;
        ssl_certificate_key /etc/nginx/ssl/www.example.com.key;
 
        # 配置SSL参数
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384';
        ssl_prefer_server_ciphers on;
 
        # 更多的SSL优化设置
        # ...
 
        # 网站资源的路径
        root /var/www/html;
        index index.html index.htm;
 
        # 网站的其他配置
        # ...
    }
}

这个配置文件展示了如何在Nginx中设置多个域名以及如何为每个域名配置SSL证书,同时包含了重定向HTTP到HTTPS的配置。这是一个基本的配置模板,可以根据实际需求进行扩展和调整。

2024-08-23

在Linux中,可以使用pthread库中的函数来设置和查看线程的属性。以下是一些常用的函数和示例代码:

  1. 创建具有特定属性的线程:



pthread_attr_t attr;
pthread_t thread;
 
// 初始化线程属性
pthread_attr_init(&attr);
 
// 设置线程属性,例如栈大小、优先级等
// 例如,绑定线程到CPU
cpu_set_t cpuset;
CPU_ZERO(&cpuset);
CPU_SET(0, &cpuset); // 绑定到CPU 0
pthread_attr_setaffinity_np(&attr, sizeof(cpu_set_t), &cpuset);
 
// 创建线程
pthread_create(&thread, &attr, thread_function, NULL);
 
// 清理线程属性
pthread_attr_destroy(&attr);
  1. 获取线程属性:



pthread_attr_t attr;
pthread_attr_init(&attr);
 
// 获取线程分离状态
int detachstate;
pthread_attr_getdetachstate(&attr, &detachstate);
 
// 获取线程栈大小
size_t stacksize;
pthread_attr_getstacksize(&attr, &stacksize);
 
// 获取线程优先级
int priority;
pthread_attr_getschedparam(&attr, &param);
 
// 获取线程调度策略
int policy;
pthread_attr_getschedpolicy(&attr, &policy);
 
// 获取线程CPU绑定
cpu_set_t get;
CPU_ZERO(&get);
pthread_getaffinity_np(pthread_self(), sizeof(cpu_set_t), &get);
  1. 设置线程为分离状态:



pthread_attr_t attr;
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
  1. 设置线程栈大小:



pthread_attr_t attr;
pthread_attr_init(&attr);
pthread_attr_setstacksize(&attr, desired_stack_size);
  1. 设置线程优先级和调度策略:



pthread_attr_t attr;
pthread_attr_init(&attr);
 
sched_param param;
param.sched_priority = desired_priority;
 
pthread_attr_setschedparam(&attr, &param);
pthread_attr_setschedpolicy(&attr, desired_sched_policy); // 如 SCHED_FIFO 或 SCHED_RR

请注意,在使用这些函数时,可能需要包含适当的头文件,如 <pthread.h>,并且在编译时需要链接到pthread库,例如使用gcc时可以加上-lpthread选项。

2024-08-23

在香橙派(Orange Pi)Zero 3上移植U-Boot的步骤大致如下:

  1. 获取U-Boot源码:

    访问U-Boot官方网站或者GitHub仓库获取U-Boot的源码。

  2. 配置U-Boot:

    解压源码后,进入源码目录,使用make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- orangepi_zero3_defconfig配置默认设置。

  3. 编译U-Boot:

    使用make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-编译U-Boot。

  4. 烧录U-Boot到SD卡:

    使用dd或其他工具将编译出来的U-Boot.bin烧录到SD卡的适当分区。

以下是简化的示例代码:




# 克隆U-Boot仓库
git clone https://github.com/u-boot/u-boot.git
cd u-boot
 
# 配置默认设置,针对香橙派Zero 3
make orangepi_zero3_defconfig
 
# 编译U-Boot
make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
 
# 烧录U-Boot到SD卡,假设SD卡设备是/dev/sdx
sudo dd if=u-boot.bin of=/dev/sdx bs=1k conv=fsync

注意:实际操作时,请根据您的开发环境和硬件情况调整编译选项和烧录步骤。

2024-08-23

在Linux下查看日志文件,最常用的命令是cat, more, less, tail, head, 和 grep

  1. cat:查看整个日志文件内容。

    
    
    
    cat /path/to/logfile.log
  2. more:分页查看日志文件内容,不能往前翻页。

    
    
    
    more /path/to/logfile.log
  3. less:分页查看日志文件内容,可以往前翻页。

    
    
    
    less /path/to/logfile.log
  4. tail:查看日志文件的最后几行。

    • 默认显示最后10行:

      
      
      
      tail /path/to/logfile.log
    • 显示最后20行:

      
      
      
      tail -n 20 /path/to/logfile.log
    • 实时跟踪日志文件末尾的变化:

      
      
      
      tail -f /path/to/logfile.log
  5. head:查看日志文件的最开始的几行。

    • 默认显示前10行:

      
      
      
      head /path/to/logfile.log
    • 显示前20行:

      
      
      
      head -n 20 /path/to/logfile.log
  6. grep:搜索日志文件中包含特定文本的行。

    
    
    
    grep "error" /path/to/logfile.log

这些命令可以根据需要结合管道和其他命令一起使用,以便进行更复杂的日志分析。

2024-08-23

环境变量是操作系统为操作系统或运行在操作系统上的程序设置的一些全局变量。在Linux中,我们可以通过多种方式设置和获取环境变量。

  1. 使用export命令设置环境变量

在shell中,我们可以使用export命令来设置环境变量。例如,如果我们想要设置一个名为MY_VAR的环境变量,其值为my_value,我们可以使用以下命令:




export MY_VAR=my_value
  1. 使用env命令查看所有环境变量

env命令可以显示所有的环境变量及其值。例如:




env
  1. 使用echo命令显示特定环境变量

我们可以使用echo命令显示特定环境变量的值。例如,要显示MY_VAR环境变量的值,我们可以使用以下命令:




echo $MY_VAR
  1. 使用set命令查看所有环境变量和局部变量

set命令可以显示所有的环境变量和局部变量及其值。例如:




set
  1. 在程序中获取环境变量

在C或C++程序中,我们可以使用getenv函数来获取环境变量。例如,以下是一个C程序,它获取名为MY_VAR的环境变量的值:




#include <stdio.h>
#include <stdlib.h>
 
int main() {
    char* my_var = getenv("MY_VAR");
    if (my_var != NULL) {
        printf("The value of MY_VAR is: %s\n", my_var);
    } else {
        printf("MY_VAR is not set\n");
    }
    return 0;
}

在Python程序中,我们可以使用os.environ字典来获取环境变量。例如,以下是一个Python程序,它获取名为MY_VAR的环境变量的值:




import os
 
if 'MY_VAR' in os.environ:
    print("The value of MY_VAR is:", os.environ['MY_VAR'])
else:
    print("MY_VAR is not set")
  1. 在shell脚本中获取环境变量

在shell脚本中,我们可以使用$MY_VAR来获取环境变量的值。例如,以下是一个shell脚本,它获取名为MY_VAR的环境变量的值:




#!/bin/bash
 
if [ -z "$MY_VAR" ]; then
    echo "MY_VAR is not set"
else
    echo "The value of MY_VAR is: $MY_VAR"
fi

以上就是在Linux中设置、获取和在程序中使用环境变量的方法。

2024-08-23



#!/bin/sh
# 显示当前shell的进程优先级
renice -n $$
 
# 显示指定PID的进程优先级
if [ $# -ne 1 ]; then
    echo "Usage: $0 <PID>"
    exit 1
fi
 
pid=$1
if [ -r /proc/$pid/ ]; then
    renice -n $pid
else
    echo "Process $pid does not exist or is not accessible"
    exit 1
fi
 
# 修改指定PID的进程优先级
if [ $# -ne 2 ]; then
    echo "Usage: $0 <PID> <Priority>"
    exit 1
fi
 
pid=$1
priority=$2
renice -n $priority -p $pid

这段代码首先使用renice -n $$来显示当前shell进程的优先级。接着,代码检查命令行参数,如果没有提供PID,则显示使用方法。如果提供了PID,则检查对应的/proc/<PID>/目录是否存在,以确定进程是否存在并且可以访问。最后,代码允许用户通过指定PID和优先级来修改进程的优先级。

2024-08-23

在Linux中,你可以使用cat命令和EOF标记来创建或追加文件内容。EOF是一个标准的表示文件结束的标记,通常用于在cat命令中创建多行文本。

下面是一个使用catEOF将多行文本写入文件的例子:




cat <<EOF > filename.txt
第一行内容
第二行内容
EOF

在上面的例子中,cat命令接收来自stdin的输入,直到遇到EOF标记结束。> filename.txt表示将输入的内容重定向到filename.txt文件中,如果文件不存在则创建,如果文件已存在则覆盖。

如果你想在文件末尾追加内容而不是覆盖,可以使用>>重定向符号:




cat <<EOF >> filename.txt
第三行内容
第四行内容
EOF

在这个例子中,>>会保持原有文件内容,并在末尾追加新的内容行。

2024-08-23

在Linux系统中,可以通过多种方式查看系统版本信息。以下是几种常用的方法:

  1. lsb_release 命令:

    如果安装了 lsb_release 命令,可以使用它来查看系统版本信息。

    
    
    
    lsb_release -a
  2. /etc/os-release 文件:

    这个文件包含了系统版本信息,可以直接查看该文件内容。

    
    
    
    cat /etc/os-release
  3. uname 命令:

    使用 uname 命令可以查看内核信息,但不是系统版本。

    
    
    
    uname -a
  4. hostnamectl 命令:

    如果使用的是systemd,可以使用 hostnamectl 命令查看系统版本信息。

    
    
    
    hostnamectl
  5. /etc/issue 文件:

    这个文件包含了系统登录前的欢迎消息,也可以用来获取系统版本信息。

    
    
    
    cat /etc/issue
  6. cat /etc/*release

    通配符可以用来查看所有 /etc 目录下以 release 结尾的文件,这些文件通常包含了系统版本信息。

    
    
    
    cat /etc/*release

这些方法可以根据你的Linux发行版和你的环境来选择适合的方法来查看系统版本信息。

2024-08-23

在Linux环境下,可以使用ANSI转义码来打印彩色文本。以下是一个简单的Python脚本,用于实现彩色进度条:




import time
 
def print_colored_bar(percent, bar_length=100):
    if percent > 1:
        percent = 1
    complete_length = int(bar_length * percent)
    remaining_length = bar_length - complete_length
 
    # ANSI escape codes
    BLUE = '\033[94m'
    GREEN = '\033[92m'
    YELLOW = '\033[93m'
    RED = '\033[91m'
    END = '\033[0m'
 
    # Print the progress bar
    print(f"{BLUE}{'█' * complete_length}{YELLOW}{'█' * remaining_length}{END}")
 
# Example usage
for i in range(101):
    print_colored_bar(i / 100)
    time.sleep(0.1)

这段代码定义了一个print_colored_bar函数,它接受进度百分比和进度条长度作为参数。然后,它使用ANSI转义码来设置文本颜色,并打印相应长度的进度条。在循环中,每次调用print_colored_bar函数来更新进度条的显示,并且通过time.sleep函数暂停0.1秒,模拟某种进度。