ใช้ `/ run / shm` (ก่อนหน้านี้` / dev / shm`) เป็นไดเรกทอรีชั่วคราว


9

เป็นการดีที่จะสร้างไดเรกทอรีใน/run/shm(ก่อนหน้านี้/dev/shm) และใช้สิ่งนั้นเช่นไดเรกทอรีชั่วคราวสำหรับโปรแกรมหรือไม่?

พื้นหลัง: ฉันกำลังเขียนการทดสอบกล่องดำสำหรับโปรแกรมที่ทำสิ่งต่าง ๆ มากมายด้วยไฟล์และไดเรกทอรี สำหรับการทดสอบทุกครั้งฉันสร้างไฟล์และไดเรกทอรีจำนวนมากจากนั้นเรียกใช้โปรแกรมแล้วสร้างชุดไฟล์และไดเรกทอรีที่คาดหวังจากนั้นเรียกใช้ diff เพื่อเปรียบเทียบ ตอนนี้ฉันมีการทดสอบประมาณ 40 ครั้งและพวกเขาใช้เวลาในการรัน 2 วินาที หวังว่าจะเร่งความเร็วฉันต้องการรันการทดสอบในไดเรกทอรีบน ramdisk บางประเภท

การค้นคว้าเกี่ยวกับ ram disk ฉันสะดุดกับคำถามด้วยคำตอบที่ระบุว่าไม่เป็นไรในการสร้างไดเรกทอรี/dev/shmและใช้งานเช่นเดียวกับไดเรกทอรีชั่วคราว ค้นคว้าเพิ่มเติมอีกเล็กน้อยแต่ฉันเจอหน้า wikiจาก debian ที่ระบุว่าเป็นข้อผิดพลาดในการใช้/dev/shmโดยตรง ฉันควรใช้shm_*ฟังก์ชั่น น่าเสียดายที่shm_*ฟังก์ชั่นดูเหมือนจะไม่สามารถใช้งานได้ในเชลล์สคริปต์

ตอนนี้ฉันสับสน มันโอเคหรือไม่ที่จะใช้/run/shm(เดิม/dev/shm) เหมือนไดเรกทอรีชั่วคราวหรือไม่?


ใช่ผู้ใช้หลายคนยังเมาท์/tmpในหน่วยความจำที่แชร์
Eddy_Em

ฉันคิดว่า/tmpมันมีความหมายมากกว่า หากผู้ใช้ของคุณมี RAM เพียงพอสำหรับการใช้/dev/shmงานไฟล์ชั่วคราวเพื่อเร่งความเร็วพวกเขาจะติดที่นั่น แต่ถ้าพวกเขามี RAM ไม่เพียงพอและติดตั้งมันจะทำให้คอมพิวเตอร์ช้าลงโดยบังคับให้กระบวนการทั้งหมดใช้ไฟล์ swap จากนั้นพวกเขาก็จะบันทึก ram ของพวกเขาสำหรับสิ่งที่สำคัญกว่านั้นและใช้พื้นที่ดิสก์ธรรมดาสำหรับ/tmpระบบไฟล์ กล่าวอีกนัยหนึ่ง/tmpคือปรับได้มากขึ้น
แจ็ค

คำตอบ:


10

คุณสามารถใช้ไดเรกทอรีบางตัวได้อย่างสมบูรณ์/runตราบใดที่คุณมีสิทธิ์ที่เหมาะสม ใน distros ทันสมัยบาง/tmpอยู่แล้วเป็นระบบไฟล์เสมือนในหน่วยความจำหรือ symlink /runให้ภายในไดเรกทอรี หากเป็นกรณีของคุณ (คุณสามารถตรวจสอบว่าใน/etc/fstabหรือพิมพ์mtab) คุณสามารถใช้/tmpเป็นไดเรกทอรีชั่วคราวของคุณ

นอกจากนี้อย่าสับสนกับบทความจาก Debian shm_*ใช้เพื่อสร้างเซ็กเมนต์หน่วยความจำที่แชร์สำหรับการสื่อสารระหว่างกระบวนการ ด้วยฟังก์ชั่นเหล่านั้นคุณสามารถแบ่งปันส่วนของหน่วยความจำระหว่างกระบวนการตั้งแต่สองกระบวนการขึ้นไปเพื่อให้พวกเขาสื่อสารหรือทำงานร่วมกันโดยใช้ข้อมูลเดียวกัน กระบวนการมีส่วนของหน่วยความจำที่แนบมาในพื้นที่ที่อยู่ของตัวเองและสามารถอ่านและเขียนได้ตามปกติ เคอร์เนลเกี่ยวข้องกับความซับซ้อน ฟังก์ชั่นเหล่านั้นไม่สามารถใช้เป็นฟังก์ชั่นของเชลล์ (และจะไม่มีประโยชน์มากในบริบทของเชลล์) man 7 shm_overviewสำหรับข้อมูลเพิ่มเติมดูได้ที่ จุดของบทความคือว่าไม่มีโปรแกรมควรจัดการไฟล์หลอกที่เป็นตัวแทนของกลุ่มที่ใช้ร่วมกันโดยตรง แต่ใช้ฟังก์ชั่นที่เหมาะสมในการสร้างแนบและลบเซ็กเมนต์หน่วยความจำที่แชร์


2
สถานที่ที่เหมาะสมที่สุดด้านล่างอาจจะมี/run /run/user/${UID}/
Paul Fenney

1
ที่จริงแล้วในระบบของฉัน pulseaudio และ systemd ติดตั้งไฟล์บางไฟล์เช่นไฟล์ pid ที่นั่น อย่างไรก็ตาม / tmp จะยังคงเป็นตำแหน่งที่ฉันต้องการสำหรับไฟล์ชั่วคราว
lgeorget

2
@PaulFenney: / run / user / $ UID ยังเป็นที่รู้จักกันในนาม $ XDG_RUNTIME_DIR
user2394284
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.