データアナリストとして働いていても何だかんだLinuxに触れる機会はそれなりにあるかと思います。
・Linuxサーバーに入ってsqlコマンドを叩く
・共有で使っているjupyterサーバーが落ちていたので、Linuxに入って起動し直す
・簡単なデータ加工をsedやawkでやる
・データの件数をwc -lで確認する
・perlを使う
・データ移行作業を行う
・Linuxサーバーでpythonファイルを実行する
など経験がある方は多いのではないでしょうか。
完全にデータ準備と作成はエンジニア、モデル作成はデータアナリストと分業している場合やSASやSPSS Modelerといったツールを使っている場合は関わることは少ない場合はあります。
しかし、理解することによって知識の幅が広がりますしエンジニアとの共通言語も増えるので、こんなこともビジネス上実現可能ではないかというアイディアも湧いてくると言うこともあるかも知れません。
いつでも参照できるようにlinuxコマンドでファイルやフォルダの操作、ファイルを別サーバーへ転送、日付変数の作成とループ処理など分析業務で今まで使ってきたコマンドを徐々にまとめておこうと思います。
今回はディスク空き容量と使用量を調べるコマンドであるdfコマンドとduコマンドをまとめます。
dockerでlinuxサーバー(Ubuntu)の準備
Linuxディストリビューションは色々種類がありますが、今回はUbuntuでコマンドを実行させ出力した結果をまとめていこうと思います。
CentOS、Redhat Linux、Oracle Linuxなどでもかまいません。大学や職場でよく使うディストリブーションでやってみてください。パッケージ管理(yumやapt-get)の差があるのでそこは適時読み替えていただくことになります。
まずはdockerのバージョンを確認しておきます。本記事ではmacのDocker Desktopを使っています。(Docker Desktopは社員数が多い企業の方だと有料である可能性があります。詳しくはDocker Desktop、無料で使える猶予期間が終了 従業員数250人以上、年間売り上げ1000万ドル以上の組織は有料にをご確認ください)
# dockerのバージョンを確認
docker -v
Docker version 20.10.17, build 100c701
先ほどアップデートしたので22年8月末時点の最新版だと思います。
どうせなら22年8月末現在、一番新しいUbuntu22.10を使う
DockerのUbuntuイメージは公式サイトのdockerhubから詳細を確認できます。
今回は22年8月末で提供されている一番新しいバージョンである22.10をpullして使いたいと思います。
# dockerイメージをダウンロード
docker pull ubuntu:22.10
22.10: Pulling from library/ubuntu 90b96841878b: Pull complete Digest: sha256:f1acf3443c577db1b1df3b47593b07895acab5ef582e5a661c2c1ade6f19e431 Status: Downloaded newer image for ubuntu:22.10 docker.io/library/ubuntu:22.10
# ダウンロードしたdockerイメージを確認
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu 22.10 15a38249db7a 4 weeks ago 70.4MB
# ubuntu22.10のコンテナ作成 (detachする)
docker run -it -d --name ubuntu22.10 ubuntu:22.10
db7670a96e897890d0c7a7a84ef728a0373965b2ef38338a153eb54b9aadbc27
# コンテナが起動しているか確認
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES db7670a96e89 ubuntu:22.10 "bash" 5 seconds ago Up 4 seconds ubuntu22.10
無事起動しているようです。
# コンテナの中に入る
docker exec -it ubuntu22.10 /bin/bash
# OSの情報を確認
root@db7670a96e89: cat /etc/os-release
PRETTY_NAME="Ubuntu Kinetic Kudu (development branch)" NAME="Ubuntu" VERSION_ID="22.10" VERSION="22.10 (Kinetic Kudu)" VERSION_CODENAME=kinetic ID=ubuntu ID_LIKE=debian HOME_URL="https://www.ubuntu.com/" SUPPORT_URL="https://help.ubuntu.com/" BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/" PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy" UBUNTU_CODENAME=kinetic LOGO=ubuntu-logo
Ubuntu22.10のようです。
容量を占有しているフォルダやファイルを特定する手順
長くLinuxサーバーを運用しているとログファイルやアプトプットデータが蓄積されてHDDやSSDの容量が満タンになりアプリケーションがエラーになることがあります。その場合どのファイルやフォルダが占有しているか調査し削除するといった作業が発生します。
自己流ですが、私は下記の手順で見つけています。
「 df -h 」 コマンドでディスクの空き容量を確認する
# ディクスの容量の確認
root@db7670a96e89: df -h
Filesystem Size Used Avail Use% Mounted on overlay 59G 1.7G 54G 3% / tmpfs 64M 0 64M 0% /dev shm 64M 0 64M 0% /dev/shm /dev/vda1 59G 1.7G 54G 3% /etc/hosts tmpfs 3.9G 0 3.9G 0% /proc/acpi tmpfs 3.9G 0 3.9G 0% /sys/firmware
「/」 ルート以下が3%の容量を使っていて97%空いているという意味になります。もしここがUse100%近くになっていたら不要ファイルを削除しないといけません。
「 du 」 コマンドでディスクの使用量を確認する
# ルートから深さ1まで(/以下のフォルダ)を探索しそれぞれのディレクトリのディスク使用量を出力する
du -h -d1 / | sort -h
du: cannot access '/proc/56/task/56/fd/4': No such file or directory du: cannot access '/proc/56/task/56/fdinfo/4': No such file or directory du: cannot access '/proc/56/fd/3': No such file or directory du: cannot access '/proc/56/fdinfo/3': No such file or directory 0 /dev 0 /proc 0 /sys 4.0K /boot 4.0K /home 4.0K /media 4.0K /mnt 4.0K /opt 4.0K /srv 4.0K /tmp 12K /root 20K /run 632K /etc 4.5M /var 72M /usr 77M /
/usrが一番容量を占有しているようです。
次は/usrディレクトリ以下を探索していきます。
# ルートから深さ1まで(/以下のフォルダ)を探索しそれぞれのディレクトリのディスク使用量を出力する
du -h -d1 /usr | sort -h
4.0K /usr/games 4.0K /usr/include 4.0K /usr/lib32 4.0K /usr/lib64 4.0K /usr/libx32 4.0K /usr/src 32K /usr/libexec 68K /usr/local 5.1M /usr/share 5.5M /usr/sbin 19M /usr/bin 43M /usr/lib 72M /usr
/usrディレクトリの中にある、/usr/libと/usr/binのディクス使用量が大きいようです。
まとめ
ディスクの空き容量と使用量をdfコマンドとduコマンドで確認してみました。
ディスク使用量がいっぱいにならないようにログローテションなどを活用したり定期的に不要ファイルは削除できる仕組みがあるといいですね。