Sometimes these things can be hard for first-timers. Being a do-it-myself person, I read that there are two folders for unit files (not in user mode)./usr/lib/systemd/system/: units provided by installed packages/etc/systemd/system/: units installed by the system administratorConflicting with this understanding is the following answer: https://unix.stackexchange.com/a/47715/33386. Can someone fill in the missing information so that I understand what is going on? (UPDATE: The answer has been updated, and my understanding no longer conflicts with it.)Also, it seems that the scripts are organized in subfolders within the /etc/systemd/system/ folder:getty.target.wantsmulti-user.target.wantsIn another location I read that there are other locations. It seems these are for user-specific services./usr/lib/systemd/user/ where services provided by installed packages go./etc/systemd/user/ where system-wide user services are placed by the system administrator.~/.config/systemd/user/ where the user puts its own services.Update 2015-08-31:For the sake of others, here is a link to a related question I recently asked: Is there a designated place for scripts that are (indirectly) automatically executed by systemd?
Where do I put my systemd unit file on Arch Linux?
arch linux;systemd;directory structure
The best place to put system unit files: /etc/systemd/systemJust be sure to add a target under the [Install] section, read How does it know? for details. The best place to put user unit files: /etc/systemd/user or $HOME/.config/systemd/userbut it depends on permissions and the situation. The truth is that systemd units (or as the intro sentence calls them, unit configurations) can go anywhereprovided you are willing to make manual symlinks and you are aware of the caveats. It makes life easier to put the unit where systemctl daemon-reload can find it for some good reasons:Using a standard location means that systemd generators will find them and make them easy to enable at boot with systemctl enable. This is because your unit will automatically be added to a unit dependency tree (a unit cache).You do not need to think about permissions, because only the right privileged users can write to the designated areas.How does it know?And how exactly does systemctl enable know where to create the symlink? You hard code it within theunit itself under the [install] section. Usually there is a line like[Install]WantedBy = multi-user.targetthat corresponds to a predefined place on the filesystem.This way, systemctl knows that this unit is dependent on a group of unit files called multi-user.target (target is the term used to designate unit dependency groups. You can list all groups with systemctl list-units --type target). The group of unit files to be loaded with a target is put in a targetname.target.wants directory. This is just a directory full of symlinks (or the real thing). If your [Install] section says it is WantedBy the multi-user.target, but a symlink to it does not exist in the multi-user.target.wants directory, then it will not load. When the systemd unit generators add your unit file to the dependency tree cache at boot (you can manually trigger generators with systemctl daemon-reload), it automatically knows where to put the symlinkin this case in the directory /etc/systemd/system/multi-user.target.wants/ should you enable it.Key Points in the Manual:Additional units might be loaded into systemd (linked) from        directories not on the unit load path. See the link command for        systemctl(1).Under systemctl, look for Unit File CommandsUnit File Load PathUnit files are loaded from a set of paths determined during compilation, described in the two tables below. Unit files found in directories listed earlier override files with the same name in directories lower in the list.When the variable $SYSTEMD_UNIT_PATH is set, the contents of this variable overrides the unit load path. If $SYSTEMD_UNIT_PATH ends with an empty component (:), the usual unit load path will be appended to the contents of the variable.Table 1 and Table 2 from man systemd.unit are good.Load paths when running in system mode (--system)./etc/systemd/system Local configuration/run/systemd/system Runtime units/usr/lib/systemd/system Units of installed packagesLoad path when running in user mode (--user)$XDG_CONFIG_HOME/systemd/user  User configuration (only used when $XDG_CONFIG_HOME is set)$HOME/.config/systemd/user  User configuration (only used when $XDG_CONFIG_HOME is not set)/etc/systemd/user  Local configuration$XDG_RUNTIME_DIR/systemd/user  Runtime units (only used when $XDG_RUNTIME_DIR is set)/run/systemd/user  Runtime units$XDG_DATA_HOME/systemd/user  Units of packages that have been installed in the home directory (only used when $XDG_DATA_HOME is set)$HOME/.local/share/systemd/user  Units of packages that have been installed in the home directory (only used when $XDG_DATA_HOME is not set)/usr/lib/systemd/user  Units of packages that have been installed system-wide