Они похожи на ту же команду, но причиной, они отличаются, является состояние системы, изменился в результате первой команды. А именно, первое cat
использованный весь файл, таким образом, второе cat
не имеет ничего больше для чтения, EOF хитов (конец файла) сразу, и выходы.
Причина позади этого - Вы, используют то же самое описание файла (тот, с которым Вы создали exec < infile
и присвоенный дескриптору файла 3
) для обоих вызовов cat
. Одной из вещей, связанных с открытым описанием файла, является файловое смещение. Так, первое cat
читает весь файл, оставляет смещение в конце, и второй пытается поднять с конца файла и находит, что ничто не читает.
Скорее всего, некоторые файлы были удалены из электронного диска, в то время как некоторые процессы все еще имеют открытый дескриптор файла на них. Простой способ проверить это с lsof /home/stuff/ramdisk
, файлы, которые открыты, но больше в файловой системе, будут отмечены с' (удаленным)'.
Например, здесь я удалил файл '/dev/shm/test', в то время как он все еще открыт сценарием Python:
% df -h /dev/shm
Filesystem Size Used Avail Use% Mounted on
shm 512M 257M 256M 51% /dev/shm
% du -h /dev/shm
84K /dev/shm
% lsof /dev/shm
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
[...]
python 39756 adaephon 5r REG 0,13 268435456 44790 /dev/shm/test (deleted)
Вы могли
имейте файлы, которые были удалены на электронном диске, но все еще открыты некоторыми процессами или потоками? [после того как они обрабатывают/распараллеливают выход, ОС действительно освободит те inodes, и таким образом df сообщит о на 3 ГБ меньше, чем прежде]
имеет много вещей в каталоге/файле не достижимый du? [параноидальный? мог быть некоторый руткит или скрытая противность...]
и я уверен, что будут другие возможности, появляющиеся в моей голове [метаданные по файловой системе? это журналируется? у Вас есть много файлов? "du" игнорирует вещи в "lost+found" каталоге или его эквиваленте на любом FS, который Вы используете? и т.д.]