設定ファイルを初期状態へ戻す方法

設定ファイルを初期状態へ戻す方法
一番無難なのは
設定変更する前にファイルをバックアップしておくこと
しかし、バックアップしたファイルが削除されたり
バックアップがない可能性もあるため
復旧方法を学習しておく
今回の環境は、CentOSで
Apacheの設定ファイルである
httpd.conf
を間違えて削除した場合の対処
これをパッケージ中の設定ファイルをインストールして復旧
まず、httpd.confがどのパッケージに含まれるか調べる
もし、パッケージ名がわかれば
そのパッケージからhttpd.confを取り出せばいい
とはいっても、書いているだけではスキルがあがらないので
VMware Player で
CentOS 6.4 64bit 環境を構築し
これを使って実験する
仮想マシンはDHCPでIP取得する設定にしているのなら
ubuntu から
sudo nmap -n -sP 192.168.10.0/24
というように、LAN内部のIPを調べ
ssh でリモートログインする
ログインできたら
yum -y install httpd

Apache をインストールし
実験開始
不安があるのなら、一度仮想マシンのバックアップをとったほうがよいかもしれない
まず、設定ファイルを削除する
rm -f /etc/httpd/conf/httpd.conf
これで
/etc/rc.d/init.d/httpd start
としても起動できなくなる
この場合、httpd.conf と関連が深そうなファイルを探すことになる
ls /etc/httpd/conf
で調べると
magic がでるので
これを調べる
CentOS は rpm パッケージなので
rpm -qf /etc/httpd/conf/magic
でパッケージ名を表示してみると
httpd-2.2.15-28.el6.centos.x86_64
となり、httpd パッケージに含まれることが判明
次に、-ql オプションを使って
httpd パッケージの構成ファイル一覧を表示
rpm -ql httpd | grep conf
で絞って探すと
/etc/httpd/conf
/etc/httpd/conf.d
/etc/httpd/conf.d/README
/etc/httpd/conf.d/welcome.conf
/etc/httpd/conf/httpd.conf
/etc/httpd/conf/magic
/etc/sysconfig/htcacheclean
/etc/sysconfig/httpd
/usr/lib64/httpd/modules/mod_log_config.so
となり、httpd.conf が含まれるのが確認できる
次に、httpd パッケージをダウンロードする
これは
yumdownloader を使う
これは、rpm パッケージをダウンロードするツール
yumdownloader httpd
とすれば
httpd-2.2.15-28.el6.centos.x86_64.rpm
がダウンロードできる
ただし、パッケージを普通にインストールしようとしても
すでに導入済みだとインストールできないので
–force オプションをつけ
強制的に再インストールする
rpm -Uvh –force httpd-2.2.15-28.el6.centos.x86_64.rpm
でインストール
ls /etc/httpd/conf/
でディレクトリを確認すると
httpd.conf があるのが確認できる
これで
/etc/rc.d/init.d/httpd start
とすると
apache が起動できるのが確認できる

ソースコードを見直すときに使える diffコマンド

新しくプログラミングを勉強する時に
ソースコードがあるなら
もし、稼働しないときには
diff コマンドで比較すると
違いに気づけます
今回、
get_template_directory_uri()
とするところを
get_template_directory_url()
となっていました
ソースはダウンロードしていたので
diff sidebar.php ~/ダウンロード/source/sidebar.php
とすることで違いを比較し
間違いに気づきました
ソースのコピペだけだとどこが間違っていたのかが
わかりにくいので
一度比較して、間違いさがししたほうが勉強には効率的です

標準出力を分岐するコマンド tee

tee コマンドを使うことで、画面に結果を表示しながら
ファイルに書き込むことができます
sort や uniq コマンドを実行しても、元々のファイルは変わりません
しかし、実行結果に tee コマンドをパイプでつなげば
並び替えたファイルを記録できます
$ sort travel.txt | uniq -c | sort -nr | tee result.txt | head -n 5
これで、並び替えた結果が result.txt に保存され
上位5つだけ画面に表示されます
この流れを解説すると
最初に
sort travel.txt
で並び替え
次に
uniq -c
で重複ファイルを整理して番号を降ります
その結果を
sort -nr
で並べ替えして
tee result.txt
で、結果を
result.txt に保存しながら
画面に表示するように指示
head -n 5
で指示された結果から上位5つだけを表示
となります
画面に表示する必要性を感じないのであれば
$ sort travel.txt | uniq -c | sort -nr | tee result_tmp.txt > result.txt
というようにします

重複行を整理する sort と uniq コマンド

今回、日経Linux 2008-9 におもしろい記事が載っていたので
実験してみました

とはいっても、簡単なコマンドの組み合わせですが
今回、使用したコマンドは
重複行を削除するコマンド uniq コマンド
107.uniqコマンドについてにわかりやすい説明が載っています)
そして
ファイルの行を並び替える sortコマンド
(【 sort 】 行を並び替えるが参考になります)
を使っています
最初に、
vi travel.txt
で内容を作成します
内容は単純に、国の名前を適当に並べたものです
アメリカ
イギリス
フランス
ドイツ
中国
インド
ロシア
日本
アメリカ
シンガポール
ドイツ
フランス
アメリカ
中国
などというように、適当に書き込みます
これに
$ uniq travel.txt
と実行すると
隣り合った部分が削除されて画面に表示されます
ただし、元のファイルはそのままです
これをさらに、sort コマンドと組み合わせると
重複する文字を削除できるようになります
$ sort travel.txt | uniq
これで、重複する文字を削除して表示できます
ちなみに、削除だけなら、sortコマンドに -u オプションをつければできます
$sort -u travel.txt
これでOKです
uniq コマンドは、削除するより、重複した文字をカウントする機能
を使うことがメインとなりそうです
-c オプションをつけると、この機能が使えます
$ sort travel.txt | uniq -c | sort -nr
とすれば、重複した文字の多い順番に並べれます
さらに。
$ sort travel.txt | uniq -c | sort -nr | head -n 5
とすれば、上位3つまで表示するようにできます
この機能を応用すると、アンケートや選挙のようなことができそうです

