Worin bestehen die Unterschiede zwischen \textwidth, \linewidth und \columnwidth?

Bei Abbildungen, Tabellen, minipages, parboxen etc. erfolgt die Breitenangabe oft als Bruchteil von \textwidth oder \linewidth, also zum Beispiel 0.8\linewidth. Was ist der Unterschied? Und wie ist das beim zweispaltigen Satz?

Das folgende Dokument verdeutlicht das für normalen Text, eine minipage, eine \parbox, eine itemize und eine mdframed Umgebung:

\documentclass[parskip=half-,
  %twocolumn
  ]{scrartcl}
\usepackage[T1]{fontenc}
\usepackage[vmargin=2.5cm]{geometry}
\setlength\fboxsep{0pt}
\usepackage{xcolor}
\usepackage{mdframed}

\newcommand*\showwidth[1]{%
  \textcolor{blue}{\rule{\csname#1\endcsname}{1pt}}\newline
  \texttt{\textbackslash#1}: \expandafter\the\csname#1\endcsname
  \par
}

\begin{document}

% Rahmen für Spalte und Textbereich zeichnen
\smash{%
  \makebox[0pt][l]{\fbox{\parbox[t][\textheight]{\textwidth}{\strut}}}%
  \makebox[0pt][l]{\fbox{\parbox[t][\textheight]{\columnwidth}{\strut}}}%
  }%

\minisec{Normaler Text}
\showwidth{textwidth}
\showwidth{columnwidth}
\showwidth{linewidth}

\medskip
\fbox{%
  \begin{minipage}{6cm}
    \minisec{minipage (Breite 6\,cm)}
    \showwidth{textwidth}
    \showwidth{columnwidth}
    \showwidth{linewidth}
    \bigskip
  \end{minipage}%
}

\medskip
\fbox{%
  \parbox{6cm}{%
    \minisec{parbox (Breite 6\,cm)}
    \showwidth{textwidth}
    \showwidth{columnwidth}
    \showwidth{linewidth}
    \bigskip
  }%
}

\medskip
\minisec{itemize}
\begin{itemize}
  \item \showwidth{textwidth}
        \showwidth{columnwidth}
        \showwidth{linewidth}
\end{itemize}

\medskip
\begin{mdframed}[linecolor=red,userdefinedwidth=6cm]
  \minisec{mdframed (Breite 6\,cm)}
    \showwidth{textwidth}
    \showwidth{columnwidth}
    \showwidth{linewidth}
    \bigskip
\end{mdframed}

\end{document}

Das gleiche mit twocolumn als Klassenoption:

Von Clemens auf TeXwelt.de: Worin besteht der Unterschied zwischen \textwidth und \linewidth?.