Birisi bana kabuk komutlarını kullanırken >ve arasındaki farkı açıklayabilir >>mi?
Örnek:
ps -aux > log
ps -aux >> log
Her iki şekilde de sonuç aynı görünüyor.
Birisi bana kabuk komutlarını kullanırken >ve arasındaki farkı açıklayabilir >>mi?
Örnek:
ps -aux > log
ps -aux >> log
Her iki şekilde de sonuç aynı görünüyor.
Yanıtlar:
>bir dosyanın üzerine yazmak (“ clobber ”) ve bir dosyayı >>eklemek için kullanılır.
Böylece, kullandığınızda ps aux > file, çıktısı ps auxyazılır fileve adlı bir dosya filezaten varsa , içeriğinin üzerine yazılır.
Ve kullanırsanız ps aux >> file, çıktısı ps auxyazılır fileve adlandırılmış dosya filezaten mevcutsa, dosya şimdi ps auxeski içeriğini ve eski içeriğinden sonra yazılan içeriğini içerecektir file.
En önemli fark, >kabuğun O_WRONLY|O_CREAT|O_TRUNCbayraklı bir dosyayı veya dosyaya benzer bir nesneyi açmasını sağlar - dosya varsa dosya oluşturulur veya kesilir, bayraklı >>dosya açar O_WRONLY|O_CREAT|O_APPEND- dosya varsa oluşturulur veya eklenir. Örneğin, sistem çağrıları izlerseniz bu aşikardır.
$ strace -e open,dup2 bash -c 'true >> /dev/null'
...
open("/dev/null", O_WRONLY|O_CREAT|O_APPEND, 0666) = 3
dup2(3, 1) = 1
dup2(10, 1) = 1
Ve birlikte
$ strace -e open,dup2 bash -c 'true > /dev/null'
...
open("/dev/null", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 3
dup2(3, 1) = 1
dup2(10, 1) = 1
+++ exited with 0 +++
Her iki durumda da, açık dosyanın dosya tanımlayıcısının komutun dosya tanımlayıcısı 1'e (stdout) kopyalandığına ve bunun kabuk çatalının aldığı komutla miras alınacağına dikkat edin.