Γράφοντας σελιδοδείκτες του linux. Τα σενάρια είναι απλά

Σας παρουσιάζουμε ένα σεμινάριο script bash που υποθέτει ότι η γνώση bash σας είναι ίση ή κοντά στο μηδέν. Υποσχόμαστε, με τη βοήθεια αυτού του άρθρου, θα καταλάβετε ότι η δημιουργία scripts bash είναι εξαιρετικά απλή. Ωστόσο, εάν σε αυτό το άρθρο εξακολουθείτε να μην βρείτε απαντήσεις σε όλες τις ερωτήσεις σας (καλά, ή για άλλους λόγους χρειάζεστε τη βοήθεια πηγών τρίτων), μπορείτε να επικοινωνήσετε απευθείας με τον διαχειριστή μας :)

Ας δούμε λοιπόν να μαθαίνουμε το κέλυφος εντολών Bash.
Ας ξεκινήσουμε την εκπαίδευσή μας με ένα απλό σενάριο "Hello World".

1. Hello World script bash
  Πρώτα πρέπει να μάθετε πού είναι ο μεταφραστής. Για να το κάνετε αυτό, πληκτρολογήστε την ακόλουθη εντολή:
  $ που bash
Ανοίξτε τον αγαπημένο σας επεξεργαστή κειμένου και δημιουργήστε ένα αρχείο που ονομάζεται hello_world.sh. Σε αυτό το αρχείο, αποθηκεύστε τις ακόλουθες γραμμές:
  #! / bin / bash # δηλώστε μια μεταβλητή τύπου STRING STRING = "Hello World" # εκτυπώστε τη μεταβλητή στην οθόνη echo $ STRING
ΣημείωσηΚάθε σενάριο bash σε αυτό το σεμινάριο ξεκινά με μια ακολουθία χαρακτήρων "#!" Που δεν ερμηνεύεται ως σχόλιο!
Μεταβείτε στον κατάλογο όπου αποθηκεύσατε το αρχείο hello_world.sh και κάντε αυτό το αρχείο εκτελέσιμο:
  $ chmod + x hello_world.sh
Λοιπόν, τώρα είστε πλήρως προετοιμασμένοι να δημιουργήσετε το πρώτο σας script bash:
  ./hello_world.sh

2. Ένα απλό script bash για backup:
  #! / bin / bash tar -czf myhome_directory.tar.gz / home / linuxconfig

3. Μεταβλητές
Σε αυτό το παράδειγμα, θα δηλώσουμε μια απλή μεταβλητή bash και θα την εμφανίσουμε με την εντολή echo.
  #! / bin / bash STRING = "HELLO WORLD !!!" echo $ STRING
Σενάριο για εφεδρικά αντίγραφα και μεταβλητές:
  #! / bin / bash OF = myhome_directory _ $ (ημερομηνία +% Y% m% d) .tar.gz tar -czf $ OF / home / linuxconfig

3.1. Παγκόσμιες και τοπικές μεταβλητές
  # δηλώνει μια παγκόσμια μεταβλητή # Αυτή η μεταβλητή είναι παγκόσμια και μπορεί να χρησιμοποιηθεί οπουδήποτε στη δέσμη εντολών VAR = "global variable" = "τοπική μεταβλητή" echo $ VAR) echo $ VAR bash # Σημειώστε ότι η παγκόσμια μεταβλητή δεν έχει αλλάξει # "local" είναι μια αποκλειστική λέξη στο bash echo $ VAR

4. Μετάβαση των επιχειρημάτων σε ένα σενάριο Bash
#! / bin / bash # χρησιμοποιήστε μεταβλητές που έχουν οριστεί προηγουμένως για να αποκτήσετε πρόσβαση στα περάσματα που έχουν περάσει για να αποκτήσετε πρόσβαση στα πεπραγμένα επιχειρήματα # παράμετροι οθόνης echo $ 1 $ 2 $ 3 "-\u003e echo $ 1 $ 2 $ 3" ​​# Μπορούμε να αποθηκεύσουμε τα επιχειρήματα από τη γραμμή εντολών bash σε μια ειδική args = (" [προστατευμένο με ηλεκτρονικό ταχυδρομείο]") # ηχητικά επιχειρήματα στο κέλυφος echo $ (args) $ (args) $ (args)" -\u003e args = [προστατευμένο με ηλεκτρονικό ταχυδρομείο]"), echo $ (args) $ (args) $ (args)" # χρήση [προστατευμένο με ηλεκτρονικό ταχυδρομείο]   για να εξάγει όλα τα επιχειρήματα ηχώ ταυτόχρονα [προστατευμένο με ηλεκτρονικό ταχυδρομείο]   "-\u003e echo [προστατευμένο με ηλεκτρονικό ταχυδρομείο]"# # χρησιμοποιήστε τη μεταβλητή $ # για να εμφανίσετε # τον αριθμό των μεταβλητών που διαβιβάστηκαν στο echo script bash Αριθμός επιχειρημάτων που πέρασαν: $ #" -\u003e echo Αριθμός πετυχημένων επιχειρημάτων: $ # "/arguments.sh Bash Scripting Tutorial

5. Εκτελέστε εντολές κελύφους με bash
  #! / bin / bash # χρήση "` `` backquotes για εκτέλεση εντολών κελύφους echo `uname -o` # εντολές bash που επικαλέστηκαν που κλήθηκαν χωρίς εισαγωγικά echo uname -o

6. Ανάγνωση εισόδου χρήστη
  #! / bin / bash echo -e "Γεια σας, παρακαλώ πληκτρολογήστε τη λέξη: \\ c" διαβάσετε τη λέξη echo "Η λέξη που εισάγετε μπορεί να είναι: $ η λέξη" echo -e "Μπορείτε να εισάγετε δύο λέξεις;" διαβάσετε το word1 word2 echo " Εδώ είναι η εισαγωγή σας: \\ "$ word1 \\" \\ "$ word2 \\" "echo -e" Πώς αισθάνεστε για scripting bash; "#Η εντολή Read αποθηκεύει απαντήσεις στην προεπιλεγμένη μεταβλητή $ REPLY read echo" Είπα $ REPLY, εγώ "χαίρομαι που το ακούω αυτό! "echo -e" Ποια είναι τα αγαπημένα σας χρώματα; "# -a επιτρέπει στην εντολή ανάγνωσης να αποθηκεύει πολλαπλές τιμές στην ανάγνωση -α χρώματα echo array" Τα αγαπημένα μου χρώματα είναι επίσης $ (χρώματα), $ (χρώματα) και $ (χρώματα) :-) "

7. Εντολή παγίδευσης Bash
  #! / bin / bash # παγίδα trap bashtrap INT εντολή # bash-screen-clear εντολή clear? # η λειτουργία παγίδευσης bash εκτελείται όταν πατηθεί το CTRL-C, το bash εμφανίζει το μήνυμα =\u003e Εκτέλεση παγίδας bash! bashtrap () (echo "CTRL + C Εντοπίστηκε! ... εκτέλεση trap bash!") # για τιμές από 1/10 έως 10/10 για a σε `seq 1 10`; κάνουμε echo "$ a / 10 to Exit". ύπνος 1; έγινε ηχώ "Exit Bash Trap Example !!!"

8. Arrays
8.1. Δηλώνοντας μια απλή συστοιχία bash
  #! / bin / bash # δηλώνει μια σειρά από 3 στοιχεία ARRAY = ("Debian Linux" "Redhat Linux" " Ubuntu linux") # παίρνουν τον αριθμό των στοιχείων στον πίνακα ELEMENTS = $ (# ARRAY [@]) # εξάγει κάθε στοιχείο του πίνακα # για ένα δεδομένο εύρος αριθμών για στοιχεία ((i = 0; i

8.2. Εισαγωγή αρχείου στη συστοιχία bash
  #! / bin / bash # δηλώνει -a ARRAY array δηλώνει # output filedescriptor 10 στον stdin exec 10

Εκτέλεση του script bash με έξοδο στην εκτέλεση αρχείου με έξοδο:
linuxconfig.org $ cat bash.txt Οδηγός εκμάθησης Bash Scripting Οδηγός linuxconfig.org $ ./bash-script.sh bash.txt Αριθμός στοιχείων: 4 Bash Scripting Tutorial Οδηγός linuxconfig.org $

9. Γραμμές Bash με if / else / fi
9.1. Απλή έκφραση Bash με if / else
Δώστε προσοχή στους χώρους σε παρένθεση [και]! Χωρίς αυτούς τους χώρους, το σενάριο δεν θα λειτουργήσει.
  #! / bin / bash directory = "./ BashScripting" # bash ελέγξτε αν υπάρχει κατάλογος [-d $ directory]; τότε echo "Κατάλογος υπάρχει" άλλο echo "Κατάλογος δεν υπάρχει" fi

9.2. Ενσωματωμένη αν / αλλιώς
  #! / bin / bash # δηλώστε την επιλεγμένη μεταβλητή και αντιστοιχίστε τις τιμές 4 choice = 4 # Output to stdout echo "1. Bash echo 2. Scripting echo 3. Tutorial echo -n Παρακαλώ επιλέξτε μια λέξη; # Επανάληψη του βρόχου ενώ η μεταβλητή είναι 4 # bash βρόχος ενώ ενώ [$ επιλογή -eq 4]? να # διαβάσει την τιμή που εισήγαγε ανάγνωση επιλογή # bash nested if / else αν [$ επιλογή -eq 1]? τότε echo "Έχετε επιλέξει λέξη: Bash" else αν [$ επιλογή -eq 2]? τότε echo "Έχετε επιλέξει λέξη: Scripting" else αν [$ επιλογή -eq 3]? τότε echo "Έχετε επιλέξει λέξη: Tutorial" else echo "Παρακαλώ κάντε μια επιλογή μεταξύ 1-3!" echo "1. Bash" echo "2. Scripting" echo "3. Tutorial" echo -n "Παρακαλώ επιλέξτε μια λέξη;" επιλογή = 4 φινίρισμα

10. Bash σύγκριση
10.1. Αριθμητικές συγκρίσεις
-lt -gt\u003e -le -ge\u003e =
-eq ==
-ne! =

  #! / bin / bash # δήλωση των ακέραιων μεταβλητών NUM1 = 2 NUM2 = 2 αν [$ NUM1 -eq $ NUM2]? τότε echo "Και οι δύο τιμές είναι ίσες" else echo "Οι τιμές ΔΕΝ είναι ίσες" fi

  #! / bin / bash # δήλωση των ακέραιων μεταβλητών NUM1 = 2 NUM2 = 1 αν [$ NUM1 -eq $ NUM2]? τότε echo "Και οι δύο τιμές είναι ίσες" else echo "Οι τιμές ΔΕΝ είναι ίσες" fi

  #! / bin / bash # δήλωση των ακέραιων μεταβλητών NUM1 = 2 NUM2 = 1 αν [$ NUM1 -eq $ NUM2]? τότε echo "Και οι δύο τιμές είναι ίσες" elif [$ NUM1 -gt $ NUM2]; τότε echo "NUM1 είναι μεγαλύτερο από NUM2" αλλιώς echo "NUM2 είναι μεγαλύτερο από NUM1" fi

10.2. Σύγκριση συμβολοσειρών
= ίσο
! = δεν είναι ίση
\u003e μεγαλύτερη τότε
-η s1 συμβολοσειρά s1 δεν είναι κενή
-z s1 Η συμβολοσειρά s1 είναι κενή

  #! / bin / bash # Δήλωση συμβολοσειρών S1 S1 = "Bash" # Δήλωση συμβολοσειρών S2 S2 = "Scripting" αν [$ S1 = $ S2]; τότε echo "Και οι δύο Strings είναι ίσες" else echo "Οι χορδές ΔΕΝ είναι ίσες" fi

  #! / bin / bash # Δήλωση συμβολοσειράς S1 S1 = "Bash" # Δήλωση συμβολοσειράς S2 S2 = "Bash" εάν [$ S1 = $ S2]; τότε echo "Και οι δύο Strings είναι ίσες" else echo "Οι χορδές ΔΕΝ είναι ίσες" fi

11. Έλεγχος αρχείου μπάσων
-b filename - μπλοκάρετε το αρχείο
-c όνομα αρχείου - το αρχείο περιέχει πρόσθετα. χαρακτήρες
-d όνομα καταλόγου - ελέγξτε την ύπαρξη ενός καταλόγου
-e όνομα αρχείου - ελέγξτε την ύπαρξη αρχείου
-f όνομα αρχείου - έλεγχος της ύπαρξης μη ευρετηρίου
-Gname Ελέγξτε εάν το αρχείο είναι το αναγνωριστικό ομάδας.
-g filename true αν υπάρχει αρχείο και είναι set-group-id.
-k κολλητικό bit όνομα αρχείου
-L όνομα αρχείου Συμβολική σύνδεση
-Ένα όνομα αρχείου είναι αληθές εάν το αρχείο είναι αναγνωριστικό χρήστη.
-r όνομα αρχείου - ελέγξτε τη διαθεσιμότητα αρχείων
-S όνομα αρχείου Ελέγξτε εάν το αρχείο είναι υποδοχή
-s όνομα αρχείου - ελέγξτε ότι το μέγεθος του αρχείου είναι μεγαλύτερο από το μηδέν
-u όνομα αρχείου Ελέγξτε εάν έχει ρυθμιστεί το αρχείο set-ser-id bit
-w όνομα αρχείου - ελέγξτε την αντικατάσταση του αρχείου
-x όνομα αρχείου - έλεγχος εκτέλεσης αρχείου
  #! / bin / bash file = "./ αρχείο" εάν [-e $ αρχείο]; τότε echo "Το αρχείο υπάρχει" else echo "Το αρχείο δεν υπάρχει" fi
