Stop Spreading C\*\*p at My `$HOME`

栏目: IT技术 · 发布时间: 4年前

内容简介:Disclaimer:Yes, this is a rant. Yes, I am displeased with state of software. And yes, I can use some harsh words. You were warned.For a some time now we haveCommon practice for storing all the stuff for different applications is to use dot files stored in

Disclaimer:Yes, this is a rant. Yes, I am displeased with state of software. And yes, I can use some harsh words. You were warned.

For a some time now we have Filesystem Hierarchy Standard which describes which data goes where in your *nix installation. In fact we have that for 28 years, which is almost as long as I live. This is quite some time. But for whatever reason we apply that only for the system hierarchy and we cannot have the same for something much closer to our heart - our dear $HOME .

Common practice for storing all the stuff for different applications is to use dot files stored in $HOME . These are files or directories starting with dot in their name which makes such files “hidden” on Unix systems. There is problem though. First let me show you all the files starting with dot in my $HOME :

-r--------  1 hauleth staff     9 Mar 30  2019 .CFUserTextEncoding
-rw-r--r--  1 hauleth staff 16388 Apr  9 11:46 .DS_Store
drwx------  2 hauleth staff    64 Apr 13 20:54 .Trash
-rw-------  1 hauleth staff 17835 Apr 10 21:17 .bash_history
drwx------ 12 hauleth staff   384 Mar 30  2019 .bash_sessions
drwxr-xr-x 13 hauleth staff   416 Mar 26 14:02 .cache
lrwxr-xr-x  1 hauleth staff    40 Aug 21  2019 .chunkwmrc
drwxr-xr-x 20 hauleth staff   640 Apr 15 21:59 .config
drwx------  3 hauleth staff    96 Apr 20  2019 .cups
lrwxr-xr-x  1 hauleth staff    39 Aug 21  2019 .curlrc
lrwxr-xr-x  1 hauleth staff    43 Aug 21  2019 .dir_colors
-rw-r--r--  1 hauleth staff  2587 Sep 10  2019 .direnvrc
drwxr-xr-x  6 hauleth staff   192 Apr 14 18:27 .docker
drwx------ 14 hauleth staff   448 Oct  1  2019 .dropbox
-r--------  1 hauleth staff    20 Apr  1  2019 .erlang.cookie
drwxr-xr-x  3 hauleth staff    96 Jul  1  2019 .gem
-rw-r--r--  1 hauleth staff   518 Mar 25 22:44 .gitconfig
drwx------ 14 hauleth staff   448 Apr 15 22:03 .gnupg
drwxr-xr-x  4 hauleth staff   128 Apr  2  2019 .hammerspoon
drwxr-xr-x  5 hauleth staff   160 Apr 14 19:39 .hex
drwx------  3 hauleth staff    96 Apr 26  2019 .httpie
-rw-r--r--  1 hauleth staff   165 Feb 22 13:50 .jlassetregistry.json
drwxr-xr-x  3 hauleth staff    96 Nov 29 22:13 .jssc
drwxr-xr-x  9 hauleth staff   288 Feb 21 17:46 .julia
drwx------ 14 hauleth staff   448 Oct  2  2019 .keychain
drwxr-x---  5 hauleth staff   160 Jan 24 12:20 .kube
-rw-------  1 hauleth staff   720 Apr 15 16:29 .lesshst
drwxr-x---  3 root    staff    96 Apr  3  2019 .lldb
drwx------  4 hauleth staff   128 Dec 18 14:16 .local
drwxr-xr-x  8 hauleth staff   256 Mar 20 12:29 .mitmproxy
drwxr-xr-x 18 hauleth staff   576 Apr 13 14:36 .mix
-rw-r--r--  1 hauleth staff   116 Apr 13 20:59 .nix-channels
drwxr-xr-x  4 hauleth staff   128 Apr 14 13:47 .nix-defexpr
lrwxr-xr-x  1 hauleth staff    46 Feb  1 22:13 .nix-profile
drwxr-xr-x  3 hauleth staff    96 Sep 27  2019 .npm
drwxr-xr-x  3 hauleth staff    96 Dec 19 14:05 .pex
-rw-r--r--  1 hauleth staff   183 May  2  2019 .profile
drwxr-xr-x  5 hauleth staff   160 Mar 20 16:27 .proxyman
drwxr-xr-x  2 hauleth staff    64 Feb 17 14:09 .proxyman-data
-rw-------  1 hauleth staff  1391 Jan 22 11:46 .psql_history
-rw-------  1 hauleth staff  1950 Feb 19 12:42 .python_history
lrwxr-xr-x  1 hauleth staff    37 Aug 21  2019 .skhdrc
drwx------ 11 hauleth staff   352 Oct  2  2019 .ssh
drwxr-xr-x  4 hauleth staff   128 May  8  2019 .terraform.d
drwxr-xr-x  4 hauleth staff   128 Dec  1 21:52 .thumbnails
drwxr-xr-x  9 hauleth staff   288 Mar  9 17:14 .vagrant.d
-rw-------  1 hauleth staff 11124 Apr 13 20:21 .viminfo
lrwxr-xr-x  1 hauleth staff    37 Aug 21  2019 .vimrc
drwx------  4 hauleth staff   128 Nov  8 16:51 .w3m
drwxr-xr-x 37 hauleth staff  1184 Apr 13 21:21 .weechat

