GNU tarを使用して異なる--mode値を指定する

GNU tarを使用して異なる--mode値を指定する

私はGNUを使ってtarネットワークドライブに保存されているディレクトリからtarballを作成しようとしています。このネットワークドライブは、保存されているすべてのコンテンツに対してデフォルトモード0700()に設定されており、-rwx------tarballが作成されるまで変更できません。

次のコマンドを使用して、tarballに保存されているファイルの権限を変更しました。

tar -c --mode=0644 -f project.tar ./project/

問題は、タールボールのすべての権限が0644-rw-r--r--)に変更されることです。このディレクトリには実行可能ファイルがないため、./project/すべて0644文書それは問題ではありません。しかし目次結局0644私はそれを受け継いだ。他のシステムから抽出する場合は、実行ビットが追加されるまでディレクトリに入ることはできません。

tarGNUにすべてのモードを変更するように指示することは可能ですか?文書0644すべてのモードを変更してみてください目次到着する0755?コマンドのとほぼ同じです-type f-type dfind

オペレーティングシステムはDebian 11 Bullseyeバージョンで、GNUtarバージョンは1.34です。

答え1

そして牛に似た一種の栄養tar、あなたはできます:

tar --mode a=r,u+w,a+X -cf file.tar directory

これにより、rwxr-xr-xディレクトリタイプファイルだけでなく、rw-r--r--他のすべての種類のファイル(シンボリックリンクとディレクトリを含む)も提供されます。これは次のように構成されます。

  • a=r:特権リセットr--r--r--
  • u+w:serwに追加されたのでurw-r--r--
  • a+X:llxに追加されますが、aディレクトリタイプファイルにのみ追加されるrwxr-xr-xため、ディレクトリとrw-r--r--他のすべての種類のファイルで機能します。

完全な柔軟性のために、以下を使用できます。star:

star cf file.tar -find directory \
     -type d -chmod 755 \
  -o -type l -chmod 777 \
  -o         -chmod 644

rwxr-xr-xディレクトリタイプファイルdrwxrwxrwxシンボルインクタイプファイルlrw-r--r--その他の種類のファイルはどこで入手できますか?

または、シンボル形式を使用します。

star cf file.tar -find directory \
     -type d -chmod a=rx,u+w \
  -o -type l -chmod a=rwx \
  -o         -chmod a=r,u+w

答え2

親戚が利用可能chmodに類似、単なる固定パターンではありません--mode。調査する手動、マンページだけでなく。

useを使用して、a+r誰にでも読み取り権限を付与できます。a+Xどこにでも存在する場合は実行権限を付与します。

tar -c --mode=a+rX …

ただし、ファイルシステムがすべてのファイルを実行可能にすると、アーカイブ内のすべてのファイルが実行可能になります。私はGNU tarを使ってファイルを異なる方法で調整する方法がないと思います。 (実際には、存在しません:+Xディレクトリを読み取ることができる場合は、ディレクトリも実行可能にしてa=r,u+w,a+X動作します。.)

Paxには権限を調整する方法はありません。

最も簡単な方法は使用していると思います。ファイルシステムバインディングさまざまなメタデータを使用してファイルシステムビューを作成します。これはヒューズファイルシステムなので、システムにFUSE自体がインストールされている限り、管理者権限なしでインストールして使用できます。 BindfsはGNU tarよりも優れた柔軟性を提供します--mode。もう1つの利点は、同様の機能を持たないプログラムで使用できることですtar --mode。あなたはそれを使用することができます--permsオプション到着権限の変更:

mkdir -p views/project
bindfs --no-allow-other -p a+rD project views/project
tar -C views -cf project.tar project
fusermount -u views/project
rmdir views/project

Pythonではtarfileモジュールはコード作成を比較的便利にします。繰り返しアーカイブをサポートしているので、アーカイブ全体を一度にメモリに保存する必要はないと思います。しかし、まだ多くのコードを書く必要があります。

答え3

を使用しないと、tarルールによって属性を変更できない問題を解決できますtar

mksquashfsミニ言語があります行動組み込みであり、特定のフィルタリング規則に従ってアイテムをアーカイブするために適用できます。ここ。簡単です。構文はaction@conditionなので、次のようになります。

mksquashfs ./project/ project.squashfs -no-strip -action 'chmod(0755)@type(d)' -action 'chmod(644)@type(f)' 

すべてのディレクトリエントリには0755権限があり、すべてのファイルには0644権限があります。フォルダにfifo、ソケット、シンボリックリンクがある可能性があるため、「ディレクトリ」と「ファイル」の代わりに「ディレクトリ」と「ディレクトリ以外のすべて」がより良い分類になる可能性があります。その後、無料でいくつか追加してください。おそらくより速い圧縮が可能です。ネットワークより:

mksquashfs ./project/ project.squashfs \
          -no-strip \
          -action 'chmod(0755)@type(d)' \
          -action 'chmod(644)@!type(d)' \
          -comp zstd -Xcompression-level 10

このアーカイブの目的:

  1. unsquashfs project.squashfsこれは(おそらく好みのグラフィックアーカイブマネージャ)を使用して抽出できます。
  2. (Linuxの場合)読み取り専用でマウント可能(root)mount -o loop gr-ieee802-11.squash /home/marcus/mnt/
  3. (Linuxの場合)最新のデスクトップ環境を使用している人は誰でも読み取り専用でインストールできます。 (udisksctl loop-setup -f project.squashfs自動的にインストールされない場合は、udisksctl mount -bファイルマネージャに新しく表示されたドライブをクリックしてください。

関連情報