/ dev / null คืออะไรและจะช่วยคุณได้อย่างไร

หากเรามีแนวคิดเกี่ยวกับแผนผังไดเร็กทอรี GNU / Linux อยู่แล้วอย่างน้อยเราควรทำความคุ้นเคยกับ / dev / reference ซึ่งเป็นที่ที่ไฟล์ทั้งหมดที่เกี่ยวข้องกับ อุปกรณ์ฮาร์ดแวร์.

หากเราดูในไดเร็กทอรี / dev / เราจะเห็น "ไฟล์" ที่เรียกว่า โมฆะแต่หากเราต้องการเปิดเพื่อดูเนื้อหาระบบจะแจ้งให้เราทราบว่าเป็นไปไม่ได้เนื่องจากไม่ใช่เนื้อหาธรรมดา ฉันได้แนบไฟล์ word ไว้เพราะอย่างที่คุณทุกคนรู้สำหรับ Linux ทุกอย่าง (ฮาร์ดแวร์และซอฟต์แวร์) แสดงเป็นไฟล์

นี่เป็นผลงานจาก Daniel Durante จึงกลายเป็นหนึ่งในผู้ชนะการแข่งขันประจำสัปดาห์ของเรา: «แบ่งปันสิ่งที่คุณรู้เกี่ยวกับ Linux«. ขอแสดงความยินดี Daniel!

อุปกรณ์ใดที่ / dev / null สอดคล้องกับ?

สำหรับวัตถุประสงค์ในทางปฏิบัติลองนึกภาพถังขยะหลุมก้นบึ้งหรืออวกาศที่ทิ้งสิ่งของโดยไม่สามารถกู้คืนได้ (ไม่ว่าพวกนาซ่าจะพยายามแค่ไหนก็ตาม)

แต่ถ้าฉันมีคำสั่งเช่น rm อยู่แล้วทำไมฉันถึงต้องการลบสิ่งใหม่ ๆ

เนื่องจากวิธีการทำงานของ“ หลุมดำ” แตกต่างกันอย่างสิ้นเชิงคุณจะไปเกี่ยวกับการแทนที่เอาต์พุตมาตรฐานของข้อผิดพลาดในคำสั่งภายในเชลล์สคริปต์ที่รันไทม์ได้อย่างไร นี่คือที่ที่ / dev / null เข้ามา

มาดูตัวอย่างกันเลย

เราได้สร้างไฟล์ที่เรียกว่าการทดสอบที่มีสตริง "Hello World" หากเราต้องการแสดงเนื้อหาของไฟล์นั้นในบรรทัดคำสั่งเราสามารถทำได้ด้วยวิธีต่อไปนี้:

user @ laptop: ~ $ cat test
สวัสดีชาวโลก

หากไฟล์ไม่มีอยู่หรือถูกตั้งชื่อเป็นการทดสอบ (โดยมี 's' ต่อท้าย) เราจะได้รับข้อผิดพลาดต่อไปนี้ในคอนโซล:

user @ laptop: ~ $ cat การทดสอบ
cat: การทดสอบ: ไม่มีไฟล์หรือไดเร็กทอรี

เราจะทำอย่างไรเพื่อหลีกเลี่ยงข้อความแสดงข้อผิดพลาด เพียงแค่เปลี่ยนทิศทางผลลัพธ์ของคำสั่งในกรณีที่มีข้อผิดพลาดไปยัง "ถังขยะ" นั่นคือ / dev / null

เราจะระบุอย่างไรในกรณีที่เกิดข้อผิดพลาด? ที่นี่คุณป้อนค่าอินพุตเอาต์พุตและข้อผิดพลาดมาตรฐานสำหรับโปรแกรม: STDIN, STDOUT และ STDERR (ซึ่งสามารถแทนที่ได้ด้วย 0, 1 และ 2 ตามลำดับ) ด้วยวิธีนี้ถ้าเราใส่ ...

user @ laptop: ~ $ cat การทดสอบ 2> / dev / null
ผู้ใช้ @ แล็ปท็อป: ~ $

…เราจะเห็นว่าข้อความแสดงข้อผิดพลาดจะไม่ถูกสร้างขึ้นบนคอนโซล

คุณต้องระวังเพราะไวยากรณ์เป็นสิ่งสำคัญ: ระหว่างอักขระ 2 และ> ไม่ควรมีช่องว่าง มิฉะนั้นจะให้สิ่งต่อไปนี้:

user @ laptop: ~ $ cat การทดสอบ 2> / dev / null
cat: การทดสอบ: ไม่มีไฟล์หรือไดเร็กทอรี
cat: 2: ไม่มีไฟล์หรือไดเร็กทอรี

ในทางตรงกันข้ามช่องว่างระหว่าง> และ / dev / null จะไม่ส่งผลเสียต่อผลลัพธ์

นอกจากนี้เรายังสามารถใช้การเปลี่ยนเส้นทางข้อผิดพลาดตัวอย่างเช่นเพื่อจับข้อผิดพลาดในไฟล์บันทึกดังต่อไปนี้:

user @ laptop: ~ $ cat การทดสอบ 2> err.log

