Existem vários formatos de compressão nativos utilizados no linux e comandos para compactar e descompactar arquivos nesses formatos, e mesmo assim muitas pessoas que usam linux recebem arquivos no formato ZIP.
Se você chegou aqui é por que deve ser uma das pessoas que precisa descompactar arquivos ZIP no linux e está com dificuldade.
Para ajuda-lo(a) a fazer tal tarefa esse tutorial ensina como utilizar o comando zip e unzip no linux com 10 exemplos práticos para auxiliar a criar e extrair arquivos ZIP no linux.
Como instalar o comando zip e unzip no linux ?
Para instalar o comando zip e unzip nas distribuições linux Debian e Ubuntu use o gerenciador de pacotes apt, execute os comandos seguir autenticado com usuário root(administrador):
apt update
apt install zip unzip -yNas distribuições linux Fedora, Red hat Enterprise Linux ou em distros baseadas execute os comandos a seguir com o usuário root:
dnf install epel-release -y
dnf install zip unzip -yPrecisa aprender mais sobre os comandos apt e dnf ? Então leia nosso guia para iniciantes.
Agora que os comandos foram instalados no sistema é hora de ir pra prática.
Comando zip
O comando zip é usado para compactar um ou mais arquivos no formato de compressão chamado de zip. Na prática, ele cria uma cópia do arquivo e armazena no arquivo ZIP, e em seguida compacta o conteúdo do arquivo ZIP.
A sintaxe do comando é:
zip <options> zipfile list_filesExplicação:
- zip: é o comando.
- options: são as opções que podem ser usadas.
- zipfile: refere-se ao nome do arquivo .zip.
- list_files: refere-se a lista de arquivos que será compactado.
1. Compactar um único arquivo
Para compactar um único arquivo no formato ZIP, execute o comando zip seguido do nome do arquivo ZIP(fica a seu critério o nome que vai ser dado), seguido da localização do arquivo que será compactado:
zip services.zip /etc/services 
O Resultado é que a cópia do arquivo compactada foi reduzida em 58% do seu tamanho original.
2. Compactar múltiplos arquivos
Precisa zipar(compactar) dois ou mais arquivos ? Então inclua a lista de arquivos que serão compactados após o nome do arquivo “.zip”.
No exemplo a seguir será feita uma cópia dos arquivos /etc/hosts, /etc/passwd e /etc/group, e as cópias serão compactadas no arquivo etc-files.zip:
zip etc-files.zip /etc/hosts /etc/passwd /etc/groupPara ZIPAR cada arquivo do diretório, com exceção dos ocultos use caractere “*” asterisco após o diretório para indicar o nome de todos os arquivos.
Também inclua a opção -y ou --symlinks para copiar os links simbólicos, sem copiar o conteúdo dos arquivos de destino de cada link:
zip boot-sistema.zip /boot/* --symlinks3. Listando conteúdo do arquivo ZIP
É importante listar o conteúdo do arquivo “.zip” para saber se os arquivos compactados estão dentro mesmo.
Para listar o conteúdo do arquivo use a opção -sf ou --show-files do comando zip. Por exemplo, para visualizar o conteúdo do arquivo etc-files.zip, execute o comando:
zip --show-files etc-files.zip
4. Excluir arquivos específicos da compactação
Para compactar todos os arquivos de um diretório, excluindo alguns arquivos da compressão utilize a opção -x ou --exclude.
Exemplo, compactar os arquivos de /boot, excluindo os arquivos que iniciam com a palavra memtest:
zip boot-sistema2.zip /boot/* --symlinks --exclude /boot/memtest*Veja na imagem a seguir, que ao listar o conteúdo do arquivo boot-sistema2.zip, os arquivos que iniciam com a palavra memtest não estão inclusos no arquivo.

5. Compactar arquivos sem armazenar o caminho completo
Por padrão, quando um arquivo ZIP é criado no linux, o comando zip remove a “/” (barra) do inicio e armazena o restante da localização para cada arquivo compactado.
Portanto, para compactar os arquivos sem armazenar a informação do caminho completo utilize a opção -j ou --junk-paths.
Por exemplo, para compactar os arquivos com extensão “.log” (logs do sistema) de /var/log, sem armazenar o caminho completo, execute o comando:
zip logs-system.zip /var/log/*.log --junk-paths
Veja na imagem que a informação do caminho completo foi removido de cada arquivo adicionado ao arquivo logs.system.zip.
6. Compactar pasta no Linux
Por padrão, o comando zip apenas irá compactar arquivos. se você tentar compactar o diretório, vai ter o resultado como o mostrado no código destacado na cor vermelho abaixo:
zip boot-grub.zip /boot/grub
adding: boot/grub/ (stored 0%)Como pode vê, o conteúdo armazenado é 0%(mas acredite tem conteúdo lá dentro de /boot/grub). Então, como comprimir um diretório e tudo que tem dentro ?
Use a opção -r ou --recurse-paths para compactar a pasta e toda sua estrutura (subdiretórios e arquivos) recursivamente.
No exemplo a seguir será usada também a opção --symlinks para evitar duplicidade de conteúdo de arquivos e a opção --recurse-paths para copiar recursivamente o conteúdo de /boot para dentro de tudo-do-boot.zip:
zip --recurse-paths tudo-do-boot.zip /boot --symlinks7. Criar arquivo ZIP no linux com senha
Você pode ZIPAR arquivos e protege-los com senha usando a opção -e ou --encrypt do comando zip.
Para esse exemplo vou comprimir os arquivos /etc/shadow e /etc/gshadow com o comando zip:
zip --encrypt etc-encrypt.zip /etc/shadow /etc/gshadowAo executar o comando será solicitada a senha duas vezes e em seguida será feita a cópia dos arquivos para dentro do arquivo ZIP e o mesmo será criptografado.
Enter password:
Verify password:
adding: etc/shadow(deflated 59%)
adding: etc/gshadow (deflated 34%)Para extrair o conteúdo do arquivo “.zip” use o comando unzip que será ensinado ainda.
8. Adicionar novos arquivos ao arquivo ZIP existente
Precisa adicionar novos arquivos a um arquivo ZIP existente ? Então use a opção -g ou --grow do comando zip.
AVISO
Se essa operação falhar, o comando zip tentará restaurar o arquivo ao seu estado original. Se a restauração falhar, o arquivo pode ficar corrompido. Esta opção é ignorada quando não há arquivo existente ou quando pelo menos um membro do arquivo zip deve ser atualizado ou excluído.
Para exemplificar, será adicionado o arquivo /etc/protocols ao arquivo etc-files.zip usando opção -g ou --grow do comando zip:
zip etc-files.zip --grow /etc/protocols
Veja na imagem acima que o arquivo /etc/protocols foi adicionado ao arquivo etc-files.zip.
9. Remover arquivo de dentro do arquivo ZIP existente
É Possível também excluir arquivos que estão dentro do arquivo ZIP que já existe usando a opção -d ou --delete.
Para remover o arquivo /etc/passwd de dentro do arquivo etc-files.zip, o comando completo é:
zip --delete etc-files.zip /etc/passwdSe atente a localização do arquivo que quer remover, inclua sempre a caminho completo do arquivo que será removido de dentro do arquivo ZIP.
Quer aprender mais sobre o comando zip ? Recomendo a leitura do seu manual:
man zipComando unzip
O comando unzip é usado para listar, testar ou extrair arquivos de um arquivo ZIP. A sintaxe para testar e listar o conteúdo de um arquivo ZIP é:
unzip [opção] localização_do_arquivo.zipA sintaxe para extrair arquivos ZIP é:
unzip [opções] localização_do-arquivo.zip [-x xfile(s) ...] [-d exdir]A opção -x é opcional, ela é usada para excluir da extração uma lista de arquivos que estão dentro do arquivo ZIP.
A opção -d é também opcional, é usada para informar para onde os arquivos serão extraídos.
10. Descompactar arquivo ZIP no linux
Antes de extrair o conteúdo de um arquivo ZIP é recomendado testar usando a opção -t do comando unzip.
A opção -t extrai cada arquivo especificado na memória e compara o CRC (soma de verificação aprimorada) do arquivo expandido com o valor CRC armazenado do arquivo original.
Para testar um arquivo, execute o seguinte comando substituindo o nome do arquivo (etc-files.zip) pela localização do arquivo que irá testar.
unzip -t etc-files.zip
Agora que os arquivos dentro do arquivo ZIP foram testados, execute o comando para descompactar o arquivo ZIP, a sintaxe é unzip seguido da localização do arquivo:
unzip etc-files.zipAo extrair o conteúdo do arquivo ZIP o comportamento padrão é salvar no diretório corrente.
Para descompactar o conteúdo do arquivo para seu local de origem que é /etc utilize a opção -d do comando unzip para indicar a localização de destino, ou seja, onde vai ser extraído o conteúdo do arquivo ZIP.
No exemplo será extraído para o diretório / (raiz), já que o diretório boot é um subdiretório de /:
unzip etc-files.zip -d /Caso os arquivos já existam no destino, o comando unzip vai perguntar se deseja substituir o arquivos de destino pelo arquivo que está dentro do arquivo ZIP, abrindo um prompt com as seguintes opções: [y]es, [n]o, [A]ll, [N]one, [r]ename
Para responder “yes” para todas as perguntas, digite “A” de “All” e substituir todos os arquivos de destino pelos arquivos extraídos que tem o mesmo nome.
Para descompactar um arquivo ZIP criptografado protegido por senha, usamos somente o comando unzip seguido da localização do arquivo ZIP:
unzip etc-encrypt.zipAo executar o comando será solicitado a senha, informe a senha correta e os arquivos serão extraídos.
Quer aprender mais sobre o comando unzip ? Recomendo a leitura do seu manual:
man unzipConsiderações finais
É importante mencionar que alguns arquivos já são compactados, por isso nem todos os tipos de arquivos vão ter seu tamanho reduzido ou muito reduzido.
Os exemplos do tutorial com certeza vai ajudar quem está precisando criar e descompactar arquivos zip no linux.
Se o conhecimento apresentado foi útil ou tem dúvidas ou sugestões comente.

