/etc/init.d directory exactly equivalent (functionally) to what I presume to be the more standard
/etc/rc.d/ (at least on arch)? Is there any particular reason canonical used init.d instead of rc.d for startup scripts?
/etc/init.d to store SysVinit scripts because Ubuntu is based on Debian and that's what Debian uses. Red Hat uses
/etc/rc.d/init.d. I forget what Slackware uses. There just isn't a standard location.
/etc/init.d was the old historical location for SVR4. I forgot why redhat added the /etc/rc.d/ level. I think to isolate things onto rc.d, but then needed to add a bunch of symlinks anyway for backwards compatibility. So there is /etc/init.d in redhat, just it symlinks elsewhere.
So the standard location is /etc/init.d, though it may be a symlink not a real directory.
There were some really old Linux distros that copied BSD with /etc/rc.local but pretty much no one uses that anymore.
/etc/rc.d directory tree denotes an Init system which follows the 4.4 BSD tradition of system initialization, which is usually called the
rc init system. All the modern (Free/Open/Net)BSD system and Slackware Linux follow this tradition.
/etc/init.d directory tree denotes the System V (SysV) init system which follows the AT&T UNIX, SunOS, Solaris tradition of system initialization. This is commonly called the SysV Init system. Debian proper still follows this tradition in the Wheezy series, but plans to use SystemD in the Jessie series. Historically, RedHat and derivatives have used SysV Init, but don't anymore.
Also, over time, features of both init schemes have been adopted by distributions.
Actually, at least in CentOS 6.8 Santiago,
/etc/init.d is just a softlink to
PuppyLinux has both /etc/rc.d and /etc/init.d, neither being a symlink. What is a symlink is /etc/rc.d/init.d, which links up a level to /etc/init.d (I'm looking at a Slackware-based Puppy-- there are also Ubuntu-based and other flavors.) There's a README.txt in each, explaining their approach.
/etc/init.d is a place where you can quickly deploy an init script. The second step towards activating this script is to run a
chkconfig command on it. Say you run
chkconfig --add <yourscript>, symbolic links will be created between
/etc/rc.d/rcX.d/S50<script> for example. X in rcX.d representing the runlevel number of the script, and S50 representing the script type (there are two of these types, S & K, S tells the system to start the script when it boots up, and K tells the system to exit the script gracefully when you shut down. The number after S/K represents the order at which these happen, in case you have some scripts that depend on others being active first). By default, if no runlevel is specified inside the script or when you issue the runlevel command, CentOS6 creates S50 scripts for runlevels 2,3,4,5 and K50 for runlevels 0,1,6 .