20200604のLinuxに関する記事は6件です。

Everything you ever wanted to know about Linux -stable releases(1/2)

https://www.kernel.org/doc/html/latest/process/stable-kernel-rules.html


Everything you ever wanted to know about Linux -stable releases

(Linuxの安定版リリースについて知りたいことすべて)

Rules on what kind of patches are accepted, and which ones are not, into the “-stable” tree:

"-stable" treeに対して、受け入れられるパッチの種類と、受け入れられないもののルールがあります。

  • It must be obviously correct and tested.
  • It cannot be bigger than 100 lines, with context.
  • It must fix only one thing.
  • It must fix a real bug that bothers people (not a, “This could be a problem…” type thing).
  • It must fix a problem that causes a build error (but not for things marked CONFIG_BROKEN), an oops, a hang, data corruption, a real security issue, or some “oh, that’s not good” issue. In short, something critical.
  • 明らかに正しく、またテストがされている必要があります。
  • 多くとも100行は越えない、contextも含めても。
  • たった1つのことを解決してください。
  • 人々を悩ませている実際のバグを修正しなければなりません(「これは問題になる可能性があります…」という類ではない)
  • build error(ただしCONFIG_BROKENがmarkされていないもの)、oops, hang dataの破損、実際のセキュリティ問題、あるいは、"おお、それはよくない"問題を引き起こす問題を解決するもの。要するに、何かしら重要なもの。
  • Serious issues as reported by a user of a distribution kernel may also be considered if they fix a notable performance or interactivity issue. As these fixes are not as obvious and have a higher risk of a subtle regression they should only be submitted by a distribution kernel maintainer and include an addendum linking to a bugzilla entry if it exists and additional information on the user-visible impact.

kernelをdistributionするユーザーにとって報告された重要な問題であって、performanceや対話性に関する問題を解決する場合。これらの修正が、明らかに繊細なregressionの高いリスクを有し、distribution kernelのメンテナナーによってだけ提供され、更に、もしそれが、ユーザーが見えるインパクトに関する追加情報がある場合、bugzilla entryによるリンクを含める必要があります。

  • New device IDs and quirks are also accepted.
  • No “theoretical race condition” issues, unless an explanation of how the race can be exploited is also provided.
  • It cannot contain any “trivial” fixes in it (spelling changes, whitespace cleanups, etc).
  • It must follow the Documentation/process/submitting-patches.rst rules.
  • It or an equivalent fix must already exist in Linus’ tree (upstream).
  • 新しいdevice IDとquirks(特徴)を許容するもの。
  • 「理論的なレース状態」の問題ではないこと。レースがどのように公開されるのかの説明も提供されていないようなケース。
  • "些細な"修正を含めることはできません(スペルの変更、項羽伯のクリーンアップ等)
  • Documentation/process/submitting-patches.rstのルールに従う必要があります。
  • それまたは同等の修正が、upstreamであるLinus's treeに既に存在している必要があります。

Procedure for submitting patches to the -stable tree

  • If the patch covers files in net/ or drivers/net please follow netdev stable submission guidelines as described in Documentation/networking/netdev-FAQ.rst after first checking the stable networking queue at https://patchwork.ozlabs.org/bundle/davem/stable/?series=&submitter=&state=*&q=&archive= to ensure the requested patch is not already queued up.
  • Security patches should not be handled (solely) by the -stable review process but should follow the procedures in Documentation/admin-guide/security-bugs.rst.

-パッチがnet/ また、drivers/netのファイルの範囲内である場、合、https://patchwork.ozlabs.org/bundle/davem/stable/?series=&submitter=&state=*&q=&archive= におけるstable network queueを最初に確認した後に、Documentation/networking/netdev-FAQ.rst に記載されている、netdev stable submission guidelineを参照して、要求されたパッチがまだqueueに入っていないことを確認してください。
- セキュリティパッチは、-stable revice processsによって(単独で)ハンドリングされません。Documentation/admin-guide/security-bugs.rst.に記述されている手続きを踏む必要であります。


もともと、Linux Kernelのソースコードの一部なので、GPLv2扱いになる(はずの認識)。

https://www.kernel.org/doc/html/latest/index.html

Licensing documentation

The following describes the license of the Linux kernel source code (GPLv2), how to properly mark the license of individual files in the source tree, as well as links to the full license text.

