tips   AtCoder Python

#python #linux #network #cisco 

Python






Linux

状態チェック

## アップデート
# RedHat系(RPM)
 sudo dnf check-update
 sudo dnf upgrade -y [個別RPMパッケージ]

# Debian系(deb)
 sudo apt update
 apt list --upgradable
 sudo apt upgrade -y [個別debパッケージ]


## ディストリビューションのバージョン
# RedHat系 Debian系 共通
 cat /etc/os-release

# Debian系
 cat /etc/lsb-release

## ホスト名確認
hostnamectl
hostname

## OS情報 # 共通
uname -a  # OS, PC名, kernel, -v情報全て
uname -r  # kernelバージョン確認


## 時刻
timedatectl  # タイムゾーン・時刻設定の確認
LANG=C date  # 現在時刻の確認

## ログインシェル初期設定
echo $SHELL

## パーミッション初期設定
umask  # デフォルトのパーミッション確認(RedHat系 0002)(Debian系 022)
umask -S  # シンボル形で確認


## ドライブの空き容量確認
df -h --total  # デフォはバイト表示 -h(1024B単位でG,M,K表示) --total最後に合計が表示される

## ディレクトリの使用量の確認
du -sh ~/Onedrive(例)  # 親ディレクトリにまとめて表示し、まとまった使用量で表示(この場合、--totalは意味ないから割愛)
du -h --total ~/snap(例)  # 子ディレクトリを表示し、それぞれの使用量も全て表示 ▲とんでもなく長くなる時あるから注意!

## メモリ使用量の確認

free  # KB表示

## フォルダツリー表示
tree ~/snap

# システムの負荷状況を確認
vmstat -SM  # Virtual Memory  # -SM はMB表示

ディレクトリ・ファイル操作1

ディレクトリ・ファイル作成
ls -1h
mkdir -p training/dir  #デフォ 775 (directory)
touch training/file  #デフォ 664 (file)
ls -lh training
rm training/file  # 一旦消して・・
dd if=/dev/zero of=training/file bs=500KB count=2  # 1MBサイズのfileを作成  #デフォ 644(file)
ls -lh training


ディレクトリ移動
cd training


パーミッション編集
chmod 777 dir file  # ディレクトリ権限とファイル権限を777に変更
ls -lh

chmod go-w dir  # ディレクトリ権限を755に変更
ls -lh

chmod a-wx file  # ファイル権限を444に変更
chmod u+wx file  # ファイル権限を744に変更
ls -lh

変数

echo '#!/bin/bash' > file  # ファイルにプログラムを書き込み
echo 'echo "My name is $name."' | tee file  # 追記 ${name}も可
cat file
./file  # プログラム実行(u=rwxであること)


シェル変数
name=masa  # シェル変数の定義
echo $name
set | grep masa

export name  # 環境変数に設定
printenv | grep masa
export -p | grep masa


export -n name  # 環境変数からnameを削除
./file  # masaが表示されなくなったことを確認
export -p | grep masa

unset name  # シェル変数からnameを削除
echo $name  # 消えたことを確認
set | grep masa


環境変数の全体確認
printenv | tr ':' '\n'  # : を改行に変換して整形表示

通っているパスを確認
echo $PATH | tr ':' '\n' | sort (| grep ***)  # sort追加で重複も視認
cat ~/.bashrc | more -10  # 大元のファイルはコレ

ディレクトリ・ファイル操作2

cp file dir/copiedfile
ls -lh dir
./dir/copiedfile  # 実行

# 圧縮ファイルを作っておく
tar -zcvf dir.tar.gz dir  # tar.gz形式でdirを圧縮(デフォルトで再帰的)
zip -r dir.zip dir  # zip形式でdirを再帰的に圧縮

データ転送

AWSでEC2(RHEL9)を立ち上げる

## 別シェル(別PCでも可)
ssh -i keypair.pem ec2-user@RHEL_GIP  # AWSのRHEL9 EC2にログイン
su - masa  # masaにユーザ変更
mkdir receive  # SCPでファイルを受け取る為のディレクトリを作成

## 元シェル
find ~ -name 'keypair'
scp -i keypair.pem -r dir masa@RHEL_GIP:/home/masa/receive  # dirを圧縮せずに再帰的に転送
scp -i keypair.pem dir.tar.gz masa@RHEL_GIP:/home/masa/receive  # tar.gzを転送
scp -i keypair.pem dir.zip masa@RHEL_GIP:/home/masa/receive  # zipを転送

## 別シェル receiveディレクトリ内を確認
cd receive
ls -lh
 dir
 dir.tar.gz
 dir.zip

