this post was submitted on 25 Jun 2023
812 points (99.9% liked)

Technology

37801 readers
216 users here now

A nice place to discuss rumors, happenings, innovations, and challenges in the technology sphere. We also welcome discussions on the intersections of technology and society. If it’s technological news or discussion of technology, it probably belongs here.

Remember the overriding ethos on Beehaw: Be(e) Nice. Each user you encounter here is a person, and should be treated with kindness (even if they’re wrong, or use a Linux distro you don’t like). Personal attacks will not be tolerated.

Subcommunities on Beehaw:


This community's icon was made by Aaron Schneider, under the CC-BY-NC-SA 4.0 license.

founded 2 years ago
MODERATORS
 

I wholeheartedly agree with this blog post. I believe someone on here yesterday was asking about config file locations and setting them manually. This is in the same vein. I can't tell you how many times a command line method for discovering the location of a config file would have saved me 30 minutes of googling.

top 50 comments
sorted by: hot top controversial new old
[–] [email protected] 38 points 2 years ago (3 children)

Start your application / program with “strace” and see all the files it opens.

Also run “lsof” on a running process to see what files it has open.

[–] [email protected] 14 points 2 years ago* (last edited 2 years ago) (1 children)

Or use inotifywait from inotify-tools. It logs acces <type> to specified file/folder.

[–] [email protected] 5 points 2 years ago (1 children)

Interesting. I have not heard of this tools. But you say specified file or folder, that means you already know the file location?

load more comments (1 replies)
[–] [email protected] 8 points 2 years ago

This is the way.

[–] [email protected] 3 points 2 years ago (2 children)

I doubt that's a linux problem. All apps store config in /etc, ~/.*rc or ~/.config

Everything else should be considered a bug (looking at you, systemd!)

load more comments (2 replies)
[–] [email protected] 34 points 2 years ago

What's imho worse is how often config options or command flags don't actually do at all what's described in the manpage. I then have to dig into the source code once again and since you have to read through the whole behaviour it takes much longer than just looking up where the program tries to read config files.

Please - if you find such wrong docs in Open source software, submit a fix to the doc. It's as important as normal bugfixes.

[–] [email protected] 30 points 2 years ago (1 children)

