Unix & Linux

คำถาม & คำตอบสำหรับผู้ใช้ Linux, FreeBSD และระบบปฏิบัติการ Un * x อื่น ๆ

2
อินเตอร์เฟสการเรียกใช้ระบบทั่วไปอนุญาตให้ลดขนาดไฟล์ (โดยไม่ต้องแทนที่ด้วย inode อื่น) หรือไม่?
มีวิธีไปยังopen()ไฟล์และทำให้ไฟล์ย่อขนาดหรือไม่ แน่นอนหนึ่งสามารถเปิดได้ในโหมดผนวกหรือพยายามที่จะสิ้นสุดและเขียนเพื่อให้พวกเขาเติบโต อย่างไรก็ตามเท่าที่ฉันรู้ไม่มีวิธีการลดขนาดไฟล์ผ่านอินเตอร์เฟซการโทรระบบยูนิกซ์สไตล์ทั่วไป วิธีเดียวที่จะทำได้เท่าที่ฉันรู้คือการแกล้งทำโดยการสร้างไฟล์ใหม่ที่สั้นกว่าและrename()แทนที่ไฟล์เก่า ฉันแค่ต้องการการยืนยันเพราะฉันเห็นคำตอบที่บอกเป็นนัยว่าเป็นไปได้ที่จะทำให้ตัวแก้ไขไฟล์ที่ทำงานบนไฟล์โดยตรงแทนที่จะทำตามขั้นตอนการสร้างใหม่และเปลี่ยนชื่อใหม่ ฉันคิดเสมอว่าไฟล์ api ในอินเตอร์เฟสการเรียกระบบ libc และ unix สไตล์ไม่อนุญาตให้มีการลดขนาดไฟล์เพื่อความสะดวกในการใช้งานระบบไฟล์และอาจหลีกเลี่ยงรูปแบบการใช้งานที่อาจนำไปสู่การกระจายตัว

1
ระบบเหมือน Unix ใดที่ให้ไฟล์พิเศษ / dev / tcp
ฉันรู้ว่า/dev/tcp/<host>/<port>มันเป็นเวทย์มนตร์ที่จัดการโดยกระสุนบางตัวในการเปลี่ยนเส้นทาง แต่ตามman bash: หากระบบปฏิบัติการที่ใช้ bash นั้นให้ไฟล์พิเศษเหล่านี้ bash จะใช้มัน มิฉะนั้นมันจะเลียนแบบพวกเขาภายใน [... ] บนกล่อง Linux ที่ฉันใช้อยู่ในตอนนี้ไม่มี/dev/tcpไฟล์พิเศษดังนั้น Bash จะเลียนแบบมัน แต่จริง ๆ แล้วมีระบบเหมือน Unix ที่ให้/dev/tcpไฟล์พิเศษที่มีความหมายเดียวกับที่สนับสนุนโดย Bash หรือไม่

1
diff แสดงความแตกต่างภายในบรรทัดเท่านั้น
ฉันต้องการเปรียบเทียบบรรทัดในสองไฟล์ แต่เพื่อลดจุดรบกวนในเอาต์พุตฉันต้องการเฉพาะความแตกต่างที่แท้จริงในบรรทัดที่จะพิมพ์ ตัวอย่างเช่นกำหนดสองไฟล์ด้านล่าง: a.txt a b c d e f g h i j k l m n o p q r s t u v w x y z b.txt a B c d e f g h i j k l m n o p q r s …

1
การเปลี่ยนเส้นทาง stdout จากสองโปรแกรม
ฉันใช้เครื่องมือตรวจสอบหน่วยความจำ (prog1) ในรหัส C ++ (prog2) ซึ่งทั้งคู่ให้ผลลัพธ์ที่ยอดเยี่ยมและมีรายละเอียดมาก เพื่อที่จะไล่ล่าบั๊กบางตัวฉันต้องบันทึกผลลัพธ์นี้ไปยังไฟล์ ฉันพยายามเปลี่ยนเส้นทาง stdout เป็นไฟล์: prog1 prog2 > outfile.txt แต่นั่นให้ไฟล์ที่มีเอาต์พุตของ prog2 ในขณะที่เอาต์พุตของ prog1 ยังคงไปที่เทอร์มินัล ใครรู้วิธีระบุว่าฉันต้องการให้ทั้งสองผลลัพธ์ไปที่ไฟล์หรือไม่ ชอบ(prog1 prog2) > outfile.txtไหม