Ομοίως, μπορείτε να χρησιμοποιήσετε έναν βρόχο while για να ελέγξετε για την ύπαρξη ενός αρχείου. Αυτό το σενάριο δεν θα λειτουργήσει όσο υπάρχει το αρχείο. Σημειώστε τον χειριστή άρνησης bash "!", Το οποίο αναιρεί τη λειτουργία -e.
  #! / bin / bash ενώ [! -e myfile]; do # Μην αντιδράτε ενώ δημιουργείται το αρχείο και υπάρχει ύπνος 1 γίνεται

12. Κύκλος
12.1. Bash εντολή βρόχου
  #! / bin / bash # bash βρόχος για f στο $ (ls / var /); κάνει echo $ f γίνει
Εκτελέστε το βρόχο από τη γραμμή εντολών bash:
  $ για το f σε $ (ls / var /); κάνουμε echo $ f; τελειωμένος

12.2. Bash ενώ βρόχος
  #! / bin / bash COUNT = 6 # bash βρόχος ενώ ενώ [$ COUNT -gt 0]? κάνουμε echo $ COUNT let COUNT = COUNT-1 γίνεται

12.3. Bash μέχρι τον κύκλο
  #! / bin / bash COUNT = 0 # κύκλος bash μέχρι [$ COUNT -gt 5]. κάνουμε echo $ COUNT let COUNT = COUNT + 1 γίνει

12.4. Έλεγχος βρόχου bash
Παρακάτω παρατίθεται ένα παράδειγμα βρόχου ενώ ελέγχεται από την τυπική είσοδο. Το Bash while loop λειτουργεί όσο υπάρχει μια μετάβαση από το STDOUT στο STDIN και στην εντολή ανάγνωσης.
  #! / bin / bash # αυτό το σενάριο bash θα βρει και θα αντικαταστήσει τα κενά # στα ονόματα αρχείων DIR = "." # έλεγχος του βρόχου με την εντολή ανάγνωσης bash με ανακατεύθυνση STDOUT σε # STDIN σε βρόχο while # find εντολή   δεν θα απορρίψει τα ονόματα αρχείων που περιέχουν κενά. find $ DIR -type f | ενώ το αρχείο ανάγνωσης? να κάνετε χρήση της τάξης POSIX [: space:] για να αναζητήσετε ένα κενό στο όνομα του αρχείου εάν [["$ file" = * [[::]] *]]; τότε # αντικατάσταση του χώρου με τον χαρακτήρα "_" και, επομένως, μετονομασία του αρχείου mv "$ file" `echo $ file | tr "" "_" `fi; # τέλος κατά τη διάρκεια του βρόχου

13. Λειτουργίες Bash
(echo $ 1) συνάρτηση function_C (echo $ 1) συνάρτηση function_C (echo $ 1) # συνάρτηση κλήσης # pass parameter A function_A "Λειτουργία A." function_B # λειτουργία παραμέτρου πέρασμα C λειτουργία_C "Λειτουργία C." function_D

14. Επιλογή μπάσων
  # # bash "" scripting "" tutorial "do echo" Η λέξη που έχετε επιλέξει είναι: $ word "# σταματήστε τον κύκλο, αλλιώς θα είναι άπειρη διάλειμμα που έγινε έξοδος 0

15. Αλλαγή
  "echo" 1) bash "echo" 2) perl "echo" 3) python "echo" 4) c ++ "echo" 5) Δεν ξέρω! " διαβάστε την περίπτωση? # δομή μιας απλής συνθήκης bash # σημείωση: σε αυτή την περίπτωση, $ case είναι μια μεταβλητή, η οποία δεν είναι υποχρεωμένη να ονομάζεται # εδώ ονομάζεται για παράδειγμα case $ case in 1) echo "You selected bash" ;; 2) echo "Επιλέξατε perl" ;; 3) echo "Επιλέξατε python" ;; 4) echo "Έχετε επιλέξει c + +" ;; 5) έξοδος esac

16. Αποσπάσματα στο Bash
Τα αποσπάσματα είναι ένα σημαντικό στοιχείο των scripts bash και bash. Παρακάτω θα βρείτε μερικά βασικά στοιχεία σχετικά με τη χρήση των εισαγωγικών στο bash.
16.1. Έλεγχος ειδικούς χαρακτήρες
Πριν αρχίσουμε να χρησιμοποιούμε εισαγωγικά, πρέπει να μάθουμε πώς να ξεφύγουμε από ειδικούς χαρακτήρες. Αυτή η διαδικασία θα επιτρέψει στο bash να αναγνωρίσει άμεσα τη σημασία αυτών των χαρακτήρων. Για να γίνει αυτό, πρέπει να χρησιμοποιήσουμε την αντίστροφη κάθετο "\\". Για παράδειγμα:
  #! / bin / bash # bash δήλωση μιας μεταβλητής string string BASH_VAR = "Bash Script" # έξοδος της μεταβλητής BASH_VAR echo $ BASH_VAR # αν ο ειδικός χαρακτήρας "$" διαφεύγει με το σύμβολο "\\", μπορεί να αναγνωριστεί άμεσα από την echo \\ $ BASH_VAR # υπάρχει επίσης μια ιδιαίτερη σημασία, και μπορεί να επιλυθεί με μια άλλη κάθετο "\\" echo "\\\\"

16.2. Μοναδικά αποσπάσματα
Τα μοναδικά αποσπάσματα σε bash ξεφεύγουν από την αξία όλων των ειδικών χαρακτήρων. Έτσι, οι ειδικοί χαρακτήρες θα αναγνωρίζονται κυριολεκτικά. Σε αυτή την περίπτωση, δεν μπορείτε να χρησιμοποιήσετε ένα μοναδικό απόσπασμα μέσα σε δύο ίδιες εισαγωγικές παραπομπές, ακόμα και αν κάποιος από αυτούς ξεφύγει με μια ανάστροφη κάθετο.
  #! / bin / bash # bash δήλωση μιας μεταβλητής τύπου συμβολοσειράς BASH_VAR = "Bash Script" # έξοδος της μεταβλητής BASH_VAR echo $ BASH_VAR # τιμή του spec. οι χαρακτήρες στο bash διαφεύγουν χρησιμοποιώντας απλές αναφορές "$ BASH_VAR" $ BASH_VAR ""

16.3. Διπλά εισαγωγικά
Διπλά εισαγωγικά χρησιμοποιούνται σε bash για να ξεφύγουν από όλους τους ειδικούς χαρακτήρες εκτός από "$", "\\" και "` ". Όλες οι άλλες προσφορές. οι χαρακτήρες θα αναγνωριστούν κυριολεκτικά. Σε αντίθεση με την προηγούμενη παράγραφο, τα μοναδικά αποσπάσματα μπορούν να χρησιμοποιηθούν μέσα σε διπλά εισαγωγικά. Αν χρειαστεί να χρησιμοποιήσετε ένα άλλο διπλό απόσπασμα ανάμεσα σε διπλά εισαγωγικά, μπορείτε να τα αναγνωρίσετε βασικά χρησιμοποιώντας την αντίστροφη κάθετο "\\". Για παράδειγμα:
  #! / bin / bash # bash δήλωση μιας μεταβλητής της συμβολοσειράς τύπου BASH_VAR = "Bash Script" # echo μεταβλητή BASH_VAR echo $ BASH_VAR # spec. ο χαρακτήρας και η αξία του διαφεύγουν # όταν χρησιμοποιούμε διπλά εισαγωγικά μαζί "$", "\\" και "` echo "Είναι $ BASH_VAR και \\" $ BASH_VAR \\ "χρησιμοποιώντας backticks:` date` "

16.4. Bash θωράκιση ANSI-C
Στο bash, υπάρχει και ένα άλλο είδος προβολής - ANSI-C. Όταν χρησιμοποιείτε αυτόν τον τύπο θωράκισης, οι χαρακτήρες που επισημαίνονται με μια αντίστροφη κάθετο "\\" λαμβάνουν ειδική σημασία σύμφωνα με το πρότυπο ANSI-C.
\\ a alert (bell)
\\ b backspace
\\ e ένας χαρακτήρας διαφυγής
\\ f μορφή τροφής
\\ n νέα γραμμή
την επιστροφή της μεταφοράς
\\ t οριζόντια καρτέλα
\\ vertical tab
\\\\ αντίστροφη κάθετος
\\ "ενιαίο απόσπασμα
\\ nnn οκταδική τιμή χαρακτήρων (βλ.)
\\ xnn δεκαεξαδική τιμή των χαρακτήρων (βλέπε)

Ο προσδιορισμός της ansi-c bash-θωράκισης: $ "". Παράδειγμα:
  #! / bin / bash # για παράδειγμα, χρησιμοποιήσαμε \\ n για τη νέα γραμμή, \\ x40 για την δεκαεξαδική τιμή @ # και \\ 56 για την οκταδική τιμή. echo $ "web: www.linuxconfig.org \\ nemail: web \\ x40linuxconfig \\ 56org"

17. Αριθμητικές πράξεις
17.1. Παράδειγμα προσθήκης με bash
  #! / bin / bash ας RESULT1 = $ 1 + $ 2 echo $ 1 + $ 2 = $ RESULT1 "-\u003e #let RESULT1 = $ 1 + $ 2" δηλώνει -i RESULT2 RESULT2 = $ 1 + $ 2 echo $ 1 + $ 2 $ $ RESULT2 # δηλώνει -i RESULT2, RESULT2 = $ 1 + $ 2 "echo $ 1 + $ 2 = $ ($ 1 + $ 2))" -\u003e # $ ($ 1 + $ 2)

17.2. Αριθμητική βάση
#! / Bin / bash echo "# αφήσει #" Εκτός # bash ας ΠΡΟΣΘΗΚΗ = 3 + 5 echo "3 + 5 =" $ ΠΡΟΣΘΗΚΗ # bash αφαίρεση ας αφαίρεση = 7-8 echo "7 με 8 =" $ αφαίρεση # bash πολλαπλασιασμός ας πολλαπλασιασμός = 5 * 8 echo "5 * 8 =" $ πολλαπλασιασμός διαίρεση # bash ας διαίρεση = 4/2 echo "4/2 =" $ DIVISION # bash μέτρο ας όριο = 9% 4 echo "9% 4 =" $ ΣΥΝΤΕΛΕΣΤΗΣ # bash ύψωση σε δύναμη ας POWEROFTWO = 2 ** 2 echo "2 ^ 2 =" $ POWEROFTWO echo "# bash αριθμητική Επέκταση #" # υπάρχουν δύο ονομασίες μορφή αριθμητικές εκφράσεις: $ [έκφραση] # και $ ((έκφραση # )) - μπορείτε να επιλέξετε εκείνη που σας αρέσει περισσότερο echo 4 + 5 = $ ((4 + 5)) echo 7 - 7 = $ [7 - 7] echo 4 x 6 = $ ((3 * 2) 6/3 = $ ((6/3)) echo 8% 7 = $ ((8% 7)) echo 2 ^ 8 = $ [2 ** 8] echo "# Δηλώστε #" echo -e " αριθμοί \\ c "#cc αναγνώριση ωδή διαβάσετε NUM2 NUM1 δηλώνουν -i αποτέλεσμα αποτέλεσμα = $ NUM1 + $ NUM2 echo "Το αποτέλεσμα είναι: αποτελέσματος $" # bash για να μετατρέψετε το δυαδικό αριθμό 10001 αποτέλεσμα = 2 # 10001 echo $ αποτέλεσμα # την bash για να μετατρέψετε οκταδικό 16 αποτέλεσμα = 8 # 16 echo $ αποτέλεσμα # bash μετατρέψτε δεκαεξαδικό αριθμό 0xE6A αποτέλεσμα = 16 # E6A echo $ αποτέλεσμα

17.3. Στρογγυλοποίηση με κυμαινόμενο σημείο
  # / Bin / bash # απόκτηση κινητής υποδιαστολής floating_point_number = 3,3446 echo $ floating_point_number # στρογγυλοποίηση των αριθμών κινητής υποδιαστολής χρησιμοποιώντας ένα bash για bash_rounded_number σε $ (printf% .0f $ floating_point_number) !; echo "Στρογγυλοποιημένος αριθμός με bash:" $ bash_rounded_number γίνει

17.4. Υπολογισμοί κυμαινόμενου σημείου Bash
  #! / Bin / bash # υλοποίηση ενός απλού υπολογιστή με linux να bash echo «Enter είσοδος:» διαβάσει # userinput εμφανίζει το αποτέλεσμα με δύο χαρακτήρες μετά την υποδιαστολή echo «Αποτέλεσμα με 2 ψηφία μετά την υποδιαστολή:» echo «κλίμακα = 2? $ (Userinput ) "| bc # εμφάνιση του αποτελέσματος με δέκα δεκαδικά ψηφία echo "Αποτέλεσμα με 10 ψηφία μετά την υποδιαστολή:" echo "scale = 10; $ (userinput)" | bc # εξάγει το αποτέλεσμα ως στρογγυλοποιημένο ακέραιο ακέραιο "Αποτέλεσμα ως ακέραιος ακέραιος:" echo $ userinput | bc

18. Ανακατευθύνσεις
18.1. STDOUT από το σενάριο bash στο STDERR
  #! / bin / bash echo "Ανακατεύθυνση αυτού του STDOUT στο STDERR" 1\u003e & 2
Για να ελέγξετε την ανακατεύθυνση STDOUT στο STDERR, μπορείτε να ανακατευθύνετε την έξοδο της δέσμης ενεργειών σε ένα αρχείο:

18.2. STDERR από script script σε STDOUT
  #! / bin / bash γάτα $ 1 2\u003e & 1
Για να ελέγξετε την ανακατεύθυνση STDERR i STDOUT, μπορείτε να ανακατευθύνετε την έξοδο της δέσμης ενεργειών σε ένα αρχείο:

18.3. Stdout στην οθόνη
Ένας απλός τρόπος για να ανακατευθύνετε το STDOUT είναι απλά να χρησιμοποιήσετε οποιαδήποτε εντολή, αφού από προεπιλογή το STDOUT εμφανίζεται αυτόματα στην οθόνη. Αλλά πρώτα δημιουργήστε το αρχείο "file1":
  $ αφής αρχείο1 $ ls αρχείο1 αρχείο1
