![Почему tgz можно открыть на Linux, но нельзя на Windows?](https://rvso.com/image/1586938/%D0%9F%D0%BE%D1%87%D0%B5%D0%BC%D1%83%20tgz%20%D0%BC%D0%BE%D0%B6%D0%BD%D0%BE%20%D0%BE%D1%82%D0%BA%D1%80%D1%8B%D1%82%D1%8C%20%D0%BD%D0%B0%20Linux%2C%20%D0%BD%D0%BE%20%D0%BD%D0%B5%D0%BB%D1%8C%D0%B7%D1%8F%20%D0%BD%D0%B0%20Windows%3F.png)
Я получил файл Tar/GZipp, созданный на встроенном устройстве Linux.
Файл можно прекрасно извлечь на рабочем столе Linux, если я запущу что-то вроде tar zxf myFile.tgz
. Файл извлекается во что-то вроде
dir1/
file1
file2
dir2/
file1
file2
subdir1/
file1
...но я подозреваю, что конкретное содержимое файла и его структура не имеют значения.
Когда я пытаюсь извлечь этот же файл в Windows (используя 7-Zip или WinZip), я получаю:
myFile/
<extensionless file with temp-looking name e.g. "logs_xqUt09">
Вероятно, имеет значение, что этот каталог верхнего уровня называется " myFile
", когда .tgz
я получил сообщениесамназван myFile.tgz
... но я не знаю наверняка, является ли это чем-то большим, чем просто совпадением.
Я немного покопался в SuperUser и нашел несколько связанных с этим проблем, одна из которых предполагала, что7-Зипобрабатывает .tgz
файлы лучше, чем WinZip, но, видимо, не в этой ситуации.
Кто-нибудь знает, что дает? Почему a может .tgz
быть полностью извлечено под Linux, но не под Windows? Какие могут быть обходные пути?
Если я переименую этот файл без расширения в .tar
файл, точто .tar
файл можно извлечь с помощью 7-Zip и/или WinZip.
Мне все равно хотелось бы понять, что происходит, и есть ли обходной путь, не требующий ручного переименования файлов, поскольку в идеале исходный .tgz
файл, доставленный встроенным устройством, должен поддаваться извлечению в Linux и Windows.
решение1
tgz (tar.gz) — это двухуровневый архив. Сначала поток файлов сохраняется как tar. Затем файл tar сжимается с помощью gzip. Если вы извлекаете файл gzip, вы всегда получите один файл — файл без расширения с именем, похожим на временный, в случае 7-zip. Этот файл можно «распаковать» с помощью tar или снова с помощью 7-zip.
кроме того, поток tar содержит метаданные, такие как права доступа к файлам, идентификатор группы + идентификатор пользователя, xattrs или контекст selinux (и, возможно, символические ссылки), которые теряются в файловой системе Windows, распаковка файлов Linux может завершиться неудачей или вызвать проблемы из-за набора символов ASCII в именах файлов (все символы, кроме /
разрешенных в Linux). обычно не имеет смысла извлекать архив tar на диск Windows
решение2
Почему?
Потому что Microsoft пока этого не встроила.
Типы файлов поддерживаются операционной системой только в том случае, если в нее добавлены необходимые инструкции, указывающие, как обрабатывать файлы.
.tag.gz имеет долгую историю использования в системах *nix, но .zip и другие пакеты гораздо популярнее в Windows, поэтому реальной потребности в поддержке этих типов пакетов в Windows не было.
На что-либо большее мы ответить не можем, поскольку мы не те люди, которые пишут Windows.
решение3
Полностью .tgz
извлекаемый в системе Linux, потому что tar
был создан AT&T Bell Laboratories специально для Unix и Unix-подобных операционных систем. И gzip
это просто алгоритм сжатия, который был разработан спустя годы после того, как tar
был разработан.
То же самое обоснование применимо ко всем другим расширениям файлов, которые поддерживаются в одной ОС, но не поддерживаются в другой. Например, вы не можете использовать файл .dmg
в Windows, и вы не можете использовать файл .msi
в macOS.
Большинство людей выбирают этот tar.gz
вариант в Linux/Unix, поскольку tar
он сохраняет атрибуты и разрешения файлов Unix и объединяет все файлы для архивации. Затем gzip
используется для сжатия.
Эта zip
опция сохраняет атрибуты файла MSDOS, затем сжимает каждый файл по отдельности, а затем объединяет каждый отдельный файл в один файл.
В зависимости от ситуации, вместо тарирования и сжатия файла на встроенном устройстве вы можете использовать команду zip
.