Linuxの圧縮/解凍コマンドまとめ

マイナーな圧縮形式になるとコマンドを忘れがちなので、まとめのメモ。

まずは基本の gz 形式から。(さすがに忘れないけど)

圧縮
$ gzip filename
解凍
$ gunzip filename.gz

続いて、tar.gz (tgz) 形式。(これも忘れないなあ)

圧縮
$ tar cvfz dirname.tar.gz dirname
解凍
$ tar xvfz dirname.tar.gz

bzip2 (bz2) 形式。

圧縮
$ bzip2 filename
解凍
$ bzip2 -d filename.bz2

tar.bz2 形式。

圧縮
$ tar cvfj dirname.tar.bz2 dirname
解凍
$ tar xvfj dirname.tar.bz2

Windowsとのデータやり取りの基本、ZIP形式。

圧縮
$ zip filename.zip file1 file2
解凍
$ unzip filename.zip

これまたWindowsとデータ交換するとよく出てくるLZH形式。

圧縮
$ lha -a filename.lzh file1 file2
解凍
$ lha -e filename.lzh

こんなところでしょうか。個人的には、tar.bz2形式とLZH形式の解凍が、いつも一発でいきません。あうあう。どうもオプションが覚えられないんだよなあ。チートシート、チートシート、と。

FTP専用ユーザーを作ってみる

年に1回くらい需要があることが分かったので、ここらへんでメモしてみる。

# useradd -s /sbin/nologin -M ftpuser
# passwd ftpuser
# mkdir -p /ftp/userdir
# usermod -d /ftp/userdir ftpuser
# chown ftpuser:ftpuser /ftp/userdir
# chmod 705 /ftp/userdir

useradd で /sbin/nologin を指定することで、telnet などでログインできないユーザを作成できる。また、-M オプションを付けると、ホームディレクトリを作成せずにユーザを作成するので、不要なメールボックスが作成されないで済む。FTP先のディレクトリは、usermod で後から設定してあげればOK。

ざっくりこんな感じ。

ただ、qmail が動いていると、メールボックスは無いんだけれども、/etc/passwd にエントリされるだけで、有効なアカウントと判断してしまう。だもんで、例えば ftpuser 宛にメールをすると、ローカル配送してしまう。まあ、メールボックスが無くてエラーになるので、目的を達成してはいるんだけど、"no mailbox" なエラーじゃないので、いただけない。

ここらへん、厳密に対処するのであれば、qmail でメールアカウントだけを削除する方法のように、ごにょごにょしてやらないといけない。ちょっと大げさ。

色んなサービスが動いていると、細かいところで厄介になるなー。

SSLのパスフレーズ入力を回避する方法

SSLを設定してApacheを立ち上げようとすると、秘密鍵のパスフレーズを問合せてくる。

手動で運用している分には問題ないのだけれども、スクリプトで起動するような操作をする場合に面倒くさいことになる。そこで、パスフレーズの入力を回避してみる。

# openssl rsa -in server.key -out server.key.nopass

これで、元の秘密鍵からパスフレーズ抜きの鍵を生成して、これを SSLCertificateKeyFile に指定してあげれば、次回の起動からはパスフレーズの入力なしで、Apacheを起動できます。わーい、便利。

ただし当然ながら、これはセキュリティ上、好ましくないので、単純に「めんどくせえなあ」ということなら、やめておいた方が良いと思います。そういう意味では、裏技ですね。

ちなみに、

# apachectl startssl

として起動しようとしたら、怒られてしまった。

Apache2.2からは、startssl などと書かずに、普通に start や graceful でSSL起動ができるようになったとのこと。ほう、こりゃまた便利な世の中ですなあ。

ということで、

# apachectl start

のコマンド一発で、パスフレーズ入力もなく、SSLを意識せずにApacheの運用が出来るようになりました。お疲れさまでした。

複数トリガーの実行順序

/ db

PostgreSQLで、同一イベントに複数のトリガーがある場合に、どういう順番で実行されるのか気になったので調べてみた。

