Uninstall apps in windows vs linux

In windows it is so easy and orgnized , just i go to control panel and program and features tab, and i can see all installed apps , and i can remove what i want by just click uninstall.
in linux it is so messy , i have a lot of apps i wish to remove it, but i forget it , i don't know what apps that i have it, no way to list all installed app, and no way to uninstall it by click and no way to now if it exists.

Not sure this works in all versions but I can go to the software store and click on the installed tab and it will easily show me what programs I have installed on my system. Then I can remove any I don't want.

2 Likes

Using multiple package management systems is indeed a hassle. However, uninstalling Snap and Flatpak in Zorin OS is not difficult.

1 Like

ok i can see list of apps in software center, but i still can't find a lot of apps that is installed but not listed in it.
i know the apps that installed by compiled way not listed in it and also the portable apps. but there r a lot of apps that installed with apt get install not listed in it, also there r a lot of apps that in my task menu not listed in it

It is true that Linux requires a little bit more effort and personal responsibility.

Whenever I compile a source or install with make, I save that file in ~/Documents/Installedsrcs
Whenever I install a source from a stand-alone .deb package, I place that .deb package in ~/Documents/Installeddebs

That way, I can find and remove or reinstall or upgrade anything that was not installed via apt.
The vast majority of apps are installed with apt, though.
And I can run apt list -i or apt list --installed to gather a full list of them.
Or, I can check under installed in Synaptic.
Or, I can check under installed in Software Store.

4 Likes

thanks , it seem it all about self-organization and self-categorization.
i'll do that too.
1= i will create program folder has subfolders with name deb_apps , portable_apps , source_apps, and i will fixed it or placed it in places of thunar bookmark.
2= i will make the browser to ask me when to want to save the downloaded files.
3=for the previous downloaded files, i can filter them and add them to the suitalble catogery, i can filter with the extention files like *.deb or *.AppImage etc
4=for the previous downloaded portable apps , i can filter them by filter and folder that has executable type in its files
5=i think the stacer app is the nearest one to program and features in control panel in windows
6=I can use Appimage launcher for groups the Appimages apps
7= we can use dynamic way to detect the created or downloaded app extension and move it to the suitable categories

1 Like

@eid
WOW!

You went right to Solving Problems impressively.

In Open Source, such as Linux is, there are many ways of installing programs. being that way, it also means there are multiple ways of removing them.
The only way to prevent that diversity would be to contain all packages under one standardized system across Linux. This idea has some appeal, certainly. But it also would have the very undesirable affect of mitigating open source contribution.

In the future, perhaps, this can be neatly solved in a way without marginalizing independent contributors. But for now, those of us that benefit from FOSS must do our part, too.

1 Like

-i think we can distinguish bw archive that has folder for portable app(will have type excutable)and that has source code (will have makefile)and that which is normal folder.
-we can auto-clean archive after extract it content to the suitable categories
-for other extension type like *.deb we can also categories it automatically and we can auto-clean the .debs files after using it in the installing.

the dynamic way to detect the created or downloaded apps and move it to the suitable categories.

#!/bin/bash

# Function to check if the directory or its subfolders contain executable files
contains_executables() {
  local directory="$1"
  find "$directory" -type f -executable -print -quit | grep -q .
}

# Function to execute the command for tar.gz files
execute_tar_gz_command() {
  local source_apps_dir="/home/eid/program/source_apps/"
  local portable_apps_dir="/home/eid/program/portable_apps/"
  find "$1" -type f -name "*.tar.gz" -exec sh -c '
    if tar -tzf "$0" | grep -q "/." && tar -xzf "$0" -C "$2"; then
      extracted_dir=$(tar -tzf "$0" | head -n 1 | cut -f1 -d"/")
      if tar -tf "$0" | grep -qi "/Makefile"; then
        mv "$2/$extracted_dir" "$1"
      else
        if contains_executables "$2/$extracted_dir"; then
          mv "$2/$extracted_dir" "$3"
        fi
      fi
      rm "$0"
    fi
  ' {} "$source_apps_dir" "$portable_apps_dir" \;
}

