\documentclass[11pt]{article}
\makeatletter
\usepackage[ american,greek]{babel}
%\usepackage{textcase}
\usepackage{amsmath,amsfonts}
\usepackage[iso-8859-7]{inputenc}
%\usepackage{kerkis}
\newcommand{\Z}{\mathbb{Z}}
\newcommand{\sg}{\selectlanguage{greek}}
\newcommand{\sa}{\selectlanguage{american}}
\newcommand{\LyX}{L\kern-.1667em\lower.25em\hbox{Y}\kern-.125emX\spacefactor1000}
%\theoremstyle{plain}
\newtheorem{thm}{Theorem}[section]
%\newtheorem{or}{Ορισμός}
\numberwithin{equation}{section} %% Comment out for sequentially-numbered
\numberwithin{figure}{section} %% Comment out for sequentially-numbered
\newcommand{\bv}{\sa \begin{verbatim}}
\newcommand{\ev}{\end{verbatim} \sg}

\makeatother

\begin{document}                    
%\title{Σύντομος Οδηγός Χρήσης του \textlatin{Unix}}
%\author{A.K}
%\maketitle
\selectlanguage{greek}
\section*{Μικρή εισαγωγή σε εντολές του \textlatin{Unix}. }
To κείμενο αυτό έχει σαν σκοπό να σας βοηθήσει να μάθετε μερικές 
από τις βασικές εντολές του \textlatin{Unix}. Θα πρέπει να 
το μελετήσετε καθισμένοι μπροστά από ένα \textlatin{Unix} 
τερματικό. Διαβάστε μία παράγραφο, και στην συνέχεια δοκιμάστε την 
εντολή. Δούλεψε όπως θα έπρεπε? Αν όχι κυτάξτε προσεκτικά τι 
γράψετε. Το πιθανότερο ήταν να υπάρχει ένα λάθος στην γραφή της 
συγκεκριμένης εντολής. 

Ας ξεκινήσουμε με μία απλή εντολή: θέλουμε  ο υπολογιστής να μας πει την 
σημερινή μέρα. Να πως το κάνουμε:
\sa \begin{verbatim}
[kontogar@Lykourgos kontogar]$ date
Sat Oct 26 17:59:16 EEST 2002
\end{verbatim} \sg
Δοκιμάστε την παραπάνω εντολή να δείτε πως δουλευεί και τι αποτελέσματα δίνει. 
Στο \textlatin{Unix} είναι σημαντικό να έχετε υπόψην σας ότι παίζουν 
σημαντικό ρόλο αν γράφετε με κεφαλαία ή μικρά. Έτσι για παράδειγμα 
οι γραφές \textlatin{Unix,UnIx} και \textlatin{unix} δεν είναι ισοδύναμες!
Δοκιμάστε να δώσετε στο τερματικό σας τiς εντολές 
\textlatin{cal, cal 2002,whoami,finger} 
Οι πρώτες δύο δίνουν το ημερολόγιο του τρέχοντος μήνα και έτους αντίστιχα, η 
τρίτη επιστρέφει το \textlatin{login name}  και η τελευταία μας δείχνει τους 
χρήστες που είναι συνδεμένοι την στιγμή αυτή με τον υπολογιστή. 

Ας δούμε τώρα την εντολή \textlatin{echo}
Αν δώσω 
\sa \begin{verbatim}
echo PATH
PATH
\end{verbatim} \sg
λέω στον υπολογιστή να τυπώσει το κορδόνι με όνομα \textlatin{PATH}. 
Αν αντιθέτως πληκτρολογήσω
\sa \begin{verbatim}
echo $PATH
/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/bin:
/usr/local/sbin:/usr/bin:/usr/ucb:/home/lectures/kontogar/bin
\end{verbatim} \sg
Λέω στον υπολογιστή να τυπώσει την μεταβλητή συστήματος \textlatin{PATH}. 
Στην μεταβλητή αυτή είναι αποθηκευμένα τα μέρη του συστήματος 
αρχείων στα οποία βρίσκονται προγράμμτα τα οποία μπορείτε να εκτελέστε. 

Aν θέλετε να προσθέσετε άλλο ένα μέρος του συστήματος αρχείων σας στην 
μεταβλητή \textlatin{PATH} (για παράδειγμα το \textlatin{/usr/local/bin}) 
θα πρέπει να το κάνετε δίνοντας
\sa \begin{verbatim}
export PATH=$PATH:/usr/local/bin
\end{verbatim} \sg

