コマンドライン解析~シェルの基礎の基礎~
はじめに
インフラエンジニア初学者のぽれいんと申します。
転職する前はプログラミングスクールにて主にHTML、CSS、Ruby、MySQL等について学びました。
※このブログでは自分が後々、見返すことができるようにまとめることを目的としていますが、もし需要があるようでしたら是非ともご覧ください。
<前回の記事>
<関連記事>
↑↑まだ見ていない方はこちらから↑↑
コマンドライン
$変数名という文字列をコマンドラインで指定すると、シェルは置き換えを行う。
シェルは変数だけでなくコマンドラインを分析し、様々な文字列に置き換えてからコマンドを実行している。
リテラル文字とメタ文字
リテラル文字…文字そのものを表現する際に用いる
メタ文字…シェルにとって意味をもった文字で、実際にコマンドが実行される前に、別の文字列に置き換えられるもの。
~ ...カレントユーザのホームディレクトリに置換
$変数名 ...変数に格納されている値に置換
` コマンド ` ...コマンドを実行したときに出力される文字列に置換
* ...0文字以上の文字列(ただし、ドットで始まるファイル名の「.」は除く)
? ...任意の1文字(ただし、ドットで始まるファイル名の「.」は除く)
(スペース) ...要素の区切り
; ...コマンドの区切り
\ ...メタ文字の打ち消し
バッククォート(`)
コマンドを実行したときに出力される文字列に置換の例
echo 今日の日付は`date +%Y%m%d`です
→今日の日付は20211015です
メタ文字のクォート
シェル上でコマンドを実行する場合、文字列の中に置き換えるべき文字があるかどうかを探し、あれば、それを展開してから実行する。そのため、メタ文字として認識される文字をリテラル文字(文字通りの文字)として認識させるためにはそのための処理(以下のいずれかの処理)をしてあげる必要がある。
・エスケープ文字(¥)を前置する *1
・シングルクォートで囲む *2
・ダブルクォートで囲む(但し、$ ` ¥ はメタ文字としての意味を失わない) *3
例
例えば、echoコマンドで(メタ文字としての意味を持つ)スペースを含む文字列を出力
*1 echo I¥ love¥ you
*2 echo 'I love you'
*3 echo "I love you"
→I love you
状況に応じて使い分ける必要がある。
以上!!!!!!!
Ansibleサーバを構築して別サーバにApacheをインストールする
はじめに
インフラエンジニア初学者のぽれいんと申します。
※このブログでは自分が後々、見返すことができるようにまとめることを目的としていますが、もし需要があるようでしたら是非ともご覧ください。
<前回の記事>
<参考>
【Ansible入門】EC2環境でAnsibleを実行してみよう - サーバーワークスエンジニアブログ
Ansible入門者向け学習ガイド(CentOS編) | 株式会社アイティードゥ
Ansibleとは
インフラ環境をコード化し、インフラ構成を管理するツール。
Ansible用にコード化されたファイル群をPlaybookと呼び、Playbookを1度でも何度でも実行しようが、同じ結果が得られる冪等性という特徴がある。
扱うサーバの数が100、1000と多い際に使用することで時間の効率化、ミスの低減を図ることができる。
使用する環境
- サーバー
- Amazon EC2
- インスタンスタイプ: t2.micro (2台)
- オペレーティングシステム: Amazon Linux 2
- Amazon EC2
- ソフトウェア
構成図
実践
<Ansibleサーバ>コントロールノード
Ansibleインストール
amazon-linux-extras install epel -y
python-pipをインストール
yum install -y python-pip
Ansibleをインストール
yum install -y ansible
pyshon-pip用Ansibleをバージョンを指定してインストール
pip install ansible==2.4.0
Ansible・pythonのバージョンを確認
ansible --version
SSHの設定
ssh鍵を作成
ssh-keygen
※The key's randomart image is: が出るまでEnterを連打。
/root/.sshに移動し中身を確認
cd /root/.ssh && ls -la
authorized_keysの内容を確認
cat authorized_keys
id_rsa.pubの内容を確認し、コピーしておく
cat id_rsa.pub
<Client01サーバの作業> ターゲットノード
~/.sshに移動し中身を確認
cd ~/.ssh && ls -la
~/.ssh/authorized_keysを編集
vi ~/.ssh/authorized_keys
--------以下を追記----------------
※コントロールノードで内容を確認し、
コピーした内容を貼り付ける
----------------------------------
ディレクトリ、ファイルの権限を変更する
chmod 0700 ~/.ssh && chmod 0600 ~/.ssh/authorized_keys
<Ansibleサーバ>コントロールノード
AnsibleサーバからClient01サーバにSSH接続
(鍵認証が問題なければパスワードなしで接続ができます。)
接続が確認後、exitで切断。
ssh root@プライベートIP
>yes
exit
※yesを入力することで侵入可能
Ansible疎通確認
/etc/ansible/に移動し内容を確認
cd /etc/ansible/ && ls
hostsファイルを編集
vi hosts
----------以下を最終行に追記-------------
[target]
targetnode ansible_host=プライベートIP
---------------------------------------
ansible.cfgファイルを編集
vi ansible.cfg
----------以下を最終行に追記----------
[defaults]
interpreter_python=/usr/bin/python3
------------------------------------
ansibleコマンドを実行し疎通確認を行う
ansible all -i hosts -m ping
※pingモジュールを使用し疎通しています。『all』はインベントリに記載しているすべてのターゲットノードが対象になる
※Ansibleコマンドが上手くいかないという報告がありました。
その場合、ansible.cfgファイルを元の状態に戻したらできるかもしれないです。。。
Playbookの作成
cd /etc/ansible/roles
mkdir httpd && cd httpd
mkdir tasks && cd tasks
pwd
→ /etc/ansible/roles/httpd/tasks
install.ymlを作成
vi /etc/ansible/roles/httpd/tasks/install.yml
--------------以下を記入--------------
---
- name: httpdのインストールを行います
yum:
name: httpd
state: present
--------------------------------------
configuration.ymlを作成
vi /etc/ansible/roles/httpd/tasks/configuration.yml
--------------------以下を記入-------------------------------
---
- name: バックアップの確認をします。/etc/httpd/conf/httpd.conf
stat:
path: /etc/httpd.conf.org
register: httpd_conf_org
- name: バックアップを取得します。
copy:
src: /etc/httpd/conf/httpd.conf
dest: /etc/httpd/conf/httpd.conf.org
remote_src: yes
when: not httpd_conf_org.stat.exists
- meta: flush_handlers
------------------------------------------------------------
main.ymlを作成
vi /etc/ansible/roles/httpd/tasks/main.yml
-------------以下を記入------------
- import_tasks: install.yml
- import_tasks: configuration.yml
-----------------------------------
varsディレクトリを作成
cd /etc/ansible/roles/httpd/
mkdir vars && cd vars
main.ymlを作成
vi main.yml
------------以下を記入---------------
Listen_port:
- port: 8080
-------------------------------------
handlersディレクトリを作成
cd /etc/ansible/roles/httpd/
mkdir handlers && cd handlers
main.ymlを作成
vi main.yml
------------以下を記入---------------
- name: start
service:
name: httpd
state: started
enabled: yes
-------------------------------------
site.ymlの作成
cd /etc/ansible
vi site.yml
------------以下を記入---------------
---
- hosts: all
gather_facts: false
remote_user: root
roles:
- httpd
-------------------------------------
treeコマンドを使用し、ディレクトリの階層がしっかり作成できているか確認
yum install -y tree
tree --charset=C
-------以下コマンド結果---------------
|-- ansible.cfg
|-- hosts
|-- roles
| `-- httpd
| |-- handlers
| | `-- main.yml
| |-- tasks
| | |-- configuration.yml
| | |-- install.yml
| | `-- main.yml
| `-- vars
| `-- main.yml
`-- site.yml
-------------------------------------------
5.playbookの実行
cd /etc/ansible
ansible-playbook site.yml -i hosts -k
※パスワードはsite.ymlで指定した『remote_user』のパスワードを入力
以上!!!!!!!!!!!!!
【備忘録】AWSSA頻出用語一覧
はじめに
インフラエンジニア初学者のぽれいんと申します。
※このブログでは自分が後々、見返すことができるようにまとめることを目的としていますが、もし需要があるようでしたら是非ともご覧ください。
<前回の記事>
<参考>
ディストリビューションの概要 - Amazon CloudFront
【初心者向け】CloudFront とは | SunnyCloud
https://wa3.i-3-i.info/diff150communication.html
なぜネットワークACLでなくセキュリティグループで細かいトラフィック制御を行なうのか | DevelopersIO
メタデータ(metadata)とは - IT用語辞典 e-Words
本日のやりたいこと
絶賛AWSソリューションアーキテクトアソシエイトの取得に向けて、勉強中のぽれいんです。最近はテキストを1周読み終えてひたすら問題を解いております。。。
そんな、問題文に分からない言葉が何回か出てくるため、文章の意味を理解するのにとても時間がかかるし何を言っているか分からないことも多々あります。。。(恥)
そこで自分の備忘録として、そんな用語をこちらにまとめ上げることに致しました。
完全に初学者の自分用ですが、同じ気持ちになっている人がいたら少し安心致します。
(安心していいのかは分かりませんw)
ぽれいんの分からない用語集
<スループットとレイテンシー>
スループット…時間当たりの処理能力のこと。
1回の処理でどれくらいのデータをおくることができるかという指標。
レイテンシー…通信の遅延時間
ex.スマホゲームの読込中等
<ディストリビューション>
ディストリビューション…Linuxの配布形式のこと。
AWSSAでは、CloudFrontにおいて、ダウンロードディストリビューションとストリーミングディストリビューションの2種類が登場。
ダウンロードディストリビューション…HTML、CSS、画像などのデータ配信。
ストリーミングディストリビューション…動画ストリーミング配信。
<インバウンドとアウトバウンド>
インバウンド…外から中。
コンピュータやシステムが、何かしらからデータ等を受け取ること。
アウトバウンド…中から外。
コンピュータやシステムが、何かしらにデータを送り付けること。
AWSでは、セキュリティグループの設定の際に
インバウントルール、アウトバウンドルールを作成します。
<ステートレスとステートフル>
ステートレス…行きの通信と帰りの通信が別。
ステートフル…行きの通信が許可されていると帰りの通信も自動的に許可される。
帰りの通信…インバウンド通信やアウトバウンド通信への応答。
<クエリ>
クエリ…データベース管理システムに対する問合わせ(処理要求)
データの抽出や更新などの処理要求を文字列で表す。処理対象のテーブルやデータの抽出条件、並べ方などを指定する。
<可用性と拡張性>
可用性(アベイラビリティ)…システムが継続して稼働できる度合いや能力のこと
拡張性(スケーラビリティ)…システムやネットワークなどが、規模や利用不可などの増大に対応できる度合いのこと。
AZ(アベイラビリティゾーン)は直訳するとシステムが継続して稼働できる範囲か。。
<セキュリティポリシー>
セキュリティポリシー…個人情報の保護や機密漏洩防止のため、コンピュータセキュリティに対する基本方針をまとめたもの。
<マルチスレッド>
マルチスレッド…アプリケーションのプロセス(タスク)を複数のスレッドに分けて並行処理する方式。マルチスレッドを用いると、アプリケーション内で必要に応じて複数の処理を並行して進められるため、処理の速度と精度が飛躍的に向上する。
<メタデータ>
メタデータ…データについてのデータ。データそのものではなく、そのデータを表す属性や関連する情報を記述したデータのこと。
ex.音声データの曲名や作詞者、文書データのタイトルや作成日
人狼ゲーム等のメタ考察とは全然意味が違うことに驚いた。。
人狼ゲームやりたくなった。。。。。
以上!!!!
L4とかL7って何⁇
はじめに
インフラエンジニア初学者のぽれいんと申します。
転職する前はプログラミングスクールにて主にHTML、CSS、Ruby、MySQL等について学びました。
※このブログでは自分が後々、見返すことができるようにまとめることを目的としていますが、もし需要があるようでしたら是非ともご覧ください。
<前回記事>
<参考記事>
【情報処理試験備忘録】 ネットワークスペシャリスト メモ: 徒 然 日 記
本日の疑問点
こんにちは。最近はAWSソリューションアーキテクトアソシエイトの勉強に励んでいます。AWSSAのテキストや問題集を読んでいるとL4レイヤーという言葉や、L7レイヤーっていう言葉がいっぱい出てきました。
なんとなくそれかなあってのはあるけど、しっかり分かった気がしていない…
ということで、一回まとめとこうっていう感じです。
そんなのも分からないのかよって感じですよね…(笑)orz
layer
L4やL7の”L”ってなんだろう?正解は”layer(層)”でした。
層ってことは”アトイネ”や”アプセトネデブ”が絡んでくるのかなあ。
※以下はこちらの記事で触れたかも、、、復習です!
OSI参照モデル(アプセトネデブ)
→複数のプロトコルを階層化したプロトコルスタックの代表格がOSI参照モデル。
データの通り道となる階層ごとにルールがはっきりしていることでアプリケーション開発者はプロトコルの取り決めに沿って開発を進めればよい。
上層(地上近く)…使用するユーザの近く
アプリケーション層 「L7」
プレゼンテーション層
セッション層
トランスポート層 「L4」
ネットワーク層 「L3」
データリンク層 「L2」
下層(地下深く)…開発者やケーブルや回線の近く
TCP/IP(アトイネ)
→「TCP/IPのプロトコルを実装するためにはどのようにプログラムを組めばいいか?」という視点で階層構造化したモデル。
上層
アプリケーション層
インターネット層
ネットワークインターフェイス層
下層
OSI参照モデルとTCP/IPの関係性
OSI参照モデルは「通信機能」を階層構造にしたモデル
TCP/IPは「TCP/IP実装」のため階層構造にしたモデル
であるため、特に関係性はない。ただ、お互いに共通点がいくつかあるため対比的に書かれることが多い。
各レイヤ詳細
L2
2層はアプセトネデブの”デ”のため、データリンク層になります。
特徴:フレームの転送
L3
3層はアプセトネデブの”ネ”のため、ネットワーク層になります。
特徴:ルーティング処理
プロトコル:IP
L4
4層はアプセトネデブの”ト”のため、トランスポート層になります。
特徴:ファイヤーウォールの設定
L7
7層はアプセトネデブの”ア”のため、アプリケーション層になります。
特徴:ロードバランサ
以上!!!!!!
SQL
はじめに
インフラエンジニア初学者のぽれいんと申します。
転職する前はプログラミングスクールにて主にHTML、CSS、Ruby、MySQL等について学びました。
※このブログでは自分が後々、見返すことができるようにまとめることを目的としていますが、もし需要があるようでしたら是非ともご覧ください。
<前回の記事>
↑↑まだ見ていない方はこちらから↑↑
<参考>
【これだけ覚えてたらOK!】SQL構文まとめ - Qiita
RDBMS
RDMMS(リレーショナルデータベース)は、大量のデータを一定の規則に従って蓄積し、データベースを一元的に管理できるようにした管理システム。
ex.Oracle Database,SQLserver,PostgreSQL,MySQL
データベース
データベースは列(カラム)、行(レコード)とフィールドを持つテーブルのセットで構成される。Excelみたいな感じ!!
基本構文
Mysqlに接続
mysql -u root
>パスワードを入力
データ操作のSQL
データ操作のSQLキーワード | CRUD | 用途 |
---|---|---|
SELECT | Read | 取得 |
INSERT | Create | 作成・保存 |
UPDATE | Update | 更新 |
DELETE | Delete | 削除 |
例
追加
INSERT INTO personal(id,name) values(1,suzuki);
取得(データの検索)
SELECT id,name FROM personal;
更新
UPDATE values;
削除
DELETE FROM values;
以上!!
ネットワーク基礎②
はじめに
インフラエンジニア初学者のぽれいんと申します。
※このブログでは自分が後々、見返すことができるようにまとめることを目的としていますが、もし需要があるようでしたら是非ともご覧ください。
<前回の記事>
LAN基礎
EthernetによるLANを構築するためのハードウェアの基礎知識と物理的ネットワークの構築
社内LAN
社内LANでは文書ファイルを置いておくファイルサーバや、情報を共有するためのデータベースサーバなども接続し、社員がアクセスできるようにする。
LAN機器とイーサネット規格
イーサネットとはLANを構築するための規格。1番の特徴はコストが低く簡単にLANが構築できること。LANを構築する際、最低限以下の機器が必要。
・LANケーブル
・LANカードもしくは無線LAN
・スイッチングハブ(HUB)
LAN
コンピュータとHUB、あるいはコンピュータと接続するために使用するネットワークケーブルは主にツイストペアケーブルを使用する。ツイストペアケーブルにはカテゴリという品質レベルがある。品質が良いほど高速に信号を送信することが可能。現在最も使用されているカテゴリは5eと呼ばれる品質のものになる。
LANカード(NIC)
LANケーブルを挿す穴がついたパソコンに合体させる部品。
最近のパソコンは標準でLANポートを一つ備えていることが多くなっているため必要ない場合もある。
ハブ
ケーブルを集約する部品。複数のパソコンをLANケーブルを使ってHUBに接続することによってパソコン同士が通信できるようになる。ケーブルを挿し込むHUBの口のことを「ポート」という。HUBにはリピータHUBとスイッチングHUBの二種類ある。
リピータHUB
ポートから受け取ったパケットを他のすべてのポートにリピートする。(2021年現在、リピータHUBはほとんど利用されていない)リピータHUBはすべてのポートに電気信号を流すため、頻繁に信号同士がぶつかる「コリジョン」が発生する。コリジョンが発生するとパケットの再送が行われるため、LAN内でのデータの伝送効率が低下する。
スイッチングHUB
スイッチングHUBは各ポートの接続先のLANカードに割り当てられているMACアドレスを記憶することができる。受信したパケットの宛先と記憶しているMACアドレスを照らし合わせて宛先となっているコンピュータが接続されているポートにのみパケットを流す。そのため、コリジョンが発生しにくい。
MACアドレス
LANカードごとに割り当てられている番号。IPアドレスはOS上の設定で変更できるのに対して、MACアドレスは変更が不可能でユニークな(重複のない)アドレス。
Windowsの場合、設定→ネットワークとインターネット→ネットワークの詳細設定の下にあるハードウェアと接続のプロパティを表示
より、確認できる。
以上!!!!!!!!!!!!!
ネットワーク基礎
はじめに
インフラエンジニア初学者のぽれいんと申します。
※このブログでは自分が後々、見返すことができるようにまとめることを目的としていますが、もし需要があるようでしたら是非ともご覧ください。
<前回の記事>
<参考>
ネットワークとは
ネットワークを利用すると異なるマシン同士データをやり取りする事ができます。最近のシステムでは1台のマシンだけで完結することはほとんどないので、必ずと言っていいほどネットワーク経由してデータが流れます。
ネットワーク上でやり取りする仕組みは非常にたくさんあります。しかし、インターネットの通信の仕組みをはじめ、ほとんどのシステムにはTCP/IPと呼ばれる仕組みが使われています。
LANとインターネット
ネットワークには様々な規模のものがありますが、1つのビルやフロアの中のように限られた環境で利用するネットワークのことをLANといいます。LANとはLocal Area Networkの略語で「限定した地域の通信網」という意味です。
また、世界各地に存在するネットワークをインターネットといいます。インターネットは世界中の様々な企業や組織のLAN同士を集合体と見ることができます。さらに、企業に本社‐支社間など地理的に離れたLAN同士を電話回線や専用線を使って接続したネットワークのことをWAN(Wide Area Network:広域通信網)といいます。
クライアント・サーバネットワーク
「インターネットをする」といえば、一般に「ホームページを見る」という意味で使われています。ホームページはパソコンとインターネット接続環境さえあれば日本だけに限らず、世界中の言語で書かれたホームページを瞬時に表示して閲覧することができます。Webサーバというホームページを見せるためのコンピュータが、要求されたページを返すことにより実現しています。
ここで、ホームページを見るためにWebサーバにアクセスしてくるコンピュータをクライアントといい、Webサーバのように何かのサービスを提供するコンピュータをサーバといいます。一般的にサーバはクライアントからの何らかの要求する(リクエスト)を待ち続けており、クライアントから自分に対する要求があれば、その要求に対して応答(レスポンス)を返します。
通信プロトコル
プロトコルとは、異なるデバイスやコンピュータシステム、ソフトウェアなどが互いに通信するために制定された規約のことです。現在もっとも普及している標準的なプロトコルがTCP/IPプロトコルで、インターネットの仕組みを利用するソフトウェアを開発する際に必ず利用されます。
TCP/IPプロトコル
この章では現在もっとも普及しているTCP/IPプロトコルの階層化モデルとこのあとの各種サーバ構築で必要になる代表的なプロトコルの特徴を学習します。
TCP/IP階層化モデル
サーバ・クライアントシステムにおいて利用されるプロトコルを階層に分けて整理したものをTCP/IPモデルといいます。このようにデータの通り道となる階層ごとにルールがはっきりしているため、開発者は各プロトコルの取り決めに従って開発を進めればよいことになります。以下は各階層で使われる代表的なプロトコルを一覧にしています。
アプリケーション層
アプリケーション層では、電子メールのフォーマットなどアプリケーション間でデータのやり取りする際に使用する共通のデータ構造や、サーバ・クライアント間の通信の開始~終了までのセッション情報におけるデータ形式などを想定している。
トランスポート層
アプリケーション層で作成されたデータは次にトランスポート層に渡されます。トランスポート層では、確実なデータ伝送を実現するために転送方法に関する取り決めを行います。特にサーバクライアント間で仮想的なデータ通信路を確立するためにポート番号を利用します。インターネット上でよく利用されるサービスは固有のポート番号が決まっています。
TCP(Transmission Control Protocol)...信頼性が高い
UDP(User Datagram Protocol)...スピードが速い
インターネット層
ネットワーク上の住所と宛名にあたる、IPアドレスが、インターネット層で負荷されます。この層で使われるIPというプロトコルは、「データ(パケット)を目的のコンピュータまで届ける」という、非常に重要な役割を持っています。宛先のIPアドレス
ネットワークインターフェイス層
ネットワークインターフェイス層では上位層から受け取ったデータをLANケーブルに流すための処理を行います。LANでもっともよく使われるEthernet(イーサネット)の場合、次に送る機器を特定するために宛先コンピュータのMACアドレスをデータに付加し、これを電気信号に変えてからケーブルに渡します。この処理はOS上ではなくLANカードのチップ上で行われます。
以上!