软件包

安装软件包

这个众所周知:

pkg install <软件包名称>

可以精简成:

pkg i <软件包名称>

安装软件包

卸载软件包

pkg remove <软件包名称>

精简:

pkg rem <软件包名称>

卸载软件包

为什么可以精简?

  • 这里的精简命令可能不全,请实时关注源代码的更新。

看看pkg的源代码就知道了:

case "$TERMUX_APP_PACKAGE_MANAGER" in
    apt)
        case "$CMD" in
            f*) dpkg -L "$@";;
            sh*|inf*) apt show "$@";;
            add|i*) select_mirror; update_apt_cache; apt install "$@";;
            autoc*) apt autoclean;;
            cl*) apt clean;;
            list-a*) apt list "$@";;
            list-i*) apt list --installed "$@";;
            rei*) apt install --reinstall "$@";;
            se*) select_mirror; update_apt_cache; apt search "$@";;
            un*|rem*|rm|del*) apt remove "$@";;
                        upd*) select_mirror; apt update;;
            upg*) select_mirror; apt update; apt full-upgrade "$@";;
            *) ERROR=true;;
        esac;;
    pacman)
        case "$CMD" in
            f*) pacman -Ql "$@";;
            sh*|inf*) pacman -Qi "$@";;
            add|i*) pacman -Sy --needed "$@";;
            autoc*) pacman -Sc;;
            cl*) pacman -Scc;;
            list-a*) pacman -Sl "$@";;
            list-i*) pacman -Q "$@";;
            rei*) pacman -S "$@";;
            se*) pacman -Sys "$@";;
            un*|rem*|rm|del*) pacman -Rcns "$@";;
                        upd*) pacman -Sy "$@";;
            upg*) pacman -Syu "$@";;
            *) ERROR=true;;
        esac;;
esac

官方也想偷懒

更新软件包

这个众所周知:

pkg update -y

精简:

pkg upd -y

更新软件包

升级软件包

pkg upgrade -y

精简:

pkg upg -y

升级

查找软件包

pkg search <软件包名称>

精简:

pkg se <软件包名称>

查找

列出所有软件包

pkg list-all

精简:

pkg list-a

列出所有

列出已安装软件包

pkg list-installed

精简:

pkg list-i

列出已安装

重新安装软件包

pkg reinstall <软件包名称> -y

精简:

pkg rei <软件包名称> -y

重新安装

查看软件包信息

pkg infopkg show效果一样

pkg show <软件包名称>

精简:

pkg sh <软件包名称>

或者:

pkg inf <软件包名称>

查找信息

查找软件包中的文件

pkg files <软件包名称>

精简:

pkg f <软件包名称>

文件

清理所有软件包

pkg clean

精简:

pkg cl

清理所有过时软件包

pkg autoclean

精简:

pkg autoc

过时

自动卸载不需要的包

apt autoremove -y

自动卸载

pkg执行时间比较长,因为它会检测你的地区来选择合适的源:

