目次
はじめに
みなさま、catコマンドを活用されてますでしょうか?
ファイルの内容を確認するコマンドは、cat以外にもいろいろあります。
私も単純にファイルの内容を確認するときは、別のコマンドを使います。
そんな私が、catを利用するときは、-vオプションを付けて内容を確認するときです。
$ man cat ※一部抜粋
-v, --show-nonprinting
use ^ and M- notation, except for LFD and TAB
$
通常は表示されない制御文字(LFDとTABは除く)を表示させるオプションだそうです。
そこで、どんなときに -vオプションを使っているかを紹介します。
環境
OS : AlmaLinux 8
catバージョン : 8.30
cat -v を使うシチュエーション
それは、CGIを実行した際、Internal Server Errorとなり、error.logに「End of script output before headers: sample.pl」というメッセージが出力されている時です。
http://example.com/sample.pl
考えられる要因はいろいろあります。
- 設置しているディレクトリが正しくない
- ファイルのuid/gidが設置しているディレクトリのものと違っている
- 実行権限が不足している
上記要因は、設定を見れば一目瞭然なので、比較的容易に修正できるかと思います。
それでもエラーが解消されない時、cat -v を実行します。
$ cat -v sample.pl
#!/usr/bin/perl^M
use strict;^M
use warnings;^M
use CGI;^M
^M
my $cgi = CGI->new;^M
^M
print $cgi->header('text/html');^M
^M
print <<HTML;^M
<!DOCTYPE html>^M
<html>^M
<head>^M
<title>Hello, World!</title>^M
</head>^M
<body>^M
<h1>Hello, World!</h1>^M
</body>^M
</html>^M
HTML^M
$
行末に変な文字列:^Mが表示されていることが確認できます。これがエラーの原因でした。下記コマンドで、変な文字列を削除します。
$ sed -i.bk 's/^M//g' sample.pl
※^Mの入力は、Ctrl+v を押した後、 Ctrl+m で入力できます。
http://example.com/sample.pl
無事にエラー解消です。
スクリプトファイルをWindowsで編集し保存した場合、改行コードがCRLFで保存される場合があります。
それを気付かずに、LinuxサーバーにFTPアップロードすると、今回のような事象が発生します。
catコマンドの-vオプションをつけることで、改行コードがCRLFになっていないかどうかを確認できるのです。
まとめ
いかがでしたか?
今回はcatコマンドの-vオプションの紹介でした。
是非とも活用くださいませ。