お金をかけずにサーバーの勉強をしよう

黒い画面で次にはこれを(catコマンド)

2023年10月11日

メニューへ戻る

黒い画面を初めて立ち上げたら、次には catコマンドですね。

こんにちは。

黒い画面で最初はこれを(lsコマンド)」で、lsコマンドや cdコマンドで、Linux OS内で自由に動き回れるようになったと思います。

次は catコマンド(concatenate files and print on the standard output)でファイルの内容をてみようという寸法です。

catっていうから猫を連想しますけど、「conCATenate」(結合する)からきているようです。

Linux OSではファイルの中を見るのに多用するコマンドですけど、本来は他のコマンドの出力やファイルの内容を結合して表示するためのコマンドなんですね。

論より証拠で使ってみるのが一番早い。

どの Linux OSでも同じと思いますけど、環境は Lubuntu 22.04.3でやっています。


私が書いたプログラムソースファイルの内容でも表示してみましょうか。

使い方は「cat ファイル名」です。
本当はファイル名ではなく、ファイルパスが正しいですね。
絶対パス・相対パスが使えます。

subro@Lubuntu2204:~/work/java/HelloServlet/WEB-INF$ cat web.xml
<?xml version="1.0" encoding="UTF-8"?>

<!-- Web Application Deployment Descriptor (Jakarta Servlet 5.0) -->
<web-app
        xmlns="https://jakarta.ee/xml/ns/jakartaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee
        https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
        version="5.0">

  <servlet>
    <servlet-name>HelloServlet</servlet-name>
    <servlet-class>HelloServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>HelloServlet</servlet-name>
    <url-pattern>/HelloServlet</url-pattern>
  </servlet-mapping>
</web-app>

表示されました。
何ら特筆することはありません。

オプションを使ってみましょうか。

 -n 行番号を表示する
subro@Lubuntu2204:~/work/java/HelloServlet/WEB-INF$ cat -n web.xml
     1  <?xml version="1.0" encoding="UTF-8"?>
     2
     3  <!-- Web Application Deployment Descriptor (Jakarta Servlet 5.0) -->
     4  <web-app
     5          xmlns="https://jakarta.ee/xml/ns/jakartaee"
     6          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     7          xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee
     8          https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
     9          version="5.0">
    10
    11    <servlet>
    12      <servlet-name>HelloServlet</servlet-name>
    13      <servlet-class>HelloServlet</servlet-class>
    14    </servlet>
    15    <servlet-mapping>
    16      <servlet-name>HelloServlet</servlet-name>
    17      <url-pattern>/HelloServlet</url-pattern>
    18    </servlet-mapping>
    19  </web-app>

誰かと画面を見ながら話すのに分かりやすくなりました。

もう 2つオプションを加えてみます。

 -T TAB記号(^)を表示する
 -E 行末記号($)を表示する
subro@Lubuntu2204:~/work/java/HelloServlet/WEB-INF$ cat -nTE web.xml
     1  <?xml version="1.0" encoding="UTF-8"?>$
     2  $
     3  <!-- Web Application Deployment Descriptor (Jakarta Servlet 5.0) -->$
     4  <web-app$
     5  ^Ixmlns="https://jakarta.ee/xml/ns/jakartaee"$
     6  ^Ixmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"$
     7  ^Ixsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee$
     8  ^Ihttps://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"$
     9  ^Iversion="5.0">$
    10  $
    11    <servlet>$
    12      <servlet-name>HelloServlet</servlet-name>$
    13      <servlet-class>HelloServlet</servlet-class>$
    14    </servlet>$
    15    <servlet-mapping>$
    16      <servlet-name>HelloServlet</servlet-name>$
    17      <url-pattern>/HelloServlet</url-pattern>$
    18    </servlet-mapping>$
    19  </web-app>$

TABでインデントしているところや、行末に無駄なスペースがないとか分かるようになりました。

でも欠点は、行数の多いファイルだと表示が流れてしまって上の方が見られないところ。

