俺管理のLINUXサーバーの容量削減手順だが、
LINUXコマンド集を兼ねた、備忘録。
(前は調べる/考える手間を惜しむようなコマンドでも、今は、AI-LLM(今回はCopilot)で 少々複雑な処理でも すぐ適切なコマンドやその組み合わせを教えてくれるんで。)
コマンド集としてのサマリ
- 文字列を置換[sed](sedはファイルinputが基本だが、パイプ("|")inputでコピペ文字列を変換):
echo 'C:\Users\YourName\log\TeraTerm' | sed 's/\\/\//g'
- コマンド引数に別のコマンド結果を使う["$(……)"]:
cd "$(echo 'C:\Users\YourName\log\TeraTerm' | sed 's/\\/\//g')"
- コマンド結果を数値順で並べる [sort]:
du -mcs ./* | sort -nr
- 結果から重複を削除し一覧(ついでに数える)[uniq]:
・・・| sort | uniq -c
- 直下のディレクトリだけ表示:
ls -d */
- 直下のファイルだけ表示:
find . -maxdepth 1 -type f
- 1文字ワイルドカードを活用し,マッチ数を数え間引き[?]:
rm 2022???? -rf
、ls 2023??30 -d
&ls 2023??31 -d
&rm 2023??30 -rf
以降は、容量削減作業としての解説。
BusyBoxでcdするためにパスの\を/に変換する
まず、以前のLINUX作業ログを、BusyBox(Windows上でLinuxコマンド(今回はfile ./ -name 容量
―WinのFile Explorerの検索では検出できんかったんで-法則も分らん)を手軽に使う.exe)で探した。
その為に、File Explorerからpathをコピーし、cdしたが、\を/に変換する必要があった。
変換した結果を直接cdに使うのも、以下のコマンドのポイント。
cd "$(echo 'C:\Users\YourName\log\TeraTerm' | sed 's/\\/\//g')"
du結果の上位だけ表示(sort)
容量多いディレクトリを見つける俺おなじみのdu -mcs ./*
。ただファイルが多いディレクトリ下だと困る。そこで sort を組み合わせる。
du -mcs ./* | sort -nr | head
ログファイル名中の日時部を抜き、ファイル名共通部を一覧
例:以下のようなファイルが多数ある。
class]$ find . -maxdepth 1 -type f ./OneIO_20240405-161601.357672.log ./OneIO_20240405-161901.123456.log ./AnotherIO_20240405-161601.333333.log ./AnotherIO_20240405-162001.321012.log ./SomeIO_20240405-162001.321012.log batch]$ find . -maxdepth 1 -type f ./Spec.20240407-050801.log ./Spec.20240407-052001.log ./Emp.20240407-050501.log ./Emp.20240407-053501.log ./grep.20240407-122.log
上記のように 似たような名前が多数あって、それぞれの共通部分でカウントしたい。*1
class]$ find . -maxdepth 1 -type f | sed -r 's/^\.\/(.*)_[0-9]{8}\-[0-9]{6}\.[0-9]{6}\.log$/\1/' | sort | uniq -c batch]$ find . -maxdepth 1 -type f | sed -r 's/^\.\/(.*)\.[0-9]{8}\-[0-9]{6}|[0-9]{3}\.log$/\1/' | sort | uniq -c
日付毎ディレクトリを削除(年ごとに数えたり、特定フォーマットだけ削除したり)
まずYYMMDDのフォルダ名を年ごとに数えた。以下全て同じ結果(ディレクトリは上記ファイルと違って、短く書ける)。
find . -maxdepth 1 -type d -print | cut -c 3-6 | sort | uniq -c find . -maxdepth 1 -type d | cut -c 3-6 | sort | uniq -c ls -d */ | cut -c 1-4 | sort | uniq -c
あとは、次のように、いくらかのパターンで減らした。(以下前半は隔年で削除(後ろに特別に文字を入れたディレクトリ名は残す)。後半は、毎月30&31日を保管してたが一方を削除)
$ rm 2016???? -rf $ rm 2018???? -rf $ rm 2020???? -rf $ rm 2022???? -rf $ ls 2023??31 -d 20230131 20230331 20230531 20230731 20230831 20231031 20231231 $ ls 2023??30 -d 20230130 20230330 20230430 20230530 20230630 20230730 20230830 20230930 20231030 20231130 20231230 $ rm 2023??30 -rf