トリガ動作の概要 同一リレーション、同一イベントに対して1つ以上のトリガが定義された場合、トリガはその名前のアルファベット順に発生します。 BEFOREトリガの場合では、各トリガで返される、変更された可能性がある行が次のトリガの入力となります。もし、あるBEFOREトリガがNULLを返したら、操作はその行で中断し、残りのトリガは発生しません。

アルファベット順、これは予想外だった。以前は順番を保証することさえなかったみたいだから、それに比べたら方法があるだけマシなのかもしれないけど、トリガ名を考えないといけないということか。なんか明示的な制御の方法はないのかな。

独自ネームサーバでドメイン解決できなくて

新規にドメインを取得し、自分でネームサーバを立てて運用をしようとするも、うまくいかずに数日ほどハマる。

ゾーンファイルを書き換えたりすることは日常的に行っており、DNSの仕組みも把握していたので、ゼロから構築するのもイージーだろうと思っていたら、まあ、色んなミスを重ねてハマりまくった。反省の意味も込めて、メモ書き。

続きを読む "独自ネームサーバでドメイン解決できなくて"

IPエイリアスでサーバに複数のIPを割り当てる

1台のサーバで複数ドメインの SSL 対応をやることになって、サーバ(というかNIC)に複数のIPアドレスを割り当てることになった。名前ベースの VirtualHost だと SSL 対応できないからね。VirtualHost で複数 SSL 運用するのであれば、IPベースしかないわけです。

こういう場合は、IPエイリアスを使うのが定石。

# ifconfig eth1:0 xxx.xxx.xxx.11 netmask 255.255.255.240
# ifconfig eth1:1 xxx.xxx.xxx.12 netmask 255.255.255.240

こんな感じで、NIC(ここではeth1)に複数IPアドレスを割り当てていけば OK なんだけど、このままだと、再起動時に設定が無効になっちゃう。仕方なく network の起動スクリプトに、同じコマンドを記述して起動していたんだけど、Redhat なら静的ファイルで管理できるみたい。

# cat /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
BOOTPROTO=static
BROADCAST=xxx.xxx.xxx.15
HWADDR=xx:xx:xx:xx:xx:xx
IPADDR=xxx.xxx.xxx.10
NETMASK=255.255.255.240
NETWORK=xxx.xxx.xxx.1
ONBOOT=yes
TYPE=Ethernet

という NIC に対して、次のようにエイリアスファイルを作っていけば OK みたい。

# vi /etc/sysconfig/network-scripts/ifcfg-eth1:0
DEVICE=eth1:0
BOOTPROTO=static
BROADCAST=xxx.xxx.xxx.15
HWADDR=xx:xx:xx:xx:xx:xx
IPADDR=xxx.xxx.xxx.11
NETMASK=255.255.255.240
NETWORK=xxx.xxx.xxx.1
ONBOOT=yes
TYPE=Ethernet

# vi /etc/sysconfig/network-scripts/ifcfg-eth1:1 DEVICE=eth1:1 BOOTPROTO=static BROADCAST=xxx.xxx.xxx.15 HWADDR=xx:xx:xx:xx:xx:xx IPADDR=xxx.xxx.xxx.12 NETMASK=255.255.255.240 NETWORK=xxx.xxx.xxx.1 ONBOOT=yes TYPE=Ethernet

これまで1枚の NIC に対して 1つのファイルなんだと思っていたので、エイリアスの場合どうするのかなーなんて思っていたんですが、IPエイリアスごとにファイルを用意して管理できるんですねー。これは良いこと知りました。ありがとうございます。


最新エントリー
Linuxの圧縮/解凍コマンドまとめ
FTP専用ユーザーを作ってみる
SSLのパスフレーズ入力を回避する方法
複数トリガーの実行順序
独自ネームサーバでドメイン解決できなくて
IPエイリアスでサーバに複数のIPを割り当てる
あわせて読みたいブログパーツ