FreeSpace スキル
Linux マシンのディスク容量を安全に解放できるようにユーザーを支援します。ユーザーは、何かが削除される前に、何がクリーンアップされ、どのくらいの容量が解放されるかを常に確認できなければなりません。
厳格なルール
- デフォルトはドライラン。 会話における最初の呼び出しは必ず
--dry-runでなければなりません。ドライランのレポートをユーザーに表示する前に、破壊的なクリーンアップを決して実行しないでください。 - ユーザーの明示的な要求なしに
--yesを使用しない。 ユーザーが明確に同意しない限り(「全部クリーンして」「全部やって」「確認をスキップして」など)、--yes/-yを渡さないでください。デフォルトでは--task <名前>によるタスクごとの確認を行ってください。 - サイズを表示し、それから尋ねる。 ドライランの後、ユーザーに要約を表示します。各タスク名、対象、および解放されるサイズを含めます。ユーザーが実際に実行するものを選択するのを待ちます。
- タスクごとの実行。 すべてを一度に実行するよりも、
--task <名前>を優先します。ユーザーが選択します。 - sudo について勝手に推測しない。 タスクに root 権限が必要な場合は、ユーザーに
sudoが必要であることを伝え、その特定のタスクを再実行させてください。 - 出力を隠すツールにパイプで渡さない。 ユーザーはスクリプトの出力を見ることができなければなりません。フォアグラウンドで実行してください。
ディストリビューションの検出
実行するスクリプトを見つけます:
. /etc/os-release 2>/dev/null
case "${ID:-unknown}:${ID_LIKE:-}" in
ubuntu*|debian*|*ubuntu*|*debian*) echo ubuntu.sh ;;
fedora*|rhel*|centos*|*fedora*|*rhel*) echo fedora.sh ;;
*) echo "サポート外: ID=$ID ID_LIKE=$ID_LIKE" >&2 ;;
esac
スクリプトはこの SKILL.md と同じ場所にあります:
ubuntu.sh— Ubuntu、Debian、Pop!_OS、Mint、Elementary (apt ベース)fedora.sh— Fedora、RHEL、CentOS、Rocky、AlmaLinux (dnf/yum ベース)
ディストリビューションがサポートされていない場合は、サポートされているディストリビューションをユーザーに伝え、停止してください。その場でスクリプトを適応させようとしないでください。
デフォルトのワークフロー
1. ディストリビューションを検出 → スクリプトを選択
2. 実行: bash <スクリプト> --dry-run
3. 出力を解析し、ユーザーにわかりやすい要約テーブルを表示:
- タスク名
- 対象パス
- 解放されるサイズ
- sudo が必要かどうか
4. 質問: 「実際に実行してほしいタスクはどれですか?」
5. ユーザーが選択した各タスクについて:
- ユーザーレベルの場合: bash <スクリプト> --task <名前>
- sudo が必要な場合: 正確なコマンドをユーザーに伝え、自分で実行させます
6. 選択されたすべてのタスクが完了したら、`df -h /` を実行し、解放された容量を報告します。
引数のチートシート
スクリプトは同じフラグを受け付けます:
| フラグ | 効果 |
|---|---|
--dry-run | プレビューのみ、変更は行いません。これを最初に使用してください。 |
--list | 利用可能なタスク名を一覧表示します |
--task <名前> | 1つのタスクのみ実行します |
--yes / -y | タスクごとの確認をスキップします。ユーザーが明示的に要求した場合以外は使用しないでください。 |
--help | スクリプトのヘルプを表示します |
利用可能なタスク名はスクリプト間で共通です: pip、npm、trash、docker_builder、journal、oldlogs、cuda_repos、cuda_old、crash。ディストリビューション固有のタスク: apt (Ubuntu/Debian)、dnf (Fedora/RHEL)、abrt (Fedora/RHEL)。
bash <スクリプト> --list を実行して、ホストの正式なリストを取得してください。
sudo の処理
ユーザーレベルのタスク (pip、npm、trash、docker_builder) はユーザーとして実行されます。
システムレベルのタスクには sudo が必要です。許可なくユーザーに代わって sudo を呼び出さないでください。 代わりに、次のように伝えてください:
タスク
journalには sudo が必要です。これを自分で実行してください:sudo bash <パス>/<スクリプト> --task journal
ユーザーがすでに sudo bash セッション内におり、sudo が必要なすべてのタスクを実行するよう明示的に依頼した場合は、各タスクに対して --task を指定して連鎖実行できます。
結果の報告
クリーンアップ実行後、毎回ユーザーに以下を表示してください:
- 正常に実行されたタスク
- スキップされたタスクとその理由
- 前後の
df -h /の結果。実際に解放された容量がわかります。
問題が発生した場合
- ドライランでタスクの
サイズ: 0が報告された場合、そのことを伝えますが、それについてしつこく尋ねないでください。 duがパスでエラーになった場合(許可がない)、そのことをユーザーに伝えてください。通常は sudo が必要であることを意味します。- タスクが実行中に失敗した場合、バッチを停止し、どのタスクが失敗したかを報告してから続行します。
やってはいけないこと
- ユーザーの状況に基づいて、
rm -rf /something/elseを追加するためにスクリプトを編集しないでください。スクリプトがユーザーのユースケースをカバーしていない場合は、そのことを伝え、ユーザーに判断させてください。 - スクリプトで定義されたターゲット以外のディレクトリのクリーンアップを実行しないでください。
- より積極的なクリーンアップ(
/tmp、snap キャッシュ、カーネルなどの削除)を、ユーザーから明示的に要求されない限り提案しないでください。また、その場合でも、より安全な代替手段(カーネルにはapt autoremove --purgeなど)を指し示すことを優先してください。 - スクリプトの出力を抑制しないでください。可視性がすべてです。