diff --git a/.main.go b/.main.go deleted file mode 100644 index e982619..0000000 --- a/.main.go +++ /dev/null @@ -1,221 +0,0 @@ -// main.go // This is the main entrypoint, which calls all the different functions //> -package main - -import ( - "fmt" - "os" - "path/filepath" - "runtime" -) - -var ( - Repositories []string - MetadataURLs []string - validatedArch = [3]string{} - InstallDir = os.Getenv("INSTALL_DIR") - installUseCache = true - useProgressBar = true -) - -const ( - RMetadataURL = "https://raw.githubusercontent.com/Azathothas/Toolpacks/main/metadata.json" // This is the file from which we extract descriptions for different binaries - RNMetadataURL = "https://bin.ajam.dev/METADATA.json" // This is the file which contains a concatenation of all metadata in the different repos, this one also contains sha256 checksums. - VERSION = "1.3.1" - usagePage = " [-vh] [list|install|remove|update|run|info|search|tldr] " - // Truncation indicator - indicator = "...>" - // Cache size limit & handling. - MaxCacheSize = 10 - BinariesToDelete = 5 - TEMP_DIR = "/tmp/bigdl_cached" -) - -func init() { - if InstallDir == "" { - homeDir, err := os.UserHomeDir() - if err != nil { - fmt.Fprintf(os.Stderr, "Error: Failed to get user's Home directory. %v\n", err) - os.Exit(1) - } - InstallDir = filepath.Join(homeDir, ".local", "bin") - } - if err := os.MkdirAll(InstallDir, os.ModePerm); err != nil { - fmt.Fprintf(os.Stderr, "Error: Failed to get user's Home directory. %v\n", err) - os.Exit(1) - } - switch runtime.GOARCH { - case "amd64": - validatedArch = [3]string{"x86_64_Linux", "x86_64", "x86_64-Linux"} - case "arm64": - validatedArch = [3]string{"aarch64_arm64_Linux", "aarch64_arm64", "aarch64-Linux"} - default: - fmt.Println("Unsupported architecture:", runtime.GOARCH) - os.Exit(1) - } - arch := validatedArch[0] - Repositories = append(Repositories, "https://bin.ajam.dev/"+arch+"/") - Repositories = append(Repositories, "https://bin.ajam.dev/"+arch+"/Baseutils/") - Repositories = append(Repositories, "https://raw.githubusercontent.com/xplshn/Handyscripts/master/") - // These are used for listing the binaries themselves - MetadataURLs = append(MetadataURLs, "https://bin.ajam.dev/"+arch+"/METADATA.json") - MetadataURLs = append(MetadataURLs, "https://bin.ajam.dev/"+arch+"/Baseutils/METADATA.json") - MetadataURLs = append(MetadataURLs, "https://api.github.com/repos/xplshn/Handyscripts/contents") // You may add other repos if need be? bigdl is customizable, feel free to open a PR, ask questions, etc. -} - -func printHelp() { - helpMessage := "Usage:\n" + usagePage + ` - -Options: - -h, --help Show this help message - -v, --version Show the version number - -Commands: - list List all available binaries - install, add Install a binary - remove, del Remove a binary - update Update binaries, by checking their SHA against the repo's SHA. - run Run a binary - info Show information about a specific binary - search Search for a binary - (not all binaries have metadata. Use list to see all binaries) - tldr Show a brief description & usage examples for a given program/command - -Examples: - bigdl search editor - bigdl install micro - bigdl remove bed - bigdl info jq - bigdl tldr gum - bigdl run --verbose curl -qsfSL "https://raw.githubusercontent.com/xplshn/bigdl/master/stubdl" | sh - - bigdl run --silent elinks -no-home "https://fatbuffalo.neocities.org/def" - bigdl run btop - -Version: ` + VERSION - - fmt.Println(helpMessage) -} - -func main() { - // Check for flags directly in the main function - if len(os.Args) > 1 { - switch os.Args[1] { - case "--version", "-v": - fmt.Println("bigdl", VERSION) - os.Exit(0) - case "--help", "-h": - printHelp() - os.Exit(0) - } - } - - // If no arguments are received, show the usage text - if len(os.Args) < 2 { - fmt.Printf(" bigdl:%s\n", usagePage) - os.Exit(1) - } - - switch os.Args[1] { - case "find_url": - if len(os.Args) < 3 { - fmt.Println("Usage: bigdl find_url [binary]") - os.Exit(1) - } - findURLCommand(os.Args[2]) - case "list": - binaries, err := listBinaries() - if err != nil { - fmt.Println("Error listing binaries:", err) - os.Exit(1) - } - for _, binary := range binaries { - fmt.Println(binary) - } - case "install", "add": - if len(os.Args) < 3 { - fmt.Printf("Usage: bigdl %s [binary] \n", os.Args[1]) - os.Exit(1) - } - binaryName := os.Args[2] - var installMessage string - if len(os.Args) > 3 { - InstallDir = os.Args[3] - } - if len(os.Args) > 4 { - installMessage = os.Args[4] - } - err := installCommand(binaryName, installMessage) - if err != nil { - fmt.Printf("%s\n", err.Error()) - os.Exit(1) - } - case "remove", "del": - if len(os.Args) < 3 { - fmt.Printf("Usage: bigdl %s [binary]\n", os.Args[1]) - os.Exit(1) - } - remove(os.Args[2:]) - case "run": - if len(os.Args) < 3 { - fmt.Println("Usage: bigdl run <--verbose, --silent> [binary] ") - os.Exit(1) - } - RunFromCache(os.Args[2], os.Args[3:]) - case "tldr": - if len(os.Args) < 3 { - fmt.Println("Usage: bigdl tldr [page]") - os.Exit(1) - } - RunFromCache("tlrc", os.Args[2:]) - case "info": - if len(os.Args) != 3 { - fmt.Println("Usage: bigdl info [binary]") - os.Exit(1) - } - binaryName := os.Args[2] - binaryInfo, err := getBinaryInfo(binaryName) - if err != nil { - fmt.Println(err) - os.Exit(1) - } - - // Print the fields - fmt.Printf("Name: %s\n", binaryInfo.Name) - if binaryInfo.Description != "" { - fmt.Printf("Description: %s\n", binaryInfo.Description) - } - if binaryInfo.Repo != "" { - fmt.Printf("Repo: %s\n", binaryInfo.Repo) - } - if binaryInfo.Size != "" { - fmt.Printf("Size: %s\n", binaryInfo.Size) - } - if binaryInfo.SHA256 != "" { - fmt.Printf("SHA256: %s\n", binaryInfo.SHA256) - } - if binaryInfo.B3SUM != "" { - fmt.Printf("B3SUM: %s\n", binaryInfo.B3SUM) - } - if binaryInfo.Source != "" { - fmt.Printf("Source: %s\n", binaryInfo.Source) - } - case "search": - if len(os.Args) != 3 { - fmt.Println("Usage: bigdl search [query]") - os.Exit(1) - } - searchTerm := os.Args[2] - fSearch(searchTerm) - case "update": - var programsToUpdate []string - if len(os.Args) > 2 { - // Bulk update with list of programs to update - programsToUpdate = os.Args[2:] - } - if err := update(programsToUpdate); err != nil { - fmt.Printf("Error updating programs: %v\n", err) - os.Exit(1) - } - default: - fmt.Printf("bigdl: Unknown command: %s\n", os.Args[1]) - os.Exit(1) - } -} diff --git a/.main_cliparsed.go b/.main_cliparsed.go deleted file mode 100644 index 3a364bc..0000000 --- a/.main_cliparsed.go +++ /dev/null @@ -1,193 +0,0 @@ -// main.go // This is the main entrypoint, which calls all the different functions //> -package main - -import ( - "fmt" - "github.com/urfave/cli/v2" - "os" - "path/filepath" - "runtime" -) - -var ( - Repositories []string - MetadataURLs []string - validatedArch = [3]string{} - InstallDir = os.Getenv("INSTALL_DIR") - installUseCache = true - useProgressBar = true -) - -const ( - RMetadataURL = "https://raw.githubusercontent.com/Azathothas/Toolpacks/main/metadata.json" // This is the file from which we extract descriptions for different binaries - RNMetadataURL = "https://bin.ajam.dev/METADATA.json" // This is the file which contains a concatenation of all metadata in the different repos, this one also contains sha256 checksums. - VERSION = "1.3.1" - usagePage = "Usage: bigdl [-vh] [list|install|remove|update|run|info|search|tldr] " - // Truncation indicator - indicator = "...>" - // Cache size limit & handling. - MaxCacheSize = 10 - BinariesToDelete = 5 - TEMP_DIR = "/tmp/bigdl_cached" -) - -func main() { - app := &cli.App{ - Name: "bigdl", - Usage: "bigdl is a command-line tool for managing binaries", - Before: func(c *cli.Context) error { - // Prepare global variables - if InstallDir == "" { - homeDir, err := os.UserHomeDir() - if err != nil { - return fmt.Errorf("failed to get user's Home directory: %v", err) - } - InstallDir = filepath.Join(homeDir, ".local", "bin") - } - if err := os.MkdirAll(InstallDir, os.ModePerm); err != nil { - return fmt.Errorf("failed to create install directory: %v", err) - } - switch runtime.GOARCH { - case "amd64": - validatedArch = [3]string{"x86_64_Linux", "x86_64", "x86_64-Linux"} - case "arm64": - validatedArch = [3]string{"aarch64_arm64_Linux", "aarch64_arm64", "aarch64-Linux"} - default: - return fmt.Errorf("unsupported architecture: %s", runtime.GOARCH) - } - arch := validatedArch[0] - Repositories = append(Repositories, "https://bin.ajam.dev/"+arch+"/") - Repositories = append(Repositories, "https://bin.ajam.dev/"+arch+"/Baseutils/") - Repositories = append(Repositories, "https://raw.githubusercontent.com/xplshn/Handyscripts/master/") - // These are used for listing the binaries themselves - MetadataURLs = append(MetadataURLs, "https://bin.ajam.dev/"+arch+"/METADATA.json") - MetadataURLs = append(MetadataURLs, "https://bin.ajam.dev/"+arch+"/Baseutils/METADATA.json") - MetadataURLs = append(MetadataURLs, "https://api.github.com/repos/xplshn/Handyscripts/contents") - return nil - }, - Commands: []*cli.Command{ - { - Name: "install", - Aliases: []string{"add"}, - Usage: "Install a binary", - Action: func(c *cli.Context) error { - if c.NArg() < 1 { - return cli.NewExitError("Missing binary name", 1) - } - binaryName := c.Args().First() - err := installCommand(binaryName) - if err != nil { - return err - } - return nil - }, - }, - { - Name: "remove", - Aliases: []string{"del"}, - Usage: "Remove a binary", - Action: func(c *cli.Context) error { - if c.NArg() < 1 { - return cli.NewExitError("Missing binary name", 1) - } - remove(c.Args().Slice()) - return nil - }, - }, - { - Name: "update", - Usage: "Update binaries", - Action: func(c *cli.Context) error { - var binariesToUpdate []string - if c.NArg() > 0 { - binariesToUpdate = c.Args().Slice() - } - err := update(binariesToUpdate) - if err != nil { - return err - } - return nil - }, - }, - { - Name: "run", - Usage: "Run a binary", - Action: func(c *cli.Context) error { - if c.NArg() < 1 { - return cli.NewExitError("Missing binary name", 1) - } - binaryName := c.Args().First() - RunFromCache(binaryName, c.Args().Tail()) - return nil - }, - }, - { - Name: "info", - Usage: "Show information about a specific binary", - Action: func(c *cli.Context) error { - if c.NArg() < 1 { - return cli.NewExitError("Missing binary name", 1) - } - binaryName := c.Args().First() - binaryInfo, err := getBinaryInfo(binaryName) - if err != nil { - return err - } - // Assuming binaryInfo is a struct with fields like Name, Description, etc. - fmt.Printf("Name: %s\n", binaryInfo.Name) - // Add other fields as necessary - return nil - }, - }, - { - Name: "search", - Usage: "Search for a binary", - Action: func(c *cli.Context) error { - if c.NArg() < 1 { - return cli.NewExitError("Missing search term", 1) - } - searchTerm := c.Args().First() - fSearch(searchTerm) - return nil - }, - }, - { - Name: "tldr", - Usage: "Show a brief description & usage examples for a given program/command", - Action: func(c *cli.Context) error { - if c.NArg() < 1 { - return cli.NewExitError("Missing program/command name", 1) - } - // Directly use the first argument as the program/command name - RunFromCache("tlrc", c.Args().Slice()) - return nil - }, - }, - }, - Flags: []cli.Flag{ - &cli.BoolFlag{ - Name: "version", - Aliases: []string{"v"}, - Usage: "Show the version number", - }, - }, - Action: func(c *cli.Context) error { - if c.Bool("version") { - fmt.Println("bigdl", "1.3.1") // Use the actual version from your original main.go - return nil - } - if c.Bool("help") { - cli.ShowAppHelp(c) - return nil - } - cli.ShowAppHelp(c) - return nil - }, - } - - err := app.Run(os.Args) - if err != nil { - fmt.Fprintln(os.Stderr, err) - os.Exit(1) - } -} diff --git a/bigdl b/bigdl old mode 100644 new mode 100755 index 4d082f5..d0ea713 Binary files a/bigdl and b/bigdl differ diff --git a/helperFunctions.go b/helperFunctions.go index dfb6f3c..88255b0 100644 --- a/helperFunctions.go +++ b/helperFunctions.go @@ -1,5 +1,4 @@ // helperFunctions.go // This file contains commonly used functions //> -// TODO: Add *PROPER* error handling in the truncate functions. Ensure escape sequences are correctly handled? package main import ( @@ -18,6 +17,8 @@ import ( "syscall" ) +// TODO: Add *PROPER* error handling in the truncate functions. Ensure escape sequences are correctly handled? + // signalHandler sets up a channel to listen for interrupt signals and returns a function // that can be called to check if an interrupt has been received. func signalHandler(ctx context.Context, cancel context.CancelFunc) (func() bool, error) { diff --git a/list b/list deleted file mode 100644 index 0b4c3f5..0000000 --- a/list +++ /dev/null @@ -1,1051 +0,0 @@ -.std.h.sh -7z -[ -act -actionlint -addpart -age -age-keygen -agetty -agg -agrind -airixss -aix -albafetch -algernon -alist -allxfr -alterx -amass -amp -analyticsrelationships -anew -anew-rs -anewer -ansi2html -ansi2txt -apk.sh -archey -arduino-cli -aretext -aria2c -arping -asn -asnmap -assetfinder -assh -atuin -awk -aws-nuke -axel -b2sum -b3sum -baker -bandwhich -base32 -base64 -basename -basenc -bash -bat -batcat -bbscope -bbtargets -bdl -bearer -bed -berty -bigdl -bin -binary-security-check -binfetch -binfetch.cfg -bingrep -binocle -bleve -blkdiscard -blkid -blkpr -blkzone -blockdev -bluetuith -boltconn -bombadillo -bore -boringtun-cli -bottom -boxxy -brename -broot -brutespray -btop -bucketloot -busybox -byp4xx -caddy -caido-cli -cal -capconvert -cat -catatonit -catp -catservice -ccat -cdncheck -cent -certgraph -certspotter -certstream -certstream-server-go -certwatcher -cexec -cfdisk -cfssl -cfssl-bundle -cfssl-certinfo -cfssl-newkey -cfssl-scan -cfssljson -chainredir -chameleon -chaos-client -chcon -chcpu -cheat -checkbypass -cherrybomb -chgrp -chisel -chmem -chmod -choom -chown -chroot -chrt -cifsiostat -circumflex -cksum -cleanpath -clear -clipcat-menu -clipcat-notify -clipcatctl -clipcatd -clockdiff -cloudcash -cloudfox -cloudlist -cloudreve -cog -col -colcrt -colrm -column -comb -comm -containerd -containerd-shim-runc-v2 -coreutils -cotp -cowitness -cowsay -cowthink -cp -cproxy -cpufetch -crawley -crictl -crlfuzz -croc -crt -csplit -csprecon -csview -csvtk -ct_monitor -ctlwatcher -ctr -ctrlaltdel -curl -curlie -cut -cut-cdn -cvemap -dalfox -darkhttpd -dasel -datadash -date -dbclient -dcgen -dd -ddns-go -delpart -delta -depmod -devbox -devpod -df -diffoci -dir -dircolors -direnv -dirname -dizi -dizi-server -dmesg -dns-doctor -dnslookup -dnstake -dnsx -doas -docker -docker-init -docker-proxy -dockerd -dockerd-rootless-setuptool.sh -dockerd-rootless.sh -doggo -dogservice -dontgo403 -doomxss -dos2unix -dotenv-linter -dropbear -dropbearconvert -dropbearkey -dropbearmulti -dropbearscp -ds -dsieve -du -duf -dufs -dura -dust -dysk -eae -eah -eap -eaparam -eapath -earh -echo -ecoji -edgevpn -eefjsf -eget -ehole -ein -eject -elfcat -elinks -elinks-lite -elvish -enc -encode -enola -enosys -enumerepo -env -etcd -etcdctl -etcdutl -exa -exch -exiflooter -expand -expr -eza -factor -fadvise -falconhound -fallocate -false -fastfetch -fasttld -fblog -fclones -fd -fdisk -fdupes -feroxbuster -ffmpeg -ffprobe -ffuf -ffufPostprocessing -ffufw -fget -filan -filebrowser -fincore -find -find-rs -findfs -findmnt -findomain -fingerprintx -flock -fmt -fnm -fold -fq -frcode -free -fscan -fsck -fsck.cramfs -fsck.minix -fsfreeze -fstrim -fuse-overlayfs -fusermount3 -fuzzuli -fwanalyzer -fx -fzf -gau -gawk -gdu -genact -genscope -getJS -getghrel -getlimits -getopt -gf -gfx -gh -gh-dash -ginstall -gip -git -git-checkout -git-cliff -git-clone -git-cvsserver -git-lfs -git-log -git-pull -git-receive-pack -git-shell -git-sizer -git-tag -git-upload-archive -git-upload-pack -git-xet -gitdorks_go -gitea -github-endpoints -github-regexp -github-subdomains -gitk -gitlab-subdomains -gitleaks -gitpod-cli -gitql -gitui -gix -glow -go-simplehttpserver -goawk -gobuster -gocurl -godns -godnsbench -gofireprox -gojq -golem -goop -gorilla -gosec -gost -gosu -gotator -gotld -gotty -gowitness -gpg-tui -gping -grep -grex -gron -groups -grpcurl -gs-netcat -gsocket -gum -gunzip -gup -gxss -gzexe -gzip -hacker-scoper -hadolint -hakip2host -hakoriginfinder -hakrawler -hakrevdns -halp -hardeningmeter_staticx -hardlink -heacoll -head -hednsextractor -hexdump -hexyl -horust -hostctl -hostid -hpwd -hrekt -htb-cli -htmlq -httprobe -httpx -hub -hugetop -hugo -hurl -hurlfmt -hwclock -hx -hxn -hyperfine -hysp -i386 -id -imix -infocmp -inscope -insmod -interactsh-client -interactsh-server -invidtui -ionice -iostat -ipcmk -ipcrm -ipcs -iperf -iperf3 -ipt2socks -irqtop -isosize -istioctl -jaeles -jaq -jc -jc_staticx -jira -jira-cli -jj -jless -jless_staticx -join -jq -jql -jqp -just -jwt-hack -k9s -kadeessh -kakoune -kalker -kanha -katana -katana_staticx -kill -killport -kmod -kmon -knoxssme -kondo -kopia -ksubdomain -ksubdomain_staticx -kubemetrics -ladder -last -lastb -lazydocker -lazygit -ldattach -legba -lf -link -linux32 -linux64 -linuxwave -listmonk -litefs -ln -lnav -locate -logcli -logger -logname -logtimer -loki -loki-canary -look -losetup -ls -lsblk -lsclocks -lscpu -lsd -lsfd -lsipc -lsirq -lslocks -lslogins -lsmem -lsmod -lsns -luet -lux -lzcat -lzcmp -lzdiff -lzegrep -lzfgrep -lzgrep -lzless -lzma -lzmadec -lzmainfo -lzmore -mabel -mac2unix -macchina -maddy -mailpit -make-prime-list -mani -mantra -mapcidr -massdns -matterbridge -mcfly -mcookie -md5sum -mdcat -mdsh -melange -meli -mergerfs -mesg -mgwls -micro -miniflux -miniserve -minisign -mise -mkbundle -mkdir -mkfifo -mkfs -mkfs.bfs -mkfs.cramfs -mkfs.minix -mknod -mksub -mkswap -mktemp -mlr -mmv -modinfo -modprobe -more -mount -mount.fuse3 -mountpoint -mpstat -mqttui -mubeng -multirootca -mv -naabu -naabu_staticx -namei -navi -ncat -ncdu -neofetch -nerdctl -netbird -netmaker -nfs-cat -nfs-cp -nfs-ls -nfs-stat -nginx -ngocok -ngrok -nice -niltalk -njs -nl -nmap -nmap-formatter -nmapurls -nmctl -nnn -nohup -noir -nologin -notify -nping -nproc -nrich -nrp -nsenter -nu -nuclei -numfmt -nushell -od -og++4.8 -oha -onetun -opengfw -openrisk -orbiton -osmedeus -ouch -ov -overmind -partx -passdetective -paste -pathbuster -pathchk -pdfcpu -pelf -pelf.ascii85 -pelf.raw -pencode -pfetch-rs -pgrep -pgweb -phantun-client -phantun-server -pidof -pidstat -pidwait -pier -ping -pinky -pipesz -pipetty -pivot_root -pixi -pkgtop -pkill -planor -pmap -podman -podsync -ppath -ppfuzz -pping -pr -presenterm -pretender -prettyping -prev -printenv -printf -prlimit -procan -procs -progress -promtail -proxify -ps -pspy -ptx -pueue -pueued -puredns -pwd -pwdx -pwninit -q -qbittorrent-nox -qsreplace -qsv -quickcert -randexec -rapwp -rate-limit-checker -rathole -rattler-build -rclone -reader -readlink -readprofile -realm -realpath -rebuildctl -rebuilderd -rebuilderd-worker -recollapse_staticx -redguard -redive -rekor -rekor-cli -rekor-server -relic -removehost -removepro -rename -renice -reptyr -rescope -resdns -resizepart -restic -resto -rev -reviewdog -revit -revive -rfkill -rg -rga -ripgen -ripgrep -rm -rmdir -rmmod -rnr -roboxtractor -rootlesskit -rootlesskit-docker-proxy -ropr -rospo -rpaste -rpfu -rqbit -rshijack -rsync -rsync-ssl -rtcwake -ruff -runc -runcon -runiq -runme -rush -rust-parallel -rustcan -rustypaste -s3scanner -s3sync -s5cmd -sa1 -sa2 -sadc -sadf -sake -sar -sbctl -scalar -scilla -scopegen -scopeview -scp -screenfetch -script -scriptlive -scriptreplay -sd -sed -seq -sessionprobe -setarch -setpgid -setsid -setterm -sfdisk -sftp -sftp-server -sha1sum -sha224sum -sha256sum -sha384sum -sha512sum -shc -shellharden -shellz -shfmt -shortscan -shortutil -shred -shuf -shuffledns -sish -sj -sk -sk-tmux -skupper -slabtop -sleep -slirp4netns -sliver-client -sliver-server -smap -smenu -sn0int -sns -socat -soft-serve -sort -speedtest-go -spk -split -spoof-dpi -sq -sqlc -ssh -ssh-add -ssh-agent -ssh-keygen -ssh-keyscan -ssh-keysign -sshd -sshd_config -sshesame -sshkeys -sshportal -sshx -sshx-server -sslsearch -starship -stat -stdbuf -steampipe -stew -strace -sttr -stty -stuffbin -su-rs -subfinder -subjs -subxtract -sudo-rs -sulogin -sum -sunbeam -supervisord -surf -svg-hush -swaplabel -swapoff -swapon -switch_root -sync -syncat -syncthing -sysbox-fs -sysbox-mgr -sysbox-runc -sysctl -sysinfo-collector -sysstat -system-info-collector -systemctl-tui -systeroid -t-rec -tabs -tac -tahm -tail -tailscale -tailscale_merged -tailscaled -tailspin -tapestat -taplo -tar -taskset -tavern -tcpdump -tdl -tee -teldrive -tere -termshark -test -tgpt -tic -tidy-viewer -timeout -tinja -tldr -tload -tlrc -tlsx -tmate -tmux -toe -tok -tokei -top -touch -toybox -tput -tr -tracepath -traefik -trip -true -trufflehog -truncate -try -tset -tsort -ttts -tty -tty2web -ttyd -ttyrec2ansi -tuiarchiver -tut -twingate-client -twingate-connector -twingate-connector-staticx -twingate-connectorctl -twingate-notifier -txeh -tz -u-root -uclampset -udpx -uip -ul -umount -uname -uname26 -uncompress -uncover -unexpand -unf -unfurl -uniq -unix2dos -unix2mac -unlink -unlzma -unnappear -unshare -unxz -updatedb -uptime -upx -users -usql -utmpdump -uuidd -uuidgen -uuidparse -v2raya -v6disk -v6run -validtoml -vdir -vegeta -vfox -vhs -viddy -viewgen_staticx -visudo-rs -viu -vmstat -volta -vopono -vpnkit -vtm -vultr-cli -wadl-dumper -waitpid -walk -wall -wasminspect -watch -watchexec -waybackrobots -waybackurls -wc -wdctl -web-cache-vulnerability-scanner -websocat -wego -wget -wget-busybox -whereis -which -who -whoami -whoch -wipefs -wireguard-go -wireguard-rs -wireproxy -wiretap -wormhole-rs -wstunnel -wtf -wtfutil -wth -x8 -x86_64 -xargs -xargs-rs -xcp -xet_staticx -xetcmd -xetmnt -xh -xplr -xpointerkeys -xurls -xz -xzcat -xzcmp -xzdec -xzdiff -xzegrep -xzfgrep -xzgrep -xzless -xzmore -yalis -yataf -yazi -yes -yip -yj -yq -z -zcat -zcmp -zdiff -zdns -zegrep -zellij -zenith -zfgrep -zforce -zfxtop -zgrab2 -zgrep -zless -zmore -znew -zoxide -zramctl -zstd