https://www.kernel.org/doc/html/latest/process/license-rules.html#kernel-licensing

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Everything you ever wanted to know about Linux -stable releases(1/3)

https://www.kernel.org/doc/html/latest/process/stable-kernel-rules.html


Everything you ever wanted to know about Linux -stable releases

(Linuxの安定版リリースについて知りたいことすべて)

Rules on what kind of patches are accepted, and which ones are not, into the “-stable” tree:

"-stable" treeに対して、受け入れられるパッチの種類と、受け入れられないもののルールがあります。

  • It must be obviously correct and tested.
  • It cannot be bigger than 100 lines, with context.
  • It must fix only one thing.
  • It must fix a real bug that bothers people (not a, “This could be a problem…” type thing).
  • It must fix a problem that causes a build error (but not for things marked CONFIG_BROKEN), an oops, a hang, data corruption, a real security issue, or some “oh, that’s not good” issue. In short, something critical.
  • 明らかに正しく、またテストがされている必要があります。
  • 多くとも100行は越えない、contextも含めても。
  • たった1つのことを解決してください。
  • 人々を悩ませている実際のバグを修正しなければなりません(「これは問題になる可能性があります…」という類ではない)
  • build error(ただしCONFIG_BROKENがmarkされていないもの)、oops, hang dataの破損、実際のセキュリティ問題、あるいは、"おお、それはよくない"問題を引き起こす問題を解決するもの。要するに、何かしら重要なもの。
  • Serious issues as reported by a user of a distribution kernel may also be considered if they fix a notable performance or interactivity issue. As these fixes are not as obvious and have a higher risk of a subtle regression they should only be submitted by a distribution kernel maintainer and include an addendum linking to a bugzilla entry if it exists and additional information on the user-visible impact.

kernelをdistributionするユーザーにとって報告された重要な問題であって、performanceや対話性に関する問題を解決する場合。これらの修正が、明らかに繊細なregressionの高いリスクを有し、distribution kernelのメンテナナーによってだけ提供され、更に、もしそれが、ユーザーが見えるインパクトに関する追加情報がある場合、bugzilla entryによるリンクを含める必要があります。

  • New device IDs and quirks are also accepted.
  • No “theoretical race condition” issues, unless an explanation of how the race can be exploited is also provided.
  • It cannot contain any “trivial” fixes in it (spelling changes, whitespace cleanups, etc).
  • It must follow the Documentation/process/submitting-patches.rst rules.
  • It or an equivalent fix must already exist in Linus’ tree (upstream).
  • 新しいdevice IDとquirks(特徴)を許容するもの。
  • 「理論的なレース状態」の問題ではないこと。レースがどのように公開されるのかの説明も提供されていないようなケース。
  • "些細な"修正を含めることはできません(スペルの変更、項羽伯のクリーンアップ等)
  • Documentation/process/submitting-patches.rstのルールに従う必要があります。
  • それまたは同等の修正が、upstreamであるLinus's treeに既に存在している必要があります。

Procedure for submitting patches to the -stable tree

  • If the patch covers files in net/ or drivers/net please follow netdev stable submission guidelines as described in Documentation/networking/netdev-FAQ.rst after first checking the stable networking queue at https://patchwork.ozlabs.org/bundle/davem/stable/?series=&submitter=&state=*&q=&archive= to ensure the requested patch is not already queued up.
  • Security patches should not be handled (solely) by the -stable review process but should follow the procedures in Documentation/admin-guide/security-bugs.rst.

-パッチがnet/ また、drivers/netのファイルの範囲内である場、合、https://patchwork.ozlabs.org/bundle/davem/stable/?series=&submitter=&state=*&q=&archive= におけるstable network queueを最初に確認した後に、Documentation/networking/netdev-FAQ.rst に記載されている、netdev stable submission guidelineを参照して、要求されたパッチがまだqueueに入っていないことを確認してください。
- セキュリティパッチは、-stable revice processsによって(単独で)ハンドリングされません。Documentation/admin-guide/security-bugs.rst.に記述されている手続きを踏む必要であります。


もともと、Linux Kernelのソースコードの一部なので、GPLv2扱いになる(はずの認識)。

https://www.kernel.org/doc/html/latest/index.html

Licensing documentation

