Tôi đã kiểm tra thư mục find đang lấy tối đa inodes và trong khi kiểm tra tôi đã chạy
touch test_{1..1391803}.txt
Nhưng nó gây ra lỗi cho tôi "-bash: /usr/bin/touch: Argument list too long"
, bây giờ tôi đang chạy dưới lệnh, nhưng có vẻ như nó sẽ mất thời gian của Hugh
ruby -e '1.upto(1391803) { |n| %x( touch "test_#{n}.txt" ) }'
Vì vậy, câu hỏi là: có cách nào để tạo nhiều tệp trong một khoảng thời gian nhỏ không? Tôi nên chạm vào 1 tệp lac trên mỗi vòng lặp hay cách nào tốt hơn?
Kết quả kiểm tra :
Số 1
[root@dc1 inode_test]# time seq 343409 | xargs touch
real 0m7.760s
user 0m0.525s
sys 0m4.385s
Số 2
[root@test-server inode_test]# time echo 'for (i=1;i<=343409;i++) i' | bc | xargs touch
real 0m8.781s
user 0m0.722s
sys 0m4.997s
số 3
[root@test-server inode_test]# time printf '%s ' {1..343409} | xargs touch
real 0m8.913s
user 0m1.144s
sys 0m4.541s
Số 4
[root@test-server inode_test]# time awk 'BEGIN {for (i=1; i<=343409; i++) {printf "" >> i; close(i)}}'
real 0m12.185s
user 0m2.005s
sys 0m6.057s
Số 5
[root@test-server inode_test]# time ruby -e '1.upto(343409) { |n| File.open("#{n}", "w") {} }'
real 0m12.650s
user 0m3.017s
sys 0m4.878s
touch
nhưng với lệnhexecve()
gọi hệ thống (về kích thước tích lũy của các đối số và biến môi trường được truyền dọc theo lệnh gọi đó).