1. Permissions ικαιώµατα χρήσης αρχείων και καταλόγων http://repfiles.kallipos.gr/html_books/79/205_chapter5.html#sec_perms Υπάρχουν 9 προστασίες ή mode rwxrwxrwx (Owner/Group/Public) µερικά παραδείγµατα είναι: «read-only-mode» θα έχει r--r--r-- «write-mode» θα έχει rw-rw-rw- «executed-mode» θα έχει rwxr-xr-x vassik@aetos:~$ ls -l Ιδιοκτήτης Οµάδα R W X 4 2 1 user group others r 400 40 4 w 200 20 2 x 100 10 1 Η προστασία π.χ. rwx------ δίνει δικαιώµατα στον ιδιοκτήτη του (vassik) ανάγνωσης (r) εγγραφής (w) και εκτέλεσης(x) και κανένα δικαίωµα στην οµάδα του και στους υπόλοιπους. rwx --- --- 111 000 000 (αν βάλουµε 1 όταν έχει δικαίωµα, και 0 όταν δεν έχει ) 700 (οκταδικός) User: Group: Others: rwx rwx rwx 777 400+200+100+ 40+20+10+ 4+2+1 rwx r-x r-x rw- r-- r-- 755 644 400+200+100+ 400+200+ 40 +10+ 40+ 4+1 4+ Status stat Κατάσταση file & file system vassik@aetos:~$ stat xunix/lab3/hello.doc User mask umask Μάσκα δικαιωµάτων χρήστη Tα δικαιώµατα που δίνονται κατά την δηµιουργία ενός αρχείου ή καταλόγου και διαφέρουν ανά σύστηµα ελέγχονται µε το user mask. H µεταβλητή user mask δίνει τα δικαιώµατα που αφαιρούνται αυτόµατα από τα αρχεία και τους καταλόγους που δηµιουργεί ένας χρήστης έτσι π.χ.0077 σηµαίνει rwx --- --- σηµαίνει ότι µόνο ο ιδιοκτήτης θα έχει δικαιώµατα στα νεοδηµιουργηθέντα αρχεία & φακέλλους vassik@aetos:~$ umask 0022 σηµαίνει για ΦΑΚΕΛΛΟ rwx r-x r-x Συνήθη δικαιώµατα είναι τα 0644 (rw- r--r--) για αρχεία -οι άλλοι µπορούν να διαβάσουν µόνο 0755 (rwxr-xr-x) για καταλόγους- οι άλλοι µπορούν να διαβάσουν/εκτελέσουν [1]
777 (όλα τα δικαιώµατα) 666 (όλα τα δικαιώµατα σε αρχεία) 755-644 - 022 (µείον rwx για g,o) 022 (µείον w για g,ο) Αν το umask είναι 077 σηµαίνει για τους φακέλους ότι τα δικαιώµατα που αφαιρούνται είναι 7 (τα rwx) από την οµάδα (g) και τους υπόλοιπους (o). Αν το umask είναι 022: vassik@aetos:~$ umask 022 vassik@aetos:~$ umask 022 αλλαγή της µάσκας σε 022 σηµαίνει ότι η οµάδα (g) και οι υπόλοιποι (o) δεν θα έχουν το δικαίωµα 2 (το w) στους φακέλους δηλ. rwx r-x r-x και στα αρχεία δεν θα έχουν το δικαίωµα 2 αλλά και το 1, γνωρίζοντας ότι στα default δικαιώµατα των αρχείων δεν περιλαµβάνεται δικαίωµα (x) εκτέλεσης δηλ. rw- r-- r-- Change mode chmod Αλλαγή δικαιωµάτων Tα δικαιώµατα ενός αρχείου ή καταλόγου αλλάζουν µε την εντολή chmod 400+200+40+4 = 644 vassik@aetos:~$ chmod 644 arxeio vassik@aetos:~$ chmod u+w arxeio vassik@aetos:~$ chmod o+wr arxeio vassik@aetos:~$ chmod g-w arxeio vassik@aetos:~$ chmod g=r arxeio vassik@aetos:~$ chmod ugo+r, u+w arxeio Αλλαγή δικαιωµάτων για το arxeio σε rw-r--r-- + προσθήκη δικαιώµατος - αφαίρεση δικαιώµατος = θέτει ακριβή δικαιώµατα u ser g roup o thers r 400 40 4 w 200 20 2 x 100 10 1 u: user, g: group, o: others και a: all Υπάρχει και ένα ακόµη σύνολο δικαιωµάτων (sst) σε ένα ψηφίο που είναι προαιρετικό και κοινό για όλες τις οµάδες: sst (µε τιµές 1..7 δηλαδή 1 4:s, 2:S, 1:t) s: setuid Αλλαγή δικαιωµάτων χρήστη at run time (για αρχεία εκτελέσιµα) Όταν δηµιουργείται ένας κατάλογος ανήκει στο χρήστη που ανήκει ο γονικός (για directory) S: Setgid Αλλαγή δικαιωµάτων της οµάδας του χρήστη (για αρχεία εκτελέσιµα) Όταν δηµιουργείται ένας κατάλογος ανήκει στην οµάδα που ανήκει ο γονικός (για directory) t : sticky bit Το εκτελέσιµο (πχ vi) παραµένει στην µνήµη (για αρχεία και παλιότερα συστήµατα) Ο χρήστης µπορεί να διαγράψει από κοινόχρηστους καταλόγους µόνο τα δικά του (για directory) Το lab4 είναι κατάλογος vassik@aetos:~$ chmod R 755 myunix/lab4 H επιλογή R σε έναν κατάλογο θέτει δικαιώµατα στο κατάλογο αλλά και στους υποκαταλόγους του (recursive). Προσοχή το R είναι κεφαλαίο. 1 chmod 1666 το sticky bit 1 (δεν επιτρέπει τις διαγραφές..) [2]
2. Metacharacters & Κλάσεις Χαρακτήρων *,?,[ ],[-] http://repfiles.kallipos.gr/html_books/79/204_chapter4.html#sec_wildcards ls -l /tmp -t ~/work Oταν δίνεται µια εντολή, π.χ. οι επιλογές της εντολής (οptions), καθώς τα στοιχεία (αrguments/αρχεία) που χρειάζεται η εντολή, χωρίζονται µεταξύ τους µε κενό. Σε µια εντολή µπορούµε να χρησιµοποιήσουµε και ειδικούς χαρακτήρες, που λέγονται µεταχαρακτήρες, τους οποίους το κέλυφος ερµηνεύει πριν τους περάσει στην εντολή πχ Σύµβολο Σηµασία > Ανακατεύθυνση εξόδου πχ date >out >> Ανακατεύθυνση εξόδου (append) < Ανακατεύθυνση εισόδου << Ανακατεύθυνση εισόδου * Μπαλαντέρ αντικατάστασης ονόµατος αρχείου (µηδέν ή περισσότερους χαρακτήρες)? Mπαλαντέρ αντικατάστασης ονόµατος αρχείου (ένας χαρακτήρας) [] Μπαλαντέρ αντικατάστασης ονόµατος αρχείου (ένας χαρακτήρας από τις αγκύλες) `cmd` Αντικατάσταση εντολών πχ echo `date` $ (cmd) Αντικατάσταση εντολών ιασωλήνωση (pipe ) πχ cat /etc/passwd more Ή (εκτέλεση υπό όρους) && Και (εκτέλεση υπό όρους) & Εκτέλεση εντολής στο παρασκήνιο, διεργασίες παρασκηνίου πχ sleep 10& () Εντολές Οµάδος, Ακολουθίες Εντολές πχ (date; pwd; ls) >out ; Aκολουθία εντολών $ Ανάκτηση της τιµής µιας µεταβλητής # Σχόλιο \ Αποτροπή της ερµηνείας του επόµενου χαρακτήρα Μερικές φορές θέλουµε στην εντολή που τρέχει, να δώσουµε ένα ειδικό χαρακτήρα και να µη ερµηνευτεί π.χ. θέλω να τυπώσω το $, για να µην ερµηνευτεί το $ βάζω µπροστά το \ δηλ. echo My book costs \$20. Τα πολλά \ είναι δυσανάγνωστα, γιαυτό βάζουµε µονά ' ' ή τα διπλά " " (τα " ερµηνεύουν µόνο τα \ $ \ ` ` ). Υπάρχουν τρεις επιλογές για να αποφευχθεί η ερµηνεία των µεταχαρακτήρων από το κέλυφος 1. Αποτροπή της ερµηνείας του µεταχαρακτήρα µε µια ανάστροφη κάθετο (\) $ echo \# Naxa 100\$ \! # Naxa 100$! Θέλω κενό $ echo a b a b $ echo a\ \ \ \ \ \ \ b a b $ echo This could be \ > a very \ > long line\! This could be a very long line! 2. Χρήση µονών εισαγωγικών (' ' ) γύρω από το κείµενο. Τα µονά εισαγωγικά προστατεύουν όλους τους χαρακτήρες εκτός από το (\) $ echo '$USER='$USER $USER=vassik $ echo -e 'name \t: John' name : John Θέλω tab 3. Χρήση διπλών εισαγωγικών (" ") γύρω από το κείµενο. Τα διπλά εισαγωγικά προστατεύουν όλους τους χαρακτήρες εκτός από τους $ \ ` ` Τα διπλά εισαγωγικά είναι πιο συνήθη, µιας και συχνά χρησιµοποιούνται µεταβλητές περιβάλλοντος. option -e (enable..) escape chars eg: \n newline \t tab \a beep $echo "\$USER=$USER" $USER=vassik $ echo -e " My current dir is `pwd` \n and my home dir is $HOME" My current dir is /tmp and my home dir [3] is /home/staff/ektaktoi/vassik
Σηµείωση Τα Μονά και διπλά εισαγωγικά προστατεύουν το ένα το άλλο πχ: $ echo 'Hi "Intro to Unix" Class' Hi "Intro to Unix" Class $ echo "Hi 'Intro to Unix' " Hi 'Intro to Unix' Class Xρήση { } για προστασία των Μεταβλητών vassik@aetos:~$ echo $USERWork vassik@aetos:~$ δεν ξέρει την $USERWork και δεν τυπώνει κάτι Oι µεταχαρακτήρες(wildcards) µπαλαντέρ µπαίνουν στις εντολές για να αντικαταστήσουν ονόµατα ή µέρος τoυ ονόµατος αρχείων και καταλόγων. Έτσι µε την εντολή rm ri hello* ζητώ να σβηστούν όλα εκείνα τα αρχεία και οι φάκελοι που το όνοµά τους ξεκινά µε hello. (το όνοµα µετά µπορεί να έχει και κάτι άλλο µετά π.χ. µπορεί να ονοµάζεται helloversion1). Οι εκφράσεις µε wildcard στις εντολές rm, mv µε (π.χ. rm h*e* ) να δοκιµάζονται πρώτα µε τις εντολές ls ή echo (π.χ. echo rm h*e* ) ώστε να µην σβηστούν ή µεταφερθούν άθελά µας κάτι που δεν επιθυµούµε. Το * αντικαθιστά από κανέναν έως όλους τους χαρακτήρες ενός ονόµατος: ls * λίστα µε όλα (αρχεία και κατάλογοι) ls *.* λίστα µε εκείνα που στο όνοµά τους υπάρχει τελεία Το? αντικαθιστά έναν ακριβώς χαρακτήρα ενός ονόµατος: ls? λίστα µε εκείνα που το όνοµά τους είναι ένας χαρακτήρας ls lab? λίστα µε εκείνα που το όνοµά τους ξεκινά µε lab και µετά ακολουθεί ένας χαρακτήρας πχ. lab1, lab2, lab3, labx. Mε τις [ ] αντικαθιστάται ένας ακριβώς χαρακτήρας µέσα από τις αγκύλες: ls lab[123] λίστα µε εκείνα που το όνοµά τους ξεκινά µε lab και µετά ακολουθεί ή το 1 ή το 2 ή το 3 πχ. lab1, lab2, lab3 ls lab[1-3] τo ίδιο ακριβώς µε πριν (αντικατάσταση εύρους) ls lab[!123] λίστα µε εκείνα που το όνοµά τους ξεκινά µε lab και µετά ακολουθεί ένας χαρακτήρας που δεν είναι 1 ή 2 ή 3 πχ. labx. Οι χαρακτήρες που αντικαθιστά οι µεταχαρακτήρες φαίνονται στον παρακάτω πίνακα: Χαρακτήρες Ποιόν * 0 έως όλους οποιονδήποτε? 1 οποιονδήποτε [ ] 1 έναν από αυτούς που βρίσκονται µέσα στις [ ] πχ. για το [abcd] ή a, ή b, ή c, ή d. [-] 1 έναν από αυτούς που βρίσκονται µέσα στο κλειστό διάστηµα πχ. για το [a-d] ή a, ή b, ή c, ή d. [!] [^] 1 δεν πρέπει να υπάρχει ένας από αυτούς που βρίσκονται µέσα στα [ ] πχ. για το [!a-d] να µην έχει a, ή b, ή c, ή d. Κλάσεις χαρακτήρων πχ [ [:digit:] ] [![:upper:] ] vassik@aetos:~$ echo ${USER}Work vassikwork vassik@aetos:~$ [4]
στις [ ] µπαίνουν και ονόµατα κλάσεων χαρακτήρων όπως π.χ alnum, alpha, ascii, blank,cntrl, digit, graph, lower, print, punct, space, upper, word, xdigit. - εν γίνεται αντικατάσταση των wildcards όταν είναι µέσα σε µονά ή διπλά εισαγωγικά. - Aν δεν βρεθεί αντιστοιχία µε κάποιο όνοµα αρχείου τότε τα wildcards δεν µεταφράζονται. - Τα wildcards µπορούν να αποτελέσουν τµήµα διαδροµής π.χ. echo /*/*/*txt, τι δίνει η cp * Παραδείγµατα Έστω ότι έχω 10 αρχεία µε ονόµατα: c c1 c15 c2 c25 c250 c3 c35 c5 c8 vassik@aetos:~$ ls c* c c1 c15 c2 c25 c250 c3 c35 c5 c8 10 αρχεία µε 1 χαρακτήρα και πάνω αρχίζουν µε c και µετά ότι νάναι (και τίποτα) Να µην υπάρχει στο όνοµα ένας χαρακτήρας ότι νάναι vassik@aetos:~$ ls c[!128]5 c35 1 αρχείο µε 3 χαρακτήρες 1 ος χαρακτήρας c 2 ος χαρακτήρας να µην είναι ή 1 ή 2 ή 8 και 3 ος χαρακτήρας 5 Αν αντικαθιστώντας, δεν υπάρχει αρχείο µε κατάλληλο όνοµα: Συνδυασµοί vassik@aetos:~$ ls c? c1 c2 c3 c5 c8 vassik@aetos:~ $ ls Κ* ls: cannot access K*: No such file or directory vassik@aetos:~$ ls?[128]* c1 c15 c2 c25 c250 c8 6 αρχεία - µε πάνω από 2 χαρακτήρες 1 ος χαρακτήρας ότι νάναι 2 ος χαρακτήρας ή 1 ή 2 ή 8 και 3 ος χαρακτήρας και µετά ότι νάναι (και τίποτα) v5 αρχεία - µε 2 χαρακτήρες αρχίζουν µε c και µετά 1 χαρακτήρα vassik@aetos:~$ ls c[128]5 c15 c25 2 αρχεία µε 3 χαρακτήρες 1 ος χαρακτήρας c 2 ος χαρακτήρας ή 1 ή 2 ή 8 3 ος χαρακτήρας 5 vassik@aetos:~ $ ls?c c? ls: cannot access?c: No such file or directory c1 c2 c3 c5 c8 vassik@aetos:~$ ls?[!128]* c3 c35 c5 3 αρχεία - µε πάνω από 2 χαρακτήρες 1 ος χαρακτήρας ότι νάναι 2 ος χαρακτήρας να µην 1 ή 2 ή 8 και 3 ος χαρακτήρας και µετά ότι νάναι (και τίποτα) vassik@aetos:~ $ mkdir tests tests/lab3 tests/lab3/ask1; cd tests/lab3/ask1 vassik@aetos:~/tests/lab3/ask1$ touch Hello.dat hello.dat hello.doc vassik@aetos:~/tests/lab3/ask1$ ls -l -rw------- 2 vassik conit 0 Mar 24 20:23 hello.dat -rw------- 2 vassik conit 0 Mar 24 20:23 Hello.dat -rw------- 2 vassik conit 0 Mar 24 20:23 hello.doc Η σειρά εµφάνισης των 3 αρχείων! ηµιουργία 3 αρχείων µέσα στο:~/tests/lab3/ask1 Τα βασικά σύνολα χαρακτήρων είναι τα: ascii (7 bits, 128 χαρακτήρες 2 ) iso_8859-1 (8 bits, 256 χαρακτήρες), iso_8859-2, iso_8859-7 (greek), iso_8859-16 utf8 (1 χαρακτήρας από 8-16 bits), utf16 (1 χαρακτήρας 16-32bits) 3 Στα σύνθετα σύνολα χαρακτήρων (UTF), ορίζονται και ισοδυναµίες χαρακτήρων πχ À à ã ä A Ά A a. Έτσι το [aα-ζ] ταιριάζει και τους πεζούς χαρακτήρες [a-z] αφού χρησιµοποιείται UTF charset 4. ( aabbccdd zz) 2 Οι πρώτοι 32 χαρακτήρες είναι µη εκτυπώσιµοι. 3 ώστε εντολές man ascii, man iso_8859-1, man utf8 για λεπτοµέρειες 4 Στο κατάλογο /usr/share/i18n/locales είναι τα διαθέσιµα locales και στο αρχείο /etc/locale.gen ποια locales θέλουµε να χρησιµοποιήσουµε στο σύστηµά µας.τρέξτε και την εντολή locale [5]
vassik@aetos:~lab3 $ ls * a A ask1 b B c C d D e E vassik@aetos:~lab3 $ ls [A-B] A b B vassik@aetos:~lab3 $ ls [a-c] a A b B c vassik@aetos:~lab3 $ ls [a-a] a vassik@aetos:~lab3 $ ls [A-a] ; ls [E-B] ls: cannot access [A-a]: No such file or directory ls: cannot access [E-B]: No such file or directory vassik@aetos:~lab3 $ ls [!abe] A B c C d D E vassik@aetos:~lab3 $ ls [!A-B] a c C d D e E vassik@aetos:~lab3 $ ls [!A-a] a A b B c C d D e E vassik@aetos:~lab3 $ touch 0 1 2 3 4 5 6 7 8 9 vassik@aetos:~lab3$ touch 10 11 12 13 21 22 vassik@aetos:~lab3 $ ls 0 1 10 11 12 13 2 21 22 3 4 5 6 7 8 9 a A ask1 b B c C d D e E vassik@aetos:~lab3 $ ls [012] 0 1 2 vassik@aetos:~lab3 $ ls [0-9] 0 1 2 3 4 5 6 7 8 9 vassik@aetos:~lab3 $ ls [1-1] 1 vassik@aetos:~lab3 $ ls [0-12] 0 1 2 vassik@aetos:~lab3 $ ls [11-13] 1 3 vassik@aetos:~lab3 $ ls [12-22] 1 2 vassik@aetos:~lab3 $ ls [12-3] 1 2 3 vassik@aetos:~lab3 $ ls [!012] 3 4 5 6 7 8 9 a A b B c C d D e E Έστω 10 αρχεία µε ονόµατα: A B C D E a b c d e Σειρά εµφάνισης (το ask1 είναι directory) Aπό τον τρόπο ταξινόµησης των αρχείων, γίνεται αντιληπτό και το αποτέλεσµα της αντικατάστασης εύρους χαρακτήρων. εν δίνει κάποιο αποτέλεσµα Να µην είναι ο χαρακτήρας a ή b ή e Ενας χαρακτήρας, που δεν βρίσκεται στο διάστηµα Α-Β Το διάστηµα Α-a δεν υπάρχει, άρα όλα Έστω ακόµη 16 αρχεία (αυτά υπάρχουν από πριν- ΣΥΝΟΛΟ 26 αρχεία) ένας χαρακτήρας ή 0 ή 1 ή 2 στο διάστηµα 0 έως 9 στο διάστηµα 1-1 στο διάστηµα 0-1 ή το 2 στο διάστηµα 1-1 ή το 1 ή το 3 στο διάστηµα 2-2 ή το 1 ή το 2 στο διάστηµα 2-3 ή το 1 δεν θα εµφανιστούν τα 0,1,2 καθώς και τα 10 11 12 13 21 22 (έχουν 2 χαρακτήρες) Η εντολή export LC_ALL=C μας γυρνάει στο ascii (δεν έχει ελληνικά) (echo $LANG, ή LC_ALL override LANG) ενώ η εντολή export LC_ALL=el_GR.ISO8859-7 (ελληνικά, αν είναι εγκατεστημένο) [6]
3. Aνακατεύθυνση εντολής (redirect) Redirecting the standard output > και >> Οι εντολές που δίναµε µέχρι τώρα εµφάνιζαν τα αποτελέσµατά τους στην οθόνη. Αν θέλουµε το αποτέλεσµα µιας εντολής π.χ. της ls να µπεί σε ένα αρχείο που λέγεται π.χ. dirlab4 βάζουµε > vassik@aetos:~/xunix/lab4$ ls -la > dirlab4 vassik@aetos:~/xunix/lab4$ cat dirlab4 total 228 drwxr-xr-x 2 vassik conit 140 Apr 7 14:45. drwxr-xr-x 7 vassik conit 62 Apr 6 22:21.. -rwx--x--x 2 vassik conit 0 Apr 7 01:08 Dir1 κτλ vassik@aetos:~/xunix/lab4$ date >> dirlab4 vassik@aetos:~/xunix/lab4$ l Το dirlab4 είναι το νέο αρχείο που θα δηµιουργηθεί και θα περιέχει ότι θα έδειχνε η εντολή ls -la Mε cat βλέπετε τι περιέχει το αρχείο dirlab4 Αν το αρχείο υπάρχει ήδη θα γίνει overwrite Στο αρχείο dirlab4 που περιέχει ότι θα έδειχνε η εντολή ls -la στην οθόνη θα προστεθεί (append) µια γραµµή ακόµη µε την ηµεροµηνία. Aν θέλω σε ένα αρχείο να µπει το αποτέλεσµα πολλών εντολών µαζί βάζω ( ) (date ; who) > dirlab4 Αν θέλω το αποτέλεσµα µιας εντολής να µπει στο τέλος ενός αρχείου/append βάζω >> cal -m3 >> dirlab4 Η ανακατεύθυνση 5 στο παραπάνω παράδειγµα έγινε σε αρχείο (αντί δηλαδή να γίνουν οι εντολές στην οθόνη γράφτηκαν σε αρχείο) θα µπορούσε όµως να σταλεί σε.. εκτυπωτή κτλ Redirecting the standard input < και << Υπάρχουν εντολές που παίρνουν τα δεδοµένα τους από το πληκτρολόγιο. Μπορούν να ανακατευθυνθούν και πάρουν τα δεδοµένα τους π.χ. από αρχεία. vassik@aetos:~ $ read a 4 vassik@aetos:~ $ read a < work1 vassik@aetos:~$ echo $a #! /bin/sh vassik@aetos:~$ tr avi AVI vassik VAssIk ^D vassik@aetos:~$ tr a-z A-Z<work1 #! /BIN/SH ECHO ===================== ECHO MY NAME IS : ECHO MY USERNAME IS: Η εντολή read a περιµένει να πληκτρολογήσουµε την τιµή του a (δώσαµε 4 ) Η εντολή µπορεί να ανακατευθυνθεί ώστε να διαβάσει τα δεδοµένα από το αρχείο work1 και όχι από το πληκτρολόγιο. Έτσι η a περιέχει την 1 η γραµµή του αρχείου work1 Η εντολή tr (translate) µεταφράζει/αλλάζει όλα τα a σε Α, τα v σε V και τα i σε I που θα πληκτρολογήσουµε. (δώσαµε vassik και το έκανε VΑssIk ) (το σταµατώ µε ^D) Η εντολή µπορεί να ανακατευθυνθεί ώστε να αλλάξει τα δεδοµένα του αρχείου work1 σε κεφαλαία (εµφανίζονται στην οθόνη όλες οι σειρές του αρχείου work1 έχοντας όµως κεφαλαία γράµµατα) ΚΥΤΤΑ στην 4 η εργασία την ανακατεύθυνση cat << 5 Με ή χωρίς κενά πριν και µετά από τα > και >> Έτσι π.χ. και η εντολή pwd >> file1 και η. pwd>>file1 είναι αποδεκτή [7]
4. Η µεταβλητή καταγραφής των path των εντολών: $PATH vassik@aetos:~$ echo $PATH /usr/local/bin:/usr/bin:/bin:/usr/games Tα διαφορετικά directories (πεδία) µεταξύ τους χωρίζονται µε : (όπως και τα πεδία του etc/passwd) Oι εντολές του συστήµατος βρίσκονται σε διαφορετικά directories π.χ. στο /bin βρίσκεται η εντολή ls, στο usr/bin βρίσκεται η finger κτλ. Το σύστηµα ψάχνει να βρεί εντολές στα directories που καταγράφονται στην µεταβλητή $PATH δηλ εδώ συµφωνα µε το παράδειγµα στα /usr/local/bin /usr/bin /bin /usr/games Για να τρέξει ένα script/εντολή που είναι στο τρέχον directory απαιτείται./ δηλ. να πείτε:./script1 όπου script1 είναι το όνοµα του script αρχείου που θέλετε να τρέξετε και που πρέπει να είναι εκτελέσιµο (δηλ. περιέχει µόνο εντολές και έχει mode x). Μ αυτό τον τρόπο πληροφορείτε το λειτουργικό σύστηµα σε ποιο φάκελο βρίσκεται η εντολή σας (το script σας) δηλ. του λέτε ότι είναι στο τρέχον directory. Άλλος τρόπος είναι να βάλετε µέσα στην µεταβλητή PATH το δικό σας χώρο, όπου θα πρέπει να ψάχνει για τυχόν εντολές π.χ. δηµιουργείτε φάκελο myscripts vassik@aetos:~$ mkdir myscripts vassik@aetos:~$ PATH=$PATH:$HOME/myscripts Βλέποντας το path µιας εντολής µε την which vassik@aetos:~$ which man /usr/bin/man vassik@aetos:~$ which ls /bin/ls Για να εκτελέσουµε µια εντολή που βρίσκεται σε άλλο µονοπάτι από αυτό που δίνει η which αρκεί να ζητήσουµε την εντολή µαζί µε το µονοπάτι της π.χ. αν η εντολή λέγεται less και είναι στο current φάκελο δίνουµε./less Εντολή word count wc - µετρώντας.. σε ένα αρχείο vassik@aetos:~/xunix/lab5$ wc /etc/passwd 1748 3501 135465 /etc/passwd vassik@aetos:~/xunix/lab5$ wc -l /etc/passwd 1748 /etc/passwd vassik@aetos:~/xunix/lab5$ wc -w /etc/passwd 3501 /etc/passwd vassik@aetos:~/xunix/lab5$ wc -c /etc/passwd 135465 /etc/passwd [8] H νέα τιµή της µεταβλητής PATH µπαίνει συνήθως στο αρχείο.profile ή στο.bashrc για να δούµε σε πιο κατάλογο βρίσκεται αποθηκευµένη η εντολή π.χ. man η option l (line) δίνει τον αριθµό των γραµµών η option w (word) δίνει τον αριθµό των λέξεων (όπου βρίσκει κενό ή newline, µετρά λέξεις) η option c (char) δίνει τον αριθµό των χαρακτήρων (µετρά και το newline)
5. Συνδέοντας εντολές µε pipelines - διασωληνώσεις Η προκαθορισµένη έξοδος µιας επεξεργασίας/προγράµµατος µπορεί να είναι η είσοδος µιας άλλης επεξεργασίας. Όταν γίνεται αυτό σχηµατίζεται µια pipeline vassik@aetos ~$ who vassik pts/0 partouma pts/1 kxouvero pts/3 2016-03-19 19:26 (ppp-2-85-13-75.home.otenet.gr) 2016-03-19 19:47 (ppp005055246159.access.hol.gr) 2016-03-19 18:18 (46.12.122.220.dsl.dyn.forthnet.gr) vassik@aetos:~/xunix/lab5$ who wc -l 3 vassik@aetos:~$ ls -l /tmp grep x1415 -rw-r--r-- 1 gpseirak x1415 158 Mar 20 22:08 ankanogradiel -rw-r--r-- 1 abesikio x1415 108 Mar 20 18:03 Besikiotis -rw-r--r-- 1 antomi x1415 1737 Mar 20 18:40 Domi -rw-r--r-- 1 aspyros x1415 28 Mar 21 00:07 first Το αποτέλεσµα της who (που µας δείχνει ποιοι είναι συνδεδεµένοι, δηλ. δίνει µια γραµµή για κάθε χρήστη).. Γίνεται είσοδος για το wc -l ώστε τελικά µετράει πόσοι χρήστες είναι συνδεδεµένοι.. To αποτέλεσµα του 1ου γίνεται είσοδος για το 2ο Η εντολή grep string file ψάχνει ένα string µέσα σε ένα file. Έτσι το αποτέλεσµα της ls δηλ. η λίστα του καταλόγου /tmp γίνεται το αντικείµενο έρευνας της grep ψάχνει δηλ. εκεί το string x1415 και αν το βρει µας το εµφανίζει. vassik@aetos:~$ ls -l /tmp grep x1415 sort lpr ώσε την λίστα αρχείων στο /tmp, ψάξε σ αυτήν το x1415, ταξινόµησε το αποτέλεσµα και τύπωσέ το. Αν δεν υπήρχε η δυνατότης pipeline για το παραπάνω θα έπρεπε να γράψουµε π.χ. ~$ ls -l /tmp > file1 ~$ grep x1415 file1 > file2 ~$ sort file2 > file3 ~$ lpr file3 ~$ rm file[123] Εντολές more /less Το more είναι ένα φίλτρο σελιδοποίησης κειµένου, παρουσιάζει µια πλήρη οθόνη την φορά (χρήσιµη στα µεγάλα αρχεία, ώστε να εµφανίζονται οι σελίδες σταδιακά π.χ. more /etc/passwd (µε space εµφανίζεται η επόµενη σελίδα, µε q,q βγαίνω). Το less είναι µεταγενέστερο του more, επιτρέπει και την κίνηση στο αρχείο προς τα πίσω (F) Συνήθως τα χρησιµοποιούµε σε συνδυασµό µε pipeline ( ) π.χ. set more Μέτρηµα αρχείων/φακέλων µέσα σε ένα φάκελο To αποτέλεσµα της εντολήs ls -l είναι 8 γραµµές η πρώτη γραµµή λέει total <αριθµός> οι άλλες 7 γραµµές είναι τα αρχεία /φάκελοι ~$ ls -l wc -l Μετρά πόσες γραµµές, δίνει η εντολή ls -l 8 To αποτέλεσµα 8 σηµαίνει ότι έχω 7 αρχεία (7=8-1 δηλ. βγάζω την γραµµή µε το total). Να γίνει από το Εργ2 η ασκ5, και η ασκ6 και από το Εργ3 η ασκ5, η ασκ6 και να τρέξτε εκτελέσιµα script (Τρέχουν τα αρχεία των εργασιών σας?) [9]