Linuxについてまとめました
コマンドまとめ
コマンド | オプション | 動き |
---|---|---|
pwd | 現在作業しているディレクトリを表示する | |
ls | 現在作業しているディレクトリやファイルの一覧を表示する | |
ls | -l | ファイルやディレクトリの詳細な情報も表示する |
ls | -a | ドットファイルを含めたすべてのファイルが表示される |
ls | -la | ファイルやディレクトリの権限も含めて表示する |
cat | ファイルの中身を表示する | |
pbcopy | ターミナルの内容をクリップボードへのコピー | |
less | ファイルの内容を表示をする(閲覧のみ) | |
※qと入力するまで終了しない | ||
more | 1ページずつページ単位で表示 | |
※ファイル末尾までいくと終了する | ||
tail | ファイルの終わり部分を表示する | |
-fオプション | ||
head | ファイルの先頭部分を表示する | |
cd | 現在作業しているディレクトリを移動できる | |
cd | ~ | ホームディレクトリに移動(cdのみでも同じ) |
cd | .. | 親ディレクトリに移動 |
mv | ファイルやディレクトリを移動 | |
mv | mv 変更前ファイルorディレクトリ名 変更後ファイルorディレクトリ名で初めに指定したファイルを、後で指定したファイル名に変更 | |
※後で指定したファイル名のファイルが存在していた場合はファイルが上書きされる | ||
find | -name | find ディレクトリ名 -name ファイルorディレクトリ名で指定したディレクトリ名のすべての階層の中で、指定したファイルやディレクトリがあるのか検索する |
mkdir | ディレクトリを作成する | |
touch | 空のファイルを作成する | |
cp | cp コピー元ファイル名 コピーされたファイル名 でファイルやディレクトリを複製する | |
※後で指定したファイル名のファイルが存在していた場合はファイルが上書きされる | Copy | |
cp | -i | 上書きを確認 |
cp | -v | コピーの詳細情報を表示 |
cp | -p | ファイルの属性(パーミッションやタイムスタンプなど)を維持 |
echo | 文字を表示する | |
echo 文字 > ファイル名でファイルの内容を上書き | ||
echo 文字 >> ファイル名でファイルの内容に追加 | Echo | |
rm | ファイルやディレクトリを削除する | |
デフォルトの挙動ではディレクトリの削除はできない(-rが必要) | Remove | |
rm | -i | 指定したファイルを対話形式で削除する |
rm | -v | 削除したファイルを表示して確認する |
rm | -r | ディレクトリとその中身も一緒に削除する |
rm | -f | エラーメッセージを表示しない |
rmdir | 空のディレクトリを削除する | |
※空のディレクトリでない場合は削除できない | Remove Directory | |
history | 実行したコマンドを一覧で表示 | |
grep | -r | 検索したいとき grep -r 検索したいコード |
ln | リンク(シンボリックリンクやハードリンク)を張る | |
chmod | ファイルやディレクトリのパーミッションを設定・変更する | |
chown | ファイルやディレクトリの所有者(オーナー)を変更する | |
chgrp | グループを変更する | |
ps | 現在動作しているプロセスを表示する | |
kill | コマンドを誤って実行してしまったり、プログラムの不具合などによってコマンドが操作を受け付けなくなった場合には、シェルからコマンドを終了させる | |
cal 2023 | カレンダーが出る | |
history | 今までの実行コマンド履歴一覧が見れる |
ls
現在作業しているディレクトリやファイルの一覧を表示
オプション | 動き |
---|---|
-l | ファイルの詳細情報を表示する |
-a | 隠しファイルも全ての表示 |
-F | ファイル名の後ろにファイルの種類を意味する記号を追加して表示 |
その他オプションは以下の記事が参考になりました
https://eng-entrance.com/linux_command_ls
cat
ファイルの内容を表示
cat test.txt
pbcopy
クリップボードへのコピー ファイルの内容をクリップボードにコピーしたい場合 |
(パイプ)は左側のコマンドの結果を、右側のコマンドに渡す。
cat README.md | pbcopy
tail
ファイルの終わり部分を表示する -n 行数または-行数と指定
tail -n 1 file1
tailコマンドの-f
オプション ログの出力やデータ収集などで常時追記されていくファイルを表示する際に、追記されるたびにその内容を表示してファイルを監視したい場合
tail -f file1
#file1へ「Hello」という文字を入力
Hello
#tailコマンドを終了するにはCtrl+cを押す。
find
find ~ -name testfile1.txt
# -nameオプション、ファイル名やディレクトリ名を指定
.(カレントディレクトリ)」を起点 次の例ではファイル名の末尾が.txtであるファイルを検索
find . -name ‘*.txt’ -print
ファイルの種類で探す(-type)
オプション | |
---|---|
-type f | 通常ファイル(ファイルのf) |
-type d | ディレクトリ(ディレクトリのd) |
-type l | シンボリックリンク(リンクのl) |
find . -type d
https://eng-entrance.com/linux-command-find
man
コマンドのマニュアルを表示する
lsコマンドについて調べる
# man 調べる語句
man ls
マニュアルの検索
man -k move
オプションまとめ
オプション | 動き | 省略前 |
---|---|---|
-a | 対象のマニュアルを表示する | --all |
-d | デバッグ情報を表示 | --debug |
-k | マニュアルの検索 | --apropos |
-K | マニュアルの説明文で検索 | --global-apropos |
-P | ページャーを指定する | --pager=PAGER |
-C | 表示設定用ファイルを指定 | --config-file=FILE |
tree
ディレクトリやファイルをツリー状に表示するコマンド CentOSやUbuntuには、デフォルトでtreeコマンドがインストールされていないので以下の記事を参考に設定
brew install tree
https://www.engilaboo.com/how-to-use-tree-on-mac/
chmod
chmod [u,g,o,a][+,-,=][r,w,x] [ファイル名]
#file1.txtというファイルに対してオーナーのオーナーの書き込み権限を追加
#chmod u+w file1.txt
意味 | |
---|---|
u | オーナー(所有者) |
g | グループ |
o | その他のユーザ |
a | ugoすべて |
意味 | |
---|---|
+ | 権限を追加する |
– | 権限を禁止する |
= | 指定した権限と等しくする |
意味 | |
---|---|
r | 読み取り(read) |
w | 書き込み(write) |
x | 実行(execute) |
– | 許可されていない/無許可 |
参考教材
https://www.udemy.com/course/unscared_linux/
https://www.udemy.com/course/linux100test/#reviews
https://www.sbcr.jp/product/4797380941/
https://gihyo.jp/book/2022/978-4-297-13148-7
https://www.shoeisha.co.jp/book/detail/9784798166162
参考になったサイト
Vimに入門したので勉強したことまとめました
はじめに
学習したことのアウトプットとして書きました。 現在プログラミング学習中の実務未経験の者であり、技術的な内容などに誤りを含む可能性があるので不適切な記述などがありましたらコメントで教えていただけると幸いです
ファイル保存
コマンド | |
---|---|
a | カーソルの場所から1文字進めてInsertModeに入る |
i | カーソルの場所からInsertModeに入る |
ESC | Normal Mode |
view | View Mode(上書き保存しようとするとWarningになる) |
InsertModeとは テキストを入力する際のモードの一つ 参考 https://www.sophia-it.com/content/insert+mode
モード | |
---|---|
Normal | コマンド入力 |
Insert | 文字入力 |
Visual | 文字選択 |
コマンド | 意味 |
---|---|
x | カーソル直下の文字を消します |
:w ファイル名 | 名前をつけて保存 |
:w | ファイルの保存 |
:q | 実行中のタブを閉じる |
:wq | 保存して閉じる |
:q! | 保存しないで閉じる |
:w! | !をつけて強制的に処理 |
編集・削除系の編集
コマンド | 意味 |
---|---|
x | 1文字削除 |
dd | 1行削除 |
5dd | 5行削除 |
dw | 単語の削除 |
u | UNDO(操作を1つ戻す) |
dw | Undo Redo |
Undo Redoって何なのか :fist_tone1:UNDOは「実行したことをなかったことにする」ものであり、 :fist_tone1:REDOは「一度実行したことをもう一度行う」もの。
https://qiita.com/fillips/items/d86b426d8222ad694809
コピー
コマンド | 意味 |
---|---|
yy | 一行コピー |
5yy | 数字の行分だけコピー |
p | 現在行の下にペースト |
P | 現在行にペースト |
. | 直前のコマンドを繰り返す |
コマンドモード
コマンド | 意味 |
---|---|
: or / | Command Mode |
!python http://test.py/ | コマンドの実行 |
!! | 前のコマンドを実行 |
移動
カーソルを
コマンド | 意味 |
---|---|
h | 左に 👈 |
j | 下に 👇 |
k | 上に 👆 |
l | 右に 👉 |
キーボードの並びが hjkl なので 左下上右と覚える
コマンド | 意味 |
---|---|
:set number | 行番号を表示 |
:5 | 特定の行番号へ移動 |
5l | 5文字分右へ |
コマンド | 意味 |
---|---|
$ | 行末に移動 |
0 | 先頭に移動 |
^ | インデントの先頭に移動 |
{ | 段落ごと上に移動 |
} | 段落ごと下に移動 |
[[ | セクションごと上に移動 |
]] | セクションごと下に移動 |
:1 or gg | ファイルの先頭に移動 |
ctrl + o | 移動前に戻る |
G(Shift + g) | ファイルの最後に移動 |
H(Shift + h) | 表示されている画面の一番上に行く |
M (Shift + m) | 表示されている画面の真ん中に行く |
L (Shift + l) | 表示されている画面の一番下に行く |
検索
コマンド | 意味 |
---|---|
/{文字列} | {文字列}を上から下へ検索 |
n | 次の検索結果に移動 |
N(shift+n) | 前の検索結果に移動 |
* | 下側で単語を検索 |
# | 上側で単語を検索 |
置換
コマンド | 意味 |
---|---|
R(shift+r) | 置換 |
dw | 単語を消す |
:%s/search/replace/g | 一括置換 |
:%s/search/replace/gc | 確認しながら置換 |
コマンド | 意味 |
---|---|
J | カーソルがある行に1つ下の行を連結する |
|ページ内検索| | |/hoge|[/]のあとの文字列を検索する(Control-f的なあれ)| |n|[/]で検索した文字列の次の検索候補に飛ぶ| |N|[/]で検索した文字列の前の検索候補に飛ぶ|
シンタックス,ハイライト
コマンド | 意味 |
---|---|
:syntax off | シンタックスをオフにする |
:syntax on | シンタックスをオンにする |
:noh | ハイライトを消す |
:set nohlsearch | ハイライトを設定しない |
:set hlsearch | ハイライトを設定する |
Visualモードとインデント
コマンド | 意味 |
---|---|
o | 選択行の下に空白を入れ、インサートモード |
O(shift+o) | 選択行に空白を入れ、インサートモード |
J | 行の連結 |
> | 右にインデントを移動 |
< | 左にインデントを移動 |
v(Visual Mode)で移動してy | カーソル指定コピー |
コメントアウト
コマンド | 意味 |
---|---|
ctrl + v | Visual Block Mode |
j or k | 複数行を選択 |
:norm I{文字列} | 先頭に挿入する場合 |
:norm A{文字列} | 行末に追加する場合 |
プラグインについて
https://github.com/junegunn/vim-plug
NERDTree
ナードツリー。Vim上でフォルダ階層表示ができる。
https://github.com/preservim/nerdtree
参考 https://qiita.com/zwirky/items/0209579a635b4f9c95eehttps://reisuta.com/nerdtree/
FuzzyFinder
ファイル検索ができる。
https://github.com/junegunn/fzf
vim-fugitive
gitコマンドの操作ができる。
https://github.com/tpope/vim-fugitive
vim-gitgutter
Vim上でファイルの変更をプラス・マイナスの記号で表示してくれる。
https://github.com/airblade/vim-gitgutter
vim-commentary
gc
と打つとコメントアウトができる。 各言語に応じて//や#など自動で対応。
https://github.com/tpope/vim-commentary
vim-polyglot
シンタックスをいい感じにする。 csvはカンマがみやすくなる。
https://github.com/sheerun/vim-polyglot
coc-nvm
コードの補完をしてくれる。
https://github.com/neoclide/coc.nvim
最後に
自転車乗るのと同じで普段から練習しないと身に付かないと思いました。
さらに詳しい記事、参考にした記事
https://dev.classmethod.jp/articles/vim-quickstart-with-vimtutor/
https://qiita.com/Hiyajo/items/9f87c5687652da42f275
https://qiita.com/colorrabbit/items/755cfbb0e97d48280775
https://www.udemy.com/course/vim-tmux-zsh/
https://reisuta.com/plugin-recommend/#プラグインの導入方法
Web技術の基本についてまとめました
1章 Web技術について
●ハイパーテキスト
Webページの中に別のWebページへの参照を埋め込むことができる、Webを構成する文書。ハイパーテキスト
を作成する言語にHTML(HyperText Markup Language)
がある。
●APIとは
ソフトウェア同士のやりとりを橋渡しする機能
●静的ページと動的ページの違いは?
静的ページは同じコンテンツが送られる 動的ページとは要求(URL)によってコンテンツが変化するようなもの WebサーバはHTMLだけでなく画像などの静的ファイルを返すことができる
❓ Rubyはサーバーサイド・スクリプトか?それともクライアントサイド・スクリプトか?
●RESTfulとは
REST の原則
- 統一インターフェース
- アドレス可読性(一意なURLの構文である)
- 接続性(リンクを含めることができる)
ステートレス性
(やりとりは1回ごとに完結。前のやりとりに影響を受けない)
●ステートレス
状態を保持しないこと
●ブラウザ
- webページを閲覧、操作するためのソフトウェアで、
Chrome
,Safari
,Edge
が代表的なブラウザ - HTML文書を解釈しWebページを表示する
クライアント
である
2章
●クライアントとサーバー
クライアント | サーバー | |
---|---|---|
リクエストをする側 | ||
(サービスを利用する側) | 関係性 | レスポンスを返す側 |
(サービスを提供する側) | ||
ブラウザ | 具体例1 | Webサーバー |
サーバーから送られてきたHTMLを解釈して表示したり、JavaScriptを実行する | 機能 | HTTPリクエストを受け取り処理をする |
画像などの静的ファイルを返す | ||
Webサーバー | 具体例2 | DBサーバー |
① WEBブラウザのアドレス欄にURL入力、もしくはリンクをクリック
② URLやリンク情報をもとづいてWEBサーバーに対してデータを要求
③ WEBブラウザより要求を受け取ったWEBサーバーは要求内容を解析
④ 解析した結果より、要求されたデータをWEBブラウザへと応答
⑤ WEBブラウザはWEBサーバーより受け取ったデータを解析し、WEBページとして表示
❓ ★リンクをクリックしてからページがブラウザに表示されるまでの流れ
👉 重要!!
- DNSサーバへURLのドメインに対応しているIPアドレスの問い合わせを行う
- HTTPのレスポンスボディに設定されているテキスト(HTMLフォーマットであることが多い)をブラウザは解釈し表示する
- HTTPのリクエスト行, ヘッダーには宛先URLなどが含まれる
●サーバ
- Web三層構造とはWebサーバー、アプリケーションサーバー、データベースサーバーで構成されるWebアプリケーションの構造のことを指す。
- コンピュータはクライアントとサーバのどちらにもなり得る
- クライアントからの要求に対して適切な応答をするのがサーバの役割である
- HTTPリクエストを受け取り処理をするのがWebサーバの役割である
●HTTP
- ハイパーテキストのやりとりの手順
webサーバー
とwebクライアント
で、HTML
ファイルなどのデータをやりとりするための通信プロトコル。(Webにおける通信の約束事)HTTP
では通信内容は保護されていない。画像
のデータなどの受け渡しも行われる- ブラウザからHTTPのリクエスト・レスポンスの内容を覗くことができる
ステートレス
状態を保持しない- Webにおける通信の約束事のことである
●プロトコル
ネットワークに接続された機器同士が通信をするときの決められたルールや手順のこと
●TCP/IP
プロトコルの集まり
●IPアドレス
IPアドレスはサーバの住所
●ポート番号
FTP | 20(データ転送) | FTPによるデータ送信 |
---|---|---|
21(制御) | 上記FTPの制御 | |
SSH | 22 | サーバーの遠隔操作(暗号化) |
Telnet | 23 | サーバーの遠隔操作 |
SMTP | 25 | メール送信 |
DNS | 53 | DNS索引 |
HTTP | 80 | ホームページ閲覧 |
POP3 | 110 | メール受信 |
NNTP | 119 | ニュース用 |
NTP | 123 | 時間の取得・調整用 |
IMAP | 143 | メール通信 |
HTTPS | 443 | ホームページ暗号化閲覧 |
Submission | 587 | メール送信 |
★DNS(Domain Name System)
ドメインを管理するシステムのことで、IPアドレスとドメイン名を変換することが役割。
サーバーにリクエストを行う場合は、DNSサーバーに問い合わせを行い、ドメインからIPアドレスを取得して、対象のサーバーに問い合わせを行っている。
**host
コマンドでドメインに対するIPアドレスを確認できる**
hostsファイル
で強制的にドメインとIPアドレスの対応づけを書き換えることができる
●ドメイン(Domain)
IPアドレスを人間にとってわかりやすく変換したもので、世界で一意である必要がある。
3章 HTTP基礎
★HTTPメソッド
GET | 取得 |
---|---|
POST | 作成 |
PUT/PATCH | 変更 |
DELETE | 削除 |
GETはWEBブラウザの閲覧履歴に残る。
aタグのリンクにおけるメソッドは基本GET
である
formのmethod
属性に設定される
action属性はpathを設定している
❓ • HTTPリクエストは上からどのような要素で構成されているか?
リクエスト行、メッセージヘッダー、メッセージボディ
❓ • HTTPレスポンスは上からどのような要素で構成されているか?
ステータス行、メッセージヘッダー、メッセージボディ
❓ • GETメソッドとPOSTメソッドの違い
GET
リクエストの内容はURLに含まれ、クエリパラメータ
と呼ばれます。
GET
リクエストの内容はURLに含まれ、HTTPS通信でもその内容は暗号化されることはありません。
POST
リクエストの内容はリクエストボディ
に含まれ、HTTPS通信の場合は内容は暗号化されるのでログインなどパスワードを送る場合は、パスワードを他人に見られない様にするためにPOST
メソッドを使う。
●ステータスコード
❓ ステータスコード200番台, 3000番台, 400番台, 500番台について
| 100番台 | Informational (情報) | 継続して処理されている状態(continue) | | --- | --- | --- | | 200番台 | Success (成功) | 正常に表示された状態(ok) | | 300番台 | Redirection (転送) | リクエストを完了させるために追加的な処理が必要 | | 400番台 | Client Error (クライアントエラー) | クライアント(ユーザ)側のリクエストが不正、コンテンツが未検出.(ページが見つからない場合に返すステータスコードは404) | | 500番台 | Server Error (サーバエラー) | リクエスト処理中にサーバー内部でエラー、アクセス集中やメンテナンスなどの理由 |
HTTP レスポンスステータスコード - HTTP | MDN
【よく見るものを解説】HTTPステータスコードとは?コード番号別に詳しく解説 | ナイルのマーケティング相談室
●HTTPS(Hypertext Transfer Protocol Secure)
SSL/TLSプロトコルによって提供されるセキュアな接続の上でHTTP通信を行うことをHTTPSと呼んでいる。通信内容が暗号化される。443ポートが利用される。
❓ HTTPSの特徴
- 盗聴防止
- 改ざん防止
- なりすまし防止
❓ ステートフルとステートレスの違い
フルは状態保持のため負担が大きい、レスは状態を保持しないのでやりとりが毎回リセットされる。
★セッションとCookie(ログイン機能に利用される)
!! クッキーはブラウザに、セッションはWebサーバーに保持されている。
セッション | サーバーに保持するもの | 一時的に情報を保持できるという特徴からショッピングサイトのカートの情報などに利用されることがある。ログイン機能に利用。 |
---|---|---|
Cookie | ブラウザに保存するもの | webブラウザに保存したCookieを送信することでwebサーバは相手を識別する。 |
ログイン機能に利用。 |
●Cookie
-
基本的なWebの仕組みとして、サーバ側で作成したセッションIDをHTTPレスポンスのSet-Cookieヘッダーに設定されていた
name value
を設定してサーバーにリクエストすることでブラウザはCookieにセッションIDを保存(HTTPのレスポンスヘッダーに「Cookieを設定すべし」という情報が書かれている)クッキーは、HTTPメッセージのリクエストヘッダーとレスポンスヘッダーで送受信されます。
name=value
の情報をクッキーと呼ぶ -
とあるシステムにログイン後、他のページにアクセスする度にクッキーをサーバーに送っている
-
クッキーとは、Webブラウザに保存される、特定のサイトと紐付けられたテキストデータのことです。
-
クッキーには有効期限があり、その期限を過ぎたら削除される。
Railsだとクッキーの有効期限は
config/initializers/session_store.rb
で設定できます。 例はクッキーの有効期限を1日に設定Rails.application.config.session_store :cookie_store, key: '_runteq_normal_session', expire_after: 1.day
有効期限は、クライアントが終了したとき、ブラウザで言えば、ブラウザが閉じられるまでになります。
-
最大容量は4キロバイト(クッキーを利用して、たくさんの情報をやり取りすることはできない)
●セッション
- 1度ログインすると、他のページにアクセスする度にログインしなくて良いのは、セッションで**
ログイン時の情報(メールアドレスとパスワード)を保持
**しているためである。
●ログイン認証とは
SessionとCookieで状態を保持する流れ
ユーザーがwebサイトにアクセスする
サーバー側でユーザー名、パスワードなどで、認証をチェック
サーバーはSession IDを生成し、Session IDとユーザーを紐付けてサーバーに保存する セッション情報にログイン中のユーザー名を記録
サーバーはwebサイトの画面を返すと同時に、Session IDをブラウザに渡す
ブラウザはCookieにそのSession IDを保存する
ユーザーが次にリクエストを送るときに、そのSession IDがサーバーに送られる
サーバーはそのSession IDによって「誰からのアクセスか」を認識する
サーバーはSession IDに紐づいた情報をSession情報保管場所(DBなど)に保存する
CookieとSessionを今度こそ完全に理解する【分かりやすく図解】|Webエンジニア研究室
4章 データ形式
★HTML
❓ HTML文章はどんな構造か?
タグに囲まれた文章によって構成されている。開始タグと終了タグからなる
**HTML
を解釈するのはブラウザ
。**HTML
はテキストで、そのままではとても読みにくいですが、ブラウザがHTML
を解釈して表示することで見やすいWebページが表示される。言ってしまえば単なるテキストである。- ページのレンダリングをサーバー上で実行し、サーバ側でHTMLを生成してクライアント側へ返すこと**(サーバ側で
HTML
を作って返すこと)をサーバサイドレンダリング
と言う** **HTML
はHTTP
のレスポンスボディに含まれます**。
画像形式 | 画質(MAX) | 圧縮率 | 透過処理 | アニメーション |
---|---|---|---|---|
JPEG | 1677万色 | 非可逆 | できない | できない |
PNG | 1677万色 | 可逆 | 調整できる | できない |
GIF | 256色 | 可逆 | 特定の色を透過色に指定できる | パラパラアニメができる |
●DOM(Document Object Model)
- HTMLをJavaScriptで扱えるようにしたものである
- DOMはツリー形式になっている(ドキュメントの各要素をツリー構造で扱う)
- DOMをいじることでHTMLの見た目を変えられる.
- プログラムからHTMLやXMLの各要素を参照したり、JavaScriptを使ってXMLやHTMLを操作できるようにする仕組み。
- ブラウザ側で解釈
●JSON
データ構造を表すのに使われる。フォーマット
の一つである
- 文字列以外に数値、空データも扱う
- データファイルは小さい
- 人間には読みにくい
プログラミング言語ではない
JSONでは数値、真偽値、文字列、NULL、配列、オブジェクトが表現できる。
●エンコード, デコード
データ圧縮にはコーデック
と呼ばれるソフトウェアが用いられ圧縮することをエンコード
、再生するために伸長することをデコード
という
●フィード
Webサイトなどの更新履歴を配信するためのファイル
5章 Webアプリケーション基礎
●Webアプリケーションの3層構造
階層構造であり階層同士で直接やりとりしない
Webサーバー、アプリケーションサーバー(APサーバー)、データベースサーバー
- 負荷分散しやすい
- 改修の影響範囲を限定できる
●フレームワークについて
❓ ライブラリとフレームワークの違い
ライブラリ
がさまざまな機能、いわば「部品」を再利用できるように集めたものとすれば、
フレームワーク
は文字通り、開発のための「枠組み」を提供してくれるもの
各要素が相互にやりとりをする。
MVCモデルの範囲はアプリケーション層とデータ層である。プレゼンテーション層はMVCモデルとユーザーの間の仲介を行う部分。
❓ Webサーバーの役割
Webクライアントに対する窓口の役割。
つまり、静的ページのデータやAPサーバーから転送された動的ページのデータをWebクライアントに転送すること。
冗長化
:1台あたりの負担を無くし故障しても別のサーバーがカバーする。
❓ アプリケーションサーバーの役割
Webアプリケーションの中核となる業務処理を行うプログラム。
セッション管理
機能、トランザクション管理
機能
● DBMS
データベース管理システム。
冗長化
とデータの同期
冗長化方法
ミラーリング
: 複数のデータベースが同時に更新を行うレプリケーション
: 更新内容を別のDBMSに連携して、連携されたDBMSが同じ内容の更新をするシェアードディスク
: データストレージ(共用の機器)を持ち複数のDBサーバからデータストレージを更新をする
●ミドルウェア
OSとアプリケーションの間で色々な処理を行うソフトウェア
Webサーバー | Apache Web Server/Nginxなど |
---|---|
データベース | MySQL/PostgreSQL/Oracle Databaseなど |
アプリケーションサーバー | JBoss/Apache Tomcatなど |
●キャッシュ
- ブラウザ側で保存されるもの(一度表示したページ)とサーバ側で保存されるもの(一度リクエストした内容)がある。
- 有効期限を設定できる。
- 通信量の削減やサーバの負荷軽減になる。
- CSSやJavaScriptに変更を加えたが反映されない場合、ブラウザキャッシュが残っていることが原因の一つとして考えられる。
●Ajax(Asynchronous Javascript+XML)
非同期通信を行う場合は、サーバー側がJSON形式でデータを渡して、ブラウザのクライアント側で受け取ったJSONデータ
を元に、何か処理を行う形が主流になります。
同期通信に比べて通信量は少なくなる。
【Ajax】Ajax通信とは?概要と使い方 | Daily Up
Google Mapが非同期通信であるAjax通信を使った例で、マップをずらしてもリロードが走らず、必要なマップの箇所のみデータを持ってきてくれる。
●API
JSON
形式でデータが返されることが多い。- サーバーの機能を利用するためのインターフェース
- 自分で作り、公開することも可能
6章 Webのセキュリティと認証
●情報セキュリティの3要素(CIA)
機密性 | 許可されたものだけが利用できるように設計されていること | 盗聴 |
---|---|---|
完全性 | 改ざんや破壊が行われておらず、内容が正しい状態にあること | 改ざん |
可用性 | 許可されたものが、必要時に中断することなく、情報及び関連資産にアクセスできる状態を確保することと | なりすまし |
3大セキュリティリスク=盗聴,改ざん,なりすまし
●ブルートフォース攻撃
暗号解読や認証情報取得の手法。主にパスワードを不正に入手するために用いられる。
WEBシステムへの攻撃
●パスワードクラッキング
IDとパスワードによる認証を行う会員制Webサイトからユーザーのパスワードを抜き出そうとする攻撃
●DoS攻撃
大量のアクセスを行うことでサービス停止させる攻撃
●ディレクトリトラバーサル
公開されてないファイルをURLの階層で指定することでWEBサーバー自体のログインパスワードを入手する方法
第三者が盗聴などの手段を使いCookieの中身やセッションIDを取得しシステムを利用し個人情報を抜き取る
★XSS
(クロスサイトスクリプティング)
WEBアプリケーションの脆弱(ぜいじゃく)性を利用して悪意のあるコードを実行させる攻撃
★CSRF
(クロスサイトリクエストフォージェリ)
XSSと異なる点はWebページに特定のリクエストを行うスクリプトを仕込み、ユーザーになりすまして意図しない操作を行わせる攻撃方法。
★SQLインジェクション
アプリケーションの脆弱性を利用して、フォームなどに悪意のあるSQL
を記載することで、意図しないSQL
をアプリケーションに実行させる攻撃方法
それに対しWebアプリケーションは、ユーザーから送られたパラメータをそのままSQL
に記載して実行するのではなく、エスケープしてからSQL
を実行する様に対策する必要がある。
●暗号化
元のデータ(平文)を暗号化手段 (暗号化アルゴリズム)で第三者が読み取れないデータ(暗号文)にすること。
●脆弱性
セキュリティーホール
見えるべきでないものが第三者に見えてしまうような不具合
ゼロデイ攻撃
セキュリティーホールを利用した攻撃
★ファイヤーウォール(外部からの攻撃を守る)
ファイヤーウォール | インターネットと内部ネットワークの間に設置して、外部からの攻撃を防ぐ |
---|---|
IDS | ネットワークに対して不正なアクセスがないかをリアルタイムでチェックし、疑わしい内容があれば管理者へ通知を行う |
IPS | IDSの役割が不正なアクセスの検知や通知にとどまるのに対し、IPSはその名前のとおり不正なアクセスの侵入を遮断するなどのアクションを行う |
WAF | ウェブアプリケーションに対する通信内容をチェックして不正なアクセスを防ぐ。 |
ファイヤーウォールとIDS/IPSで対応できない攻撃を検知・遮断する | |
★★公開鍵暗号方式
重要!!
**送信者
が送信するデータを受信者の公開鍵
で暗号化して、受信者
は受信したデータを受信者の秘密鍵
で復号する**
SSL
は公開鍵暗号方式を活用した暗号化通信である
●SSHキー(秘密鍵・公開鍵)
ssh-keygen
コマンドで生成されるid_rsa
が秘密鍵、
id_rsa.pub
が公開鍵。
sshキー(秘密鍵・公開鍵)の作成と認証 流れ - Qiita
●デジタル署名
1.送信者(署名を送る人)が秘密鍵・公開鍵を作成して、メッセージのハッシュ値を秘密鍵で暗号化する 2.メッセージと署名を受信者(署名を受け取る人)に送る 3.受信者はメッセージをハッシュ化して、署名(←暗号化されているもの)を公開鍵で復号してハッシュ値を確認できる状態にする。
- 3のハッシュ値を比べて一致していれば、署名を送ってきたのはその人であることがわかる
公開鍵暗号方式とディジタル署名 | Points & Lines
★認証 VS 認可
認証 | 本人かどうかを確認すること |
---|---|
認可 | 認証後、ユーザーの権限にしたがって利用できるサービスの許可を行うこと |
初めてのHTMLフォーム
●送信ボタン
送信ボタンには2種類の書き方があり、input
タグのボタンとbutton
タグのボタンです。
button
とinput
の違いは、ラベルに追加できるものが違います。
input
はボタンのラベルにテキストしか設定できませんが、button
は画像などを設定できます。
データを送信するためのボタンにするには、type
属性にsubmit
を設定します。
●inputについて
- HTML: HyperText Markup Language | MDN
method
属性のGET
とPOST
の違いは、GET
はデータを取得する際に、フォームのデータをURL末尾のパラメータ
に追加する形
で送ります。POST
はデータを追加する際に、フォームのデータをリクエストの本文
に含む形
で送ります。
参考書籍
『プロになるためのWeb技術入門』――なぜ,あなたはWebシステムを開発できないのか:書籍案内|技術評論社
体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 | SBクリエイティブ