トラッシュ機能付きのカスタムコマンドを実装する

LinuxLinuxBeginner
オンラインで実践に進む

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

このプロジェクトでは、削除されたファイルを永続的に削除する代わりにゴミ箱ディレクトリに移動するカスタム rm コマンドを作成する方法を学びます。重要なファイルの誤削除を防ぐために、Linux サーバーにこの機能を備えることは便利です。

👀 プレビュー

labex:project/ $ ll /tmp/trash
total 2.0K
-rw-r--r-- 1 labex labex 8 Oct 26 17:47 trash_file.md

🎯 タスク

このプロジェクトでは、以下を学びます。

  • 削除されたファイルを一時的に保存する /tmp/trash ディレクトリを設定する方法
  • 削除されたファイルをゴミ箱ディレクトリに移動するカスタム rm コマンドスクリプトを作成する方法
  • カスタム rm コマンドを使用するために PATH 環境変数を更新する方法
  • カスタム rm -f コマンドが期待通りに機能していることを確認するためのテスト方法

🏆 成果

このプロジェクトを完了すると、以下のことができるようになります。

  • ゴミ箱ディレクトリ付きのカスタム rm コマンドを実装することで、Linux サーバーを誤ったファイル削除から保護する
  • システムコマンドを変更してその既定の動作を変える方法を理解する
  • シェルスクリプトと環境変数管理の経験を得る

ゴミ箱ディレクトリを設定する

このステップでは、削除されたファイルを一時的に保存する /tmp/trash ディレクトリを設定する方法を学びます。

  1. ターミナルを開きます。
  2. /tmp/trash ディレクトリを作成し、適切なパーミッションを設定します。
sudo mkdir /tmp/trash
sudo chown root:root /tmp/trash
sudo chmod 1777 /tmp/trash

1777 のパーミッションは、ディレクトリに「粘着ビット」が有効になっていることを設定します。これにより、すべてのユーザーがディレクトリに書き込むことができますが、所有者のみがその中のファイルを削除することができます。

PATH 環境変数を更新する

このステップでは、既定のシステム rm コマンドの代わりにカスタム rm コマンドが使用されるように、PATH 環境変数を更新します。

  1. カスタム rm コマンドを格納する新しいディレクトリを作成します。
sudo mkdir -p /usr/local/custom/bin
  1. /etc/environment ファイルを編集します。
sudo vim /etc/environment
  1. /usr/local/custom/bin ディレクトリを PATH 変数の先頭に追加します。
PATH="/usr/local/custom/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"
  1. ファイルを保存してエディタを終了します。
  2. /etc/environment ファイルをソースして、現在のシェルの環境を更新します。
source /etc/environment
sudo chmod a+x /usr/local/custom/bin

これで、既定のシステム rm コマンドの代わりにカスタム rm コマンドが使用されるようになります。

カスタム rm コマンドを作成する

このステップでは、削除されたファイルを永続的に削除する代わりに /tmp/trash ディレクトリに移動するカスタム rm コマンドを作成します。

  1. カスタム rm コマンドスクリプトを作成します。
sudo vim /usr/local/custom/bin/rm

ファイルに以下の内容を追加します。

#!/bin/zsh

## このスクリプトは、ファイルまたはディレクトリを永続的に削除する代わりにゴミ箱ディレクトリに移動するために使用されます。
## -f オプションが使用された場合、対象はゴミ箱ディレクトリに移動されます。
## 対象が存在しない場合、エラーメッセージが表示されます。

TRASH_DIR="/tmp/trash"

if [[ "$1" == "-f" ]]; then
  shift
  for arg in "$@"; do
    ## 対象が存在するかどうかを確認する
    if [[ -e "$arg" ]]; then
      ## 対象をゴミ箱ディレクトリに移動する
      mv -f "$arg" "$TRASH_DIR"
    else
      echo "Error: $arg does not exist."
    fi
  done
else
  ## 元の rm コマンドを実行する
  /bin/rm "$@"
fi
  1. カスタム rm コマンドスクリプトに適切なパーミッションを設定します。
sudo chown root:root /usr/local/custom/bin/rm
sudo chmod 755 /usr/local/custom/bin/rm

カスタム rm コマンドをテストする

このステップでは、カスタム rm -f コマンドが期待通りに機能していることを確認するために、それをテストします。

  1. /home/labex/project ディレクトリにテスト用のファイルを作成します。
touch /home/labex/project/trash_file.md
  1. カスタム rm -f コマンドを使用してテスト用のファイルを削除します。
rm -f /home/labex/project/trash_file.md
  1. ファイルが /tmp/trash ディレクトリに移動したことを確認します。
ls -l /tmp/trash

出力に trash_file.md ファイルが表示されるはずです。

total 2.0K
-rw-r--r-- 1 labex labex 8 Oct 26 17:47 trash_file.md

おめでとうございます!削除されたファイルを永続的に削除する代わりに /tmp/trash ディレクトリに移動するカスタム rm コマンドを正常に実装しました。

✨ 解答を確認して練習

まとめ

おめでとうございます!このプロジェクトを完了しました。実験技術を向上させるために、LabEx でさらに多くの実験を行って練習してください。