Ich habe ein Skript erstellt, das den Befehl du mit Ruby umschließt.
Erstellen Sie den Namen "expand.rb", fügen Sie das folgende Skript ein und führen Sie es wie folgt aus.
# ruby expand.rb (Der Pfad, den Sie finden möchten)
$ ruby expand_du.rb /var/lib/
7GB /var/lib/
3GB /var/lib/jenkins
2GB /var/lib/docker
1GB /var/lib/mysql
...
4KB /var/lib/mysql-files
du_-k_--max-depth_1_var_lib__20200516231438.Im Protokoll gespeichert
Skripte (github)
#Wie benutzt man
# ruby expand_du.rb Pfad
#Beispiel: Rubin expandieren_du.rb ~
#
#bewirken
# -Führen Sie den Befehl du für den Pfad aus
# -Entladen Sie das Ausführungsergebnis in die Standardausgabe und -datei
#
#Streit
# -Pfad:Zielpfad zum Ausführen des Befehls du
require 'rbconfig'
def main(target_path)
return puts "ArgumentError:Bitte geben Sie den Pfad in das Argument ein" if target_path.nil?
max_depth_option_str = if os == :macosx
"-d"
else
"--max-depth"
end
exec_command = "du -k #{max_depth_option_str} 1 #{target_path}"
du_result_str = `#{exec_command}`
return if du_result_str.empty?
output_disksizes(du_result_str, exec_command)
end
def output_disksizes(du_result_str, exec_command)
disk_usages = du_result_str
.split("\n")
.map{|du_result| DiskUsage.new(du_result)}
.sort{|x, y| x.size <=> y.size}.reverse
output_filename = "#{exec_command.gsub(/( |\/){1,}/, "_")}_#{Time.new.strftime("%Y%m%d%H%M%S")}.log"
output_file = File.open(output_filename, "w")
disk_usages.each do |disk_usage|
puts disk_usage.to_s
output_file.puts(disk_usage.to_s)
end
output_file.close
puts "#{output_filename}Gespeichert in"
end
class DiskUsage
attr_reader :size, :path
def initialize(du_result_line)
du_result_params = du_result_line.split(" ").map(&:strip)
@size = du_result_params[0].to_i
@humanreadable_size, @humanreadable_unit = calc_humanreadable_size
@path = du_result_params[1]
end
def to_s
#HINWEIS Geben Sie vorerst 5 Stellen an. Bei Bedarf erhöhen
"#{sprintf("%5d" % @humanreadable_size)}#{@humanreadable_unit} #{@path}"
end
def humanreadable_size_with_unit
"#{@humanreadable_size}#{@humanreadable_unit}"
end
private
def calc_humanreadable_size
return [@size, "KB"] if mb_size < 1
return [mb_size, "MB"] if gb_size < 1
return [gb_size, "GB"] if tb_size < 1
[tb_size, "TB"]
end
def kb_size
@size
end
def mb_size
kb_size.fdiv(1024).round(1)
end
def gb_size
mb_size.fdiv(1024).round(1)
end
def tb_size
gb_size.fdiv(1024).round(1)
end
end
def os
case RbConfig::CONFIG['host_os']
when /mswin|msys|mingw|cygwin|bccwin|wince|emc/
:windows
when /darwin|mac os/
:macosx
when /linux/
:linux
when /solaris|bsd/
:unix
else
:unknown
end
end
Wenn der Mietserver oder Mac voll ist, möchten Sie wissen, welcher Ordner die Ursache ist.
Wenn Sie also ein Mac sind, können Sie den Status der Speichernutzung anzeigen, und selbst wenn Sie ein Mietserver sind, können Sie sehen, wie viel Sie mit dem Befehl df verwenden. Ich kann jedoch nur das Ganze verstehen und weiß nicht, welcher Ordner die Ursache ist.
Daher kann der Befehl du von denjenigen verwendet werden, die das Terminal verwenden können (der Befehl ls ist ebenfalls ein Kandidat, aber der Befehl ls kennt die Größe der Datei direkt darunter, weiß jedoch nicht, wie groß der Ordner ist).
Dieser du-Befehl ist jedoch etwas unbefriedigend, wahrscheinlich weil es sich um einen UNIX-Befehl handelt.
Um das Lesen zu vereinfachen, verwende ich den Befehl sort mit der Option -h, um die Größen in absteigender Reihenfolge abzurufen. Dann liegen 5 KB über 4 GB. Ich kann nicht helfen, weil ich nur die Zahlen betrachte.
Wenn Sie du verwenden, wird das Ergebnis an die Standardausgabe ausgegeben, aber nachdem Sie es ausgegeben haben, möchten Sie das Ergebnis schließlich aufzeichnen. Sie können die Datei von Anfang an ausgeben, es ist jedoch mühsam, die Datei und dann cat auszugeben. Wenn Sie einen Befehl entwickeln, wird dieser sowohl in die Datei als auch in die Standardausgabe ausgegeben. Wenn Sie jedoch den Befehl du benötigen, haben Sie es normalerweise eilig, daher wollte ich es einfach machen.
Das Skript, das das obige Problem gelöst hat, ist das erste veröffentlichte Skript.
Die Funktionen sind wie folgt.
――Es wird nach Berücksichtigung des Geräts sortiert
Ich habe es komplett für mich selbst gemacht, aber wenn jemand Probleme mit der gleichen Sache hat, benutze es bitte.
Recommended Posts