Parantez içi komutlar ve & işareti nedir?

Başlatan kayrak, 01 Ağustos 2017 - 19:37:24

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

kayrak

Selamlar arkadaslar!

Iki komut hakkinda aciklamalariniza ihtiyacim var.

1. Komut: "(komut &)"

2. Komut: "komut & exit"

Bu iki komut ile terminalde calistirilan komutlar, terminal kapandiktan sonra bile arka planda calismaya (aktiv oluyorlar) devam ediyorlar.
Bunun bana neden dolayi/ ne sekilde oldugunu biraz detayli bir sekilde aciklayabilirmisiniz?

Simdiden cok tesekurler!

siberoloji

#1
bir sunucuya ssh ile bağlandınız ve komut satırındasınız.
Elinizde 1 tane komut satırı var. Bu komut satırında örneğin nano editor ile bir dosyayı düzeltmek istediniz.
nano belge adı
komutu verdiğinizde editöre girersiniz ancak komut satırı artık yoktur.
Düzenlemek istediğiniz belgeye, örneğin bilgisayarın IP adresini yazmanız gerekiyor. Nasıl öğreneceksiniz?
Komut satırına dönüp ifconfig komutuyla bakmanız gerek. Nano editorde belgeyi kaydet kapat, çık, IP ye bak, tekrar geri dön nano editörü aç.
Bunun yerine nano editorde iken Ctrl+z tuşlarıyla nano editörü hiç kapatmadan arka plana gönderebilirsiniz.
Nano editör arka plana gider gitmez komut satırına girmiş olursunuz ve işlemleri yaparsınız. Şimdi editöre geri dönmelisiniz.
fg komutu ile nano editorün arka plana gönderildiğinde ekranda gösterilen işlem numarasını girerseniz editöre geri dönersiniz. Örneğin;
fg 1
Peki şimdi sizin sorunuza bu bilgiler ışığında bakalım.
cp komutu ile bir kopyalama başlatacaksınız ve tahminen iki saat sürecek bir işlem.
Bu işlem bitene kadar komut satırını kullanamayacak mısınız?
cp * /dev/sdb &
komutu işlemi arka planda başlatır. Ve komut satırını size bırakır.
komut & exit
açıklamasını da başka bir arkadaşıma bırakıyorum.

Faydalı Bağlantı

edge35

[mention=629480]@siberoloji[/mention] açıklama için teşekkürler, elinize sağlık. Bu bilgilerden yola çıkınca ikinci komut da "işlemi arkaplanda yap, bitince çık" diyor gibi geldi, tabi tahmin :)

Not: Başlangıçta böyle düşünüp mesajı göndermeden deneme yapmaya başladım, galiba komutu başlatıyor, komut çalışırken terminal ekranını kapatıyor, ama komut çalışmaya devam ediyor. Eğer "exit" ifadesi olmaz ise terminal ekranını kapatınca işlem iptal olmuştu. İşin kötüsü kopyalama yaptım ve denedim, şimdi kopyalama işlemini durduramıyorum  ;D ;D :P :P


Sorunlarımı çözerken her şeyiyle öğrenmeye çalışıyorum. Bana balık verenden Allah razı olsun, ama bana balık tutmayı öğretenden Allah daha çok razı olsun :)

alorak

Alıntı yapılan: edge35 - 01 Ağustos 2017 - 23:13:13
[mention=629480]@siberoloji[/mention] açıklama için teşekkürler, elinize sağlık. Bu bilgilerden yola çıkınca ikinci komut da "işlemi arkaplanda yap, bitince çık" diyor gibi geldi, tabi tahmin :)

Not: Başlangıçta böyle düşünüp mesajı göndermeden deneme yapmaya başladım, galiba komutu başlatıyor, komut çalışırken terminal ekranını kapatıyor, ama komut çalışmaya devam ediyor. Eğer "exit" ifadesi olmaz ise terminal ekranını kapatınca işlem iptal olmuştu. İşin kötüsü kopyalama yaptım ve denedim, şimdi kopyalama işlemini durduramıyorum  ;D ;D :P :P

Doğru deneme yapmışsınız.

ps aux | grep komut

ile çalışan işlemin pid'sini öğrenin. Bu id'yi

kill -9 PID

şeklinde öldürün. Böylelikle işleminiz kapanacaktır.
özgürlük için

edge35

#4
[mention=629502]@alorak[/mention] teşekkür ederim


Sorunlarımı çözerken her şeyiyle öğrenmeye çalışıyorum. Bana balık verenden Allah razı olsun, ama bana balık tutmayı öğretenden Allah daha çok razı olsun :)

kayrak