3
“ แปรปรวน” เครื่องหมายและ (พื้นหลังกระบวนการ)
ฉันต้องการทราบว่ามีวิธีที่จะใส่เครื่องหมายและในตัวแปรและยังใช้เพื่อส่งกระบวนการไปยังพื้นหลัง งานนี้: BCKGRND=yes if [ "$BCKGRND" = "yes" ]; then sleep 5 & else sleep 5 fi แต่มันจะไม่เจ๋งมั้ยที่จะบรรลุห้าสายเหล่านั้นด้วยเพียงอันเดียว? ชอบมาก BCKGRND='&' sleep 5 ${BCKGRND} แต่นั่นไม่ได้ผล หาก BCKGRND ไม่ได้ตั้งค่าให้ใช้งานได้ แต่เมื่อตั้งค่ามันจะตีความว่าเป็นตัวอักษร '&' และข้อผิดพลาด

2
bash: echo: ข้อผิดพลาดในการเขียน: การเรียกระบบขัดจังหวะ
ฉันต้องการสร้างรายการที่เรียงลำดับด้วยตัวเลข 8 หลักทั้งหมด - จาก 00000000 ถึง 99999999 ฉันพิมพ์ในเชลล์: f() { while IFS="" read -r line; do for i in {0..9}; do echo "$line$i"; done; done } echo | f | f | f | f | f | f | f | f | tee result.txt | wc -l …
9 bash 

5
วิธีการปิดเครื่องเมื่อไม่มี systemd / init (เช่นใช้ init = / bin / bash)
poweroffบ่นว่ามันไม่สามารถเชื่อมต่อกับ systemd ผ่าน DBus (แน่นอนมันไม่ได้มีชีวิตอยู่) ฉันsyncตามด้วยการkill $$คิดว่า pid 1 ที่กำลังจะตายจะให้เคอร์เนลไปยัง poweroff แต่นั่นทำให้เคอร์เนลเกิดความตื่นตระหนก จากนั้นฉันก็กดปุ่มเพาเวอร์เพื่อบังคับให้ปิดเครื่อง อะไรคือวิธีที่เหมาะสมที่สุดในการปิดเครื่องในสถานการณ์นี้

3
วิธีการพิมพ์สตริงคั่นด้วย TAB ในทุบตี?
ฉันพยายามพิมพ์สองสตริงคั่นด้วย TAB ฉันเหนื่อย: echo -e 'foo\tbar' printf '%s\t%s\n' foo bar ทั้งคู่พิมพ์: foo bar โดยที่ช่องว่างระหว่างสองช่องนั้นเป็น 5 ช่องว่าง (ตามการเลือกผลลัพธ์ด้วยเมาส์ใน Putty) ฉันได้ลองใช้ CTRL + V แล้วกด TAB เมื่อพิมพ์คำสั่งด้วยผลลัพธ์เดียวกัน วิธีที่ถูกต้องในการบังคับแท็บให้พิมพ์เป็นแท็บคืออะไรฉันจึงสามารถเลือกเอาท์พุทและคัดลอกไปยังที่อื่นด้วยแท็บได้ และคำถามรอง: ทำไมทุบตีขยายแท็บลงในช่องว่าง อัปเดต : เห็นได้ชัดว่านี่เป็นปัญหาของ Putty: /superuser/656838/how-to-make-putty-display-tabs-within-a-file-instead-of-changing-them-to ช่องว่างที่


2
Troff ทัวริงสมบูรณ์หรือไม่
Troff รองรับทั้งนิยามแมโครที่ใช้.deและแยกย่อยโดยใช้.if(ดูหน้า 5 และ 6 ของคู่มือผู้ใช้ Troff ) ในสองประเด็นนี้มันเหมือนกับ TeX มาก อย่างไรก็ตามฉันไม่รู้โปรแกรมที่ซับซ้อนสูงที่เขียนใน Troff (ต่างจาก TikZ สำหรับ TeX) Troff ทัวริงสมบูรณ์หรือไม่
9 roff 

3
จะค้นหาไฟล์ตามประเภทไฟล์ได้อย่างไร?
ฉันรู้ว่าฉันสามารถค้นหาไฟล์โดยใช้find: find . -type f -name 'sunrise'. ตัวอย่างผลลัพธ์: ./sunrise ./events/sunrise ./astronomy/sunrise ./schedule/sunrise file sunriseฉันยังรู้ว่าฉันสามารถตรวจสอบประเภทของไฟล์ของไฟล์: ตัวอย่างผลลัพธ์: sunrise: PEM RSA private key แต่ฉันจะค้นหาไฟล์ตามประเภทไฟล์ได้อย่างไร ตัวอย่างเช่นmy-find . -type f -name 'sunrise' -filetype=bash-script: ./astronomy/sunrise ./schedule/sunrise

