Ответ 1
javac file.java 2> log.txt
Причина в том, что у вас есть два дескриптора выходных файлов вместо одного. Обычным является stdout, который вы можете перенаправить с помощью > и он должен использоваться для результирующего вывода. Второй, stderr, предназначен для чтения человеком, как предупреждения, ошибки, текущий статус и т.д., Этот перенаправляется с помощью 2 > .
Вторая строка, используя 2 > & 1, перенаправляет stderr в stdout и, наконец, stdout в log.txt.