Όπως μπορείτε να δείτε από το παραπάνω παράδειγμα, η εκτέλεση της εντολής ls καλεί το STDOUT, το οποίο εμφανίζεται από προεπιλογή στην οθόνη.

18.4. Stdout στο αρχείο
Για να αποκλείσετε την προεπιλεγμένη συμπεριφορά του STDOUT, μπορούμε να χρησιμοποιήσουμε το "\u003e" για να ανακατευθύνουμε την έξοδο σε ένα αρχείο:
  $ ls αρχείο1\u003e STDOUT $ cat STDOUT αρχείο1

18.5. Stderr να αρχειοθετήσει
Από προεπιλογή, το STDERR εμφανίζεται στην οθόνη:
  $ ls file1 STDOUT $ ls file2 ls: δεν είναι δυνατή η πρόσβαση στο αρχείο2: Δεν υπάρχει τέτοιο αρχείο ή κατάλογος
Στο παρακάτω παράδειγμα, ανακατευθύνουμε το τυπικό σφάλμα (stderr) σε ένα αρχείο και stdout, όπως από προεπιλογή, στην οθόνη. Λάβετε υπόψη ότι το STDOUT εμφανίζεται στην οθόνη και το STDERR γράφεται στο αρχείο με το όνομα STDERR:
  $ ls αρχείο1 STDOUT $ ls αρχείο1 αρχείο2 2\u003e STDERR αρχείο1 $ cat STDERR ls: δεν μπορεί να έχει πρόσβαση στο αρχείο2: Δεν υπάρχει τέτοιο αρχείο ή κατάλογος

18.6. STDOUT στο STDERR
Είναι επίσης δυνατή η ανακατεύθυνση των STDOUT και STDERR σε ένα αρχείο. Στο ακόλουθο παράδειγμα, θα ανακατευθύνουμε το STDOUT στο ίδιο περιγραφικό με το STDERR. Τόσο το STDOUT όσο και το STDERR θα μεταφερθούν στο αρχείο "STDERR_STDOUT".
  $ ls αρχείο1 STDERR STDOUT $ ls αρχείο1 αρχείο2 2\u003e STDERR_STDOUT 1\u003e & 2 $ γάτα STDERR_STDOUT ls: δεν είναι δυνατή η πρόσβαση στο αρχείο2: Δεν υπάρχει τέτοιο αρχείο ή αρχείο αρχείου1
Τώρα το αρχείο STDERR_STDOUT περιέχει τόσο STDOUT όσο και STDERR.

18.7. STDERR στο STDOUT
Το παραπάνω παράδειγμα μπορεί να μετατραπεί σε ανακατεύθυνση STDERR στο ίδιο περιγραφικό με το SDTOUT:
  $ ls αρχείο1 STDERR STDOUT $ ls αρχείο1 αρχείο2\u003e STDERR_STDOUT 2\u003e & 1 $ cat STDERR_STDOUT ls: δεν μπορεί να έχει πρόσβαση στο αρχείο2: Δεν υπάρχει τέτοιο αρχείο ή αρχείο καταλόγου1

18.8. STDERR και STDOUT να αρχειοθετήσουν
Και τα δύο κορυφαία παραδείγματα ανακατευθύνουν το STDOUT και το STDERR σε ένα αρχείο. Υπάρχει ένας άλλος τρόπος για να επιτευχθεί το ίδιο αποτέλεσμα:
  $ ls file1 STDERR STDOUT $ ls αρχείο1 αρχείο2 &\u003e STDERR_STDOUT $ cat STDERR_STDOUT ls: δεν είναι δυνατή η πρόσβαση στο αρχείο2: Δεν υπάρχει τέτοιο αρχείο ή φάκελος αρχείων1
ή
  ls αρχείο1 αρχείο2\u003e & STDERR_STDOUT $ cat STDERR_STDOUT ls: δεν είναι δυνατή η πρόσβαση στο αρχείο2: Δεν υπάρχει τέτοιο αρχείο ή αρχείο καταλόγου1

Αυτό το άρθρο είναι μια ερασιτεχνική μετάφραση ενός άρθρου με

Οποιοδήποτε σύστημα για αρχάριους linux admin   Αργά ή γρήγορα αντιμέτωποι με ένα τέτοιο πράγμα όπως " γραφή", Είτε είναι ένα από τα σενάρια εκκίνησης όπως /etc/rc.d/rc   ή ένα σενάριο διαμόρφωσης γραμμένο από έναν προγραμματιστή λογισμικού διαμόρφωση. Σε αυτό το άρθρο θα προσπαθήσω να δείξω ότι γράφοντας σενάρια σε κέλυφος ακόμη και ένας αρχάριος στον κόσμο του Linux δεν είναι κάτι το συνηθισμένο και αρκετά ικανό.

Ας ξεκινήσουμε με το γεγονός ότι καταλαβαίνουμε τι κρύβεται πίσω από τους αγγλικούς όρους κέλυφοςκαι γραφή. Shellή ένα κέλυφος, όπως αυτός ο όρος μεταφράζεται μερικές φορές, είναι ένας διερμηνέας εντολών, μια διεπαφή μεταξύ του χρήστη και του λειτουργικού συστήματος, του πυρήνα του. Αλλά εκτός από αυτό, είναι επίσης μια ισχυρή γλώσσα προγραμματισμού και scripting. Περιέχει τις δικές του επίσημες λέξεις και δομές ελέγχου και σας επιτρέπει να γράφετε προγράμματα σε αυτό. Ένα τέτοιο πρόγραμμα δέσμης ενεργειών που ονομάζεται ένα σενάριο, μπορούν να συνδυάσουν κλήσεις συστήματος και εντολές λειτουργικό σύστημα, καθώς και εξωτερικές υπηρεσίες κοινής ωφέλειας, δημιουργώντας ένα ισχυρό εργαλείο για τη διαχείριση του συστήματος.

Ένα από τα καθήκοντα της διαχείρισης του συστήματος είναι δημιουργήστε αντίγραφα ασφαλείας   σημαντικές πληροφορίες. Επομένως, ας εξετάσουμε ένα παράδειγμα ενός σεναρίου που υλοποιεί εφεδρικές πληροφορίες.

Ξεκινώντας

Επομένως, πρώτα απ 'όλα, πρέπει να κατανοήσουμε τη δομή του σεναρίου. Δεν είναι μεγάλη υπόθεση. Σε γενικές γραμμές, το απλούστερο σενάριο είναι απλώς μια λίστα εντολών συστήματος. Για παράδειγμα:

Echo Αυτό είναι μόνο παράδειγμα
whoami
uname -a

Αυτές οι εντολές συνδυάζονται σε ένα αρχείο. Αλλά το κέλυφος θα πρέπει να γνωρίζει ότι θα πρέπει να επεξεργαστεί αυτό το αρχείο, και όχι μόνο να διαβάσει τα περιεχόμενά του. Για αυτό είναι ένα ειδικό σχέδιο: #!

Αυτό το σχέδιο ονομάζεται " sha-bang". Στην πραγματικότητα, # θέτει ένα σχόλιο, αλλά σε αυτή την περίπτωση, το sha-bang σημαίνει ότι θα ακολουθήσει η διαδρομή προς τον χειριστή του σεναρίου. Για παράδειγμα:

  #! / bin / bash
#! / bin / sh
#! / usr / bin / perl

Θα επικεντρωθούμε στο κέλυφος Bash, Bourne-Again. Αυτό το κέλυφος εγκαθίσταται από προεπιλογή σε όλα σχεδόν τα συστήματα Linux και / bin / sh αναφέρεται σε αυτό. Το τέλος του σεναρίου λέει την έξοδο λέξης υπηρεσίας.

Οπλισμένοι με αυτή τη γνώση, θα γράψουμε το πρώτο σενάριο μας:

  #! / bin / bash
echo Μια απλή δέσμη ενεργειών. Η εντολή echo εμφανίζει ένα μήνυμα.
echo:
whoami # whoami εμφανίζει το όνομα του εγγεγραμμένου χρήστη
echo Το σύστημά σας έχει ξεκινήσει
uptime # uptime δείχνει την ώρα της μηχανής
echo σήμερα
ημερομηνία # ημερομηνία εμφανίζει την τρέχουσα ημερομηνία και ώρα
echo Ενώ όλα
έξοδο

Αποθηκεύστε αυτό το αρχείο ως tutor1.sh. Εκτελέστε την εντολή για να καταστήσετε τη δέσμη ενεργειών εκτελέσιμη.

Chmod + rx tutor1.sh

Το αποτέλεσμα του σεναρίου θα είναι:

[προστατευμένο με ηλεκτρονικό ταχυδρομείο]: ~ / Doc / open source $ ./tutor1.sh
Απλό σενάριο
Εσείς:
voland
Το σύστημά σας έχει ξεκινήσει
14:38:46 μέχρι 1:48, 2 χρήστες, μέσος όρος φόρτωσης: 0,47, 0,43, 0,41
Σήμερα
Κυρ 26 Φεβ. 14:38:46 MSK 2006
Κάποιοι

Γυρίζουμε πιο σοβαρά.

Τώρα που μάθαμε πώς να γράφουμε απλά σενάρια, ήρθε η ώρα να προχωρήσουμε σε σοβαρά πράγματα: γράφοντας ένα σενάριο για δημιουργία αντιγράφων ασφαλείας.

Πρώτα πράγματα πρώτα, πρέπει να ορίσετε - αντίγραφο ασφαλείας   τι θα κάνουμε. Επομένως, το σενάριό μας θα πρέπει να μπορεί να λειτουργεί με τη γραμμή εντολών. Τα επιχειρήματα της γραμμής εντολών δίνονται μετά το όνομα της δέσμης ενεργειών που χωρίζεται από ένα κενό: somescript arg1 arg2 arg3. Το σενάριο παίρνει τα επιχειρήματα σύμφωνα με τους αριθμούς ακολουθιών τους, έτσι θα χρησιμοποιήσουμε κατασκευές του τύπου $ number_argument, δηλ. $ 1, $ 2, $ 3. Το $ είναι ένας χαρακτήρας μπαλαντέρ που θα χρειαστούμε όταν εργαζόμαστε με μεταβλητές. Οι μεταβλητές στη δέσμη ενεργειών καθορίζονται ως variable_name = value. Θα χρησιμοποιήσουμε τις μεταβλητές MAXPARAMS για να καθορίσουμε τον μέγιστο αριθμό παραμέτρων γραμμής εντολών, BACKUPFILE για να ορίσουμε το όνομα του αρχείου, το BACKUPDIR για το φάκελο που θα δημιουργήσουμε αντίγραφο ασφαλείας και το ARCHIVEDIR για το φάκελο στον οποίο θα τοποθετήσουμε το αρχείο. Το πιο σημαντικό μέρος του σεναρίου θα είναι οι εντολές για την αναζήτηση και την αρχειοθέτηση όλων των αρχείων και των φακέλων που βρέθηκαν στο καθορισμένο:

Βρείτε. -τύπος f -print0 | xargs -0 tar rvf "$ archive.tar"\u003e / dev / null
gzip $ archive.tar

Ας δούμε τι κάνουν αυτές οι εντολές. find αναζήτηση στον τρέχοντα κατάλογο (αυτό υποδεικνύεται από το πρώτο όρισμα ".") όλων των αρχείων και επιστρέφει την πλήρη διαδρομή προς αυτά (print0). Αυτές οι διαδρομές μεταφέρονται στην εντολή tar, η οποία συγκεντρώνει όλα τα αρχεία σε μία. Στη συνέχεια, χρησιμοποιώντας την εντολή gzip, αρχειοθετούμε το αρχείο tar που προκύπτει. Ομάδα \u003e / dev / null   βολικό εάν αρχειοθετείτε μεγάλο αριθμό αρχείων. Στην περίπτωση αυτή, τα ονόματά τους και η πλήρης διαδρομή προς αυτά δεν εμφανίζονται στην κονσόλα.

Το επόμενο βήμα είναι να δώσετε συμβουλές στο χρήστη πώς να χρησιμοποιήσει το σενάριο αν κάνει λάθη.

Για παράδειγμα, αυτή η κατασκευή