อีกกรณีที่น่าสนใจคือการรวบรวมผลลัพธ์ในไฟล์อื่นตราบเท่าที่ไม่มีข้อผิดพลาดเกิดขึ้นซึ่งเราจะใส่:

user @ laptop: ~ $ cat test 1> output_result 2> err.log

ในที่สุดก็เป็นไปได้ที่จะใส่นิพจน์«> / dev / null 2> & 1 »ซึ่งเอาต์พุตมาตรฐานและเอาต์พุตข้อผิดพลาดจะถูกรวมเข้าด้วยกันโดยเปลี่ยนเส้นทางเพื่อไม่ให้ได้รับข้อมูลเอาต์พุต


แสดงความคิดเห็นของคุณ

อีเมล์ของคุณจะไม่ถูกเผยแพร่ ช่องที่ต้องการถูกทำเครื่องหมายด้วย *

*

*

  1. ผู้รับผิดชอบข้อมูล: Miguel ÁngelGatón
  2. วัตถุประสงค์ของข้อมูล: ควบคุมสแปมการจัดการความคิดเห็น
  3. ถูกต้องตามกฎหมาย: ความยินยอมของคุณ
  4. การสื่อสารข้อมูล: ข้อมูลจะไม่ถูกสื่อสารไปยังบุคคลที่สามยกเว้นตามข้อผูกพันทางกฎหมาย
  5. การจัดเก็บข้อมูล: ฐานข้อมูลที่โฮสต์โดย Occentus Networks (EU)
  6. สิทธิ์: คุณสามารถ จำกัด กู้คืนและลบข้อมูลของคุณได้ตลอดเวลา

  1.   กุยอิกนาซิโออิกนาซิโอ dijo

    อ่า แต่หนึ่งในยูทิลิตี้ที่ใช้มากที่สุดที่ / dev / null ขาดหายไปซึ่งก็คือการล้างไฟล์: $ cat / dev / null> file.log ด้วยวิธีนี้ไฟล์ file.log จะว่างเปล่า เพิ่มเลย!

    1.    เอดูอาร์โดเอช dijo

      มันเป็นคำอธิบายที่ชัดเจนที่เขากำลังมองหา
      ฉันสนับสนุนการเคลื่อนไหวเพื่อเพิ่ม =)

      Saludos!

  2.   พอล dijo

    สวัสดีก่อนอื่นบทความดีมาก! อย่างที่สองฉันต้องการมีส่วนร่วมกับลิงก์นี้ในหัวข้อนี้ cron job ใน php จาก Cpanel และขอแสดงความยินดีครั้งที่สามสำหรับบล็อก!

  3.   พอล dijo

    บทความที่ดีเกี่ยวกับ dev / null น่าเสียดายที่ฉันคิดว่าฉันแสดงความคิดเห็นผิดพลาดในที่ที่ไม่ถูกต้องมาก่อน! ฉันขอโทษ

  4.   ไม่ระบุชื่อ dijo

    ขอบคุณการสนับสนุนที่ดี

  5.   เสื้อ dijo

    สวัสดีฉันได้รับการโจมตีว่างเปล่า ฉันใช้ andrirc และได้รับชื่อเล่นส่วนตัวของฉันด้วยคำว่า Null 2 วินาทีต่อมาโปรแกรมก็ปิดลงฉันได้อ่านและจากสิ่งที่ฉันเห็นสิ่งนี้สามารถทำได้โดยเชลล์เท่านั้นไม่ใช่บุคคลภายนอก ฉันพยายามละเว้นตัวเอง / ไม่สนใจ -lrpcntikd และไม่มีอะไรทำให้ฉันประหลาดใจที่คำสั่งยังคงมา หากคุณมีวิธีใดในการพยายามบล็อกฉันจะขอบคุณ ไชโย

  6.   โซเฟียมาร์ติเนซ dijo

    จะเกิดอะไรขึ้นถ้าเมื่อเรียกใช้ประโยคสัญลักษณ์> ไม่ได้ถูกวางไว้?

    ใครช่วยแนะนำฉันได้ไหม

  7.   ศูนย์ dijo

    สวัสดีตอนเช้า ฉันได้ติดตั้ง Debian netinst ใน ACER Extensa 5620Z – 32 บิตแล้ว เมื่อการติดตั้งจาก USB เสร็จสิ้นและ pendrive จะถูกลบออกเพื่อให้บูตจากฮาร์ดดิสก์ ระบบที่เธอถามฉัน:
    เข้าสู่ระบบเดเบียน: xxxxxxxxx (ตกลง)
    รหัสผ่าน: xxxxxxxxx (ตกลง)
    ไม่มี@debian:~$ ???? นี่คืออะไร? ฉันควรใส่อะไรที่นั่น?

    หากไม่มีคำสั่งนี้ ฉันไม่สามารถดำเนินการบูตระบบต่อได้
    คุณสามารถช่วยฉันได้ไหม? ฉันไม่รู้ว่าควรทำอย่างไรต่อไป
    ขอบคุณมาก. ขอแสดงความนับถืออย่างสูง.