これは機械翻訳されたテキストであり、誤りを含む可能性があります!
もし同じ作業を3回繰り返しているのなら、それを自動化すべき時です。スクリプト作成とは、退屈な作業をマシンに任せ、より速く、かつミスなく実行させるためのものです。
自動化する理由
IT 運用におけるいくつかのタスクは頻繁に行われます。
- サーバーの更新
- ユーザーの作成
- バックアップの取得
- 更新後のサービスの再起動
- サービスが実行されているかの確認
これらのタスクを手動で行うたびに時間がかかり、手順を忘れてしまうこともあります。スクリプトは毎回同じことを行い、文句を言いません。
Bash: Linuxでのスクリプティング
Bash は、ほとんどの Linux ディストリビューションにおけるシェル (ターミナル) であり、スクリプトの実行も可能です。Bash スクリプトは、コマンドが順番に実行される単純なテキストファイルです。
最初のスクリプト
oppdater.sh という名前のファイルを作成してください:
#!/bin/bash
# パッケージリストを更新し、アップデートをインストールします
echo "システムを更新しています..."
sudo apt update
sudo apt upgrade -y
echo "完了しました!"
ファイルを実行可能にして実行します:
chmod +x oppdater.sh
./oppdater.sh
# スクリプトを実行可能にする
# スクリプトを実行する
#!/bin/bash
最初の行は shebang と呼ばれます。これは、ファイルがBashで実行されるようにオペレーティングシステムに伝えます。これがないと、システムはどのプログラムがスクリプトを解釈すべきかわかりません。
変数と入力
プログラムでは、データを保存するために「変数」を使用します。変数は、名前が付けられた記憶領域であり、プログラムの実行中に値を格納できます。例えば、ユーザーからの入力を保存したり、計算結果を一時的に保持したりするために使用します。
ユーザーからの入力は、input()関数を使用して取得できます。この関数は、ユーザーにプロンプトを表示し、ユーザーが入力したテキストを文字列として返します。入力された文字列は、必要に応じて数値やその他のデータ型に変換する必要があります。
例えば、次のコードはユーザーに名前を入力するように求め、その名前を変数nameに保存します。
name = input("名前を入力してください: ")
print("こんにちは、" + name + "!")
この例では、input()関数が “名前を入力してください: ” というプロンプトを表示し、ユーザーが入力したテキストを変数nameに代入します。その後、print()関数を使用して、”こんにちは、” と入力された名前を連結した文字列を出力します。
#!/bin/bash
BRUKERNAVN=$1
if [ -z "$BRUKERNAVN" ]; then
echo "使用法: ./lag_bruker.sh <ユーザー名>"
exit 1
fi
sudo adduser "$BRUKERNAVN"
sudo usermod -aG sudo "$BRUKERNAVN"
echo "ユーザー $BRUKERNAVN がsudo権限付きで作成されました。"
このスクリプトは、ユーザー名を引数として受け取ります($1 は最初の引数です)。 ./lag_bruker.sh ola を実行すると、ユーザー ola を作成し、sudo アクセス権を付与します。
有用な Bash の概念
| 概念 | 例 | 何をするか |
|---|---|---|
| 変数 | NAVN="Ola" | 値を保存する |
| 引数 | $1, $2 | コマンドラインからの入力 |
| If チェック | if [ -f "fil.txt" ]; then | ファイルが存在するか確認する |
| For ループ | for f in *.log; do | マッチする各ファイルに対して何かを行う |
| パイプ | cat logg.txt \| grep "ERROR" | あるコマンドの出力を別のコマンドに送る |
PowerShell: Windowsでのスクリプティング
PowerShell は Windows における Bash への回答ですが、よりオブジェクト指向です。テキストだけでなくオブジェクトを扱うため、Windows システムの管理において強力です。
例:ディスクスペースの確認
ディスクスペースが不足しているかどうかを確認するには、次のコマンドを使用できます。
df -h
このコマンドは、ファイルシステムごとのディスク使用量に関する情報を人間が読みやすい形式で表示します。出力には、合計サイズ、使用済みスペース、利用可能なスペース、使用率、およびマウントポイントが含まれます。
特定のディレクトリのディスク使用量を確認するには、次のコマンドを使用できます。
du -sh <ディレクトリ名>
<ディレクトリ名>を、確認したいディレクトリのパスに置き換えてください。このコマンドは、指定されたディレクトリの合計サイズを人間が読みやすい形式で表示します。
これらのコマンドを使用することで、ディスクスペースの使用状況を監視し、必要に応じてファイルを削除または移動して、ディスクスペースを解放できます。
# 空きディスク容量を確認
Get-PSDrive -PSProvider FileSystem | Select-Object Name,
@{Name="使用済み (GB)"; Expression={[math]::Round($_.Used / 1GB, 2)}},
@{Name="空き容量 (GB)"; Expression={[math]::Round($_.Free / 1GB, 2)}}
例:Winget を使用したソフトウェアのインストール
Winget は、Windows パッケージマネージャーであり、コマンドラインからソフトウェアをインストール、更新、および管理するための方法を提供します。これは、Microsoft Store からのアプリのインストールに似ていますが、コマンドラインインターフェイスを使用します。
インストール
Winget は、Windows 10 (1709 以降) および Windows 11 にプリインストールされています。インストールされているかどうかを確認するには、次のコマンドを実行します。
winget --version
バージョン番号が表示された場合は、Winget がインストールされています。そうでない場合は、Microsoft Store からインストールできます。
ソフトウェアの検索
Winget を使用してソフトウェアを検索するには、次のコマンドを使用します。
winget search <ソフトウェア名>
たとえば、「Visual Studio Code」を検索するには、次のコマンドを実行します。
winget search Visual Studio Code
これにより、一致するソフトウェアのリストが表示されます。
ソフトウェアのインストール
Winget を使用してソフトウェアをインストールするには、次のコマンドを使用します。
winget install <ソフトウェアID>
ソフトウェア ID は、winget search コマンドで検索したソフトウェアのリストに表示されます。たとえば、「Visual Studio Code」をインストールするには、次のコマンドを実行します。
winget install Microsoft.VisualStudioCode
Winget は、ソフトウェアをダウンロードしてインストールします。インストールが完了すると、確認メッセージが表示されます。
# 複数のプログラムを一度にインストールする
winget install Mozilla.Firefox
winget install Microsoft.VisualStudioCode
winget install Git.Git
winget install Python.Python.3.12
これは、すべてを手動でダウンロードしてインストールするよりもはるかに高速です。リストをスクリプトに保存し、新しいマシンをセットアップするたびに実行できます。
課題 1 - アップデートスクリプトの作成
Bashスクリプトを作成してください。
- パッケージリストを更新します。
- 利用可能なすべてのアップデートをインストールします。
- Nginx(または実行中の別のサービス)を再起動します。
- 完了時にメッセージを出力します。
VMのいずれかで実行し、正常に機能することを確認してください。
課題 2 - マシンセットアップの自動化
新しいPCに必要なすべてのプログラムに対して、PowerShellスクリプト(.ps1)または単純なwinget installコマンドのリストを作成してください。以下の点を考慮してください。
- 常にインストールするプログラムは何ですか?
- スクリプトでいくつかの設定も構成できますか?
次回マシンをセットアップする際は、手動でインストールするのに1時間かかる代わりに、スクリプトを実行するだけです。
要約
- 何かを2回以上行う場合は、自動化を検討してください
- Bash (Linux) と PowerShell (Windows) は、スクリプト作成によく使われるツールです
- Bashスクリプトは、コマンドが順番に実行されるテキストファイルです
- PowerShellはオブジェクトを扱い、Windows管理に強力です
- 変数、引数、ifチェック、ループは、最も重要な構成要素です