💭

改めてLinuxコマンドについてまとめてみた その1

2023/01/26に公開

背景

awsが普及して、cpu使用率、メモリ残量、ネットワーク経路などコマンドを打ってわざわざ確認しなくてもGUIで確認できるようになったので便利になった一方で最近コマンド忘れていることに気づきました😅
そこで今更ですが、再度linuxコマンドについてまとめてみたいと思います!
パブリッククラウドに慣れてしまっているみなさんも一緒にコマンド思い出しましょう!!!!!!

まずは基本のsshについて

sshは一般的に22番ポートを使いセキュアーな通信を行うが、重要なのがsshデーモン(sshd)をサーバーで起動させssh接続を監視させておかないと接続ができない。

そして使う側のpcなどではsshクライアントが起動していないといけないので注意!!!

接続方法などは基本中の基本なので省略します!

公開鍵、共通鍵認証方式について

  • 共通鍵認証方式

暗号複合化に同じ鍵を使用するパターンでシンプルな暗号化方法
複合などに必要な処理も軽いのが特徴

ただこの共通鍵認証方式には問題があり、それは鍵配送問題である。
それはどのようにサーバーなどに,共通鍵を送る問題

そこで登場するのが公開鍵認証方式

  • 公開鍵認証方式

公開鍵認証方式では暗号化するキーと複合化するキーが別のものとなる。

暗号文を作り出す鍵が公開鍵
暗号文を複合化する鍵が秘密鍵となる

公開鍵認証方式ではデメリットもあり, 安全な暗号化ではあるものの、複合するのに時間がかかる。

余談:
よくどっちに秘密鍵おけば良いですかという質問を受けるので簡単な覚え方は自分PC側に秘密鍵を持つ覚えておくと良いかもですね!

理由としてはサーバーの情報をssh経由で取得したいので、サーバーの公開鍵で暗号化し、自分のPCで複合化することでその情報を見ることができるようになるからですね!

公開鍵は名前の通り大量にコピーしてばら撒いておけばOK
秘密鍵は厳重に保管してください!

  • ハイブリット暗号方式
    共通鍵と公開鍵認証方式のいいとこ取りをしたものです。

共通鍵は鍵配送問題があるが、処理は早い
公開鍵は安全だが、処理が遅い

そこで共通鍵を送るのに、公開鍵認証方式を使い,鍵を送ることができたら、共通鍵認証方式を利用する

cron

cronとは定期的にジョブを実行するための機能で, クーロンデーモン(crond)を起動させておく必要がある。(Linuxの標準機能)

まずはcrondが起動しているかを確認してみる。
今回は手軽なcloud9(amazon linux2)を例に説明します!
下記コマンドを入力し、runningであればOK!!!

systemctl status crond.service

ではまずcronを一つ登録してみる
下記のコマンドを打つと標準エディターが立ち上がるので、cornを登録してみます!

crontab -e

1分ごとにdateをtmp/test.txtに登録するcronを作成


下記コマンドで登録されたかを確認してみる

crontab -l

書き込むファイルに指定した/tmp/test.txtの中身を数分後に見てみると下記のようになっているので1分ごとに実行されたことがわかる

ここでcronの書き方を軽く説明しておくと以下のようになる

次にクーロンデーモンの実行ログを見てみる
ログが保存されているのは/var/log/cronになるのでその中身を見て見る
今回ec2-userでログインしているのでsudoが必要

sudo cat /var/log/cron | tail -n 15

次にcronの設定ファイルを確認してみる
設定ファイルは/etc/crontabにあるので下記コマンドで確認できる

cat /etc/crontab

MAILTOは注意が必要で今回のように短い期間に繰り返すcronを設定する際は空文字("")にして送信しておかないようにするのをお勧めしたます。1分ごとに行われるcronだと1分ごとにファイルが作成されてしまいますが,inodeはいくつまでファイルを作成できるという上限があるので、それを食い潰してしまい, システムがダウンする可能性があるので注意が必要

AWSにはこのようなcronを実行するサービスとしてEventBridgeがあります。
corn式またはrate式で実行タイミング指定可能, 他の記事で紹介しているので見てみてください!

Linuxのプロセス監視,jobについて

まずはプロセスについて

1, プロセスとは

  • OS上で動いている実行中のプログラムのこと
  • CPUやメモリを消費して動いている
  • Linuxコマンドは実行時に1コマンド1プロセス作成する <-めっちゃ重要!!!

それでは現在稼働中のプロセスを確認してみましょう!!!(ps auxコマンドで確認)

pstreeコマンドでプロセスのツリー構造が確認できる

2, 次にジョブとは

  • 1つ以上のコマンドで動作する人まとまりの処理の単位(パイプ(|)で繋げた複数のコマンドを実行する場合も1つのジョブになる)

実行中のjobを確認するにはjobsコマンドを使用する。

補足:ジョブが構成されると、シェルが持つテーブルにジョブ情報が格納されされ, jobsコマンドはこのテーブルのジョブリストを表示している。

