tarにはたくさんのオプションとパラメータがあります!ここでは、一般的に使用されるいくつかのオプションのみを説明します。
[root@www ~]# tar [-j|-z] [cv] [-f で作成したファイル名] filename... <== パッケージ化と圧縮
[root@www ~]# tar [- j|-z] [tv] [-f で作成したファイル名] <==ファイル名を表示
[root@www ~]# tar [-j|-z] [xv] [-f で作成したファイル名] [-C directory] <==解凍オプションとパラメータ:
-c: パッケージ化されたファイルを作成します。これを -v と一緒に使用すると、プロセスにパッケージ化されたファイル名 (ファイル名) を表示できます
-t: の内容を表示しますパッケージ化されたファイルの名前については、「ファイル名」を確認することが重要です。
-x: 解凍または解凍機能を -C (大文字) とともに使用して、特定のディレクトリに解凍できます
に特別な注意が払われます。 -c、-t、-x を一連のコマンド ラインに同時に指定することはできません。
-j: bzip2 サポートによる圧縮/解凍: 最適なファイル名は *.tar.bz2 です
-z: gzip サポートによる圧縮/解凍: 最適なファイル名は * .tar.gz
-v: 圧縮中/解凍処理中、処理中のファイル名が表示されます!
-f ファイル名: -f の直後に、処理するファイル名を指定する必要があります。別途オプション -f を記述することをお勧めします。
-C Directory : このオプションは、特定のディレクトリで解凍する場合に使用します。
後続の演習で使用する他のオプションの紹介:
-p: バックアップ データの元の権限と属性を保持し、重要な構成ファイルのバックアップ (-c) によく使用されます
-P: 絶対パスを保持します。つまり、ルート ディレクトリの存在の意味を含むバックアップ データを許可します。
--exclude=FILE: 圧縮プロセス中に、FILE をパッケージ化しないでください。
tar: メンバー名から先頭の `/' を削除します <==この警告メッセージに注意してください
/etc/
....途中省略....
/etc/esd.conf
/etc/crontab
# -vオプションを付けているため、画面上には有効なファイル名が表示されます。
# 最初のページを開くと、上記のエラー メッセージが表示されます。以下に説明する。
# -p オプションに関しては、「元のファイルの権限と属性を保持する」ことに重点が置かれています。
[root@www ~]# tar -jpcv -f /root/etc.tar.bz2 /etc
# 表示される情報は上記とまったく同じになります。
[root@www ~]# ll /root/etc*
-rw-r--r-- 1 ルート root 8740252 11 月 15 日 23:07 /root/etc.tar.bz2
-rw-r--r -- 1 root root 13010999 11 月 15 日 23:01 /root/etc.tar.gz
[root@www ~]# du -sm /etc
118 /etc
# -j オプションの使用が推奨されるのはなぜですか?上記の数値から分かるでしょうか? ^_^
[root@www ~]# tar -jtv -f /root/etc.tar.bz2
....前部省略....
-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
-v オプションを追加すると、詳細なファイルのアクセス許可/属性が一覧表示されます。ファイル名だけを知りたい場合は、-v を削除してください。上記のデータから、非常に興味深いことがわかります。それは、各ファイル名にはルート ディレクトリが存在しないということです。これは、前の演習で表示された警告メッセージ「tar: メンバー名から先頭の /' を削除しています (ファイル名の先頭の /' を削除しました)」からもわかります。
では、なぜルートディレクトリを削除する必要があるのでしょうか?主に安全のためです! tar を使用してバックアップしたデータは、使用するために解凍する必要がある場合があります。tar に記録されたファイル名 (tar -jtvf を使用して確認したファイル名) は、解凍後の実際のファイル名です。 ルートディレクトリを削除した場合、/tmpにあるバックアップデータを解凍すると、解凍後のファイル名は「/tmp/etc/xxx」となります。 しかし、「ルートディレクトリを削除しないと、解凍されたファイル名は絶対パスになります。つまり、解凍されたデータは必ず/etc/xxxに配置されます。」 』 このようにして、/etc/配下の元のデータがバックアップデータで上書きされます!ヒント: 「バックアップデータだから復元しても問題ないですよね?」 』 バックアップしたデータが旧バージョンのCentOS 4.5.x以下の/etcが旧バージョンのバックアップデータで上書きされてしまう状況を想像してみてください!この時点で何をすべきでしょうか?したがって、もちろん、ルート ディレクトリを削除する方が安全です。 ルート ディレクトリを tar ファイルにバックアップする必要があることが確実な場合は、-P (大文字) オプションを使用できます。以下の分析例を参照してください。 例: ファイル名で (ルート) ディレクトリをバックアップします。 check バックアップファイルの内容ファイル名を確認します
[root@www ~]# tar -jpPcv -f /root/etc.and.root.tar.bz2 /etc
....途中の処理は省略しています。 ..
[root @www ~]# tar -jtf /root/etc.and.root.tar.bz2
/etc/dbus-1/session.conf
/etc/esd.conf
/etc/crontab
#今回はファイル名を確認します -v オプションがないのでファイル名だけです!詳細な属性/権限やその他のパラメータはありません。
何か違いに気づきましたか? -P オプションを追加すると、ファイル名のルート ディレクトリが存在します。ただし、Bird 兄弟の個人的な提案は、バックアップに -P オプションを追加しないことです。 結局のところ、将来の問題を追跡するためにバックアップすることがよくあり、必ずしも元のシステムに復元する必要はありません。 したがって、ルート ディレクトリを削除した後は、バックアップ データの適用がより柔軟になります。安全性も高いですよ!
バックアップデータを解凍し、特定のディレクトリの解凍動作を検討します(-Cオプションの適用)
解凍したい場合はどうすればよいですか?非常に簡単な操作は、直接解凍することです。
[root@www ~]# tar -jxv -f /root/etc.tar.bz2
[root@www ~]# ll
....(前略)....
drwxr-xr-x 105 root root 12288 Nov 11 04:02 etc
....(後略)....
この時、パッケージファイルは「このディレクトリに解凍」されます! しばらくすると、ホーム ディレクトリの下に etc という名前のディレクトリが見つかるでしょう。したがって、/tmp の下にあるファイルを解凍する場合は、cd /tmp を実行してから上記のコマンドを実行します。しかし、これはとても面倒ですね~もっと簡単に「ロックを解除するディレクトリを指定する」方法はないでしょうか? はい、-C オプションを使用できます。例:
[root@www ~]# tar -jxv -f /root/etc.tar.bz2 -C /tmp
[root@www ~]# ll /tmp
....(先頭省略) ) ....
drwxr-xr-x 105 root root 12288 Nov 11 04:02 etc
....(後略)....
このようにして、ファイルを別のディレクトリに置くことができますルオを解く! Niao 兄弟は、この -C オプションを覚えておく必要があると個人的に信じています。 処理が完了したら、これら 2 つのディレクトリを忘れずに削除してください。
[root@www ~]# rm -rf /root/etc /tmp/etc
この「rm -rf」は非常に危険なコマンドであることをもう一度強調します。ダウンロードの際は、下記のファイル名を必ずご確認ください。削除したいのは /root/etc と /tmp/etc です。/etc/ は削除しないでください。システムが死んでしまいますよ~^_^
単一ファイルを解凍する方法のみ
今、パッケージ化されたファイル全体の内容をすべて解凍しました!状況を想像してください。パッケージ ファイル内のファイルの 1 つだけを解凍したい場合、どうすればよいでしょうか?非常に簡単で、-jtv を使用して必要なファイル名を検索し、そのファイル名を解凍するだけです。 次の例を使用して説明しましょう:
# 1. まず、シャドウ ファイルが解凍されていると仮定して、必要なファイル名を見つけます。
[root@www ~]# tar -jtv -f /root/etc.tar.bz2 grep 'shadow'
-r- ------- ルート/ルート 1230 2008-09-29 02:21:20 etc/shadow-
-r---------- ルート/ルート 622 2008-09-29 02:21:20 etc/gshadow-
-r-------- ルート/ルート 636 2008-09-29 02:21:25 etc/gshadow
-r-------- ルート/ルート 1257 2008-09 -29 02:21:25 etc/shadow <==これが私たちが望んでいることです!
# 重要なファイル名を最初に検索してください!その中でもgrepは「検索」キーワードの機能です!第3回の記事で解説していきます!
# ここで必要なのはアイデアだけです!このパイプラインを grep で使用すると、キーワードの意味を抽出できます。
# 2. ファイルを解凍します。構文と実際の実行方法は次のとおりです:
[root@www ~]# tar -jxv -f packaged file.tar.bz2 解凍するファイル名
[root@www ~]# tar -jxv -f /root/etc .tar.bz2 etc/shadow
etc/shadow
[root@www ~]# ll etc
total 8
-r-------- 1 root root 1257 Sep 29 02:21shadow <==Yo飲む!ファイルは 1 つだけです。
#とても興味深いです!現時点では 1 つのファイルのみがロック解除されます。ただし、重要なポイントはファイル名です。正しいファイル名を見つける必要があります。
# この例では、 /etc/shadow を書くことはできません。 etc.tar.bz2に記録されているファイル名のためです!
ディレクトリ内にいくつかのファイルがない状態でディレクトリをパッケージ化する方法
重要なディレクトリ /etc/ /root をパッケージ化したいとしますが、/root/etc* ファイルで始まるディレクトリはパッケージ化したくないとします。これらのファイルはすべて、作成したばかりのバックアップ ファイルです。そして、この新しいパッケージ化ファイルが /root/system.tar.bz2 として配置されると仮定すると、もちろん、このファイルは単独でパッケージ化されるべきではありません (このファイルは /root の下に配置されるためです!)。この時点では、 --exclude のヘルプ! 除外というのは含めないという意味です!したがって、これを行うことができます:
[root@www ~]# tar -jcv -f /root/system.tar.bz2 --exclude=/root/etc*
> --exclude=/root/system.tar .bz2 /etc /root
上記のコマンドはリスト全体です~実際には、次のように入力できます: "tar -jcv -f /root/system.tar.bz2 --exclude=/root/etc* - -exclude= /root/system.tar.bz2 /etc /root』 と入力する場合、2行入力する場合は最後にバックスラッシュ()を追加してすぐに[Enter]を押すと2行目に進むことができます。この命令の発行方法については、第 3 章で詳しく説明します。 この --exclude="file" アクションにより、パッケージ化リストからいくつかの特殊なファイルまたはディレクトリを削除できるため、パッケージ化アクションが簡単になります。 ^_^
さらに、バード兄弟は、新しいバージョンの tar コマンドでは、元の「--exclude file」が実際には実行できないようであることを発見しました。 man tar を使用するときはこのオプションがはっきりとわかりましたが、info tar を使用すると、オプション関数が「--exclude=file」モードに変わっていることがわかりました。ここは特に注意が必要です!
特定の時点より新しいファイルのみをバックアップします
場合によっては、古いファイルではなく新しいファイルをバックアップしたい場合があります。現時点では、 --newer-mtime オプションが非常に重要です。 実際には、2 つのオプションがあります。1 つは「--newer」、もう 1 つは「--newer-mtime」です。これら 2 つのオプションの違いは何ですか? 第 7 章の touch の紹介で 3 つの異なる時間パラメータについて説明しました。 --newer を使用すると、後続の日付に「mtime と ctime」が含まれることを意味しますが、--newer-mtime は単なる mtime です。 だからあなたはそれを知っています! ^_^。それではルオに挑戦してみましょう!
# 1. まず find を使って /etc/passwd
[root@www ~]# find /etc -newer /etc/passwd
....(処理省略).... より新しいファイルを検索します。 # このとき、/etc/passwd ファイルの mtime より新しいファイル名が表示されます
# この結果はホストごとに異なります。まず自分のホストを確認してください。Brother Bird のようにはならないでしょう。
[root@www ~]# ll /etc/passwd
-rw-r--r-- 1 root root 1945 Sep 29 02:21 /etc/passwd
# 2. わかりました、tar を使用して実行します梱包してください!日付は上記のように 2008/09/29 です
[root@www ~]# tar -jcv -f /root/etc.newer.then.passwd.tar.bz2
> --newer-mtime="2008/ 09/29" /etc/*
....(中略)....
/etc/smartd.conf <==本当はバックアップファイルがあります
....(中略)... .
/etc/yum.repos.d/ <==ディレクトリはすべて記録されます。
tar: /etc/yum.repos.d/CentOS-Base.repo: ファイルは変更されていません; ダンプされていません
# 最後の行には「バックアップされていません」と表示されており、ダンプされていないことを意味します。
# 3. ファイルを表示します
[root@www ~]# tar -jtv -f /root/etc.newer.then.passwd.tar.bz2
> grep -v '/$'
#コマンドを使用すると、tar.bz2 内の /! で終わらないファイル名を呼び出すことができます。それが私たちが望んでいることです!
これで、このコマンドがいかに便利であるかがわかりました。差分ファイルを記録してバックアップすることもできますよ~ このようにバックアップするのがはるかに簡単になります。このように想像できます。1 か月前に完全なデータ バックアップを実行しただけである場合、今月バックアップしたい場合は、当然、先月バックアップした時点以降にアップグレードされたファイルのみをバックアップできます。 なぜ?元のファイルがバックアップされているためです。なぜまたやるのですか?新しいデータをバックアップするだけです。これにより、バックアップ容量が削減される可能性があります。
ベース名: tarfile、tarball?
tar でパッケージ化されたファイルは、圧縮されているかどうかに関係なく、名前が異なることにも言及する価値があります。 パッケージ化だけの場合は「tar -cv -f file.tar」となります。このファイルを tarfile と呼びます。 「tar -jcv -f file.tar.bz2」などの圧縮がサポートされている場合、それを tar ボール (tar ボール?) と呼びます。 これは単なる基本的なタイトルですが、多くの書籍やインターネットでこの tarball の名前が使用されます。 ということで、紹介しなければなりません。
さらに、tar はデータをファイルにパッケージ化するだけでなく、テープ ドライブ (テープ) などの特定の特殊なデバイスにファイルをパッケージ化することもできます。テープ ドライブは 1 回限りの読み取り/書き込みデバイスであるため、cp などのコマンドを使用してコピーすることはできません。 /home、/root、/etc をテープ ドライブ (/dev/st0) にバックアップする場合は、「tar -cv -f /dev/st0 /home /root /etc」を使用できます。とてもシンプルで簡単なバーです! テープ ドライブがバックアップ (特にエンタープライズ アプリケーション) に使用されるのは非常に一般的です。
特別なアプリケーション: パイプライン コマンドとデータ フローの使用
tar の使用には、最も特別な方法の 1 つがあり、それは、標準入出力データ フロー リダイレクト (標準入力/標準出力) とパイプライン コマンドを使用することです。 (pipe ) メソッドでは、処理対象のファイルがパッケージ化され、ターゲット ディレクトリに解凍されます。 データ フロー リダイレクトとパイプライン コマンドに関する詳細なデータについては、第 11 章 bash で紹介します。まず例を見てみましょう。
# 1. /etc ディレクトリ全体をパックし、/tmp に解凍します
[root@www ~]# cd /tmp
[root@www tmp]# tar -cvf - /etc tar -xvf -
# これアクションは cp -r /etc /tmp に似ていますが、それでもその目的はあります。
# 注意すべき点は、出力ファイルが - になり、入力ファイルも - になり、別の ~
# これらはそれぞれ標準出力、標準入力、パイプライン コマンドを表します。
# 簡単に言うと、 - はメモリ内のデバイス (バッファ) と考えることができます。
# データ フローとパイプライン コマンドの詳細については、bash の章を参照してください。
上記の例では、「/etc配下のデータを/tmp配下の現在のパスに直接コピー」したいのですが、cp -rを使うのはちょっと面倒だと思うので、そのままパッケージ化します。この To package では、コマンド内の - はパッケージ化されたファイルを表します。 中間ファイルは存在させたくないので、この方法でコピーします。
上記は、Note 004 Linux でよく使用される tar コマンドの内容です。さらに関連した内容については、PHP 中国語 Web サイト (www.php.cn) に注目してください。