Εάν έχουμε ήδη κάποιες έννοιες σχετικά με το δέντρο καταλόγων GNU / Linux, θα πρέπει τουλάχιστον να είμαστε εξοικειωμένοι με το / dev / reference, το οποίο ουσιαστικά είναι όπου όλα τα αρχεία σχετίζονται με συσκευές υλικού.
Αν κοιτάξουμε στον κατάλογο / dev / θα δούμε ένα "αρχείο" που ονομάζεται μηδέν, αλλά αν θέλουμε να το ανοίξουμε για να δούμε το περιεχόμενό του, το σύστημα θα μας πει ότι δεν είναι δυνατό, αφού δεν είναι συνηθισμένο περιεχόμενο. Έχω εσωκλείσει το αρχείο λέξεων επειδή, όπως γνωρίζετε όλοι για το Linux όλα (υλικό και λογισμικό) αντιπροσωπεύονται ως αρχείο. |
Σε ποια συσκευή αντιστοιχεί / dev / null;
Για πρακτικούς σκοπούς, φανταστείτε ένα δοχείο σκουπιδιών, ένα απύθμενο λάκκο ή ένα διάστημα στο οποίο μπορείτε να ρίξετε οτιδήποτε χωρίς τη δυνατότητα ανάκτησής του (ανεξάρτητα από το πόσο σκληρά προσπαθούν τα παιδιά από τη NASA)
Αλλά αν έχω ήδη εντολές όπως rm, γιατί θέλω να διαγράψω κάτι νέο;
Επειδή ο τρόπος με τον οποίο λειτουργούν και οι δύο "μαύρες τρύπες" είναι εντελώς διαφορετικός: πώς θα ξεπεράσατε την τυπική έξοδο ενός σφάλματος σε μια εντολή σε ένα σενάριο κελύφους κατά το χρόνο εκτέλεσης; Εδώ μπαίνει το / dev / null.
Ας το δούμε με ένα παράδειγμα.
Έχουμε δημιουργήσει ένα αρχείο που ονομάζεται δοκιμές που περιέχει τη συμβολοσειρά "Hello World". Εάν θέλουμε να αντιπροσωπεύσουμε το περιεχόμενο αυτού του αρχείου στη γραμμή εντολών, θα μπορούσαμε να το κάνουμε με τον ακόλουθο τρόπο:
user @ laptop: ~ $ δοκιμή γάτας
Γειά σου Κόσμε
Εάν το αρχείο δεν υπήρχε ή ονομαζόταν δοκιμές (με 's' στο τέλος), θα λάβουμε το ακόλουθο σφάλμα στην κονσόλα:
user @ laptop: ~ $ δοκιμές γάτας
cat: testing: Το αρχείο ή ο κατάλογος δεν υπάρχει
Τι θα μπορούσαμε να κάνουμε για να αποφύγουμε το μήνυμα σφάλματος; Λοιπόν, απλώς ανακατευθύνετε την έξοδο της εντολής, σε περίπτωση σφάλματος, σε "κάδο απορριμμάτων", δηλαδή στο / dev / null
Πώς το ορίζουμε σε περίπτωση σφάλματος; Εδώ εισάγετε τις τυπικές τιμές εισόδου, εξόδου και σφάλματος για ένα πρόγραμμα: STDIN, STDOUT και STDERR (τα οποία μπορούν να αντικαταστήσουν τα 0, 1 και 2 αντίστοιχα). Με αυτόν τον τρόπο, αν βάλουμε ...
user @ laptop: ~ $ cat testing 2> / dev / null
χρήστης @ φορητός υπολογιστής: ~ $
… Θα δούμε ότι το μήνυμα σφάλματος δεν θα δημιουργηθεί στην κονσόλα.
Πρέπει να είστε προσεκτικοί γιατί η σύνταξη είναι απαραίτητη: μεταξύ των χαρακτήρων 2 και> δεν πρέπει να υπάρχει κενό. Διαφορετικά, θα δώσει τα εξής:
user @ laptop: ~ $ cat testing 2> / dev / null
cat: testing: Το αρχείο ή ο κατάλογος δεν υπάρχει
cat: 2: Το αρχείο ή ο κατάλογος δεν υπάρχει
Αντίθετα, ένα διάστημα μεταξύ> και / dev / null δεν θα επηρεάσει αρνητικά το αποτέλεσμα.
Θα μπορούσαμε επίσης να χρησιμοποιήσουμε την ανακατεύθυνση σφαλμάτων, για παράδειγμα, για την καταγραφή σφαλμάτων σε ένα αρχείο καταγραφής ως εξής:
user @ laptop: ~ $ cat testing 2> err.log
Μια άλλη ενδιαφέρουσα περίπτωση θα ήταν η συλλογή αποτελεσμάτων σε άλλο αρχείο, εφόσον δεν υπάρχει σφάλμα, για το οποίο θα θέλαμε:
user @ laptop: ~ $ cat test 1> output_result 2> err.log
Τέλος, αξίζει να βάλετε την έκφραση «> / dev / null 2> & 1» στην οποία συνδυάζονται η τυπική έξοδος και η έξοδος σφάλματος, ανακατευθύνοντάς τα έτσι ώστε σε καμία περίπτωση να μην ληφθούν οι πληροφορίες εξόδου.
8 σχόλια, αφήστε τα δικά σας
Αχ, αλλά λείπει ένα από τα πιο χρησιμοποιημένα βοηθητικά προγράμματα που / dev / null, το οποίο αδειάζει αρχεία: $ cat / dev / null> file.log Με αυτόν τον τρόπο, το αρχείο file.log θα είναι κενό Προσθέστε το!
Ήταν ακριβώς η εξήγηση που έψαχνε.
Υποστηρίζω την κίνηση για να το προσθέσω =)
Saludos!
Γεια σας, πρώτα απ 'όλα το άρθρο είναι πολύ καλό! το δεύτερο θα ήθελα να συνεισφέρω κάτι με αυτόν τον σύνδεσμο στο θέμα cron δουλειά στο php από την Cpanel και τα τρίτα συγχαρητήρια για το blog!
Ωραίο άρθρο για το dev / null, τι κρίμα που νομίζω ότι σχολίασα λάθος σε λάθος μέρος πριν! ΖΗΤΩ συγγνωμη
καλή συμβολή, χάρη
Χαιρετίσματα δέχομαι μηδενική επίθεση. Χρησιμοποιώ το andrirc και παίρνω ένα ιδιωτικό από το ψευδώνυμό μου με τη λέξη Null. 2 δευτερόλεπτα αργότερα κλείνει το πρόγραμμα που έχω διαβάσει και από αυτό που βλέπω αυτό μπορεί να γίνει μόνο από τη Shell, όχι από κάποιον εξωτερικό. Προσπάθησα να αγνοήσω τον εαυτό μου / να αγνοήσω -lrpcntikd και Τίποτα δεν με εκπλήσσει η εντολή συνεχίζει. Εάν έχετε κάποιο τρόπο να προσπαθήσετε να το αποκλείσετε, θα το εκτιμούσα. Στην υγειά σας
Τι συμβαίνει εάν κατά την εκτέλεση της πρότασης το σύμβολο> δεν έχει τοποθετηθεί;
Θα μπορούσε κάποιος να με καθοδηγήσει παρακαλώ;
Καλημέρα, έχω εγκαταστήσει το Debian netinst στο ACER Extensa 5620Z – 32 bit. Μόλις ολοκληρωθεί η εγκατάσταση από USB και αφαιρεθεί το pendrive ώστε να εκκινήσει από τον σκληρό δίσκο (μην επανεγκαταστήσετε από το στυλό) αλλά τη στιγμή της εκκίνησης το σύστημα που με ρωτάει:
Σύνδεση στο debian: xxxxxxxx (οκ)
Κωδικός πρόσβασης: xxxxxxxx (εντάξει)
nil@debian:~$ ???? τι είναι αυτό? Τι να βάλω εκεί;
Χωρίς αυτήν την εντολή δεν μπορώ να προχωρήσω στην εκκίνηση του συστήματος.
Μπορείς να με βοηθήσεις? Δεν ξέρω πώς να συνεχίσω.
Ευχαριστώ πολύ. Θερμούς χαιρετισμούς.