Ελληνικό Linux Tips HOWTO <author>Paul Anderson, <tt/paul@geeky1.ebtech.net/ <date>v3.1, 26 Δεκεμβρίου 1997 <abstract> Αυτό το HOWTO περιέχει υποδείξεις και πειραματισμούς, που είναι δύσκολο να βρεθούν και κάνουν το Linux ομορφότερο. </abstract> <toc> <sect>Εισαγωγή <p> Καλώς ήρθατε στο <bf/Linux Tips HOWTO/, μια λίστα από συμπαθητικά τρυκ και βελτιστοποιήσεις που θα κάνουν το Linux πιο ευχάριστο. Όλα όσα έχω εδώ είναι υποδείξεις που έβγαλα απ'το κεφάλι μου, και συμβουλές από το παλιό Tips-HOWTO (γιατί, άλλωστε, να βγάλω έξω καθώς πρέπει συμβουλές, σωστά;). Στείλτε μου, λοιπόν, όλες τις αγαπημένες σας μικρές χρήσιμες συμβουλές και οδηγίες ώστε να μπορέσω να τις ενσωματώσω στο επόμενο Tips-HOWTO. Paul Anderson <em/Συντηρητής--Linux TIPS HOWTO/ <tt/panderso@ebtech.net/ <sect> Σύντομες Υποδείξεις <sect1> Πρόχειρο Syslog Τρυκ <it/Paul Anderson, Συντηρητής του Tips-HOWTO/ <p> Ανοίξτε το αρχείο /etc/syslog.conf, και προσθέστε την παρακάτω γραμμή: <tscreen><verb> # Dump everything on tty8 *.* /dev/tty8 </verb></tscreen> ΠΡΟΕΙΔΟΠΟΙΗΣΗ: <it/ΜΗΝ ΞΕΧΑΣΕΤΕ ΝΑ ΧΡΗΣΙΜΟΠΟΙΗΣΕΤΕ TABS!/ στο syslog δεν αρέσουν τα κενά... <sect1> Script για να βλέπετε τα συμπιεσμένα HOWTOs. <it/Didier Juges,/ <tt/dj@destin.nfds.net/ <p> Απ' τον ένα αρχάριο στον άλλο, προέκυψε αυτό το μικρό script που διευκολύνει το ψάξιμο και το διάβασμα κειμένων howto. Τα howto αρχεία μου βρίσκονται στο /usr/doc/faq/howto/ και είναι συμπιεσμένα. Τα ονόματα των αρχείων είναι XXX-HOWTO.gz, όπου XXX είναι το θέμα του howto. Δημιούργησα το script με όνομα "howto" στον κατάλογο the /usr/local/sbin : <tscreen><code> #!/bin/sh if [ "$1" = "" ]; then ls /usr/doc/faq/howto | less else gunzip -c /usr/doc/faq/howto/$1-HOWTO.gz | less fi </code></tscreen> Όταν καλείται χωρίς παραμέτρους, εμφανίζει ο κατάλογος των διαθέσιμων αρχείων howto. Όταν καλείται με παράμετρο το πρώτο τμήμα του ονόματος του αρχείου (πριν την παύλα), το αποσυμπιέζει (κρατώντας το αρχικό αρχείο ανέπαφο) και μετά εμφανίζει το κείμενο. Για παράδειγμα, για να δείτε το κείμενο Serial-HOWTO.gz , γράψτε: $ howto Serial <sect1> Υπάρχει αρκετός ελεύθερος χώρος;;; <it/Hans Zoebelein,/ <tt/zocki@goldfish.cube.net/ <p> Ακολουθεί ένα μικρό script το οποίο ελέγχει περιοδικά αν υπάρχει αρκετός ελεύθερος χώρος διαθέσιμος σε οτιδήποτε εμφανίζεται στο mount (δίσκοι, cdrom, δισκέτα...) Αν ο χώρος εξαντλείται, τυπώνεται ένα μήνυμα κάθε X δευτερόλεπτα στην οθόνη και στέλνεται 1 μήνυμα με mail για κάθε γεμάτη συσκευή. <tscreen><code> #!/bin/sh # # $Id: check_hdspace,v 1.18 1996/12/11 22:33:29 root Exp root $ # # # Since I got mysterious error messages during compile when # tmp files filled up my disks, I wrote this to get a warning # before disks are full. # # If this stuff saved your servers from exploding, # send praising email to zocki@goldfish.cube.net. # If your site burns down because of this, sorry but I # warned you: no comps. # If you really know how to handle sed, please forgive me :) # # # Shoot and forget: Put 'check_hdspace &' in rc.local. # Checks for free space on devices every $SLEEPTIME sec. # You even might check your floppies or tape drives. :) # If free space is below $MINFREE (kb), it will echo a warning # and send one mail for each triggering device to $MAIL_TO_ME. # If there is more free space than trigger limit again, # mail action is also armed again. # # TODO: Different $MINFREE for each device. # Free /*tmp dirs securely from old junk stuff if no more free space. DEVICES='/dev/sda2 /dev/sda8 /dev/sda9' # device; your put disks here MINFREE=20480 # kb; below this do warning SLEEPTIME=10 # sec; sleep between checks MAIL_TO_ME='root@localhost' # fool; to whom mail warning # ------- no changes needed below this line (hopefully :) ------- MINMB=0 ISFREE=0 MAILED="" let MINMB=$MINFREE/1024 # yep, we are strict :) while [ 1 ]; do DF="`/bin/df`" for DEVICE in $DEVICES ; do ISFREE=`echo $DF | sed s#.\*$DEVICE" "\*[0-9]\*""\*[0-9]\*" "\*## | sed s#" ".\*##` if [ $ISFREE -le $MINFREE ] ; then let ISMB=$ISFREE/1024 echo "WARNING: $DEVICE only $ISMB mb free." >&2 #echo "more stuff here" >&2 echo -e "\a\a\a\a" if [ -z "`echo $MAILED | grep -w $DEVICE`" ] ; then echo "WARNING: $DEVICE only $ISMB mb free. (Trigger is set to $MINMB mb)" \ | mail -s "WARNING: $DEVICE only $ISMB mb free!" $MAIL_TO_ME MAILEDH="$MAILED $DEVICE" MAILED=$MAILEDH # put further action here like cleaning # up */tmp dirs... fi elif [ -n "`echo $MAILED | grep -w $DEVICE`" ] ; then # Remove mailed marker if enough disk space # again. So we are ready for new mailing action. MAILEDH="`echo $MAILED | sed s#$DEVICE##`" MAILED=$MAILEDH fi done sleep $SLEEPTIME done </code></tscreen> <p> <sect1> Βοηθητική εφαρμογή για να καθαρίζετε τα log αρχεία σας. <it/Paul Anderson, Συντηρητής του Tips-HOWTO /> <p> Αν είστε σαν κι εμένα, έχετε μια λίστα με 250 εγγεγραμμένους, και 100+ μηνύματα να έρχονται καθημερινά μέσω UUCP. Λοιπόν, τι μπορεί να κάνει ένας χάκερ με αυτά τα τεράστια logs; Να στήσει το chklogs. Το Chklogs γράφτηκε από τον Emilio Grimaldo, <tt/grimaldo@panama.iaehv.nl/, και η τρέχουσα έκδοση 1.8 είναι διαθέσιμη στο ftp.iaehv.nl:/pub/users/grimaldo/chklogs-1.8.tar.gz. Η διαδικασία εγκατάστασης είναι απλή (θα διαβάσετε, φυσικά, τις πληροφορίες στον υποκατάλογο sub). Όταν το εγκαταστήσετε, προσθέστε μια εγγραφή crontab σαν την παρακάτω: <tscreen><verb> # Run chklogs at 9:00PM daily. 00 21 * * * /usr/local/sbin/chklogs -m </verb></tscreen> Μια και το χρησιμοποιήσατε, μην ξεχάσετε να αναφέρετε στον συγγραφέα πόσο ωραίο προγραμματάκι είναι αυτό :) <sect1> Πρόχειρο Script για να καθαρίζετε τα Core αρχεία. <it/Otto Hammersmith,/ <tt/ohammers@cu-online.com/ <p> Δημιουργήστε ένα αρχείο με όνομα rmcores (ο συγγραφέας το αποκαλεί handle-cores) που να περιέχει τον παρακάτω κώδικα: <tscreen><code> #!/bin/sh USAGE="$0 <directory> <message-file>" if [ $# != 2 ] ; then echo $USAGE exit fi echo Deleting... find $1 -name core -atime 7 -print -exec rm {} \; echo e-mailing for name in `find $1 -name core -exec ls -l {} \; | cut -c16-24` do echo $name cat $2 | mail $name done </code></tscreen> Δημιουργήστε μια εργασία cron να το τρέχει περιοδικά. <sect1> Μεταφέροντας καταλόγους μεταξύ σύστημα αρχείωνs. <it/Alan Cox,/ <tt/A.Cox@swansea.ac.uk/ <p> Γρήγορος τρόπος να μεταφέρετε ένα ολόκληρο δένδρο αρχείων από ένα δίσκο σε έναν άλλο <tscreen><verb> (cd /source/directory && tar cf - . ) | (cd /dest/directory && tar xvfp -) </verb></tscreen> <it>[ AΑλλάξτε από το /source/directory. Κάντε tar....κλπ. ώστε να αποφύγετε την πιθανότητα να αχρηστεύσετε το directory σε περίπτωση καταστροφής. Ευχαριστώ τον Jim Dennis, jadestar@rahul.net, που μου το είπε. -Συντ. ]</it> <sect1> Βρείτε τους μεγαλύτερους καταλόγους που έχετε. <it/Mick Ghazey,/ <tt/mghazey@miso.lowdown.com/ <p> Έχετε αναρωτηθεί ποτέ ποιοι είναι οι μεγαλύτεροι κατάλογοι στον υπολογιστή σας; Ορίστε πώς θα το μάθετε. <tscreen><verb> du -S | sort -n </verb></tscreen> <sect1> Το Linux Gazette <p> Δόξα και τιμές στον John Fisk, το δημιουργό του Linux Gazette. Είναι ένα εξαιρετικό ηλεκτρονικό περιοδικό και επιπλέον, είναι <bf/ΔΩΡΕΑΝ!!!/ Τι περισσότερο μπορείτε να ζητήσετε; Δείτε μόνοι σας: <tscreen><verb> http://www.ssc.com/lg </verb></tscreen> Επί την ευκαιρία, φαίνεται ότι (1) το LG βγαίνει σε μηνιαία έκδοση, και (2) δεν το συντηρεί πια ο John Fisk , αλλά οι συνεργάτες της SSC. <sect1> Δείκτης στο patch για το GNU Make 3.70 για να αλλάξετε τη συμπεριφορά του VPATH. <it/Ted Stern,/ <tt/stern@amath.washington.edu/ <p> Δεν ξέρω αν έχουν πολλοί άνθρωποι αυτό το πρόβλημα, αλλά υπάρχει ένα "χαρακτηριστικό" του GNU make έκδοση 3.70 το οποίο δε μου αρέσει. Είναι ότι το VPATH συμπεριφέρεται περίεργα αν δώσετε το απόλυτο όνομα αρχείου. Υπάρχει ένα εξαιρετικά πλήρες patch που διορθώνει το πρόβλημα, το οποίο μπορείτε να βρείτε από τον Paul D. Smith <tt><psmith@wellfleet.com></tt>. Αυτός στέλνει την τεκμηρίωση και το patch μετά από κάθε επανέκδοση του GNU make στο newsgroup gnu.utils.bug. Γενικά, εφαρμόζω αυτό το patch και κάνω ξανά compile το gmake σε κάθε σύστημα που έχω πρόσβαση. <sect1> Πώς σταματώ το σύστημα μου να κάνει fsck σε κάθε επανεκκίνηση; <it/Dale Lutz,/ <tt/dal@wimsey.com/ <p> Q: Πώς σταματώ το e2fsck να ελέγχει το δίσκο μου κάθε φορά που κάνω boot. A: Όταν ξαναχτίσετε τον πυρήνα, το σύστημα αρχείων μαρκάρεται σαν 'βρώμικο' και έτσι ο δίσκος σας θα ελέγχεται σε κάθε εκκίνηση. Για να το φτιάξετε αυτό τρέξτε το: rdev -R /zImage 1 Αυτό διορθώνει τον πυρήνα από το να πιστεύει ότι το σύστημα αρχείων είναι βρώμικο. <em/Σημείωση: Αν χρησιμοποιείτε lilo, τότε προσθέστε το /<tt/read-only/ <em>στην εγκατάσταση του στο αρχείο ρύθμισης του lilo (συνήθως στο /etc/lilo.conf) </em> <sect1>Πώς να αποφύγετε τα fscks που προκαλούνται από "device busy" την ώρα της επανεκκίνησης. <it/Jon Tombs,/ <tt/jon@gtex02.us.es/ <p> Αν βλέπετε συχνά λάθη device busy κατά το shutdown που κάνουν το σύστημα αρχείων να χρειάζεται fsck κατά την επανεκκίνηση, ορίστε μια μικρή διόρθωση : Προσθέστε την παρακάτω γραμμή στο <tt>/etc/rc.d/init.d/halt</tt> ή <tt>/etc/rc.d/rc.0</tt> <tscreen><verb> mount -o remount,ro /mount.dir </verb></tscreen> για όλα τα προσαρτημένα (mounted) συστήματα αρχείων εκτός του /, πριν την κλήση umount -a. Αυτό σημαίνει ότι αν, για κάποιο λόγο, το shutdown αποτύχει να σκοτώσει όλες τις διεργασίες και αποπροσαρτήσει τους δίσκους θα είναι ακόμη καθαροί στην επανεκκίνηση. Έτσι εξοικονομώ πολύ χρόνο στην επανεκκίνηση. <sect1>Πώς να βρείτε τα μεγαλύτερα αρχεία στο δίσκο σας. <p><it/Simon Amor,/ <tt/simon@foobar.co.uk/ <p> <tscreen><verb> ls -l | sort +4n </verb></tscreen> <p> Η, γι' αυτούς που είναι πραγματικά scrunched για χώρο, μπορεί να αργεί λίγο αλλά δουλεύει μια χαρά: <p> <tscreen><verb> cd / ls -lR | sort +4n </verb></tscreen> <sect1>Πώς να τυπώσετε σελίδες και να αφήσετε περιθώριο για το διακορευτή. <it/Mike Dickey,/ <tt/mdickey@thorplus.lib.purdue.edu/ <p> <tscreen><code> #!/bin/sh # /usr/local/bin/print # a simple formatted printout, to enable someone to # 3-hole punch the output and put it in a binder cat $1 | pr -t -o 5 -w 85 | lpr </code></tscreen> <sect1>Ενας τρόπος για να ψάχνετε μέσα σε δένδρα αρχείων για μια συγκεκριμένη κανονική έκφραση. <it/Raul Deluth Miller,/ <tt/rockwell@nova.umd.edu/ <p> Ονομάζω αυτό το script 'forall'. Χρησιμοποιήστε το ως εξής : <tscreen><verb> forall /usr/include grep -i ioctl forall /usr/man grep ioctl </verb></tscreen> Να το script forall: <tscreen><code> #!/bin/sh if [ 1 = `expr 2 \> $#` ] then echo Usage: $0 dir cmd [optargs] exit 1 fi dir=$1 shift find $dir -type f -print | xargs "$@" </code></tscreen> <sect1>Ένα script για να καθαρίζει τα αρχεία autosave και backup που δημιουργούν διάφορα προγράμματα. <it/Barry Tolnas,/ <tt/tolnas@nestor.engr.utk.edu/ <p> Ένα απλό πρόγραμμα δύο-γραμμών που κατεβαίνει αναδρομικά την ιεραρχία ενός καταλόγου αφαιρώντας τα αρχεία emacs auto-save (#) και backup (˜), τα αρχεία .o , και τα TeX .log. Επίσης συμπιέζει τα αρχεία .tex και τα README. Το έχω ονομάσει 'squeeze' στο σύστημά μου. <tscreen><code> #!/bin/sh #SQUEEZE removes unnecessary files and compresses .tex and README files #By Barry tolnas, tolnas@sun1.engr.utk.edu # echo squeezing $PWD find $PWD \( -name \*~ -or -name \*.o -or -name \*.log -or -name \*\#\) -exec rm -f {} \; find $PWD \( -name \*.tex -or -name \*README\* -or -name \*readme\* \) -exec gzip -9 {} \; </code></tscreen> <sect1>Πώς να βρείτε ποια διεργασία απαιτεί την περισσότερη μνήμη. <it/Simon Amor,/ <tt/simon@foobar.co.uk/ <p> <tscreen><verb> ps -aux | sort +4n </verb></tscreen> -H- <tscreen><verb> ps -aux | sort +5n </verb></tscreen> <sect1>Εξοπλίστε το vi για προγραμματισμό σε C , <it/Paul Anderson,/<tt/Tips-HOWTO Συντηρητής/ <p> Έχω προγραμματίσει πολύ σε C στον ελεύθερό μου χρόνο, και έδωσα χρόνο για να εξοπλίσω το vi ώστε να είναι φιλικό με τη C. Ορίστε το αρχείο μου .exrc: <tscreen><code> set autoindent set shiftwidth=4 set backspace=2 set ruler </code></tscreen> <p> Τι κάνει αυτό; Το autoindent αναγκάζει το vi να κάνει indent αυτόματα κάθε γραμμή που ακολουθεί την πρώτη που έγινε indent, το shiftwidth θέτει την απόσταση του ^T (tab) σε 4 κενά, το backspace θέτει το backspace mode, και το ruler δείχνει τον αριθμό γραμμής. Να θυμάστε, ότι για να πάτε σε ένα συγκεκριμένο αριθμό γραμμής, ας πούμε την 20, χρησιμοποιήστε το: <tscreen><code> vi +20 myfile.c </code></tscreen> <sect1>Γιατί το sendmail κολλάει επί 5 λεπτά κατά την εκκίνηση στο RedHat; <it/Paul Anderson,/ <tt/paul@geeky1.ebtech.net/ <p> Αυτό είναι ένα σχεδόν κοινό πρόβλημα, σε σημείο να γίνει FAQ. Δεν ξέρω αν το RedHat διόρθωσε αυτό το bug στη διανομή τους, αλλά μπορείτε να το διορθώσετε και μόνοι σας. Αν κοιτάξετε στο αρχείο /etc/hosts , θα δείτε ότι μοιάζει κάπως σαν : <tscreen><verb> 127.0.0.1 localhost yourbox </verb></tscreen> <p> Όταν ξεκινά το sendmail, ψάχνει στο hostname που έχετε (σε αυτή την περίπτωση, το yourbox). Εκεί βρίσκει ότι το IP του yourbox είναι 127.0.0.1, αυτό δεν αρέσει στο sendmail, και ψάχνει πάλι. Συνεχίζει με αυτό για λίγο μέχρις ότου να εγκαταλείψει και να σταματήσει. Το να διορθώσετε αυτό το πρόβλημα είναι πολύ απλό, ανοίξτε το αρχείο /etc/hosts και αλλάξτε το σε κάτι σαν το: <tscreen><verb> 127.0.0.1 localhost 10.56.142.1 yourbox </verb></tscreen> <p> <sect1>Πώς ρυθμίζω το RedHat για να χρησιμοποιεί την color-ls; <it/Paul Anderson,/ <tt/paul@geeky1.ebtech.net/ <p> Η διανομή RedHat έρχεται με color-ls, παρόλαυτά δεν ξέρω γιατί δεν τη ρυθμίζουν για χρήση με χρώματα. Να πώς θα το διορθώσετε.<p> Πρώτα, γράψτε eval `DIRCOLORS`<p> Μετά, alias ls='ls --color=yes'<p> Και προσθέστε το 'alias.....' στο αρχείο /etc/bashrc<p> <p> <sect1>Πώς βρίσκω ποια βιβλιοθήκη στο /usr/lib έχει μια συγκεκριμένη συνάρτηση; <it/Pawel Veselow,/ <tt/vps@unicorn.niimm.spb.su/ <p> Τι κάνετε αν κάνετε compile και δε κάνατε link μια βιβλιοθήκη που χρειάζεται; Όλα τα gcc reports είναι ονόματα συναρτήσεων... Να μια εντολή δείγμα που θα βρει αυτό που ψάχνετε: <tscreen><verb> for i in *; do echo $i:;nm $i|grep tgetnum 2>/dev/null;done </verb></tscreen> <p> όπου tgetnum είναι το όνομα της συνάρτησης που ψάχνετε. <p> <sect> Λεπτομερείς Υποδείξεις <sect1>Μοιράζοντας τα swap partitions μεταξύ Linux και Windows. <it/Tony Acero,/ <tt/ace3@midway.uchicago.edu/ <p><enum> <item> Φορμάρετε το partition σαν dos partition, και δημιουργήστε το αρχείο swap των Windows σε αυτό, αλλά μην τρέξετε ακόμη τα windows. (Θέλετε να κρατήσετε το αρχείο swap τελείως κενό για την ώρα, ώστε να συμπιεστεί καλά). <item> Ξεκινήστε linux και σώστε το partition σε ένα αρχείο. Για παράδειγμα αν το partition ήταν το /dev/hda8: <tscreen><verb> dd if=/dev/hda8 of=/etc/dosswap </verb></tscreen> <item> Συμπιέστε το αρχείο swap του dos. Μια και είναι σχεδόν όλα 0 θα συμπιεστεί πολύ καλά <tscreen><verb> gzip -9 /etc/dosswap </verb></tscreen> <item> Προσθέστε το παρακάτω στο αρχείο /etc/rc για να προετοιμάσετε και να στήσετε το swap χώρο κάτω από Linux: <em/XXXXX είναι ο αριθμός των μπλοκς του swap partition/ <tscreen><verb> mkswap /dev/hda8 XXXXX swapon -av </verb></tscreen> Σιγουρευτείτε ότι προσθέσατε μια γραμμή για το swap partition στο αρχείο /etc/fstab <item> Αν το πακέτο σας init/reboot υποστηρίζει /etc/brc ή /sbin/brc προσθέστε τα παρακάτω στο /etc/brc, αλλιώς κάντε το με το χέρι όταν θέλετε να ξεκινήσετε σε dos|os/2 και θέλετε να μετατρέψετε το swap partition πίσω στην έκδοση για dos/windows: </enum> <tscreen><verb> swapoff -av zcat /etc/dosswap.gz | dd of=/dev/hda8 bs=1k count=100 </verb></tscreen> # Note that this only writes the first 100 blocks back to the partition. I've found empirically that this is sufficient > > Ποιά είναι τα πλεονεκτήματα και τα μειονεκτήματα για το παραπάνω; Πλεονέκτημα: εξοικονομείτε ουσιαστικό χώρο από το δίσκο σας. Μειονέκτημα: αν το βήμα 5 δε γίνεται αυτόματα, πρέπει να θυμηθείτε να το κάνετε με το χέρι, και επιβαρύνει τη διαδικασία εκκίνησης κατά ένα nanosecond :-) <sect1> Απελπισμένα Undelete. <it/Michael Hamilton,/ <tt/michael@actrix.gen.nz/ <p> Να ένα τρυκ που έπρεπε να χρησιμοποιήσω μερικές φορές. undelete αρχείου κειμένου για απελπισμένους. Αν κατά λάθος σβήσατε ένα text αρχείο, για παράδειγμα, κάποιο email, ή τα αποτελέσματα μιας ολονύχτιας προγραμματιστικής συνεδρίας , μπορεί να μη χάθηκαν όλα. Αν το αρχείο που φτιάξατε στο δίσκο, ήταν εκεί π.χ για περισσότερο από 30 δευτερόλεπτα, μπορεί τα περιεχόμενά του να βρίσκονται ακόμη στην κατάτμηση του δίσκου. Μπορείτε να χρησιμοποιήσετε την εντολή grep για να ψάξει το raw disk partition για τα περιεχόμενα του αρχείου. Για παράδειγμα, πρόσφατα, έσβησα κατά λάθος ένα κομμάτι ενός email. Έτσι, σταμάτησα αμέσως οποιαδήποτε ενέργεια που μπορούσε να μεταβάλλει το partition: σε αυτή την περίπτωση απλά απέφυγα να αποθηκεύσω αρχεία ή να κάνω μεταγλώττιση (compile) κλπ. Σε άλλες περιπτώσεις, μπήκα πραγματικά στον κόπο να κατεβάσω το σύστημα σε single user mode, και να αποδεσμεύσω (unmount) το σύστημα αρχείων. Χρησιμοποίησα τότε την εντολή egrep στο partition του δίσκου: στην περίπτωσή μου το email μήνυμα ήταν στο /usr/local/home/michael/, έτσι από το output του df, είδα ότι ήμουν στο /dev/hdb5 <tscreen><verb> sputnik3:~ % df Filesystem 1024-blocks Used Available Capacity Mounted on /dev/hda3 18621 9759 7901 55% / /dev/hdb3 308852 258443 34458 88% /usr /dev/hdb5 466896 407062 35720 92% /usr/local sputnik3:~ % su Password: [michael@sputnik3 michael]# egrep -50 'ftp.+COL' /dev/hdb5 > /tmp/x </verb></tscreen> Τώρα είμαι υπερβολικά προσεκτικός όταν παίζω με τις κατατμήσεις των δίσκων, έτσι σταμάτησα να βεβαιωθώ ότι καταλαβαίνω τη σύνταξη της εντολής ΠΡΙΝ να πατήσω το πλήκτρο return. Σε αυτή την περίπτωση το email περιείχε τη λέξη 'ftp' ακολουθούμενη από κάποιο text που το ακολουθούσε το 'COL'. Το μήνυμα ήταν περίπου 20 γραμμές, έτσι χρησιμοποίησα το -50 για να φέρω όλες τις λέξεις γύρω από τη φράση. Στο παρελθόν είχα χρησιμοποιήσει το -3000 για να είμαι σίγουρος ότι θα πάρω όλες τις γραμμές από κάποιο πηγαίο κώδικα. Κατεύθυνα την έξοδο της egrep σε ένα διαφορετικό partition δίσκου- έτσι απέφυγα να γράψω πάνω από το παλιό μήνυμα που έψαχνα. Μετά χρησιμοποίησα την εντολή strings για να με βοηθήσει να εξετάσω την έξοδο <tscreen><verb> strings /tmp/x | less </verb></tscreen> To email ήταν πραγματικά εκεί. Αυτή η μέθοδος δεν είναι για να βασιστείτε σε αυτή, όλος, ή μέρος, του χώρου του δίσκου μπορεί να έχει ήδη ξαναχρησιμοποιηθεί. Αυτό το τρυκ είναι πιθανά χρήσιμο μόνο σε συστήματα που δουλεύει ένας χρήστης. Σε συστήματα πολλαπλών χρηστών με υψηλή δραστηριότητα δίσκου, ο χώρος που ελευθερώσατε μπορεί να έχει ήδη χρησιμοποιηθεί. Ακόμη περισσότερο, δεν μπορούμε να τραβάμε το χαλί κάτω από τους χρήστες μας κάθε φορά που χρειαζόμαστε να ανακτήσουμε ένα αρχείο. Στο σύστημα που έχω σπίτι, αυτό το τρυκ φάνηκε βολικό σε τρεις περίπου περιπτώσεις τα τελευταία χρόνια - συνήθως όταν σβήνω τυχαία μερικές μέρες δουλειάς. Αν ό,τι δουλεύω φτάνει σε ένα σημείο όπου νιώθω ότι έχω κάνει σημαντική βελτίωση, κάνω αντίγραφο ασφαλείας σε ένα floppy, έτσι δε χρειάζομαι αυτό το τρυκ και πολύ συχνά. <sect1>Πώς να χρησιμοποιήσετε το σταθερό flag. <it/Jim Dennis,/ <tt/jadestar@rahul.net/ <p> Χρησιμοποιήσετε το σταθερό Flag Αμέσως μόλις εγκαταστήσετε και ρυθμίσετε το σύστημά σας πηγαίνετε στα /bin, /sbin/, /usr/bin, /usr/sbin και /usr/lib (και μερικά of the other usual suspects και κάντε γενναιόδωρη χρήση της 'chattr +i εντολής'. Επίσης προσθέστε τα αρχεία του πυρήνα στο root. Κάντε 'mkdir /etc/.dist/' αντιγράψτε τα όλα από το /etc/ on down (αυτό το κάνω σε δύο βήματα χρησιμοποιώντας το /tmp/etcdist.tar για να αποφύγω την αναδρομή) σε εκείνο τον κατάλογο. (Προαιρετικά μπορείτε να δημιουργήσετε το /etc/.dist.tar.gz) -- και να το μαρκάρετε σα σταθερό. Ο λόγος για όλα αυτά είναι να ελαττώσουμε τη ζημιά που μπορεί να προκαλέσετε αν μπείτε σαν root. Δε θα γράψετε πάνω από αρχεία με ένα τελεστή ανακατεύθυνσης (redirection operator) stray, και δε θα κάνετε το σύστημα άχρηστο με ένα stray κενό σε μια εντολή 'rm -fr' (μπορείτε ακόμη να κάνετε πολλές ζημιές στα δεδομένα σας -- αλλά οι βιβλιοθήκες και τα εκτελέσιμα θα είναι πιο ασφαλή. Αυτό επίσης κάνει ένα πλήθος προβλημάτων ασφάλειας και άρνησης εξυπηρέτησης (denial of service) είτε αδύνατο είτε πιο δύσκολο να δημιουργηθούν (μια και πολλοί βασίζονται στο να γράψουν πάνω από ένα αρχείο μέσω των λειτουργιών κάποιου προγράμματος SUID που *δεν παρέχει μια αυθαίρετη γραμμή εντολών*). Ο μόνος μπελάς σε αυτό είναι όταν χτίζετε τον πυρήνα και κάνετε 'make install' σε διάφορα είδη εκτελέσιμων του συστήματος. Από την άλλη, εμποδίζει επίσης το 'make install' να γράφει πάνω από τα αρχεία. Όταν ξεχάσετε να διαβάσετε το Makefile και να κάνετε chattr -i τα αρχεία που πρόκειται να γραφτούν από πάνω (και οι κατάλογοι στους οποίους θέλετε να προσθέσετε αρχεία) -- το make αποτυγχάνει, χρησιμοποιείτε απλά την εντολή chattr και το ξανατρέχετε. Μπορείτε επίσης να αρπάξετε αυτή την ευκαιρία για να μεταφέρετε τα παλιά σας bin's, lib's, ή οτιδήποτε σε ένα κατάλογο .old/ ή να του αλλάξετε όνομα ή να τα κάνετε tar ή ότι άλλο. <sect1>Μια πρόταση για το πού να τοποθετήσετε νέα αρχεία. <it/Jim Dennis,/ <tt/jadestar@rahul.net/ <p> Όλα τα νέα αρχεία μπαίνουν κάτω από το /usr/local! ή /usr/local/`hostname` Αν η διανομή σας αφήνει το /usr/local άδειο τότε δημιουργήστε το /usr/local/src, /usr/local/bin κλπ. και χρησιμοποιήστε τα. Αν η διανομή σας εγκαθιστά προγράμματα στο δένδρο /usr/local τότε μπορεί να θέλετε να κάνετε 'mkdir /usr/local/`hostname`' και να δώσετε το 'wheel' group +w σε αυτό (το κάνω επίσης SUID και SGID για να εξασφαλίσω ότι κάθε μέλος του wheel group μπορεί να ανακατεύεται με τα δικά του αρχεία από εκεί και κάτω, και ότι όλα τα αρχεία που δημιουργήθηκαν θα ανήκουν στο 'wheel' group. Τώρα πειθαρχήστε τον εαυτό σας και *ΠΑΝΤΑ! ΠΑΝΤΑ! ΠΑΝΤΑ!* βάλτε τα νέα πακέτα κάτω από το /usr/local/src/.from/$ΟΠΟΥ_ΤΑ_ΕΒΑ¨Α/ (για τα .tar ή οποιαδήποτε αρχεία) και χτίστε τα κάτω από το /usr/local/src (ή .../$HOSTNAME/src). Σιγουρευτείτε ότι εγκαθίσταται κάτω από την τοπική ιεραρχία. Αν *πρέπει υποχρεωτικά* να εγκατασταθεί πίσω στο /bin ή /usr/bin ή κάπου αλλού -- βάλτε ένα symlink από την τοπική ιεραρχία σε κάθε στοιχείο του από να το βάλετε οπουδήποτε αλλού. Ο λόγος γι' αυτό -- ακόμη κι αν απαιτεί περισσότερη δουλειά -- είναι ότι βοηθά να απομονώσετε ό,τι πρέπει να γίνει αντίγραφο ασφαλείας και restore ή να ξαναεγκαταστηθεί σε περίπτωση πλήρους επανεγκατάστασης από τα distribution media (συνήθως CD στις μέρες μας). Χρησιμοποιώντας το /usr/local/.from directory μπορείτε να κρατήσετε ένα ανεπίσημο ημερολόγιο (log) από που προέρχονται οι πηγαίοι κώδικες -- το οποίο βοηθάει όταν ψάχνετε για νέες αναβαθμίσεις -- και μπορεί να είναι πολύ αποφασιστικό όταν κάνετε monitore τις λίστες ανακοινώσεων σχετικά με ασφάλεια. Ε-να από τα συστήματά μου στο σπίτι (αυτό από το οποίο με το οποίο κάνω και τις συνδέσεις μου) συναρμολογήθηκε πριν να υιοθετήσω αυτή την τακτική για τον εαυτό μου. Ακόμη δε "γνωρίζω" όλες τις διαφορές από το σύστημα που αφήνεται "όπως εγκαταστάθηκε". Αυτό είναι παρά το γεγονός ότι έχω κάνει πολύ λίγες ρυθμίσεις στο σύστημα του σπιτιού μου και είμαι το *μόνο* άτομο που το χρησιμοποιεί. Αντίθετα, τα συστήματα που έχω στήσει στη δουλειά (όταν απέκτησα εκεί το ρόλο του διαχειριστή συστήματος) έχουν όλα ρυθμιστεί με αυτόν τον τρόπο -- έχουν διαχειριστεί από πολλούς ανάδοχους και άλλους ανθρώπους του MIS, και έκαναν ένα μεγάλο αριθμό αναβαθμίσεων και εγκαταστάσεων πακέτων. Έχω μια πολύ καλή ιδέα για το ποια ακριβή στοιχεία τοποθετήθηκαν στο σύστημα *μετά* την αρχική εγκατάσταση και ρύθμιση. <sect1>Μετατρέψτε όλα τα ονόματα των αρχείων ενός καταλόγου σε μικρά γράμματα. <it/Justin Dossey,/ <tt/dossey@ou.edu/ <p> Παρατήρησα μερικές υπερβολικά δύσκολες ή μη απαραίτητες διαδικασίες που προτείνονται στο τμήμα 2c tips του τεύχους 12. Μια και είναι περισσότερες από μία, τις στέλνω σε σένα: <tscreen><code> #!/bin/sh # lowerit # convert all file names in the current directory to lower case # only operates on plain files--does not change the name of directories # will ask for verification before overwriting an existing file for x in `ls` do if [ ! -f $x ]; then continue fi lc=`echo $x | tr '[A-Z]' '[a-z]'` if [ $lc != $x ]; then mv -i $x $lc fi done </code></tscreen> Ωπ, αυτό είναι μεγάλο script. Δε θα έγραφα τέτοιο script για να κάνω αυτό. Αντίθετα, θα χρησιμοποιούσα αυτή την εντολή: <tscreen><verb> for i in * ; do [ -f $i ] && mv -i $i `echo $i | tr '[A-Z]' '[a-z]'`; done; </verb></tscreen> στη γραμμή εντολών. Ο άνθρωπος που έκανε αυτή τη συνεισφορά, λέει ότι έγραψε το script με αυτό τον τρόπο ώστε να είναι κατανοητό (δείτε παρακάτω). Στην επόμενη υπόδειξη, αυτή σχετικά με την προσθήκη και διαγραφή χρηστών, ο Geoff τα πάει μια χαρά μέχρι το τελευταίο βήμα. Επανεκκίνηση; Ωχ, ελπίζω να μη χρειάζεται επανεκκίνηση του συστήματος κάθε φορά που διαγράφει ένα χρήστη. Ο,τι χρειάζεται να κάνετε είναι τα δύο πρώτα βήματα. Τι είδους διεργασίες θα έχει αφήσει ο χρήστης, άλλωστε; Ένα irc bot; Σκοτώστε τις διαδικασίες απλά με την <tscreen><verb> kill -9 `ps -aux |grep ^<username> |tr -s " " |cut -d " " -f2` </verb></tscreen> Παράδειγμα, το username είναι foo <tscreen><verb> kill -9 `ps -aux |grep ^foo |tr -s " " |cut -d " " -f2` </verb></tscreen> Τώρα που φροντίσαμε κι αυτό, ας προχωρήσουμε στο ξεχασμένο κωδικό του root. Η λύση που δίνεται στο Gazette είναι η πιο κοινή, αλλά όχι και η πιο εύκολη. Με το LILO και το loadlin, μπορείτε να δώσετε την παράμετρο για boot σε περιβάλλον ενός χρήστη (single) για αυτόματη εκκίνηση στο προκαθορισμένο shell χωρίς login ή password prompt. Από εκεί, μπορείτε να αλλάξετε ή να αφαιρέσετε passwords πριν να γράψετε "init 3" να ξεκινήσετε σε κατάσταση πολλαπλών χρηστών (multiuser mode). Αριθμός Επανεκκινήσεων: 1 Με τον άλλο τρόπο Αριθμός Επανεκκινήσεων: 2 Justin Dossey <sect1>Μερικές υποδείξεις για νέους sysadmins. <it/Jim Dennis,/ <tt/jadestar@rahul.net/ <p> Δημιουργήστε και συντηρήστε ένα /README.`hostname` και/ή ένα /etc/README.`hostname` <em>[Η πιθανά /usr/local/etc/README.`hostname` -Maint. ]</em> Οπωσδήποτε, κρατήστε σημειώσεις από *την πρώτη μέρα* της διαχείρισης του συστήματος σε ένα online log αρχείο. Μπορείτε να φτιάξετε ένα vi /README.$(hostname). Μια γραμμή στο αρχείο του root ~/bash_logout. Ένας άλλος τρόπος να το κάνετε αυτό είναι να γράψετε su ή ένα sudo script που κάνει κάτι σαν το παρακάτω: <tscreen><verb> function exit \ { unset exit; exit; \ cat ~/tmp/session.$(date +%y%m%d) \ >> /README.$(hostname) && \ vi /README.$(hostname) } script -a ~/tmp/session.$(date +%y%m%d) /bin/su.org - </verb></tscreen> (χρησιμοποιήστε την εντολή typescript για να δημιουργήστε ένα session log και δημιουργήστε μια συνάρτηση που θα προσθέτει και θα ενημερώνει αυτόματα το log). Παραδέχομαι ότι δεν έχω υλοποιήσει αυτό την πολιτική αυτόματης ενημέρωσης -- έχω βασιστεί ως τώρα στην αυτοπειθαρχία μου ως τώρα. Παρόλαυτά, έχω παίξει με αυτή την ιδέα (μέχρι το σημείο να φτιάξω ένα πρότυπο δείγμα (prototype) των scripts και των shell συναρτήσεων όπως τις βλέπετε). Ένα πράγμα που με κρατάει είναι η ίδια η 'script' εντολή. Νομίζω ότι θα πρέπει να πάρω τον κώδικα και να προσθέσω δυο παραμέτρους στη γραμμή εντολών (για να διακόπτω/σταματώ το script να καταγράφει από τη γραμμή εντολών) πριν να δεσμευτώ ότι θα το χρησιμοποιώ). Η τελευταία μου πρόταση (γι' αυτό το γύρο): Το path του Root θα πρέπει να περιέχει το 'PATH=~/bin' Αυτά και τίποτα άλλο στο path του root. Ο,τι κάνει ο root παρέχεται από ένα symlink από το ~/bin ή από ένα alias ή shell ρουτίνα, ή είναι ένα script ή ένα εκτελέσιμο στο ~/bin, ή γράφεται με το πλήρες path. Αυτό κάνει τον καθένα που τρέχει σαν root να γνωρίζει (μερικές φορές επώδυνα) πόσο εμπιστεύεται τα εκτελέσιμα. Ο γνωστικός admin ενός host πολλών χρηστών θα κοιτάει περιοδικά μέσω του δικού του ~/bin και των αρχείων ~/.*history ψάχνοντας patterns και παράθυρα. Ο πραγματικά δραστηριοποιημένος admin θα εντοπίσει ακολουθίες που μπορούν να αυτοματοποιηθούν, μέρη στα οποία έλεγχοι μπορούν/πρέπει να εισαχθούν , και διαδικασίες για τις οποίες "root" τα δικαιώματα θα πρέπει να αποφευχθούν προσωρινά (η εκτέλεση διαφόρων επεξεργαστών, MTA's και άλλα μεγάλα διαλογικά (interactive) προγράμματα με περίπλοκα χαρακτηριστικά scripting τα οποία *μπορεί* να ενσωματωθούν σε διαφανή αρχεία ή αρχεία δεδομένων -- όπως το αισχρό vi ./.exrc και το emacs ./.emacs και το ακόμη περισσότερο ύπουλο $EXINIT και οι ενσωματωμένες μακροεντολές επικεφαλίδων (header/footer macros)). Φυσιολογικά οι εντολές αυτού του τύπου μπορούν να τρέξουν με κάτι σαν: <tscreen><verb> cp $data $some_users_home/tmp su -c $origcommand $whatever_switches cp $some_users_home/tmp $data </verb></tscreen> (...όπου οι λεπτομέρειες εξαρτώνται από την εντολή). Αυτές οι τελευταίες κυρίως προφυλάξεις υπερβολικές για το σπίτι ή το "single" σταθμό εργασίας του χρήστη -- αλλά είναι πολύ καλή τακτική για τη διαχείριση ενός συστήματος πολλαπλών χρηστών -- ειδικά για ένα σύστημα δημόσια εκτεθειμένο (όπως αυτό στο netcom). <sect1>Πώς να ρυθμίσετε το xdm's chooser για επιλογή host. <it/Arrigo Triulzi,/ <tt/a.triulzi@ic.ac.uk/ <p><enum> <item> Ενημερώστε το αρχείο που φορτώνει το xdm πολύ πιθανά το /etc/rc/rc.6 ή /etc/rc.local) έτσι ώστε να περιέχει τις παρακάτω γραμμές στο τμήμα εκκίνησης του xdm.<tscreen><verb> /usr/bin/X11/xdm exec /usr/bin/X11/X -indirect hostname </verb></tscreen></item> <item> Ανοίξτε το /usr/lib/X11/xdm/Xservers και βάλτε σε σχόλια τη γραμμή που ξεκινά το server στο τοπικό μηχάνημα (π.χ. ξεκινώντας με 0:)</item> <item> Επανεκκινήστε το μηχάνημα και you're home and away.</item> </enum> <p> Αυτό το πρόσθεσα όταν προσπαθούσα απεγνωσμένα να το εγκαταστήσω για το δικό μου subnet εδώ χρειάστηκε περίπου μια βδομάδα για να κατευνάσω όλα τα προβλήματα. Προειδοποίηση: με το παλιό SLS (1.1.1) για κάποιο λόγο μπορείτε να αφήστε ένα -nodaemon μετά τη γραμμή xdm -- αυτό <bf/ΔΕ/ δουλεύει για μεταγενέστερες εκδόσεις. <sect1> Περί της Ελληνικής Μετάφρασης <p> Για σχόλια, παρατηρήσεις, διορθώσεις, ενημερώσεις περί της Ελληνικής μετάφρασης αυτού του HOWTO, στείλτε email στην Βούλα Σανιδά : <htmlurl url="mailto:voulariba@hellug.gr " name="voulariba@hellug.gr "> ή στον Ευριπίδη Παπακώστα : <htmlurl url="mailto:evris@hellug.gr " name="evris@hellug.gr "> και εναλλακτικά : <htmlurl url="mailto:ep@rocketmail.com" name="ep@rocketmail.com"> </article>