Εάν [$ # -lt "$ MAXPARAMS"];
τότε
echo

echo
έξοδος 0
fi

θα σας πει ότι ο χρήστης έχει καθορίσει έναν ανεπαρκή αριθμό επιχειρημάτων γραμμής εντολών. Αν [condition] ... fi   ορίζει την υπό όρους κατασκευή. $ # -lt "$ MAXPARAMS"   ελέγχει τον εισαγόμενο αριθμό παραμέτρων και αν αυτός ο αριθμός είναι μικρότερος από MAXPARAMS, τότε ο χρήστης θα λάβει ένα μήνυμα σχετικά με μια εσφαλμένη καταχώρηση. Η έξοδος 0 θα αναγκάσει το σενάριο να σταματήσει να λειτουργεί χωρίς να καθορίσει έναν κωδικό σφάλματος. Ομοίως, ελέγχεται η υπέρβαση του επιτρεπόμενου αριθμού παραμέτρων, αντί για ls (λιγότερο από - λιγότερο από), πρέπει να καθορίσετε το gt (μεγαλύτερο από - περισσότερο από). Τώρα που έχουν διευκρινιστεί τα κύρια σημεία του σεναρίου, μπορείτε να μεταβείτε στην πλήρη έκδοση:

  #! / bin / bash
Περιγραφή:
# + Δημιουργεί αντίγραφα ασφαλείας όλων των αρχείων στον καθορισμένο κατάλογο.
# + στο "tarball" (αρχείο tar.gz).
# + Χρήση:
# + sh backup.sh archive_name φάκελος προορισμού φάκελο προέλευσης
#+

# Μέγιστος αριθμός παραμέτρων γραμμής εντολών
MAXPARAMS = 3

αν [$ # -lt "$ MAXPARAMS"];
τότε
echo
echo "Χρήση: sh` basename $ 0` archive_name φάκελος φακέλου προέλευσης"
echo
έξοδος 0
fi

αν [$ # -gt "$ MAXPARAMS"];
τότε
echo
echo "Αυτό το σενάριο χρειάζεται μόνο επιχειρήματα γραμμών εντολών $ MAXPARAMS!"
echo
έξοδος 0
fi

# Μεταβλητές που χρησιμοποιούμε στη δέσμη ενεργειών
BACKUPFILE = $ 1-αντίγραφο ασφαλείας - $ (ημερομηνία +% m-% d-% Y)
αρχείο = $ BACKUPFILE
BACKUPDIR = $ 2
ARCHIVEDIR = $ 3

# Ελέγξτε εάν υπάρχει φάκελος προέλευσης και φάκελος προορισμού
εάν [! -e $ BACKUPDIR];
τότε
echo
echo "\\" $ BACKUPDIR \\ "δεν υπάρχει!"
echo
έξοδος 0
fi

εάν [! -e $ ARCHIVEDIR];
τότε
echo
echo "\\" $ ARCHIVEDIR \\ "δεν υπάρχει, δημιουργήστε ..."
mkdir $ ARCHIVEDIR
echo "Done."
fi

# Ελέγξτε εάν υπάρχουν αρχεία στην πηγή και τον προορισμό.
cd $ ARCHIVEDIR
αν [-e $ archive.tar.gz];
τότε rm $ archive.tar.gz
fi

cd $ BACKUPDIR
αν [-e $ archive.tar.gz];
τότε rm $ archive.tar.gz
fi

# Το κύριο μέρος του σεναρίου ...
echo "Δημιουργία αντιγράφων ασφαλείας" $ BACKUPDIR "στο αρχείο \\" $ archive.tar.gz \\ "..."
βρείτε. -τύπος f -print0 | xargs -0 tar rvf "$ archive.tar"\u003e / dev / null
gzip $ archive.tar
echo "\\" $ BACKUPDIR \\ "αρχειοθετήθηκε με επιτυχία στο αρχείο \\" $ archive.tar.gz \\ "."

# Μετακινήστε το αρχείο στο φάκελο ARCHIVEDIR
echo "Μετακίνηση του αρχείου \\" $ archive.tar.gz \\ "στο φάκελο \\" $ ARCHIVEDIR \\ "."
mv $ archive.tar.gz $ ARCHIVEDIR / $ archive.tar.gz
echo "Done."

Ας ελπίσουμε ότι θα σχολίωνα τα βασικά σημεία λεπτομερώς. Αν έχετε οποιεσδήποτε ερωτήσεις, μπορείτε να επικοινωνήσετε μαζί μου στο [προστατευμένο με ηλεκτρονικό ταχυδρομείο]   Προτείνω επίσης τον αξιοσημείωτο Mendel Cooper Advanced Bash-Scripting Guide, ο οποίος με βοήθησε πολύ όταν ήμουν μόλις εισαχθεί στα σενάρια. Επιτυχής προγραμματισμός.

P.S. Σας ευχαριστώ πολύ mar   για τα σχόλια και τις συμβουλές της.

  ("Η Τέχνη του Προγραμματισμού στη Γλώσσα Scripting Command Shell") περιέχει πάρα πολύ υλικό αναφοράς. Και ανάμεσα σε αυτά τα δύο άκρα δεν υπάρχει τίποτα. Έγραψα επίσης αυτόν τον οδηγό επίσης επειδή δεν υπάρχουν αρκετά δωρεάν βασικά μαθήματα, αν και θα πρέπει να τα ακούσετε.

Αυτός είναι ένας πρακτικός οδηγός στον οποίο, αν και όχι πάντα σε αρκετά σοβαρό στυλ, δίνω παραδείγματα πραγματικής ζωής αντί για θεωρητικά παραδείγματα. Εν μέρει, έγραψα ότι αυτό οφείλεται στο γεγονός ότι δεν θέλω να δώσω κομμένα και υπερβολικά απλά παραδείγματα που προσφέρονται από εκείνους που ξέρουν τι μιλάνε και δείχνουν κάποια πραγματικά ωραία χαρακτηριστικά του Bash, αλλά έτσι απομακρύνονται από το πλαίσιο που δεν μπορείτε ποτέ να χρησιμοποιήσετε πρακτικά. Μπορείτε να διαβάσετε γι 'αυτό μετά τη μελέτη αυτού του βιβλίου, το οποίο περιέχει ασκήσεις και παραδείγματα που θα σας βοηθήσουν στην πραγματική ζωή.

Από την πρακτική μου εμπειρία ως χρήστης UNIX / Linux, διαχειριστής συστήματος και δάσκαλος, γνωρίζω ότι οι άνθρωποι μπορούν να επικοινωνούν με τα συστήματά τους για χρόνια κάθε μέρα και δεν ξέρουν πώς να αυτοματοποιούν την εκτέλεση των εργασιών. Επομένως, συχνά πιστεύουν ότι το σύστημα UNIX είναι ακατάλληλο για τους χρήστες και, ακόμη χειρότερα, έχουν την εντύπωση ότι πρόκειται για ένα αργό και ντεμοντέ σύστημα. Αυτό είναι ένα άλλο πρόβλημα που μπορεί να αντιμετωπιστεί χρησιμοποιώντας αυτόν τον οδηγό.

Ποιος πρέπει να διαβάσει αυτό το βιβλίο;

Όποιος εργάζεται με συστήματα UNIX ή UNIX, ο οποίος θέλει να κάνει τη ζωή πιο εύκολη για τον εαυτό του, βιώνει τους χρήστες, και διαχειριστές συστήματος. Οι αναγνώστες, οι οποίοι έχουν ήδη κατανοήσει πώς να εργαστούν με το σύστημα χρησιμοποιώντας τη γραμμή εντολών, θα μάθουν όλες τις λεπτομέρειες της δημιουργίας σεναρίων κελυφών με τα οποία μπορείτε να κάνετε καθημερινές εργασίες ευκολότερες. Η διαχείριση του συστήματος εξαρτάται σε μεγάλο βαθμό από τη δημιουργία σεναρίων. καθημερινές εργασίες συχνά αυτοματοποιούνται από απλά σενάρια. Σε αυτό το έγγραφο υπάρχουν πολλά παραδείγματα που θα σας εμπνεύσουν να γράψετε τα δικά σας σενάρια και θα σας ενθαρρύνουμε να βελτιώσετε τα υπάρχοντα σενάρια.

Προτού προχωρήσετε σε αυτό το μάθημα:

  • Πρέπει να είστε έμπειρος χρήστης UNIX ή Linux, εξοικειωμένος με τις βασικές εντολές, με σελίδες περιγραφής του χρήστη και τεκμηρίωση.
  • να είναι σε θέση να χρησιμοποιήσει ένα πρόγραμμα επεξεργασίας κειμένου?
  • να κατανοήσουν πώς σταματούν οι εκκινήσεις και οι διαδικασίες του συστήματος, τι κάνει το init και πώς χρησιμοποιούνται τα init scripts.
  • Δημιουργία χρηστών και ομάδων, ρύθμιση κωδικών πρόσβασης.
  • να γνωρίζετε ποια είναι τα δικαιώματα πρόσβασης και οι ειδικές λειτουργίες ·
  • γνωρίζουν τους κανόνες για την ονομασία συσκευών, κατανοούν ποια τμήματα είναι, mount / unmount συστήματα αρχείων?
  • να είναι σε θέση να προσθέσει λογισμικού   στο σύστημά σας και να το αφαιρέσετε από το σύστημα.

Εάν δεν είστε εξοικειωμένοι με ένα ή περισσότερα από τα θέματα που αναφέρονται παραπάνω, ανατρέξτε στο βιβλίο Εισαγωγή στο Linux στην ιστοσελίδα TLDP ή στον τοπικό σας καθρέφτη TLDP. Περισσότερες πληροφορίες μπορείτε να βρείτε στην τεκμηρίωση του συστήματός σας (σελίδες πληροφοριών και ανθρώπων) ή στον ιστότοπο του έργου τεκμηρίωσης του Linux.

Στο έντυπο, αυτό το εγχειρίδιο είναι διαθέσιμο στο Fultus.com.

Εικ.1. Εξώφυλλο του βιβλίου "Οδηγός για το μπάσο για αρχάριους"

Αυτός ο οδηγός έχει μεταφραστεί:

Μια μετάφραση στα γαλλικά γίνεται και μια σύνδεση με αυτήν θα δοθεί αμέσως μετά την ολοκλήρωση της μετάφρασης.

Ιστορικό αλλαγών

Ιστορικό αλλαγών

Ελήφθησαν υπόψη οι επιθυμίες των αναγνωστών: διορθώθηκαν οι διορθώσεις της εντολής μετατόπισης στο Κεφάλαιο 9, τα πληκτρολόγια στο Κεφάλαιο 7, Κεφάλαιο 3, Κεφάλαιο 10.

Θεώρησε τις επιθυμίες των αναγνωστών.

Αλλαγή διεύθυνσης

Τα σχόλια των αναγνωστών έχουν εισαχθεί και έχει προστεθεί ευρετήριο με ετικέτες DocBook.

Ένα παράδειγμα επεξηγήθηκε στο Κεφάλαιο 4, η περιγραφή των ενσωματωμένων εγγράφων (εδώ έγγραφο) στο Κεφάλαιο 9 διορθώθηκε, προστέθηκε ένας γενικός έλεγχος και διόρθωση τυπογραφικών σφαλμάτων, προστέθηκαν αναφορές σε κινεζικές και ουκρανικές μεταφράσεις, μια παρατήρηση κλπ. Σχετικά με το awk στο Κεφάλαιο 6.

Τα σταθερά τυπογραφικά σφάλματα στα κεφάλαια 3, 6 και 7, πρόσθεσαν σχόλια χρηστών, πρόσθεσαν μια σημείωση στο κεφάλαιο 7.

Λίγα λόγια για το σφάλμα, προσθέσαμε μερικές λέξεις-κλειδιά, πληροφορίες σχετικά με το νέο Bash 3.0, πρόσθεσε μια εικόνα.

Αρχική έκδοση για LDP. περισσότερα παραδείγματα, περισσότερες σημειώσεις, λιγότερα λάθη και παραλείψεις, προστιθέμενο γλωσσάριο

Αναθεώρηση 1.0-βήτα

Ευχαριστώ

Χάρη σε όλους τους φίλους που βοήθησαν (ή προσπάθησαν να βοηθήσουν), και ο σύζυγός μου? Τα ενθαρρυντικά λόγια σας έχουν καταστήσει δυνατή αυτή την εργασία. Χάρη σε όλους όσους ανέφεραν λάθη, έστειλαν παραδείγματα και σχόλια - μεταξύ πολλών, πολλών άλλων:

  • Hans Bol (Hans Bol) σε έναν από τους οπαδούς.
  • Mike Sim (Mike Sim) για σχόλια σχετικά με το στυλ?
  • Dan Richter για παραδείγματα με συστοιχίες.
  • Georges Ferguson (Gerg Ferguson) για ιδέες σχετικά με τους τίτλους?
  • Mendel Le Cooper (Mendel Leo Cooper), ο οποίος προσέφερε έναν τόπο εργασίας.
  • # linux.be, για την υποστήριξη μου επιπλέουν?
  • Frank Wang, για λεπτομερή σχόλια για όλα όσα έκανα λάθος ;-)

Ιδιαίτερες ευχαριστίες στον Tabatha Marshall, ο οποίος ανέλαβε να κάνει έναν γενικό έλεγχο ορθογραφίας και γραμματικής. Είχαμε μεγάλη ομάδα: εργάστηκε όταν κοιμήθηκα. Και αντίστροφα ;-)

(μιλάμε για σφάλματα στην αγγλική έκδοση - perm.).

Πληροφορίες πνευματικών δικαιωμάτων

* Copyright (c) 2002-2007, Machtelt Garrels * Όλα τα δικαιώματα διατηρούνται. Πληρούνται οι ακόλουθες προϋποθέσεις: * * * * * * * * * * * *) * * * Οι αναδιανομές σε δυαδική μορφή παρέχονται μαζί με την τεκμηρίωση. Μπορεί να χρησιμοποιηθεί κατά κανόνα. * ΤΟ ΠΑΡΟΝ ΛΟΓΙΣΜΙΚΟ ΠΑΡΕΧΕΤΑΙ ΑΠΟ ΤΟΝ ΣΥΝΤΑΤΗ ΚΑΙ ΤΟΥΣ ΣΥΝΕΙΣΦΟΡΕΣ "ΩΣ ΕΧΕΙ" ΚΑΙ ΟΠΟΙΟΔΗΠΟΤΕ * ΡΗΤΗ Ή ΣΙΩΠΗΡΗ ΓΙΑ ΣΚΟΠΙΜΟ ΣΚΟΠΟ ΔΕΝ ΕΙΝΑΙ Η ΔΗΜΟΚΡΑΤΙΑ ΕΜΠΟΡΕΥΣΙΜΟΤΗΤΑΣ ΚΑΙ ΚΑΤΑΛΛΗΛΟΤΗΤΑΣ ΣΥΜΠΕΡΙΛΑΜΒΑΝΟΜΕΝΩΝ ΤΩΝ ΑΜΕΣΩΝ, ΕΜΜΕΣΩΝ, ΣΥΜΠΤΩΜΑΤΙΚΩΝ, ΕΙΔΙΚΩΝ, ΠΑΡΑΔΕΙΓΜΑΤΙΚΩΝ Ή ΑΠΟΘΕΤΙΚΩΝ ΖΗΜΙΩΝ (ΣΥΜΠΕΡΙΛΑΜΒΑΝΟΜΕΝΩΝ, ΕΝΔΕΙΚΤΙΚΑ, ΠΡΟΜΗΘΕΙΑΣ ΑΝΑΘΕΣΗΣ) ΑΠΟΤΕΛΕΣΜΑΤΑ, ΠΑΡΑΓΓΕΛΙΑ, ΣΥΜΒΑΣΗ, ΣΥΜΠΕΡΙΛΑΜΒΑΝΟΜΕΝΗΣ ΤΗΣ ΑΜΕΛΕΙΑΣ Ή ΑΛΛΟΥΣ. ΠΙΘΑΝΟΤΗΤΑ ΤΕΤΟΙΑΣ ΖΗΜΙΑΣ.

