مدتها بود که یک اسکریپت دم دستی رو برای راحت تر کردن فانکشنهای پکمن استفاده میکردم. که البته ایرادهای فنی و اسکریپتی زیادی داشت. سر انجام با راهنمایی های چند تا دوست خوب توی گروه های آرچ، دستی به سر و روی اسکریپت کشیدم.
هدف این اسکریپت اینه که یک سری عملکردهای رایج و به درد بخور پکمن رو که بعضا دستورات بلندی میشن و نمیشه به یاد سپرد، به دستورات کوتاه تبدیل کنیم.
ویژگی ها و کارهایی که این اسکریپت میکنه:
برای استفاده از این اسکریپت، میبایست یک سری ابزار رو نصب کنید:
$ sudo pacman -S pacman-contrib reflector fzf pkgfile
اسکریپت زیر رو در یک جایی مثلا در /usr/local/bin قرار بدید یا براش alias بسازید، و مجوز اجرایی رو هم بهش بدید. در متن اسکریپت نگاه کنید و متغیر HELPER=yay رو به چیزی که خودتون دارید تغییر بدید. همین طور اگر از doas به جای sudo استفاده میکنید، در متغیر SUSR=sudo اون رو هم تغییر بدید.
روش کار هم ساده است. مثلا برای نمایش لیستی از پکیج هایی که نصب داریم، میتونیم بنویسیم:
$ pm -bi
اگر شما هم فانکشن به درد بخوری رو سراغ دارید که میتونیم اضافه کنیم، کامنت کنید.
متن اسکریپت:
#!/bin/sh
#
# pm is a simple script to make working with pacman easier
# Author: Amin medicamin@gmail.com http://linuxvaman.ir
# Based on https://github.com/IndrekHaav/pac
#
set -eu
RESET="\033[0m"
RED="\033[1;31m"
BOLD="\033[1m"
#Change if you have another AUR helper
#Or replace yay with pacman if you don't use AUR at all.
HELPER=yay
#You may use another super user helper, such as doas
SUSR=sudo
#You can define search options based on your needs
#Change if you use helpers other than yay, or leave it blank
HELPERSEARCH=--topdown
__usage() {
cat <<EOF
Usage: $(basename "$0") command
$(echo -e "${BOLD}Requirements:${RESET}") pacman-contrib reflector fzf pkgfile yay (or other AUR helpers)
$(echo -e "${BOLD}Working with Packages${RESET}")
-s, search <string> Search for packages matching <string>
-f, find <file> Find the package owner of the file (path or name)
-sh, show <packages> Returns information about <packages>
-i, install <packages> Install <packages>
-r, remove <packages> Remove <packages>
-rd, removedep <packages> Remove <packages> and all their dependencies
-ro, removeorphan Remove all orphan packages and their dependencies
-u, update Perform a full system upgrade
-m, mirrors Generate mirrorlist sorted by 10 fastest servers
-d, depends <package> Shows a list of dependencies for <package>
-do, dependson <package> Shows a list of packages that depend on <package>
-v, view Display content of a file inside a tar package
$(echo -e "${BOLD}Browse packages${RESET}")
-bd, database Browse all available packages
-bi, installed Browse all installed packages
-bf, foreign Browse all manually installed packages
-bn, nodeps Browse packages with no dependency
-bo, orphans Browse orphan packages
-bu, updatable Browse upgradable packages
-l, list Create a list of installed packages in the home directory
$(echo -e "${BOLD}Pacman Database${RESET}")
-c, clean Clear pacman cache, keeps only latest package
-p, purge Clear pacman cache, keeps nothing
-db, unlock Unlock database by removing /var/lib/pacman/db.lck
EOF
exit
}
__error() {
printf "${RED}error:${RESET} %s\n" "$1"
}
__fatal() {
__error "$1"
exit 1
}
[ "$#" -gt 0 ] || __usage
case "$1" in
-s|search) #Search for packages matching <string>
shift
command -v $HELPER > /dev/null || __fatal "change HELPER in the source or install yay"
[ "$#" -eq 1 ] || __fatal "enter a search term"
$HELPER -Ss "$@" $HELPERSEARCH
;;
-f|find) #Find the package owner of the file (path or name)
shift
command -v pkgfile > /dev/null || __fatal "install pkgfile to use this functionality"
[ "$#" -gt 0 ] || __fatal "enter something"
pkgfile "$@"
;;
-sh|show) #Returns information about <packages>
shift
[ "$#" -gt 0 ] || __fatal "enter a package name"
for package in "$@"; do
pacman -Qi "$package" 2>/dev/null || pacman -Si "$package" 2>/dev/null || __error "package '$package' was not found"
done
;;
-i|install) #Install <packages>
shift
[ "$#" -gt 0 ] || __fatal "enter a package name"
if [ -f "$*" ]; then pacman -U "$*"; else $HELPER -S "$@"; fi
;;
-r|remove) #Remove <packages>
shift
[ "$#" -gt 0 ] || __fatal "enter a package name"
$SUSR pacman -R "$@"
;;
-rd|removedep) #Remove <packages> and all their dependencies
shift
pkgs=${*:-$(pacman -Qdtq)}
# shellcheck disable=SC2086
[ -n "$pkgs" ] && $SUSR pacman -Rns $pkgs
;;
-ro|removeorphan) #Remove all orphan packages and their dependencies
pacman -Qdtq | $SUSR pacman -Rns -
;;
-u|update) #Perform a full system upgrade
$HELPER -Syu
;;
-m|mirrors) #Generate mirrorlist sorted by 10 fastest servers
shift
command -v reflector > /dev/null || __fatal "install reflector to use this functionality"
$SUSR reflector --age 6 --fastest 10 --latest 10 --sort rate --protocol https --save /etc/pacman.d/mirrorlist
;;
-d|depends) #Shows a list of dependencies for <package>
shift
command -v pactree > /dev/null || __fatal "install pacman-contrib to use this functionality"
[ "$#" -gt 0 ] || __fatal "enter a package name"
pactree -s -d1 -o1 "$@"
;;
-do|dependson) #Shows a list of packages that depend on <package>
shift
command -v pactree > /dev/null || __fatal "install pacman-contrib to use this functionality"
[ "$#" -gt 0 ] || __fatal "enter a package name"
pactree -r -s -d1 -o1 "$@"
;;
-v|view) #Display content of a file inside a tar package
shift
[ "$#" -gt 1 ] || __fatal "example: pm -v /path/to/package.pkg.tar.zst etc/file.conf "
bsdtar -xOf $2 $3
;;
-bd|database) #Browse all available packages
shift
command -v pactree > /dev/null || __fatal "install fzf to use this functionality"
pacman -Slq | fzf -e --padding=4%,0,0,0 --margin=4%,0,0,0 --no-scrollbar --info=inline-right --border=top --border-label='╢ Browse all available packages ╟' --border-label-pos=3 --preview 'pacman -Si {}' --layout=reverse-list
;;
-bi|installed) #Browse all installed packages
shift
command -v pactree > /dev/null || __fatal "install fzf to use this functionality"
pacman -Qq | fzf -e --padding=4%,0,0,0 --margin=4%,0,0,0 --no-scrollbar --info=inline-right --border=top --border-label='╢ Browse all installed packages ╟' --border-label-pos=3 --preview 'pacman -Qil {}' --layout=reverse-list --bind 'enter:execute(pacman -Qil {} | less)'
;;
-bf|foreign) #Browse all manually installed packages
shift
command -v pactree > /dev/null || __fatal "install fzf to use this functionality"
pacman -Qqm | fzf -e --padding=4%,0,0,0 --margin=4%,0,0,0 --no-scrollbar --info=inline-right --border=top --border-label='╢ Browse all manually installed packages ╟' --border-label-pos=3 --preview 'pacman -Qil {}' --layout=reverse-list --bind 'enter:execute(pacman -Qil {} | less)'
;;
-bn|nodeps) #Browse packages with no dependency
shift
command -v pactree > /dev/null || __fatal "install fzf to use this functionality"
pacman -Qqent | fzf -e --padding=4%,0,0,0 --margin=4%,0,0,0 --no-scrollbar --info=inline-right --border=top --border-label='╢ Browse installed packages without dependency ╟' --border-label-pos=3 --preview 'pacman -Qil {}' --layout=reverse-list --bind 'enter:execute(pacman -Qil {} | less)'
;;
-bo|orphans) #Browse orphan packages
shift
command -v pactree > /dev/null || __fatal "install fzf to use this functionality"
pacman -Qdtq | fzf -e --padding=4%,0,0,0 --margin=4%,0,0,0 --no-scrollbar --info=inline-right --border=top --border-label='╢ Browse orphan packages ╟' --border-label-pos=3 --preview 'pacman -Qil {}' --layout=reverse-list --bind 'enter:execute(pacman -Qil {} | less)'
;;
-bu|updatable) #Browse upgradable packages
shift
command -v pactree > /dev/null || __fatal "install fzf to use this functionality"
pacman -Qu | fzf -e --padding=4%,0,0,0 --margin=4%,0,0,0 --no-scrollbar --info=inline-right --border=top --border-label='╢ Browse upgradable packages ╟' --border-label-pos=3 --layout=reverse-list --preview-window=hidden
;;
-l|list) #Create a list of installed packages in the home directory
pacman -Qq >~/pkglist_all.txt;
echo "packages list sorted by name: $HOME/pkglist_all.txt"
;;
-c|clean) #Clear pacman cache, keeps only latest package
command -v paccache > /dev/null || __fatal "install pacman-contrib to use this functionality"
$SUSR paccache -rk1
;;
-p|purge) #Clear pacman cache, keeps nothing
$SUSR pacman -Sc
;;
-db|unlock) #Unlocks database by removing /var/lib/pacman/db.lck
$SUSR rm /var/lib/pacman/db.lck
;;
*)
__usage
;;
esac

حاصل سر و کله زدن های من با لینوکس
سلام، وبلاگتون rss نداره؟
ممنون از پیشنهاد شما. rss در این لینک فعال شد: https://linuxvaman.ir/rss.xml