Unix & Linux

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

2
อายุขัยของไฟล์ descriptor คืออะไร?
ตามที่อธิบายไว้ที่นี่การเปลี่ยนเส้นทางใช้open()เพื่อเขียนไฟล์ มีตัวอธิบายไฟล์ Inner (?) ที่สร้างขึ้นในเชลล์แล้วใช้เมื่อจำเป็น descriptor ด้านในถูกสร้างขึ้นตลอดระยะเวลาของสคริปต์หรืออายุการใช้งานเชลล์หรือไม่? มันจะถูกทำลายหลังจากเวลาผ่านไปหลายครั้งหรือหลายครั้งหรือไม่? ฉันหมายถึงโดยเฉพาะอย่างยิ่ง file descriptor สำหรับไฟล์ที่เชลล์ตัวเองเปิดขึ้นสำหรับการทำงานของ builtins สร้าง descriptor และเปิดไฟล์สำหรับการดำเนินการแต่ละครั้งหรือไม่ พวกเขาจะเก็บไว้นานแค่ไหน? ตัวอย่าง: #!/bin/bash >>x echo something ...do many other things not related to the file x >>x echo something more อินสแตนซ์ของ descriptor แรกถูกเก็บไว้จนกว่าการดำเนินการที่สองหรือไม่ แล้วเชลล์ที่ฉันใช้ในเทอร์มินัลล่ะ บางครั้งฉันเปิดเซสชันหนึ่งวันอาจเป็นสัปดาห์ มันยังคงรักษาคำอธิบายสำหรับไฟล์ทั้งหมดที่ฉันดำเนินการกับเชลล์ในตัว?

8
ตรวจสอบไฟล์ทุกบรรทัดว่าไม่ซ้ำใคร
ฉันมีไฟล์ข้อความที่มีบรรทัดเช่นนี้: This is a thread 139737522087680 This is a thread 139737513694976 This is a thread 139737505302272 This is a thread 139737312270080 . . . This is a thread 139737203164928 This is a thread 139737194772224 This is a thread 139737186379520 ฉันจะมั่นใจได้ถึงความมีเอกลักษณ์ของทุกบรรทัดได้อย่างไร หมายเหตุ:เป้าหมายคือเพื่อทดสอบไฟล์ไม่ใช่เพื่อแก้ไขหากมีบรรทัดที่ซ้ำกันอยู่

2
เปลี่ยนระบบที่เข้ารหัสไว้จากระยะไกล
ระบบของฉันเต็มไปด้วยข้อมูลที่ละเอียดอ่อนมากดังนั้นฉันต้องเข้ารหัสให้มากที่สุด ฉันมีการติดตั้ง Debian เข้ารหัสซึ่งจะขอรหัสผ่านที่ยาวทุกครั้งในระหว่างการบู๊ต มีวิธีง่าย ๆ ในการตั้งค่าเพื่อให้ฉันสามารถป้อนรหัสผ่านนั้นจากระยะไกลได้หรือไม่? หากการแจกจ่ายอื่นสามารถทำได้ฉันไม่รังเกียจที่จะติดตั้งอย่างอื่นแทน Debian
11 debian  remote  luks 

8
ข้อผิดพลาดกรณีขึ้นอยู่กับเงื่อนไขถ้า
ฉันกำลังมองหาวิธีที่จะมีข้อผิดพลาดเกิดขึ้นตามเงื่อนไข if ภายในเงื่อนไข case ใน bash ตัวอย่างเช่น: input="foo" VAR="1" case $input in foo) if [ $VAR = "1" ]; then # perform fallthrough else # do not perform fallthrough fi ;; *) echo "fallthrough worked!" ;; esac ในรหัสข้างต้นหากตัวแปรVARคือ1ฉันต้องการให้เงื่อนไขกรณีดำเนินการผิดพลาด