Ο συγγραφέας και ο εκδότης, προκειμένου να διασφαλίσουν την ακρίβεια των πληροφοριών, κατέβαλαν κάθε προσπάθεια για την προετοιμασία αυτού του βιβλίου. Ωστόσο, οι πληροφορίες που περιέχονται σε αυτό το βιβλίο προσφέρονται χωρίς εγγύηση, ρητή ή σιωπηρή. Ο συντάκτης, ο εκδότης, ο αντιπρόσωπος και ο διανομέας δεν αναλαμβάνουν καμία ευθύνη για τυχόν ζημιά που προκλήθηκε ή φέρεται να προκάλεσε άμεσα ή έμμεσα από αυτό το βιβλίο.

Τα λογότυπα, τα εμπορικά σήματα και τα σύμβολα που χρησιμοποιούνται σε αυτό το βιβλίο είναι ιδιοκτησία των αντίστοιχων κατόχων τους.

Τι χρειάζεστε;

Οργάνωση αυτού του εγγράφου

Αυτός ο οδηγός συζητά τις έννοιες που θα αποδειχθούν χρήσιμες για τους σοβαρούς χρήστες Bash στην καθημερινή τους ζωή. Αν και ο αναγνώστης θα χρειαστεί βασικές γνώσεις για τη χρήση του κελύφους εντολών, θα ξεκινήσουμε στα τρία πρώτα κεφάλαια με μια συζήτηση των κύριων στοιχείων του κελύφους εντολών και με πρακτικά παραδείγματα.

Τα κεφάλαια τέσσερα έως έξι ασχολούνται με βασικά εργαλεία που χρησιμοποιούνται συνήθως σε σενάρια κελύφους.

Τα κεφάλαια οκτώ έως δώδεκα συζητούν τα πιο συνηθισμένα κατασκευάσματα που χρησιμοποιούνται στα σενάρια κελύφους.

Κάθε κεφάλαιο περιλαμβάνει ασκήσεις που θα ελέγξουν την ετοιμότητά σας για το επόμενο κεφάλαιο.

  • Κεφάλαιο 1 "Σειρά εντολών κελύφους και μπάσων" - Βασικά στοιχεία του Bash: γιατί ο Bash είναι τόσο καλός, συστατικά, αρχικές συμβουλές για την ανάπτυξη καλών σεναρίων.
  • Κεφάλαιο 2 "Γραφήματα και εντοπισμός σφαλμάτων" - Βασικά σεναρίων: γράψτε και εντοπίστε σφαλμάτων.
  • Κεφάλαιο 3 "Περιβάλλον Περιβάλλοντος Bash" - Περιβάλλον περιβάλλοντος Bash: αρχεία προετοιμασίας, μεταβλητές, μεταβολή ιδιοτήτων ιδιοτήτων, η σειρά υποκαταστάσεων κέλυφος εντολών, ψευδώνυμα, παράμετροι.

Αφού διαβάσετε αυτό το άρθρο, θα μάθετε τι είναι bash   (πρότυπο διερμηνέα εντολών Linux), μάθετε πώς να χειρίζεστε τυποποιημένες εντολές: ls, cp, mv... κατανοήσουν το σκοπό των inodes, τους σκληρούς και συμβολικούς δεσμούς και πολλά άλλα.

Αυτός ο οδηγός προορίζεται για αρχάριους στο Linux και για όσους θέλουν να επαναλάβουν ή να βελτιώσουν την κατανόηση των βασικών αρχών του Linux, όπως η αντιγραφή και η μετακίνηση αρχείων, η δημιουργία συνδέσεων, η χρήση τυπικών εντολών Linux μαζί με ανακατευθύνσεις και αγωγούς. Σε αυτό το άρθρο θα βρείτε πολλά παραδείγματα που εξηγούν το υλικό που παρουσιάζεται. Για αρχάριους, οι περισσότερες πληροφορίες θα είναι νέες, και για πιο προηγμένους χρήστες αυτό το υλικό μπορεί να είναι ένα εξαιρετικό εργαλείο για τη γενίκευση των υφιστάμενων γνώσεων και δεξιοτήτων.

Εισαγωγή στο bash

Shell

Εάν χρησιμοποιείτε το Linux, τότε γνωρίζετε ότι μετά την είσοδο σας καλωσορίζεστε με πρόσκληση από τον διερμηνέα εντολών. Για παράδειγμα:

\$

Εάν μετά την είσοδο φορτωθεί ένα γραφικό κέλυφος, τότε για να μεταβείτε στον διερμηνέα εντολών πρέπει να ξεκινήσετε τον εξομοιωτή τερματικού (gnome-terminal, xfce4-terminal, κονσόλα, xterm, rxvt ...) ή να μεταβείτε σε ένα από τα εικονικά τερματικά πατώντας CtrlAltF1   ή CtrlAltF2   και ούτω καθεξής

Η γραμμή εντολών στον υπολογιστή σας μπορεί να διαφέρει από αυτό που φαίνεται στο παράδειγμα. Μπορεί να περιέχει το όνομα χρήστη, το όνομα του υπολογιστή και το όνομα του τρέχοντος καταλόγου εργασίας. Αλλά παρά τις διαφορές αυτές, το πρόγραμμα που εκτυπώνει αυτή την πρόσκληση ονομάζεται " κέλυφος"(κέλυφος), και πιθανότατα στο ρόλο του κελύφους εντολών σας είναι ένα πρόγραμμα που ονομάζεται bash.

Έχετε τρέχει bash;

Μπορείτε να ελέγξετε αν τρέχει bash με την ακόλουθη εντολή:

\$ echo \\ $ SHELL / bin / bash

Εάν ως αποτέλεσμα της εκτέλεσης αυτής της εντολής, λάβατε κάποιο σφάλμα ή η απόδοσή της διαφέρει από εκείνη του παραδείγματος, τότε είναι πιθανό ότι το σύστημά σας δεν χρησιμοποιεί bash ως το κέλυφος εντολών. Παρόλα αυτά, το μεγαλύτερο μέρος του υλικού θα είναι σχετικό, αλλά εξακολουθεί να συνιστάται να μεταβείτε σε bash. Αυτό μπορεί να γίνει (αν το bash είναι εγκατεστημένο στο σύστημα) με την εντολή:

\$ bash

Τι είναι το bash

Bash (ακρωνύμιο για το " Βourne- ακέρδος SHell ") είναι ο συνήθης ερμηνευτής των εντολών στα περισσότερα συστήματα Linux, τα καθήκοντα του οποίου είναι η επεξεργασία και εκτέλεση εντολών με τις οποίες ο χρήστης ελέγχει τον υπολογιστή.Μετά την ολοκλήρωση του έργου μπορείτε να ολοκληρώσετε τη διαδικασία διερμηνείας εντολών.Μετά το πάτημα των πλήκτρων CtrlΔ, ομάδες έξοδο   ή αποσύνδεση   η διαδικασία του κελύφους θα ολοκληρωθεί και η οθόνη θα σας ζητήσει ξανά να εισαγάγετε το όνομα χρήστη και τον κωδικό πρόσβασής σας.

Χρησιμοποιώντας το "cd"

Ας αρχίσουμε να χρησιμοποιούμε bash για να περιηγηθείτε στο σύστημα αρχείων. Για να ξεκινήσετε, πληκτρολογήστε την ακόλουθη εντολή:

$ cd /

Με αυτήν την εντολή υποδείξαμε bash που θέλουμε να μεταφέρουμε στον ριζικό κατάλογο - / . Όλοι οι κατάλογοι του συστήματος είναι οργανωμένοι σε δομή δέντρου και /   αυτή είναι η αρχή (ή ρίζα). Ομάδα cd   χρησιμεύει για την αλλαγή του τρέχοντος καταλόγου εργασίας.

Διαδρομές

Για να μάθετε πού βρίσκονται στο τρέχον σύστημα αρχείων (τρέχων κατάλογος εργασίας):

\$ pwd /

Στο παραπάνω παράδειγμα /   - επιχειρησιακό όρισμα cd   - κάλεσε το δρόμο. Αυτή είναι η θέση του συστήματος αρχείων όπου θέλουμε να προχωρήσουμε. Σε αυτή την περίπτωση /   - απόλυτη διαδρομή, σημαίνει ότι η διαδρομή καθορίζεται σε σχέση με τον ριζικό κατάλογο.

Απόλυτοι τρόποι

Ακολουθούν ορισμένα παραδείγματα απόλυτων διαδρομών.

   / dev / usr / usr / bin / usr / local / bin

Όπως ίσως έχετε παρατηρήσει, όλα αυτά τα μονοπάτια είναι ενωμένα από το γεγονός ότι αρχίζουν με / . Καθορισμός της διαδρομής / usr / local / bin ως επιχείρημα στην εντολή cd   το λέμε να μεταβεί στον κατάλογο ρίζας / , στη συνέχεια στον κατάλογο usr, στη συνέχεια στο τοπικό και το bin. Απόλυτα μονοπάτια αρχίζουν πάντα με /

Σχετικές διαδρομές

Το δεύτερο είδος διαδρομής ονομάζεται σχετικό. Bashομάδα cd   και άλλες εντολές μετρούν αυτές τις διαδρομές σε σχέση με τον τρέχοντα κατάλογο. Σχετικές διαδρομές ποτέ δεν ξεκινούν με / . Για παράδειγμα, αν είμαστε σε / usr

\$ cd / usr

Στη συνέχεια, μπορούμε να μεταβούμε στο / usr / local / bin χρησιμοποιώντας τη σχετική διαδρομή

\$ cd local / bin \$ pwd   / usr / local / bin

Χρησιμοποιώντας το ".."

Οι σχετικές διαδρομές μπορεί να περιέχουν έναν ή περισσότερους καταλόγους. ".." . ".." υποδεικνύει τον κατάλογο γονέων σε σχέση με τον κατάλογο εργασίας μας. Παράδειγμα:

\$ pwd   / usr / local / bin \\ $ cd .. \$ pwd / usr / τοπικό

Όπως μπορείτε να δείτε, η ομάδα cd ..   "μας ανεβάζει σε ένα υψηλότερο επίπεδο".

Μπορεί να προσθέσει ..   στη σχετική διαδρομή. Αυτό θα σας επιτρέψει να μετακινηθείτε σε έναν κατάλογο ο οποίος βρίσκεται στο ίδιο επίπεδο με αυτόν στον οποίο είμαστε. Παράδειγμα:

\$ pwd   / usr / local \\ $ cd ../share \$ pwd   / usr / share

Παραδείγματα που χρησιμοποιούν σχετικές διαδρομές

Οι σχετικές διαδρομές μπορεί να είναι αρκετά περίπλοκες. Ακολουθούν μερικά παραδείγματα. Το αποτέλεσμα των εντολών δεν εμφανίζεται, προσπαθήστε να προσδιορίσετε σε ποιον κατάλογο θα χρησιμοποιήσετε bash.

\$ cd / bin \$ cd ../usr/share/zoneinfo \$ cd / usr / X11R6 / bin \$ cd ../lib/X11 \$ cd / usr / bin \$ cd ../bin/../bin

Ο κατάλογος εργασίας "."

Πριν τελειώσω τη συζήτηση για την ομάδα cdΠρέπει να αναφερθούν και άλλα πράγματα. Πρώτον, υπάρχει ένας άλλος ειδικός κατάλογος "." που υποδεικνύει τον τρέχοντα κατάλογο. Αυτός ο κατάλογος χρησιμοποιείται για την εκτέλεση εκτελέσιμων αρχείων που βρίσκονται στον τρέχοντα κατάλογο.

\$ ./myprog

Στο τελευταίο παράδειγμα, το myprog είναι ένα εκτελέσιμο αρχείο που βρίσκεται στον τρέχοντα κατάλογο που θα ξεκινήσει για εκτέλεση.

cd και τον οικείο κατάλογο του χρήστη

Για να μεταβείτε στον αρχικό κατάλογο, πρέπει να πληκτρολογήσετε

\$ cd

Χωρίς το όρισμα cd, μετακινήστε τον στον οικείο κατάλογό σας. Για το superuser, ο αρχικός κατάλογος είναι συνήθως / root, και για τους απλούς χρήστες, είναι / home / username /. Αλλά τι γίνεται αν θέλουμε να καθορίσουμε ένα συγκεκριμένο αρχείο που βρίσκεται στον αρχικό κατάλογο. Για παράδειγμα, ως επιχείρημα για το πρόγραμμα. "myprog"; Μπορείτε να γράψετε:

\$ ./myprog/home/user/myfile.txt

Ωστόσο, η χρήση απόλυτων διαδρομών αρχείων δεν είναι πάντα βολική. Η ίδια ενέργεια μπορεί να γίνει με ~ -Thilda:

\$ ./myprog ~ / myfile.txt

~   - ένα ειδικό όνομα που υποδεικνύει στον αρχικό κατάλογο του χρήστη.

Αρχική καταλόγους άλλων χρηστών

Αλλά τι γίνεται αν πρέπει να καθορίσουμε ένα αρχείο στον αρχικό κατάλογο ενός άλλου χρήστη; Για να γίνει αυτό, μετά το tilde πρέπει να καθορίσετε το όνομα αυτού του χρήστη. Για παράδειγμα, για να δείξετε στο αρχείο fredsfile.txt που βρίσκεται στον αρχικό κατάλογο του χρήστη fred:

\$ ./myprog ~ fred / fredsfile.txt

Εντολές Linux

Εισαγωγή στο ls

Πιθανώς γνωρίζετε ήδη την ομάδα. ls, το οποίο, επικαλούμενο χωρίς επιχειρήματα, εμφανίζει μια λίστα αρχείων που είναι αποθηκευμένα στον κατάλογο εργασίας:

