There isn't a standard mechanism to keep track of how often you run programs.
If your system keeps track of file access times, you can check the last read date for programs in /usr/bin
or for their data files. This can only tell you how long it is since the program was last executed, not how often it had been executed before that.
ls -rtu /usr/bin | head -n 30
To find out which package provides these programs:
dpkg -S $(ls -rtu /usr/bin/* | head -n 30)
You can log when applications are executed by installing the acct
package. The command lastcomm
reports the times executables were started. To see the most frequent ones since the logs were last rotated:
lastcomm | awk '{print $1}' | sort | uniq -c | sort -nr | head -n 30
For end-user programs, looking at the list of large packages and removing the ones whose name doesn't ring a bell works reasonably well. Just make sure that you only remove a package if it isn't an interactive application (according to the package description): don't remove system utilities since you can't know what might be using them under the hood. And of course pay attention to dependencies: only remove something if you've determined that everything that depends on it is also not something you care about.