select_mirror() {
    local default_repo="${MIRROR_BASE_DIR}/default"

    if [ -d "@TERMUX_PREFIX@/etc/termux/chosen_mirrors" ]; then
        # Mirror group selected
        mirrors=($(find @TERMUX_PREFIX@/etc/termux/chosen_mirrors/ -type f ! -name "*\.dpkg-old" ! -name "*\.dpkg-new" ! -name "*~"))
    elif [ -f "@TERMUX_PREFIX@/etc/termux/chosen_mirrors" ]; then
        # Single mirror selected
        mirrors=("$(realpath @TERMUX_PREFIX@/etc/termux/chosen_mirrors)")
    elif [ -L "@TERMUX_PREFIX@/etc/termux/chosen_mirrors" ]; then
        # Broken symlink, use all mirrors
        mirrors=("${MIRROR_BASE_DIR}/default")
        mirrors+=($(find ${MIRROR_BASE_DIR}/{asia,china,europe,north_america,russia}/ -type f ! -name "*\.dpkg-old" ! -name "*\.dpkg-new" ! -name "*~"))
    else
        echo "No mirror or mirror group selected. You might want to select one by running 'termux-change-repo'"
        mirrors=("${MIRROR_BASE_DIR}/default")
        mirrors+=($(find ${MIRROR_BASE_DIR}/{asia,china,europe,north_america,russia}/ -type f ! -name "*\.dpkg-old" ! -name "*\.dpkg-new" ! -name "*~"))
    fi

    local current_mirror
    current_mirror=$(grep -m 1 -P "^\s*deb\s+" @TERMUX_PREFIX@/etc/apt/sources.list | grep -oP 'https?://[^\s]+')

    # Do not update mirror if $TERMUX_PKG_NO_MIRROR_SELECT was set.
    if [ -n "${TERMUX_PKG_NO_MIRROR_SELECT-}" ] && [ -n "$current_mirror" ]; then
        return
    fi

    # Mirrors are rotated if 6 hours timeout has been passed or mirror is no longer accessible.
    local pkgcache="@TERMUX_CACHE_DIR@/apt/pkgcache.bin"
    if [ -e "$pkgcache" ] && (( $(last_modified "$pkgcache") <= 6 * 3600 )) && [ "$force_check_mirror" = "false" ]; then
        if [ -n "$current_mirror" ]; then
            echo "Checking availability of current mirror:"
            echo -n "[*] $current_mirror: "
            if check_mirror "$current_mirror"; then
                echo "ok"
                return
            else
                echo "bad"
            fi
        fi
    fi

    # Test mirror availability, remove unaccessible mirrors from list.
    echo "Testing the available mirrors:"
    local parallel_jobs_max_count=10

    if [[ ! "$parallel_jobs_max_count" =~ ^[0-9]+$ ]] || \
        [[ "$parallel_jobs_max_count" -lt 1 ]] || \
            [[ "$parallel_jobs_max_count" -gt 1000 ]]; then
        parallel_jobs_max_count=1
    fi

    declare -a parallel_jobs_mirrors=()
    declare -a parallel_jobs_weights=()
    declare -a parallel_jobs_urls=()
    declare -a parallel_jobs_numbers=()
    declare -a parallel_jobs_pids=()
    declare -a parallel_jobs_return_values=()

    local i j mirror url job_number job_pid return_value
    local total_mirrors=${#mirrors[@]}
    local parallel_jobs_current_count=1

    set +e
    i=0
    for mirror in "${!mirrors[@]}"; do
        url="$(get_mirror_url ${mirrors[$mirror]})"

        job_number=$parallel_jobs_current_count
        parallel_jobs_current_count=$((parallel_jobs_current_count + 1))

        # Start mirror check in background
        check_mirror "$url" &
        job_pid=$!

        parallel_jobs_mirrors=("${parallel_jobs_mirrors[@]}" "$mirror")
        parallel_jobs_weights=("${parallel_jobs_weights[@]}" "$(get_mirror_weight ${mirrors[$mirror]})")
        parallel_jobs_urls=("${parallel_jobs_urls[@]}" "$url")
        parallel_jobs_numbers=("${parallel_jobs_numbers[@]}" "$job_number")
        parallel_jobs_pids=("${parallel_jobs_pids[@]}" "$job_pid")

        # If current job count has reached max value or is the last mirror, wait for already started jobs to finish
        if [ "$job_number" -ge $parallel_jobs_max_count ] || \
            [ "$i" -ge $((total_mirrors - 1)) ]; then

            j=0
            # For pids of all jobs
            for job_pid in "${parallel_jobs_pids[@]}"; do
                # Wait for job with matching pid to return
                # echo "waiting for check_mirror job ${parallel_jobs_numbers[j]} for mirror \"${parallel_jobs_urls[j]}\" with pid ${parallel_jobs_pids[j]}"
                wait "$job_pid"
                return_value=$?

                parallel_jobs_return_values=("${parallel_jobs_return_values[@]}" "$return_value")
                j=$((j + 1))
            done

            j=0
            # For return_values of all jobs
            for return_value in "${parallel_jobs_return_values[@]}"; do
                echo -n "[*] (${parallel_jobs_weights[j]}) ${parallel_jobs_urls[j]}: "
                if [ "$return_value" -eq 0 ]; then
                    echo "ok"
                else
                    echo "bad"
                    # echo "check_mirror job ${parallel_jobs_numbers[j]} for mirror \"${parallel_jobs_urls[j]}\" with pid ${parallel_jobs_pids[j]} failed with exit code $return_value"
                    unset "mirrors[${parallel_jobs_mirrors[j]}]"
                fi

                j=$((j + 1))
            done

            # Reset job related variables
            parallel_jobs_current_count=1
            parallel_jobs_mirrors=()
            parallel_jobs_weights=()
            parallel_jobs_urls=()
            parallel_jobs_numbers=()
            parallel_jobs_pids=()
            parallel_jobs_return_values=()
        fi

        i=$((i + 1))
    done
    set -e

    # Build weighted array of valid mirrors
    declare -a weighted_mirrors
    local total_mirror_weight=0
    local weight
    for mirror in "${!mirrors[@]}"; do
        # Check if mirror was unset in parallel check
        if [ -z "${mirrors[$mirror]-}" ]; then
            continue
        fi
        weight="$(get_mirror_weight ${mirrors[$mirror]})"
        total_mirror_weight=$((total_mirror_weight + weight))
        j=0
        while [ "$j" -lt "$weight" ]; do
            weighted_mirrors+=(${mirrors[$mirror]})
            j=$((j + 1))
        done
    done

    # Select random mirror
    local selected_mirror=""
    if ((total_mirror_weight > 0)); then
        local random_weight
        random_weight=$(( (RANDOM % total_mirror_weight + 1) - 1 ))
        echo "Picking mirror: (${random_weight}) ${weighted_mirrors[${random_weight}]}"
        selected_mirror="${weighted_mirrors[${random_weight}]}"
    fi

    if [ -n "$selected_mirror" ]; then
        (
            source "$selected_mirror"
            echo "deb $MAIN stable main" > @TERMUX_PREFIX@/etc/apt/sources.list
            if [ "$(has_repo x11)" == "true" ]; then
                echo "deb $X11 x11 main" > @TERMUX_PREFIX@/etc/apt/sources.list.d/x11.list
            fi
            if [ "$(has_repo root)" == "true" ]; then
                echo "deb $ROOT root stable" > @TERMUX_PREFIX@/etc/apt/sources.list.d/root.list
            fi
        )
    else
        # Should not happen unless there is some issue with
        # the script, or the mirror files
        echo "Error: None of the mirrors are accessible"
        exit 1
    fi
}

Copyright © TermuxCHN 2023 all right reserved,powered by Gitbook该文件修订时间: 2024-03-16 10:39:59

results matching ""

    No results matching ""