1
การประมาณไฟล์ที่ไม่บีบอัดผิดหรือ?
ฉันมีไฟล์บีบอัดขนาดใหญ่ (~ 60G) ( tar.gz) ฉันเคยsplitแบ่งมันออกเป็น 4 ส่วนจากนั้นจึงcatกลับมารวมกัน อย่างไรก็ตามตอนนี้เมื่อฉันพยายามที่จะประมาณขนาดของไฟล์ที่ไม่มีการบีบอัดมันกลับกลายเป็นว่ามันเล็กกว่าเดิมหรือไม่? เป็นไปได้อย่างไร? $ gzip -l myfile.tar.gz compressed uncompressed ratio uncompressed_name 60680003101 3985780736 -1422.4% myfile.tar

2
การเปลี่ยนเส้นทางเช่น“ |>” เป็นเพียงข้อผิดพลาดหรือมีความหมายอะไรไหม
ฉันพิมพ์โดยไม่ได้ตั้งใจ แต่ทุบตีไม่ได้พิมพ์ข้อผิดพลาดใด ๆ (แต่สร้างไฟล์เปล่า) ดังนั้นฉันคิดว่าบางทีมันอาจหมายถึงอะไรบางอย่าง? (เช่นวันที่ |> tmp.txt)

2
สร้างคำสั่งแบบไดนามิก
ฉันกำลังทำงานกับสคริปต์และฉันต้องสร้างtarคำสั่งแบบไดนามิก ต่อไปนี้เป็นสองตัวอย่างเพื่ออธิบายสิ่งที่ฉันพยายามทำ: #!/bin/bash TAR_ME="/tmp" EXCLUDE=("/tmp/hello hello" "/tmp/systemd*" "/tmp/Temp*") _tar="tar "`printf -- '--exclude="%s" ' "${EXCLUDE[@]}"`" -zcf tmp.tar.gz" echo COMMAND: "${_tar}" ${_tar} "$TAR_ME" echo -e "\n\nNEXT:\n\n" EXCLUDE=("--exclude=/tmp/hello\ hello" "--exclude=/tmp/systemd*" "--exclude=/tmp/Temp*") _tar="tar "`printf -- '%s ' "${EXCLUDE[@]}"`" -zcf test.tar.gz" echo COMMAND: "${_tar}" ${_tar} "$TAR_ME" ฉันต้องการที่จะใช้_tarเป็นคำสั่งฉันสามารถทำให้มันทำงานกับเส้นทางแบบคลาสสิก แต่ฉันต้องการมันเพื่อทำงานกับช่องว่างในชื่อโฟลเดอร์ และทุกครั้งที่ฉันพบข้อผิดพลาดที่มีลักษณะ: COMMAND: tar --exclude="/tmp/hello hello" --exclude="/tmp/systemd*" --exclude="/tmp/Temp*" …

2
แคชการเขียนทำงานอย่างไรกับระบบไฟล์ซึ่งประกอบด้วยดิสก์ที่มีความเร็วแตกต่างกัน
บนระบบ Linux ที่ทันสมัยที่มีดิสก์หลายตัวและซอฟต์แวร์ RAID ซึ่งครอบคลุมทั้งไดรฟ์ช้า (HDD) และไดรฟ์ (SSD) ที่รวดเร็วจะเขียนไปยังระบบไฟล์ที่แคชอย่างไร สำหรับ MD-RAID RAID1 อาร์เรย์สามารถกำหนดค่าด้วยดิสก์--write-mostlyและ--write-behindซึ่งแสดงให้เห็นว่าจะดำเนินการอ่านจากดิสก์ได้เร็วขึ้นและการเขียนไปยังดิสก์ช้าที่สามารถล้าหลัง แต่ที่แคชในระดับ kernel อย่างไร เคอร์เนลแคชดิสก์เขียนก่อนหรือหลังเลเยอร์ md-raid หรือไม่ ในตอนท้ายของการเรียกการเขียน () เป็นข้อมูลที่รับประกันว่าจะถูกเขียนลงในหนึ่งใน--write-behindดิสก์? สำหรับbtrfsRAID1 สถานการณ์เดียวกันจะเล่นอย่างไร ไม่มี--write-behindหน้าที่การใช้งานจึงนับหน้าสกปรกที่ระดับอุปกรณ์หรือระดับระบบไฟล์หรือไม่ การเขียน () จะกลับมาที่จุดใด ค่าที่vm.dirty_*ratioปรับได้มีผลกับการตั้งค่าเหล่านี้อย่างไร

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