The following describes the license of the Linux kernel source code (GPLv2), how to properly mark the license of individual files in the source tree, as well as links to the full license text.

https://www.kernel.org/doc/html/latest/process/license-rules.html#kernel-licensing

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

シェルスクリプト 数値計算 bc コマンド

bc コマンド

ー任意の精度(小数点以下の桁数を指定)の数値を扱い、四則演算・平方根・三角関数など様々な数学関数を計算できる

【前提】
bcコマンドはインストールしないと利用できないので以下のコマンドでインストールしておいてください

$bc
$ sudo yum install bc

単純な計算

計算内容を文字列として | を使って、bcコマンドに渡すと計算する。

足し算(例
[hkoen@localhost ~]$ echo "20.5+5" | bc
25.5
割り算(例
[hkoen@localhost ~]$ echo "20.5/5" | bc
4

複雑な計算

-l を利用すると標準数学ライブラリを読み込んでより複雑な数学関数を実行します

平方根(例
[hkoen@localhost ~]$ echo "scale=20;sqrt(20.5/5)" | bc -l
2.02484567313165869332

上記は√(20.5/5)の計算結果を小数点第20位まで表示するという意味です。

シェルスクリプトで書いてみる

base10.sh (任意)というシェルスクリプトファイルに記述します。

base10.shファイル内容
#!/bin/bash

echo "20.5+5" | bc
echo "20.5*5" | bc
echo "scale=10;sqrt(2)" | bc -l
echo "$1 + $2" | bc     #引数1,引数2 を設定
base10.shファイル実行結果
[hkoen@localhost ~]$ chmod 755 base10.sh
[hkoen@localhost ~]$ ./base10.sh 7 9
25.5
102.5
1.4142135623
16

まず、chmod 755 base10.sh でユーザーにファイルの実行権限を付与します。

そして ./bas10.sh を呼んだ後に引数1、引数2:7、9を指定して実行します。

正常に計算してくれています。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

LINUX コマンド【wc 編】使用例

wc コマンド

ーファイルの「行数」「単語数」「バイト数」を表示してくれる

$wc
$ $wc /etc/passwd
実行結果
[hkoen@localhost ~]$ wc /etc/passwd
  44  101 2433 /etc/passwd

44:行数
101:単語数
2433:バイト数

オプションコマンド

・-l:行数のみ
・-w:単語数のみ
・-c:バイト数のみ

実行結果(-l)
[hkoen@localhost ~]$ wc -l /etc/passwd
 44 /etc/passwd

実際にどう使うの?!

wc -lで行数をカウントする手順は、
内容のわからないファイルに対してcatやgrepを行う前によく使われます。
知らないファイルをいきなりcatやgrepをしてしまうと、
端末上に膨大な行の結果が出力されてしまう恐れがあるからです。

また、特定の文言を指定したgrepと組み合わせたログ解析の目的でも使われます。
WEBサーバ上の特定のアプリケーションに対するアクセス件数を調査したり、バッチ処理の結果を調査する際にも有用です。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Raspberry Piに64bit版OS(bate)をインストール

先日Raspberry Pi4に8GB版が発売されたのに伴いOSも64bit版(bate)が公開されました。
今回は64bit版OSをインストールしてみます。

環境

  • Windows 10を使用
  • RaspberryPi3+にインストール(4を未所持のため)
  • Etcherで64GBのmicroSDカードにインストール
  • ヘッドレスで設定、運用

目次

ダウンロード

こちらのページからDownload hereをクリックしてzipファイルをダウンロードしてください。

インストール

  • ダウンロードしたファイルをmicroSDカードに書き込みます。
  • 今回はEtcherを使用します。こちらからダウンロードしてインストールしてください。
  • Etcherを起動したらFlash from FileをクリックしダウンロードOSのzipファイルを選択します。
  • 真ん中のインストール先を確認し、違う場合はChangeで変更してください。
  • 正しいインストール先が選択された状態でFlashをクリックしてください。
  • しばらく待ってインストールが完了したらEtcherを閉じてください。

ネットワーク設定

SSHの有効化

  • インストール直後おそらくWindowsがmicroSDカードを認識していないと思うので一度microSDカードを指し直してください。
  • microSDカード(boot)が表示されたら開きsshファイルを作成せてください。(ssh.txtにならないように注意)

Wi-Fi設定

イーサネットに繋いで運用する場合は飛ばしてください。

  • microSDカード(boot)にwpa_supplicant.confを作成し内容は以下にします
country=JP
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
    ssid="接続先のSSID"
    psk="接続先のパスワード"
}

パスワードは平文で保存されます。後でハッシュ化できますが今回は割愛します。

SSH接続

  • microSDをRaspberryPiに指し電源をつなげ起動ま完了するまでしばらく待ちます。
  • コマンドプロンプトかpowershellを起動し以下のコマンドでRaspberryPiと接続します。
ssh pi@raspberrypi
  • yes/no?と聞かれるのでyesと入力します。
  • もう一度ssh pi@raspberrypiを入力するとRasPiとSSH接続されパスワードを聞かれるので、初期パスワードのraspberryと入力するとログインできます。

初期設定

raspi-config

  • 以下のコマンド入力するとraspi-configが表示されます。
sudo raspi-config

パスワード変更

  • 1を選択してパスワード変更してください

ローケルの変更

  • 4を選択
  • I1を選択
  • ja_JP.UTF-8 UTF-8に合わせてスペースキーで選択しエンターを押して確定します。
  • システムのロケールを聞かれるのでja_JP.UTF-8を選択します。

タイムゾーンの変更

  • 4を選択
  • I2を選択
  • Asiaを選択
  • Tokyoを選択

アップデート

  • 8を選択するとアップデートが開始されます。

raspi-configの終了

  • 右キーを押してFinishを選択しraspi-configを終了します。
  • 再起動するか聞かれたら再起動します。 ### パッケージの更新 以下のコマンドでパッケージを更新します。
sudo apt update
sudo apt upgrade -y
sudo apt dist-upgrade -y

終わりに

OSのインストールと簡単な初期設定は以上になります。
RaspberryPi3+を64bitにして意味があるのかは 知らん!
書き終わってから気づいたけどコレは64bitとか関係ない記事になってしまった。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Linux基礎17 -アーカイブと圧縮-

はじめに

今回はファイルをまとめるアーカイブ処理と、ファイルサイズを小さくする圧縮処理について紹介します。

アーカイブファイルと圧縮ファイル

複数のファイルをメールで送信したり、バックアップをとる場合には、これらのファイルを1つのファイルにまとめてしまうと便利です。複数のファイルやディレクトリをまとめたファイルのことをアーカイブ(書庫)と呼び、アーカイブファイルを作成することをアーカイブすると言います。

また、一般的に利用されるファイルには冗長性があるため、データの内容を壊すことなくファイルサイズを小さくすることができます。この処理を圧縮と言います。

WindowsやMacOSで、一般的に使われるzipファイルではアーカイブと圧縮を同時に行いますが、Linuxではアーカイブしてから圧縮するというように別個に処理するのが普通です。
それではそれぞれの処理に関連するコマンドをみていきましょう。

tarコマンド -ファイルをアーカイブする-

tarはアーカイブファイルを扱うためのコマンドです。複数のファイルやディレクトリを1つのファイルにまとめたり、逆にアーカイブファイルから下のファイルを取り出すときに使用します。

練習用ファイルの準備

はじめに練習用のファイルを作成します。ここではbashのブレース展開という機能を用います。

ブレース展開
{<開始数値>..<終了数値>}

Example:
    touch file-{1..5}.txt
    => file-1.txt file-2.txt file-3.txt file-4.txt file-5.txtを作成

    touch {a..c}.txt  #文字列にも有効
    => a.txt b.txt c.txtを作成

今回はアーカイブするように、dir1配下にfileを5つほど連番で作成しておきます。
スクリーンショット 2020-06-04 11.59.20.png

アーカイブファイルの作成

先ほど作成したdir1というディレクトリと、その配下の5つの連番fileをアーカイブファイルにまとめてみましょう。tarコマンドで作成するアーカイブファイルは慣習として.tarという拡張子ををつけます。ここでは、dir1.tarという名前でアーカイブファイルをつくることにします。

tarコマンドの構造
$ tar cf <アーカイブファイル> <アーカイブ元ファイル>

Option:
    c: createを意味している
    f: fileを意味している

Supplement:
    tarコマンドのオプションに-(ハイフン)は使用してもしなくてもどちらでも良い
    -(ハイフン)つけないのが一般的

ではアーカイブしていきましょう。

dir1のアーカイブファイル作成
$ tar cf dir1.tar dir1

アーカイブファイルの内容確認

作成したアーカイブファイルの中身を確認するには、tオプションを使用します。tオプションをつけるとアーカイブファイルの中に含まれるファイル一覧が出力されます。ファイルをアーカイブしたら、目的のファイルが正しくアーカイブされているのかtオプションで確認する習慣をつけておくといいかもしれません。

アーカイブファイルの中身を確認する
$ tar tf <アーカイブファイル> #tはlistを意味している

スクリーンショット 2020-06-04 12.12.15.png
このようにdir1ディレクトリ内の5つのファイルがアーカイブ内に格納されていることがわかります。

アーカイブの展開

アーカイブを展開して、元ファイルやディレクトリを取り出すには、xオプションを利用します。

アーカイブファイルの展開
$ tar xf <アーカイブファイル> #xはextractを意味している

アーカイブファイルからの復元を確認するために、元々のdir1ディレクトリを削除してから復元しましょう。
スクリーンショット 2020-06-04 12.17.57.png
なお、tarで展開されるファイル名と同じファイルが予め存在している場合、そのファイルは上書きされてしまいますので、アーカイブを展開する際は同名のファイルの存在には注意してください。

ファイルリストを表示するオプション

tarコマンドvオプションをつけると、cオプションにとるアーカイブ作成や、xオプションによる展開時に、対象となったファイルリストを表示します。
スクリーンショット 2020-06-04 12.26.05.png
また、tオプションvオプションを合わせると、ファイル名だけでなく、パーミッションやオーナーなど、ファイル属性が合わせて表示されます。
スクリーンショット 2020-06-04 12.27.53.png
このvオプションはよく使われますが、tオプション以外のコマンドとの併用はあまりお勧めされていません。例えば、cオプションでアーカイブファイルを作成するとき、何らかの理由でアーカイブファイルが破損してしまう可能性があります。こう言った場合に、対象となったファイルの一覧を確認しても破損に気づけません。また、何らかのエラーが発生したときに大量の元ファイルにエラー表示が埋もれてしまう可能性もあります。したがって、vオプションは出来上がったアーカイブファイルを確認するtオプションとの併用以外は避けた方が無難でしょう。

ファイル属性の保持

tarコマンドは単にファイルをコピーするだけでなく、ファイルのパーミッションやオーナー、タイムスタンプなどのファイル属性もそのままアーカイブします。このため、cpコマンドでコピーするよりも、バックアップの機能に優れています。
しかし、一般ユーザでtarコマンドを実行する場合は、一部ファイルの属性が維持できない可能性があります。例えば、所有者がrootでオーナーのみに読み込み権限のあるファイルは一般ユーザではアーカイブできませんし、そのファイルが含まれたアーカイブファイルを復元したときに、一般ユーザでは元の属性が復元できず不完全な展開結果となります。
このため、ディレクトリツリーの完全なバックアップを作成する場合は、root権限でtarコマンドを実行することが必要になります。Linuxのシステム管理・運用を行う場合には、このようなファイル属性の保持という問題に十分注意する必要があります。

gzipコマンド -ファイルを圧縮する-

gzipはファイルの圧縮・展開を行うためのコマンドです。gzipで圧縮したファイルには慣習として.gzという拡張子をつけます。

gzipコマンドによるファイルの圧縮
$ gzip <圧縮元ファイル>

ここでは例として、psコマンドでプロセス一覧をps.txtというファイルに出力リダイレクトして、圧縮元ファイルを作成します。
スクリーンショット 2020-06-04 12.59.15.png
このps.txtファイルのファイルサイズは大体20キロバイトですね。
スクリーンショット 2020-06-04 13.00.19.png
これを gzipコマンドで圧縮します。
スクリーンショット 2020-06-04 13.04.39.png
5キロバイトほどまで圧縮されましたね。なお、gzipコマンド実行後には、圧縮ファイルだけが残り、元のファイルは削除されます。圧縮ファイルは元のファイル名に拡張子.gzをつけたファイル名になっていますね。

圧縮したファイルを展開して、元に戻すには、-dオプションを指定します。
スクリーンショット 2020-06-04 13.07.47.png
この時も展開されたファイルだけが残り、圧縮ファイル(.gz)は削除されています。なお、-dオプションを指定する代わりに、gunzipコマンドを使用しても、同様に圧縮ファイルを展開できます。機能は全く同じです。

圧縮ファイルの展開
$ gzip -d <展開する圧縮ファイル(.gz)>
$ gunzip <展開する圧縮ファイル(.gz)>

標準出力にgzipファイルを出力

gzipの出力をパイプやリダイレクトで扱いたいときには、-cオプションを指定します。これは標準出力に出力するためのオプションです。例えば次のように、-cオプションと出力リダイレクトを使えば、任意の名前で圧縮ファイルを作成することができます。
スクリーンショット 2020-06-04 13.15.12.png
なお、gzipコマンドの出力はバイナリデータなので、ターミナルに表示せず、パイプやリダイレクトを使用してください。
スクリーンショット 2020-06-04 13.16.35.png

tarとgzipを組み合わせる

gzipコマンドにはファイルをアーカイブする機能はないので、1つのファイルしか圧縮できません。このため複数のファイルをまとめて1つのファイルに圧縮するには、tarコマンドでアーカイブしてから、そのアーカイブファイルをgzipで圧縮するという手法をとります。

上記のような、圧縮方法はLinuxで広く用いられており、慣習として.tar.gz.tgzという拡張子がつけられます。また、現在のtarコマンドにはgzip圧縮する機能が組み込まれており、tarコマンドだけで、tar+gzファイルを作ることができます。tarコマンドでgzip圧縮するにはcオプションでアーカイブを作成する際に、合わせてzオプション`を指定します。

tarコマンドだけで.tar.gz形式のファイルを作成
$ tar czf dir1.tar.gz dir1

また、逆にtar+gzファイルを直接展開するには、次のようにxオプションを指定します。

tarコマンドだけで.tar.gzファイルを直接展開
$ tar xzf dir1.tar.gz

パイプとリダイレクトによるtar+gzファイルの作成

昔のtarコマンドには、gzip機能が組み込まれていなかったため、tarコマンドとgzipコマンドを組み合わせてアーカイブファイルを圧縮していました。この手法について少し紹介します。

tarコマンドとgzipコマンドでtar+gzファイルの作成
$ tar cf - dir1 | gzip -c > dir1.tar.gz

1. tarコマンドで-(ハイフン)を指定 -> アーカイブファイルが標準出力へ
2. gzipコマンドでファイル名を指定しない -> 標準入力から読み込み(tarでアーカイブされたファイル)
3. -cオプションを指定して、出力リダイレクト(>)でdir1.tar.gzを作成

なお、次のようにtarコマンドとgzipコマンドを分離しても同じような結果が取得できます。

tarとgzipによるtar+gzファイルの作成
$ tar cf dir1.tar dir
$ gzip dir1.tar

しかし、この方法は、一時的に中間ファイルとして、dir1.tarファイルが作成されています。もしdir1の容量がとても大きく、ディスクの残りの空き容量を超えるようなら、中間ファイルであるdir1.tarファイルをディスクに作ることができません。一方、パイプラインを使った場合には一時ファイルを作らないため、このような心配はありません。

tar+gzファイルを展開するには次のように指定します。

tar+gzファイルの展開
$ gzip -d -c dir1.tar.gz | tar -xf -

1. gzipで展開(-d)した出力を-cとパイプラインでtarコマンドへ
2. tarコマンドで展開(x)
3. このときファイル名-(ハイフン)を指定することで標準入力を読み込み

なおこのように、tarコマンドとパイプラインを組み合わせる手法は、現在でもリモートホスト上のファイルを直接手元にコピーするというケースで利用されています。

リモートホストのdir1を、tar+gzファイルとして転送
$ ssh nossy@serverB 'tar czf - dir1' | tar xzf -

sshコマンド: 引数を指定することで、リモートホスト上でコマンドを実行することができる

リモートホスト上でファイルをアーカイブ(tar czf)して-(ハイフン)でその出力をこちらの標準入力へ渡しています。
手元のシェルでは受け取ったtar+gzのデータストリームを展開(xzf -)することで、リモートホスト上のdir1ディレクトリを直接手元にコピーすることができます。
この手法では圧縮されたファイルのやりとりをするので、ネットワークの通信量を抑えることができる利点があります。

bzip2コマンド -ファイルを圧縮する-

bzip2はgzipと同様にファイルの圧縮・展開を行うコマンドです。bzip形式はgzipよりも圧縮率が高く、データ量をより小さくできます。ただし、圧縮や展開にgzipよりも長い時間を必要とします。ファイルサイズを重視したい場合に使われます。
bzip2コマンドのオプションはgzipコマンドと同じになるように設計されているため、gzipと同様に扱うことができます

bzip2によるファイルの圧縮
$ bzip2 <圧縮元ファイル>

スクリーンショット 2020-06-04 14.16.47.png
4.5キロバイトほどまで圧縮されましたね。gzipよりも高い圧縮率であることがわかります。
次に圧縮ファイルを展開します。

bz2ファイルの展開
$ bzip2 -d <圧縮ファイル(.bz2)>
$ bunzip2 <圧縮ファイル(.bz2)>

スクリーンショット 2020-06-04 14.18.50.png

任意のファイル名で圧縮ファイルを作成
$ bzip2 -c ps.txt > ps_test.txt.bz2

tarとbzip2を組み合わせる

現在のtarコマンドはbzip2形式でファイルを圧縮する機能も組み込まれています。

tarコマンドでbzip2形式でアーカイブファイルを作成
$ tar cjf dir1.tar.bz2 dir1

それ以外の動作はgzipの時と同様であるため、ここでは割愛します。

その他の圧縮形式

bz2よりも圧縮率の高いフォーマットとしてよく利用されているのが、xz形式です。xz形式はxzコマンドにより圧縮・展開が行えます。xzコマンドもgzipコマンドに意図的に似せてあるので、gzipとほとんど同様に使うことができます。
また、現在のtarコマンドはxz形式にも対応しています。これはgzipではzオプションをつけていたところをJオプションにすることで使用できます。

tar+xz形式のアーカイブファイル作成
$ tar cJf dir1.tar.xz dir1

bizp2よりも長い時間がかかりますが、高圧縮率なので、高い圧縮率が必要な用途に利用されます。

zipコマンド -ファイルをアーカイブ・圧縮する-

zipはtarやgzipとは異なり、アーカイブ圧縮を同時に行うコマンドです。zipで圧縮したファイルには慣習として.zipという拡張子がつけられて、これをzipファイルと呼びます。

zipファイルはLinuxではあまり使われませんが、WindowsやMacOSとやり取りするときなどに使用されます。Linuxでzipファイルを圧縮するにはzipコマンド、展開するにはunzipコマンドが必要になります。しかしこれらのコマンドは多くのディストリビューションでは標準でインストールされていないので、コマンドが見つからない場合はインストールしましょう。

zip、unzipのインストール
CentOS:
    # yum install zip unzip

Ubuntu:
    $ sudo apt-get install zip unzip

zipファイルの作成

zipファイルを作成するには以下のように指定します。

zipコマンドの使用方法
$ zip -r <圧縮ファイル名> <圧縮対象パス>

なお、ここで使用している-rオプションは、 指定したディレクトリの下に含まれるファイルもまとめて圧縮するためのオプションです。-rオプションを指定しない場合は、ディレクトリだけが対象となり、そこに含まれるファイルは対象となりませんので常に-rオプションをつけてzipコマンドを運用します。対象が単一のファイルであったとしても-rオプションをつけていて不利になることはありません。
スクリーンショット 2020-06-04 14.44.59.png
作成した、圧縮ファイル(.zip)の中身を確認するにはzipinfoコマンドを使用します。
スクリーンショット 2020-06-04 14.46.54.png
圧縮したファイルを展開するにはunzipコマンドを使用します。
スクリーンショット 2020-06-04 14.48.29.png
対象ファイルが多く、ファイル名を表示したくない場合には、-qオプションを用います。

ファイル名を表示しないでzip、unzipコマンドの実行
$ zip -qr dir1.zip dir1
$ unzip -q dir1.zip

パスワード付きzipファイル

zipファイルを作成するときに、パスワードを設定することができます。これは-eオプションを指定することで可能となります。
スクリーンショット 2020-06-04 14.53.03.png
展開するときには設定したパスワードを入力すれば良いです。
スクリーンショット 2020-06-04 14.54.41.png

参考資料

新しいLinuxの教科書

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む