Ας δούμε τώρα τον χειρισμό αρχείων:
Το σύστημα αρχείων μιάζει με ένα μεγάλο κουτί στο οποίο 
βρίσκονται μεγάλα κουτιά \textlatin{directories} 
μέσα στα οποία βρίσκονται μικρότερα κουτιά και αρχεία.
Με την εντολή \textlatin{pwd} μπορείτε να δείτε το 
όνομα του κουτιού στο οποίο βρίσκεστε
\sa \begin{verbatim}
pwd
/home/kontogar
\end{verbatim} \sg
και το οποίο δεν είναι άλλο από το \textlatin{home directory} σας 
στο οποίο θα γράφετε τα αρχεία σας. 
Προκειμενου να είναι αυτά τακτοποιημένα τα χωρίζουμε σε ((κουτιά)) 
τα οποία θα τα ονομάζουμε \textlatin{direcories}. 
Για να δημιουργήσουμε ένα  κουτί χρησιμοποιούμε την εντολή 
\sa \begin{verbatim}
mkdir pari-programs
\end{verbatim} \sg
Έτσι αν τώρα δώσουμε την εντολή \textlatin{ls} η οποία μας δείχνει 
τα περιεχόμενα ενός κουτιού, τότε ανάμεσα στα αρχεία μας θα δούμε και 
το καινούριο \textlatin{directory} με όνομα \textlatin{pari-programs}. 
Με την εντολή \textlatin{cd pari-programs} ανοίγουμε το 
\textlatin{directory} αυτό, ενώ η εντολή \textlatin{cd ..} 
μας ανεβάζει ένα \textlatin{direcory} προς τα πάνω. 


