Linux便利コマンド : cat

うめだ
2023-08-09
2023-08-09
目次

はじめに

みなさま、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オプションの紹介でした。

是非とも活用くださいませ。