I mean, that's sort of what xdg is intended to accomplish, with making $HOME/.config be the place, but it's kind of up to the individual software developers to comply. (Yes, I know, this doesn't really apply to Windows/Mac OS) But yeah, it would really be nice if configs/config locations were even remotely standardized.

[–] [email protected] 5 points 2 years ago (1 children)

There's also $HOME/.local/share for 'static data files' as part of XDG.

load more comments (1 replies)
[–] [email protected] 27 points 2 years ago (2 children)

What I find more frustrating is undocumented environment variables to override config locations.

The amount of times I've had to dig through the source code for a CLI to find an environment variable to force the config somewhere should be zero. But it's not.

load more comments (2 replies)
[–] [email protected] 26 points 2 years ago (3 children)

I'd take it a step further and say that all programs should be completely self-contained in one folder.

[–] [email protected] 25 points 2 years ago (6 children)

That doesn't work well for... well, most software I can think of.

Games: I do not want to backup the entire folder to ensure I have my save files. Modern games are huge. I want my saves to be located somewhere easy to get to (for the average user) and be quick to backup, without having to go in and cherry-pick specific files.
There was a good trend of using Documents/My Games, but sadly that seems to have fractured and now there's also Saved Games, savegames, and some software has moved to using %appdata% or just storing saves in the game install location. There's no consistency, it's a real pain in the hole.

DCC software (Blender, Photoshop, whatever): user preferences and config files. Again, I idon't want to backup the entire software, as I'm likely to reinstall it from an official source when migraing/reinstalling to ensure I have the latest updates. However I do want to be able to backup my preferences or plugins easily.

Any software that allows users to customise it: let me backup those preferences without cloning the entire app.

I do wish there was a standardised folder struture for user data, but it's 2023 and the chances of getting Windows/Max/Nix to agree upon and comform to a generic structure as sadly. The only thing I can think of that's the same across platforms is the .ssh folder.

[–] [email protected] 7 points 2 years ago

I don't think Win/Mac/*nix need to use the same structure across different OSs, but it would be nice if applications used conventional paths for within each of those OSs.

load more comments (5 replies)
[–] [email protected] 15 points 2 years ago (6 children)

This is the big thing I miss from my “pre-Unix” Mac days. In OS9 and earlier, apps were self contained, and didn’t spread their garbage everywhere. You deleted an app, you deleted all the app. Granted, there was a tradeoff (the parade of conflicting control panels and extensions you had to manually diagnose when your machine went sideways) but I never understood why in the Windows and Linux worlds devs would code so sloppily. Who told that dev my Documents folder is where their nonsense needs to go? That Documents folder is for my use, not theirs.

Still salty after all these years

[–] [email protected] 14 points 2 years ago (3 children)

I use linux and this annoys me to, every program just spams my home directory with config files, even though .config and .cache exist and are the standard

[–] [email protected] 3 points 2 years ago (2 children)

Set XDG_CONFIG_HOME= in your environment and most tools follow it

load more comments (2 replies)
[–] [email protected] 3 points 2 years ago

Programming tools/IDEs seem especially egregious.

.android
.cargo
.choosenim
.conda
.emacs.d
.nimble
.npm
.rustup
load more comments (1 replies)
load more comments (5 replies)
[–] [email protected] 5 points 2 years ago (4 children)

@TheBaldness
No. Static libraries are a security risk.
@wet_lettuce

load more comments (4 replies)
[–] [email protected] 18 points 2 years ago (2 children)

I guess the difficulty here is that sometimes that decision is made by the package manager, not the developer. You'll see Debian distros using a different location compared to a red hat one, while Mac OS is again different, so it might be hard for a developer to tell you where it is.

Still, some kind of universal CLI flag that tells you where the binary/service looks for configuration would be a great idea.

[–] [email protected] 18 points 2 years ago (1 children)

For Linux distros everything should use XDG_CONFIG_HOME and distros should start refusing to package anything that doesn't.

[–] [email protected] 3 points 2 years ago

It would be huge if a distro like Fedora did that

[–] [email protected] 8 points 2 years ago

And also: where it found the config file it is actually using at the moment. This would cover the 90% of the cases in which you just want to change a single Key to a different value or something or so...

[–] [email protected] 14 points 2 years ago (3 children)

It would be amazing yeah, standardising all user config files in the $HOME, and maybe etc/ or an default, non usable, user profile to store the original versions, in case of a bad config or corrupted file would save so much time debugging stuff.

[–] [email protected] 22 points 2 years ago (1 children)

Like $XDG_CONFIG_HOME and $XDG_DATA_HOME?

[–] [email protected] 16 points 2 years ago

Sadly, what we seem to have over and over is https://xkcd.com/927/

It’s getting better though

[–] [email protected] 7 points 2 years ago

The XDG Base Directory standard has kinda sorta been doing that; and I like it. Not everything supports it; and it's not perfect, but at least it's better than the wild west that application configs used to be.

[–] [email protected] 5 points 2 years ago (5 children)

GoboLinux kind of solved that problem but it hasn't been updated in years.

load more comments (5 replies)
[–] [email protected] 11 points 2 years ago (3 children)
load more comments (3 replies)
[–] [email protected] 9 points 2 years ago

And even if the program doesn't use config files (like various gnome, xfce and other programs), it should be possible to programmatically export and import full or partial configurations.

[–] [email protected] 9 points 2 years ago* (last edited 2 years ago) (1 children)

With Synaptic, you can show all files associated with a package. That includes config files. Saved me a lot of hassle on numerous occasions.

load more comments (1 replies)
[–] [email protected] 9 points 2 years ago (1 children)

Seriously, I've lost so muuuuch time just trying to find where some random program decides to store its config files. It sometimes takes me more time than actually "doing the config"

[–] [email protected] 3 points 2 years ago

Fortunately half of apps use dconf nowadays

[–] [email protected] 8 points 2 years ago

I don't know if you mean on linux but in my experience I have found the bottom part of the first man page usually has a section on config file locations.

[–] [email protected] 8 points 2 years ago (5 children)

(Windows) Resource Monitor, disk tab, tick the process, see what files it opens and closes.

Also the usual %programdata% and the two %appdata% find most things.

[–] [email protected] 4 points 2 years ago* (last edited 2 years ago)

Do things stay in that list when they are not used (since they would be opened and closed in far less than a second)? If so that's pretty cool.

If not, you can use Process Monitor to check this. That's what I usually do.

[–] [email protected] 3 points 2 years ago (1 children)

The *nix equivalent is the lsof command. This doesn't help you finding out in which hierarchy config files are parsed when the program accesses multiple ones, which is often the case.

[–] [email protected] 8 points 2 years ago (7 children)

You can use something like strace -eopen -f -o strace.out the_program to find all files that the program tried or succeeded to open. Then you can try to find the config file(s) in strace.out.

load more comments (7 replies)
load more comments (3 replies)
[–] [email protected] 8 points 2 years ago (2 children)

@wet_lettuce
Should be /etc or /usr/local/etc or /opt/etc or /opt/vendor/product/etc or ~/etc.

With some exceptions for historic compatibility (like ~/.bashrc)

The man page should specify where.

[–] [email protected] 6 points 2 years ago

The exceptions should only apply for cases where XDG is not available. In any other case, the appropriate XDG directoy configured by the user should be used first.

[–] [email protected] 4 points 2 years ago

For user-specific config files, aren't they all supposed to be in ~/.config these days? I've never heard of software using ~/etc.

[–] WildfireFailure 7 points 2 years ago (2 children)

If it's not in /etc it should be in the directory the exe file is located.

[–] [email protected] 11 points 2 years ago (3 children)

~/.config is the non-root version of /etc these days. But you just have to know that, which isn't ideal.

[–] [email protected] 9 points 2 years ago* (last edited 2 years ago)

If you are a developer, please take a look at the XDG Base Directory Specification and try to follow it, users will be very grateful.

Short summary: Look for $XDG_CONFIG_HOME for configs and $XDG_STATE_HOME for state. If they aren't available, use the defaults (./config and .local/share).

[–] [email protected] 7 points 2 years ago* (last edited 2 years ago) (1 children)

But what about .local/, or .appname/? It's just a mess

[–] [email protected] 7 points 2 years ago* (last edited 2 years ago)

~/.local is the non-root version of /usr. By .appname do you just mean a folder that a specific app made in your home for itself? Yeah, I never condone that. imo that's just a badly behaving app. It should move that folder into ~/.config.

[–] [email protected] 3 points 2 years ago

Configuration for root is in /root/, that is, root's home directory. /etc is for system configuration, different thing.

[–] [email protected] 5 points 2 years ago (2 children)

Certainly not. Nothing should write to /usr/bin except for the package manager in FHS distros and some distros binary directories aren't writable at all.

load more comments (2 replies)
[–] [email protected] 5 points 2 years ago

It puts it's Configs in /etc/ or it gets the hose again.

[–] [email protected] 4 points 2 years ago

I think this is a drawback of not having more specialized communities in beehaw yet - I'm not sure if this advice is very niche advice or if it has some value in general awareness for the layperson?

Normally I'd look up and see "r/DevChat" or some such distinct community name and have immediate context of, "that's not really for you to figure out". But this is essentially "r/technology" so I'm left wondering if I personally can take anything of value from this post.

Not a criticism or complaint, just an observation.

load more comments
view more: next ›