TryHackMeで勉強したことをまとめる part2

https://tryhackme.com/

タイトルの通りTryHackMeで勉強した内容をまとめた記事です。

英語で勉強したものを日本語でまとめているので、ところどころ日本語がおかしいところもあるかもしれませんがお許しください。
間違っている部分があれば教えていただけるとありがたいです。

# Linux Fundamentals Part1
### Task6
`find`コマンドでファイル全体から特定のファイルを探すことができる。
`*`で特定の拡張子のファイルを探すこともできる。

### Task7
`&`を用いることでコマンドをバックグラウンドで実行してくれる。
`&&`で複数のコマンドを実行できる。（後ろのコマンドが実行されるのは前のコマンドが成功したときのみ）
`>`でコマンドの実行結果をリダイレクトできる。（上書き）
`>>`でコマンドの実行結果をリダイレクトできる。（追記）

# Linux Fundamentals Part2
### Task1
SSH(Secure Shell)とは、情報を暗号化してリモートマシンを遠隔操作するための仕組みである。
SSHを使用すると、遠隔地から別のデバイスでコマンドを実行することができ、デバイス間で送信されるデータはインターネットなどのネットワーク上で送信されるときに暗号化される。

コマンドは`ssh username@IPaddress`で接続できる。

### Task3
`ls`コマンドは`-a`オプションを付けることで隠しファイルも表示させることができる。

### Task4
`touch name`でnameというファイルを作成できる。
`rm`コマンドでフォルダを削除するときには`-R`オプションを指定する。
`mv`コマンドを用いることでファイルの名前を変えることができる。

### Task5
`su`コマンドでユーザーを変更できる。
`-l`オプションを指定することで自分の環境に近い環境にすることができる。オプションを指定しないと、新しいセッションは元のユーザーの`home`に作られるが、オプションを指定することでパスが通しやすくなる。

### Task6
`/etc`はオペレーティングシステムで使用されるシステムファイルを格納するための場所である。
`sudoers`にはルートユーザーとして`sudo`やその他のコマンドを使用できるユーザーやグループのリストが含まれている。

`/var`にはシステムで実行中のサービスやアプリケーションから頻繁にアクセスされたり書き込まれたりするデータが格納される。
例えば実行中のサービスやアプリケーションのログ・ファイルは`/var/log`に書き込まれる。

`/root`はルートユーザーのホームディレクトリである。

`/tmp`はデータを一時的に保管する場所である。
誰でも書き込むことができるため活用することができる。

# Linux Fundamentals Part3
### Task4
`wget`を用いることでファイルをダウンロードすることができる。

`scp`コマンドを用いることで、SSHを使ってコンピュータ間でファイルを転送することができる。
コマンドは`scp SOURCE DESTINATION`の順番。

pythonにはHTTPサーバーと呼ばれるモジュールがあり、これを用いることで自分のコンピュータをwebサーバーにすることができる。アップロードされたファイルは`wget`や`curl`を用いることで他のコンピュータからダウンロードすることができる。
`python3 -m  http.server`でモジュールを使うことができる。
より良いモジュールにupdogがある。

### Task5
プロセスとは、マシン上で動作しているプログラムのこと。
プロセスはカーネルによって管理され、各プロセスにはPIDと呼ばれるIDが割り当てられる。
PIDはプロセスの開始順で増加する。

`ps`コマンドを使うと、ユーザーのセッションで実行中のプロセスのリストと、ステータスコード、実行中のセッション、CPU の使用時間、実行中のプログラムやコマンドの名前などの追加情報を表示することができる。
`ps aux`で他のユーザーが実行しているプロセスや、セッションから実行されていないプロセス (システムプロセス) を見ることができる。
`top`は、一度だけ表示するのではなく、システム上で実行されているプロセスに関するリアルタイムの統計情報を見ることができる。

`kill PID`でPIDのプロセスを終了させることができる。

オペレーティング・システム（OS）は、名前空間を利用して、最終的にコンピュータで利用できる資源（CPU、RAM、優先順位など）をプロセスに分割している。
名前空間は、プロセスを別のプロセスから分離する方法であり、同じ名前空間にいるものだけがお互いを見ることができるため、セキュリティに最適。
PIDが0のプロセスは、システムが起動したときに開始されるプロセスである。このプロセスは、Ubuntuにおけるシステムのinit、例えばsystemdのようなもので、ユーザーのプロセスを管理する方法を提供するために使用され、OSとユーザーの間に位置するもの。
システムが起動し、それが初期化されると、systemdは最初に起動されるプロセスの1つになる。起動したいプログラムやソフトウェアは、systemd の子プロセスとして起動する。つまり、systemd によって制御されるが、私たちが識別しやすくするために、（systemd のリソースを共有しながら）独自のプロセスとして実行される。

`systemctl`はsystemdプロセス/デーモンと対話することを可能にする。
コマンドは`systemctl [option] [service]`
オプションは`Start` `Stop` `Enable` `Disable`が存在する。

`ctrl + z`でプロセスをバックグラウンドに送ることができる。

`fg`コマンドでバックグラウンドで実行されているプロセスをフォアグラウンドに持ってくることができる。

### Task6
crontabは、cronプロセスによって認識され、各行を順番に実行する書式を持つ特別なファイル。
crontabは次の6つの値を用いる。
　MIN：何分に実行するか
　HOUR：何時に実行するか
　DOM：毎月何日に実行するのか
　MON：毎年何日に実行するのか
　DOW：毎週何曜日に実行するのか
　CMD：実行されるコマンド
指定したくない場合はアスタリスクを置く。
コマンドは`0 *12 * * * cp -R /home/cmnatic/Documents /var/backups/`の形。これは12時間後にファイルのコピーをとる。
`crontab -e`で編集ができる。

### Task7
aptはパッケージ管理ソフトである。aptには、ソフトウェアのパッケージとソースを管理し、同時にソフトウェアをインストールまたは削除することができるツールが含まれている。

ソフトウェアを追加する際、ダウンロードするものの安全性は、GPG（Gnu Privacy Guard）キーと呼ばれるものを使用することで保証されている。もしキーがシステムが信頼するものと開発者が使用したものとが一致しない場合、そのソフトウェアはダウンロードされない。
なのでダウンロードするときにはGPG鍵をダウンロードし信頼させる必要がある。
その後、リポジトリを`etc/apt/sources.list.d`に追加する。
追加するコミュニティやサードパーティのリポジトリごとに、別のファイルを用意するのがいい。

### Task8
オペレーティングシステム（OS）は、「ローテーション」と呼ばれるプロセスで、ログを自動的に管理するのが上手。