Глядя на исходный код tail, видно, что он не на самом деле выполняет итерацию по всему файлу. Он начинается с конца и читается в обратном направлении до тех пор, пока не увидит правильное количество новых строк (плюс любой мусор из незавершенной строки), заметит это местоположение, пропустит до этого местоположения и выгрузит файл (или переданный или введенные данные) в дальнейшем.