他のソースファイルを catコマンドで表示た時の出力がこれ。
184行目までは流れてしまいました。

   185  ax[2].set_ylim( 0, 100 )
   186  ax[2].grid( True )
   187  ax[2].legend()
   188
   189  #########################################
   190  #  4つ目のグラフ(ネットワーク使用率(%))
   191  #########################################
   192
   193  # グラフタイトル
   194  ax[3].set_title('ネットワーク使用率(1Gbit/秒)(%)')
   195  ax[3].plot( time_list, net_s_list, linewidth = 0.5, label = '送信' )
   196  ax[3].plot( time_list, net_r_list, linewidth = 0.5, label = '受信' )
   197  ax[3].xaxis.set_major_locator( ticker.MultipleLocator(60) )
   198  ax[3].tick_params( axis = 'x', labelsize = 7, labelrotation = 90 )
   199  ax[3].tick_params( axis = 'y', labelsize = 7 )
   200  ax[3].set_xlim( 0, 60 * 24 )
   201  ax[3].set_ylim( 0, 100 )
   202  ax[3].grid( True )
   203  ax[3].legend()
   204
   205  ########################################
   206  # 描画
   207  ########################################
   208  fig.tight_layout()
   209
   210  # png形式ファイルとして出力(YYYYMMDD.png)
   211  # ファイルがあっても上書き
   212  fig.savefig(target_date + '.png')

こういうケースでは、ページャーと呼ばれる moreコマンド(file perusal filter for crt viewing)を使います。

moreコマンドは他のコマンドの出力が多くて流れていってしまう場合に、パイプという機能を使って 1ページ毎に見る時に使うんですが、大きなファイルを見る時にも使えます。

使い方は「more ファイル名」です。

subro@Lubuntu2204:~/work/python/performance$ more performance.py

コマンド入力が完了すると、moreの表示画面に切り替わります。
(具体的には行頭のコマンドプロンプトが出なくなります)

# コマンドライン引数の処理
import sys
import datetime

args = sys.argv

if len(args) > 1:
    if len(args[1]) != 8:
        print("入力日付が間違っています")
        sys.exit(1)
    try:
        print("第1引数:" + args[1])
        checked_date = datetime.datetime.strptime(args[1], "%Y%m%d")
        target_date = args[1]
    except:
        print("入力日付が間違っています")
        sys.exit(1)
else:
    today = datetime.date.today()
    yesterday = today + datetime.timedelta(days=-1)
    target_date = yesterday.strftime("%Y%m%d")

#################################################################
# 00:00〜23:59まで、時刻のリスト(1440行)を作る
#################################################################
time_list=[]

ここで一旦表示が止まるので、 (スペースキー)で次のページに移ります。

全部表示し終わるとコマンドラインに戻ってきます。
途中で終わりたいときはCtrl+cで強制終了させてしまいます。

欠点は、上に戻れないこと。

ちょっと上の方をもう一回みたい!というケースでは、lessコマンド(opposite of more)を使います。

使い方は「less ファイル名」です。
便利になる分、操作が複雑になってきますよ。

subro@Lubuntu2204:~/work/python/performance$ less performance.py

出だしや (スペースキー)で次のページに移るのは moreコマンドと同じです。

しかし、以下ができます。
 j 下スクロール
 k 上スクロール

lessコマンドは最終行まで行っても終わりません。

ax[3].plot( time_list, net_r_list, linewidth = 0.5, label = '受信' )
ax[3].xaxis.set_major_locator( ticker.MultipleLocator(60) )
ax[3].tick_params( axis = 'x', labelsize = 7, labelrotation = 90 )
ax[3].tick_params( axis = 'y', labelsize = 7 )
ax[3].set_xlim( 0, 60 * 24 )
ax[3].set_ylim( 0, 100 )
ax[3].grid( True )
ax[3].legend()

########################################
# 描画
########################################
fig.tight_layout()

# png形式ファイルとして出力(YYYYMMDD.png)
# ファイルがあっても上書き
fig.savefig(target_date + '.png')
(END)

終わらせるには  q を押してください。


==========
ここではファイルの内容を見る時によく使うコマンドを 3つ紹介しました。

ディレクトリ間の移動ができて、ファイルの内容も見られる。
そうなってくると「存外黒い画面も使いにくい訳じゃないじゃん?」と思えてきませんかね。

「ファイルの内容を見るだけなら、マウスに手を伸ばしてテキストエディタを起動してファイル指定するのって面倒くない?」って思い始めたら、あなたはもう黒い画面から離れられなくなるでしょう。

Windowsを使っている時に「く…黒い画面くれぇ〜。Powershellじゃ嫌!」ともなれば、あなたもいっぱしの変態の仲間入りです。




海外には変態が多く、黒い画面(Terminal)だけで本が出ています。
世界は広い。