2
เป็นอันตรายหรือไม่หากใช้เสียงสะท้อน
ฉันเคยเห็นหัวข้อที่คล้ายกันสองสามข้อ แต่พวกเขาอ้างถึงไม่ได้อ้างอิงตัวแปรซึ่งฉันรู้ว่าอาจนำไปสู่ผลลัพธ์ที่ไม่พึงประสงค์ ฉันเห็นรหัสนี้และสงสัยว่าถ้าเป็นไปได้ที่จะฉีดบางสิ่งให้ทำงานเมื่อบรรทัดของรหัสนี้ทำงาน: echo run after_bundle
11 shell  security  quoting  echo 

8
แสดงบรรทัดว่างโดยคำสั่ง cat
ฉันมีรายชื่อ files.txt ด้านล่าง: -rw-rw-r-- 1 root dev 11 May 16 12:18 20_SumActive.txt -rw-rw-r-- 1 root dev 11 May 16 12:18 22_SumActive.txt -rw-rw-r-- 1 root dev 7 May 16 12:18 24_SumActive.txt -rw-rw-r-- 1 root dev 0 May 16 12:18 26_SumActive.txt -rw-rw-r-- 1 root dev 0 May 16 12:18 28_SumActive.txt เอาท์พุท: kpgmeddev01> …

4
เหตุใดเนื้อหา JSON จาก heredoc จึงไม่สามารถแยกวิเคราะห์ได้
ฉันมีส่วนของ JSON ต่อไปนี้ใช้ไม่ได้: VALUE=<<PERSON { "type": "account", "customer_id": "1234", "customer_email": "jim@gmail.com" } PERSON echo -n "$VALUE" | python -m json.tool ผลลัพธ์คือ: ไม่สามารถถอดรหัสวัตถุ JSON ได้ ทำเช่นเดียวกันกับjqเช่น echo -n "$VALUE" | jq '.' ไม่มีเอาต์พุต มีพฤติกรรมเหมือนกันสำหรับสิ่งต่อไปนี้: VALUE=<<PERSON '{ "type": "account", "customer_id": "1234", "customer_email": "jim@gmail.com" }' PERSON echo -n "$VALUE" | python -m json.tool …

3
ทำไมฉันไม่สามารถสร้างฮาร์ดลิงก์จากไฟล์อุปกรณ์ในไดเรกทอรีอื่นที่ไม่ใช่ / dev
เมื่อฉันต้องการสร้างการเชื่อมโยงอย่างหนักใน/homeไดเรกทอรีของฉันในโหมดราก , Linux แสดงข้อความข้อผิดพลาดต่อไปนี้: ln: failed to create hard link ‘my_sdb’ => ‘/dev/sda1’: Invalid cross-device link ข้อความแสดงข้อผิดพลาดด้านบนแสดงอยู่ด้านล่าง: # cd /home/user/ # ln /dev/sda1 my_sdb แต่ฉันสามารถสร้างฮาร์ดลิงก์ใน/devไดเรกทอรีและเป็นไปไม่ได้ในไดเรกทอรีอื่น ตอนนี้ฉันต้องการทราบวิธีสร้างฮาร์ดลิงก์จากไฟล์อุปกรณ์ที่มีอยู่ (เช่นsdb1) ใน/homeไดเรกทอรี (หรือไดเรกทอรีอื่น ๆ ) หรือไม่
11 linux  hard-link  ln 

3
วิธีใช้ grep เพื่อค้นหาบรรทัดที่มีหนึ่งในสองคำ แต่ไม่ใช่ทั้งสองอย่าง?
ฉันต้องการค้นหาบรรทัดด้วย 'word1' XOR 'word2' ในไฟล์ข้อความ ดังนั้นควรแสดงผลลัพธ์ด้วย word1, word2 แต่ไม่ใช่บรรทัดที่มีทั้งสองคำนี้ ฉันต้องการใช้ XOR แต่ฉันไม่รู้วิธีเขียนในบรรทัดคำสั่ง linux ฉันเหนื่อย: grep 'word1\|word2' text.txt grep word1 word2 text.txt grep word1 text.txt | grep word2 grep 'word1\^word2' text.txt และอื่น ๆ อีกมากมาย แต่ไม่สามารถทำได้

