As far as simple file tagging goes the fundamental question is where/how the tags are stored? If the file system doesn't have native support for tagging of heterogeneous file types two common (though far from ideal) approaches you'll find are filename embedding and sidecars. The former means that your tags are actually inserted into the filename, e.g. foo.txt becomes foo-[tag1,tag2].txt. The latter, sidecar, means the tags are stored in a file located in the same directory, or a common subdirectory, as the file to be tagged. For example foo.txt might be accompanied by .foo.txt.tags.
Neither of those sound too appealing do they? Embedding strikes me as plain ugly but at least you don't have to worry about how to keep your tags with a file if you move or delete it as is the case with sidecars.
But apparently these tradeoffs are acceptable to some people and there are some satisfied customers of offerings like...
I've heard some positive things about an open-source, cross-platform solution called TagSpaces. This uses the embedded approach by default but there is an Enterpri$e version with support for sidecars. The feature set is appealing and the UI looks nice as well as easy to use. There also look to be APIs if you want to integrate with other clients or create your own (e.g. CLI). And there's something to be said about the cross-platform aspect if you like to keep your files on more than one platform.
For this and other similar solutions it all comes down to whether you can live with the...let's face it...kinda hacky tag persistence details! :)
Edit: Here's some info from someone who uses embedded tags: Adding tags to files (PDFs) and process from the command-line or script The rest of the thread may be of interest, too.