テックブログ

技術ネタ

電源とかカメラとか初期化とか・・・

こんにちは、Qです。

このブログ、いちおう当番制になっているのですが
毎回、意味不明のお題を突き付けてきます。

今回のお題は「電源」と「カメラ」。。。いったい何を書けと?

 「電源」 。。。UPS?
 「カメラ」。。。何も浮かびません。

■「電源」まめ知識

・UPS、サーバールームの片隅やラックの一番下に
 ひっそりと鎮座していますが、クソ重いです。
 その中身は鉛です。

・その昔、某電話会社は非常用電源として
 ファントム(戦闘機)と同じエンジンを廻してました。
 さすがにもう引退していると思いますが。

個人的にはココで締めたいところですが。。。

■ファイルの初期化

もうすぐ新年度ということで
初心に戻ってファイルの初期化のお話です。

スクリプトやプログラムを書いてると
処理開始の前に一時ファイルを初期化したくなるケースが
多々あります。

bash環境でのお話になりますが、ちょいちょい見かけるのがコレです。

-------------------------------------
# echo > file
-------------------------------------

echoコマンドで空データを投げ込んで初期化しているように
見えますが、ファイルの中身は空っぽにはなりません。

空ファイル作ってみます。

-------------------------------------
# touch file1
# ls -l file1
-rw-r--r-- 1 root root 0 Mar 22 20:36 file1
-------------------------------------

適当に文字列を放り込みます。

-------------------------------------
# echo hoge > file1
# ls -l file1
-rw-r--r-- 1 root root 5 Mar 22 20:36 file1
-------------------------------------

初期化したつもりになってみます。

-------------------------------------
# echo > file1
# ls -l file1
-rw-r--r-- 1 root root 1 Mar 22 20:38 file1
-------------------------------------

ファイルサイズは 1 byte です。何やら残ってます。
catコマンドで覗いてみます。

-------------------------------------
# cat file1

#
-------------------------------------

返ってきたのは空白が1行、でも空行ではありません。
odコマンドでバイナリ表示してみます。

-------------------------------------
# od -c file1
0000000 \n
0000001
-------------------------------------

“\n” 改行です。1 byte の正体です。

それでは、ファイルの中身を本気で空っぽにするためには、
つまりファイルサイズを “0” にするためにはどうするか。

方法1

-------------------------------------
# : > file1
# ls -l file1
-rw-r--r-- 1 root root 0 Mar 22 21:08 file1
# od -c file1
0000000
-------------------------------------

“:” を放り込んだら “\n” 改行も消えて空っぽになりました。

“:” コロンです。
bashに組み込まれている立派なコマンドです。

“:” は何もしません。
常にリターンコード “0 (真)” を返す、面白いヤツです。

繰り返しますが “:” は立派なコマンドです。

常に “0 (真)” を返すことから、こんな使い方もできます。
コマンドラインから叩いてみて下さい。

-------------------------------------
# while : ; do echo AHO; sleep 1; done
-------------------------------------

[Ctrl+C] で終了しない限り、永遠に AHO と罵ってもらえます。

方法2

-------------------------------------
# cat /dev/null > file1
-------------------------------------

見たまんま “/dev/null” をcatして投げ込んでます。

“/dev/null” は読み出そうとしてもデータを返しません。
これを利用して初期化してるわけです。

「”rm” してファイル再作成すればいいじゃん」
身も蓋もない声が聴こえてきそうですが
“/dev/null” に向かって言ってくださいね。

それでは。

実績数30,000件!
サーバーやネットワークなど
ITインフラのことならネットアシストへ、
お気軽にご相談ください