\$ cd / usr \$ ls   X11R6 doc i686-pc-linux-gnu lib man sbin ssl bin gentoo-x86 περιλαμβάνουν libexec portage μοιραστείτε tmp distfiles i686-linux info τοπικό portage.old src

Εάν καθορίσετε μια επιλογή , θα είναι δυνατή η προβολή όλων των αρχείων, συμπεριλαμβανομένων των κρυφών (τα ονόματα των οποίων αρχίζουν με τελεία).

\$ ls -a . bin gentoo-x86 περιλαμβάνουν libexec portage κοινή χρήση tmp .. distfiles i686-linux πληροφορίες τοπική portage.old src x11R6 doc i686-pc-linux-gnu lib man sbin ssl

Λεπτομερής κατάλογος καταλόγων

Μετά την ίδια την ομάδα ls   το επιχείρημά της μπορεί να είναι ένα ή περισσότερα αρχεία ή καταλόγους. Αν καθορίσετε το όνομα του αρχείου, την εντολή ls   θα εμφανίσει μόνο πληροφορίες σχετικά με αυτό το αρχείο. Και αν καθορίσετε το όνομα του καταλόγου, ls   θα εμφανίσει όλο το περιεχόμενό της. Επιλογή "-l"   ομάδες ls   Είναι πολύ χρήσιμο αν θέλετε να βρείτε περισσότερες πληροφορίες σχετικά με αυτά εκτός από ονόματα αρχείων (δικαιώματα αρχείων, όνομα κατόχου, ώρα τελευταία αλλαγή   αρχείο και το μέγεθός του).

Το παρακάτω παράδειγμα δείχνει τη χρήση της επιλογής "-l"   για να εμφανίσετε πληροφορίες σχετικά με αρχεία που είναι αποθηκευμένα στον κατάλογο / usr

\$ ls-l / usr   drwxr-xr-x 7 ρίζα ρίζας 168 Νοε 24 14:02 X11R6 drwxr-xr-x 2 ρίζα ρίζας 14576 27 Δεκεμβρίου 08:56 bin drwxr-xr-x 2 ρίζα 8856 26 Δεκεμβρίου 12:47 distfiles lrwxrwxrwx 1 ρίζα 9 Δεκέμβριος 22 20:57 doc -\u003e μετοχή / doc drwxr-xr-x 62 ρίζα 1856 Δεκ 27 15:54 gentoo-x86 drwxr-xr-x 4 ρίζα 152 12 Δεκεμβρίου 23:10 i686-linux drwxr-xr-x 4 ρίζα 96 Νοε 24 13:17 i686-pc-linux-gnu drwxr-xr-x 54 ρίζα ρίζας 5992 24 Δεκεμβρίου 22:30 include lrwxrwxrwx 1 ρίζα 10 Δεκ 22 20:57 info -\u003e share drwxr-xr -x 28 ρίζα ρίζας 13552 26 Δεκεμβρίου 00:31 lib drwxr-xr-x 3 ρίζα ρίζας 72 Νοε 25 00:34 libexec drwxr-xr-x 8 ρίζα 240 ρίζα 22 Δεκεμβρίου 20:57 τοπική lrwxrwxrwx 1 ρίζα 9 Δεκ 22 20 : 57 άνθρωπος -\u003e μετοχή / άνθρωπος lrwxrwxrwx 1 ρίζα ρίζας 11 Δεκεμβρίου 8 07:59 portage -\u003e gentoo-x86 / drwxr-xr-x 60 ρίζα ρίζα 1864 8 Δεκεμβρίου 8 07:55 portage.old drwxr-xr-x 3 ρίζα 3096 Δεκ 22 20:57 sbin drwxr-xr-x 46 ρίζα ρίζα 1144 Δεκ 24 15:32 μετοχή drwxr-xr-x 8 ρίζα 328 Δεκ 26 00:07 src drwxr-xr-x 6 ρίζα 176 Νοε 24 24 14: 25 ssl lrwxrwxrwx 1 ρίζα 10 Δεκεμβρίου 22 20:57 tmp -\u003e ../var/tmp

Η πρώτη στήλη εμφανίζει τις πληροφορίες πρόσβασης για κάθε αρχείο στη λίστα. (Θα εξηγήσω λίγο αργότερα ποιο γράμμα σημαίνει) Η επόμενη στήλη δείχνει τον αριθμό των συνδέσμων σε κάθε στοιχείο της λίστας. Η τρίτη και η τέταρτη στήλη είναι ο ιδιοκτήτης και η ομάδα του φακέλου, αντίστοιχα. Η πέμπτη στήλη είναι το μέγεθος. Ο έκτος είναι ο χρόνος της τελευταίας αλλαγής αρχείου ("τελευταία τροποποιημένη ώρα" ή mtime). Η τελευταία στήλη είναι το όνομα του αρχείου ή του καταλόγου (Εάν πρόκειται για σύνδεσμο, τότε μετά το " –> "είναι το όνομα του αντικειμένου στο οποίο αναφέρεται).

Πώς να προβάλλετε μόνο καταλόγους

Μερικές φορές υπάρχει ανάγκη να δούμε πληροφορίες μόνο για τους καταλόγους, και όχι για όλο το περιεχόμενό τους. Η επιλογή θα σας βοηθήσει με αυτή την εργασία. "-d", η οποία δίνει εντολή στην εντολή να εμφανίζει πληροφορίες μόνο για καταλόγους. Παράδειγμα:

\$ ls -dl / usr / usr / bin / usr / X11R6 / bin ../share   drwxr-xr-x 4 ρίζα 96 Δεκ 18 18:17 ../share drwxr-xr-x 17 ριζική ρίζα 576 Δεκ 24 09:03 / usr drwxr-xr-x 2 ρίζα 3192 26 Δεκεμβρίου 12:52 / usr / X11R6 / bin drwxr-xr-x 2 ρίζα ρίζας 14576 27 Δεκεμβρίου 08:56 / usr / bin

Αναδρομική λίστα και πληροφορίες inode

Επιλογή δράσης "-R"   απέναντι στη δράση "-d". Σας επιτρέπει να εμφανίσετε αναδρομικά πληροφορίες σχετικά με αρχεία που βρίσκονται στον κατάλογο. Κατ 'αρχάς, εμφανίζονται τα περιεχόμενα του καταλόγου ανώτατου επιπέδου, τότε τα περιεχόμενα όλων των υποκαταλόγων εμφανίζονται με τη σειρά τους κ.ο.κ. Η έξοδος αυτής της εντολής μπορεί να είναι αρκετά μεγάλη, γι 'αυτό δεν της δίνουμε ένα παράδειγμα, αλλά μπορείτε να προσπαθήσετε να το κάνετε μόνοι σας πληκτρολογώντας γραμμή εντολών "ls-R"ή" ls -ll".

Και τέλος, η επιλογή "-i"   που χρησιμοποιείται για την παραγωγή εισόδων κάθε αντικειμένου συστήματος αρχείων.

\$ ls -i / usr    1409 X11R6 314258 i686-linux 43090 libexec 13394 sbin 1417 bin 1513 i686-pc-linux-gnu 5120 τοπικό 13408 μετοχή 8316 distfiles 1517 sim 776 άνθρωπος 23779 src 43 doc 1386 πληροφορίες 93892 sdc 35737 ssl 70744 784 tmp

Τι είναι οι inodes;

Κάθε αντικείμενο συστήματος αρχείων (αρχείο, κατάλογος ...) έχει το δικό του μοναδικό αριθμό που ονομάζεται inode   (αριθμός εισόδου). Αυτές οι πληροφορίες μπορεί να φαίνονται ασήμαντες, αλλά η κατανόηση της λειτουργίας των inodes θα σας βοηθήσει να κατανοήσετε πολλές από τις λειτουργίες του συστήματος αρχείων. Για παράδειγμα, κοιτάξτε "."   και ".."   ως συνδέσεις που υπάρχουν σε κάθε κατάλογο. Για να καταλάβετε τι είναι ο κατάλογος ".." , βρείτε τον inode κατάλογο / χρήση / τοπικό

\$ ls -id / usr / τοπικό    5120 / usr / τοπικό

Όπως μπορούμε να δούμε, το inode του / usr / local directory είναι 5120. Τώρα ας δούμε ποιο inode του / usr / local / bin / .. directory:

\$ ls -id / usr / local / bin / ..    5120 / usr / τοπικό / bin / ..

Αποδεικνύεται ότι οι inodes των / usr / local και / usr / local / bin / .. καταλόγων είναι οι ίδιοι! Αυτό σημαίνει ότι δύο ονόματα αναφέρονται στο inode 5120: / usr / local και / usr / local / bin / .. Δηλαδή, αυτά είναι δύο διαφορετικά ονόματα για τον ίδιο κατάλογο. Κάθε inode δείχνει σε ένα συγκεκριμένο χώρο στο δίσκο.

Κάθε inode μπορεί να έχει πολλά ονόματα αντικειμένων του συστήματος αρχείων. Ο αριθμός των "συνωνύμων" του αρχείου (αντικείμενα συστήματος αρχείων που αναφέρονται σε ένα inode) δείχνει τον αριθμό στη δεύτερη στήλη της εξόδου της εντολής " ls -l".

\$ ls -dl / usr / τοπικό   drwxr-xr-x 8 root ρίζα 240 Dec 22 20:57 / usr / local

Αυτό το παράδειγμα δείχνει (τη δεύτερη στήλη) ότι ο κατάλογος / usr / local αναφέρεται από 8 διαφορετικά αντικείμενα συστήματος αρχείων. Εδώ είναι τα ονόματά τους:

/ usr / τοπικό / usr / τοπικό /. / usr / local / bin / .. / usr / local / games / .. / usr / local / src / ..

mkdir

Ας δούμε την εντολή mkdir. Χρησιμεύει στη δημιουργία νέων καταλόγων. Το παρακάτω παράδειγμα δείχνει τον τρόπο δημιουργίας τριών νέων καταλόγων (tic, tac, toe) στον κατάλογο / tmp

\$ cd / tmp $ mkdir tic tac toe

Προεπιλεγμένη εντολή mkdir   δεν μπορεί να δημιουργήσει μια ένθετη δομή καταλόγου. Επομένως, αν χρειαστεί να δημιουργήσετε διάφορους καταλόγους ενσωματωμένους μεταξύ τους ( κερδισμένο / der / ful), τότε θα πρέπει να καλέσετε αυτή την εντολή τρεις φορές με τη σειρά:

\$ mkdir won / der / ful   mkdir: δεν μπορεί να δημιουργήσει τον κατάλογο won / der / ful: Δεν υπάρχει τέτοιο αρχείο ή κατάλογος \\ $ το mkdir κέρδισε \$ mkdir κέρδισε / der \$ mkdir won / der / ful

Μπορείτε να απλοποιήσετε αυτήν την ενέργεια προσθέτοντας την επιλογή "-p"   στην εντολή mkdir. Αυτή η επιλογή σας επιτρέπει να δημιουργήσετε μια ένθετη δομή καταλόγου:

\$ mkdir -p εύκολο / ως / πίτα

Για να μάθετε περισσότερα σχετικά με τις δυνατότητες αυτού του βοηθητικού προγράμματος, διαβάστε την βοήθεια που καλείται από την εντολή άνθρωπος mkdir. Βοήθεια είναι διαθέσιμη σε όλες σχεδόν τις εντολές από αυτόν τον οδηγό (για παράδειγμα άνθρωπος ls), εκτός από cdγιατί είναι ενσωματωμένο σε bash (για τέτοιες εντολές, η βοήθεια ονομάζεται έτσι: βοήθεια cd)

αγγίξτε το

Ας πάμε στις ομάδες μελέτης cp   και mvχρησιμοποιείται για την αντιγραφή, μετονομασία και μετακίνηση αρχείων και καταλόγων. Αλλά πριν από αυτό, δημιουργήστε ένα κενό αρχείο στον κατάλογο / tmp χρησιμοποιώντας την εντολή αγγίξτε το:

\$ cd / tmp \$ αγγίξτε το αντίγραφο

Ομάδα αγγίξτε το   ενημερώνει τον τελευταίο χρόνο πρόσβασης στο αρχείο (η έκτη στήλη της εξόδου της εντολής ls -l) αν υπάρχει ήδη ή δημιουργεί ένα νέο κενό αρχείο εάν δεν υπάρχει ήδη. Μετά από αυτή τη λειτουργία, θα πρέπει να έχουμε ένα κενό αρχείο. / tmp / copyme.

echo

Τώρα που έχουμε ένα κενό αρχείο, γράφουμε τη συμβολοσειρά κειμένου σε αυτήν με την εντολή echo, το οποίο εξάγει το όρισμα που μεταβιβάζεται σε αυτό στην τυπική συσκευή εξόδου (το τερματικό κειμένου στην περίπτωσή μας).

\$ echo "firstfile"   πρώτο αρχείο

Για να γράψουμε μια συμβολοσειρά στο αρχείο μας, ανακατευθύνουμε την έξοδο της εντολής σε αυτήν. echo:

\$ echo "firstfile"\u003e copyme

Εγγραφείτε >   (περισσότερο) λέει στο κέλυφος εντολών να ανακατευθύνει την έξοδο της εντολής στα αριστερά στο αρχείο του οποίου το όνομα βρίσκεται στα δεξιά. Εάν ένα αρχείο με αυτό το όνομα δεν υπάρχει, θα δημιουργηθεί αυτόματα. Και αν υπάρχει ήδη ένα τέτοιο αρχείο, θα αντικατασταθεί (όλο το περιεχόμενό του θα διαγραφεί πριν γράψουμε τη γραμμή μας). Ομάδα "ls -l"   θα δείξει ότι το μέγεθος του αρχείου μας είναι τώρα 10 bytes - εννέα byte καταλαμβάνονται από τη λέξη "firstfile" και ένα byte είναι ένας χαρακτήρας νέας γραμμής.