As you can see, there is bunch of them, some are linked to my dotfiles repository, but most are not. What is the problem there?

The spread.

All of the data is smeared between gazillion of different filed with different types of data. This causes headaches because:

  • I cannot easily backup all the configuration as I need to check each file independently to check if this is configuration file or it is data
  • I cannot exclude data from my backups in a uniform way. I need to check each file independently and exclude it, remembering to do that for each new tool that I add. Alternatively I can use whitelist instead of blacklist of paths that I want to backup, but that pretty much defies the idea of having automatic backup.
  • Cleaning up the old caches and data is troublesome as user need to review all the folders and know what data they see mean.

But what We can do? Well, the macOS and Windows got it somewhat right, these OSes provide special paths for storing all configuration, caches, user-data, etc. in special, dedicated, and well known locations within user directories. It is like mentioned earlier FHS but for $HOME .

Unfortunately no other OS out there had:

  1. Power to force developers to behave reasonably
  2. Standard to which developers should adhere to

Unfortunately the 1st point is still true, but the 2nd one is somewhat resolved in form of XDG Base Directory Specification . This is pretty short, simple, and straightforward spec where which data should go.

This makes life so much easier:

$HOME/.config
$HOME/.config
$HOME/.cache

It makes your $HOME much cleaner, much more manageable, much more like your place, where you are the ruler, not as a manager of the bulletin board or the storage house.

At one point I was even considering to have approach similar to one taken by Graham Christensen , but that would make my life even more miserable instead of forcing developers to fix their software.

Just in case, this is not only mine view on the state of configuration files, just see old Google+ post by Rob Pike where he states exactly the same thing that FreeDesktop team try to address. I may not agree on all the concepts with Commander, but this one I vote all-fours.

For these who want to stop that madness and fix at least some software out there that is broken, you can check out my script that tries to fix (at least partially) non-conforming software.

TL;DR

Please, stop leaving your c**p in my $HOME and call it “installation”. If you want that, then I think you should find nearest Modern Art Gallery.

You can comment it on Lobste.rs or Hacker News or @ me on Twitter.


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

XML 基础教程

XML 基础教程

(美)雅可布斯 / 许劲松 等 / 人民邮电出版社 / 2007-7 / 49.00元

《XML 基础教程:入门、DOM、Ajax与Flash》全面讲述了XML及其在Web开发领域中的作用,同时介绍了一些特定的XML词汇以及相关的XML推荐标准。书中首先解释了XML并介绍了XML文档的不同组成部分;其次讲解了XML应用程序客户端的处理方法,如何使用CSS和 XSLT对XML文档进行显示和转换,如何使用JavaScript操作XML文档等内容;然后介绍了如何在服务器端处理XML;最后深......一起来看看 《XML 基础教程》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试