2
~ (tilde) คืออะไรเมื่อใช้เป็นคำนำหน้าไปยังเส้นทาง
แก้ไข: นี่คือซ้ำ/programming/998626/meaning-of-tilde-in-linux-bash-not-home-directory/ ฉันไม่มีชื่อเสียงที่จะปิดคำถามนี้ซ้ำ ฉันไม่ได้อ้างถึง~ในไดเรกทอรีบ้าน แต่สิ่งนี้: $ ls ~foo/bar /some/mount/point/foo/bar อย่างไรก็ตามหากฉันลองด้วยจุดเมานต์ที่แตกต่างกันเช่น: $ mount | ag "/dev " devfs on /dev (devfs, local, nobrowse) $ ls /dev/stdin /dev/stdin $ ls ~stdin zsh: no such user or named directory: stdin . # bash has a similar error message: ls: ~stdin: No such file …
11 command-line  osx 

2
ทำไม wc <<<“ $ string” แสดงความยาวหนึ่งไบต์นานกว่า printf“ $ string” | ห้องน้ำ?
โดยบังเอิญฉันพบว่าwcนับแตกต่างกันขึ้นอยู่กับว่ามันได้รับข้อมูลจากทุบตี: $ s='hello' $ wc -m &lt;&lt;&lt;"$s" 6 $ wc -c &lt;&lt;&lt;"$s" 6 $ printf '%s' "$s" | wc -m 5 $ printf '%s' "$s" | wc -c 5 นี่คือ - IMHO ทำให้สับสน - พฤติกรรมมีการบันทึกไว้ที่อื่นหรือไม่ สิ่งที่wcนับที่นี่ - นี่คือการขึ้นบรรทัดใหม่หรือไม่