Ένα πρόγραμμα μπορεί να πάρει αρκετό χρόνο να μας 
δώσει αποτελέσμτα ανάλογα με την δυσκολία του 
την ταχύτητα του συστήματος και τον φόρτο του 
συστήματος μας. Δεν μπορούμε να κάτσουμε με 
τις ώρες μπροστά στο τερματικό μας ή στον 
υπολογιστή να το περιμένουμε. 
Έτσι αν θέλουμε να παραγοντοποιήσουμε τον 
πρώτο αριθμό $2^{100000}-1$ θα δημιουργήσουμε ένα 
αρχείο με όνομα \textlatin{factor.in} που θα έχει μόνο μια γραμμή την 
\sa \begin{verbatim}
factor(2^(100000)-1)
\end{verbatim} \sg 
και θα τρέξουμε στην γραμμή εντολών 
\sa \begin{verbatim}
gp < factor.in > factor.out &
\end{verbatim} \sg 
Το παραπάνω έχει το εξής νόημα:
τρέξε το πρόγραμμα \textlatin{gp} αλλά μην περιμένεις 
να σου πληκτρολογήσει ο χρήστης εντολές. 
Αυτές θα τις πάρεις από το αρχείο \textlatin{factor.in}. 
Επίσης δεν θα εμφανίσεις τα αποτελέσματα στην οθόνη
αλλά θα τα γράψεις στο αρχείο \textlatin{factor.out}. 
Τέλος ο χαρακτήρας \& λέει στον υπολογιστή να 
τρέξει το προγραμμά στο παρασκήνιο(\textlatin{backround}. 
Με αυτό τον τρόπο μπορούμε να βάλουμε τον 
υπολογιστή να υπολογίζει να κλείσουμε την 
σύνδεση μας με αυτόν και να πάμε την άλλη μέρα να 
πάρουμε τα αποτελέσματα. 




Θα δούμε τώρα μερικές βασικές εντολές που αφορούν το 
έλεγχο των εργασιών στο \textlatin{unix}. 
Ένα σύστημα \textlatin{unix} εκτελεί πολλές εργασίες 
ταυτόχρονα και εξηπηρετεί πολλούς χρήστες. 
Έτσι για παράδειμα η εντολή \footnote{στο \textlatin{linux} αυτή η 
εντολή συντάσεται ώς \textlatin{ps aux}}
\sa \begin{verbatim} 
ps -ef 
\end{verbatim} \sg 
θα μας δώσει ένα μακρύ κατάλογο των ενολών που το σύστημα εκτελεί. 
Για να δούμε τις εντολές που τρέχουμε εμείς πρέπει το 
αποτέλεσμα της εντολής \textlatin{ps} να το φιλτράτουμε μέσω 
της εντολής \textlatin{grep}. Έτσι δίνοντας 
\sa \begin{verbatim} 
ps -ef | grep kontogar
\end{verbatim} \sg 
Βλέπουμε όλες τις εντολές τις οποίες τρέχει ο χρήστης με 
όνομα \textlatin{kontogar}. Στον κατάλογο των 
εργασιών δίπλα απο το όνομα του χρήστη βλέπουμε κάποιους αριθμούς. 
Ο πρώτος από αυτούς είναι ο κωδικός της εργασιάς. 
Αν θέλουμε να τερματίσουμε μία εργασία του συστήματος γιατί 
κάτι δεν πάει καλά με αυτήν, μπορούμε να το κάνουμε δίνοντας
\sa \begin{verbatim} 
kill 21479
\end{verbatim} \sg 
όπου το 21479 είναι ο αριθμός της συγκεκριμένης εργασίας. 

Τρέξτε μια διαδικασία στο παρασκήνιο, 
για παράδειγμα την προηγούμενη παραγοντοποιήση και δοκιμάστε να δείτε αν 
εκτελείτε κάνοντας χρήση της \textlatin{ps}. Αυτός είναι και ο τρόπος 
που θα διαπιστώσετε την επόμενη μέρα αν ο μακρύς υπολογισμός που ξεκινήσατε 
το προηγούμενο βράδυ έχει ολοκληρωθεί ή όχι. 

Θα τελείωσουμε αυτή την μικρή αναφορά σε εντολές του \textlatin{unix} 
αναφέροντας την εντολή \textlatin{man}. Με αυτή την εντολή μπορούμε να 
διαβάσουμε τα εγχειρίδια των εντολών του συστήματος. 
Δώστε λοιπόν 
\sa \begin{verbatim} 
man ls
\end{verbatim} \sg 
για να διαβάσετε περισσότερες πληροφορίες σχετικά με την 
εντολή \textlatin{ls} ή για οποιαδήποτε άλλη εντολή αναφέραμε εδώ. 

\section*{\textlatin{Compiling}}
Ένα πρόγραμμα σε \textlatin{C} αποτελείται από τον πηγαίο 
κώδικα (\textlatin{source code}) τον οποίο πρέπει να τον περάσουμε 
από τον 
\textlatin{compiler} προκειμένου να παράγουμε το εκτελέσιμο αρχείο, 
το οποίο είναι κατανοητό από την μηχανή. 

Ένας διαδεδομένος \textlatin{compiler} για το 
\textlatin{unix} είναι ο \textlatin{gcc}. 
Αυτός είναι το προϊόν πολυετούς έρευνας του 
\textlatin{GNU-project} το οποίο ξεκίνησε πρίν από 20 
χρόνια ο \textlatin{R.Stallman}. 

Ας υποθέσουμε ότι έχουμε ένα πηγαίο αρχείο με όνομα \textlatin{c-code.c}.
Εκτελόντας την εντολή 
\sa \begin{verbatim} 
gcc c-code.c
\end{verbatim} \sg 
ενεργοποιούμε τον \textlatin{gcc compiler}  ο οποίος παράγει 
το εκτελέσιμο αρχείο \textlatin{a.out}, το οποίο το εκτελούμε με την 
εντολή
\sa \begin{verbatim} 
./a.out
\end{verbatim} \sg 
Αν θέλαμε το παραγόμενο εκτελέσιμο αρχείο να είχε όνομα \textlatin{runme}
αντί για το \textlatin{a.out} θα έπρεπε να εκτελούσαμε τον \textlatin{gcc} ως εξής:
\sa \begin{verbatim} 
gcc c-code.c -o runme
\end{verbatim} \sg 
{\bf Aσκήσεις}

\begin{enumerate}
\item Γράψτε από ένα βιβλίο $C$ το περίφημο ((καλήμερα κόσμε)) 
πρόγραμμα μεταγλωτίστε το με τον \textlatin{gcc} και εκτελέστε το 
παραγόμενο πρόγραμμα.  Κάνοντας χρηση του τελεστή ανακατεύθηνσης 
$>$ εκτελέστε το πρόγραμμα ώστε να εξάγει το αποτέλεσμα μέσα σε 
ένα αρχείο και ελένξτε με ένα \textlatin{text editor} τα περιεχόμενα 
του αρχείου αυτού. 
\item Στο \textlatin{unix} η εντολή \textlatin{man} δίνει 
πληροφορίες για εντολές του συστήματος. Δίνοντας 
\textlatin{man gcc} δείτε το εγχειρίδιο χρήσης του \textlatin{gcc}. 
H \textlatin{man} δίνει πληροφορίες και για τις εντολές της \textlatin{C}. 
Δώστε \textlatin{man printf} για να δείτε την χρήση της εντολής \textlatin{printf}
\end{enumerate}

Στο μάθημα θα χρειαστεί να χρησημοποιήσουμε βιβλιοθήκες της \textlatin{C}
και συγκεκριμένα την βιβλιοθήκη \textlatin{OpenGL}. Για να μπορέσει ο 
\textlatin{gcc} να χρησιμοποιήσει εξωτερικές βιβλιοθήκες θα πρέπει να 
του πούμε μέσω παραμέτρων την τοποθεσία των βιβλιοθηκών. Θα πούμε περισσότερες 
λεπτομέριες στην συνέχεια του μαθήματος, προς το παρόν θα μάθουμε να 
χρησιμοπούμε \textlatin{Makefiles} τα οποία στην αρχή θα σας δίνονται έτοιμα. 


Δώστε την εντολή 
\sa \begin{verbatim} 
cp -r /home/lecturers/kontogar/CompGraph/CubeTEST .
\end{verbatim} \sg 
για να αντιγράψετε τα περιεχόμενα του φακέλου \textlatin{CubeTEST} 
από την προσωπική μου περιοχή στην δικιά σας και στην συνεχεία 
δώστε \textlatin{cd CubeTEST}  για να μπείτε στο κατάλογο \textlatin{CubeTEST}.
Εξετάστε τα περιεχόμενα των δύο αρχείων που βρίσκονται μέσα στον 
κατάλογο αυτό και τέλος δώστε \textlatin{make} για να κάνετε 
\textlatin{compile} το πρώτο σας \textlatin{OpenGL} πρόγραμμα. 









\end{document}
