Saya perhatikan di direktori dengan banyak file di NFS jika saya melakukannya
ls *
lalu tekan Ctrl-C itu bisa memakan waktu cukup lama ( katakanlah 20 detik ) sebelum ls kembali.
Mengapa? Bisakah perintah ls diperbaiki agar lebih responsif?
Jawaban yang Diterima:
Saat Anda menjalankan ls *
, hal pertama yang terjadi adalah shell memperoleh daftar direktori saat ini. Jika direktorinya besar dan servernya lambat, ini bisa memakan waktu cukup lama.
Setelah shell memperoleh daftar nama file di direktori saat ini, shell akan mengurutkan daftar tersebut (yang sangat cepat dibandingkan dengan interaksi jaringan apa pun), lalu memanggil ls
. ls
perintah mencari setiap file secara bergantian dan mengambil metadatanya (stat
panggilan) untuk memeriksa apakah itu sebuah direktori; jika file adalah direktori, ls
mencantumkan isinya daripada direktori itu sendiri.
Saat Anda menekan Ctrl +C , ini tidak akan mengganggu operasi NFS saat ini. Anda tidak dapat menginterupsi operasi sistem file di mana saja, karena ini dapat membuat sistem dalam keadaan tidak konsisten. Bahkan membaca file dapat memperbarui waktu aksesnya. Sebagian besar waktu, operasi baca atau tulis dasar pada file dilakukan secara instan menurut standar manusia, tetapi NFS adalah pengecualian, terutama dengan data dalam jumlah besar melalui jaringan yang lambat.
Dengan demikian menekan Ctrl +C hanya akan berlaku:
- jika shell saat ini membuat daftar nama file, ketika daftar itu diambil sepenuhnya;
- jika
ls
telah dimulai dan saat ini memperoleh metadata tentang file, ketika server memasok metadata; - jika
ls
telah dimulai dan saat ini mencantumkan direktori, ketika daftar telah diambil sepenuhnya, atau setidaknya setelah sebagian.
Ini bukan kesalahan ls
perintah (yang bahkan mungkin belum dimulai). Ini bahkan bukan kesalahan shell:ini kesalahan NFS. NFS cukup lambat.