Hola, te comento cómo se puede hacer usando un comando
Shell. Si tienes alguna DLL podrías incorporarla a tu proyecto y descomprimir directamente sin lanzar comandos externos, pero como no conozco dicha librería, no te puedo ayudar en este sentido.
Bueno, te cuento cómo sería lanzando un comando externo. Lo ejemplifico con un sistema Windows, si usaras Linux supongo que sería equivalente.
//Creamos un objeto Process con el que lanzaremos el comando externo
System.Diagnostics.Process oProceso = new System.Diagnostics.Process();
//Para que nuestra aplicación no se quede esperando a que finalice el comando
//externo que estamos lannzando.
oProceso.EnableRaisingEvents = false;
//Indicamos el programa que queremos lanzar, lo ejemplifico con el WinRAR
oProceso.StartInfo.FileName = "D:\\APLICACIONES\\WinRAR\\WinRAR.exe";
//En caso que tengamos argumentos que pasarle los indicaríamos aquí. En el
//ejemplo simplemente le indico el fichero que quiero abrir con el WinRAR.
//Aquí iría la típica línea de comandos
oProceso.StartInfo.Arguments = "D:\\APLICACIONES\\WinRAR\\Order.rar";
//Lanzamos el proceso, lo que nos debería abrir el WinRAR y dentro de él, el fichero Order.rar
oProceso.Start();
En tu caso, para el fichero
tar.gz quedaría algo así:
oProceso.StartInfo.FileName = "tar";
oProceso.StartInfo.Arguments = "-xzvf archivo.tar.gz";
Espero haberte ayudado.
Saludos y ánimo