ฉันสงสัยว่าไฟล์ชั่วคราวที่สร้างด้วย mktemp นานแค่ไหน มันแปลกสำหรับฉันที่จะพึ่งพาไฟล์ที่สามารถหายไปได้ตลอดเวลา ฉันใช้อูบุนตูถ้ามันสำคัญ
ฉันสงสัยว่าไฟล์ชั่วคราวที่สร้างด้วย mktemp นานแค่ไหน มันแปลกสำหรับฉันที่จะพึ่งพาไฟล์ที่สามารถหายไปได้ตลอดเวลา ฉันใช้อูบุนตูถ้ามันสำคัญ
คำตอบ:
ฮะ? จากman mktemp
:
DESCRIPTION
Create a temporary file or directory, safely, and
print its name. TEMPLATE must contain at least 3
consecutive `X's in last component. If TEMPLATE is
not specified, use tmp.XXXXXXXXXX, and --tmpdir is
implied. Files are created u+rw, and directories
u+rwx, minus umask restrictions.
mktemp
เพียงแค่เพิ่มสตริงแบบสุ่มเพื่อสร้างชื่อไฟล์ที่ไม่ซ้ำกัน ไม่มีใครจะลบออกโดยอัตโนมัติ
เนื่องจากดูเหมือนจะมีข้อโต้แย้งอยู่บ้างขอรายละเอียดเพิ่มเติมบ้าง mktemp
หน้าคนระบุว่า
ถ้าแม่ไม่ได้ระบุ
--tmpdir
จะถือว่าถ้า--tmpdir
ไม่ได้ระบุ/tmp
จะถือว่า
ซึ่งหมายความว่าเพียงแค่การทำงานmktemp
จะสร้างไฟล์ที่เรียกว่าในไดเรกทอรีtmp.RANDOM_STRING
/ tmp ดังนั้นใช่การรันmktemp
โดยไม่มีพารามิเตอร์จะสร้างไฟล์ที่จะถูกล้างพร้อมกับทุกอย่างใน/tmp
ลักษณะที่ขึ้นอยู่กับระบบ สำหรับไฟล์ดังกล่าว$TMPTIME
ตัวแปรจะมีความสำคัญตามที่อธิบายไว้ในคำตอบของคริสด้านล่าง สำหรับการกระจายจำนวนมากเริ่มต้นคือการล้าง/tmp
ทุกบูตเพราะมีการตั้งค่า$TMPTIME
0
ในการแจกแจงส่วนใหญ่ (หากไม่ใช่ทั้งหมด) ค่านี้จะถูกตั้งค่าในไฟล์/etc/default/rcS
:
$ grep TMPTIME /etc/default/rcS
TMPTIME=0
ตอนนี้ถ้าคุณทำระบุแม่แบบเช่นmktemp fooXXX
นั้นไฟล์ที่เรียกว่าfooXXX
ถูกสร้างขึ้นในไดเรกทอรีปัจจุบันที่XXX
จะถูกแทนที่ด้วยสามตัวอักษรแบบสุ่ม ไฟล์นี้จะไม่ถูกลบเว้นแต่คุณเลือกที่จะทำเช่นนั้น เฉพาะไฟล์ในไดเรกทอรีชั่วคราว "ทางการ" เช่น/tmp
เคยถูกลบโดยอัตโนมัติโดยระบบไม่มีบิตวิเศษที่คุณสามารถตั้งค่าที่ระบุไฟล์ชั่วคราวไฟล์ภายนอก/tmp
และไฟล์ ILK จะไม่ถูกลบโดยอัตโนมัติ
เพื่อตอบคำถามหลักของคุณแน่นอนว่ามันแปลกที่ต้องพึ่งพาไฟล์ที่สามารถหายไปได้นั่นคือสาเหตุที่ผู้คนไม่พึ่งพาไฟล์ tmp พวกเขาสร้างขึ้นเพื่อเก็บข้อมูลชั่วคราวและเราสามารถลืมพวกเขาได้ มีหลายวิธีในการสร้างไฟล์ถาวรที่มีชื่อแบบสุ่ม ตัวอย่างเช่น:
echo "foo" > $RANDOM.txt
echo "foo" > `mktemp fooXXX.txt`
echo "foo" > $$.txt
tmp
มีการล้างไดเรกทอรี แต่เมื่อไฟล์ที่สร้างด้วยmktemp
ถูกลบ อย่างที่คุณเห็นทั้งสองไม่จำเป็นต้องเกี่ยวข้องกัน :)
โปรดจำไว้ว่าไฟล์ชั่วคราวอาจถูกลบระหว่างการบูตระบบหรือตาม TMPTIME /etc/cron.daily/tmpwatch
โปรดดูสิ่งที่คุณมีใน
/var/tmp/
ในทางกลับกันภูมิคุ้มกันมักจะtmpwatch
เป็น
ไฟล์ชั่วคราวถูกสร้างขึ้นในช่วงเวลาสั้น ๆ (ปกติ) พวกเขามีชื่ออุณหภูมิดังนั้นจึงไม่ใช่เรื่องง่ายที่จะดำเนินการโจมตีเวลาและมักจะถูกลบเมื่อโปรแกรมไม่ต้องการอีกต่อไป โดยปกติสคริปต์ของคุณจะเก็บไฟล์นี้ไว้ในช่วงเวลาสั้น ๆ โดยปกติจะประมวลผลข้อความหรือไฟล์อื่น ๆ และมันจะทำการลบออกทันทีที่ไม่จำเป็น หากสคริปต์ของคุณจะขัดข้องคุณจะต้องทำตามขั้นตอนการดูแลรักษาโฟลเดอร์ / tmp อีกครั้ง (ถ้านั่นคือสิ่งที่คุณตัดสินใจวางไว้)
คุณไม่จำเป็นต้องสร้างไฟล์ชั่วคราว /tmp
mktemp
สามารถเรียกใช้ในไดเรกทอรีใด ๆ และเพียงสร้างชื่อไฟล์โดยพลการฉันไม่เห็นว่าสิ่งนี้มีส่วนเกี่ยวข้องกับtmpwatch
อะไร
mktemp
/tmp/
ไฟล์อุณหภูมิไม่หายไปด้วยตนเอง พวกเขาเรียกว่าไฟล์ temp เพียงเพราะในสคริปต์หรือเซสชั่นของคุณหรือที่ใดก็ตามที่คุณทำพวกเขาคุณคาดว่าจะลบพวกเขาเมื่อคุณเสร็จสิ้น หรือปล่อยให้พวกเขานอนตะแคงถ้านั่นคือสิ่งที่คุณ mktemp มีไว้เพื่อให้คุณสามารถสร้างไฟล์ที่มีชื่อบางอย่างที่ไม่เหมือนใครเพื่อไม่ให้เขียนทับไฟล์ที่มีอยู่บางไฟล์
TMPTIME
หรือไม่
/tmp
หรือไดเร็กทอรี tmp อื่นเท่านั้น มันจะไม่เพียงแค่ลบไฟล์ที่สร้างโดยผู้ใช้แบบสุ่ม
mktemp
/tmp/