Bir bash
komut dosyasında /proc/
dosyalardan çeşitli değerlere ihtiyacım var . Şimdiye kadar, dosyaları doğrudan bu şekilde grepping onlarca satır var:
grep -oP '^MemFree: *\K[0-9]+' /proc/meminfo
Bunu daha verimli hale getirmek için dosya içeriğini bir değişkende sakladım ve şöyle ifade ettim:
a=$(</proc/meminfo)
echo "$a" | grep -oP '^MemFree: *\K[0-9]+'
Dosyayı birkaç kez açmak yerine, bu dosyayı yalnızca bir kez açmalı ve daha hızlı olacağını düşündüğüm değişken içeriği elemeliyim - ama aslında daha yavaş:
bash 4.4.19 $ time for i in {1..1000};do grep ^MemFree /proc/meminfo;done >/dev/null
real 0m0.803s
user 0m0.619s
sys 0m0.232s
bash 4.4.19 $ a=$(</proc/meminfo)
bash 4.4.19 $ time for i in {1..1000};do echo "$a"|grep ^MemFree; done >/dev/null
real 0m1.182s
user 0m1.425s
sys 0m0.506s
Aynısı dash
ve için de geçerlidir zsh
. /proc/
Dosyaların özel durumunun bir nedeni olduğundan şüphelendim , ancak içeriğini /proc/meminfo
normal bir dosyaya kopyaladığımda ve sonuçların aynı olduğunu:
bash 4.4.19 $ cat </proc/meminfo >meminfo
bash 4.4.19 $ time for i in $(seq 1 1000);do grep ^MemFree meminfo; done >/dev/null
real 0m0.790s
user 0m0.608s
sys 0m0.227s
Boruyu kurtarmak için burada bir string kullanmak, onu biraz daha hızlı hale getirir, ancak yine de dosyalarda olduğu kadar hızlı değildir:
bash 4.4.19 $ time for i in $(seq 1 1000);do <<<"$a" grep ^MemFree; done >/dev/null
real 0m0.977s
user 0m0.758s
sys 0m0.268s
Neden bir dosyayı açmak değişkenden aynı içeriği okumaktan daha hızlı?
/proc/
gerekçe olarak dosyalar, ama içeriğini kopyalamak zaman /proc/meminfo
düzenli bir dosya ve kullanımına sonuçları aynı olduğunu:” Öyle değil özel /proc/
dosyalar, normal dosyaları okumak da daha hızlıdır!