1
ทำไม `strace 'ไม่แสดงว่ากระบวนการนี้กำลังรออะไรอยู่
อันยิ่งใหญ่straceได้ทำให้ฉันผิดหวัง เป็นไปได้อย่างไร? time fooแสดงให้เห็นว่าfooใช้เวลาหลายวินาทีในการเรียกใช้ ("ของจริง") แต่ใช้เวลา cpu เล็กน้อยทั้งใน userspace ("ผู้ใช้") และในเคอร์เนล ("sys") สำหรับผู้อยากรู้อยากเห็นfooมีการกำหนดไว้ด้านล่าง ดังนั้นจึงใช้เวลาส่วนใหญ่รออย่างอื่นไม่ดำเนินการตามคำสั่งของ CPU โดยปกติแล้วฉันจะเห็นว่ามันกำลังรออยู่strace- นั่นคือสิ่งที่การโทรของระบบถูกปิดกั้นเป็นเวลานาน น่าเสียดายที่วิธีนี้ใช้ไม่ได้ผล strace -ttt -T -C -w fooแสดงการเรียกระบบการประทับเวลาและสรุปเวลา (จริง) ที่ใช้ในการโทรของระบบ แต่กระบวนการนี้แสดงให้เห็นว่าการใช้เวลาเล็กน้อยโดยรวม (จริง) ในการโทรของระบบ foojournalctl -b -u dev-hugepages.mountเป็นจริง ยกเว้นว่าฉันต้องเปลี่ยนอาร์กิวเมนต์สุดท้ายเป็นหน่วย systemd ที่แตกต่างกันในแต่ละครั้งเพื่อทำซ้ำสิ่งนี้ กล่าวอีกนัยหนึ่งความล่าช้าที่ฉันกำลังตรวจสอบเกิดขึ้นในครั้งแรกที่ฉันพยายามรับบันทึกสำหรับหน่วย systemd ใดหน่วยหนึ่ง แก้ไข : หลังจากตอบคำถามหลักผมยังตระหนักถึงเหตุผลที่ผมมีปัญหานี้ซ้ำล่าช้า เวลาที่ใช้ในกระบวนการนี้เป็นปัญหาเฉพาะดูเหมือนว่ามันจะไม่เกิดขึ้นในทุกระบบ https://github.com/systemd/systemd/issues/7963

1
วิธีลด Spectre และ Meltdown หน่วยความจำเคอร์เนลที่รั่วบั๊ก CPU บน OpenBSD?
หน่วยความจำเคอร์เนลหน่วยความจำรั่วการออกแบบโปรเซสเซอร์ทำให้ Linux, Windows ออกแบบ และ การอ่านหน่วยความจำที่มีสิทธิพิเศษพร้อมช่องสัญญาณด้านข้าง ในข่าวล่าสุดผู้คนสามารถอ่านเกี่ยวกับหน่วยความจำเคอร์เนลรั่ว CPU หากใช้ OpenBSD เราจะป้องกันตัวเองได้อย่างไร หรือ OpenBSD ไม่ได้รับผลกระทบ?

5
วิธีการย้อนกลับเนื้อหาของไฟล์ไบนารีหรือไม่
ฉันแก้ไขปัญหาที่ฉันพบไฟล์ข้อมูลที่ไม่มีนามสกุลไฟล์ คำสั่งแสดงให้เห็นว่ามันเป็นfile คำสั่งแสดงให้เห็นว่าผลิตภัณฑ์มวลรวมประชาชาติ ในบรรทัดสุดท้าย ดังนั้นหากฉันย้อนกลับไฟล์นี้จากนั้นฉันจะได้รับไฟล์ฟอร์แมต. PNGฉันค้นหาทุกที่ แต่ไม่พบวิธีการแก้ปัญหาที่อธิบายวิธีย้อนกลับเนื้อหาของไฟล์ไบนารีdata file (application/octet-stream)hd
11 binary 

3
รันเชลล์สคริปต์เมื่อ“ / bin / sh” ชี้ไปที่“ / bin / bash”
ฉันได้อ่านสิ่งต่อไปนี้ในคำถามนี้: bash รองรับสวิตช์ --posix ซึ่งทำให้รองรับ POSIX ได้มากขึ้น นอกจากนี้ยังพยายามที่จะเลียนแบบ POSIX ถ้าเรียกว่าเป็นการดวลจุดโทษ อ้างข้างต้นสันนิษฐานว่าคือการเชื่อมโยงที่ชี้ไปยัง/bin/sh/bin/bash แต่ผมไม่เข้าใจสิ่งที่หมายโดย"เรียกว่าเป็นการดวลจุดโทษ" บอกว่าฉันมีสคริปต์ต่อไปนี้ซึ่งเรียกว่า "script.sh": #!/bin/bash echo "Hello World" โปรดบอกฉันในแต่ละกรณีต่อไปนี้ว่าสคริปต์จะทำงานในbashโหมดปกติหรือในโหมด POSIX (สมมติว่าฉันได้ดำเนินการคำสั่งต่อไปนี้ในเทอร์มินัลที่กำลังทำงานอยู่bash): sh script.sh bash script.sh ./script.sh ตอนนี้บอกว่าฉันมีสคริปต์ต่อไปนี้ซึ่งเรียกว่า "script.sh" (ซึ่งเป็นเหมือนสคริปต์ด้านบน แต่ไม่มี Shebang): echo "Hello World" โปรดบอกฉันในแต่ละกรณีต่อไปนี้ว่าสคริปต์จะทำงานในbashโหมดปกติหรือในโหมด POSIX (สมมติว่าฉันได้ดำเนินการคำสั่งต่อไปนี้ในเทอร์มินัลที่กำลังทำงานอยู่bash): sh script2.sh bash script2.sh ./script2.sh
11 linux  bash  shell 

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