パイプの使い方

最近、過去の雑誌を整理し、内容の復習を兼ねていろいろと
実行してみました
今回は、基本に立ち返り
パイプの使い方です
参考にした雑誌は、日経Linux 2008-9
です

パイプを使うことで、過去のログなどを効率的にみることができます
とくに、一番使うのが history コマンドと grep コマンドの組み合わせを
よく使います
使い方は
$ histroy | grep ssh

サーバー構築の続きを行うときに使います
今回は、3つの機能をパイプでつなげて見ました
$cat -n /etc/services | head -n 50 | tail -n 10
とします
これは、最初に
cat -n を使ってファイルに番号を振り分け
次に
head -n 50
で、先頭から50文字のみ表示にして
最後に
tail -n 10
で最後から10行だけ表示
という使い方になります
サーバーのファイル設定を失敗してしまい、
エラーメッセージがでたときなどに、こういう組み合わせを
使い、その箇所だけをみるということもできます
例えば、
300行~400行にエラーとなったときに、
$cat -n /etc/httpd/conf/httpd.conf | head -n 400 | tail -n 400
とすると、その場所を表示できます
また、シェルスクリプトでよくある記述としては
2>&1
というものがありますが、
これは標準出力と、標準エラー出力先を同じにするという意味になります
2は、標準エラー出力
1は、標準出力

という意味になります
よく使われるのは、行き先を /dev/null
と設定する方法です
/dev/null にすると。そのデータを破棄します
これを使った例がありました
$ find /usr/ -name “*.txt” 2>&1 > /dev/null | cat -n
もっとも、これを一般ユーザで実行しても、権限がないので
閲覧はできません
この動きを解説すると
最初に
find コマンドで /usr/ の中から .txt の拡張子のファイルを見つけます
次に、
標準出力のデータを /dev/null で破棄
そして標準エラー出力のデータに番号をつけて表示
という処理になります
パイプを使うと、grep コマンドで探すときに
さらに詳しく検索も可能になります
grep コマンドの使い方は
grep 探したい文字 ファイルパス
という使い方をします
$ grep www /etc/service
とすると、www を含む行を、/etc/service
の中から探します
これを
$ grep www /etc/service | grep tcp
とすれば
www と tcp を含む行を表示するようになります

>/dev/null 2>&1

>/dev/null 2>&1
という表示がサーバー構築の勉強しているときにあったので
どんな意味なのか検索してみました
>/dev/null 2>&1 ってなんだ?
によりますと
要らないmailが飛んでこないようにするためなどに
標準出力も標準エラー出力も /dev/null に捨ててしまうということ
という意味になるようです

less コマンド

長い内容のファイルを見るときに役立つコマンド
それが less コマンド です
多くの場合、実行結果をページごとにみるときに使います
使い方は
 History | less
などなど
cat ファイル名 | less
なども便利です
スペースキーで次のページ
前のページに戻るには bキー
終了するには q キー
簡単にはこれぐらいですが
less
により詳しいオプション設定が載っています

find コマンドによるファイル検索

vi コマンドでファイルを編集している途中、
電源が落ちてしまい、再度編集しようとしたら
次のようなメッセージが発生
E325: ATTENTION Found a swap file by the name “.clamav.sh.swp” owned by: root dated: Sun Aug 16 14:22:15 2009 file name: ~root/clamav.sh modified: YES user name: root host name: fedora.snowhome.com process ID: 1569 While opening file “clamav.sh” dated: Sun Aug 16 14:30:20 2009 NEWER than swap file! (1) Another program may be editing the same file. If this is the case, be careful not to end up with two different instances of the same file when making changes. Quit, or continue with caution. (2) An edit session for this file crashed. If this is the case, use “:recover” or “vim -r clamav.sh” to recover the changes (see “:help recovery”). If you did this already, delete the swap file “.clamav.sh.swp” to avoid this message. “clamav.sh” 0L, 0C
どうやら、同じファイルが存在しているのと、
途中で終了したため、保存されているないようがあるようです
まずは、修復をしたいので、
Enter を押して、
次に /recover を入力し、内容を復元
このまま vi clamav.sh を実行しても
、swap file として残っているのが原因で同じエラーが発生するので、
[root@fedora ~]# find / -name .clamav.sh
を実行し、ファイルのある場所を 全体から検索
そして削除
(ファイル検索に参考となったのは http://www.k-tanaka.net/unix/find.html とても参考になりました)
もう少し詳しく調べてみたかったので
google で
「ファイルの保存 Linux 復元 vi」
で検索してみたところ、Linux で vi のスワップファイルから復元するという内容を発見しました
こちらに詳しい対処法の内容がのっています

cp コマンドで ディレクトリコピー

fedora をつかっていて
ディレクトリをコピーしようとしたら、
cp: omitting directory
というエラーメッセージが発生
google で検索してまると、教えて gooに答えを発見
どうやら、ディレクトリごとコピーするには
cp -rp としないとダメみたいです
参考なまでに
ITPro で cp コマンドのオプション
ディレクトリごとコピー
のリンクをはってみました