tar a beaucoup d'options et de paramètres ! Nous ne couvrirons que quelques options couramment utilisées.
[root@www ~]# tar [-j|-z] [cv] [nom du fichier créé par -f] nom du fichier... <==Emballage et compression
[root@www ~]# tar [-j|-z] [tv] [Nom du fichier créé par -f] <==Afficher le nom du fichier
[root@www ~]# tar [-j|-z] [xv] [-f nom du fichier créé] [-C répertoire] <==Décompression
options et paramètres :
-c : Créer un fichier empaqueté, qui peut être utilisé avec -v pour afficher le nom du fichier en cours d'empaquetage le processus ( nom de fichier)
-t : Vérifiez quels noms de fichiers sont contenus dans le contenu du fichier empaqueté, en vous concentrant sur le "nom de fichier"
-x : Fonction de décompression ou de décompression, peut être utilisée avec -C ; (majuscule) dans Déverrouillage de répertoires spécifiques
Il est important de noter que -c, -t, -x ne peuvent pas apparaître dans une série de lignes de commande en même temps.
-j : Compression/décompression grâce au support de bzip2 : Le meilleur nom de fichier à l'heure actuelle est *.tar.bz2
-z : Compression/décompression grâce à la prise en charge de gzip : Le nom de fichier à l'heure actuelle Il il est préférable d'utiliser *.tar.gz
-v : Pendant le processus de compression/décompression, le nom du fichier en cours de traitement sera affiché !
-f filename : -f doit être immédiatement suivi du nom du fichier à traiter ! Il est recommandé d'écrire une option distincte -f !
-C Répertoire : Cette option est utilisée pour la décompression. Si vous souhaitez décompresser dans un répertoire spécifique, vous pouvez utiliser cette option.
Introduction aux autres options qui seront utilisées dans les exercices suivants :
-p : conserver les autorisations et les attributs d'origine des données de sauvegarde, souvent utilisés pour sauvegarder (-c) les fichiers de configuration importants
-P : conserver le chemin absolu, ce qui signifie que les données de sauvegarde peuvent contenir l'existence du répertoire racine
--exclude=FILE : pendant le processus de compression, ne conditionnez pas FILE !
En fait, la manière la plus simple d'utiliser tar est de retenir la méthode suivante :
Compression : tar -jcv -f filename.tar.bz2 Le fichier à compressé Ou requête de nom de répertoire : tar -jtv -f nom de fichier.tar.bz2 Décompression : tar -jxv -f nom de fichier.tar.bz2 -C Le nom de fichier.tar.bz2 du répertoire à décompresser est le nom de fichier que nous avons choisi nous-mêmes, tar Le nom du fichier créé ne sera pas généré automatiquement ! Nous allons le personnaliser ! La prolongation est donc très importante ! Si [-j|-z] n'est pas ajouté, le nom du fichier est préférablement *.tar. Si c'est l'option -j, cela signifie qu'il existe un support pour bzip2, il est donc préférable que le nom du fichier soit *.tar.bz2, car bzip2 générera l'extension .bz2 ! Quant à la prise en charge de gzip avec -z ajouté, le nom de fichier est le meilleur *.tar.gz ! Est-ce que tu comprends?
De plus, comme "-f nom de fichier" est suivi de près, de nombreux articles dans le passé écrivaient souvent "-jcvf nom de fichier". C'est correct, mais comme l'ordre des options peut théoriquement être modifié, de nombreux lecteurs. pensera à tort que "-jvfc filename" peut également être utilisé. En fait, cela fera que le nom du fichier généré deviendra c! À cause de -fc ! Par conséquent, il est recommandé de séparer "-f filename" des autres options lors de l'apprentissage de tar, afin que des problèmes soient moins susceptibles de se produire.
Sans plus tard, testons quelques méthodes tar couramment utilisées !
Utilisez tar pour ajouter le paramètre -j ou -z pour sauvegarder le répertoire /etc/
C'est une bonne chose de sauvegarder le répertoire /etc si quelque chose arrive ! Le moyen le plus simple de sauvegarder /etc est d'utiliser tar ! Jouons d'abord :
[root@www ~]# tar -zpcv -f /root/etc.tar.gz /etc
tar : Suppression du premier `/' des noms de membres < Faites attention à ce message d'avertissement
/etc/
....Omettez le milieu....
/etc/esd.conf
/etc/crontab
# En raison de l'ajout de -v Cette option, donc le nom du fichier actif sera affiché à l'écran.
# Si vous parvenez à vous tourner vers la première page, vous trouverez le message d'erreur ci-dessus ! Cela sera expliqué ci-dessous.
# Quant à l'option -p, l'accent est mis sur "la préservation des autorisations et des attributs du fichier d'origine".
[root@www ~]# tar -jpcv -f /root/etc.tar.bz2 /etc
# Les informations affichées seront exactement les mêmes que ci-dessus !
[root@www ~]# ll /root/etc*
-rw-r--r-- 1 root root 8740252 15 novembre 23:07 /root/etc.tar.bz2
-rw-r--r-- 1 root root 13010999 15 novembre 23:01 /root/etc.tar.gz
[root@www ~]# du -sm /etc
118 /etc
# Pourquoi est-il recommandé d'utiliser l'option -j ? Pouvez-vous le déduire des valeurs ci-dessus ? ^_^
D'après les exercices ci-dessus, nous savons qu'en utilisant bzip2, c'est-à-dire l'option -j pour effectuer des sauvegardes, nous pouvons obtenir un meilleur taux de compression ! Comme le montre le tableau ci-dessus, le fichier /etc/ d'origine (118 Mo) est tombé à environ 8,7 Mo ! La raison de l'ajout de l'option "-p" est de préserver les autorisations et les attributs du fichier d'origine ! Dans l'introduction de la commande cp au chapitre 7, nous avons parlé des différents effets des autorisations et des types de fichiers (tels que les fichiers de liens) sur la copie. De même, lors de la sauvegarde de données système importantes, il est préférable de faire une sauvegarde complète des autorisations de ces fichiers d'origine. C'est là que l'option -p s'avère utile. Voyons ensuite quelles données existent dans le fichier packagé ?
Vérifiez le contenu des données du fichier tar (vous pouvez vérifier le nom du fichier) et si le nom du fichier de sauvegarde a la signification du répertoire racine
Il est très simple de vérifier le fichier nom! Vous pouvez faire ceci :
[root@www ~]# tar -jtv -f /root/etc.tar.bz2
....Omettre le devant....
-rw-r--r-- root / root 1016 2008-05-25 14:06:20 etc/dbus-1/session.conf
-rw-r--r-- root/root 153 2007-01-07 19:20:54 etc/ esd .conf
-rw-r--r-- root/root 255 2007-01-06 21:13:33 etc/crontab
Si vous ajoutez l'option -v, les détails Les autorisations/attributs du fichier seront répertoriés ! Si vous souhaitez simplement connaître le nom du fichier, supprimez simplement -v. À partir des données ci-dessus, nous pouvons trouver une chose très intéressante, c'est-à-dire que chaque nom de fichier n'a pas de répertoire racine ! C'est également ce que nous disait le message d'avertissement "tar: Suppression du /' initial des noms de membres (suppression du /' au début du nom de fichier)" apparu dans l'exercice précédent !
Alors pourquoi devons-nous supprimer le répertoire racine ? Surtout pour la sécurité ! Les données que nous avons sauvegardées à l'aide de tar devront peut-être être décompressées pour être utilisées. Le nom de fichier enregistré dans tar (le nom de fichier que nous venons d'observer en utilisant tar -jtvf) est le nom réel du fichier après décompression. Si le répertoire racine est supprimé, en supposant que vous décompressiez les données de sauvegarde dans /tmp, le nom du fichier décompressé deviendra « /tmp/etc/xxx ». Mais "si le répertoire racine n'est pas supprimé, le nom du fichier décompressé sera un chemin absolu, c'est-à-dire que les données décompressées seront définitivement placées dans /etc/xxx !" 』De cette façon, vos données originales sous /etc/ seront écrasées par les données de sauvegarde ! Conseils : Vous direz : « Puisqu'il s'agit de données de sauvegarde, il n'y a aucun problème à les restaurer, n'est-ce pas ? 』Imaginez une situation où les données que vous avez sauvegardées sont l'ancienne version de CentOS 4. /etc sous 5.x est écrasé par les données de sauvegarde de l'ancienne version ! Que devez-vous faire à ce stade ? Alors, bien sûr, il est plus sûr de supprimer le répertoire racine. Si vous êtes sûr de devoir sauvegarder le répertoire racine dans un fichier tar, vous pouvez utiliser l'option -P (majuscule). Veuillez consulter l'exemple d'analyse ci-dessous : Exemple : Sauvegardez le répertoire (racine) dans le nom du fichier et. check Vérifiez le nom du fichier de contenu du fichier de sauvegarde
[root@www ~]# tar -jpPcv -f /root/etc.and.root.tar.bz2 /etc
....Le le processus intermédiaire est omis ...
[root@www ~]# tar -jtf /root/etc.and.root.tar.bz2
/etc/dbus-1/session.conf
/ etc/esd.conf
/etc/crontab
# Cette fois, le nom du fichier vérifié ne contient pas l'option -v, c'est donc juste le nom du fichier ! Il n’y a pas d’attributs/autorisations détaillés ni d’autres paramètres.
Avez-vous remarqué des différences ? Si vous ajoutez l'option -P, le répertoire racine dans le nom du fichier existera ! Cependant, la suggestion personnelle de Brother Bird est de ne pas ajouter l’option -P pour la sauvegarde ! Après tout, nous effectuons souvent des sauvegardes pour suivre les problèmes futurs, et nous n’avons pas nécessairement besoin de restaurer le système d’origine ! Par conséquent, après avoir supprimé le répertoire racine, l’application des données de sauvegarde sera plus flexible ! C'est aussi plus sûr !
Extraire les données sauvegardées et considérer l'action de décompression du répertoire spécifique (application de l'option -C)
Et si vous souhaitez le décompresser ? Une action très simple consiste à le déballer directement !
[root@www ~]# tar -jxv -f /root/etc.tar.bz2
[root@www ~]# ll
....(précédent omis).. ..
drwxr-xr-x 105 root root 12288 11 novembre 04:02 etc
....(omis plus tard)....
À ce moment, l'emballage Le fichier effectuera l'action de "décompresser dans ce répertoire" ! Ainsi, vous trouverez un répertoire nommé etc sous votre répertoire personnel après un certain temps ! Donc, si vous souhaitez décompresser le fichier sous /tmp, vous pouvez cd /tmp puis exécuter la commande ci-dessus. Cependant, cela semble très gênant ~ Existe-t-il un moyen plus simple de « spécifier le répertoire à déverrouiller » ? Oui, vous pouvez utiliser l'option -C ! Par exemple :
[root@www ~]# tar -jxv -f /root/etc.tar.bz2 -C /tmp
[root@www ~]# ll /tmp
. ...(le premier est omis)....
drwxr-xr-x 105 root root 12288 11 novembre 04:02 etc
....(le second est omis)....
De cette façon, vous pouvez décompresser le fichier dans un autre répertoire ! Frère Niao pense personnellement qu'il faut retenir cette option -C ! D'accord, après le traitement, n'oubliez pas de supprimer ces deux répertoires !
[root@www ~]# rm -rf /root/etc /tmp/etc
Encore une fois, ce "rm -rf" est une commande très dangereuse ! Lors du téléchargement, assurez-vous de confirmer le nom du fichier qui suit. Ce que nous voulons supprimer sont /root/etc et /tmp/etc. Veuillez ne pas supprimer /etc/ ! Le système va mourir ~ ^_^
Méthode de décompression d'un seul fichier
Nous venons de décompresser le contenu de l'intégralité du fichier emballé ! Imaginez une situation : si je souhaite uniquement décompresser un des fichiers du fichier package, comment dois-je procéder ? C'est très simple, il vous suffit d'utiliser -jtv pour trouver le nom de fichier souhaité, puis de décompresser le nom du fichier. Utilisons l'exemple suivant pour illustrer :
# 1. Recherchez d'abord le nom de fichier souhaité, en supposant que le fichier shadow soit décompressé :
[root@www ~]# tar -jtv -f /root/etc.tar.bz2 |
-r-------- racine/racine 1230 2008-09-29 02:21:20 etc/shadow-
-r-------- racine/racine 622 2008- 09-29 02:21:20 etc/gshadow-
-r-------- root/root 636 2008-09-29 02:21:25 etc/gshadow
-r--- ----- root/root 1257 2008-09-29 02:21:25 etc/shadow <==C'est ce que nous voulons !
# Recherchez d'abord les noms de fichiers importants ! Parmi eux, grep est la fonction du mot-clé "retrieval" ! Nous vous l’expliquerons dans le troisième article !
# Il vous suffit d'avoir une idée ici ! Ce pipeline | peut être utilisé avec grep pour extraire la signification des mots-clés !
#2. Décompressez le fichier ! La syntaxe et la pratique réelle sont les suivantes :
[root@www ~]# tar -jxv -f packaged file.tar.bz2 nom du fichier à décompresser
[root@www ~]# tar -jxv -f /root/ etc.tar.bz2 etc/shadow
etc/shadow
[root@www ~]# ll etc
total 8
-r-------- 1 racine racine 1257 29 septembre 02:21 ombre <==Tu bois ! Il n'y a qu'un seul fichier !
#Très intéressant ! Un seul fichier sera débloqué pour le moment ! Cependant, le point clé est le nom du fichier ! Vous devez trouver le nom de fichier correct.
# Dans ce cas, vous ne pouvez pas écrire /etc/shadow ! À cause du nom de fichier enregistré dans etc.tar.bz2 !
Comment empaqueter un répertoire sans certains fichiers dans le répertoire
Supposons que nous voulions empaqueter les répertoires importants /etc/ /root, mais que nous ne voulions pas empaqueter les fichiers en commençant par /root/etc*, car ces fichiers sont tous des fichiers de sauvegarde que nous venons de créer ! Et en supposant que ce nouveau fichier d'empaquetage doit être placé sous /root/system.tar.bz2, ce fichier ne doit bien sûr pas être empaqueté par lui-même (car ce fichier est placé sous /root !), à ce stade, nous pouvons utiliser le aide de --exclude ! Cela signifie exclure, ne pas inclure ! Vous pouvez donc faire ceci :
[root@www ~]# tar -jcv -f /root/system.tar.bz2 --exclude=/root/etc*
> /root/system.tar.bz2 /etc /root
La commande ci-dessus est une liste complète ~ En fait, vous pouvez taper : 『tar -jcv -f /root/system.tar.bz2 - -exclude=/root/etc* --exclude=/root/system.tar.bz2 /etc /root』, si vous souhaitez saisir deux lignes, ajoutez une barre oblique inverse () à la fin et appuyez immédiatement sur [enter], vous pouvez accéder à la deuxième ligne et continuer à taper. Nous expliquerons en détail la méthode d’émission de cet ordre au chapitre 3. Grâce à cette action --exclude="file" , nous pouvons supprimer plusieurs fichiers ou répertoires spéciaux de la liste d'empaquetage, ce qui facilite l'action d'empaquetage ! ^_^
De plus, dans la nouvelle version de la commande tar, Brother Bird a constaté que le "--exclude file" d'origine semblait incapable de s'exécuter ! J'ai clairement vu cette option lors de l'utilisation de man tar, mais lorsque j'ai utilisé info tar, j'ai découvert que la fonction d'option était passée en mode "--exclude=file" ! Vous devez porter une attention particulière à cet endroit !
Sauvegardez uniquement les fichiers plus récents qu'un certain moment
Dans certains cas, vous souhaiterez sauvegarder de nouveaux fichiers, pas d'anciens fichiers ! En ce moment, l’option --newer-mtime est très importante ! En fait, il existe deux options, l'une est "--newer" et l'autre est "--newer-mtime". Quelle est la différence entre ces deux options ? Nous avons parlé de trois paramètres temporels différents dans l'introduction du toucher au chapitre 7. Lorsque vous utilisez --newer, cela signifie que la date suivante inclut "mtime et ctime", tandis que --newer-mtime est juste mtime ! Alors tu le sais ! ^_^. Alors essayons de nous occuper de Luo !
# 1. Utilisez d'abord find pour rechercher les fichiers plus récents que /etc/passwd
[root@www ~]# find /etc -newer /etc/passwd
.... ( Processus omis)....
# À ce moment, le nom de fichier qui est plus récent que l'heure mtime du fichier /etc/passwd sera affiché
# Ce résultat est différent sur chaque hôte ! Vous pouvez d’abord vérifier votre propre hôte, vous ne serez pas comme Brother Bird !
[root@www ~]# ll /etc/passwd
-rw-r--r-- 1 racine racine 1945 29 septembre 02:21 /etc/passwd
# 2. D'accord, utilisons tar pour le packager ! La date est le 29/09/2008 comme indiqué ci-dessus
[root@www ~]# tar -jcv -f /root/etc.newer.then.passwd.tar.bz2
> ="2008/09/29" /etc/*
....(milieu omis)....
/etc/smartd.conf <==Il y a vraiment un fichier de sauvegarde
. ...(omis au milieu)....
/etc/yum.repos.d/ <==Les répertoires seront tous enregistrés !
tar : /etc/yum.repos.d/CentOS-Base.repo : le fichier est inchangé ; non vidé
# La dernière ligne indique "non sauvegardé", ce qui signifie non vidé !
# 3. Affichez le fichier
[root@www ~]# tar -jtv -f /root/etc.newer.then.passwd.tar.bz2
> '/$'
# Grâce à cette commande, vous pouvez appeler les noms de fichiers dans tar.bz2 qui ne se terminent pas par /! C'est ce que nous voulons !
Vous savez maintenant à quel point cette commande est utile ! Vous pouvez même enregistrer et sauvegarder des fichiers différentiels ~ Une telle sauvegarde sera beaucoup plus facile ! Vous pouvez imaginer que si j'avais effectué une sauvegarde complète des données il y a seulement un mois, alors lorsque je souhaite sauvegarder ce mois-ci, je peux bien sûr sauvegarder uniquement les fichiers mis à niveau après le moment où j'ai sauvegardé le mois dernier ! Pourquoi? Parce que les fichiers originaux ont été sauvegardés ! Pourquoi recommencer ? Sauvegardez simplement les nouvelles données. Cela peut réduire la capacité de sauvegarde !
Nom de la base : tarfile, tarball ?
Il convient également de mentionner que les fichiers packagés par tar ont des noms différents, qu'ils soient compressés ou non ! S'il s'agit uniquement d'un packaging, il s'agit simplement de "tar -cv -f file.tar". Nous appelons ce fichier tarfile. S'il existe un support pour la compression, comme "tar -jcv -f file.tar.bz2", nous appelons cela une archive tar (tar ball ?) ! Ceci n'est qu'un titre de base, mais de nombreux livres et Internet utiliseront le nom de cette archive tar ! Je dois donc vous le présenter.
De plus, tar peut non seulement regrouper des données dans des fichiers, mais également regrouper des fichiers dans certains périphériques spéciaux. Par exemple, un lecteur de bande (bande) est un exemple courant. Étant donné que le lecteur de bande est un périphérique de lecture/écriture unique, nous ne pouvons pas utiliser de commandes telles que cp pour copier ! Ensuite, si vous souhaitez sauvegarder /home, /root, /etc sur un lecteur de bande (/dev/st0), vous pouvez utiliser : "tar -cv -f /dev/st0 /home /root /etc", c'est Bar très simple et facile ! Il est très courant d’utiliser des lecteurs de bande dans les sauvegardes (en particulier les applications d’entreprise) !
Application spéciale : utilisation des commandes de pipeline et du flux de données
Dans l'utilisation de tar, il existe l'un des moyens les plus spéciaux, à savoir la redirection standard du flux de données d'entrée et de sortie (entrée standard /standard output) et la méthode de commande pipeline (pipe), les fichiers à traiter sont empaquetés et décompressés dans le répertoire cible. Nous présenterons des données plus détaillées sur la redirection des flux de données et les commandes de pipeline dans le chapitre 11 bash. Jetons d'abord un exemple !
# 1. Emballez l'intégralité du répertoire /etc et décompressez-le dans /tmp
[root@www ~]# cd /tmp
[root@www tmp]# tar -cvf - / etc | tar -xvf -
# Cette action est un peu comme cp -r /etc /tmp~ Elle a toujours son utilité !
# Ce qu'il faut noter, c'est que le fichier de sortie devient - et le fichier d'entrée devient également -, et il y a un autre | ~
# Ceux-ci représentent respectivement la sortie standard, l'entrée standard et les commandes de pipeline !
# En termes simples, vous pouvez considérer - comme un périphérique (tampon) en mémoire.
# Pour des commandes plus détaillées sur le flux de données et le pipeline, veuillez consulter le chapitre bash !
Dans l'exemple ci-dessus, nous voulons "copier les données sous /etc directement dans le chemin actuel, qui se trouve sous /tmp", mais nous pensons qu'utiliser cp -r est un peu gênant. Ensuite, emballez-le de cette manière. Le - dans la commande signifie le fichier empaqueté ! Puisque nous ne voulons pas que le fichier intermédiaire existe, nous utilisons cette méthode pour le copier !
Ce qui précède est le contenu de la commande tar couramment utilisée dans Note 004 Linux. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !