Here is the situation as far as I understand it:
Unix was the original system developed at the Bell labs.
It was/is proprietary. Other systems were subsequently developed that were like it. They could not call themselves 'Unix' because 'Unix' is a trademark. Therefore, we refer to them as Unix-like operating systems.
BSD was an early Unix-type operating system developed in the 1970s at Berkeley (University in California). Later on in the early 90s different versions of BSD arose... FreeBSD and NetBSD... a little later OpenBSD was forked from NetBSD so I believe. However, there were some legal ambiguities in the early 1990s to do with BSD, so the BSDs were hampered. Linux had come into being by then and largely since Linux did not have the legal problems that the BSDs had at the time, it was Linux rather BSD which gained mass adoption.
As well as historical differences, there are technical differences between Linux and the BSDs.
The BSDs are released under a BSD license, which is a very simple license which basically says... do whatever you want with this software... just don't sue us.
Linux, on the other hand, was and is released under the GNU Public License (GPL) which means the software is free, but, if you alter the code and then distribute the revamped version that any changes you have made must also be free. This is not necessary under the BSD license. You can take BSDs free code and make non free code out of it... this is forbidden under the GPL.
Also, the BSDs are regarded as full operating systems, whereas Linux is just a kernel. What this means is that for BSD userland tools (ie. common terminal commands such as grep and ls etc) are developed alongside the kernel.
Linux is just a kernel. The Linux kernel works alongside the userland tools that were created by the GNU project. This is why some people say you should call Linux 'GNU/Linux' because the Linux kernel on it's own cannot actually do anything useful.
Also the BSDs have a lot of separation between the base system and third party applications. In Linux this is not the case. Many prefer the BSDs approach in this regard.
There are differences between different BSDs.
In a nutshell FreeBSD has focused upon develping for the typical desktop machines (ie. i386 & AMD64). NetBSD has traditonally focused upon portability... in other words working on many different types of devices... not just desktops but embedded devices... electronic devices that we don't really think of as a computer.
Later on OpenBSD was forked from NetBSD. (ie. some of the developers were not happy with the way NetBSD was going so they left to form their own project based on NetBSD).
OpenBSD has traditionally focused upon security.
Different versions of Linux are also different to eachother. One of the main differences is which package manager they use. Some distribution use .deb with apt-get... others use rpm.
There are a lot of similarities between the BSDs and Linux (and Mac OS X for that matter) and the general principles and many of the command line tools are familiar throughout different Unix like systems.
Hope this was a help.