ジョブには
フォアグランドジョブとバックグラウンドジョブがあり, &をつけるとバックグラウンドジョブとして実行される

それでは下記コマンド順番に入力してみる

sleep 60  # フォアグラウンドでsleepを実行,コマンド操作ができなくなるのでcontrole Zでjobを停止させる

jobs      # 停止しているjobのidを確認

bg %1      # 停止しているjobをバックグラウンドで実行, バックグラウンドなので他のコマンドも実行できる

fg %1     # バックグラウンドジョブをフォアグラウンドで実行させる, フォアグラウンドなのでコマンドが実行できなくなる

システムログに関して

var/logは以下には

  • messages
  • cron
  • maillog
  • secure

がある

  • messageについて

システムに関する一般てきになメッセージが保存される

  • ユーザーの認証情報
  • アプリケーションメッセージ

messageログの見方

  • syslog, syslogdとは

syslog: システミログを転送するための標準プロトコルで
UDPまたはTCPポート514を使用し、syslogサーバーに送信される

syslogd: syslogを実行するデーモン

※最近ではsyslogではなく, 改良版のrsyslogが使用されている

  • syslogdの設定ファイルについて

/etc/syslog.confまたはrsyslogの場合は/etc/rsyslog.confで設定を行う

ファシリティーとはログの種別,簡単にいうと出力先
*を使うことで全てのファシリティーを指定することができる

プライオリティーとは優先度で指定したプライオリティー以上のログが出力される

= をつけると特定のプライオリティーを指定できる

;で区切り複数のファシリティーとプライオリティーのセットが指定可能

  • ログローテーションについて

指定した世代数以上のファイルは作成されないようにし、ファイルサイズの肥大化を防止できる

ログローテーションはcronを用いて自動的に行われ
/etc/logrotate.confファイルでローテーション設定を行う

シンボリックリンク

ファイルへのショートカットのようなもの
tmp/test.rbのシンボリックでtextを作りたい場合は下記コマンドを書く

In -s /tmp/test.rb text

ls -lをするとシンボルの場合は先頭にlがつき、矢印で実態のファイルを確認することができる

ここで cdでtestに行っても実体のファイルではなく, testに移動してしまいます。
シンボリックリンクの実態にアクセスするにはcd -P testで-Pオプションを付与すると、実態に移動できます。

###  ハードリンクとinodeについて

inodeとはディスクに保存されている実態にidのような番号とその他情報が付与されているもの
inodeには以下などが含まれる

  • inode番号
  • 作成者
  • グループ
  • 作成日時
  • サイズ

ハードリンク作成方法

ln a.txt b.txt

ハードリンクとはリンクファイルが直接inodeを指しているケース

ハードリンクとソフトリンクの違い

シンボリックリンクは別ファイルシステムからでも参照できるが, ハードリンクと同一ファイルシステムからでないと参照できない

ファイルシステムごとのinode数、inode使用数、inodeの空き数を確認するには下記コマンドを使用する

df -i

Inodes: ファイルシステムのinode数
IUsed: inodeの使用数
IFree: inodeの空き数

a.txtとb.txtのハードリンク作成し、ls -liをするとハをードリンクの場合同じ実態を指していることがわかる(左のinode番号が同じ)

マウント

Linuxで接続したストレージディバイスを利用するためには、Linuxシステムにディバイスを認識させなけえればなりません、この認識させることをマウントと呼びます。

dev/sdb1を/mntにマウントさせるには

mount /dev/sdb1 /mnt

このコマンドによりdev/sdb1のディスクを/mntで参照することができるようになる

逆にmountを外すにはunmountコマンドを使えばよい

umount /mnt

  • etc/fstab
    ディスクパーティションやブロックディバイスなどをどのようにファイルシステムにマウントするかを記述するファイル

EC2の例

パッケージ管理システム

パッケージ管理とは

  • ソフトウェアーのファイル群をパッケージ化し、インストール、アンインストールなどをしやすく
    したもの
  • 依存関係を解決してくれる
  • パッケージリポジトリーなどを利用してくれる

※ec2はRPM形式
個別にインストールする際は下記を入力(-i: インストール, -v: 詳細, -h: )

rmp -ivh インストールパッケージ名

アップグレードする場合は(-U: こちらはインストールとアップグレードの機能がある)

rmp -Uvh インストールパッケージ名

カーネル関係以外をインストールする際は

rmp -Uvh インストールパッケージ名

カーネル関係のインストールは

rmp -ivh インストールパッケージ名

理由としては-Uは古いパッケージを削除した後インストールする形になるので、パッケージが最新のものに対応していなかったら動かなくなっても簡単には戻せなくなってしまうため

アンインストールは

rmp -evh インストールパッケージ名

rmpは基本使わずyumを使う

サードパーティーのパッケージを使用するには

yumで使用する基本コマンド

すでにインストールされているリポジトリーを調べる

yum repolist

epelインストール

sudo amazon-linux-extras install -y epel                  

利用可能なパッケージ一覧を表示

yum list

Discussion