sử dụng `/ run / shm` (trước đây là` / dev / shm`) làm thư mục tạm thời


9

Có phải là một thực hành tốt để tạo một thư mục trong /run/shm(trước đây /dev/shm) và sử dụng như thư mục tạm thời cho một ứng dụng?

Bối cảnh: Tôi đang viết các bài kiểm tra hộp đen cho một chương trình thực hiện nhiều nội dung với các tệp và thư mục. Đối với mỗi thử nghiệm, tôi tạo rất nhiều tệp và thư mục, sau đó chạy chương trình và sau đó tạo tập hợp tệp và thư mục dự kiến ​​và sau đó chạy diff để so sánh. Bây giờ tôi có khoảng 40 bài kiểm tra và chúng đã mất hơn 2 giây để chạy. Hy vọng tăng tốc mọi thứ tôi muốn chạy thử nghiệm trong một thư mục trên một số loại ramdisk.

Nghiên cứu về đĩa ram, tôi tình cờ phát hiện ra một câu hỏi với câu trả lời rằng việc tạo một thư mục trong đó /dev/shmvà sử dụng như thư mục tạm thời là ổn. Nghiên cứu thêm một số tuy nhiên tôi tình cờ thấy một trang wiki từ debian nói rằng đó là lỗi khi sử dụng /dev/shmtrực tiếp. Tôi nên sử dụng các shm_*chức năng. Thật không may, các shm_*chức năng dường như không có sẵn để sử dụng trong một kịch bản shell.

Tôi đang cảm thấy bối rối. Có ổn hay không sử dụng /run/shm(trước đây /dev/shm) như một thư mục tạm thời?


Có, nhiều người dùng cũng gắn kết /tmpvào bộ nhớ chia sẻ.
Eddy_Em

Tôi sẽ tưởng tượng đó /tmplà nhiều ngữ nghĩa. Nếu người dùng của bạn có đủ ram để sử dụng /dev/shmcho các tệp tạm thời để tăng tốc mọi thứ, thì họ sẽ gắn kết nó ở đó. Nhưng nếu họ không có đủ ram và gắn nó vào đó làm chậm máy tính của họ bằng cách buộc tất cả các quy trình sử dụng tệp hoán đổi, thì họ sẽ lưu ram của họ cho những thứ quan trọng hơn và sử dụng không gian đĩa thông thường cho /tmphệ thống tệp. Nói cách khác, /tmplà điều chỉnh nhiều hơn.
Jack

Câu trả lời:


10

Hoàn toàn ổn khi sử dụng một số thư mục /runmiễn là bạn có quyền thích hợp với nó. Trong một số phân phối hiện đại, /tmpđã là một hệ thống tệp ảo trong bộ nhớ hoặc liên kết tượng trưng đến một thư mục bên trong /run. Nếu đây là trường hợp của bạn (bạn có thể kiểm tra /etc/fstabhoặc nhập mtab), bạn có thể sử dụng /tmplàm thư mục tạm thời.

Ngoài ra, đừng nhầm lẫn với bài viết từ Debian. shm_*các chức năng được sử dụng để tạo các phân đoạn bộ nhớ dùng chung cho Giao tiếp giữa các quá trình. Với các chức năng đó, bạn có thể chia sẻ một đoạn bộ nhớ giữa hai hoặc nhiều quá trình để chúng giao tiếp hoặc cộng tác bằng cùng một dữ liệu. Các quy trình có phân đoạn bộ nhớ được gắn trong không gian địa chỉ của riêng chúng và có thể đọc và ghi ở đó như bình thường. Hạt nhân liên quan đến sự phức tạp. Các hàm này không có sẵn như các hàm shell (và sẽ không hữu ích trong ngữ cảnh shell). Để biết thêm thông tin, hãy xem man 7 shm_overview. Điểm chính của bài viết là không có chương trình nào nên quản lý trực tiếp các tệp giả đại diện cho các phân đoạn được chia sẻ mà thay vào đó sử dụng các chức năng phù hợp để tạo, đính kèm và xóa các phân đoạn bộ nhớ dùng chung.


2
Nơi thích hợp nhất dưới đây /runcó thể là /run/user/${UID}/.
Paul Fenney

1
Thật vậy, trên hệ thống của tôi, pulseaudio và systemd cài đặt một số tệp như tệp pid ở đó. Tuy nhiên, / tmp vẫn sẽ là vị trí ưa thích của tôi cho các tệp tạm thời.
lgeorget

2
@PaulFenney: / run / user / $ UID còn được gọi là $ XDG_RUNTIME_DIR
user2394284
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.