Bazen Linux terminali ile çalışırken, örneğin sorunları takip etmek için belirli komutların yürütülme zamanını bilmeniz gerekir. Bu amaç için time
adında bir yardımcı program vardır. Size Linux time
komutunun nasıl çalıştığını ve sözdiziminin ne olduğunu anlatacağız. Daha sonra mevcut seçeneklerin açıklamasına geçeceğiz. Ve sonunda bazı popüler kullanım senaryolarından bahsedeceğiz.
Yardımcı program kullanıcı tanımlı bir komutu çalıştırır ve ardından yürütme süresi hakkında bilgi görüntüler. Sözdizimi oldukça kullanışlıdır. Önce zaman
seçeneklerini, sonra çalıştırılacak komutu ve son olarak da komutun argümanlarını belirtmeniz gerekir:
$ time [options] command_to_execute [arguments]
Mevcut seçeneklerin listesini ele alalım:
o,
--output -
verileri terminaldeki standart çıktı yerine seçilen dosyaya kaydeder. Bu durumda, dosyadaki eski verilerin üzerine yazılacaktır.a
, --append
-
eskisinin üzerine yazmak yerine dosyaya yeni bilgi ekler. Bu seçenek yalnızca -o
ile birlikte kullanıldığında kullanışlıdır.f
, --format
-
belirli bir çıktı biçimi seçin. Biçimlendirme ile ilgili ayrıntılar bu makalenin bir sonraki bölümünde açıklanmaktadır.--profitably
- POSIX 1003.2 standardına uygun bir veri çıktı biçimi kullanın.v
, --verbose
-
programın yürütülmesi hakkında ayrıntılı bilgi çıktısı verir
.V
, --version
-
zaman
yardımcı programının sürümünün çıktısını verir.Bu liste yalnızca temel seçenekleri içerir. Komutu ile detaylı bilgi alabilirsiniz:
$ man time
Varsayılan olarak , time
bilgileri okumak için rahat olmayan bir biçimde çıkarabilir,
Bunun için şimdi tartışılacak olan çıktı biçimlendirme seçeneklerinin ayarlanması arzu edilir. Bunlardan toplamda üç tane vardır. Örnek olarak apt-get update
komutunu ele alalım.
Detaylı bilgi çıktısı almak için -v
seçeneği kullanılır:
$ sudo time -v apt-get update
POSIX 1003.2 uyumlu bir formatta veri çıktısı almak için -p
seçeneğine ihtiyaç vardır:
$ sudo time -p apt-get update
Biçimlendirme veri satırı tipik olarak kaynak belirticileri ve düz metin içerir. işareti, kendisini izleyen karakterin bir kaynak belirteci olarak ele alınması gerektiğini belirtir.
işareti, sınırlayıcı karakteri belirtmek için kullanılır. Kullanılabilir üç seçenek vardır: t
- sekme, n
- yeni satır, \
- ters eğik çizgi. Eğer işaretinden sonra başka bir karakter belirtirseniz, terminal bir soru işareti (
?
) gösterecektir, bu da bir giriş hatası olduğunu gösterir.
Biçim dizesindeki metnin geri kalanı tamamen çıktı alanına kopyalanır. Bu durumda, time
her zaman komutun yürütülmesiyle ilgili bilgilerden sonra yeni bir satırdan veri çıktısı vermeye başlar.
Mevcut kaynak belirticilerini ele alalım:
%
- gerçek %. yani bir yüzde işareti çıktısı almak için komutta %% belirtmelisiniz.C
- komut adı ve kullanılan argümanlar.D
- bölünmemiş veri alanının ortalama boyutu. Kilobayt olarak gösterilir.E
- normal saat formatında komutun yürütülmesinin gerçek zamanı. Saat:]<dakika:saniye
olarak görüntülenir.N
- işlemin yürütülmesi sırasında meydana gelen ana veya G/Ç hatalarının sayısı.I
- dosya sistemi erişimlerinin sayısı.K
- kod(metin
), başlatılmış veri (veri
) veyığın (yığın
) için kullanılan belleğin ortalama değeri. Kilobayt cinsinden gösterilir.M
- işlem yürütme sırasında yerleşik kümenin kilobayt cinsinden maksimum boyutu.O
- dosya sistemi çıkışlarının sayısı.P
- CPU (merkezi işlem birimi) yükünün yüzdesi.R
- küçük hata sayısı.S
- supervisor modunda(çekirdek
modu) CPU'nun sistem tarafından süreç adına kullanıldığı saniye cinsinden süre.U
- CPU'nun işlem tarafından doğrudankullanıcı
modunda kullanıldığı saniye cinsinden süre.W
- sürecin RAM'den kaç kez boşaltıldığı.Z
- sistem sayfası boyutu. Bu değer bir sabittir, ancak sistemler arasında değişir.c
- sürecin yürütülmesi sırasında istem dışı bağlam değiştirme sayısı.e
- normal saat formatında komut yürütmenin gerçek zamanı. Saniye cinsinden gösterilir.k
- sürece ulaşan sinyal sayısı.p
- sürecin paylaşılmamış yığınının kilobayt cinsinden ortalama boyutu.r
- alınan soket mesajlarının sayısı.s
- gönderilen soket mesajlarının sayısı.t
- süreç yerleşik kümesinin kilobayt cinsinden ortalama boyutu.w
- sürecin yürütülmesi sırasında gönüllü bağlam değiştirme sayısıx
- komut için dönüş kodu.Bunlar, zaman
için biçimlendirme seçilirken kullanılan tüm kaynak belirleyicileriydi. Şimdi komutun kullanım senaryolarına geçelim.
Oldukça yaygın olarak kullanılan üç temel örneğe bakalım: terminale çıktı, ayrı bir dosyaya çıktı ve biçimlendirmeli çıktı.
Örnek olarak, belirli bir süre için duraklatan sleep komutunu ele alacağız. Bu çok açık bir örnek olacaktır, çünkü duraklama süresi zaman
içinde komutun yürütülme süresi ile çakışacaktır:
$ time sleep 3
Zaman hemen üç sütuna yazılır. Her birinin üzerinden geçelim:
gerçek
- işlemin yürütülmesinin başlangıcından tamamlanmasına kadar geçen toplam süre.
user
- sürecinkullanıcı
modunda çalıştığı süre.
sys
- sürecin gözetmen modunda(çekirdek
modu) yer aldığı süre.
Bir sonraki faydalı senaryo, curl
yardımcı programı aracılığıyla bir web sayfası başlığının yüklenmesi için geçen sürenin çıktısını almaktır. Örnek olarak web sitemizi ele alalım:
$ time curl -I https://losst.ru
Komutu çalıştırmanın terminal penceresini farklı bir moda geçirdiği bir durumdan bahsetmeliyiz, örneğin /home/root-user/script.txt
dosyasını değiştirmek için nano editörünü çalıştırdığınızda:
$ time nano /home/root-user/scripts/main_script.txt
Düzenleyici bittikten sonra, dosya üzerinde çalıştığınız toplam süreyi göreceksiniz.
Artık bir Linux komutunun yürütme süresini nasıl göreceğinizi biliyorsunuz.
Zaman komutunun sonuçları hakkındaki bilgiler-o
seçeneği kullanılarak ayrı bir dosyaya kaydedilebilir. Bu durumda, bunlar terminal penceresinde görüntülenmeyecektir. tar
yardımcı programını kullanarak ~/data/data.tar.gz
arşivinin içeriğini çıkarma örneğini ele alalım. Yürütme zamanı hakkındaki bilgileri yeni bir ~/data/data_data_time.txt
dosyasına kaydedelim. Ayrıntılı bilgi almak için komuta-v seçeneğini
de ekleyeceğiz:
$ sudo time -v -o ~/data/data_time.txt tar -xvf ~/data/data.tar.gz -C ~/data
Dosya aşağıdaki içeriğe sahip olacaktır.
Eğer -o
seçeneğini kullanırsanız, çıktı dosyasındaki eski bilgilerin üzerine yeni bilgilerin yazılacağını unutmayın. Bu, yeni dosyalar oluştururken uygulanabilir, ancak günlük kaydı için uygun değildir. İsteğe bağlı -a seçeneğiyle, içeriğin üzerine yazmak yeni bilgi eklemekle değiştirilir:
$ sudo time -v -a -o ~/data/data_time.txt tar -xvf ~/data/data.tar.gz -C ~/data
Orijinal veri biçimlendirme seçeneği her durumda uygun değildir. Örnek olarak, bir arşivi ayıklamak için daha önce kullanılan komutu alacağız, ancak verileri bir dosyaya kaydetmeyeceğiz. Komutu çalıştırırken şunlarla ilgileniyoruz
%C belirt
ecidir. belirteç%P
. belirteç%e
.Rahat algılama için, her öğe n
ayırıcısı kullanılarak ayrı bir satırda görüntülenecektir. Aynı zamanda, hepsi anlaşılabilir bir şekilde imzalanacaktır.
İşte komutun son hali nasıl görünüyor:
sudo time -f "Command info:n%CnCPU usage: %PnExecution time: %e sec" tar -xvf ~/data/data.tar.gz -C ~/data
'
den sonraki karakterler hariç tüm metin terminalde tam olarak görüntülenir. Bu, işaretlemenin uygun bir yoludur