Why not just move the pointer that points to the first line of the file and move it to the line that we want?
Потому что не существует такого понятия, как «указатель, указывающий на первую строку файла».
Основные операции по изменению файла: :перезапись диапазона байтов (т. е. замена части данными той же длины ), добавление (т. е. добавление в конце ), усечение (т.е. удалить с конца ).
Большинство файловых систем хранят файлы в блоках фиксированного -размера, за исключением того, что последний блок может быть частичным. Невозможно изменить данные на месте, если модификация изменит размер того, что модифицируется, если только изменение не будет в конце или модификация не сдвинет данные на целое число блоков. Сдвиг данных на целое число блоков будет работать только по совпадению, и для этого нет широко распространенного интерфейса¹.
Самый эффективный способ удалить данные в начале файла — скопировать данные, которые необходимо сохранить, в новый файл. Именно это и делают
tail -n +42
илиsed '41,$p'
.¹ Современные системы Linux имеют системный вызов для удаления части файла :
fallocate(fd, FALLOC_FL_COLLAPSE_RANGE, …)
, который можно вызвать с помощью утилитыfallocate --collapse-range=…
. Также естьFALLOC_FL_INSERT_RANGE
и--insert-range
. Но они ограничены блоками, что делает их практически бесполезными для текстовых файлов, и они доступны не для всех файловых систем.
Не будет конфликтов файлов при установке KDE Plasma
и ГНОМ
; однако, если вы хотите сэкономить место:
Используйте эту команду для удаления Gnome Desktop:
yum remove @gnome-desktop