Alıntı yapılan: siberoloji - 01 Ağustos 2017 - 22:48:41
bir sunucuya ssh ile bağlandınız ve komut satırındasınız.
Elinizde 1 tane komut satırı var. Bu komut satırında örneğin nano editor ile bir dosyayı düzeltmek istediniz.
nano belge adı
komutu verdiğinizde editöre girersiniz ancak komut satırı artık yoktur.
Düzenlemek istediğiniz belgeye, örneğin bilgisayarın IP adresini yazmanız gerekiyor. Nasıl öğreneceksiniz?
Komut satırına dönüp ifconfig komutuyla bakmanız gerek. Nano editorde belgeyi kaydet kapat, çık, IP ye bak, tekrar geri dön nano editörü aç.
Bunun yerine nano editorde iken Ctrl+z tuşlarıyla nano editörü hiç kapatmadan arka plana gönderebilirsiniz.
Nano editör arka plana gider gitmez komut satırına girmiş olursunuz ve işlemleri yaparsınız. Şimdi editöre geri dönmelisiniz.
fg komutu ile nano editorün arka plana gönderildiğinde ekranda gösterilen işlem numarasını girerseniz editöre geri dönersiniz. Örneğin;
fg 1
Peki şimdi sizin sorunuza bu bilgiler ışığında bakalım.
cp komutu ile bir kopyalama başlatacaksınız ve tahminen iki saat sürecek bir işlem.
Bu işlem bitene kadar komut satırını kullanamayacak mısınız?
cp * /dev/sdb &
komutu işlemi arka planda başlatır. Ve komut satırını size bırakır.
komut & exit
açıklamasını da başka bir arkadaşıma bırakıyorum.

Faydalı Bağlantı

Hocam parentezleri unutun galiba :). Parantez icersinde nasil oluyor?

siberoloji

[mention=629522]@kayrak[/mention]

~ $ x=1
~ $ echo $x
1
~ $ (echo $x)
1
~ $ (x=2)
~ $ echo $x
1
~ $


Yukarıdaki örnek üzerinden açıklayalım.
1. x değişkenimizin değeri 1 olarak ayarlandı.
2. echo $x komutu ile x değişkeninin değeri ekrana yazdırıldı. Sonuç 1
3. (echo $x) komutu ile x değişkeninin değeri ekrana yazdırıldı. Sonuç 1
4. (x=2) komutu ile x değeri 2 olarak ayarlandı.
5. echo $x komutu ile x değişkeninin değeri ekrana yazdırıldı. Sonuç 1
Oysa sonucun iki olmasını bekleriz. Burada devreye giren konu subshell oluyor.
Yani parantez içinde verdiğiniz komutlar, mevcut bulunan shell ortamının değişkenlerini inherit ederek yeni bir subshell açar ve çalışırlar. Subshell ortamlar ana shell den değişkenleri aynen alırken, subshell içindeki üretilen değişkenler ana shell ortamına aktarılmazlar.
Açıklayıcı olmuştur umarım.

Ayrıca;
Konunun başlığı "Açıklayabilir misiniz?" olarak bence konuyu doğru yansıtmıyor.
Değiştirmeniz daha faydalı olacaktır. Örneğin "Parantez içi komutlar ve & işareti nedir?" olabilir.



kayrak

Alıntı yapılan: siberoloji - 02 Ağustos 2017 - 22:39:09
[mention=629522]@kayrak[/mention]

~ $ x=1
~ $ echo $x
1
~ $ (echo $x)
1
~ $ (x=2)
~ $ echo $x
1
~ $


Yukarıdaki örnek üzerinden açıklayalım.
1. x değişkenimizin değeri 1 olarak ayarlandı.
2. echo $x komutu ile x değişkeninin değeri ekrana yazdırıldı. Sonuç 1
3. (echo $x) komutu ile x değişkeninin değeri ekrana yazdırıldı. Sonuç 1
4. (x=2) komutu ile x değeri 2 olarak ayarlandı.
5. echo $x komutu ile x değişkeninin değeri ekrana yazdırıldı. Sonuç 1
Oysa sonucun iki olmasını bekleriz. Burada devreye giren konu subshell oluyor.
Yani parantez içinde verdiğiniz komutlar, mevcut bulunan shell ortamının değişkenlerini inherit ederek yeni bir subshell açar ve çalışırlar. Subshell ortamlar ana shell den değişkenleri aynen alırken, subshell içindeki üretilen değişkenler ana shell ortamına aktarılmazlar.
Açıklayıcı olmuştur umarım.

Ayrıca;
Konunun başlığı "Açıklayabilir misiniz?" olarak bence konuyu doğru yansıtmıyor.
Değiştirmeniz daha faydalı olacaktır. Örneğin "Parantez içi komutlar ve & işareti nedir?" olabilir.
Teşekürler! :)