Linux 操作系统,一些比较关键的命令和方法

PHPer 2025-09-18 13 0 0

查看日志,比如

journalctl -xeu vncserver@:1.service --since "5 minutes ago"     
journalctl -xeu vncserver@:1.service --since "2023-10-01 12:00:00"
journalctl -xeu vncserver@:1.service -n 50

20250918 1200...

立即注册
更新于:2025-09-18 12:01:39
    您需要登录后才可以评论。 立即注册

    install-casaos.sh: line 414: printf: 40.96: invalid number

     Starting network speed test (max 60 s) from URL: https://github.com/IceWhaleTech/CasaOS-CLI/releases/download/v0.4.4-3-alpha1/linux-amd64-casaos-cli-v0.4.4-3-alpha1.tar.gz
    ? Real-time download speed will be shown below:
    install-casaos.sh: line 414: printf: 40.96: invalid number
    
    Get_Network_Speed() {
        local TEST_URL="${1:-https://speed.hetzner.de/100MB.bin}"  # 默认为稳定测速文件,可替换
        local TEMP_FILE="/tmp/speedtest_$$.bin"
        local START_TIME END_TIME DURATION FILE_SIZE SIZE_MB
        local MAX_TEST_TIME=60  # 最长测速时间(秒),可自行调整
        local TIMEOUT_CMD="timeout $MAX_TEST_TIME"
        # 清理临时文件
        trap 'rm -f "$TEMP_FILE"' EXIT
        echo "⏬ Starting network speed test (max $MAX_TEST_TIME s) from URL: $TEST_URL"
        echo "? Real-time download speed will be shown below:"
        START_TIME=$(date +%s.%N)
        # 后台启动 wget 下载
        $TIMEOUT_CMD wget -q --show-progress=no -O "$TEMP_FILE" "$TEST_URL" >/dev/null 2>&1 &
        local WGET_PID=$!
        local PREV_SIZE=0
        local PREV_TIME=$START_TIME
        local SPEED_UPDATE_INTERVAL=1  # 每隔1秒更新一次速度显示
        # === 实时监测下载速度 ===
        while kill -0 "$WGET_PID" 2>/dev/null; do
            sleep $SPEED_UPDATE_INTERVAL
            local CURRENT_TIME=$(date +%s.%N)
            local CURRENT_SIZE=$(wc -c < "$TEMP_FILE" 2>/dev/null || echo 0)
            local ELAPSED=$(echo "$CURRENT_TIME - $PREV_TIME" | bc -l)
            if (( $(echo "$ELAPSED >= $SPEED_UPDATE_INTERVAL" | bc -l) )) && [ "$(echo "$ELAPSED > 0" | bc -l)" -eq 1 ]; then
                local DIFF_SIZE=$((CURRENT_SIZE - PREV_SIZE))
                if [ "$DIFF_SIZE" -gt 0 ]; then
                    local SIZE_MB=$(echo "scale=2; $DIFF_SIZE / 1048576" | bc -l)
                    local SPEED_MB_S=$(echo "scale=2; $SIZE_MB / $ELAPSED" | bc -l)
                    local SPEED_KB_S=$(echo "scale=0; $SPEED_MB_S * 1024" | bc -l)
                    # 动态刷新当前速度(带单位,自动选择 MB/s 或 KB/s 更直观)
                    if (( $(echo "$SPEED_MB_S >= 0.1" | bc -l) )); then
                        printf "\r? Current Speed: %.2f MB/s" "$SPEED_MB_S"
                    else
                        printf "\r? Current Speed: %d KB/s" "$SPEED_KB_S"
                    fi
                fi
                PREV_SIZE=$CURRENT_SIZE
                PREV_TIME=$CURRENT_TIME
            fi
        done
        # 等待 wget 进程结束(可能是被 timeout 中断的)
        wait "$WGET_PID" 2>/dev/null || true
        END_TIME=$(date +%s.%N)
        DURATION=$(echo "$END_TIME - $START_TIME" | bc -l)
        # 避免除零
        if (( $(echo "$DURATION <= 0" | bc -l) )); then
            DURATION=0.1
        fi
        FILE_SIZE=$(wc -c < "$TEMP_FILE" 2>/dev/null || echo 0)
        if [ "$FILE_SIZE" -eq 0 ]; then
            echo -e "
    ❌ ❗ No data downloaded or download failed."
            return 1
        else
            SIZE_MB=$(echo "scale=2; $FILE_SIZE / 1048576" | bc -l)
            DOWNLOAD_SPEED_MB_S=$(echo "scale=2; $SIZE_MB / $DURATION" | bc -l)
            # 最终结果输出
            local FORMATTED_AVG=$(printf "%.2f" "$DOWNLOAD_SPEED_MB_S")
            echo -e "
    ✅ Downloaded $(printf "%.2f" "$SIZE_MB") MB in $(printf "%.2f" "$DURATION") s → Avg Speed: ${FORMATTED_AVG} MB/s"
        fi
        return 0
    }
    

    20250922 1133

    你遇到的错误:

    ```

    install-casaos.sh: line 414: printf: 40.96: invalid number

    ```

    是因为 **`printf` 在某些 shell 环境(尤其是 `dash` 或严格模式下的 `bash`)中不支持浮点数格式化为参数**。虽然 `%.2f` 是合法的格式符,但当你把一个浮点数(如 `40.96`)作为参数传给 `printf` 时,某些 `printf` 实现会报错,因为它期望整数。

    此外,在你的代码中:

    ```bash

    printf "\r? Current Speed: %.2f MB/s" "$SPEED_MB_S"

    ```

    ```bash

    printf "%.2f" "$DOWNLOAD_SPEED_MB_S"

    ```

    都可能触发这个错误,特别是在使用了 `busybox` 版本或非 GNU 环境的系统上。

    ---

    ### ✅ 解决方案:改用 `awk` 进行浮点数格式化

    `awk` 是处理浮点运算和格式化的可靠工具,不受 `printf` 内建限制影响。

    ---

    ### ✅ 修改后的函数(已修复)

    Get_Network_Speed() {
        local TEST_URL="${1:-https://speed.hetzner.de/100MB.bin}"
        local TEMP_FILE="/tmp/speedtest_$$.bin"
        local MAX_TEST_TIME=60
        local TIMEOUT_CMD="timeout $MAX_TEST_TIME"
    
        # 清理临时文件
        trap 'rm -f "$TEMP_FILE"' EXIT
    
        echo "⏬ Starting network speed test (max $MAX_TEST_TIME s) from URL: $TEST_URL"
        echo "? Real-time download speed will be shown below:"
    
        local START_TIME=$(date +%s.%N)
    
        # 启动下载
        $TIMEOUT_CMD wget -q --show-progress=no -O "$TEMP_FILE" "$TEST_URL" >/dev/null 2>&1 &
        local WGET_PID=$!
    
        local PREV_SIZE=0
        local PREV_TIME=$START_TIME
        local SPEED_UPDATE_INTERVAL=1
    
        # === 实时监测速度 ===
        while kill -0 "$WGET_PID" 2>/dev/null; do
            sleep $SPEED_UPDATE_INTERVAL
    
            local CURRENT_TIME=$(date +%s.%N)
            local CURRENT_SIZE=$(wc -c < "$TEMP_FILE" 2>/dev/null || echo 0)
    
            local ELAPSED=$(echo "$CURRENT_TIME - $PREV_TIME" | bc -l)
    
            if (( $(echo "$ELAPSED >= $SPEED_UPDATE_INTERVAL" | bc -l) )) && [ "$(echo "$ELAPSED > 0" | bc -l)" -eq 1 ]; then
                local DIFF_SIZE=$((CURRENT_SIZE - PREV_SIZE))
    
                if [ "$DIFF_SIZE" -gt 0 ]; then
                    local SIZE_MB=$(echo "scale=2; $DIFF_SIZE / 1048576" | bc -l)
                    local SPEED_MB_S=$(echo "scale=3; $SIZE_MB / $ELAPSED" | bc -l)
    
                    # 使用 awk 格式化输出,避免 printf 浮点错误
                    if (( $(echo "$SPEED_MB_S >= 0.1" | bc -l) )); then
                        printf "\r? Current Speed: %s MB/s" "$(echo "$SPEED_MB_S" | awk '{printf "%.2f", $1}')"
                    else
                        local SPEED_KB_S=$(echo "$SPEED_MB_S * 1024" | bc -l)
                        printf "\r? Current Speed: %s KB/s" "$(echo "$SPEED_KB_S" | awk '{printf "%.0f", $1}')"
                    fi
                fi
    
                PREV_SIZE=$CURRENT_SIZE
                PREV_TIME=$CURRENT_TIME
            fi
        done
    
        wait "$WGET_PID" 2>/dev/null || true
    
        local END_TIME=$(date +%s.%N)
        local DURATION=$(echo "$END_TIME - $START_TIME" | bc -l)
    
        # 防止除零
        if (( $(echo "$DURATION <= 0.01" | bc -l) )); then
            DURATION=0.1
        fi
    
        local FILE_SIZE=$(wc -c < "$TEMP_FILE" 2>/dev/null || echo 0)
        if [ "$FILE_SIZE" -eq 0 ]; then
            echo -e "\n❌ ❗ No data downloaded or download failed."
            return 1
        else
            local SIZE_MB=$(echo "scale=2; $FILE_SIZE / 1048576" | bc -l)
            local AVG_SPEED=$(echo "scale=3; $SIZE_MB / $DURATION" | bc -l)
    
            # 最终结果也用 awk 格式化
            local FORMATTED_SIZE=$(echo "$SIZE_MB" | awk '{printf "%.2f", $1}')
            local FORMATTED_DURATION=$(echo "$DURATION" | awk '{printf "%.2f", $1}')
            local FORMATTED_AVG=$(echo "$AVG_SPEED" | awk '{printf "%.2f", $1}')
    
            echo -e "\n✅ Downloaded ${FORMATTED_SIZE} MB in ${FORMATTED_DURATION} s → Avg Speed: ${FORMATTED_AVG} MB/s"
        fi
    
        return 0
    }

    ### ✅ 主要修改点说明: ...

    立即注册
    更新于:2025-09-22 11:36:12
    相关内容

    操作系统常用命令

    常用的Linux下查看服务器配置的命令

    Linux上安装rz和sz命令 yum -y install lrzsz

    用tcping检查网站开放的端口-TCPING小工具的使用和下载

    Windows下查看mysql是否启动

    怎么查看Windows的启动分区是哪一个分区呢?

    Linux操作系统安装

    Ubuntu 25.04 (Plucky Puffin) Desktop安装

    linux下多系统安装包括之前安装的Windows如何正确安装,保证多启动时多系统。

    关于ESP分区的挂载和备份中要注意的事项

    Linux下磁盘健康检查用的命令sudo smartctl -a /dev/sdd

    运行一次短时间的硬盘自检​​ sudo smartctl -t short /dev/sdd

    如何在Linux里用命令查看主版BIOS的boot启动项都有哪些

    修复WINDOWS启动报错

    修复WINDOWS启动报错之二

    修复WINDOWS启动报错之三

    linux不通过商店安装vs code

    linux desktop 现在运行速度最快的几个,并发下网址

    基于Arch,带桌面的,最受欢迎的是

    最受欢迎的Linux系统

    linux系统安装涉及的命令

    Linux操作系统安装之二

    linux自己系统盘上的文件夹,快捷方式也要这么建立吗

    Linux服务器安装桌面环境并搭建VNC服务器

    rsync 命令复制文件,遇到的问题

    Winux操作系统安装

    Linux下备份ESP分区

    peppermint os install error /usr/sbin/bootloader-config

    install linux peppermint os

    install linux peppermint os 2

    基于debian操作系统,有哪些做的比较好的操作系统介绍出来,然后发链接

    未访问到的网址

    linux系统使用swap交换分区,多个系统共用(安装了多个系统,每次只启动一个系统)

    Linux常用命令

    linux desktop 安装各种常用工具和应用

    休眠(Hibernate)功能在 Linux 系统中

    Linux操作系统安装之三

    “您的连接不是私密连接”,错误代码 NET::ERR_CERT_AUTHORITY...

    如何在 Linux 桌面和应用菜单添加 Rhythmbox 快捷方式

    基于Linux Debian的操作系统,一些常见的没列出

    conda init 命令需要指定 shell 类型,因为不同的 shell 有不同的配置文件和语法

    Airsonic/Subsonic 带界面的本地客户端

    服务器安装 navidrome 线上音乐管理工具

    termius-app ssh客户端新一代工具

    FSearch是 Everything 的理想替代工具

    美观又响应快的linux都例举出来,要支持EFI启动的,发网址,能列多少列多少,...

    curl -o -L "http...."

    获取linux安装的包名,Ubuntu和Debian系列

    E: Package 'netcat' has no installation candidate [错误] 安装 SSL...

    linux​面板被锁解决办法。

    在安装liunx服务器时,本地电脑上用到各种工具和方法

    LInux系统 NTFS分区挂载异常问题总结 Error mounting /dev/sdd7 at /medi...

    推荐内容

    怎样使用V2Ray代理和SSTap玩如魔兽世界/绝地求生/LOL台服/战地3/黑色沙漠/彩...

    sstap游戏代理教程 从此玩如魔兽世界/绝地求生/LOL台服/战地3/黑色沙漠/彩虹六...

    BT磁力搜索网站汇总和找不到的资源

    什么是磁力链接,您如何使用?

    Z-Library:全球最大的数字图书馆/含打不开的解决方案/镜像

    使用V2Ray的mKCP协议加速游戏

    v2rayN已停止工作

    【车险课堂】什么是无赔款优待系数ncd,你“造”吗?