\$ ls -l αντιγράψτε   -rw-rrr-- 1 ρίζα ρίζας 10 Δεκ 28 14:13 copyme

γάτα και cp

Για να εξάγετε τα περιεχόμενα του αρχείου στο τερματικό, χρησιμοποιήστε την εντολή cat:

\$ γάτα αντίγραφο   πρώτο αρχείο

Τώρα μπορούμε να αρχίσουμε να αναλύουμε τη βασική λειτουργικότητα της εντολής. cp. Αυτή η εντολή παίρνει δύο επιχειρήματα. Το πρώτο είναι το όνομα ενός υπάρχοντος αρχείου ("copyme"), το δεύτερο είναι το όνομα του νέου αντιγράφου που θέλουμε να κάνουμε ("copiedme").

\$ cp copyme copiedme

Μπορούμε να διασφαλίσουμε ότι το νέο αντίγραφο του αρχείου έχει διαφορετικό αριθμό inode (αυτό σημαίνει ότι λάβαμε ένα πραγματικά νέο χωριστό αρχείο και όχι απλώς έναν σύνδεσμο προς το παλιό)

\$ ls -i copyme copiedme    648284 copiedme 650704 copyme

mv

Τώρα εφαρμόστε την εντολή mv   για να μετονομάσετε το αρχείο ("copiedme" -\u003e "movme"). Ο αριθμός inode μετά από αυτή τη λειτουργία δεν αλλάζει, αλλά μόνο το όνομα του αρχείου αλλάζει.

\$ mv copiedme movedme \$ Έχεις μετακινηθεί    648284 μετακινήθηκε

Ο αριθμός inode δεν αλλάζει μόνο αν το μετονομαζόμενο αρχείο παραμείνει στο σύστημα αρχείων όπου βρίσκεται το αρχείο προέλευσης. Θα εξετάσουμε προσεκτικά τη διάταξη του συστήματος αρχείων σε ένα από τα παρακάτω μέρη αυτού του σεμιναρίου.

Ομάδα mv   επιτρέπει όχι μόνο να μετονομάσετε αρχεία, αλλά και να τα μετακινήσετε. Για παράδειγμα, για να μετακινήσετε ένα αρχείο /var/tmp/myfile.txt   σε κατάλογο / home / χρήστη   πρέπει να δώσετε την εντολή:

\$ mv /var/tmp/myfile.txt / home / χρήστη

Το αρχείο θα μετακινηθεί στον οικείο κατάλογο του χρήστη. χρήστη   ακόμα και αν βρίσκεται σε άλλο σύστημα αρχείων (στην περίπτωση αυτή το αρχείο θα αντιγραφεί σε μια νέα θέση και το πρωτότυπο θα διαγραφεί). Όπως μπορεί να υποθέσατε, η μετακίνηση ενός αρχείου σε ένα άλλο σύστημα αρχείων προκαλεί την αλλαγή του inode. Αυτό οφείλεται στο γεγονός ότι το καθένα σύστημα αρχείων   έχει το δικό του ξεχωριστό σύνολο ινών.

Θα πρέπει να σημειωθεί ότι υπάρχει πιθανότητα ο νέος αριθμός inode που αντιστοιχεί να συμπίπτει με τον παλαιό, αλλά είναι εξαιρετικά μικρός.

Για να μεταφέρετε ταυτόχρονα πολλά αρχεία στον ίδιο κατάλογο, γράψτε:

\$ mv /var/tmp/myfile1.txt /var/tmp/myfile2.txt / σπίτι / χρήστης \$ mv -t / home / χρήστη /var/tmp/myfile1.txt/var/tmp/myfile2.txt

Αν προσθέσετε επιλογή "-v", η οθόνη θα εμφανίσει μια αναφορά για τη λειτουργία:

\$ mv -vt / home / χρήστη /var/tmp/myfile1.txt/var/tmp/myfile2.txt    "/var/tmp/myfile1.txt" -\u003e "/home/user/myfile1.txt" "/var/tmp/myfile2.txt" -\u003e "/home/user/myfile2.txt"

Δημιουργία συνδέσμων και διαγραφή αρχείων

Οι σκληροί σύνδεσμοι

Έχω ήδη αναφέρει τη λέξη "link" όταν μίλησα για καταλόγους και inodes. Στην πραγματικότητα, υπάρχουν δύο τύποι συνδέσεων στο Linux. Το πρώτο είδος καλείται σκληρός δεσμός. Κάθε inode μπορεί να έχει πολλούς σκληρούς δεσμούς που συνδέονται με αυτό. Έτσι, αποδεικνύεται ότι ο φάκελος υπάρχει στο σύστημα με πολλά διαφορετικά ονόματα. Ένα αρχείο υπάρχει εφόσον τουλάχιστον ένα όνομα συσχετίζεται με το inode του. Οι όροι "σκληρός σύνδεσμος σε αρχείο" και "όνομα αρχείου" είναι συνώνυμοι. Νέες σκληρές συνδέσεις με το αρχείο μπορούν να γίνουν χρησιμοποιώντας την εντολή ln

\$ cd / tmp \$ touch firstlink \$ Στη δεύτερη σύνδεση πρώτης σύνδεσης \$ ls -i δεύτερη σύνδεση πρώτης σύνδεσης    15782 δεύτερη σύνδεση πρώτης σύνδεσης 15782

Όπως μπορείτε να δείτε από το παράδειγμα, οι σκληροί σύνδεσμοι λειτουργούν στο επίπεδο inode, δείχνοντας ένα συγκεκριμένο αρχείο. Στο Linux, οι σκληροί σύνδεσμοι έχουν αρκετούς περιορισμούς. Κατ 'αρχάς, μπορείτε να δημιουργήσετε σκληρούς δεσμούς μόνο σε αρχεία, όχι σε καταλόγους. Αυτό συμβαίνει, παρά το γεγονός ότι το σύστημα έχει σκληρούς δεσμούς με καταλόγους (" . "και" .. "), ακόμη και ο superuser δεν μπορεί να δημιουργήσει πρόσθετους σκληρούς δεσμούς σε καταλόγους.Επιπλέον, είναι αδύνατο να δημιουργηθεί ένας σκληρός σύνδεσμος σε ένα αρχείο που βρίσκεται σε ένα διαφορετικό σύστημα αρχείων, επειδή κάθε σύστημα αρχείων έχει το δικό του μοναδικό σύνολο inodes.

Συμβολικοί σύνδεσμοι

Στην πράξη, συχνότερα χρησιμοποιούνται συμβολικοί δεσμοί (ή symlinks). Ένα σύζευγμα είναι ένα ειδικό είδος αρχείου που αναφέρεται σε άλλο αρχείο με όνομα και όχι απευθείας στο inode. Οι Simlinks δεν προστατεύουν το αρχείο από το να διαγραφεί. Αν το αρχείο διαγραφεί, τότε το σύμβολο σε αυτό θα γίνει ανενεργό (ή σπασμένα).

Οι Simlinks δημιουργούνται από την ομάδα ln   με επιλογή "-s":

\$ Τρίτο σύνδεσμο δεύτερης σύνδεσης \$ ls -l τρίτης ζεύξης δεύτερης σύνδεσης πρώτης σύνδεσης   -rw-rw-r-2 agriffis agriffis 0 Δεκ 31 19:08 firstlink -rw-rw-r-- 2 αγριφης agriffis 0 Δεκ 31 19:08 Δεύτερη σύνδεση lrwxrwxrwx 1 agriffis agriffis 10 Δεκ 31 19:39 3rdlink -\u003e secondlink