# Function to execute the command for zip files
execute_zip_command() {
  local source_apps_dir="/home/eid/program/source_apps/"
  local portable_apps_dir="/home/eid/program/portable_apps/"
  find "$1" -type f -name "*.zip" -exec sh -c '
    if unzip -q "$0" -d "$2"; then
      extracted_dir=$(unzip -q -l "$0" | awk "/^[0-9]* [^\/]*\/ { print \$4 }" | head -n 1 | cut -f1 -d"/")
      if unzip -l "$0" | grep -qi "/Makefile"; then
        mv "$2/$extracted_dir" "$1"
      else
        if contains_executables "$2/$extracted_dir"; then
          mv "$2/$extracted_dir" "$3"
        fi
      fi
      rm "$0"
    fi
  ' {} "$source_apps_dir" "$portable_apps_dir" \;
}

# Function to execute the command for tar files
execute_tar_command() {
  local source_apps_dir="/home/eid/program/source_apps/"
  local portable_apps_dir="/home/eid/program/portable_apps/"
  find "$1" -type f -name "*.tar" -exec sh -c '
    if tar -tf "$0" | grep -q "/." && tar -xf "$0" -C "$2"; then
      extracted_dir=$(tar -tf "$0" | head -n 1 | cut -f1 -d"/")
      if tar -tf "$0" | grep -qi "/Makefile"; then
        mv "$2/$extracted_dir" "$1"
      else
        if contains_executables "$2/$extracted_dir"; then
          mv "$2/$extracted_dir" "$3"
        fi
      fi
      rm "$0"
    fi
  ' {} "$source_apps_dir" "$portable_apps_dir" \;
}

# Function to execute the command for tar.bz2 files
execute_tar_bz2_command() {
  local source_apps_dir="/home/eid/program/source_apps/"
  local portable_apps_dir="/home/eid/program/portable_apps/"
  find "$1" -type f -name "*.tar.bz2" -exec sh -c '
    if tar -tjf "$0" | grep -q "/." && tar -xjf "$0" -C "$2"; then
      extracted_dir=$(tar -tjf "$0" | head -n 1 | cut -f1 -d"/")
      if tar -tjf "$0" | grep -qi "/Makefile"; then
        mv "$2/$extracted_dir" "$1"
      else
        if contains_executables "$2/$extracted_dir"; then
          mv "$2/$extracted_dir" "$3"
        fi
      fi
      rm "$0"
    fi
  ' {} "$source_apps_dir" "$portable_apps_dir" \;
}

# Function to execute the command for deb files
execute_deb_command() {
  local target_dir="/home/eid/program/deb_apps/"
  find "$1" -type f -name "*.deb" -exec mv {} "$target_dir" \;
}

# Watch the download directory for new files
inotifywait -m -e create -e moved_to --format "%w%f" "/home/eid/Downloads/" |
while read -r file; do
  # Check if the file is an archive and extract accordingly
  if [[ "$file" == *".tar.gz" ]]; then
    execute_tar_gz_command "$file"
  elif [[ "$file" == *".zip" ]]; then
    execute_zip_command "$file"
  elif [[ "$file" == *".tar" ]]; then
    execute_tar_command "$file"
  elif [[ "$file" == *".tar.bz2" ]]; then
    execute_tar_bz2_command "$file"
  fi

  # Move deb files to the designated folder
  if [[ "$file" == *".deb" ]]; then
    execute_deb_command "$file"
  fi
done

2 Likes

we can include them, but i include only the portable and source apps which always are downloaded in archive types. i think there is no software center for these type, which can list and manage install and uninstall of it(snap,flatpak). and AppImagelauncher app can do the same with appimage apps, and Stacer app is very good

i think all portable and source apps are downloaded compressed.
i used the default folder which browser used it to download

1 Like

if u talk about .deb files , i think it is very good, after using it in installing, it will be cleared.
but for portable app, i need it to be saved along after extracting it, so i can launch it everytime, also for source app i need to it after that to used it in uninstall.

This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.