diff options
Diffstat (limited to 'ult/ult.tex')
-rw-r--r-- | ult/ult.tex | 1721 |
1 files changed, 0 insertions, 1721 deletions
diff --git a/ult/ult.tex b/ult/ult.tex deleted file mode 100644 index a94dc14..0000000 --- a/ult/ult.tex +++ /dev/null @@ -1,1721 +0,0 @@ -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Using Linux Tools -% -% Author: FOSSEE -% Copyright (c) 2009, FOSSEE, IIT Bombay -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\documentclass[12pt,compress]{beamer} - -\mode<presentation> -{ - \usetheme{Warsaw} - \useoutertheme{infolines} - \setbeamercovered{transparent} -} - -\usepackage[english]{babel} -\usepackage[latin1]{inputenc} -%\usepackage{times} -\usepackage[T1]{fontenc} - -% Taken from Fernando's slides. -\usepackage{ae,aecompl} -\usepackage{mathpazo,courier,euler} -\usepackage[scaled=.95]{helvet} - -\definecolor{darkgreen}{rgb}{0,0.5,0} - -\usepackage{listings} -\lstset{language=sh, - basicstyle=\ttfamily\bfseries, - commentstyle=\color{red}\itshape, - stringstyle=\color{darkgreen}, - showstringspaces=false, - keywordstyle=\color{blue}\bfseries} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Macros -\setbeamercolor{emphbar}{bg=blue!20, fg=black} -\newcommand{\emphbar}[1] -{\begin{beamercolorbox}[rounded=true]{emphbar} - {#1} - \end{beamercolorbox} -} -\newcounter{time} -\setcounter{time}{0} -\newcommand{\inctime}[1]{\addtocounter{time}{#1}{\tiny \thetime\ m}} - -\newcommand{\typ}[1]{\lstinline{#1}} - -\newcommand{\kwrd}[1]{ \texttt{\textbf{\color{blue}{#1}}} } - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Title page -\title[Using Linux Tools]{SEES: Using Linux Tools} - -\author[FOSSEE] {FOSSEE} - -\institute[IIT Bombay] {Department of Aerospace Engineering\\IIT Bombay} -\date[]{} -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%\pgfdeclareimage[height=0.75cm]{iitmlogo}{iitmlogo} -%\logo{\pgfuseimage{iitmlogo}} - - -%% Delete this, if you do not want the table of contents to pop up at -%% the beginning of each subsection: - -\AtBeginSection[] -{ - \begin{frame}<beamer> - \frametitle{Outline} - \tableofcontents[currentsection] - \end{frame} -} - -% If you wish to uncover everything in a step-wise fashion, uncomment -% the following command: -%\beamerdefaultoverlayspecification{<+->} - -%%\includeonlyframes{current,current1,current2,current3,current4,current5,current6} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% DOCUMENT STARTS -\begin{document} - -\begin{frame} - \maketitle -\end{frame} - -% CREATING TOC -\begin{frame} - \frametitle{Outline} - \tableofcontents - % You might wish to add the option [pausesections] -\end{frame} - - -\section{Introduction} -\begin{frame}[fragile] - \begin{block}{What is the Linux OS?} - \begin{itemize} - \item Free Open Source Operating System - \begin{description} - \item[Free] - Free as in Free Speech, not Free Beer - \item[Open-Source] - Permit modifications and redistribution of source code - \end{description} - \item Unix-inspired - \item Linux Kernel + Application software - \item Runs on a variety of hardware - \item Also called GNU/Linux - \end{itemize} - \end{block} -\end{frame} - -\begin{frame}[fragile] - \frametitle{Why Linux?} - \begin{itemize} - \item Free as in Free Beer - \item Secure \& versatile - \end{itemize} - - \begin{block}{Why Linux for Scientific Computing?} - \begin{itemize} - \item Free as in Free Speech - \item Can run for \emph{ever} - \item Libraries - \item Parallel Computing - \end{itemize} - \end{block} -\end{frame} - -\section{Getting Started} -\begin{frame}[fragile] - \frametitle{Logging in} - \begin{itemize} - \item GNU/Linux does have a GUI - \item Command Line for this module - \item Hit \texttt{Ctrl + Alt + F1} - \item Login - \item \texttt{logout} command logs you out - \end{itemize} -\end{frame} - -\begin{frame}[fragile] - \frametitle{Where am I?} - \begin{itemize} - \item Logged in. Where are we? - \item \texttt{pwd} command gives the present working directory - \end{itemize} - \begin{lstlisting} - $ pwd - /home/user - \end{lstlisting} % $ -\end{frame} - -\begin{frame}[fragile] - \frametitle{What is in there?} - \begin{itemize} - \item \texttt{ls} command lists contents of \texttt{pwd} - \end{itemize} - \begin{lstlisting} - $ ls - jeeves.rst psmith.html blandings.html Music - \end{lstlisting} %$ - \begin{itemize} - \item Can also pass directory as argument - \end{itemize} - \begin{lstlisting} - $ ls Music - one.mp3 two.mp3 three.mp3 - \end{lstlisting} %$ - \begin{itemize} - \item \alert{the Unix world is case sensitive} - \end{itemize} -\end{frame} - -\begin{frame}[fragile] - \frametitle{New folders} - \begin{itemize} - \item \texttt{mkdir} creates new directories - \end{itemize} - \begin{lstlisting} - $ mkdir sees - $ ls - \end{lstlisting} - \begin{itemize} - \item Special characters need to be escaped OR quoted - \end{itemize} - \begin{lstlisting} - $ mkdir software\ engineering - $ mkdir "software engg" - \end{lstlisting} - \begin{itemize} - \item Generally, use hyphens or underscores instead of spaces in names - \end{itemize} -\end{frame} - -\begin{frame}[fragile] - \frametitle{Moving around} - \begin{itemize} - \item \texttt{cd} command changes the \texttt{pwd} - \end{itemize} - \begin{lstlisting} - $ cd sees - $ pwd - /home/user/sees/ - \end{lstlisting} - \begin{itemize} - \item Alternately written as \texttt{cd ./sees} - \item Specifying path relative to \texttt{pwd} - \item \texttt{..} takes one level up the directory structure - \end{itemize} - \begin{lstlisting} - $ cd .. - \end{lstlisting} % $ - \begin{itemize} - \item We could use absolute path instead of relative - \end{itemize} - \begin{lstlisting} - $ cd /home/user/sees/ - \end{lstlisting} % $ -\end{frame} - -\begin{frame}[fragile] - \frametitle{New files} - \begin{itemize} - \item \texttt{touch} command creates a blank file - \end{itemize} - \begin{lstlisting} - $ pwd - /home/user - $ cd sees - $ touch first - $ ls - first - \end{lstlisting} % $ -\end{frame} - -\section{Getting Help} -\begin{frame}[fragile] - \frametitle{What does a command do?} - - \begin{itemize} - \item \texttt{whatis} gives a quick description of a command - \end{itemize} - \begin{lstlisting} - $ whatis touch - touch (1) - change file timestamps - \end{lstlisting} % $ - \begin{itemize} - \item \texttt{man} command gives more detailed description - \end{itemize} - \begin{lstlisting} - $ man touch - \end{lstlisting} % $ - \begin{itemize} - \item Shows all tasks that the command can perform - \item Hit \texttt{q} to quit the \texttt{man} page - \item For more, see the \texttt{man} page of \texttt{man} - \end{itemize} - \begin{lstlisting} - $ man man - \end{lstlisting} % $ -\end{frame} - -\begin{frame}[fragile] - \frametitle{Using additional options} - - \begin{itemize} - \item \texttt{-h} or \texttt{--help} give summary of command usage - \end{itemize} - \begin{lstlisting} - $ ls --help - \end{lstlisting} % $ - \begin{itemize} - \item List out all files within a directory, recursively - \end{itemize} - \begin{lstlisting} - $ ls -R - \end{lstlisting} % $ - \begin{itemize} - \item Create a new directory along with parents, if required - \end{itemize} - \begin{lstlisting} - $ pwd - /home/user/ - $ ls sees/ - $ mkdir -p sees/linux-tools/scripts - \end{lstlisting} % $ -\end{frame} - -\begin{frame}[fragile] - \frametitle{Searching for a command} - - \begin{itemize} - \item \texttt{apropos} searches commands based on their descriptions - \end{itemize} - - \begin{lstlisting} - $ apropos remove - \end{lstlisting} % $ - - \begin{itemize} - \item Returns a list of all commands that contain the search term - \item In this case, we are interested in \texttt{rm}, \texttt{rmdir} - \end{itemize} -\end{frame} - -\section{Basic File Handling} -\begin{frame}[fragile] - \frametitle{Removing files} - - \begin{itemize} - \item \texttt{rm} is used to delete files - \end{itemize} - - \begin{lstlisting} - $ rm foo - \end{lstlisting} % $ - - \begin{itemize} - \item \alert{\texttt{rm} works only for files; not directories} - \end{itemize} - - \begin{itemize} - \item Additional arguments required to remove a directory - \item \texttt{-r} stands for recursive. - \item Removes directory and all of it's content - \end{itemize} - - \begin{lstlisting} - $ rm -r bar - \end{lstlisting} % $ - - \begin{itemize} - \item \alert{\texttt{rmdir} can also be used; Explore} - \end{itemize} - -\end{frame} - - -\begin{frame}[fragile] - \frametitle{Copying Files} - - \begin{itemize} - \item \texttt{cp} copies files from one location to another - \end{itemize} - - \begin{lstlisting} - $ cp linux-tools/scripts/foo linux-tools/ - \end{lstlisting} % $ - - \begin{itemize} - \item New file-name can be used at target location - \item \texttt{foo} copied to new location with the name \texttt{bar} - \end{itemize} - - \begin{lstlisting} - $ cp linux-tools/scripts/foo linux-tools/bar - \end{lstlisting} % $ - - \begin{itemize} - \item \texttt{cp} overwrites files, unless explicitly asked not to - \item To prevent this, use the \texttt{-i} flag - \end{itemize} - - \begin{lstlisting} - $ cp -i linux-tools/scripts/foo linux-tools/bar - cp: overwrite `bar'? - \end{lstlisting} % $ -\end{frame} - -\begin{frame}[fragile] - \frametitle{Copying Directories} - - \begin{itemize} - \item \texttt{-r} is required to copy a directory and all it's - content - \item Copying directories is similar to copying files - \end{itemize} - - \begin{lstlisting} - $ cd /home/user - $ cp -ir sees course - \end{lstlisting} -\end{frame} - - - -\begin{frame}[fragile] - \frametitle{Moving Files} - \begin{itemize} - \item \texttt{cp} and \texttt{rm} would be one way - \item \texttt{mv} command does the job - \item Also takes \texttt{-i} option to prompt before overwriting - \end{itemize} - - \begin{lstlisting} - $ cd /home/user - # Assume we have course directory already created - $ mv -i sees/ course/ - \end{lstlisting} - \begin{itemize} - \item No prompt! Why? - \end{itemize} - \begin{lstlisting} - $ ls course - \end{lstlisting} % $ - \begin{itemize} - \item \texttt{sees} became a sub-directory of \texttt{course} - \item \texttt{mv} command doesn't over-write directories - \item \texttt{-i} option is useful when moving files around - \item \texttt{mv} to rename --- move to same location with new name - \end{itemize} -\end{frame} - -\section{Linux File Hierarchy, Permissions \& Ownership} -\begin{frame} - \frametitle{Linux File Hierarchy} - \begin{itemize} - \item \texttt{/} is called the root directory - \item It is the topmost level of the hierarchy - \item For details \texttt{man hier} - \end{itemize} -\end{frame} - -\begin{frame}[fragile] - \frametitle{Permissions and Access control} - - \begin{itemize} - \item In a multi-user environment, access control is vital - \item Look at the output of \texttt{ls -l} - \end{itemize} - - \begin{lstlisting} - drwxr-xr-x 5 root users 4096 Jan 21 20:07 home - \end{lstlisting} % $ - - \begin{itemize} - \item The first column shows the permission information - \item First character specifies type of the file - \item Files have \texttt{-}; Directories have \texttt{d} - \item 3 sets of 3 characters --- for user, group and others - \item \texttt{r}, \texttt{w}, \texttt{x} --- for read, write, execute - \item Either the corresponding character or \texttt{-} is present - \end{itemize} -\end{frame} - -\begin{frame}[fragile] - \frametitle{Changing the permissions} - \begin{itemize} - \item Permissions can be changed by owner of the file - \item \texttt{chmod} command is used - \item \texttt{-R} option to recursively change for all content of a - directory - \end{itemize} - \begin{itemize} - \item Change permissions of \texttt{foo.sh} from - \texttt{-rw-r-{}-r-{}-} to \texttt{-rwxr-xr-{}-} - \end{itemize} - \begin{lstlisting} - $ ls -l foo.sh - $ chmod ug+x foo.sh - $ ls -l foo.sh - \end{lstlisting} % $ -\end{frame} - -\begin{frame}[fragile] - \frametitle{Symbolic modes} - \begin{small} - \begin{center} - \begin{tabular}{lll} - Reference & Class & Description \\ - \hline - u & user & the owner of the file \\ - g & group & users who are members of the file's group \\ - o & others & users who are not hte owner of the file or members of the group \\ - a & all & all three of the above; is the same as \emph{ugo} \\ - \end{tabular} - \end{center} - - \begin{center} - \begin{tabular}{ll} - Operator & Description \\ - \hline - + & adds the specified modes to the specified classes \\ - - & removes the specified modes from the specified classes \\ - = & the modes specified are to be made the exact modes for the specified classes \\ - \end{tabular} - \end{center} - - \begin{center} - \begin{tabular}{lll} - Mode & Name & Description \\ - \hline - r & read & read a file or list a directory's contents \\ - w & write & write to a file or directory \\ - x & execute & execute a file or recurse a directory tree \\ - \end{tabular} - \end{center} - \end{small} -\end{frame} - -\begin{frame}[fragile] - \frametitle{Changing Ownership of Files} - \begin{itemize} - \item \texttt{chown} changes the owner and group - \item By default, the user who creates file is the owner - \item The default group is set as the group of the file - \end{itemize} - \begin{lstlisting} - $ chown alice:users wonderland.txt - \end{lstlisting} % $ - \begin{itemize} - \item Did it work? \alert{Not every user can change ownership} - \item Super-user or \texttt{root} user alone is empowered - \end{itemize} -\end{frame} - -\section{Looking at files} -\begin{frame}[fragile] - \frametitle{\texttt{cat}} - \begin{itemize} - \item Displays the contents of files - \end{itemize} - \begin{lstlisting} - $ cat foo.txt - \end{lstlisting} % $ - \begin{itemize} - \item Concatenates the text of multiple files - \end{itemize} - \begin{lstlisting} - $ cat foo.txt bar.txt - \end{lstlisting} % $ - \begin{itemize} - \item Not-convenient to view long files - \end{itemize} -\end{frame} - -\begin{frame}[fragile] - \frametitle{\texttt{less}} - \begin{itemize} - \item View contents of a file one screen at a time - \end{itemize} - - \begin{lstlisting} - $ less wonderland.txt - \end{lstlisting} % $ - - \begin{itemize} - \item q: Quit - \item Arrows/Page Up/Page Down/Home/End: Navigation - \item ng: Jump to line number n - \item /pattern: Search. Regular expressions can be used - \item h: Help - \end{itemize} -\end{frame} - -\begin{frame}[fragile] - \frametitle{\texttt{wc}} - \begin{itemize} - \item Statistical information about the file - \item the number of lines in the file - \item the number of words - \item the number of characters - \end{itemize} - - \begin{lstlisting} - $ wc wonderland.txt - \end{lstlisting} % $ -\end{frame} - -\begin{frame}[fragile] - \frametitle{\texttt{head} \& \texttt{tail}} - \begin{itemize} - \item let you see parts of files, instead of the whole file - \item \texttt{head} -- start of a file; \texttt{tail} -- end of a - file - \item show 10 lines by default - \end{itemize} - \begin{lstlisting} - $ head wonderland.txt - \end{lstlisting} % $ - \begin{itemize} - \item \texttt{-n} option to change the number of lines - \end{itemize} - \begin{lstlisting} - $ head -n 1 wonderland.txt - \end{lstlisting} % $ - \begin{itemize} - \item \texttt{tail} is commonly used to monitor files - \item \texttt{-f} option to monitor the file - \item \texttt{Ctrl-C} to interrupt - \end{itemize} - \begin{lstlisting} - $ tail -f /var/log/dmesg - \end{lstlisting} % $ -\end{frame} - - -\begin{frame}[fragile] - \frametitle{\texttt{cut}} - \begin{itemize} - \item Allows you to view only certain sections of lines - \item Let's take \texttt{/etc/passwd} as our example - \end{itemize} - \begin{lstlisting} - root:x:0:0:root:/root:/bin/bash - \end{lstlisting} - \begin{itemize} - \item View only user names of all the users (first column) - \end{itemize} - \begin{lstlisting} - $ cut -d : -f 1 /etc/passwd - \end{lstlisting} % $ - \begin{itemize} - \item \texttt{-d} specifies delimiter between fields (default TAB) - \item \texttt{-f} specifies the field number - \item Multiple fields by separating field numbers with comma - \end{itemize} - \begin{lstlisting} - $ cut -d : -f 1,5,7 /etc/passwd - \end{lstlisting} % $ -\end{frame} - -\begin{frame}[fragile] - \frametitle{\texttt{cut}} - \begin{itemize} - \item Allows choosing on the basis of characters or bytes - \item Example below gets first 4 characters of \texttt{/etc/passwd} - \end{itemize} - \begin{lstlisting} - $ cut -c 1-4 /etc/passwd - \end{lstlisting} % $ - \begin{itemize} - \item One of the limits of the range can be dropped - \item Sensible defaults are assumed in such cases - \end{itemize} - \begin{lstlisting} - $ cut -c -4 /etc/passwd - $ cut -c 10- /etc/passwd - \end{lstlisting} % $ -\end{frame} - -\begin{frame}[fragile] - \frametitle{\texttt{paste}} - \begin{itemize} - \item Joins corresponding lines from two different files - \begin{center} - \begin{tabular}{l|l} - \verb~students.txt~ & \verb~marks.txt~ \\ - Hussain & 89 92 85 \\ - Dilbert & 98 47 67 \\ - Anne & 67 82 76 \\ - Raul & 78 97 60 \\ - Sven & 67 68 69 \\ - \end{tabular} - \end{center} - \end{itemize} - \begin{lstlisting} - $ paste students.txt marks.txt - $ paste -s students.txt marks.txt - \end{lstlisting} - \begin{itemize} - \item \texttt{-s} prints content, one below the other - \item If first column of marks file had roll numbers? How do we get - a combined file with the same output as above (i.e. without roll - numbers). We need to use \texttt{cut} \& \texttt{paste} together. - But how? - \end{itemize} -\end{frame} - -\section{The Command Shell} - -\begin{frame}[fragile] - \frametitle{Redirection and Piping} - \begin{lstlisting} - $ cut -d " " -f 2- marks1.txt \ - > /tmp/m_tmp.txt - $ paste -d " " students.txt m_tmp.txt - \end{lstlisting} % $ - - or - - \begin{lstlisting} - $ cut -d " " -f 2- marks1.txt \ - | paste -d " " students.txt - - \end{lstlisting} % $ - - \begin{itemize} - \item The first solution used Redirection - \item The second solution uses Piping - \end{itemize} -\end{frame} - -\begin{frame}[fragile] - \frametitle{Redirection} - - \begin{itemize} - \item The standard output (stdout) stream goes to the display - \item Not always, what we need - \item First solution, redirects output to a file - \item \texttt{>} states that output is redirected; It is - followed by location to redirect - \end{itemize} - \begin{lstlisting} - $ command > file1 - \end{lstlisting} % $ - \begin{itemize} - \item \texttt{>} creates a new file at specified location - \item \texttt{>>} appends to a file at specified location - \end{itemize} -\end{frame} - -\begin{frame}[fragile] - \frametitle{Redirection \ldots} - \begin{itemize} - \item Similarly, the standard input (stdin) can be redirected - \end{itemize} - \begin{lstlisting} - $ command < file1 - \end{lstlisting} % $ - \begin{itemize} - \item input and the output redirection could be combined - \end{itemize} - \begin{lstlisting} - $ command < infile > outfile - \end{lstlisting} % $ - \begin{itemize} - \item Standard error (stderr) is the third standard stream - \item All error messages come through this stream - \item \texttt{stderr} can also be redirected - \end{itemize} -\end{frame} - -\begin{frame}[fragile] - \frametitle{Redirection \ldots} - \begin{itemize} - \item Following example shows \texttt{stderr} redirection - \item Error is printed out in the first case - \item Error message is redirected, in the second case - \end{itemize} - \begin{lstlisting} - $ cut -d " " -c 2- marks1.txt \ - > /tmp/m_tmp.txt - - $ cut -d " " -f 2- marks1.txt 1> \ - /tmp/m_tmp.txt 2> /tmp/m_err.txt - \end{lstlisting} % $ - \begin{itemize} - \item \texttt{1>} redirects \texttt{stdout}; \texttt{2>} redirects - \texttt{stderr} - \end{itemize} - \begin{lstlisting} - $ paste -d " " students.txt m_tmp.txt - \end{lstlisting} % $ -\end{frame} - -\begin{frame}[fragile] - \frametitle{Piping} - \begin{lstlisting} - $ cut -d " " -f 2- marks1.txt \ - | paste -d " " students.txt - - \end{lstlisting} % $ - \begin{itemize} - \item \texttt{-} instead of FILE asks \texttt{paste} to read from - \texttt{stdin} - \item \texttt{cut} command is a normal command - \item the \texttt{|} seems to be joining the two commands - \item Redirects output of first command to \texttt{stdin}, which - becomes input to the second command - \item This is called piping; \texttt{|} is called a pipe - \end{itemize} -\end{frame} - -\begin{frame}[fragile] - \frametitle{Piping} - \begin{itemize} - \item Roughly same as -- 2 redirects and a temporary file - \end{itemize} - \begin{lstlisting} - $ command1 > tempfile - $ command2 < tempfile - $ rm tempfile - \end{lstlisting} % $ - \begin{itemize} - \item Any number of commands can be piped together - \end{itemize} -\end{frame} - -\subsection{Features of the Shell} - -\begin{frame}[fragile] - \frametitle{Tab-completion} - \begin{itemize} - \item Hit tab to complete an incompletely typed word - \item Tab twice to list all possibilities when ambiguous completion - \item Bash provides tab completion for the following. - \begin{enumerate} - \item File Names - \item Directory Names - \item Executable Names - \item User Names (when they are prefixed with a \~{}) - \item Host Names (when they are prefixed with a @) - \item Variable Names (when they are prefixed with a \$) - \end{enumerate} - \end{itemize} -\end{frame} - -\begin{frame}[fragile] - \frametitle{History} - \begin{itemize} - \item Bash saves history of commands typed - \item Up and down arrow keys allow to navigate history - \item \texttt{Ctrl-r} searches for commands used - \end{itemize} -\end{frame} - -\begin{frame}[fragile] - \frametitle{Shell Meta Characters} - \begin{itemize} - \item ``meta characters'' are special command directives - \item File-names shouldn't have meta-characters - \item \verb+/<>!$%^&*|{}[]"'`~;+ - \end{itemize} - \begin{lstlisting} - $ ls file.* - \end{lstlisting} % $ - \begin{itemize} - \item Lists \texttt{file.ext} files, where \texttt{ext} can be - anything - \end{itemize} - \begin{lstlisting} - $ ls file.? - \end{lstlisting} % $ - \begin{itemize} - \item Lists \texttt{file.ext} files, where \texttt{ext} is only one - character - \end{itemize} -\end{frame} - -\section{More text processing} - -\begin{frame}[fragile] - \frametitle{\texttt{sort}} - \begin{itemize} - \item \texttt{sort} can be used to get sorted content - \item Command below prints student marks, sorted by name - \end{itemize} - \begin{lstlisting} - $ cut -d " " -f 2- marks1.txt \ - | paste -d " " students.txt - \ - | sort - \end{lstlisting} % $ - \begin{itemize} - \item The default is sort based on the whole line - \item \texttt{sort} can sort based on a particular field - \end{itemize} -\end{frame} - -\begin{frame}[fragile] - \frametitle{\texttt{sort} \ldots} - \begin{itemize} - \item The command below sorts based on marks in first subject - \end{itemize} - \begin{lstlisting} - $ cut -d " " -f 2- marks1.txt \ - | paste -d " " students.txt -\ - | sort -t " " -k 2 -rn - \end{lstlisting} % $ - \begin{itemize} - \item \texttt{-t} specifies the delimiter between fields - \item \texttt{-k} specifies the field to use for sorting - \item \texttt{-n} to choose numerical sorting - \item \texttt{-r} for sorting in the reverse order - \end{itemize} -\end{frame} - -\begin{frame}[fragile] - \frametitle{\texttt{grep}} - \begin{itemize} - \item \texttt{grep} is a command line text search utility - \item Command below searches \& shows the marks of Anne alone - \end{itemize} - \begin{lstlisting} - $ cut -d " " -f 2- marks1.txt \ - | paste -d " " students.txt - - | grep Anne - \end{lstlisting} % $ - \begin{itemize} - \item \texttt{grep} is case-sensitive by default - \end{itemize} -\end{frame} - -\begin{frame}[fragile] - \frametitle{\texttt{grep} \ldots} - \begin{itemize} - \item \texttt{-i} for case-insensitive searches - \end{itemize} - \begin{lstlisting} - $ cut -d " " -f 2- marks1.txt \ - | paste -d " " students.txt - - | grep -i Anne - \end{lstlisting} % $ - \begin{itemize} - \item \texttt{-v} inverts the search - \item To see everyone's marks except Anne's - \end{itemize} - \begin{lstlisting} - $ cut -d " " -f 2- marks1.txt \ - | paste -d " " students.txt - - | grep -iv Anne - \end{lstlisting} % $ -\end{frame} - -\begin{frame}[fragile] - \frametitle{\texttt{tr}} - \begin{itemize} - \item \texttt{tr} translates or deletes characters - \item Reads from \texttt{stdin} and outputs to \texttt{stdout} - \item Given, two sets of characters, replaces one with other - \item The following, replaces all lower-case with upper-case - \end{itemize} - \begin{lstlisting} - $ cat students.txt | tr a-z A-Z - \end{lstlisting} % $ - \begin{itemize} - \item \texttt{-s} compresses sequences of identical adjacent - characters in the output to a single one - \item Following command removes empty newlines - \end{itemize} - \begin{lstlisting} - $ tr -s '\n' '\n' - \end{lstlisting} % $ -\end{frame} - -\begin{frame}[fragile] - \frametitle{\texttt{tr} \ldots} - \begin{itemize} - \item \texttt{-d} deletes all specified characters - \item Only a single character set argument is required - \item The following command removes carriage return characters - (converting file in DOS/Windows format to the Unix format) - \end{itemize} - \begin{lstlisting} - $ cat foo.txt | tr -d '\r' > bar.txt - \end{lstlisting} % $ - \begin{itemize} - \item \texttt{-c} complements the first set of characters - \item The following command removes all non-alphanumeric characters - \end{itemize} - \begin{lstlisting} - $ tr -cd '[:alnum:]' - \end{lstlisting} % $ -\end{frame} - -\begin{frame}[fragile] - \frametitle{\texttt{uniq}} - \begin{itemize} - \item \texttt{uniq} command removes duplicates from \alert{sorted} input - \end{itemize} - \begin{lstlisting} - $ sort items.txt | uniq - \end{lstlisting} % $ - \begin{itemize} - \item \texttt{uniq -u} gives lines which do not have any duplicates - \item \texttt{uniq -d} outputs only those lines which have duplicates - \item \texttt{-c} displays the number of times each line occurs - \end{itemize} - \begin{lstlisting} - $ sort items.txt | uniq -u - $ sort items.txt | uniq -dc - \end{lstlisting} % $ -\end{frame} - -\section{Simple Shell Scripts} - -\begin{frame}[fragile] - \frametitle{Shell scripts} - \begin{itemize} - \item Simply a sequence of shell commands in a file - \item To save results of students in \texttt{results.txt} in - \texttt{marks} dir - \end{itemize} - \begin{lstlisting} - #!/bin/bash - mkdir ~/marks - cut -d " " -f 2- marks1.txt \ - | paste -d " " students.txt - \ - | sort > ~/marks/results.txt - \end{lstlisting} % $ -\end{frame} - -\begin{frame}[fragile] - \frametitle{Shell scripts \ldots} - \begin{itemize} - \item Save the script as \texttt{results.sh} - \item Make file executable and then run - \end{itemize} - \begin{lstlisting} - $ chmod u+x results.sh - $ ./results.sh - \end{lstlisting} % $ - \begin{itemize} - \item What does the first line in the script do? - \item Specify the interpreter or shell which should be used to - execute the script; in this case \texttt{bash} - \end{itemize} -\end{frame} - -\begin{frame}[fragile] - \frametitle{Variables \& Comments} - \begin{lstlisting} - $ name=FOSSEE - $ count=`wc -l wonderland.txt` - $ echo $count # Shows the value of count - \end{lstlisting} % $ - \begin{itemize} - \item It is possible to create variables in shell scripts - \item Variables can be assigned with the output of commands - \item \alert{NOTE:} There is no space around the \texttt{=} sign - \item All text following the \texttt{\#} is considered a comment - \end{itemize} -\end{frame} - -\begin{frame}[fragile] - \frametitle{\texttt{echo}} - \begin{itemize} - \item \texttt{echo} command prints out messages - \end{itemize} - \begin{lstlisting} - #!/bin/bash - mkdir ~/marks - cut -d " " -f 2- marks1.txt \ - | paste -d " " students.txt - \ - | sort > ~/marks/results.txt - echo "Results generated." - \end{lstlisting} % $ -\end{frame} - -\begin{frame}[fragile] - \frametitle{Command line arguments} - \begin{itemize} - \item Shell scripts can be given command line arguments - \item Following code allows to specify the results file - \end{itemize} - \begin{lstlisting} - #!/bin/bash - mkdir ~/marks - cut -d " " -f 2- marks1.txt \ - | paste -d " " students.txt - \ - | sort > ~/marks/$1 - echo "Results generated." - \end{lstlisting} % $ - \begin{itemize} - \item \texttt{\$1} corresponds to first command line argument - \item \texttt{\$n} corresponds to $n{th}$ command line argument - \item It can be run as shown below - \end{itemize} - \begin{lstlisting} - $ ./results.sh grades.txt - \end{lstlisting} % $ -\end{frame} - -\begin{frame}[fragile] - \frametitle{\texttt{PATH}} - \begin{itemize} - \item The shell searches in a set of locations, for the command - \item Locations are saved in ``environment'' variable called PATH - \item \texttt{echo} can show the value of variables - \end{itemize} - \begin{lstlisting} - $ echo $PATH - \end{lstlisting} % $ - \begin{itemize} - \item Put \texttt{results.sh} in one of these locations - \item It can then be run without \texttt{./} - \end{itemize} -\end{frame} - -\section{Control structures and Operators} -\begin{frame}[fragile] - \frametitle{Control Structures} - \begin{itemize} - \item \texttt{if-else} - \item \texttt{for} loops - \item \texttt{while} loops - \end{itemize} - \begin{itemize} - \item \texttt{test} command to test for conditions - \item A whole range of tests that can be performed - \begin{itemize} - \item \texttt{STRING1 = STRING2} -- string equality - \item \texttt{INTEGER1 -eq INTEGER2} -- integer equality - \item \texttt{-e FILE} -- existence of FILE - \end{itemize} - \item \texttt{man} page of \texttt{test} gives list of various tests - \end{itemize} -\end{frame} - -\begin{frame}[fragile] - \frametitle{\texttt{if}} - \begin{itemize} - \item Print message if directory exists in \texttt{pwd} - \end{itemize} - \begin{lstlisting} - #!/bin/bash - if test -d $1 - then - echo "Yes, the directory" \ - $1 "is present" - fi - \end{lstlisting} % $ -\end{frame} - -\begin{frame}[fragile] - \frametitle{\texttt{if}-\texttt{else}} - \begin{itemize} - \item Checks whether argument is negative or not - \end{itemize} - \begin{lstlisting} - #!/bin/bash - if test $1 -lt 0 - then - echo "number is negative" - else - echo "number is non-negative" - fi - \end{lstlisting} % $ - \begin{lstlisting} - $ ./sign.sh -11 - \end{lstlisting} % $ -\end{frame} - -\begin{frame}[fragile] - \frametitle{\texttt{[ ]} - alias for \texttt{test}} - \begin{itemize} - \item Square brackets (\texttt{[]}) can be used instead of - \texttt{test} - \item - \end{itemize} - \begin{lstlisting} - #!/bin/bash - if [ $1 -lt 0 ] - then - echo "number is negative" - else - echo "number is non-negative" - fi - \end{lstlisting} % $ - \begin{itemize} - \item \alert{spacing is important, when using the square brackets} - \end{itemize} -\end{frame} - -\begin{frame}[fragile] - \frametitle{\texttt{if}-\texttt{else}} - \begin{itemize} - \item An example script to greet the user, based on the time - \end{itemize} - \begin{lstlisting} - #!/bin/sh - # Script to greet the user - # according to time of day - hour=`date | cut -c12-13` - now=`date +"%A, %d of %B, %Y (%r)"` - if [ $hour -lt 12 ] - then - mess="Good Morning \ - $LOGNAME, Have a nice day!" - fi - \end{lstlisting} %$ -\end{frame} - -\begin{frame}[fragile] - \frametitle{\texttt{if}-\texttt{else} \ldots} - \begin{lstlisting} - if [ $hour -gt 12 -a $hour -le 16 ] - then - mess="Good Afternoon $LOGNAME" - fi - if [ $hour -gt 16 -a $hour -le 18 ] - then - mess="Good Evening $LOGNAME" - fi - echo -e "$mess\nIt is $now" - \end{lstlisting} % $ - \begin{itemize} - \item \texttt{\$LOGNAME} has login name (env. variable) - \item backquotes store commands outputs into variables - \end{itemize} -\end{frame} - -\begin{frame}[fragile] - \frametitle{\texttt{for}} - \begin{block}{Problem} - Given a set of \texttt{.mp3} files, that have names beginning with - numbers followed by their names --- \texttt{08 - Society.mp3} --- - rename the files to have just the names. Also replace any spaces - in the name with hyphens. - \end{block} - \begin{itemize} - \item Loop over the list of files - \item Process the names, to get new names - \item Rename the files - \end{itemize} -\end{frame} - -\begin{frame}[fragile] - \frametitle{\texttt{for}} - \begin{itemize} - \item A simple example of the \texttt{for} loop - \end{itemize} - \begin{lstlisting} - for animal in rat cat dog man - do - echo $animal - done - \end{lstlisting} % $ - \begin{itemize} - \item List of animals, each animal's name separated by a space - \item Loop over the list; \texttt{animal} is a dummy variable - \item Echo value of \texttt{animal} --- each name in list - \end{itemize} - \begin{lstlisting} - for i in {10..20} - do - echo $i - done - \end{lstlisting} % $ -\end{frame} - -\begin{frame}[fragile] - \frametitle{\texttt{for}} - \begin{itemize} - \item Let's start with echoing the names of the files - \end{itemize} - \begin{lstlisting} - for i in `ls *.mp3` - do - echo "$i" - done - \end{lstlisting} % $ - \begin{itemize} - \item Spaces in names cause trouble! - \item The following works better - \end{itemize} - \begin{lstlisting} - for i in *.mp3 - do - echo "$i" - done - \end{lstlisting} % $ -\end{frame} - -\begin{frame}[fragile] - \frametitle{\texttt{tr} \& \texttt{cut}} - \begin{itemize} - \item Replace all spaces with hyphens using \texttt{tr -s} - \item Use cut \& keep only the text after the first hyphen - \end{itemize} - \begin{lstlisting} - for i in *.mp3 - do - echo $i|tr -s " " "-"|cut -d - -f 2- - done - \end{lstlisting} % $ - Now \texttt{mv}, instead of just echoing - \begin{lstlisting} - for i in *.mp3 - do - mv $i `echo $i|tr -s " " "-"\ - |cut -d - -f 2-` - done - \end{lstlisting} % $ -\end{frame} - - -\begin{frame}[fragile] - \frametitle{\texttt{while}} - \begin{itemize} - \item Continuously execute a block of commands until condition - becomes false - \end{itemize} - - \begin{itemize} - \item program that takes user input and prints it back, until the - input is \texttt{quit} - \end{itemize} - - \begin{lstlisting} - while [ "$variable" != "quit" ] - do - read variable - echo "Input - $variable" - done - exit 0 - \end{lstlisting} % $ -\end{frame} - -\begin{frame}[fragile] - \frametitle{Environment Variables} - \begin{itemize} - \item Pass information from shell to programs running in it - \item Behavior of programs can change based on values of variables - \item Environment variables vs. Shell variables - \item Shell variables -- only current instance of the shell - \item Environment variables -- valid for the whole session - \item Convention -- environment variables are UPPER CASE - \end{itemize} - \begin{lstlisting} - $ echo $OSTYPE - linux-gnu - $ echo $HOME - /home/user - \end{lstlisting} % $ -\end{frame} - -\begin{frame}[fragile] - \frametitle{Environment Variables \ldots} - \begin{itemize} - \item The following commands show values of all the environment - variables - \end{itemize} - \begin{lstlisting} - $ printenv | less - $ env - \end{lstlisting} % $ - \begin{itemize} - \item Use \texttt{export} to change Environment variables - \item The new value is available to all programs started from the shell - \end{itemize} - \begin{lstlisting} - $ export PATH=$PATH:$HOME/bin - \end{lstlisting} % $ -\end{frame} - -\section{Miscellaneous Tools} - -\begin{frame}[fragile] - \frametitle{\texttt{find}} - \begin{itemize} - \item Find files in a directory hierarchy - \item Offers a very complex feature set - \item Look at the \texttt{man} page! - \end{itemize} - \begin{itemize} - \item Find all \texttt{.pdf} files, in current dir and sub-dirs - \begin{lstlisting} - $ find . -name ``*.pdf'' - \end{lstlisting} % $ - \item List all the directory and sub-directory names - \begin{lstlisting} - $ find . -type d - \end{lstlisting} % $ - \end{itemize} -\end{frame} - -\begin{frame}[fragile] - \frametitle{\texttt{cmp}} - \begin{itemize} - \item Compare two files - \end{itemize} - \begin{lstlisting} - $ find . -name quick.c - ./Desktop/programs/quick.c - ./c-folder/quick.c - $ cmp Desktop/programs/quick.c \ - c-folder/quick.c - \end{lstlisting} % $ - \begin{itemize} - \item No output when the files are exactly the same - \item Else, gives location where the first difference occurs - \end{itemize} -\end{frame} - -\begin{frame}[fragile] - \frametitle{\texttt{diff}} - \begin{itemize} - \item We know the files are different, but want exact differences - \end{itemize} - \begin{lstlisting} - $ diff Desktop/programs/quick.c \ - c-folder/quick.c - \end{lstlisting} % $ - \begin{itemize} - \item line by line difference between files - \item \texttt{>} indicates content only in second file - \item \texttt{<} indicates content only in first file - \end{itemize} -\end{frame} - -\begin{frame}[fragile] -\frametitle{\texttt{tar}} -\begin{itemize} -\item \emph{tarball} -- essentially a collection of files -\item May or may not be compressed -\item Eases the job of storing, backing-up \& transporting files -\end{itemize} -\end{frame} - -\begin{frame}[fragile] -\frametitle{Extracting an archive} - -\begin{lstlisting} -$ mkdir extract -$ cp allfiles.tar extract/ -$ cd extract -$ tar -xvf allfiles.tar -\end{lstlisting} %$ - -\begin{itemize} -\item \texttt{-x} --- Extract files within the archive -\item \texttt{-f} --- Specify the archive file -\item \texttt{-v} --- Be verbose -\end{itemize} -\end{frame} - -\begin{frame}[fragile] -\frametitle{Creating an archive} -\begin{lstlisting} -$ tar -cvf newarchive.tar *.txt -\end{lstlisting} % $ -\begin{itemize} -\item \texttt{-c} --- Create archive -\item Last argument is list of files to be added to archive -\end{itemize} -\end{frame} - -\begin{frame}[fragile] - \frametitle{Compressed archives} - \begin{itemize} - \item \texttt{tar} can create and extract compressed archives - \item Supports compressions like gzip, bzip2, lzma, etc. - \item Additional option to handle compressed archives - \begin{center} - \begin{tabular}{ll} - Compression & Option \\ - gzip & \texttt{-z} \\ - bzip2 & \texttt{-j} \\ - lzma & \texttt{-{}-lzma} \\ - \end{tabular} - \end{center} - \end{itemize} - \begin{lstlisting} - $ tar -cvzf newarchive.tar.gz *.txt - \end{lstlisting} % $ -\end{frame} - - -\begin{frame} -\frametitle{Customizing your shell} -\begin{itemize} -\item Bash reads \texttt{/etc/profile}, - \texttt{\textasciitilde{}/.bash\_profile}, - \texttt{\textasciitilde{}/.bash\_login}, and - \texttt{\textasciitilde{}/.profile} in that order, when starting - up as a login shell. -\item \texttt{\textasciitilde{}/.bashrc} is read, when not a login - shell -\item Put any commands that you want to run when bash starts, in this - file. -\end{itemize} -\end{frame} - -%% THE DOCUMENT ENDS HERE -\end{document} -%%%%%%%%%%%%%%%%%%%% - -\section{Basic editing and editors} -\begin{frame}[fragile] -\frametitle{vim} - - -Vim is a very powerful editor. It has a lot of commands, and all of them -cannot be explained here. We shall try and look at a few, so that you -can find your way around in vim. - -To open a file in vim, we pass the filename as a parameter to the \texttt{vim} -command. If a file with that filename does not exist, a new file is -created. - -\begin{lstlisting} -$ vim first.txt -\end{lstlisting} % $ - -To start inserting text into the new file that we have opened, we need -to press the \texttt{i} key. This will take us into the \emph{insert} mode from the -\emph{command} mode. Hitting the \texttt{esc} key, will bring us back to the -\emph{command} mode. There is also another mode of vim, called the \emph{visual} -mode which will be discussed later in the course. - -In general, it is good to spend as little time as possible in the insert -mode and extensively use the command mode to achieve various tasks. - -To save the file, use \texttt{:w} in the command mode. From here on, it is -understood that we are in the command mode, whenever we are issuing any -command to vim. - -To save a file and continue editing, use \texttt{:w FILENAME} The file name is -optional. If you do not specify a filename, it is saved in the same file -that you opened. If a file name different from the one you opened is -specified, the text is saved with the new name, but you continue editing -the file that you opened. The next time you save it without specifying a -name, it gets saved with the name of the file that you initially opened. - -To save file with a new name and continue editing the new file, use -\texttt{:saveas FILENAME} - -To save and quit, use \texttt{:wq} - -To quit, use \texttt{:q} - -To quit without saving, use \texttt{:q!} -\begin{itemize} - -\item Moving around\\ -While you are typing in a file, it is in-convenient to keep moving your -fingers from the standard position for typing to the arrow keys. Vim, -therefore, provides alternate keys for moving in the document. Note -again that, you should be in the command mode, when issuing any commands -to vim. - -The basic cursor movement can be achieved using the keys, \texttt{h} (left), -\texttt{l} (right), \texttt{k} (up) and \texttt{j} (down). - -\begin{lstlisting} -^ -k -\end{lstlisting} % $ - -\begin{quote} - -\begin{description} -\item[< h l >] j v -\end{description} - -\end{quote} - -Note: Most commands can be prefixed with a number, to repeat the -command. For instance, \texttt{10j} will move the cursor down 10 lines. - - -\item Moving within a line\\ -\begin{center} -\begin{tabular}{ll} - Cursor Movement & Command \\ -\hline - Beginning of line & \texttt{0} \\ - First non-space character of line & \texttt{\textasciicircum{}} \\ - End of line & \texttt{\$} \\ - Last non-space character of line & \texttt{g\_} \\ -\end{tabular} -\end{center} - - - - -\item Moving by words and sentences\\ -\begin{center} -\begin{tabular}{ll} - Cursor Movement & Command \\ -\hline - Forward, word beginning & \texttt{w} \\ - Backward, word beginning & \texttt{b} \\ - Forward, word end & \texttt{e} \\ - Backward, word end & \texttt{ge} \\ - Forward, sentence beginning & \texttt{)} \\ - Backward, sentence beginning & \texttt{(} \\ - Forward, paragraph beginning & \texttt{\}} \\ - Backward, paragraph beginning & \texttt{\{} \\ -\end{tabular} -\end{center} - - - - -\item More movement commands\\ -\begin{center} -\begin{tabular}{ll} - Cursor Movement & Command \\ -\hline - Forward by a screenful of text & \texttt{C-f} \\ - Backward by a screenful of text & \texttt{C-b} \\ - Beginning of the screen & \texttt{H} \\ - Middle of the screen & \texttt{M} \\ - End of the screen & \texttt{L} \\ - End of file & \texttt{G} \\ - Line number \texttt{num} & \texttt{[num]G} \\ - Beginning of file & \texttt{gg} \\ - Next occurrence of the text under the cursor & \texttt{*} \\ - Previous occurrence of the text under the cursor & \texttt{\#} \\ -\end{tabular} -\end{center} - - - -Note: \texttt{C-x} is \texttt{Ctrl} + \texttt{x} - - -\item The visual mode\\ -The visual mode is a special mode that is not present in the original vi -editor. It allows us to highlight text and perform actions on it. All -the movement commands that have been discussed till now work in the -visual mode also. The editing commands that will be discussed in the -future work on the visual blocks selected, too. - - -\item Editing commands\\ -The editing commands usually take the movements as arguments. A movement -is equivalent to a selection in the visual mode. The cursor is assumed -to have moved over the text in between the initial and the final points -of the movement. The motion or the visual block that's been highlighted -can be passed as arguments to the editing commands. - - -\begin{center} -\begin{tabular}{ll} - Editing effect & Command \\ -\hline - Cutting text & \texttt{d} \\ - Copying/Yanking text & \texttt{y} \\ - Pasting copied/cut text & \texttt{p} \\ -\end{tabular} -\end{center} - - - -The cut and copy commands take the motions or visual blocks as arguments -and act on them. For instance, if you wish to delete the text from the -current text position to the beginning of the next word, type \texttt{dw}. If -you wish to copy the text from the current position to the end of this -sentence, type \texttt{y)}. - -Apart from the above commands, that take any motion or visual block as -an argument, there are additional special commands. - - -\begin{center} -\begin{tabular}{ll} - Editing effect & Command \\ -\hline - Cut the character under the cursor & \texttt{x} \\ - Replace the character under the cursor with \texttt{a} & \texttt{ra} \\ - Cut an entire line & \texttt{dd} \\ - Copy/yank an entire line & \texttt{yy} \\ -\end{tabular} -\end{center} - - - -Note: You can prefix numbers to any of the commands, to repeat them. - - -\item Undo and Redo\\ -You can undo almost anything using \texttt{u}. - -To undo the undo command type \texttt{C-r} - - -\item Searching and Replacing\\ -\begin{center} -\begin{tabular}{ll} - Finding & Command \\ -\hline - Next occurrence of \texttt{text}, forward & \texttt{\textbackslash{}text} \\ - Next occurrence of \texttt{text}, backward & \texttt{?text} \\ - Search again in the same direction & \texttt{n} \\ - Search again in the opposite direction & \texttt{N} \\ - Next occurrence of \texttt{x} in the line & \texttt{fx} \\ - Previous occurrence of \texttt{x} in the line & \texttt{Fx} \\ -\end{tabular} -\end{center} - - - - -\begin{center} -\begin{tabular}{ll} - Finding and Replacing & Command \\ -\hline - Replace the first instance of \texttt{old} with \texttt{new} in the current line. & \texttt{:s/old/new} \\ - Replace all instances of \texttt{old} with \texttt{new} in the current line. & \texttt{:s/old/new/g} \\ - Replace all instances of \texttt{old} with \texttt{new} in the current line, but ask for confirmation each time. & \texttt{:s/old/new/gc} \\ - Replace the first instance of \texttt{old} with \texttt{new} in the entire file. & \texttt{:\%s/old/new} \\ - Replace all instances of \texttt{old} with \texttt{new} in the entire file. & \texttt{:\%s/old/new/g} \\ - Replace all instances of \texttt{old} with \texttt{new} in the entire file but ask for confirmation each time. & \texttt{:\%s/old/new/gc} \\ -\end{tabular} -\end{center} - - - -\end{itemize} % ends low level -\end{frame} -\begin{frame} -\frametitle{SciTE} - - -SciTE is a \emph{source code} editor, that has a feel similar to the commonly -used GUI text editors. It has a wide range of features that are -extremely useful for a programmer, editing code. Also it aims to keep -configuration simple, and the user needs to edit a text file to -configure SciTE to his/her liking. - -Opening, Saving, Editing files with SciTE is extremely simple and -trivial. Knowledge of using a text editor will suffice. - -SciTE can syntax highlight code in various languages. It also has -auto-indentation, code-folding and other such features which are useful -when editing code. - -SciTE also gives you the option to (compile and) run your code, from -within the editor. -\end{frame} - - - |