Ένας συμβολικός σύνδεσμος μπορεί να αναγνωριστεί από την έξοδο της εντολής. ls -l: πρώτον, στην πρώτη στήλη των συμβόλλων υπάρχει ένα γράμμα "l"   (το πρώτο γράμμα της αγγλικής λέξης link - link), δεύτερον, το μέγεθος του symlink ισούται με τον αριθμό των γραμμάτων στο όνομα του αρχείου στο οποίο αναφέρεται ( "δεύτερη σύνδεση"   στην τρίτη περίπτωση, εκτός από το όνομα του συνδέσμου, η τελευταία στήλη περιέχει το όνομα του αρχείου στο οποίο αναφέρεται μετά το σημείο –>

Περισσότερα για συμβολικές συνδέσεις

Εξετάστε την κατάσταση όταν θέλουμε να δημιουργήσουμε ένα σύμβολο που οδηγεί στο / usr / local / bin και βρίσκεται στον κατάλογο / tmp /. Μπορούμε να γράψουμε:

\$ ln -s / usr / local / bin bin1 \$ ls-1 bin1   lrwxrwxrwx 1 ρίζα ρίζας 14 Ιαν. 1 15:42 bin1 -\u003e / usr / local / bin \\ $ ln -s ../usr/local/bin bin2 \$ ls-1 bin2 lrwxrwxrwx 1 ρίζα ρίζας 16 Ιαν. 1 15:43 bin2 -\u003e ../usr/local/bin \\ $ ls-1 bin2   lrwxrwxrwx 1 ρίζα ρίζας 16 Ιαν. 1 15:43 bin2 -\u003e ../usr/local/bin \\ $ mkdir mynewdir \$ mv bin2 mynewdir \$ cd mynewdir \$ cd bin2   bash: cd: bin2: Δεν υπάρχει τέτοιο αρχείο ή κατάλογος

Δεδομένου ότι ο κατάλογος / tmp / usr / local / bin / δεν υπάρχει, δεν θα μπορέσουμε να αλλάξουμε τον κατάλογο εργασίας στο bin2. με άλλα λόγια, μετά την κίνηση, ο σύνδεσμος σταμάτησε να λειτουργεί (έγινε "ρόπαλο").

Για το λόγο αυτό, μερικές φορές πρέπει να αποφύγετε τη δημιουργία συμβολικών συνδέσεων χρησιμοποιώντας σχετικές διαδρομές. Αλλά μερικές φορές είναι βολικό. Εξετάστε την ακόλουθη περίπτωση: ας υποθέσουμε ότι θέλουμε να συνδεθούμε με ένα πρόγραμμα στο / usr / bin (ή με άλλα λόγια, να δώσουμε σε αυτό το πρόγραμμα ένα εναλλακτικό όνομα):

# ls -l / usr / bin / keychain   -rwxr-xr-x 1 ρίζα ρίζας 10150 12 Δεκεμβρίου 20:09 / usr / bin / keychain

Το superuser (root) μπορεί να θέλει να κάνει μια σύνδεση με το "keychain" του προγράμματος με το μικρότερο όνομα "kc". Σε αυτό το παράδειγμα, έχουμε root πρόσβαση στο σύστημα, όπως αποδεικνύεται από την εντολή bash, η οποία έχει αλλάξει σε "#" . Χρειαζόμαστε δικαιώματα superuser επειδή οι κανονικοί χρήστες δεν μπορούν να δημιουργήσουν αρχεία στον κατάλογο / usr / bin /. Τώρα μπορούμε να δημιουργήσουμε ένα εναλλακτικό όνομα για το πρόγραμμά μας ως root:

# cd / usr / bin # ln -s / usr / bin / keychain kc # ls -l keychain   -rwxr-xr-x 1 ρίζα ρίζας 10150 12 Δεκεμβρίου 20:09 / usr / bin / keychain # ls -l kc   lrwxrwxrwx 1 ρίζα ρίζας 17 Μαρτίου 27 17:44 kc -\u003e / usr / bin / keychain

Σε αυτό το παράδειγμα, δημιουργήσαμε ένα kc σύμβολο αναφοράς για το αρχείο / usr / bin / keychain.

# mv / usr / bin / keychain / usr / bin / kc / usr / τοπικό / bin # ls -l / usr / local / bin / kc   lrwxrwxrwx 1 ρίζα ρίζας 17 Μαρτίου 27 17:44 kc -\u003e / usr / bin / keychain

Επειδή χρησιμοποιήσαμε την απόλυτη διαδρομή κατά τη δημιουργία του συνδέσμου, συνεχίζει να δείχνει στο αρχείο / usr / bin / keychain, το οποίο δεν υπάρχει πλέον. Αλλά εάν χρησιμοποιήσαμε τη σχετική διαδρομή κατά τη δημιουργία του συνδέσμου, θα παραμείνει ενεργός.

Συχνά και τα δύο είδη συμβόλου (με απόλυτη και σχετική και μονοπάτια) λειτουργούν καλά. Το παρακάτω παράδειγμα δείχνει τον τρόπο δημιουργίας ενός συνδέσμου συμβόλων, ο οποίος συνεχίζει να λειτουργεί μετά τη μετακίνησή του και το αρχείο στο οποίο αναφέρεται σε έναν άλλο κατάλογο:

# cd / usr / bin # ln -s keychain kc # ls -l kc   lrwxrwxrwx 1 ρίζα ρίζας 8 Ιαν 5 12:40 kc -\u003e keychain # mv keychain kc / usr / τοπικό / bin # ls -l / usr / local / bin / keychain   -rwxr-xr-x 1 ρίζα ρίζας 10150 12 Δεκεμβρίου 20:09 / usr / local / bin / keychain # ls -l / usr / local / bin / kc   lrwxrwxrwx 1 ρίζα ρίζας 17 Μαρτίου 27 17:44 kc -\u003e μπρελόκ

Τώρα μπορούμε να εκτελέσουμε το πρόγραμμα "keychain" μεταβαίνοντάς το ως / usr / local / bin / kc

rm

Τώρα που γνωρίζουμε πώς λειτουργούν οι ομάδες cp, mv   και ln   Ήρθε η ώρα να μάθετε πώς να διαγράφετε αρχεία. Συνήθως, η κατάργηση γίνεται με την εντολή rm. Για να διαγράψετε πολλά αρχεία, απλώς εισαγάγετε τα ονόματα τους χωρισμένα με ένα κενό διάστημα στη γραμμή εντολών ως επιχειρήματα rm:

\$ cd / tmp \$ αγγίξτε το αρχείο1 αρχείο2 \$ ls -l file1 file2   -rw-r-r-1 ρίζα ρίζας 0 Ιαν. 1 16:41 file1 - rw-r-r-- 1 ρίζα ρίζας 0 Ιαν 1 16:41 file2 \\ $ rm αρχείο1 αρχείο2 \$ ls -l file1 file2   ls: file1: κανένα τέτοιο αρχείο ή κατάλογο ls: file2: κανένα τέτοιο αρχείο ή κατάλογος

Θυμηθείτε αυτό διαγραμμένα αρχεία   αδύνατο να ανακτήσει (αν και μπορείτε να δοκιμάσετε). Επομένως, πολλοί αρχάριοι χρήστες του Linux χρησιμοποιούν την επιλογή "-i"   ομάδες rmτο οποίο απαιτεί να ζητήσετε από τον χρήστη να επιβεβαιώσει τη διαγραφή κάθε αρχείου.

\$ rm -i file1 file2   rm: αφαιρέστε το κανονικό άδειο αρχείο `file1 '; y   rm: αφαιρέστε το κανονικό άδειο αρχείο `file2 '; y

Στο τελευταίο παράδειγμα, πριν τη διαγραφή κάθε αρχείου, η εντολή rm   Ρωτάει: θέλει πραγματικά ο χρήστης να διαγράψει το αρχείο; Για να επιβεβαιώσετε τη διαγραφή, πατήστε το πλήκτρο "y"   στο πληκτρολόγιο και να αρνηθεί να διαγράψει - το κλειδί "n".

Μπορείτε να διακόψετε την εκτέλεση οποιασδήποτε εντολής (αν κάτι πήγε στραβά σύμφωνα με τον προορισμό) πατώντας το συνδυασμό CtrlΓ.

Κάντε την εντολή rm να ζητήσετε επιβεβαίωση για να διαγράψετε κάθε αρχείο, ακόμη και χωρίς την επιλογή "-i"   μπορεί να προστεθεί στο αρχείο ~ / .bashrc   χρησιμοποιώντας τη γραμμή επεξεργασίας αγαπημένων σας κειμένου:

alias rm = "rm -i"

rmdir

Υπάρχουν δύο τρόποι για να διαγράψετε τους καταλόγους: μπορείτε να διαγράψετε όλα τα περιεχόμενα του καταλόγου μία προς μία και στη συνέχεια να χρησιμοποιήσετε την εντολή rmdir   για να διαγράψετε τον ίδιο τον κατάλογο:

\$ mkdir mydir \$ αγγίξτε το mydir / αρχείο1 \$ rm mydir / αρχείο1 \$ rmdir mydir

Αυτή η μέθοδος αναφέρεται συνήθως ως η "μέθοδος διαγραφής καταλόγων για ηττημένους". Είναι πολύ πιο βολικό να χρησιμοποιήσετε την εντολή "rm -rf"   για να διαγράψετε τον κατάλογο με όλο το περιεχόμενό του.

\$ rm -rf mydir

Χρησιμοποιήστε αυτήν την εντολή με προσοχή, επειδή με τη βοήθειά της είναι πολύ εύκολο για έναν άπειρο διαχειριστή (ειδικά με δικαιώματα root) να σπάσει ξύλο (και συστήματα Linux).

Χρησιμοποιήστε μπαλαντέρ

Τι είναι τα μπαλαντέρ

Με την καθημερινή χρήση του Linux, υπάρχουν συχνά περιπτώσεις όπου πρέπει να εκτελέσετε μια απλή λειτουργία (για παράδειγμα rm) σε πολλά αρχεία. Σε αυτήν την περίπτωση, δεν είναι πολύ βολικό να ορίσετε όλα τα ονόματα αρχείων στη γραμμή εντολών:

\$ rm αρχείο1 αρχείο2 αρχείο3 αρχείο4 αρχείο5 αρχείο6 αρχείο7 αρχείο8

Αυτό το πρόβλημα μπορεί να λυθεί με μπαλαντέρ. Ο διερμηνέας εντολών Linux υποστηρίζει τη δυνατότητα καθορισμού πολλαπλών αρχείων με χρήση προτύπων (για ιστορικούς λόγους, αυτό ονομάζεται επίσης "globbing"). Bash και άλλες εντολές Linux επιλέγουν μόνο εκείνα τα αρχεία που ταιριάζουν με το μοτίβο. Έτσι, εάν πρέπει να διαγράψετε αρχεία από το αρχείο1 στο αρχείο8, πρέπει να γράψετε:

\$ rm αρχείο

Και αν θέλετε να διαγράψετε όλα τα αρχεία των οποίων τα ονόματα ξεκινούν με το αρχείο λέξης και ένα αρχείο που ονομάζεται αρχείο:

\$ rm αρχείο *

Μοτίβο *   αντιστοιχεί σε οποιονδήποτε χαρακτήρα, ακολουθία χαρακτήρων ή "χωρίς χαρακτήρα". Φυσικά, τα πρότυπα μπορούν να χρησιμοποιηθούν όχι μόνο για τη διαγραφή αρχείων, όπως θα δείτε παρακάτω.

Αν δεν βρέθηκε καμία αντιστοιχία

Αν θέλετε να εμφανίσετε μια λίστα αρχείων στον κατάλογο / etc / των οποίων τα ονόματα αρχίζουν με το γράμμα "g"   και ένα αρχείο που ονομάζεται "g" (αν υπάρχει), πρέπει να γράψετε:

\$ ls -d / etc / g *   / etc / gconf / etc / ggi / etc / gimp / etc / gnome / etc / gnome-vfs-

Ας δούμε τι θα συμβεί αν ορίσετε ένα πρότυπο που δεν ταιριάζει με κάποιο όνομα αρχείου:

\$ ls -d / usr / bin / asdf * jkl   ls: / usr / bin / asdf * jkl: Δεν υπάρχει τέτοιο αρχείο ή κατάλογος

Σε αυτό το παράδειγμα, προσπαθήσαμε να εμφανίσουμε μια λίστα αρχείων των οποίων τα ονόματα αρχίζουν με "asdf" και τελειώνουν με "jkl". Ο διερμηνέας εντολών εξέδωσε ένα μήνυμα ότι δεν βρέθηκαν αρχεία με τέτοια ονόματα.

Σύνταξη προτύπου: * και?

Εξετάσαμε πώς λειτουργεί η σφαίρα (επέκταση ονόματος αρχείου). Και τώρα ας ρίξουμε μια πιο προσεκτική ματιά στη σύνταξη των προτύπων:

*   αντιστοιχεί σε μηδέν ή περισσότερους χαρακτήρες:

  • / etc / g *   - όλα τα αρχεία στον κατάλογο / etc / των οποίων τα ονόματα αρχίζουν με "g" και ένα αρχείο που ονομάζεται "g".
  • / tmp / my * 1   - όλα τα αρχεία στον κατάλογο / tmp των οποίων τα ονόματα αρχίζουν με "my" και τελειώνουν με "1" (συμπεριλαμβανομένου του αρχείου που ονομάζεται "my1")

?   αντικαθιστά οποιοδήποτε χαρακτήρα:

  • myfile;   - κάθε αρχείο του οποίου το όνομα αρχίζει με τη λέξη "myfile" ακολουθούμενη από οποιοδήποτε χαρακτήρα.
  • / tmp / σημειώσεις; txt   - αντιστοιχεί σε αρχεία που ονομάζονται "notes.txt" και "notes_txt" (αν υπάρχουν στο / tmp /).

Αγκύλες:

Το μοτίβο "" είναι πολύ παρόμοιο με το " ? "αλλά σας επιτρέπει να καθορίσετε ρητά ένα σύνολο χαρακτήρων.Το μοτίβο" "αντιστοιχεί σε ένα χαρακτήρα από εκείνα που καθορίζονται σε παρενθέσεις.Μπορείτε επίσης να καθορίσετε ένα εύρος χαρακτήρων σε παρενθέσεις (για αυτό χρησιμοποιείτε τον χαρακτήρα - / παύλα) ή αρκετές σειρές σε μια σειρά, τότε το πρότυπο θα ταιριάζει με ένα σύμβολο από αυτήν την περιοχή:

  • myfile   - αντιστοιχεί στο myfile1 και το myfile2. Το πρότυπο θα λειτουργεί εφ 'όσον υπάρχει τουλάχιστον ένα από αυτά τα δύο αρχεία.
  • hangeog   - αντιστοιχεί σε αρχεία με τα ονόματα Changelog, ChangeLog, changeLog και changelog. Όπως μπορείτε να δείτε, η χρήση ενός μοτίβου είναι χρήσιμη όταν αναζητάτε ονόματα που διαφέρουν στην περίπτωση.
  • ls / etc / *   - λίστα των αρχείων στον κατάλογο / etc / των οποίων τα ονόματα αρχίζουν με ένα ψηφίο.
  • ls / tmp / *   - λίστα των αρχείων στον κατάλογο / tmp / των οποίων τα ονόματα αρχίζουν με γράμμα (κεφαλαία ή κεφαλαία)

Το κατασκεύασμα [είναι παρόμοιο, εκτός από το ότι αντιστοιχεί σε ένα μόνο χαρακτήρα, που δεν αναφέρεται μεταξύ [[   και ] . Για παράδειγμα:

  • rm myfile [   - διαγράφει όλα τα αρχεία των οποίων τα ονόματα αποτελούνται από τη λέξη "myfile" και το μόνο ψηφίο που ακολουθεί, εκτός από το αρχείο "myfile9".

Παραδείγματα χρήσης

Ακολουθούν ορισμένα παραδείγματα χρήσης προτύπων. Δεδομένου ότι bash ερμηνεύει τους χαρακτήρες ? , [ , ] , *   ως μοτίβα αντικατάστασης, πρέπει να λαμβάνεται μέριμνα όταν χρησιμοποιείτε επιχειρήματα που περιέχουν αυτούς τους χαρακτήρες. Για παράδειγμα, αν θέλετε να δημιουργήσετε ένα αρχείο που περιέχει τη συμβολοσειρά " * "τότε η ακόλουθη εντολή δεν θα κάνει ό, τι θέλετε:

\$ echo *\u003e /tmp/mynewfile.txt

Αν στον κατάλογο εργασίας σας υπάρχει ένα ή περισσότερα αρχεία των οποίων τα ονόματα εμπίπτουν στο μοτίβο " * "τότε θα βρείτε στο /tmp/mynewfile.txt μια λίστα με τα ονόματά τους, όχι μια συμβολοσειρά" * "Αλλά πώς μπορούμε να επιτύχουμε αυτό που θέλαμε; Ο πρώτος τρόπος είναι να πάρουμε μια συμβολοσειρά σε απλά εισαγωγικά." Το Bash αναφέρεται σε μια συμβολοσειρά σε απλά εισαγωγικά ως κανονική συμβολοσειρά κειμένου και δεν αποκαλύπτει χαρακτήρες αντικατάστασης.

\$ echo "*"\u003e /tmp/mynewfile.txt

Μετά την εκτέλεση αυτής της εντολής, το αρχείο σας θα περιέχει τη συμβολοσειρά " * "όπως αναμένεται. Ένας άλλος τρόπος είναι να προστατέψετε τους ειδικούς χαρακτήρες με μια ανάστροφη κάθετο ( \ ). Η αντίθετη κατεύθυνση που στέκεται μπροστά από τον ειδικό χαρακτήρα ενημερώνει τον διερμηνέα ότι αυτός ο χαρακτήρας πρέπει να αντιμετωπίζεται ως απλό κείμενο και όχι ως πρότυπο.

\$ echo \\\\ *\u003e /tmp/mynewfile.txt

Και οι δύο προτεινόμενες μέθοδοι (μοναδικά εισαγωγικά και θωράκιση) δίνουν το επιθυμητό αποτέλεσμα. Εφόσον μιλάμε για διαφυγή με αντίστροφη κάθετο, αξίζει να το λέτε αυτό για να υποδείξετε έναν χαρακτήρα κειμένου "\"   μπορείτε να το επισυνάψετε σε απλά εισαγωγικά ή να γράψετε "\\\"   (ο συνδυασμός αυτός θα ερμηνευθεί από τον διερμηνέα ως κανονική ενιαία ανάστροφη κάθετο "\" )

Σημείωση: Τα διπλά εισαγωγικά δουλεύουν με τον ίδιο τρόπο με τα μοναδικά εισαγωγικά, αλλά επιτρέπουν στο bash να ερμηνεύσει μερικούς ειδικούς χαρακτήρες. Επομένως, τα μοναδικά εισαγωγικά είναι ο καλύτερος τρόπος για να περάσετε μόνο ένα κείμενο σε μια εντολή. Για περισσότερες πληροφορίες σχετικά με τα πρότυπα, διαβάστε τη βοήθεια. "άνθρωπος 7 σφαίρα". Για περισσότερες πληροφορίες σχετικά με τη χρήση των εισαγωγικών, διαβάστε την ενότητα. QUOTTING   Βοήθεια "άνθρωπος 8 σφαίρα".

Συμπέρασμα

Συγχαρητήρια, ολοκληρώσατε την ανασκόπηση των βασικών στοιχείων του Linux! Ελπίζω ότι το υλικό θα ήταν χρήσιμο για εσάς. Τα θέματα που καλύπτονται σε αυτό το σεμινάριο, καθώς και τα βασικά του bash, βασικά εντολές linux, σύνδεσμοι και μπαλαντέρ αποτελούν τη βάση για το επόμενο άρθρο σχετικά με τα βασικά της διοίκησης, το οποίο θα καλύπτει τις τακτικές εκφράσεις, τα δικαιώματα πρόσβασης, τη διαχείριση λογαριασμού χρηστών και πολλά άλλα.

Συνέχιση του θέματος:
Smartphone

Φαίνεται ακόμα ότι το Android 4.4 KitKat είναι μια νέα έκδοση του συστήματος, αλλά ας θυμηθούμε ότι οι τέσσερις εισήχθησαν ήδη το φθινόπωρο του 2013! Για όλο αυτό το διάστημα συνέβη ...

Νέα άρθρα
/
Δημοφιλή