ls -lh dir  # -r dirで送ったディレクトリを確認
rm -r dir
tar -zxvf dir.tar.gz  # tarで送ったファイルを解凍
rm -r dir
unzip dir.zip  # zipで送ったファイルを解凍
 ※RHELにはunarコマンドは存在しないらしい・・・

rm d*  # 圧縮ファイルは消しておこう

receiveディレクトリは残しておこう

別シェルを落として、EC2は停止しておく

ネットワーク試験

## 応答用メッセージを作成
echo 'Connection test successful!' > response

## 簡易的に疑似サーバを建てて疎通試験
nc -l 8000 < response  # 8000番ポートでlisten(-l)状態に
nc dynabook 8000  # 別シェルから疑似サーバに接続試験
 > Connection test successful!

ディレクトリ・ファイル操作3

mv file dir/movedfile
ls -lh dir
ls -lh

rm dir/*file  # copiedfile, movedfile両方消す
rm -r dir*  # dirディレクトリ, dir.tar.gz, dir.zip すべて一気に消せる
cd  # ホームディレクトリに移動
rmdir training  # これできれいさっぱり

プロセス監視

uptime  # 稼働時間

プロセス実行終了(パフォーマンスモニタを見ながら)
yes > /dev/null &  # [1] バックグラウンド
top  # [2] uptimeと%CPUを確認 # 起動時刻,稼働時間,負荷平均,タスク,PID,CPU使用量率,メモリ使用量率
Ctrl+z  # [2]topを一時停止
ps

kill -9(-kill) *****  # yesのPID
 [1]-  Killed                  yes > /dev/null
ps

fg 2(%2)  # [2]topをフォアグラウンドに戻す
Ctrl+c  # [2]topを終了
ps

ネットワーク監視

(sudo dnf install net-tools)

curl inet-ip.info  # 自宅ルータのWAN側GIPアドレス
curl globalip.me  # 同じく自宅ルータのWAN側GIPだが、反応がちょっと遅い(なぜ?)

networkctl status  # 自PCのネットワーク情報
ifconfig  # NWインターフェース確認、設定
ip -4 a  # 各IFのIPv4アドレス確認(addr | address でも可)

route  # ルートテーブル情報
ss -pantsu  # ソケット情報

ping -c 4 8.8.4.4  # GoogleセカンダリDNSサーバにping4回
traceroute -n 8.8.4.4  # 名前解決せず高速に経路確認
tracepath -n 8.8.4.4  # pmtu

dig schneehoppli.com any  # A:NWアドレス NS:ネームサーバ MX:メールサーバ SOA:SOA情報 ANY:すべて
host -v schneehoppli.com  # 同上
nslookup schneehoppli.com  # GIPアドレス調査

curl -I https://www.schneehoppli.com  # レスポンスヘッダ
curl -v https://www.schneehoppli.com  # コンテンツ取得時の詳細ログ






ネットワーク

TCP/IPネットワークで用いられるプロトコルは、大きくわけて2つに分類できる

・IGP(Interior Gateway Protocol)・・・AS内部で用いられるプロトコル
・EGP(Exterior Gateway Protocol)・・・AS間で用いられるプロトコル

※インターネットの中で、1つのルーティングポリシーに則って運営されているネットワークをAS(Autonomous System:自律システム)と呼ぶ

ルーティングプロトコル

RIP Routing Information Protocol

・IGP(AS内部)
・過去(ルータの計算能力がまだ低く、複雑な処理が難しかった時代)の主流だった
・通過するルータの数(ホップ数)でルートを選ぶ
・30秒ごとにルート情報を送信し、ネットワークの状態を把握する
 ルータの台数が増えると、ネットワークに負荷がかかるうえ、コンバージェンス時間が長くなるという欠点がありました。
・小規模なネットワークでは、コンバージェンス時間はあまり問題にならないため、今でもRIPが使われている

OSPF Open Shortest Path First(最も短い経路を最初に開く)

・IGP(AS内部)
・リンクステート型
  各ルータが接続されている回線の帯域幅といったネットワークの接続状況(Link State:リンクステート)を交換し、
  その情報をもとに1つのルーティングテーブルを作り上げ、全ルータで共有し、最適なルートを選び出します。
・「コスト」という考え方に基づいてルートを選択
  広帯域な回線ほどコストが小さいと考え、ルートを選ぶときには目的地点までのコストを加算していき、
  合計が最も小さいルートを最適なルートとみなす
  コストは帯域に応じてデフォルト値が定められている
  一般的にはネットワークの設計方針や運用方針に基づいてネットワーク管理者が設定します。
  例えば、高速の回線には小さいコストを、低速の回線には大きなコストを設定して、ネットワークの最適化を図ります。
・コンバージェンス時間が短い
  AS内の全ルータが共通のルーティングテーブルを保有
  ネットワークに変更があったときには、変更があった差分情報のみを他のルータに伝えるトリガーアップデートを行います。
  そのため、ネットワークの変更が全ルータに伝わるまでの時間「コンバージェンス時間」が短くなっています。
・ループが発生しない
  コンバージェンスが高速に行われるため、ルーティングが正しく行われないループが発生する確率もきわめて小さい。
・負荷分散が可能
  同じコストのルートが複数存在した場合、複数のルートにパケットを分散して送り出し、
  負荷分散(ロードバランシング)することができます。
・主に大規模ネットワークで使われる

・OSPFの「エリア」とは
  大規模なネットワークではルータの数が多くなり、リンクステート情報も大きくなって、ルータにかかる負荷が大きくなります。
  その結果、ネットワーク全体のスピードが低下してしまうこともあります。
  そうした問題を解決するために、OSPFでは「エリア」という考え方が導入されています。
  ネットワークを分割して、効率的に運用・管理しようという考え方です。

  エリアを分ける際には「エリア0」と呼ばれる中心となるエリア(バックボーン)を作り、
  他のエリア(エリア1、エリア2、エリア3…)は必ずエリア0に接続します。
  エリア0と、他のエリアをつなぐルータは「エリア境界ルータ(Area Border Router:ABR)と呼ばれます。

  エリア内のルータが持つリンクステート情報は、エリア内の情報がメインになり、エリア外の情報は概要のみになるため、
  ルータにかかる負荷は軽減できます。

・OSPFの仕組みについて

仕組み①Helloパケットで接続確認
 各ルータは隣接するルータにHelloパケットを送信します。
 各ルータがその存在を他のルータに知らせることは、ルーティングテーブルを作成するための基本となります。
 Helloパケットは10秒間隔で常に送信されます。Helloパケットが通常の4倍の時間(40秒)届かなかった場合は、
 隣接するルータが何らかの理由でネットワークに存在しなくなったと判断されます。

仕組み②リンクステートメントの交換
 隣接するルータとの接続が確認できたら、接続状況(リンクステートメント)を交換します。
 接続状況を送るパケットをLSA(Link State Advertisement)と呼びます。
 ルータはLSAを受け取ると、LSDB(Link State Database)と呼ばれるデータベースを更新し、隣接するルータと同期させます。
 この作業を繰り返すことで、AS(自律システム)内、あるいはエリア内のルータがすべて同じLSDBを保持することになります。

仕組み③ルーティングテーブル作成
 LSDBをもとに、SPFアルゴリズムと呼ばれる計算方法を用いて、ルーティングテーブルを作成します。
 SPFは、Shortest Path Firstの略で、最もコストが低いルートを選ぶアルゴリズムです。
 OSPFの名称はここから来ています。

BGP Border Gateway Protocol() TCP 179

・EGP(AS間)
・BGPでは経路制御を行う組織ごとにインターネットの世界で唯一の番号が割り当てられ、個々の経路を識別します。
 このインターネットの世界で唯一の番号をAS(Autonomous System)番号と呼びます。
・AS番号はIANA(Internet Assigned Numbers Authority)※2が管理しています。
 IANAはAS番号をある程度のブロック単位でRIR(地域インターネットレジストリ:Regional Internet Registry)へ割り振りを行っており、RIRからNIR(国別インターネットレジストリ:National Internet Registry)やLIR(ローカルインターネットレジストリ:Local Internet Registry)へさらに割り振られるという階層構造で管理されています。
・BGPによる経路制御を始めるには、このAS番号の割り当てを受けることが必要です。
 AS番号はRIRやJPNICなどのNIRから割り当てを受けることができます。



Cisco

Linux端末からCisco機器にコンソール接続(cuコマンド使用)

cu -s 9600 -l /dev/ttyUSB0

Linux端末からCisco機器にコンソール接続(minicom使用)

# シリアルポートの確認(USBにシリアルケーブルを挿した状態で)
ls /dev | grep ttyUSB
 ttyUSB0

# minicomをシリアルポート指定で起動(英語の方が表示が整う)
LANG=C minicom -D /dev/ttyUSB0

# minicomを終了するときは
Ctrl+A z x Enter

状態確認コマンド

# ディレクトリ構造
dir

# show clock  # SYSクロックの確認
# show calendar  # HWクロックの確認(startup)

# 全行表示 --More--にならない
ter len 0

# バージョン情報
show ver

# 
show run

# 
show start

# 
show inventory

# 
show env all

# 
show ip int brief

# 
show int status

# 
show int trunk

# 
show ip route

# 
show ip ospf nei

# 
show ip ospf database

# 
show standby brief

# 
show ntp associations

# 
show cdp nei

# 
show license status

# 
show log

# 
show switch

# 
show switch detail

設定コマンド