4281 lines
125 KiB
TeX
4281 lines
125 KiB
TeX
|
% File autogenerated using the Bonus 2 program at 2018-11-18 08:50
|
|||
|
\documentclass[hidelinks,12pt,a4paper,numbers=enddot]{scrartcl}
|
|||
|
|
|||
|
\usepackage[margin=2cm]{geometry}
|
|||
|
\usepackage{hyperref}
|
|||
|
\usepackage[utf8]{inputenc}
|
|||
|
|
|||
|
\title{Documentation}
|
|||
|
\author{Group 1}
|
|||
|
\begin{document}
|
|||
|
\maketitle
|
|||
|
\tableofcontents
|
|||
|
\newpage
|
|||
|
|
|||
|
\section{wc}
|
|||
|
|
|||
|
|
|||
|
\large Alessandro Luini \normalsize\\
|
|||
|
|
|||
|
|
|||
|
The program reads either standard input or a list of files and
|
|||
|
generates one or more of the following statistics: newline count,
|
|||
|
word count, and byte count. If a list of files is provided, both
|
|||
|
individual file and total statistics follow.
|
|||
|
|
|||
|
How to use
|
|||
|
Sample execution of wc:
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
wc file1.txt file2.txt
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
will output:
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
40 149 947 file1.txt
|
|||
|
2294 16638 97724 file2.txt
|
|||
|
2334 16787 98671 total
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
The first column is the count of newlines, meaning that the text file
|
|||
|
\texttt{file1.txt} has 40 newlines while bar has 2294 newlines-
|
|||
|
resulting in a total of 2334 newlines. The second column indicates the
|
|||
|
number of words in each text file showing that there are 149 words in \texttt{file1.txt}
|
|||
|
and 16638 words in \texttt{file2.txt} – giving a total of 16787 words.\\
|
|||
|
The last column indicates the number of characters in each text file, meaning that the file
|
|||
|
\texttt{file1.txt} has 947 characters while bar has 97724 characters – 98671
|
|||
|
characters all in all.\\
|
|||
|
|
|||
|
Flags
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
wc -l file1.txt
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Prints the line count (note that if the last line does not have \texttt{\\n},
|
|||
|
it will not be counted).
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
wc -c file1.txt
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Prints the byte count.
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
wc -m file1.txt
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Prints the character count.
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
wc -L file1.txt
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Prints the length of longest line (GNU extension)
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
wc -w file1.txt
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Prints the word count.
|
|||
|
|
|||
|
\section{vi}
|
|||
|
|
|||
|
|
|||
|
\large Alessandro Luini \normalsize\\
|
|||
|
|
|||
|
|
|||
|
The default editor that comes with the UNIX operating system is called
|
|||
|
\texttt{vi} (visual editor).\\
|
|||
|
|
|||
|
The UNIX vi editor is a full screen editor and has two modes of operation:
|
|||
|
|
|||
|
\begin{itemize}
|
|||
|
\item Command mode commands which cause action to be taken on the file
|
|||
|
\item Insert mode in which entered text is inserted into the file.
|
|||
|
\end{itemize}
|
|||
|
|
|||
|
In the command mode, every character typed is a command that does
|
|||
|
something to the text file being edited; a character typed in the
|
|||
|
command mode may even cause the vi editor to enter the insert mode.\\
|
|||
|
|
|||
|
In the insert mode, every character typed is added to the text in the
|
|||
|
file; pressing the {Esc} (Escape) key turns off the Insert mode.\\
|
|||
|
|
|||
|
While there are a number of vi commands, just a handful of these
|
|||
|
is usually sufficient for beginning vi users. To assist such users,
|
|||
|
this Web page contains a sampling of basic vi commands. The most
|
|||
|
basic and useful commands are marked with an asterisk (* or star)
|
|||
|
in the tables below. With practice, these commands should become
|
|||
|
automatic.\\
|
|||
|
|
|||
|
Both UNIX and vi are \textbf{case-sensitive}. Be sure not to use a
|
|||
|
capital letter in place of a lowercase letter; the
|
|||
|
results will not be what you expect.\\
|
|||
|
|
|||
|
How to start \texttt{vi}
|
|||
|
To use vi on a file, type in vi filename. If the file named
|
|||
|
filename exists, then the first page (or screen) of the file
|
|||
|
will be displayed; if the file does not exist, then an empty
|
|||
|
file and screen are created into which you may enter text.
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
vi filename.txt
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
How to exit \texttt{vi}
|
|||
|
|
|||
|
Usually the new or modified file is saved when you leave vi.
|
|||
|
However, it is also possible to quit vi without saving the file.\\
|
|||
|
|
|||
|
The cursor moves to bottom of screen whenever a colon (:) is
|
|||
|
typed. This type of command is completed by hitting the
|
|||
|
\textless Return\textgreater (or \textless Enter\textgreater ) key.\\
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
:q
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Quit vi without saving
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
:x
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Quit vi, writing out modified file to
|
|||
|
file named in original invocationt modified file to file named in origin.
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
:wq
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Quit vi, writing out modified file to file named in original invocation.
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
:q!
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Quit vi even though latest changes have not been saved for this vi call.
|
|||
|
|
|||
|
|
|||
|
Recover from a crash
|
|||
|
|
|||
|
Open vi using the \texttt{-r} flag to recover a file that was being edited when a crash
|
|||
|
happened.
|
|||
|
|
|||
|
\section{paste}
|
|||
|
|
|||
|
|
|||
|
\large Agostino Monti \normalsize\\
|
|||
|
|
|||
|
|
|||
|
|
|||
|
The \texttt{paste} command is used to join files horizontally
|
|||
|
(parallel merging) by outputting lines consisting of the sequentially corresponding
|
|||
|
lines of each file specified, separated by tabs, to the standard output.\\
|
|||
|
Once involved, \texttt{paste} will read all its file arguments. For each corresponding line,
|
|||
|
paste will append the contents of each file at that line to its output along with a tab.
|
|||
|
When it has completed its operation for the last file, \texttt{paste} will output a newline
|
|||
|
character and move on to the next line.
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
paste \[flags\] \[file1\] \[file2\] ...
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Flags
|
|||
|
|
|||
|
\begin{itemize}
|
|||
|
\item \texttt{-d} delimiters, which specifies a list of delimiters to be used instead of tabs
|
|||
|
for separating consecutive values on a single line. Each delimiter is used in turn;
|
|||
|
when the list has been exhausted, paste begins again at the first delimiter.
|
|||
|
\begin{verbatim}
|
|||
|
paste -d "|" file1.txt file2.txt
|
|||
|
paste -d "|," file1.txt file2.txt\end{verbatim}
|
|||
|
|
|||
|
\item \texttt{-s}, which causes paste to append the data in serial rather than in parallel;
|
|||
|
that is, in a horizontal rather than vertical fashion.
|
|||
|
|
|||
|
\end{itemize}
|
|||
|
|
|||
|
\section{Pipes}
|
|||
|
|
|||
|
|
|||
|
\large Domenico Votta \normalsize\\
|
|||
|
|
|||
|
|
|||
|
|
|||
|
The \texttt{pipes} that in the shell are representend with the symbol | ,
|
|||
|
they are used to join two commands on the terminal, taking the output of the first
|
|||
|
command and using it as input of the second.\\
|
|||
|
It is usually common to see the command \texttt{grep} and \texttt{ps} together,
|
|||
|
an example below.\\
|
|||
|
|
|||
|
Example: lists all processes with your username
|
|||
|
\begin{verbatim}
|
|||
|
ps aux | grep user
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Example: count the lines of a file, using the
|
|||
|
\underline{\href{www.theshell.ch/pages/cmd/advanced/nl.html}{nl}} command
|
|||
|
\begin{verbatim}
|
|||
|
cat example1.txt | nl
|
|||
|
1 Car
|
|||
|
2 Computer
|
|||
|
3 Robot
|
|||
|
4 Smartphone
|
|||
|
5 Videogame
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Example: passing expressions to \underline{\href{www.theshell.ch/pages/cmd/advanced/bc.html}{bc}}
|
|||
|
to do calculations
|
|||
|
\begin{verbatim}
|
|||
|
echo "(12 / 2 - 3) * 3 + 1.5" | bc
|
|||
|
10.5
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
You can use the commands that you learned and put them together, always
|
|||
|
respecting the logic of the command.
|
|||
|
|
|||
|
\section{colrm}
|
|||
|
|
|||
|
|
|||
|
\large Domenico Votta \normalsize\\
|
|||
|
|
|||
|
|
|||
|
The \texttt{colrm} is a command that removes the column that you indicate \\
|
|||
|
|
|||
|
Here we have a file named \texttt{example.txt} that contains two lines to test this command:\\
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
123456789
|
|||
|
abcdefghi
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
The syntax command is:
|
|||
|
\begin{verbatim}
|
|||
|
colrm \[first\] \[last\]
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
colrm 4 \textless example.txt
|
|||
|
123
|
|||
|
abc
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
How you can see, if I don't indicate the last column, the command removes
|
|||
|
all the colums starting from 4 included.
|
|||
|
\begin{verbatim}
|
|||
|
colrm 2 4 \textless example.txt
|
|||
|
156789
|
|||
|
aefghi
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Here, how you can see, the command has removed not all the columns, but only the colums that
|
|||
|
starting at 2 and ending at 4, included.
|
|||
|
|
|||
|
\section{head and tail}
|
|||
|
|
|||
|
|
|||
|
\large Agostino Monti \normalsize\\
|
|||
|
|
|||
|
|
|||
|
|
|||
|
The \texttt{head} command reads the first few lines of any text given to it as an input
|
|||
|
and writes them to standard output.\\
|
|||
|
If more than one input file is provided, head will return the first ten lines
|
|||
|
from each file, precede each set of lines by the name of the file and separate
|
|||
|
each set of lines by one vertical space.
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
head \[flags\] \[file1\] \[file2\] ...
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
The \texttt{tail} command is similar to the \texttt{head} command
|
|||
|
except that it reads the final lines in files rather than the first lines.
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
tail \[flags\] \[file1\] \[file2\] ...
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Flags
|
|||
|
|
|||
|
\begin{itemize}
|
|||
|
\item \textbf{-n}: can be used followed by number, which indicates the number of
|
|||
|
lines desired in the output. This flag can be used without \emph{n}: the hyphen and the
|
|||
|
number (with no intervening space) are enough to tell head how many lines to return.
|
|||
|
\begin{verbatim}
|
|||
|
head -n15 file1.txt \\
|
|||
|
head -n 15 file1.txt \\
|
|||
|
head -15 file1.txt\end{verbatim}
|
|||
|
|
|||
|
\item \textbf{-c}: similar to \emph{-n} with the only difference being that the number stands for
|
|||
|
bytes instead of the number of lines and the fact that it can't be used without explicitly
|
|||
|
typing the \emph{-c}.
|
|||
|
|
|||
|
\end{itemize}
|
|||
|
|
|||
|
\section{emacs}
|
|||
|
|
|||
|
|
|||
|
\large Alessandro Luini \normalsize\\
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Emacs is one of the oldest and most versatile text editors available for
|
|||
|
UNIX-based systems. It's been around for a long time (more than twenty years
|
|||
|
for GNU emacs) and is well known for its powerful and rich editing features.\\
|
|||
|
Emacs is also more than just a text editor; it can be customized and
|
|||
|
extended with different "modes", enabling it to be used like an
|
|||
|
Integrated Development Environment (IDE) for programming languages
|
|||
|
like Java, C or Python.\\
|
|||
|
|
|||
|
For those who have used both the ubiquitous vi and the user-friendly nano,
|
|||
|
emacs would come as an interesting cross-between. Its strengths and features
|
|||
|
would resemble those of vi while its menus, help files and easy-to-remember
|
|||
|
command-keys would compare with nano.\\
|
|||
|
|
|||
|
In this article, we will see how we can install emacs
|
|||
|
in a Linux system and use it for basic text editing. Emacs
|
|||
|
is also available for graphical window managers, however we will only cover the
|
|||
|
"text based" version here.
|
|||
|
|
|||
|
How to install
|
|||
|
|
|||
|
Run the following command:
|
|||
|
\begin{verbatim}
|
|||
|
install emacs
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Open a file, or create it like this:
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
emacs file1.txt
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
And then follow the simple manual that will be open.
|
|||
|
|
|||
|
\section{grep}
|
|||
|
|
|||
|
|
|||
|
\large Domenico Votta \normalsize\\
|
|||
|
|
|||
|
|
|||
|
The \texttt{grep} is a command that permits to search occurences of a
|
|||
|
keyword or more in a file or more. Through some flags you can decide the search criteria.
|
|||
|
The command grep is case sensitive (robot is different from Robot), but we will see how
|
|||
|
to ignore it.\\
|
|||
|
|
|||
|
Here we have two files named \texttt{example1.txt} and
|
|||
|
\texttt{example2.txt} that contain 5 elements, to test this command:
|
|||
|
|
|||
|
\texttt{example1.txt}
|
|||
|
\begin{verbatim}
|
|||
|
Car
|
|||
|
Computer
|
|||
|
Robot
|
|||
|
Smartphone
|
|||
|
Videogame
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
\texttt{example2.txt}
|
|||
|
\begin{verbatim}
|
|||
|
Apple
|
|||
|
Computer
|
|||
|
Robot
|
|||
|
Microsoft
|
|||
|
Huawei
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
The syntax command is:
|
|||
|
\begin{verbatim}grep \[flag\] \[keyword\] \[file\]\end{verbatim}
|
|||
|
You can put different flags together to refine the search.
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
grep Robot example1.txt example2.txt (if you write robot you won't have the correspondence.)
|
|||
|
example1.txt: Robot
|
|||
|
example2.txt: Robot
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Your output will be this because grep found the keyword Robot in both files
|
|||
|
|
|||
|
\subsubsection{Flags}
|
|||
|
|
|||
|
Here a list that contains the main flags of these command:
|
|||
|
|
|||
|
\begin{itemize}
|
|||
|
\item \textbf{-i}: this flag ignore the case sensitive. Here we can write Robot or
|
|||
|
robot that grep will find the correspondence.
|
|||
|
\begin{verbatim}
|
|||
|
grep -i robot example1.txt example2.txt
|
|||
|
example1.txt: Robot
|
|||
|
example2.txt: Robot
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
|
|||
|
\item \textbf{-v}: this flag ignore the keyword from the search.
|
|||
|
\begin{verbatim}
|
|||
|
grep -i -v robot example1.txt example2.txt
|
|||
|
example1.txt:Car
|
|||
|
example1.txt:Computer
|
|||
|
example1.txt:Smartphone
|
|||
|
example1.txt:Videogame
|
|||
|
example2.txt:Apple
|
|||
|
example2.txt:Computer
|
|||
|
example2.txt:Microsoft
|
|||
|
example2.txt:Huawei
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
|
|||
|
\item \textbf{-c}: this flag indicates the number of times that the keyword appears in the file.
|
|||
|
\begin{verbatim}
|
|||
|
grep -i -c robot example1.txt
|
|||
|
1
|
|||
|
\end{verbatim}
|
|||
|
(If in the file you would have had two times the keyword Robot, the output would have been 2)
|
|||
|
|
|||
|
|
|||
|
\item \textbf{-h}: Remove from the output the file name where it found the keyword
|
|||
|
\begin{verbatim}
|
|||
|
grep -i -h apple example1.txt example2.txt
|
|||
|
Apple
|
|||
|
\end{verbatim}
|
|||
|
How you can see the output doesn't show tha file name \texttt{example2.txt}
|
|||
|
|
|||
|
\end{itemize}
|
|||
|
|
|||
|
\section{bc}
|
|||
|
|
|||
|
|
|||
|
\large Alessandro Luini \normalsize\\
|
|||
|
|
|||
|
|
|||
|
|
|||
|
In computing, \texttt{bc} is a command in Unix operating systems that can do easy
|
|||
|
calculations in the shell.\\
|
|||
|
Usually input are passed using the \texttt{echo} command and pipes.
|
|||
|
The name stands for \emph{Basic Calculator}.\\
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
echo "(12 / 2 - 3) * 3 + 1.5" | bc
|
|||
|
10.5
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Interactive mode
|
|||
|
|
|||
|
Using the interactive mode makes you do calculations freely in a special shell inside the shell.
|
|||
|
All you need to do is run the bc command with the \texttt{-i} flag
|
|||
|
and no parameter.\\
|
|||
|
To exit the interactive mode, write \emph{quit}.
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
bc -i
|
|||
|
|
|||
|
1+1
|
|||
|
2
|
|||
|
(12 / 2 - 3) * 3 + 1.5
|
|||
|
10.2
|
|||
|
quit
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
\section{nl}
|
|||
|
|
|||
|
|
|||
|
\large Domenico Votta \normalsize\\
|
|||
|
|
|||
|
|
|||
|
The \texttt{nl} is a command that permits to number the lines.
|
|||
|
Through some flags you can decide how to filter this command.\\
|
|||
|
|
|||
|
We have a file named \texttt{example.txt} that contains 5 elements, to test this command:
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
Car
|
|||
|
Computer
|
|||
|
Robot
|
|||
|
Smartphone
|
|||
|
Videogame
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
The syntax command is:
|
|||
|
\begin{verbatim} nl \[flags\]\[file\] \end{verbatim}
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
nl example.txt
|
|||
|
1 Car
|
|||
|
2 Computer
|
|||
|
3 Robot
|
|||
|
4 Smartphone
|
|||
|
5 Videogame
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
How you can see the command has numbered the lines.
|
|||
|
|
|||
|
\subsubsection{Flags}
|
|||
|
|
|||
|
|
|||
|
\begin{itemize}
|
|||
|
\item \textbf{-b (regex)}: Specify the lines to be numered
|
|||
|
\begin{verbatim}
|
|||
|
nl -b p\^\[cv\] example.txt
|
|||
|
1 Car
|
|||
|
2 Computer
|
|||
|
3 Videogame
|
|||
|
Robot
|
|||
|
Smartphone
|
|||
|
\end{verbatim}
|
|||
|
The part after the flag is used to number only the lines that start with c and v.
|
|||
|
|
|||
|
|
|||
|
\item -b\textbf{n}: The flag n goes with b, doesn't number any lines
|
|||
|
\begin{verbatim}
|
|||
|
nl -bn example.txt
|
|||
|
Car
|
|||
|
Computer
|
|||
|
Videogame
|
|||
|
Robot
|
|||
|
Smartphone
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
|
|||
|
\item \textbf{-s}: Usually nl separes the number of the line from the text with a tab, with -s
|
|||
|
flag you can choose another separator, in this example we will use "=".
|
|||
|
\begin{verbatim}
|
|||
|
nl -s= example.txt
|
|||
|
1=Car
|
|||
|
2=Computer
|
|||
|
3=Videogame
|
|||
|
4=Robot
|
|||
|
5=Smartphone
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
|
|||
|
\end{itemize}
|
|||
|
|
|||
|
\section{echo}
|
|||
|
|
|||
|
|
|||
|
\large Alessandro Luini \normalsize\\
|
|||
|
|
|||
|
|
|||
|
|
|||
|
In computing, \texttt{echo} is a command in Unix operating systems that outputs the
|
|||
|
strings it is being passed as arguments.\\
|
|||
|
|
|||
|
It is a command typically used to output status text to the screen or a
|
|||
|
computer file, or as a source part of a pipeline.\\
|
|||
|
|
|||
|
To use this simple command just type "echo" with the topic we want to
|
|||
|
print. The computer will return your argument as a string
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
echo "hello world"
|
|||
|
hello world
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
\section{comm}
|
|||
|
|
|||
|
|
|||
|
\large Domenico Votta \normalsize\\
|
|||
|
|
|||
|
|
|||
|
The \texttt{comm} is a command that compares two sorted files
|
|||
|
line by line and writes the output: the lines that are in common and the lines that are unique.\\
|
|||
|
|
|||
|
Here we have two files named \texttt{example1.txt} and
|
|||
|
\texttt{example2.txt} that contain 5 elements, to test this command:\\
|
|||
|
|
|||
|
\texttt{example1.txt}
|
|||
|
\begin{verbatim}
|
|||
|
Icecream
|
|||
|
Chocolate
|
|||
|
Cake
|
|||
|
Candy
|
|||
|
Biscuit
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
\texttt{example2.txt}
|
|||
|
\begin{verbatim}
|
|||
|
Bread
|
|||
|
Chocolate
|
|||
|
Tomato
|
|||
|
Candy
|
|||
|
Pizza
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
The syntax command is:
|
|||
|
\begin{verbatim}
|
|||
|
comm \[flag\]\[file1\] \[file2\]
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
comm example1.txt example2.txt
|
|||
|
Icecream
|
|||
|
Chocolate
|
|||
|
Cake
|
|||
|
Tomato
|
|||
|
Candy
|
|||
|
Biscuit
|
|||
|
Pizza
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
\begin{itemize}
|
|||
|
\item The elements of the first file have less indentation.
|
|||
|
\item The elements of the second file have some more indentation.
|
|||
|
\item The elements in common have even more indentation than those of the second file.
|
|||
|
\end{itemize}
|
|||
|
|
|||
|
Flags
|
|||
|
|
|||
|
\begin{itemize}
|
|||
|
\item \textbf{-1}: supress column 1
|
|||
|
\item \textbf{-2}: supress column 2
|
|||
|
\item \textbf{-3}: supress column 3
|
|||
|
\end{itemize}
|
|||
|
|
|||
|
\section{diff}
|
|||
|
|
|||
|
|
|||
|
\large Alessandro Luini \normalsize\\
|
|||
|
|
|||
|
|
|||
|
|
|||
|
The command \texttt{diff} analyzes two files and prints the lines that are different.
|
|||
|
Essentially, it outputs a set of instructions for how to change one file to
|
|||
|
make it identical to the second file.\\
|
|||
|
|
|||
|
How to use
|
|||
|
|
|||
|
To activate the diff command, we must take as parameters two or more
|
|||
|
files that we want to compare and it will give us the output of
|
|||
|
different lines.\\
|
|||
|
For example let's say we have two files, file1.txt and file2.txt.\\
|
|||
|
If \textbf{file1.txt} contains the following four lines of text:
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
1. I need to buy apples.
|
|||
|
2. I need to run around the park.
|
|||
|
3. I need to clean the dog.
|
|||
|
4. I need to get the car detailed.
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
and \textbf{file2.txt} contains these four lines:
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
1. I need to do the laundry.
|
|||
|
2. I need to clean the dog.
|
|||
|
4. I need to get the dog detailed.
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
then we can use diff to automatically display for us which lines differ
|
|||
|
between the two files with this command:
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
diff file1.txt file2.txt
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
and the output will be:
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
2,4c2,4
|
|||
|
|
|||
|
\textless I need to run the laundry.
|
|||
|
\textless I need to wash the dog.
|
|||
|
\textless I need to get the car detailed.
|
|||
|
---
|
|||
|
\textgreater I need to do the laundry.
|
|||
|
\textgreater I need to wash the car.
|
|||
|
\textgreater I need to get the dog detailed.
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
In our output, "2,4c2,4" means: "Lines 2 through 4 in the first
|
|||
|
file need to be changed to match lines 2 through 4 in the second file.
|
|||
|
|
|||
|
Context mode
|
|||
|
To view differences in context mode, use the -c option.
|
|||
|
For instance, let's say \emph{file1.txt} and \emph{file2.txt} contain
|
|||
|
the following:\\
|
|||
|
|
|||
|
\begin{table}[h]
|
|||
|
\begin{tabular}{ll}
|
|||
|
File1.txt &File2.txt \\
|
|||
|
apples &apples \\
|
|||
|
oranges &kiwis \\
|
|||
|
kiwis &carrots \\
|
|||
|
carrots &grapefruits \\
|
|||
|
\end{tabular}
|
|||
|
\end{table}
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
diff -c file1.txt file2.txt
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Our output will be like the following:
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
*** file1.txt 2014-08-21 17:58:29.764656635 -0400
|
|||
|
--- file2.txt 2014-08-21 17:58:50.768989841 -0400
|
|||
|
***************
|
|||
|
*** 1,4 ****
|
|||
|
apples
|
|||
|
- oranges
|
|||
|
kiwis
|
|||
|
carrots
|
|||
|
--- 1,4 ----
|
|||
|
apples
|
|||
|
kiwis
|
|||
|
carrots
|
|||
|
+ grapefruits
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
The first two lines of this output show us information about our "from"
|
|||
|
file (file 1) and our "to" file (file 2). It lists the file name,
|
|||
|
modification date, and modification time of each of our files, one per
|
|||
|
line. The "from" file is indicated by "***", and the "to" file is
|
|||
|
indicated by "---"..\\
|
|||
|
|
|||
|
The line "***************" is just a separator.\\
|
|||
|
The next line has three asterisks ("***") followed by a line
|
|||
|
range from the first file (in this case lines 1 through 4, separated by
|
|||
|
a comma). Then four asterisks ("****").\\
|
|||
|
Then it shows us the contents of those lines. If the line is unchanged,
|
|||
|
it's prefixed by two spaces. If the line is changed, however, it's prefixed
|
|||
|
by an indicative character and a space. The character meanings are as
|
|||
|
follows:
|
|||
|
|
|||
|
\begin{table}[h]
|
|||
|
\begin{tabular}{ll}
|
|||
|
Character &Meaning \\
|
|||
|
\textbf{!} &
|
|||
|
Indicates that this line is part of a group of one or more lines that
|
|||
|
needs to change. There is a corresponding group of lines prefixed with
|
|||
|
"!" in the other file's context as well.
|
|||
|
\\
|
|||
|
\textbf{+} &Indicates a line in the second file that needs to be added to the first file. \\
|
|||
|
\textbf{-} &Indicates a line in the first file that needs to be deleted. \\
|
|||
|
\end{tabular}
|
|||
|
\end{table}
|
|||
|
|
|||
|
After the lines from the first file, there are three dashes ("---"),
|
|||
|
then a line range, then four dashes ("----"). This indicates the
|
|||
|
line range in the second file that will sync up with our changes
|
|||
|
in the first file.
|
|||
|
|
|||
|
If there is more than one section that needs to change, diff will
|
|||
|
show these sections one after the other. Lines from the first file will
|
|||
|
still be indicated with "***", and lines from the second file
|
|||
|
with "---".
|
|||
|
|
|||
|
Unified mode
|
|||
|
Unified mode (the -u option) is similar to context mode,
|
|||
|
but it doesn't display any redundant information. Here's an example,
|
|||
|
using the same input files as our last example:
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
diff -u file1.txt file2.txt
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
will output:
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
--- file1.txt 2014-08-21 17:58:29.764656635 -0400
|
|||
|
+++ file2.txt 2014-08-21 17:58:50.768989841 -0400
|
|||
|
@@ -1,4 +1,4 @@
|
|||
|
apples
|
|||
|
-oranges
|
|||
|
kiwis
|
|||
|
carrots
|
|||
|
+grapefruits
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
The output is similar to above, but as you can see, the differences are
|
|||
|
"unified" into one set.
|
|||
|
|
|||
|
\section{tr}
|
|||
|
|
|||
|
|
|||
|
\large Alessandro Luini \normalsize\\
|
|||
|
|
|||
|
|
|||
|
|
|||
|
The \texttt{tr} command in Unix-like operating systems, which name stands for
|
|||
|
\emph{TRanslate} or \emph{TRansliterate}, indicating its operation of replacing or removing
|
|||
|
specific characters in its input data set.
|
|||
|
|
|||
|
How to use
|
|||
|
|
|||
|
The utility reads a byte stream from its standard input and writes the
|
|||
|
result to the standard output. As arguments, it takes two sets of
|
|||
|
characters (generally of the same length), and replaces occurrences of
|
|||
|
the characters in the first set with the corresponding elements from the
|
|||
|
second set.\\
|
|||
|
|
|||
|
For example,
|
|||
|
\begin{verbatim}
|
|||
|
tr 'abcd' 'jkmn'
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
would maps all characters a to j, b to k, c to m, and d to n.\\
|
|||
|
The character set may be abbreviated by using character ranges. The
|
|||
|
previous example could be also written as:
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
tr 'a-d' 'jkmn'
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
|
|||
|
Flags
|
|||
|
\begin{itemize}
|
|||
|
\item \textbf{-s}: The s flag causes tr to compress sequences of identical
|
|||
|
adjacent characters in its output to a single token.
|
|||
|
\begin{verbatim}
|
|||
|
tr -s '\\n'
|
|||
|
\end{verbatim}
|
|||
|
replaces sequences of one or more newline characters with a single
|
|||
|
newline.
|
|||
|
|
|||
|
\item \textbf{-d}: The d flag causes tr to delete all tokens of the specified
|
|||
|
set of characters from its input. In this case, only a single character
|
|||
|
set argument is used. The following command removes carriage return
|
|||
|
characters.
|
|||
|
\begin{verbatim}
|
|||
|
tr -d '\r'
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
\end{itemize}
|
|||
|
|
|||
|
\section{install}
|
|||
|
|
|||
|
|
|||
|
\large Marco Farace \normalsize\\
|
|||
|
|
|||
|
|
|||
|
|
|||
|
The file(s) are copied to the target file or directory. If the destination
|
|||
|
is a directory, then the file is copied into directory with its original
|
|||
|
filename. If the target file already exists, it is either renamed to
|
|||
|
file.old if the -b option is given or overwritten if permissions allow.\\
|
|||
|
An alternate backup suffix may be specified via the -B option's argument.\\
|
|||
|
Basic syntax is in the form
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
install \[OPTION\]... SOURCE DEST
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
This line of code copies all .xyz file from \emph{/source/folder} to \emph{/destination/folder}
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
install -D /source/folder/*.xyz /destination/folder
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Flags
|
|||
|
|
|||
|
\begin{itemize}
|
|||
|
\item -b: Back up any existing files before overwriting them by renaming
|
|||
|
them to file.old. See -B for specifying a different backup suffix.
|
|||
|
(-B suffix Use suffix as the backup suffix if -b is given)
|
|||
|
\item -C: Copy the file. If the target file already exists and the files
|
|||
|
are the same, then don't change the modification time of the target
|
|||
|
\item -d: Create directories. Missing parent directories are created as required.
|
|||
|
\item -f: Specify the target's file flags; see chflags(1) for a list of
|
|||
|
possible flags and their meanings.
|
|||
|
\item -g: Specify a group. A numeric GID is allowed.
|
|||
|
\item -m: Specify an alternate mode. The default mode is set to rwxr-xr-x
|
|||
|
(0755). The specified mode may be either an octal or symbolic
|
|||
|
value.
|
|||
|
\item -o: Specify an owner. A numeric UID is allowed.
|
|||
|
\end{itemize}
|
|||
|
|
|||
|
\section{7z}
|
|||
|
|
|||
|
|
|||
|
\large Andrea Brites Marto \normalsize\\
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
A .7z. file is an archive format that stands for 7-zip. By default, Mac OS X does not
|
|||
|
know how to handle these files, but that is not a big deal because you can download for
|
|||
|
free in App Store. The program supports 7z, ZIP, CAB, ARJ, BZIP2, TAR, CPIO, RPM and DEB.\\
|
|||
|
|
|||
|
So, first of all, you need to download Unarchiver in order to use this command.\\
|
|||
|
|
|||
|
The basic syntax is:
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
7z \[adeltux\] \[-\] \[SWITCH\] \texttt{\textless ARCHIVE\_NAME\textgreater \textless ARGUMENTS\textgreater }
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Here some useful options that we will use to explain some examples:
|
|||
|
|
|||
|
\begin{itemize}
|
|||
|
\item \emph{a} Add
|
|||
|
\item \emph{d} Delete
|
|||
|
\item \emph{e} Extract
|
|||
|
\item \emph{l} List
|
|||
|
\item \emph{t} Test
|
|||
|
\item \emph{u} Update
|
|||
|
\item \emph{x} Extract with full paths
|
|||
|
\end{itemize}
|
|||
|
|
|||
|
The simplest way to use \texttt{7z} if we want to extracts all files
|
|||
|
from archive archive.zip to the current directory.
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
7z e archive.zip
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
|
|||
|
Well, now we talk about the switches.
|
|||
|
There are many type of switches, we will see the most common ones.
|
|||
|
|
|||
|
-m (Set compression Method)
|
|||
|
|
|||
|
|
|||
|
Specifies the compression method
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
-m\textless method\_parameters\textgreater
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
The format for this switch depends on the archive type which are:
|
|||
|
\begin{itemize}
|
|||
|
\item Zip
|
|||
|
\item GZip
|
|||
|
\item BZip2
|
|||
|
\item 7z
|
|||
|
\item XZ
|
|||
|
\item WIM
|
|||
|
\end{itemize}
|
|||
|
|
|||
|
-r (Recurse subdirectories) switch
|
|||
|
|
|||
|
|
|||
|
Specifies the method of treating filenames or wildcards on the command line.
|
|||
|
The syntax:
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
-r\[- | 0\]
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
\begin{table}[h]
|
|||
|
\begin{tabular}{ll}
|
|||
|
Switch &Description \\
|
|||
|
-r &Enable recurse subdirectories \\
|
|||
|
-r- &Disable recurse subdirectories. This is the default option. \\
|
|||
|
-r0 & Enable recurse subdirectories only for wildcard names \\
|
|||
|
\end{tabular}
|
|||
|
\end{table}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
If we want to list all *.doc files that belong to the archived root directory in
|
|||
|
the \emph{archive.zip} archive, we can do as follows:
|
|||
|
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
7z l archive.zip *.doc -r-
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
-p (Set password) switch
|
|||
|
|
|||
|
|
|||
|
Specifies a password
|
|||
|
Here the syntax is very simple:
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
-p{password}
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
If we want to protect some files we can compress for example all *.txt files
|
|||
|
to archive.7z using a password as "cimbale".
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
7z a archive.7z -p cimbale
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Then if we want to extracts all files from archive.7z we need the password "cimbale".
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
7z x archive.7z -p cimbale
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
-x (Exclude filenames) switch
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Specifes which filenames or wildcards must be excluded from the operation.
|
|||
|
|
|||
|
|
|||
|
Syntax:
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
-x\[\textless recurse\_type\textgreater \]\textless file\_ref\textgreater
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Sometimes we need to add files into an archive.7z, except one, this can be done as fllows:
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
7z a -tzip archive.7z *.txt -x!temp.*
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
|
|||
|
We described the most important swtiches and uses of this command, but there are more.
|
|||
|
|
|||
|
\section{md5}
|
|||
|
|
|||
|
|
|||
|
\large Joey Bevilacqua \normalsize\\
|
|||
|
|
|||
|
|
|||
|
|
|||
|
The command \texttt{md5} calculates an unique string for each input given as
|
|||
|
argument using the \emph{md5} algorithm.
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
md5 \[flags\] \[arg1\] \[arg2\]
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Where \[flags\] are the (optional) md5 flags, read below for more info,
|
|||
|
and \[arg1\], \[arg2\] are the path for files or string (depending on the flags).
|
|||
|
|
|||
|
Example: md5 sum of the string \emph{Hello there}
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
md5 -s "Hello there"
|
|||
|
MD5 ("Hello there") = e8ea7a8d1e93e8764a84a0f3df4644de
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Flags
|
|||
|
|
|||
|
\begin{itemize}
|
|||
|
\item \textbf{-s}: computes the md5 sum of a string instead of a file
|
|||
|
\item \textbf{-q}: prints the md5 sum without the file or string name
|
|||
|
\item \textbf{-r}: reverses the format of the output
|
|||
|
\end{itemize}
|
|||
|
|
|||
|
\section{bash}
|
|||
|
|
|||
|
|
|||
|
\large Marco Farace \normalsize\\
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Bash is an sh-compatible command language interpreter that executes commands
|
|||
|
read from the standard input or from a file. Bash also incorporates useful
|
|||
|
features from the Korn and C shells (ksh and csh).\\
|
|||
|
|
|||
|
Flags
|
|||
|
\begin{itemize}
|
|||
|
\item -c: If this option is present, then commands are read from
|
|||
|
string. If there are arguments after the string, they are
|
|||
|
assigned to the positional parameters, starting with \$0.
|
|||
|
|
|||
|
\item -i: If this option is present, the shell is interactive.
|
|||
|
\item -l: Make bash act as if it had been invoked as a login shell.
|
|||
|
\item -r: If this option is present, the shell becomes restricted.
|
|||
|
\item -s: If this option is present, or if no arguments remain after
|
|||
|
option processing, then commands are read from the standard
|
|||
|
input. This option allows the positional parameters to be
|
|||
|
set when invoking an interactive shell.
|
|||
|
|
|||
|
\item -s: List only the name, line and time fields. This is the default.
|
|||
|
\item -T: Print a character after the user name indicating the state of the
|
|||
|
terminal line: `+' if the terminal is writable; `-' if it is not;
|
|||
|
and `?' if a bad line is encountered.
|
|||
|
|
|||
|
\item -u: Print the idle time for each user, and the associated process ID.
|
|||
|
\item am I: Returns the invoker's real user name.
|
|||
|
\item file: By default, who gathers information from the file /var/run/utmpx.
|
|||
|
An alternative file may be specified.
|
|||
|
|
|||
|
\end{itemize}
|
|||
|
|
|||
|
\section{git}
|
|||
|
|
|||
|
|
|||
|
\large Andrea Brites Marto \normalsize\\
|
|||
|
|
|||
|
|
|||
|
If you want to use \emph{Git} on the shell you need to know how this command works.\\
|
|||
|
The \emph{git} command providesa set of high-level operations and full access to internals.\\
|
|||
|
|
|||
|
Here is the basic syntax but commands may become some more complicated:
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
git \[flags\] \[path\]
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Start a working environment
|
|||
|
|
|||
|
\begin{itemize}
|
|||
|
\item \textbf{clone}: is used to clone a repository in a new directory.
|
|||
|
\item \textbf{init}: this onw is used to create an empty Git repository or reinitialize
|
|||
|
an existing one.
|
|||
|
|
|||
|
\end{itemize}
|
|||
|
|
|||
|
Work on the current changes
|
|||
|
\begin{itemize}
|
|||
|
\item \textbf{add}: add a file contents to the index.
|
|||
|
\item \textbf{mv}: move or renamea file, directory or a symlink (a symbolic link).
|
|||
|
\item \textbf{rm}: remove files from the working tree and from the index.
|
|||
|
\item \textbf{format-patch id}: create a file patch
|
|||
|
\item \textbf{am}: apply a patch file
|
|||
|
\end{itemize}
|
|||
|
|
|||
|
History and state
|
|||
|
\begin{itemize}
|
|||
|
\item \textbf{log}: show commit logs.
|
|||
|
\item \textbf{status}: show the working tree status.
|
|||
|
\end{itemize}
|
|||
|
|
|||
|
Managing modification
|
|||
|
\begin{itemize}
|
|||
|
\item \textbf{commit}: record changes to the repository.
|
|||
|
\item \textbf{diff}: show changes between commits.
|
|||
|
\item \textbf{merge}: merge two or more development histories together.
|
|||
|
\item \textbf{pull}: fetch from and update your local directory with the repository.
|
|||
|
\item \textbf{push}: update the remote repository with your changes.
|
|||
|
\end{itemize}
|
|||
|
|
|||
|
\section{ping}
|
|||
|
|
|||
|
|
|||
|
\large Joy Albertini \normalsize\\
|
|||
|
|
|||
|
|
|||
|
|
|||
|
The \texttt{ping} command, is used to test connection between a \textbf{local server/computer}
|
|||
|
to a \textbf{remote UNIX server}.\\
|
|||
|
The ping command sends \textbf{ICMP Echo Request packets} to the remote server for accessing it.
|
|||
|
Each \textbf{packet echoed back } (via an ICMP Echo Response packet) is written to the shell output.
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
ping \[-flag\] server
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
The main usages for the \texttt{ping} command are:
|
|||
|
|
|||
|
\begin{itemize}
|
|||
|
\item Test whether remote server if working.
|
|||
|
\item Check the network connectivity from your local machine to a remote one.
|
|||
|
\item Check for general network issues.
|
|||
|
\end{itemize}
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
ping theshell.ch
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
The shell will output something like this:
|
|||
|
\emph{64 bytes from 98.138.219.232: icmp\_seq=0 ttl=49 time=144.781 ms} for each packet
|
|||
|
that returns (echoed back).\\
|
|||
|
|
|||
|
To stop the ping command press \texttt{control + c}.
|
|||
|
|
|||
|
Flags
|
|||
|
|
|||
|
\begin{itemize}
|
|||
|
\item \textbf{-c}: send limited number of packets with ping -c (nr of packets)\\
|
|||
|
Example: ping -c 4 yahoo.com, the shell will display the first 4 packets returned,
|
|||
|
and then stop.
|
|||
|
|
|||
|
\item \textbf{-n}: avoid dns lookup, avoid to lookup symbolic names for host addresses,
|
|||
|
so only numeric output.
|
|||
|
|
|||
|
\item \textbf{-a}: get an audio warning, when the remote server comes online \\
|
|||
|
Example: ping -a yahoo.com, server comes online audio signal for every
|
|||
|
packets that returns.
|
|||
|
|
|||
|
\item \textbf{-b}: Allow pinging a broadcast address (broadcast network, is a network
|
|||
|
with many devices on it).
|
|||
|
|
|||
|
\item \textbf{-m}: (mark) tag the packets going out.
|
|||
|
\item \textbf{-f}: (Flood ping) For every ECHO\_REQUEST sent (.) is printed,
|
|||
|
for every ECHO\_REPLY received, a backspace is printed.
|
|||
|
With this command you can easily understand how many packets are being dropped.
|
|||
|
|
|||
|
\item \textbf{-i}: (interval) set the interval between seending each packet (default 1 second);
|
|||
|
only super-user can set interval values less than 0.2 seconds.
|
|||
|
|
|||
|
\item \textbf{-I}: (interface-address) set souce adress to a specific interface adress,
|
|||
|
example the name of the device or IP. When pinging local adresses IPV6, is a needed flag.
|
|||
|
|
|||
|
\item \textbf{-l}: (preload) ping send packets but don't wait for reply.
|
|||
|
Admin permissions are required to use this flag.
|
|||
|
|
|||
|
\item \textbf{-L}: Remove loopback of multicast packets.
|
|||
|
\item \textbf{-N}: (Nioption) send ICMpv6 request, instead of Echo requests
|
|||
|
\begin{itemize}
|
|||
|
\item \textbf{ipv6}: request Ipv6 adresses.
|
|||
|
\item \textbf{ipv4-all}: request Ipv4 adresses.
|
|||
|
\end{itemize}
|
|||
|
|
|||
|
\item \textbf{-p}: (pattern) specify up to 16 number to fill out the packets sent.
|
|||
|
\item \textbf{-D}: print timestamp (unix time + microseconds) in each line.
|
|||
|
\item \textbf{-q}: (Quiet output) Nothing displayed except the summary lines at the start
|
|||
|
and at the end.
|
|||
|
|
|||
|
\item \textbf{-R}: (Record route), displays the route buffer on the packets that include
|
|||
|
RECORD\_ROUTE in the ECHO\_REQUEST.
|
|||
|
|
|||
|
\item \textbf{-r}: bypass the normal routing in a directly-attached network.
|
|||
|
\item \textbf{-s}: (packetsize) Specifies the data bytes to send (default is 56 that
|
|||
|
+ 8 byte of ICMP = 64 ICMP data bytes).
|
|||
|
|
|||
|
\item \textbf{-t}: set IP time-to-live (set how long execute ping in seconds).
|
|||
|
\item \textbf{-U}: print full user-to-user latency (legacy ping behaviour).
|
|||
|
\item \textbf{-v}: output verbose on output
|
|||
|
\item \textbf{-V}: Display verion of command
|
|||
|
\item \textbf{-w}: (deadline) Timeout in seconds of ping command, regardless of how\
|
|||
|
many packets have been sent.
|
|||
|
|
|||
|
\item \textbf{-W}: (timeout), time waiting for a response from the server, if the server
|
|||
|
dosen't reply in the time set, the ping command will stop.
|
|||
|
|
|||
|
\end{itemize}
|
|||
|
|
|||
|
\section{shasum}
|
|||
|
|
|||
|
|
|||
|
\large Gianmarco De Vita \normalsize\\
|
|||
|
|
|||
|
|
|||
|
|
|||
|
With \texttt{shasum} command you can work with SHA Checksums.
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
shasum \[flag\] \[file\]
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Store the Checksum
|
|||
|
|
|||
|
You can store the output in a file by adding to the command line the string
|
|||
|
output symbol "\textgreater " and then the path and the name of the file.\\
|
|||
|
|
|||
|
Define the algorithm
|
|||
|
|
|||
|
The flag \texttt{-a} allows you to choose which algorithm to use when
|
|||
|
defining the checksum of a file. The default algorithm is 1.
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
shasum -a algorithm file
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Read in binary mode
|
|||
|
|
|||
|
The flag \texttt{-b} allows you to read files in binary mode.
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
shasum -b file.bin
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Check two SHA sums
|
|||
|
|
|||
|
You can verify wheter two checksums belong to the same file or not (and so
|
|||
|
define wheter the two files are the same thing) wit the flag \texttt{-c}.
|
|||
|
After storing the Checksums into two files (let say file1 and file2),
|
|||
|
you can write to command as follows:
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
shasum -c shaSum1 shaSum2
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Display help
|
|||
|
|
|||
|
Writing the command followed by the \texttt{-h} h flag will display a little
|
|||
|
help paragraph with the main functions of this command.
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
shasum -h
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
\section{basename}
|
|||
|
|
|||
|
|
|||
|
\large Fabiano Fenini \normalsize\\
|
|||
|
|
|||
|
|
|||
|
The \texttt{basename} command deletes any prefix ending with the last slash "/" character
|
|||
|
present in string and also a suffix.
|
|||
|
|
|||
|
Usage
|
|||
|
The default basename command syntax is:
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
basename \[flags\] \[string\] \[suffix\]
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Where \[flags\] are the cat flags, read below for more info, the string command is
|
|||
|
the pathname and the suffix, if indicated, will be also deleted.\\
|
|||
|
|
|||
|
Flags
|
|||
|
|
|||
|
Here are some of the most common basename flags:
|
|||
|
|
|||
|
\begin{itemize}
|
|||
|
\item \textbf{-a}: Every aregument is treated as a string
|
|||
|
\item \textbf{-s}: The suffix is taken as its argument
|
|||
|
\item \textbf{-a}: Supports multiple arguments and they will be treated as a name
|
|||
|
\end{itemize}
|
|||
|
|
|||
|
\section{base64}
|
|||
|
|
|||
|
|
|||
|
\large Gianmarco De Vita \normalsize\\
|
|||
|
|
|||
|
|
|||
|
|
|||
|
\emph{Base64} is an encoding system that allows the translation of binary
|
|||
|
data into ASCII text strings, basing upon 64 different ASCII characters.\\
|
|||
|
Each \emph{Base64} digit represents exactly 6 bits of data so, for example,
|
|||
|
six bytes (a total of 48 bits) can be represented by eight \emph{Base64} digits.
|
|||
|
|
|||
|
By writing the command \texttt{base64} you can encode and decode Base64 data.
|
|||
|
The command follows the structure:
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
base64 \[flag\] \[-i input item\] \[-o output item\]
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Defining input and output files
|
|||
|
In this case, flag such as \texttt{-i} and \texttt{-o} are fundamental
|
|||
|
to define respectevely from which file take the stream and into which to store
|
|||
|
the result. Naturally, the path and the name of the files must be specified.
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
base64 -i path/input.file -o path/output.file
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Insert line breaks
|
|||
|
Using the \texttt{-b} (which stands for \emph{break}) flag followed by a
|
|||
|
number, line breaks are added every specified "number" characters.
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
base64 -b number path/input.file path/output.file
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
By leaving the number field empty, an unbroken stream will be generated.<
|
|||
|
|
|||
|
Decode Base64
|
|||
|
Using the \texttt{-D} flag (which stands for decode), you obtain as
|
|||
|
output the input message decoded into binary data.
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
base64 -D \[-i input item\] \[-o output item\]
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Summarize the tools
|
|||
|
Using the \texttt{-h} (which stands for \emph{help}) a short paragraph
|
|||
|
in which are listed the flags with the respective paragraph will be displayed.
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
base64 -h
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
\section{chroot}
|
|||
|
|
|||
|
|
|||
|
\large Gianmarco De Vita \normalsize\\
|
|||
|
|
|||
|
|
|||
|
The \texttt{chroot} utility allows you to change its root directory to
|
|||
|
the one indicated in newroot and, if given, executes the command.\\
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
chroot newroot \[command\]
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
\section{watch}
|
|||
|
|
|||
|
|
|||
|
\large Claudio Maggioni \normalsize\\
|
|||
|
|
|||
|
|
|||
|
The \texttt{watch} command is a system utility able to execute a command
|
|||
|
every \emph{n} seconds by clearing the screen and displaying the
|
|||
|
output of the command each time the interval is over. This command is very
|
|||
|
simple to use and very effective: it can be used to check the size in bytes
|
|||
|
of a file while downloading it, or it can be used on \emph{Linux} to jiggle
|
|||
|
around the mouse every ~5 minutes with the command \texttt{xdotool} in
|
|||
|
order to keep the computer awake.
|
|||
|
|
|||
|
Usage
|
|||
|
|
|||
|
\texttt{watch} has a very simple syntax: the amount in seconds to wait
|
|||
|
between executions is specified in seconds using the \texttt{-n} flag
|
|||
|
and the default value is \emph{2}. Also, differences between older and
|
|||
|
newer outputs are highlighted if the \texttt{-d} flag is used.
|
|||
|
|
|||
|
Example: Watch the size of "ubuntu.iso" every 5 seconds
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
watch -n 5 du -h ubuntu.iso
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Example: Watch the contents of "site.html" every 2 seconds and highlight the
|
|||
|
differencies between iterations
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
watch -d cat site.html
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
\section{ifconfig}
|
|||
|
|
|||
|
|
|||
|
\large Matteo Omenetti \normalsize\\
|
|||
|
|
|||
|
|
|||
|
|
|||
|
The command \texttt{ifconfig} stands for \emph{Interface CONFIGuration}. It is used
|
|||
|
to configure, control, and query network interface parameters of your system.\\
|
|||
|
If you try running this command with no arguments, it will simply display information
|
|||
|
about all network interfaces currently active.\\
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
ifconfig
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
The output sill resembles something like this, of course it changes from machine
|
|||
|
to machine:
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
en5: flags=8863 UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST mtu 1500
|
|||
|
ether ac:de:48:00:11:22
|
|||
|
inet6 fe80::aede:48ff:fe00:1122\%en5 prefixlen 64 scopeid 0x8
|
|||
|
nd6 options=201 PERFORMNUD,DAD
|
|||
|
media: autoselect (100baseTX full-duplex)
|
|||
|
status: active
|
|||
|
|
|||
|
ap1: flags=8802 BROADCAST,SIMPLEX,MULTICAST mtu 1500
|
|||
|
ether f2:18:98:41:74:42
|
|||
|
media: autoselect
|
|||
|
status: inactive
|
|||
|
...
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
If you want to view the configuration of all network interfaces, not just the ones
|
|||
|
currently active, you can use flag \texttt{a}.
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
ifconfig -a
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
If you want to view the configuration of a specific interface, you can specify
|
|||
|
the name of the interface you want to view after the command \emph{ifconfig}:
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
ifconfig ap1
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
This command will show only the configuration of ap1.\\
|
|||
|
|
|||
|
To enable an interface, you can use the command ifconfig with the name of the interface
|
|||
|
you want to enable, followed by the key word \texttt{up}.\\
|
|||
|
|
|||
|
However, enabling or disabling a device, is a privilege reserved for the super user,
|
|||
|
therefore you also have to use the command \texttt{sudo}.
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
sudo ifconfig ap1 up
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
To disable an interface, you can follow the same procedure, this time using
|
|||
|
the key word \texttt{down}.
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
sudo ifconfig ap1 down
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
\section{tar}
|
|||
|
|
|||
|
|
|||
|
\large Nicola Brunner \normalsize\\
|
|||
|
|
|||
|
|
|||
|
|
|||
|
The \texttt{tar} command is used to create and manipulate streaming archive files, in
|
|||
|
other words it is used to compress and extract files and directories. He can
|
|||
|
extract from many file formats like: tar, pax, cpio, zio, jar, ar and ISO 9660
|
|||
|
cdrom images and create tar, pax, cpio, ar, and shar archives.\\
|
|||
|
|
|||
|
Usage:
|
|||
|
|
|||
|
There are different syntaxes for this command:
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
tar {-c} \[options\] \[files | directories\]
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
The first one is the default syntax. Where \texttt{{-c}} stays for the
|
|||
|
creation of a new archive, \texttt{\[options\]} for the different flags that
|
|||
|
we can use, \texttt{\[files | directories\]} for the files or directories
|
|||
|
what we want to compress.
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
tar {-r | -u} -f archive-file \[options\] \[files | directories\]
|
|||
|
tar {-t | -x} \[options\] \[patterns\]
|
|||
|
tar \[bundled-flags args\] \[file | pattern ...\]
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
The last one shows a bundled option word provided for compatibility with
|
|||
|
historical implementations.\\
|
|||
|
|
|||
|
Flags:
|
|||
|
|
|||
|
This command has a large number of options, but you just need to remember a
|
|||
|
few letters for the most important ones:
|
|||
|
|
|||
|
\begin{itemize}
|
|||
|
\item \texttt{-c} creates a new archive, that contains the specified items.
|
|||
|
\item \texttt{-r} is like \texttt{-c} but appends the new entries to the
|
|||
|
archive, requires the \texttt{-f} option.
|
|||
|
|
|||
|
\item \texttt{-u} is like \texttt{-r} but adds the new entries only if
|
|||
|
the date is newer than the corresponding entry date of the file/directory to
|
|||
|
the archive, requires the \texttt{-f} option.
|
|||
|
|
|||
|
\item \texttt{-t} lists the archive contents to the terminal output.
|
|||
|
\item \texttt{-v} is used to display the progress of an archive creation in
|
|||
|
the terminal.
|
|||
|
|
|||
|
\item \texttt{-f} allows to specify the name of an archive.
|
|||
|
\item \texttt{-x} is used to extract files from an archive to the disk.
|
|||
|
\item \texttt{--exclude} does not compress specified files or directories.
|
|||
|
\item \texttt{--include} compresses specified file or directories. It's
|
|||
|
important to know that \texttt{--exclude} take precedence over inclusions.
|
|||
|
The \texttt{--include} option is useful when you want to filter archives.
|
|||
|
|
|||
|
\end{itemize}
|
|||
|
|
|||
|
If you don't find here an option that you search, or you are interested to read
|
|||
|
more about this command, you can write in your terminal:
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
man tar
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Examples
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
tar -cvf archive.zip makesmaller.jpg
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
In this case, we take the file \texttt{makesmaller.jpg} and compress it
|
|||
|
to \texttt{archive.zip}. We use the options \texttt{-cvf}, \texttt{-c }
|
|||
|
for creating a new archive, \texttt{-v} for displaying the progress of the
|
|||
|
operation and \texttt{-f} for specifying the name of the archive.
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
tar -cvf archive.zip makesmaller.jpg alsome.txt
|
|||
|
\end{verbatim}
|
|||
|
It's the same case as before, but we wanted to add also \texttt{alsome.txt}
|
|||
|
to \texttt{archive.zip}.
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
tar -cvf archive.tar /home/Documents --exclude=/home/Documents/PrivatePictures --exclude=/home/Documents/notme.txt
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
With this command we can create an archive named \texttt{archive.tar} of
|
|||
|
the \texttt{/home/Documents directory}, but we won't include the
|
|||
|
\texttt{PrivatePictures} directory and the file \texttt{notme.txt},
|
|||
|
both are contained in \texttt{/home/Documents}.
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
tar -cvf archive.tar /home/Music --exclude=*.mp4
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
In this special case we exclude from the \texttt{archive.tar}all the
|
|||
|
files which ends in .mp4 and are contained in the directory \texttt{/home/Music}.
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
tar -cvf archive.zip /home/Music --include=*.mp3
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
In this case we include only the files from the directory \texttt{/home/Music}
|
|||
|
that ends in .mp3 to the \texttt{archive.zip}.
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
tar -xvf archive.zip
|
|||
|
\end{verbatim}
|
|||
|
It's the same as the archive creation command we used above in the first
|
|||
|
example, except the \texttt{-x} option replaces the \texttt{-c} option.
|
|||
|
This specifies you want to extract an archive instead of creating one.
|
|||
|
|
|||
|
\section{strings}
|
|||
|
|
|||
|
|
|||
|
\large Marco Farace \normalsize\\
|
|||
|
|
|||
|
|
|||
|
|
|||
|
The strings command returns each string of printable characters (ASCII)
|
|||
|
in files. Its main uses are to determine the contents of and to extract text
|
|||
|
from binary files (i.e., non-text files). From the Shell manual: "find the
|
|||
|
printable strings in a object, or other binary, file".\\
|
|||
|
|
|||
|
Strings can be used to extract character information and string of a given lenght
|
|||
|
from text file(s). When used without any options, strings displays all strings
|
|||
|
that are at least four characters in length in the files whose names are
|
|||
|
supplied as arguments (i.e., input data). Strings that are on separate lines
|
|||
|
in the input files are shown on separate lines on the screen, and an attempt
|
|||
|
is made to display all strings found on a single line in a file on a single
|
|||
|
line on the screen (although there may be a carryover to subsequent lines in
|
|||
|
the event that numerous strings are found on a single line). strings looks in
|
|||
|
all sections of the object files except the (\_\_TEXT,\_\_text) section.\\
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
strings \[options\] file\_name(s)
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Flags
|
|||
|
\begin{itemize}
|
|||
|
\item -n: Specify the minimum string length, where the number argument is
|
|||
|
a positive decimal integer. The default is 4.
|
|||
|
\item -: This option causes strings to look for strings in all bytes of
|
|||
|
the files (the default for non-object files).
|
|||
|
\item --: This option causes strings to treat all the following arguments
|
|||
|
as files.
|
|||
|
\item -a: This option causes strings to look for strings in all sections
|
|||
|
of the object file (including the (\_\_TEXT,\_\_text) section.
|
|||
|
\end{itemize}
|
|||
|
|
|||
|
\section{scp}
|
|||
|
|
|||
|
|
|||
|
\large Announ Marwan \normalsize\\
|
|||
|
|
|||
|
|
|||
|
|
|||
|
The \texttt{scp} command name stands for \emph{Secure CoPy}.\\
|
|||
|
As the name suggests it's similar to the \texttt{cp} command,
|
|||
|
with the main difference being that while \texttt{cp} is used to move files
|
|||
|
in a local machine, \texttt{scp} will also operate on the remote systems.\\
|
|||
|
|
|||
|
The syntax is similar to the one of the \texttt{cp} command.
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
scp ~/Documents/list.txt protocol://user@myhost.com:/home/user/Documents/list.txt
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Keep in mind that \texttt{protocol://user@myhost.com} should be changed accordingly to
|
|||
|
your use case and may require authentication on the remote server.\\
|
|||
|
It's also possible to download files in a similar way.
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
scp protocol://user@myhost.com:/home/user/Documents/list.txt ~/Downloads/list.txt
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
And it can also operate on the remote host only:
|
|||
|
\begin{verbatim}
|
|||
|
scp protocol://user@myhost.com:/home/user/Documents/list.txt protocol://user@myhost.com:/home/user/Download/shopping.txt
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
|
|||
|
Flags
|
|||
|
\begin{itemize}
|
|||
|
\item -1 to use scp with protocol 1
|
|||
|
\item -2 to use scp with protocol 2
|
|||
|
\item -3 to copy between 2 remote passing through local(like example above)
|
|||
|
\item -4 to use scp with IPv4 addresses
|
|||
|
\item -6 o use scp with Ipv6 addresses
|
|||
|
\item -C to enable compression of the encrypted connection
|
|||
|
\item -c to encrypt data transfer (\emph{C} and \emph{c} are \underline{not} the same flag)
|
|||
|
\end{itemize}
|
|||
|
|
|||
|
\section{pass}
|
|||
|
|
|||
|
|
|||
|
\large Claudio Maggioni \normalsize\\
|
|||
|
|
|||
|
|
|||
|
The \texttt{pass} command, also known as \emph{Password Store}, is an
|
|||
|
entirely offline password manager that uses \emph{GPG} for encryption with
|
|||
|
the ability to sync the (entirely encrypted) passwords using \texttt{git}.
|
|||
|
\texttt{pass} works on \emph{MacOS} (avaliable via
|
|||
|
\underline{\href{https://brew.sh}{Homebrew}}), \emph{Linux} and on
|
|||
|
\emph{Android} (with a GUI app). Think of it as an entirely FLOSS
|
|||
|
alternative to services like \emph{Keypass} or \emph{Dashlane}.\\
|
|||
|
|
|||
|
Excluding the initial setup (that requires the creation of a \emph{GPG key}),
|
|||
|
\texttt{pass} is very easy and straightforward to use: instead of
|
|||
|
printing passwords to \emph{stdout}, \texttt{pass} copies them in the
|
|||
|
system clipboard, erasing them after a certain number of seconds (usually
|
|||
|
\emph{45}).\\
|
|||
|
|
|||
|
\texttt{pass} has many unofficial GUI clients and migration scripts from
|
|||
|
other password managers. For more information, check out
|
|||
|
<a href=https://www.passwordstore.org/\#other">the official website.
|
|||
|
|
|||
|
|
|||
|
Setup
|
|||
|
|
|||
|
|
|||
|
|
|||
|
An accurate walkthrough through the setup of \texttt{pass}, in addition
|
|||
|
to some other useful sets of commands (such as how to migrate the password
|
|||
|
repository to another computer) is provided
|
|||
|
in this <a href="https://gist.github.com/flbuddymooreiv/a4f24da7e0c3552942ff">
|
|||
|
GitHub Gist by <a href="https://github.com/flbuddymooreiv">
|
|||
|
\emph{flbuddymooreiv}.\\
|
|||
|
|
|||
|
For more detailed explainations on the setup process or on any commands
|
|||
|
please check out the online version of the
|
|||
|
\underline{\href{https://git.zx2c4.com/password-store/about/}{man page}}, which is
|
|||
|
surprisingly more readable that most of the man pages for other utilities.
|
|||
|
|
|||
|
|
|||
|
Usage
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Common \texttt{pass} commands are shown below. For more information refer
|
|||
|
to the documentation linked above.\\
|
|||
|
|
|||
|
Example: Initialize the password repository with a GPG key with id "0DEADBEEF"
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
pass init 0DEADBEEF
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Example: Insert a password for \emph{example.com} with username \emph{bob} in
|
|||
|
the password repository interactively
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
pass insert example.com/bob
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Please note that the password \emph{name} here follows the most common
|
|||
|
naming convention in \texttt{pass}, which is
|
|||
|
\texttt{{website}/{username}}. Passwords can be stored in
|
|||
|
hierarchical structures (i.e. in nested folders), but the naming is up to the
|
|||
|
user.\\
|
|||
|
|
|||
|
Example: Generate a password for \emph{zombo.com} of 16 characters and copy it in
|
|||
|
the clipboard
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
pass generate -c zombo.com/bob 16
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Example: Retrieve the password for \emph{google.com} and copy it in the system
|
|||
|
clipboard (\texttt{-c} flag)
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
pass -c google.com/bob@gmail.com
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Example: Edit the password for \emph{facebook.com} using the default editor
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
pass edit facebook.com/bob
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Edit: Convert the password repository to a git repository for synchronization
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
pass git init
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Every \texttt{git} command on the password repository must be given with
|
|||
|
the prefix \texttt{pass git} (e.g. \texttt{pass git push}). An
|
|||
|
automatic commit is performed whenever a password is created, edited or
|
|||
|
deleted.
|
|||
|
|
|||
|
\section{fg}
|
|||
|
|
|||
|
|
|||
|
\large Fabiano Fenini \normalsize\\
|
|||
|
|
|||
|
|
|||
|
The \texttt{fg} command allows us to continue a stopped operation by running it
|
|||
|
in foreground.\\
|
|||
|
|
|||
|
The command name stands for \emph{foreground}.\\
|
|||
|
|
|||
|
Usage
|
|||
|
|
|||
|
The default fg command syntax is:
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
fg \[\%job\_number\]
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
The parameter \[\%job\_id\] contains the job number you wish to run in foreground.
|
|||
|
If this is not indicated, the command will run the last stopped operation.\\
|
|||
|
|
|||
|
Stop a working job
|
|||
|
|
|||
|
To stop the execution of a command so that i can be later resumed with \texttt{fg}
|
|||
|
you need to press the \texttt{ctrl + Z} keys. The job number to be used with the
|
|||
|
\texttt{fg} command will be printed.
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
top
|
|||
|
\^Z
|
|||
|
\[1\] + NNNN suspended top
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
\section{apropos}
|
|||
|
|
|||
|
|
|||
|
\large Joy Albertini \normalsize\\
|
|||
|
|
|||
|
|
|||
|
|
|||
|
The \texttt{apropos} command is used to search command in the shell with a keyword,
|
|||
|
it will output all command related to the keyword \\
|
|||
|
|
|||
|
Example with the command \texttt{apropos archive}, the shell will output tar, zip ecc...\\
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
apropos \[flags\] keyword
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Flags
|
|||
|
|
|||
|
\begin{itemize}
|
|||
|
\item \texttt{-V} (version) print version of the comnmand\\
|
|||
|
\item \texttt{-h} Help message how to use apropos
|
|||
|
\end{itemize}
|
|||
|
|
|||
|
\section{passwd}
|
|||
|
|
|||
|
|
|||
|
\large Fabiano Fenini \normalsize\\
|
|||
|
|
|||
|
|
|||
|
The \texttt{passwd} command allows us to change or to assign a password of authentication
|
|||
|
of an user currently in the system.\\
|
|||
|
When the user doesn’t have particular privileges, he is only able to change is password,
|
|||
|
while the root user has the possibility to change also other users’ passwords.\\
|
|||
|
The command name stands for \emph{password}.\\
|
|||
|
|
|||
|
Usage
|
|||
|
|
|||
|
The default passwd command syntax is:
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
passwd \[flags\] \[user\]
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Where \[flags\] are the passwd flags, read below for more info, the parameter \[user\] can only be
|
|||
|
specified by the root user. If no user is provided, passwd proceed to set the password of the
|
|||
|
user who uses this command. You will first be asked to enter the current user password.\\
|
|||
|
|
|||
|
Flags
|
|||
|
|
|||
|
Here are some of the most common passwd flags:
|
|||
|
|
|||
|
\begin{itemize}
|
|||
|
\item \textbf{-d}: Delete the user password
|
|||
|
\item \textbf{-h}: Get information about how to use this command
|
|||
|
\item \textbf{-l}: Lock the password
|
|||
|
\item \textbf{-u}: Unlock the password
|
|||
|
\item \textbf{-S}: See the account status information
|
|||
|
\end{itemize}
|
|||
|
|
|||
|
\section{sync}
|
|||
|
|
|||
|
|
|||
|
\large Gianmarco De Vita \normalsize\\
|
|||
|
|
|||
|
|
|||
|
|
|||
|
The \texttt{sync} utility force the completion of pending disk writes.
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
sync
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
This command can be used to verify that there are no pending disk writes,
|
|||
|
so that all the operations are completed, before the processor is stopped by other
|
|||
|
commands.
|
|||
|
|
|||
|
\section{mount}
|
|||
|
|
|||
|
|
|||
|
\large Marco Farace \normalsize\\
|
|||
|
|
|||
|
|
|||
|
To access a file on a Unix-like machine, the file system that contains it
|
|||
|
needs to be mounted with the \texttt{mount} command. Mount is frequently used for
|
|||
|
movable storage devices such as SD cards, DVDs, etc...\\
|
|||
|
|
|||
|
The mount command instructs the operating system that a file system is ready to
|
|||
|
use, and associates it with a particular point in the overall file system
|
|||
|
hierarchy (its mount point) and sets options relating to its access. Mounting
|
|||
|
makes file systems, files, directories, devices and special files available for
|
|||
|
use and available to the user.\\
|
|||
|
|
|||
|
Its counterpart, umount, does exactly the opposite.\\
|
|||
|
Both mount and umount require root user persmissions.\\
|
|||
|
To display all mounted partitions just write \texttt{mount}.\\
|
|||
|
|
|||
|
This command will mount the second partition of a HDD:\\
|
|||
|
\begin{verbatim}
|
|||
|
mount /dev/hda2 /media/PHOTOS
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
and will unmount (by referring to the physical disk partition):\\
|
|||
|
\begin{verbatim}
|
|||
|
umount /dev/hda2
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
or (by referring to the mount point):\\
|
|||
|
\begin{verbatim}
|
|||
|
umount /media/PHOTOS
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Flags
|
|||
|
\begin{itemize}
|
|||
|
\item -d: Causes everything to be done except for the actual system call.
|
|||
|
This option is useful in conjunction with the -v flag to determine
|
|||
|
what the mount command is trying to do.
|
|||
|
\item -v: Verbose mode. (Gives additional detail during the mount process)
|
|||
|
\item -f: Forces the revocation of write access when trying to downgrade a
|
|||
|
filesystem mount status from read-write to read-only.
|
|||
|
\item -u: The -u flag indicates that the status of an already mounted file
|
|||
|
system should be changed. Any of the options discussed above
|
|||
|
(the -o option) may be changed; also a file system can be changed
|
|||
|
from read-only to read-write or vice versa. An attempt to change
|
|||
|
from read-write to read-only will fail if any files on the
|
|||
|
filesystem are currently open for writing unless the -f flag is
|
|||
|
also specified.
|
|||
|
\item -w: Mount the file system read-write.
|
|||
|
\item -o: Options are specified with a -o flag followed by a comma separated
|
|||
|
string of options. The following options are available:
|
|||
|
\begin{itemize}
|
|||
|
\item noexec: Do not allow execution of any binaries on the mounted file system.
|
|||
|
This option is useful for a server that has file systems containing
|
|||
|
binaries for architectures other than its own.
|
|||
|
\item noowners: Ignore the ownership field for the entire volume. This causes all
|
|||
|
objects to appear as owned by user ID 99 and group ID 99. User ID 99
|
|||
|
is interpreted as the current effective user ID, while group ID 99 is
|
|||
|
used directly and translates to ``unknown''.
|
|||
|
\item nobrowse: This option indicates that the mount point should not be visible via
|
|||
|
the GUI (It will not appear on the Desktop as a separate volume).
|
|||
|
\end{itemize}
|
|||
|
|
|||
|
\end{itemize}
|
|||
|
|
|||
|
\section{tee}
|
|||
|
|
|||
|
|
|||
|
\large Nicola Brunner \normalsize\\
|
|||
|
|
|||
|
|
|||
|
|
|||
|
The \texttt{tee} command is used to split the output of a program, doing
|
|||
|
this the output can be displayed in the shell and in the same time written in a
|
|||
|
file. This is useful, for example, if we want to capture intermediate outputs of
|
|||
|
a long program.
|
|||
|
The command is named after the T-splitter used in plumbing, because they have
|
|||
|
similar functions.\\
|
|||
|
|
|||
|
Usage:
|
|||
|
The default tee command syntax is:
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
tee \[flags\] \[file\]
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Where \texttt{\[flags\]} are the tee flags (below you will find more info),
|
|||
|
and argument \texttt{\[file\]} is a file or a list of files, each of which
|
|||
|
receives the output.\\
|
|||
|
|
|||
|
Flags:
|
|||
|
|
|||
|
\begin{itemize}
|
|||
|
\item \texttt{-a} Appends the output to each file, rather than overwriting it.
|
|||
|
\item \texttt{-i} Ignores interrupt signals.
|
|||
|
\end{itemize}
|
|||
|
|
|||
|
Example:
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
date | tee example.txt
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
With this example, we can see that tee writes the date in
|
|||
|
\emph{example.txt}, but shows also the output (in this case the date) in the shell.
|
|||
|
If you would prefer to have content appended instead of overwritten on the file,
|
|||
|
should use \texttt{-a} flag on \texttt{tee}.
|
|||
|
|
|||
|
\section{cat}
|
|||
|
|
|||
|
|
|||
|
\large Fabiano Fenini \normalsize\\
|
|||
|
|
|||
|
|
|||
|
The \texttt{cat} command can be easily associated to the word “concatenation” but
|
|||
|
it doesn’t have that only function: in fact, cat command gives us the possibility to create
|
|||
|
files and also to display them.\\
|
|||
|
|
|||
|
The name stands for \emph{catenate}.\\
|
|||
|
|
|||
|
Usage
|
|||
|
|
|||
|
The default cat command syntax is:
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
cat \[flags\] \[--\] \[file1\] \[file2\] \[file...\]
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Where \[flags\] are the \texttt{cat} flags, read below for more info, \[--\] indacates that the
|
|||
|
following parameters won't be considered as flags, while the file parameters indicates
|
|||
|
the names of one or more files to concatenate.
|
|||
|
Between the names of two files is possible to use the shell redirection symbol "\textgreater ",
|
|||
|
in order to redirect the output to the file considered.\\
|
|||
|
|
|||
|
Flags
|
|||
|
Here are some of the most common cat flags:
|
|||
|
|
|||
|
\begin{itemize}
|
|||
|
\item \textbf{-n}: Display the line numbers of a file
|
|||
|
\item \textbf{-e}: Display "\$" at the end of the line and also where there is a gap between paragraphs
|
|||
|
\item \textbf{-T}: Display TAB characters
|
|||
|
\end{itemize}
|
|||
|
|
|||
|
\section{neofetch}
|
|||
|
|
|||
|
|
|||
|
\large Marco Farace \normalsize\\
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Neofetch is a fast, higly customizable system info script. a CLI system
|
|||
|
information tool written in BASH. Neofetch displays information about your
|
|||
|
system next to an image, your OS logo, or any ASCII file of your choice.
|
|||
|
|
|||
|
Flags
|
|||
|
\begin{itemize}
|
|||
|
\item --disable \[infoname\]: Allows you to disable an info line from appearing
|
|||
|
in the output. infoname' is the function name from the 'print\_info()'
|
|||
|
functioninside the config file.For example: 'info "Memory" memory'
|
|||
|
would be '--disable memory'.
|
|||
|
|
|||
|
\item --colors \[x x x x x x\]: Changes the text colors in this order:
|
|||
|
\texttt{title, @, underline, sub-title, colon, info}
|
|||
|
|
|||
|
\item --underline \[on/off\]: Enable/Disable the underline.
|
|||
|
\item --bold \[on/off\]: Enable/Disable bold text
|
|||
|
\item --backend \[backend\]: Which image backend to use. Possible values:
|
|||
|
\texttt{'ascii', 'caca', 'jp2a', 'iterm2', 'off', 'sixel', 'tycat', 'w3m'}
|
|||
|
|
|||
|
\item --source \[source\]: Which image or ascii file to use. Possible values:
|
|||
|
\texttt{'auto', 'ascii', 'wallpaper', '/path/to/img', '/path/to/ascii',
|
|||
|
'/path/to/dir/'}
|
|||
|
|
|||
|
\item --ascii \[source\]: Shortcut to use 'ascii' backend.
|
|||
|
\end{itemize}
|
|||
|
|
|||
|
\section{kill}
|
|||
|
|
|||
|
|
|||
|
\large Announ Marwan \normalsize\\
|
|||
|
|
|||
|
|
|||
|
The \texttt{kill} command is used for terminating the
|
|||
|
running processes on your system.\\
|
|||
|
|
|||
|
In fact, using this commands you can easily kill all the processes that you want.
|
|||
|
Sometimes happens that you couldn't control an application, for example when
|
|||
|
you want to exit from your browser when it seems freezing.
|
|||
|
You have to know that "kill commands" can help you in do this.\\
|
|||
|
|
|||
|
killall
|
|||
|
|
|||
|
Will terminate all programs that match the name specified without
|
|||
|
additional arguments.
|
|||
|
You have to know also that "killall" sends SIGTERM, or signal number 15.
|
|||
|
If you want to specify a different signal you can use "-s".
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
killall -s 9 \[process name\]
|
|||
|
killall -KILL \[process name\]
|
|||
|
killall -9 \[process name\]
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
kill
|
|||
|
|
|||
|
Will terminate only one program.
|
|||
|
Without Without options, kill sends SIGTERM to the PID specified and asks the application
|
|||
|
or service to shut itself down.
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
kill \[PID\]
|
|||
|
kill -s KILL \[PID\]
|
|||
|
kill -KILL \[PID\]
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
\section{curl}
|
|||
|
|
|||
|
|
|||
|
\large Claudio Maggioni \normalsize\\
|
|||
|
|
|||
|
|
|||
|
The \texttt{curl} command is a fast and versatile shell program that can
|
|||
|
request online content using various protocols, including \emph{HTTP},
|
|||
|
\emph{FTP} and \emph{POP3}. Some example use cases for this utility are
|
|||
|
the need to automate some remote call to a server, testing \emph{REST} or
|
|||
|
\emph{SOAP} apis or simply download or display the \emph{HTML} code of a
|
|||
|
website.
|
|||
|
|
|||
|
The name, as mentioned in the <a href="https://ec.haxx.se/curl-name.html">
|
|||
|
\emph{Evertything curl} online book, stands for \emph{"client URL"}
|
|||
|
and the right pronunciation rhymes with "earl" or "girl". By this fact, the
|
|||
|
reader is able to tell the author of this page to stop pronuncing it as
|
|||
|
\emph{"cooorl"}, like if the name is some sort of word in the
|
|||
|
<a href="https://en.wikipedia.org/wiki/Bergamasque\_dialect">\emph{Bergamasque
|
|||
|
dialect}.
|
|||
|
|
|||
|
Usage
|
|||
|
|
|||
|
\texttt{curl} is a very complex command: if you want to learn it deeply,
|
|||
|
please refer to the previously mentioned guide called
|
|||
|
\underline{\href{https://ec.haxx.se/}{\emph{Evertything curl}}}. Some basic
|
|||
|
ways to use this command are shown below:
|
|||
|
|
|||
|
Example: Download the contents of the page "example.com" to "file.html"
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
curl example.com -o file.html
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Example: Download the contents of the page "en.wikipedia.org/wiki/Curl" to
|
|||
|
a file with the same name as the last element in the path (here "Curl")
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
curl -O en.wikipedia.org/wiki/Curl
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Example: Download the contents of the page "example.com" to "file.html"
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
curl example.com -o file.html
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Example: Download the contents of the page "example.com" following location
|
|||
|
redirects (\texttt{-L} flag)
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
curl -O -L example.com
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Example: Download the contents of the page "example.com" resuming a previous attempt
|
|||
|
(\texttt{-C} flag)
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
curl -O -C example.com
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
|
|||
|
Example: Do an HTTP DELETE request to "example.com" with a custom header
|
|||
|
(\texttt{-H} and \texttt{-X} flags)
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
curl -H 'User-Agent: Tamagotchi' -X DELETE example.com
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Example: Print to \emph{stdout} "example.com" making a request with HTTP basic
|
|||
|
authentication (\texttt{-u} flag)
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
curl -u bob:P@ssw0rd example.com
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
\section{ps}
|
|||
|
|
|||
|
|
|||
|
\large Andrea Brites Marto \normalsize\\
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
The \emph{ps} command stands for "process status" and it is used to provide
|
|||
|
various information about the currently running processes.\\
|
|||
|
|
|||
|
Every process is an executing instance of a program which is assigned a unique PID
|
|||
|
(process identification numbers) by the system.
|
|||
|
|
|||
|
The basic syntax of \emph{ps} is:
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
ps \[options\]
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
This command can be used without any option and by doing this you will get the standard output,
|
|||
|
which is the display monitor by default with four items of information for at least two
|
|||
|
processes currently on the system: the shell and ps.\\
|
|||
|
|
|||
|
Since we have already saw PID before, the TTY information that stands for terminal type
|
|||
|
(originally teletype) is the console (or terminal) in which the user logged into.\\
|
|||
|
|
|||
|
TIME is very simple: is the amount of CPU time in minutes and seconds that the process
|
|||
|
has been running. CMD is simply the name of the command that launched the process.\\
|
|||
|
|
|||
|
Here you will find some common option combinations
|
|||
|
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
ps aux | less
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
\begin{itemize}
|
|||
|
\item The -a option is used to list the processes of all users on the system.
|
|||
|
\item The -u option tells ps to provide detailed information about each process.
|
|||
|
\item The -x option adds to the list, processes that have no controlling terminal
|
|||
|
(programs launched during booting).
|
|||
|
|
|||
|
\end{itemize}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
This can be piped to the less command (see our section pipe), which let us to
|
|||
|
view all processes in one screenfull at a time.\\
|
|||
|
|
|||
|
Another way to view all processes running on the system is:
|
|||
|
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
ps ef | less
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Where:
|
|||
|
|
|||
|
\begin{itemize}
|
|||
|
\item The -e option is used to generate a list of information about every process
|
|||
|
(currently running).
|
|||
|
|
|||
|
\item The -f option provides a list that contains some information for each process.
|
|||
|
\end{itemize}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
This is very useful, it can be used for example to control UID information (username of
|
|||
|
the account that owns the process) and STIME to know when the process started, or
|
|||
|
the starting date.\\
|
|||
|
|
|||
|
|
|||
|
In the end the \emph{ps} is very powerful if we know how to use it.
|
|||
|
If you need to kill a process you can list all process in various ways
|
|||
|
and search for the process you need to kill by reading its PID or by UID for example.
|
|||
|
|
|||
|
|
|||
|
\section{ssh}
|
|||
|
|
|||
|
|
|||
|
\large Announ Marwan \normalsize\\
|
|||
|
|
|||
|
|
|||
|
|
|||
|
The \texttt{ssh} command is used to operate with a remote machine using
|
|||
|
the \emph{ssh} protocol. It's commonly used for logging into a remote
|
|||
|
machine and execute commands from a terminal interface.
|
|||
|
|
|||
|
|
|||
|
Log into a server
|
|||
|
|
|||
|
To log in a remote server you need an user account which is
|
|||
|
usually created by the server admin and a password.
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
localhost:\[~\]\textgreater ssh username@remote-server
|
|||
|
remote-server:\[~\]\textgreater
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Once you're logged in, the local machine shell will be
|
|||
|
\emph{replaced} by the remote server's one.\\
|
|||
|
|
|||
|
Log out of a server
|
|||
|
|
|||
|
\begin{itemize}
|
|||
|
\item Press \texttt{⌘ + D}
|
|||
|
\item Run the command \texttt{logout}
|
|||
|
\item Run the command \texttt{exit}
|
|||
|
\end{itemize}
|
|||
|
|
|||
|
Run a command on a remote machine
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
localhost:\[~\]:\textgreater ssh user@remote-host "ls test"
|
|||
|
online-backup.dat
|
|||
|
online-storage
|
|||
|
unix-dedicated-server.txt
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
|
|||
|
Debug the client
|
|||
|
|
|||
|
Debugging the ssh client can be useful to resolve connection errors.
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
localhost:\[~\]:\textgreater ssh -v user@remote-host
|
|||
|
OpenSSH\_4.3p2, OpenSSL 0.9.8e-fips-rhel5 01 Jul 2008
|
|||
|
debug1: Reading configuration data /etc/ssh/ssh\_config
|
|||
|
debug1: Applying options for *
|
|||
|
debug1: Connecting to remote-host \[172.22.200.140\] port 22.
|
|||
|
debug1: Connection established.
|
|||
|
debug1: identity file /home/user/.ssh/identity type -1
|
|||
|
debug1: identity file /home/user/.ssh/id\_rsa type -1
|
|||
|
debug1: identity file /home/user/.ssh/id\_dsa type 2
|
|||
|
debug1: loaded 3 keys
|
|||
|
...
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
\section{who}
|
|||
|
|
|||
|
|
|||
|
\large Marco Farace \normalsize\\
|
|||
|
|
|||
|
|
|||
|
The \texttt{who} command displays a list of all logged in users/display info
|
|||
|
about current user
|
|||
|
|
|||
|
The who utility displays a list of all users currently logged on, showing
|
|||
|
for each user the login name, tty name, the date and time of login, and
|
|||
|
hostname if not local.\\
|
|||
|
|
|||
|
Flags
|
|||
|
Here are just some of the most useful options for this command:
|
|||
|
|
|||
|
\begin{itemize}
|
|||
|
\item -b: Display time of last system boot.
|
|||
|
\item -d: Print dead processes.
|
|||
|
\item -H: Write column headings above the regular output.
|
|||
|
\item -m: Only print information about the current terminal.
|
|||
|
\item -q: \emph{Quick mode}: List only the names and the number of users currently logged on.
|
|||
|
When this option is used, all other options are
|
|||
|
ignored.
|
|||
|
|
|||
|
\item -s: List only the name, line and time fields. This is the default.
|
|||
|
\item -T: Print a character after the user name indicating the state of the
|
|||
|
terminal line: "+" if the terminal is writable; "-" if it is not;
|
|||
|
and "?" if a bad line is encountered.
|
|||
|
|
|||
|
\item -u: Print the idle time for each user, and the associated process ID.
|
|||
|
\item am I: Returns the invoker's real user name. You can also use \texttt{whoami}
|
|||
|
\item file: By default, who gathers information from the file /var/run/utmpx.
|
|||
|
An alternative file may be specified.
|
|||
|
|
|||
|
\end{itemize}
|
|||
|
|
|||
|
\section{Open the Shell}
|
|||
|
|
|||
|
|
|||
|
\large Gianmarco De Vita \normalsize\\
|
|||
|
|
|||
|
|
|||
|
|
|||
|
The tool that allows us to interact with the system with the shell is the terminal.
|
|||
|
There are mainly two ways to access to the terminal on a MacOS system.
|
|||
|
|
|||
|
Through the Finder
|
|||
|
|
|||
|
\begin{itemize}
|
|||
|
\item Open a new \emph{Finder} window by clicking on the icon on the system dock.
|
|||
|
|
|||
|
\item On the menu bar, click on \emph{Go}.
|
|||
|
|
|||
|
\item Click on \emph{Utilities}.
|
|||
|
|
|||
|
\item Look for \emph{Terminal} and click on it.
|
|||
|
|
|||
|
\end{itemize}
|
|||
|
|
|||
|
Through \emph{Spotlight}
|
|||
|
\begin{itemize}
|
|||
|
\item You can use the shortcut \texttt{cmd+space} to access to \emph{Spotlight}.
|
|||
|
|
|||
|
\item Then search for \emph{Terminal}.
|
|||
|
|
|||
|
\item Click on the \emph{Terminal} icon displayed as result.
|
|||
|
|
|||
|
\end{itemize}
|
|||
|
|
|||
|
As you open the Terminal, a new blank window opens:
|
|||
|
|
|||
|
|
|||
|
|
|||
|
You can notice that the top lines in the window follow this structure:
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
Last login: Day Month hh:mm:ss on console
|
|||
|
Device-name:~ username\$
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
The tilde (~) just before your username means that the current position in
|
|||
|
which the terminal is working is the Home directory. The gray spot next to
|
|||
|
the symbol \$ after your username indicates that you can write instructions
|
|||
|
in that space.\\
|
|||
|
|
|||
|
Now, you are ready to try and use some simple commands
|
|||
|
to familiarize with this interface.\\
|
|||
|
|
|||
|
Note that you can work simultaneously on multiple sessions of the Terminal.
|
|||
|
|
|||
|
\section{chown}
|
|||
|
|
|||
|
|
|||
|
\large Joy Albertini \normalsize\\
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
The \texttt{chown}
|
|||
|
If you want to change the user ID of a specific file, you can use chown. \\
|
|||
|
Device-name:Current-position username\$ chown owner\[:group\] file \\
|
|||
|
Example chown Joy:student alice.txt add Joy to the group student \\
|
|||
|
Use chgrp \[:group\] file to create a group for a file \\
|
|||
|
Use Sudo chown owner\[:group\], if you need root permission for add the user to the group
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
chown user \[group\] file1 file2 ...
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
\begin{itemize}
|
|||
|
\item \textbf{-f} Don't show all error messages except usage messages.
|
|||
|
\item \textbf{-h} Changes the symbolic link and not the file or directory referred
|
|||
|
by the symbolic link.
|
|||
|
|
|||
|
\item \textbf{-R} changing the ownership for each file in a folder, if it encounters
|
|||
|
a symbolic link it will cheange the owenership of that symbolic link,
|
|||
|
and the directoryfile referred in the symbolic link, but the directory is not
|
|||
|
further transversed.
|
|||
|
|
|||
|
\item \textbf{-RH} changing the ownership for each file in a folder, if encounter symbolic link
|
|||
|
it will change the owenership of that symbolic link,
|
|||
|
the directory/file referred in the symbolic link, and all the
|
|||
|
directory is further transversed.
|
|||
|
|
|||
|
\item \textbf{-RL} If the -R option is specified and a symbolic link referencing a file of type directory
|
|||
|
is specified on the command line or encountered during the traversal of a file hierarchy,
|
|||
|
the chown command shall change the user ID (and group ID, if specified) of the directory
|
|||
|
referenced by the symbolic link and all files in the file hierarchy below it.
|
|||
|
|
|||
|
\item \textbf{-RP} changing the ownership for each file in a folder, if encounter symbolic
|
|||
|
link it will cheange the owenership of that symbolic link, but will not chenage the
|
|||
|
the directory/file referred in the symbolic link, and the directory is not
|
|||
|
further transversed.
|
|||
|
|
|||
|
\end{itemize}
|
|||
|
|
|||
|
\section{info}
|
|||
|
|
|||
|
|
|||
|
\large Gianmarco De Vita \normalsize\\
|
|||
|
|
|||
|
|
|||
|
An \emph{.info} file is an information document created by Texinfo.\\
|
|||
|
It stores documentation in a book format with chapters, sections,
|
|||
|
and subsections and can contain up to four layers of depth.\\
|
|||
|
Info documents are used for storing software help manuals and technical books.\\
|
|||
|
The \texttt{info} command allows you to read that kind of files
|
|||
|
and to search for particular information by using special flags.
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
info \[flag\] \[item\]
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Look up for a specific string
|
|||
|
|
|||
|
Using the \texttt{--apropos} flag followed by a string, you obtain as
|
|||
|
output a list of all the contents which correspond to the string you wrote.
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
info --apropos string
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
If the string you inserted has nothing to do with the content of the info files,
|
|||
|
you will get a error message. For example:
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
info --apropos duck
|
|||
|
info: No available info files have `duck' in their indices.
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
An help with this command
|
|||
|
Using the \texttt{-h} flag (which stands for help), you obtain as
|
|||
|
output a brief paragraph in which are explained the features of this command.\\
|
|||
|
|
|||
|
Visit a specific \emph{.info} file
|
|||
|
|
|||
|
Using the \texttt{-f} flag followed by the path and a \emph{.info} file, you
|
|||
|
as output obtain the content of that file.
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
info -f path/filename.info
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
\section{whatis}
|
|||
|
|
|||
|
|
|||
|
\large Marzio Lunghi \normalsize\\
|
|||
|
|
|||
|
|
|||
|
|
|||
|
The \texttt{whatis} command gives you a brief description of a command.
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
whatis command
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
It's similar to \texttt{man -f command}
|
|||
|
|
|||
|
\section{Closing the shell}
|
|||
|
|
|||
|
|
|||
|
\large Marzio Lunghi \normalsize\\
|
|||
|
|
|||
|
|
|||
|
If you want to close the shell session, there are several ways to do so:
|
|||
|
|
|||
|
\begin{itemize}
|
|||
|
\item Press \texttt{\^ (control) + D}. Although this key combination closes the shell,
|
|||
|
it doesn't quit the terminal application as it just saves and closes the current session.
|
|||
|
A closed session does not allow any input or output anymore.
|
|||
|
|
|||
|
\item Insert the \texttt{exit} command. Unlike the mentioned key combo, exit also quits
|
|||
|
the terminal application itself.
|
|||
|
|
|||
|
\end{itemize}
|
|||
|
|
|||
|
\section{man}
|
|||
|
|
|||
|
|
|||
|
\large Gianmarco De Vita \normalsize\\
|
|||
|
|
|||
|
|
|||
|
The \texttt{man} tool allows you to explore the various utilities
|
|||
|
of the Shell. To search for more information about a command, just write
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
man command-name
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
As result, a new session will be opened with information about the command
|
|||
|
you have typed (and more specifically about its functions and flags).\\
|
|||
|
|
|||
|
Using some flags, you can obtain with this command the same results you get
|
|||
|
when you use other commands.\\
|
|||
|
|
|||
|
Flags
|
|||
|
|
|||
|
\begin{itemize}
|
|||
|
\item \textbf{-k}: returns the equivalent of \texttt{apropos}
|
|||
|
\item \textbf{-f}: returns the equivalent of \texttt{whatis}
|
|||
|
\end{itemize}
|
|||
|
|
|||
|
\section{mv}
|
|||
|
|
|||
|
|
|||
|
\large Joy Albertini \normalsize\\
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
The \texttt{mv} move a file from a directory to another:
|
|||
|
Device-name:Current-position username\$ mv path/name-file path2
|
|||
|
You can verify the success of the operation by using the command ls with argument the path. \\
|
|||
|
With mv you can rename a file: Device-name:Current-position username\$ mv path/name-file mv path/newname-file
|
|||
|
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
mv /home/user/desktop/file.txt /home/user/desktop/subfolder1/
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
\begin{itemize}
|
|||
|
\item \texttt{-i} Prompt(request confirm) before overwriting the file (Overrides previous -f or -n options, and override file permission) \\
|
|||
|
Example: mv -i name1.txt name2.txt, shell will ask overwrite 'name2.txt'? respond with Y(yes) or N(no)
|
|||
|
\item \texttt{-n} Don't permit to overwrite existing file \\
|
|||
|
Example: desktop as working directory there is a file called name2.txt, mv -n name5.txt name2.tx, with the flag -n you can't overwrite the file.
|
|||
|
\item \texttt{-v} (verbose) will output information explaining what it's doing \\
|
|||
|
Example: mv-v name1.txt name2.txt, the shell will output the operation: 'name1.txt' -to 'name2.txt'.
|
|||
|
\item \texttt{-f} (Force) force overwriting without prompting (overrides previous -i or -n options).\\
|
|||
|
Example: desktop as working directory there is a file called name2.txt, mv-f name1.txt name2.txt will overwrite the file without prompting
|
|||
|
\end{itemize}
|
|||
|
|
|||
|
\section{ls}
|
|||
|
|
|||
|
|
|||
|
\large Alessandro Marinelli \normalsize\\
|
|||
|
|
|||
|
|
|||
|
The \texttt{ls} command is used to list a directory content or a file.\\
|
|||
|
The name stands for \emph{LiSt}.
|
|||
|
|
|||
|
The default ls command syntax is:
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
ls \[flags\] \[path\]
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Where \[flags\] are the ls flags, read below for more info,and \[path\] is the
|
|||
|
(optional) path (absolute or relative).If no path is provided the current
|
|||
|
directory is listed.\\
|
|||
|
|
|||
|
Usage
|
|||
|
|
|||
|
List the elements on the current working directory
|
|||
|
Let's see how to show a list containing the elements included in the
|
|||
|
current working directory
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
ls
|
|||
|
Other Multimedia my-cat.jpg
|
|||
|
Photos Videos
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
As you can see, typing \texttt{ls} in the Unix Shell, will give as output
|
|||
|
the list of elements contained in the current working directory.\\
|
|||
|
Elements listed can be files (look for exemple at the element\emph{my-cat.jpg}),
|
|||
|
such as other directories (look for example at the folder \emph{Photos}).\\
|
|||
|
|
|||
|
List the elements contained in a directory
|
|||
|
\begin{verbatim}
|
|||
|
ls Photos
|
|||
|
01.jpg 02.jpg
|
|||
|
03.jpg 04.jpg
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
As you can see, now the Unix Shell is showing us the elements contained
|
|||
|
in the folder \emph{Photos}.\\
|
|||
|
|
|||
|
Show hidden files
|
|||
|
You can include hidden files (those which name starts with ".") in
|
|||
|
the displayed list using the \texttt{-a} flag.
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
ls -a Photos
|
|||
|
. 01.png
|
|||
|
.. 02.png
|
|||
|
.DS\_Store 03.png
|
|||
|
.secret.png 04.jpg
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
As you can see, now the shell shows more files for the same directory.\\
|
|||
|
|
|||
|
Show list in long format
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
ls -l
|
|||
|
total 10816
|
|||
|
-rw-r--r--@ 1 YourName YourGroup 3143706 4 Ott 13:28 01.png
|
|||
|
-rw-r--r--@ 1 YourName YourGroup 2269193 28 Ott 18:58 02.png
|
|||
|
-rw-r--r--@ 1 YourName YourGroup 37900 28 Ott 22:07 03.png
|
|||
|
-rw-r--r--@ 1 YourName YourGroup 75924 20 Ott 16:01 04.jpg
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
If the \texttt{-l} flag is given, the following information will be displayed for
|
|||
|
each file: file mode, number of links, owner name, group name, number of
|
|||
|
bytes in the file, abbreviated month, day-of-month file was last modified,
|
|||
|
hour file last modified, minute file last modified, and the path.
|
|||
|
|
|||
|
In addition, for each directory whose contents are displayed, the
|
|||
|
total number of 512-byte blocks used by the files in the directory is
|
|||
|
displayed on a line by itself, immediately before the information for the
|
|||
|
files in the directory.
|
|||
|
|
|||
|
\section{clear}
|
|||
|
|
|||
|
|
|||
|
\large Marzio Lunghi \normalsize\\
|
|||
|
|
|||
|
|
|||
|
If you want to clear the shell screen up to the start you have to digit
|
|||
|
the \texttt{clear} command:
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
clear
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
This command corresponds to the \texttt{ ⌘ + K } key combination on Mac OS
|
|||
|
|
|||
|
\section{MacOS terminal toolbar}
|
|||
|
|
|||
|
|
|||
|
\large Marzio Lunghi \normalsize\\
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Once the MacOS Terminal app has been opened, a menu bar will appear exactly in the upper
|
|||
|
left corner of the screen. This menu contains some preferences that could improve the user
|
|||
|
experience and use of the Terminal.\\
|
|||
|
The menu is divided into 6 sections that I will describe briefly to give you a basic knowledge
|
|||
|
that could be very useful once you have become familiar with the program.
|
|||
|
|
|||
|
Terminal
|
|||
|
|
|||
|
|
|||
|
|
|||
|
\begin{itemize}
|
|||
|
\item \textbf{Secure Keyboard Entry}:
|
|||
|
Inside the Terminal section you will find the item “secure Keyboard Entry”, this tool
|
|||
|
allows the user to enable an additional system security.\\
|
|||
|
Essentially, this option prevents other Application from seeing what you are
|
|||
|
typing on the shell.\\
|
|||
|
It also prevents processes that are working in background from
|
|||
|
monitoring your keystrokes.\\
|
|||
|
In a first moment it seems that it doesn’t do anything, that’s because for
|
|||
|
people who works on their own personal computer, this additional secure may
|
|||
|
become an unnecessary precaution.\\
|
|||
|
However, this option could be very useful if you using an unknown computer
|
|||
|
or a public computer.
|
|||
|
|
|||
|
\item \textbf{Hide terminal}:
|
|||
|
Although Shell’s window does not take a lot of space, it is possible to hide
|
|||
|
the window by pressing \texttt{⌘ + H}.
|
|||
|
|
|||
|
\item \textbf{Hide Others}:
|
|||
|
In the other hand, it’s possible to hide all the others windows (except the Terminal) by
|
|||
|
pressing \texttt{⌥ + ⌘ + H}.
|
|||
|
|
|||
|
\item \textbf{Quit Terminal}:
|
|||
|
Once you have finished working with the Terminal, you can definitely close it by
|
|||
|
pressing \texttt{⌘ + Q}.
|
|||
|
|
|||
|
\end{itemize}
|
|||
|
|
|||
|
Shell
|
|||
|
|
|||
|
|
|||
|
|
|||
|
\begin{itemize}
|
|||
|
\item \textbf{New Window}: It creates a new window.
|
|||
|
\item \textbf{New Tab}: It creates a new tab
|
|||
|
\item \textbf{Close window}: This option closes the window without quitting the terminal.
|
|||
|
\item \textbf{Show Inspector}:
|
|||
|
This option allows the user to customise the layout of the shell.
|
|||
|
This option contains some profiles that you can use instead of spending
|
|||
|
time to create your own one.\\
|
|||
|
This option is not permanent, once the terminal has been quitted, the shell is set
|
|||
|
with the default settings.
|
|||
|
|
|||
|
|
|||
|
\item \textbf{Edit Title}:
|
|||
|
This options shows the inspector too, but it selects the current title that
|
|||
|
you want to change
|
|||
|
|
|||
|
\item \textbf{Edit Background Colour}:
|
|||
|
This options shows some useful tools to customise the background of the shell.
|
|||
|
|
|||
|
\item \textbf{Reset}: This option re-initializes the terminal.
|
|||
|
\item \textbf{Hard Reset}: This option re-initialize completely the terminal.
|
|||
|
\item \textbf{Print Selection}:
|
|||
|
This option allows the user to print only a selection of the shell.
|
|||
|
The text must be selected by holding down the touchpad and then moving the mouse cursor.
|
|||
|
|
|||
|
\item \textbf{Print}: This options prints all the content of the shell.
|
|||
|
\end{itemize}
|
|||
|
|
|||
|
Edit
|
|||
|
|
|||
|
|
|||
|
|
|||
|
\begin{itemize}
|
|||
|
\item \textbf{Undo}: Undo the last input action.
|
|||
|
\item \textbf{Redo}: Redo the last undone input action.
|
|||
|
\item \textbf{Cut}:
|
|||
|
Traditionally, the cut command was designed to move texts within applications, but,
|
|||
|
according to the Mac user community, it’s not very intuitive.\\
|
|||
|
There is a much easier alternative way, the copy and paste,
|
|||
|
known as \texttt{⌘ + C} (copy) and \texttt{⌘ + V} (paste).
|
|||
|
\item \textbf{Copy}: Copy the selected text.
|
|||
|
\item \textbf{Copy Special}:
|
|||
|
It copy a selected text by giving you more options.
|
|||
|
For example, if you have a black background, copy special allows you to copy a
|
|||
|
selected file without considering the colour of the background
|
|||
|
|
|||
|
\item \textbf{Paste}: Past the text from the system clipboard.
|
|||
|
\item \textbf{Paste Escaped Text}:
|
|||
|
If you want to copy a text with special symbols, precisely code text,
|
|||
|
you have to use paste escaped text to maintain the text intact and not have characters
|
|||
|
interpreted as code.
|
|||
|
|
|||
|
\item \textbf{Select All}: It selects all the content of the shell.
|
|||
|
\item \textbf{Select Between Marks}: It selects a portion of the text between marks.
|
|||
|
\item \textbf{Clear to Previous Mark}: Delete the last command and its contents.
|
|||
|
\item \textbf{Clear to Start}: Delete all the content up to the start.
|
|||
|
\item \textbf{Clear Scrollback}: It deletes all the not visible content.
|
|||
|
\item \textbf{Clear Screen}: It deletes all the visible content on the screen.
|
|||
|
\item \textbf{Find}:
|
|||
|
It allows the user to find portions of text or words that matches with the inserted one.
|
|||
|
|
|||
|
\end{itemize}
|
|||
|
|
|||
|
View
|
|||
|
|
|||
|
|
|||
|
|
|||
|
\begin{itemize}
|
|||
|
\item \textbf{Show All Tabs}:
|
|||
|
It shows all tabs that you created, if no one has been created it will
|
|||
|
show only the current one.
|
|||
|
|
|||
|
\item \textbf{Show Tab Bar}:
|
|||
|
It shows you a tab bar with all the tabs created, this option is
|
|||
|
automatically enabled when you select “New Tab” under Shell section.
|
|||
|
|
|||
|
\item \textbf{Show Alternate Screen}: It creates an alternate screen.
|
|||
|
\item \textbf{Hide Alternate Screen}: Disable the option “Show Alternate Screen”.
|
|||
|
\item \textbf{Allow Mouse Reporting}:
|
|||
|
It means that mouse clicks will be visible to whatever is reading the terminal,
|
|||
|
the position and click will be encoded and used by Text mode mouse-aware
|
|||
|
applications with standards permissions
|
|||
|
|
|||
|
\item \textbf{Split Panel}: It split every window in two windows
|
|||
|
\item \textbf{Close Split panel}: It closes all the windows created with the "Split panel"
|
|||
|
\item \textbf{Default Font Size}:
|
|||
|
It set up default font size, if the size has been increased or decreased.
|
|||
|
|
|||
|
\item \textbf{Bigger}: It makes the font bigger.
|
|||
|
\item \textbf{Smaller}: It makes the font smaller.
|
|||
|
\item \textbf{Scroll to Top}: Scroll to the top, at the start.
|
|||
|
\item \textbf{Scroll to Bottom}: Scroll to the bottom, at the end.
|
|||
|
\item \textbf{Page Up}: It scroll up to the previous page.
|
|||
|
\item \textbf{Page Down}: It scroll down to the next page.
|
|||
|
\item \textbf{Line Up}: It scroll up to one line.
|
|||
|
\item \textbf{Line Down}: It scroll down to one line.
|
|||
|
\item \textbf{Enter Full Screen}: It makes the window fulls screen.
|
|||
|
\end{itemize}
|
|||
|
|
|||
|
Window
|
|||
|
|
|||
|
|
|||
|
|
|||
|
\begin{itemize}
|
|||
|
\item \textbf{Minimise}: It reduces the terminal to an icon.
|
|||
|
\item \textbf{Zoom}:
|
|||
|
It increases the size of the window.
|
|||
|
By default the size is set up to 80 x 24.
|
|||
|
|
|||
|
\item \textbf{Cycle Trough Windows}: It switches between open windows
|
|||
|
\item \textbf{Show Previous Tab}: It shows previous tab, if any
|
|||
|
\item \textbf{Show Next Tab}: It shows next tab, if any.
|
|||
|
\item \textbf{Move Tab to New Window}: It moves a tab to a new window.
|
|||
|
\item \textbf{Merge All Windows}: It takes all the windows and moves them to Tabs.
|
|||
|
\item \textbf{Return to Default Size}: It returns to default size of the window (80 x 24).
|
|||
|
\end{itemize}
|
|||
|
|
|||
|
Help
|
|||
|
|
|||
|
|
|||
|
|
|||
|
\begin{itemize}
|
|||
|
\item \textbf{Terminal Help}:
|
|||
|
It opens a useful guide that show you how familiarize with Terminal.
|
|||
|
|
|||
|
\item \textbf{Open man Page for selection}:
|
|||
|
Instead of digit man on the shell you can simply select the command and click on this option.
|
|||
|
It will give you back an external manual page with all the descriptions
|
|||
|
|
|||
|
\end{itemize}
|
|||
|
|
|||
|
\section{open}
|
|||
|
|
|||
|
|
|||
|
\large Gianmarco De Vita \normalsize\\
|
|||
|
|
|||
|
|
|||
|
|
|||
|
You can open files and folder as new windows through the terminal.
|
|||
|
The command is \texttt{open}. By writing the command open followed by the
|
|||
|
path and the name of the file (remember that you can omit the path if
|
|||
|
the file is in the current position), a new window in the common user
|
|||
|
interface opens. Now you can work on the opened file.
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
open path/name-file
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Open a file with a specific application
|
|||
|
Adding the flag \texttt{-a} to the command permit you to decide with
|
|||
|
which specific application open the file. Just write the flag followed by the
|
|||
|
name of the application.
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
open -a application-name path/name-file
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Assume that you want to open the file \emph{abc.pdf} on my Desktop using the program "preview".
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
open -a preview Desktop/abc.pdf
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
As result, a new \emph{Preview} window appears showing the content of the
|
|||
|
chosen file.\\
|
|||
|
|
|||
|
Open the folder which contains the file
|
|||
|
If you want to open the folder that contains a specific file, just use
|
|||
|
the flag \texttt{-R} and write the path and the name of the file you want to open.
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
open -R Desktop/text.txt
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
As result, a new \emph{Finder} window opens the folder displaying its content.\\
|
|||
|
|
|||
|
Open a file with an editor
|
|||
|
If you want to open a file with your default editor,
|
|||
|
just use the flag \texttt{-t} and write the path and the name of
|
|||
|
the file you want to open.
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
open -t Desktop/text.txt
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Visit a Website
|
|||
|
You can use this tool not only to open files and folders, but also webpages.
|
|||
|
Just write the command \texttt{open} followed by the \emph{URL} of the page
|
|||
|
you want to visit.
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
open http://www.google.com
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
A new page of your default browser will open on the indicated page (in this
|
|||
|
example, the main page of the Google Search Engine).
|
|||
|
|
|||
|
\section{more and Less}
|
|||
|
|
|||
|
|
|||
|
\large Marzio Lunghi \normalsize\\
|
|||
|
|
|||
|
|
|||
|
Both commands show the content of one or more files and it’s possible to do a research with
|
|||
|
particular flags, but the “less” one allows us to go also backwards while reading the text
|
|||
|
of a file.\\
|
|||
|
More is quite old, less is more recent and powerful.\\
|
|||
|
|
|||
|
General syntax for both is:\\
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
less \[flags\] path/name-file.*
|
|||
|
more \[flags\] path/name-file.*
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
The command \texttt{less} provides some useful commands to navigate and modify the file content.
|
|||
|
Commands does not include flags, which are included under Options.\\
|
|||
|
|
|||
|
Commands
|
|||
|
|
|||
|
Such commands must be used once the file has been displayed.
|
|||
|
They are not flags. For a single operation there can be multiple commands.
|
|||
|
|
|||
|
\begin{itemize}
|
|||
|
\item \texttt{ENTER RETURN e \^E j \^N CR }:
|
|||
|
Scroll forward N lines, 1 by default, if N is not specified.
|
|||
|
\item \texttt{ y \^Y k \^K \^P }:
|
|||
|
Scroll backward N lines , 1 by default , if N is not specified.
|
|||
|
\item \texttt{ f \^F \^V SPACE }:
|
|||
|
Scroll forward N lines, a window by default, if N is not specified.
|
|||
|
\item \texttt{ b \^B ESC-v }
|
|||
|
Scroll backward N lines, one window by default, if N is not specified.
|
|||
|
\item \texttt{ ESC-SPACE }
|
|||
|
Scroll forward one window like SPACE , but don't stop at end-of-file.
|
|||
|
\item \texttt{d \^D }
|
|||
|
Scroll forward N lines, by default N correspond to half of the screen size.
|
|||
|
\item \texttt{ u \^U }
|
|||
|
Scroll Backward N lines, by default N correspond to half of the screen size.
|
|||
|
\item \texttt{ ESC-) RightArrow }
|
|||
|
Scroll horizontally right N characters, by default half of the screen size, if N is not specified.
|
|||
|
\item \texttt{ ESC-( LeftArrow }
|
|||
|
Scroll horizontally left N characters, by default half of the screen size, if N is not specified.
|
|||
|
\end{itemize}
|
|||
|
|
|||
|
Jumping
|
|||
|
|
|||
|
Such commands must be used once the file has been displayed.
|
|||
|
They are not. For a single operation there can be multiple commands.
|
|||
|
|
|||
|
\begin{itemize}
|
|||
|
\item \texttt{ g < ESC-\textless }:
|
|||
|
Go to line N, by default 1, if N is not specified.
|
|||
|
\item \texttt{ G > ESC-\textgreater }:
|
|||
|
Go to line N, by default the last one , if N is not specified.
|
|||
|
\item \texttt{ t }:
|
|||
|
Go to the (N-th) next tag.
|
|||
|
\item \texttt{ T }
|
|||
|
Go to the (N-th) previous tag.
|
|||
|
\end{itemize}
|
|||
|
|
|||
|
Flags
|
|||
|
|
|||
|
Options may be given in one of two forms: either a single
|
|||
|
character preceded by a "-", or a name preceded by "--" .
|
|||
|
|
|||
|
\begin{itemize}
|
|||
|
\item \texttt{ ? OR --help }
|
|||
|
Display help guide with the description of commands and more , it is sufficient to enter less -? .
|
|||
|
\item \texttt{ -c OR --clear-screen }
|
|||
|
Repaint by clearing rather than scrolling.
|
|||
|
\item \texttt{ -e -E OR --quit-at-eof --QUIT-AT-EOF }
|
|||
|
Quit the file, when you scroll to the end of the file.
|
|||
|
\item \texttt{ -~ OR --tilde }
|
|||
|
Do not display tildes after end of file.
|
|||
|
\end{itemize}
|
|||
|
|
|||
|
\section{say}
|
|||
|
|
|||
|
|
|||
|
\large Gianmarco De Vita \normalsize\\
|
|||
|
|
|||
|
|
|||
|
|
|||
|
You can convert text into audible speech just by writing the command
|
|||
|
\texttt{say} followed by a string.
|
|||
|
This is possible thanks to the \emph{Speech Synthesis manager} on Mac OS.
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
say string
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Naturally, the wide presence of flags for this command allows you to use
|
|||
|
this command for many different tasks. Notice that using more flag
|
|||
|
simultaneously, you will be able to solve more complex operations.\\
|
|||
|
|
|||
|
Read a particular file
|
|||
|
By writing the command followed by the flag \texttt{-f} and, instead
|
|||
|
of the string, by the path of a text file, you will get as output a voice
|
|||
|
reading the content of that file.
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
say -f path/text.txt
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Specify the reading voice
|
|||
|
By writing the flag \texttt{-v} followed by a person name and a string, you
|
|||
|
can decide which voice should read the string.
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
say -v name string
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Of course, you're not expected to know every possible voice,
|
|||
|
so, by writing a string (eg: "Hello world") as argument of the command
|
|||
|
(including also the flag -v), you will get a list of all the available voices.
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
say -v "Hello world"
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Specify the Speech Rate
|
|||
|
By writing the flag \texttt{-r} followed by a rate and then by a
|
|||
|
string, you can decide the reading speed in words per minute.
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
ay -r rate string
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Store the output in an audible file
|
|||
|
You can save the result of the command in an audible file. To do that,
|
|||
|
you have just to write after the command the flag \texttt{-o} followed
|
|||
|
by the path/name of the output file and then the string that has to be read.
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
say -o path/audiofile.*format string
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
As said above, you can use more flags in the same command, once you know
|
|||
|
well them. See the examples below and try to guess the output. You can
|
|||
|
copy these commands into your terminal to verify your answers. Naturally,
|
|||
|
you have to create the text files if they don't exist (with some text
|
|||
|
inside), to make the work.
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
say -v Alex -f hello\_world.txt
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
say -o hi.aac -f hello\_world.txt
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
\section{ln}
|
|||
|
|
|||
|
|
|||
|
\large Riccardo Antonio Vivanco \normalsize\\
|
|||
|
|
|||
|
|
|||
|
|
|||
|
The \texttt{ln} command is used to create a link of a file or directory.
|
|||
|
A link is used to create multiple copies of a file in
|
|||
|
different places without using more storage than that needed to store a single copy
|
|||
|
of the given file.\\
|
|||
|
The copies are instead a link that points to the original file. If the original is deleted,
|
|||
|
the copies will point to a non-existant file and become pointless.\\
|
|||
|
The name of the command stands for \emph{LiNk}\\
|
|||
|
|
|||
|
There are 2 kinds of links: \textbf{hard} and \textbf{symbolic}.\\
|
|||
|
|
|||
|
In an hard link, the original is indistinguishable from the linked copy, and the changes
|
|||
|
made to the file are the same, regardless of whether the modified file is the
|
|||
|
original or the linked copy. Hard links are not used for directories.
|
|||
|
\texttt{ln} creates hard links by default\\
|
|||
|
|
|||
|
The symbolic link (symlink) instead contains the path to the original file and referencing the linked copy
|
|||
|
will make the referencer point to the original file instead.\\
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
ln \[flags\] \[source1\] \[source2\] ... \[target\_dir\]
|
|||
|
ln \[flags\] \[source\] \[target\]
|
|||
|
link \[source\] \[target\]
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
The \texttt{link} command can be used instead of \texttt{ln}, but flags and multiple
|
|||
|
source files won't be supported.\\
|
|||
|
|
|||
|
If multiple sources are supplied, the last parameter of the command must be a directory inside
|
|||
|
which the links will be created.
|
|||
|
|
|||
|
Flags
|
|||
|
|
|||
|
\begin{itemize}
|
|||
|
\item \textbf{-F}: overwrites the \[target\] file / directory if it already exists.
|
|||
|
\item \textbf{-h}: if the \[source\] is a symlink, do not follow it
|
|||
|
\item \textbf{-f}: if the \[target\] already exists, unlink it before replacing it.
|
|||
|
\item \textbf{-i}: ask for confirmation in case the \[target\] file already exists.
|
|||
|
\item \textbf{-s}: creates a symbolic instead of hard link
|
|||
|
\end{itemize}
|
|||
|
|
|||
|
\section{du}
|
|||
|
|
|||
|
|
|||
|
\large Joey Bevilacqua \normalsize\\
|
|||
|
|
|||
|
|
|||
|
|
|||
|
The \texttt{du} command is used to display files and directories sizes.\\
|
|||
|
The name stands for \emph{Disk Usage}.
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
du \[flags\] \[file1\] \[file2\] \[directory1\] ...
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Flags
|
|||
|
|
|||
|
\begin{itemize}
|
|||
|
\item \textbf{-a}: shows the size of each individual file inside a given folder,
|
|||
|
not the folder total size.
|
|||
|
|
|||
|
\item \textbf{-c}: shows the total size of all the files passed as arguments
|
|||
|
\item \textbf{-d}: select the max depth of folder recursion
|
|||
|
\item \textbf{-h}: shows the sizes in an human-readable format
|
|||
|
\item \textbf{-g}: shows the sizes with GB units
|
|||
|
\item \textbf{-m}: shows the sizes with MB units
|
|||
|
\item \textbf{-k}: shows the sizes with KB units
|
|||
|
\end{itemize}
|
|||
|
|
|||
|
\section{pwd}
|
|||
|
|
|||
|
|
|||
|
\large Mirko Ponzio \normalsize\\
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
The command \texttt{pwd}(abbreviation of print working directory, it returns the
|
|||
|
corrent directory) it is a command, that show the absolute pathname on the corrent directory.\\
|
|||
|
|
|||
|
The working directory is the directory where you are standing in. So for
|
|||
|
knowing where you are, you can use the pwd command.\\
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
cd /home/user
|
|||
|
pwd = /home/user
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Flags
|
|||
|
|
|||
|
\begin{itemize}
|
|||
|
\item \texttt{-P } Show the working directory path without symbolic link (links to
|
|||
|
folder).\\
|
|||
|
Example: \emph{/home/symphoto} a symlink to \emph{/home/photos} \texttt{pwd -P}
|
|||
|
will display \emph{/home/photos}.
|
|||
|
|
|||
|
\item \texttt{-L } Show the working directory logical path with symbolic link.\\
|
|||
|
Example: \emph{/home/symphoto}, that redirect to \emph{/home/photos},
|
|||
|
\texttt{pwd -L} will show \emph{/home/symphoto}.
|
|||
|
|
|||
|
\item Without any flag, -L is assumed, so the normal pwd is in reality \texttt{pwd -L}.
|
|||
|
\end{itemize}
|
|||
|
|
|||
|
\section{mv}
|
|||
|
|
|||
|
|
|||
|
\large Mattia Hijman \normalsize\\
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
The \texttt{mv} command is used to move a file from a given path to another.
|
|||
|
It can also be used to rename a file by moving it into the same directory,
|
|||
|
but with a different name.\\
|
|||
|
It stands for \emph{MoVe}.
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
mv \[-finv\] source target
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Flags
|
|||
|
|
|||
|
\begin{itemize}
|
|||
|
\item \textbf{-f}: Force overwriting file(s) without asking a confirmation.
|
|||
|
\item \textbf{-i}: Request confirmation before overwriting the file(s).
|
|||
|
\item \textbf{-n}: Don't allow to overwrite existing file(s).
|
|||
|
\item \textbf{-v}: Cause mv to be verbose, showing files after they are moved.
|
|||
|
\end{itemize}
|
|||
|
|
|||
|
\section{ls}
|
|||
|
|
|||
|
|
|||
|
\large Mirko Ponzio \normalsize\\
|
|||
|
|
|||
|
|
|||
|
The command \texttt{ls} stands for "LiSt"\\
|
|||
|
|
|||
|
In computing, ls is a command to list computer files in Unix and Unix-like operating systems.
|
|||
|
ls is specified by POSIX and the Single UNIX Specification.\\
|
|||
|
When invoked without any arguments, ls lists the files in the current working directory.\\
|
|||
|
The command is also available in the EFI shell. In other environments, such as DOS and Microsoft
|
|||
|
Windows, similar functionality is provided by the dir command.\\
|
|||
|
|
|||
|
Unix and Unix-like operating systems maintain the idea of a current working directory,
|
|||
|
that is, where one is currently positioned in the hierarchy of directories.\\
|
|||
|
When invoked without any arguments, ls lists the files in the current working directory.
|
|||
|
If another directory is specified, then ls will list the files there, and in fact the user may
|
|||
|
specify any list of files and directories to be listed.\\
|
|||
|
|
|||
|
Files whose names start with "." are not listed, unless the -a flag is specified,
|
|||
|
the -A flag is specified, or the files are specified explicitly.\\
|
|||
|
|
|||
|
Without options, ls displays files in a bare format. This bare format however makes
|
|||
|
it difficult to establish the type, permissions, and size of the files.\\
|
|||
|
|
|||
|
Flags
|
|||
|
|
|||
|
The most common options to reveal this information or change the list of files are:
|
|||
|
\begin{itemize}
|
|||
|
\item -l long format, displaying Unix file types, permissions, number of hard links,
|
|||
|
owner, group, size, last-modified date and filename.
|
|||
|
|
|||
|
\item -f do not short. Useful for directories containing large numbers of files.
|
|||
|
\item -F appends a character revealing the nature of a file, for example, * for an executable,
|
|||
|
or / for a directory. Regular files have no suffix.
|
|||
|
|
|||
|
\item -a lists all files in the given directory, including those whose names start with "."
|
|||
|
(which are hidden files in Unix). By default, these files are excluded from the list.
|
|||
|
|
|||
|
\item -R recursively lists subdirectories. The command ls -R / would therefore list all files.
|
|||
|
\item -d shows information about a symbolic link or directory, rather than about the link's
|
|||
|
target or listing the contents of a directory.
|
|||
|
|
|||
|
\item -t sort the list of files by modification time.
|
|||
|
\item -h print sizes in human readable format. (e.g., 1K, 234M, 2G, etc.).
|
|||
|
|
|||
|
\end{itemize}
|
|||
|
|
|||
|
\section{rm}
|
|||
|
|
|||
|
|
|||
|
\large Mattia Hijman \normalsize\\
|
|||
|
|
|||
|
|
|||
|
|
|||
|
The \texttt{rm} command is used to delete and unlink directories and files.\\
|
|||
|
It attempts to remove the non-directory type files specified on the command line.
|
|||
|
If the permissions of the file do not permit writing, the user is prompted for confirmation.\\
|
|||
|
It stands for \emph{ReMove}.
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
rm \[-dfiPRrvW\] file1 file2 file....
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Flags
|
|||
|
\begin{itemize}
|
|||
|
\item \textbf{-d}: Attempt to remove directories as well as other types of files
|
|||
|
\item \textbf{-f}: Attempt to remove the files without prompting for confirmation, regardless
|
|||
|
of the file's permissions. If the file does not exist, do not display a diagnostic message
|
|||
|
or modify the exit status to reflect an error.
|
|||
|
\item \textbf{-i}: Request confirmation before attempting to remove each file,
|
|||
|
regardless of the file's permissions, or whether or not the standard input device
|
|||
|
is a terminal.
|
|||
|
\item \textbf{-P}: Overwrite regular files before deleting them. Files are overwritten
|
|||
|
three times, first with the byte pattern 0xff, then 0x00, and then 0xff again, before
|
|||
|
they are deleted.
|
|||
|
\item \textbf{-R}: Attempt to remove the file hierarchy rooted in each file argument.
|
|||
|
The -R option implies the -d option.
|
|||
|
If the -i option is specified, the user is prompted for confirmation before
|
|||
|
each directory's contents are processed (as well as before the attempt is
|
|||
|
made to remove the directory).
|
|||
|
If the user does not respond affirmatively, the file hierarchy rooted in that
|
|||
|
directory is skipped.
|
|||
|
\item \textbf{-r}: Same as -R.
|
|||
|
\item \textbf{-v}: Be verbose when deleting files, showing them as they are removed.
|
|||
|
\item \textbf{-W}: Attempt to undelete the named files.
|
|||
|
Currently, this option can only be used to recover files covered by whiteouts.
|
|||
|
\end{itemize}
|
|||
|
|
|||
|
Removing links
|
|||
|
|
|||
|
The rm utility removes symbolic links, not the files referenced by the links.\\
|
|||
|
It is not allowed to remove the files "." or "..".\\
|
|||
|
|
|||
|
When the utility is called as unlink, only one argument, which must not be a directory,
|
|||
|
may be supplied. No options may be supplied in this simple mode of operation,
|
|||
|
which performs an unlink(2) operation on the passed argument.\\
|
|||
|
|
|||
|
The rm utility exits 0 if all of the named files or file hierarchies were removed,
|
|||
|
or if the -f option was specified and all of the existing files or file hierarchies were removed.
|
|||
|
If an error occurs, rm exits with a value 0.
|
|||
|
|
|||
|
\section{Relative paths}
|
|||
|
|
|||
|
|
|||
|
\large Announ Marwan \normalsize\\
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Relative path is defined as path related to the present working directory(pwd).\\
|
|||
|
Suppose I am located in /home/user and I want to change directory to /home/user/Documents.\\
|
|||
|
I can use relative path concept to change directory to Documents.
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
pwd
|
|||
|
/home/user
|
|||
|
cd Documents
|
|||
|
pwd
|
|||
|
/home/user/Documents
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
If you observe, there is a little bit difference between absolute and relative paths:
|
|||
|
in relative paths there is no "/" at the very beginning.\\
|
|||
|
Meanwhile in an absolute path you have to write "/", in this case it'd be "/home/user/Documents".
|
|||
|
|
|||
|
\section{mkdir}
|
|||
|
|
|||
|
|
|||
|
\large Mirko Ponzio \normalsize\\
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
The \texttt{mkdir} command is used to create new directories\\
|
|||
|
The name stands for \emph{MaKe DIRectory}.\\
|
|||
|
|
|||
|
The default ls command syntax is:
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
mkdir \[flags\] \[-m mode\] directory\_name ...
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Where \[flags\] are the mkdir \texttt{-p} and \texttt{-v} - flags,
|
|||
|
read below for more info, and \emph{directory\_name} is the
|
|||
|
name of the new directory we are going to create.\\
|
|||
|
|
|||
|
Create a new directory
|
|||
|
Let's see how to create a new directory:
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
ls
|
|||
|
|
|||
|
mkdir test\_directory
|
|||
|
ls
|
|||
|
test\_directory
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Create a path of directories
|
|||
|
Using the flag \texttt{-p} we can create a path of directories, allowing us
|
|||
|
to build more than a directory at once.
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
mkdir -p test\_directory/subdir/subsubdir
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
As you can see, we are now creating two directories: one named \emph{subdir} and
|
|||
|
another one, included in this, named \emph{subsubdir}\\
|
|||
|
The -p flag is necessary to allow the shell to create intermediate
|
|||
|
directories as required.\\
|
|||
|
|
|||
|
Create directories with specified permissions
|
|||
|
The \texttt{-m mode} option allows us to set permissions at the new directory
|
|||
|
that we are now creating.
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
mkdir -m 777 test\_free\_directory
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Our new directory will now have read,write and execute permissions for user, group and others.
|
|||
|
|
|||
|
\section{Absolute paths}
|
|||
|
|
|||
|
|
|||
|
\large Announ Marwan \normalsize\\
|
|||
|
|
|||
|
|
|||
|
|
|||
|
A path is a location to a folder or file in a file system of a Operating System,
|
|||
|
then is a combination of characters and "/".\\
|
|||
|
|
|||
|
An absolute path is defined as specifying the location of a file or directory
|
|||
|
from the root directory (/).In other words we can say absolute path is a complete
|
|||
|
path from start of actual filesystem from / directory.\\
|
|||
|
|
|||
|
To write an absolute path-name:
|
|||
|
|
|||
|
Start at the root directory ( / ) and work down.\\
|
|||
|
Write a slash ( / ) after every directory name (last one is optional).\\
|
|||
|
|
|||
|
If for example, we the commands "cat group1.txt", it'll work only and only if the "group1.txt"
|
|||
|
exist in the current directory.\\
|
|||
|
If doesn't works, it's not a problem, you just have to know where the file is actually stored.\\
|
|||
|
Now, we suppose that you know where your file is saved so you can rewrite the command.
|
|||
|
"cat /home/a1/group1.txt".\\
|
|||
|
|
|||
|
As you can see from the last commands, the path started from "/" which is the root directory
|
|||
|
for every Unix machines.\\
|
|||
|
|
|||
|
Here are some other examples of absolute paths:
|
|||
|
|
|||
|
\begin{itemize}
|
|||
|
\item /home/user/Document/group1.txt
|
|||
|
\item /root/data/dev.zip
|
|||
|
\item /var/log/messages
|
|||
|
\end{itemize}
|
|||
|
|
|||
|
\section{cd}
|
|||
|
|
|||
|
|
|||
|
\large Alessandro Marinelli \normalsize\\
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
The \texttt{cd} command is used to change the working directory\\
|
|||
|
The name stands for \emph{Change Directory}.\\
|
|||
|
|
|||
|
The default cd command syntax is:
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
cd \[flags\] \[path\]
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Where \[flags\] are the cd flags, read below for more info,and \[path\] is the
|
|||
|
path (absolute or relative), of the directory which we want to make as working directory.\\
|
|||
|
|
|||
|
Change the working directory
|
|||
|
Let's see how to use the command \texttt{cd} in order to change the working directory
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
pwd
|
|||
|
~
|
|||
|
cd Desktop/multimedia
|
|||
|
pwd
|
|||
|
~/Desktop/multimedia
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
As you can see, we changed the working directory from ~ (which stands for HOME),
|
|||
|
to "multimedia". Now our Shell will work on the directory "multimedia"
|
|||
|
until a new \texttt{cd} will occour.\\
|
|||
|
|
|||
|
\textbf{ Notice:} If you want to move to a directory which is not contained in the
|
|||
|
current working directory, you \underline{MUST} use the absolute path.
|
|||
|
|
|||
|
|
|||
|
\section{Redirection}
|
|||
|
|
|||
|
|
|||
|
\large Dario Rasic \normalsize\\
|
|||
|
|
|||
|
|
|||
|
output as input
|
|||
|
\\
|
|||
|
To redirect a certain output of the command-line we have to use the symbol "\textgreater ".\\
|
|||
|
|
|||
|
In this case, we will use a file named \emph{hello.txt}, in which we want to insert
|
|||
|
a certain output ("Sun" in this case):\\
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
echo "Sun" \textgreater hello.txt
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
So if we print the content of the file in our command-line, the output will be the following:
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
cat hello.txt
|
|||
|
Sun
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
If we want to append a certain output to an existing file,
|
|||
|
we just have to use "\textgreater \textgreater " symbols:
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
cat hello.txt
|
|||
|
Sun
|
|||
|
echo "Moon" \textgreater \textgreater hello.txt
|
|||
|
cat hello.txt
|
|||
|
Sun
|
|||
|
Moon
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
|
|||
|
input as output
|
|||
|
\\
|
|||
|
To redirect an input from a file for a command, the symbol "\textless " is used.
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
echo \$lt; \$(cat hello.txt)
|
|||
|
Sun
|
|||
|
Moon
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
This is particularly useful when chaining commands.\\
|
|||
|
|
|||
|
|
|||
|
Chaining (or piping)
|
|||
|
|
|||
|
Chaining, also called Piping because it works with the pipe symbol "|", takes
|
|||
|
the output of a certain command-line and feeds it to another command in a direct way.
|
|||
|
\begin{verbatim}
|
|||
|
cat hello.txt | grep Mo
|
|||
|
Moon
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
A simple example
|
|||
|
|
|||
|
Now let's say that we want to combine those commands in a more complex operation.
|
|||
|
Let's say we want to take some contents from a certain file and put it into another file.\\
|
|||
|
|
|||
|
We want to sort the animals whose name begins with letter "d" from the file
|
|||
|
\emph{animals.txt} and put it into \emph{d\_animals.txt}.\\
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
grep d \textless animals.txt \textgreater d\_animals.txt
|
|||
|
cat d\_animals.txt
|
|||
|
Deer
|
|||
|
Dog
|
|||
|
Dolphin
|
|||
|
...
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
\section{Parameter expansion}
|
|||
|
|
|||
|
|
|||
|
\large Marco Tereh \normalsize\\
|
|||
|
|
|||
|
|
|||
|
|
|||
|
There are some special operations that can be performed on
|
|||
|
\underline{\href{variables.html}{variables}} and strings called parameter expansions.
|
|||
|
The general syntax for all parameter expansions is this one:
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
\${CODE\_HERE}
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Depending on what you want to do with your variable, the code
|
|||
|
that goes inside the braces differs.\\
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
\${VARIABLE:-DEFAULT\_VALUE}
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
If the variable VARIABLE exists and has a value (i.e. it is not null), this is equal to
|
|||
|
the value of VARIABLE.
|
|||
|
Otherwise, it is equal to DEFAULT\_VALUE.\\
|
|||
|
|
|||
|
Example: \texttt{echo "First name: \${firstname:-John}";}\\
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
\${VARIABLE:=DEFAULT\_VALUE}
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
If the variable VARIABLE exists and has a value, this is equal to the value of VARIABLE.
|
|||
|
Otherwise, it sets the variable to DEFAULT\_VALUE and is equal to it.\\
|
|||
|
Example: \texttt{echo "Last name: \${lastname:=Doe}";}\\
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
\${VARIABLE:?ERR\_VALUE}
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
If the variable VARIABLE exists and has a value, this is equal to the value of VARIABLE.
|
|||
|
Otherwise, it prints ERR\_VALUE to STDERR and exits (meaning nothing else will be executed
|
|||
|
after this).\\
|
|||
|
Example: \texttt{currdate=\${date:?Operation failed: date unknown};}\\
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
\${VARIABLE:+VALUE}
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
If the variable VARIABLE exists and has a value, this is equal to VALUE.
|
|||
|
Otherwise, this has no effect.\\
|
|||
|
Example: \texttt{echo -e "reading from address \$read.\${write:+\\nWARNING: read and write set
|
|||
|
at the same time}";}\\
|
|||
|
|
|||
|
All of these can also be written without the colon, in which case their meaning changes to
|
|||
|
"If the variable VARIABLE exists at all (even if it is null), this is ..."\\
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
\${VARIABLE: NUMBER}
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
This is equal to the substring of the value of VARIABLE, starting at the character with
|
|||
|
(0-based) index NUMBER.\\
|
|||
|
If NUMBER is negative, the substring starts NUMBER characters before the end of the string.\\
|
|||
|
Example: \texttt{lastname=\${fullname:\$firstnamelength};}\\
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
\${VARIABLE: FROM:LENGTH}
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
This is equal to the substring of the value of VARIABLE, starting at the character with (0-based)
|
|||
|
index FROM with length LENGTH\\
|
|||
|
If FROM is negative, the substring starts FROM characters before the end of the string.\\
|
|||
|
Example: \texttt{lastname=\${middlename:\$firstnamelength:\$middlenamelength};}\\
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
\${\#VARIABLE}
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
This is equal to the length of the value of VARIABLE\\
|
|||
|
Example: \texttt{echo "your name has \${\#name} characters";}\\
|
|||
|
|
|||
|
Paremeter expansions can also be nested, like this:
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
\${input:?\${INVALID\_INPUT\_ERR\_MSG:-An unknown error occurred}}
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Further reading: <a href="http://www.gnu.org/software/bash/manual/bashref.html\#Shell-Parameter-Expansion">
|
|||
|
the bash reference manual
|
|||
|
|
|||
|
\section{Script Variables}
|
|||
|
|
|||
|
|
|||
|
\large Dario Rasic \normalsize\\
|
|||
|
|
|||
|
|
|||
|
|
|||
|
A variable is simply a string to which we assign a certain type of data,
|
|||
|
which could be a text, a number, a filename and other types of data.\\
|
|||
|
|
|||
|
|
|||
|
Naming a variable
|
|||
|
|
|||
|
|
|||
|
To name a variable in Unix we have to use only letters, numbers or
|
|||
|
the underscore character (\_).\\
|
|||
|
Other characters can't be used because they have a special meaning in Unix Shell.\\
|
|||
|
|
|||
|
Some simple examples are:
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
VAR\_1
|
|||
|
VAR\_2
|
|||
|
NAME\_3
|
|||
|
name\_4
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
|
|||
|
Defining a variable
|
|||
|
|
|||
|
To define a certain variable, we could use the following basecase:
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
variable\_name=variable\_value
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
|
|||
|
Let me show you a simple example:
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
VAR\_1=Strawberry
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
|
|||
|
To access a variable we have to use the dollar sign (\$). So if I want to
|
|||
|
access VAR\_1, I have to write:
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
VAR\_1="Strawberry"
|
|||
|
echo \$VAR\_1
|
|||
|
Strawberry
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
|
|||
|
Deleting a variable
|
|||
|
|
|||
|
Deleting a variable means that shell will remove a certain variable from the list of
|
|||
|
those that it tracks.\\
|
|||
|
To delete a variable we use the following command:
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
unset variable\_name
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
which in our case would be:
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
unset VAR\_1
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
|
|||
|
Protecting variables
|
|||
|
|
|||
|
To protect a certain variable, we can set them as read-only so that it can't be
|
|||
|
changed or deleted.\\
|
|||
|
So, if we try to change the value of VAR\_1, the result will be the following:
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
VAR\_1="Strawberry"
|
|||
|
readonly VAR\_1
|
|||
|
VAR\_1="Blueberry"
|
|||
|
VAR\_1: This variable is read only.
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
If we try to delete the variable, shell will give us the following value:
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
VAR\_1="Strawberry"
|
|||
|
unset VAR\_1
|
|||
|
VAR\_1: This variable is read only.
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
\section{Script Base Commands}
|
|||
|
|
|||
|
|
|||
|
\large Dario Rasic \normalsize\\
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Echo
|
|||
|
|
|||
|
This command print as output its entire argument on the command-line.\\
|
|||
|
It could be used with variables, like in the following example:\\
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
example="this is an example"
|
|||
|
|
|||
|
echo \$example
|
|||
|
this is an example
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
|
|||
|
Cat
|
|||
|
|
|||
|
This command prints the content of a certain file as an output on the
|
|||
|
command-line.\\
|
|||
|
|
|||
|
As example, we could imagine a simple text file in nano named "Hello", which contains
|
|||
|
the line "Hello World".\\
|
|||
|
So, our command example will look like this:\\
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
nano Hello
|
|||
|
cat Hello
|
|||
|
Hello World
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Grep
|
|||
|
|
|||
|
This one behaves very similarly to the previus one, but in this case it prints only
|
|||
|
the lines matching a certain pattern.\\
|
|||
|
In this we could imagine a certain text file "animals", which contains a list of animal-names.
|
|||
|
|
|||
|
If we want to select only the animals whose name begins with the letter "d", we will write this:\\
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
grep "D" animals
|
|||
|
Deer
|
|||
|
Dragon
|
|||
|
Dinosaur
|
|||
|
Dog
|
|||
|
Dolphin
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
\section{Script Special Variables}
|
|||
|
|
|||
|
|
|||
|
\large Dario Rasic \normalsize\\
|
|||
|
|
|||
|
|
|||
|
|
|||
|
There are certain strings that we can not use in the variable-naming process.\\
|
|||
|
In this page we will see what actually are those strings, and what's their purpose.\\
|
|||
|
|
|||
|
\$\$
|
|||
|
To begin, we will see the simplest variable, which is the dollar sign (\$).
|
|||
|
This command simply gives us the process ID number of the current shell.\\
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
echo \$\$
|
|||
|
11480
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
\$0
|
|||
|
This variable will simply give us the filename of the current script.
|
|||
|
|
|||
|
\$n
|
|||
|
This variable corresponds to the arguments with which a script was invoked.
|
|||
|
Here n is a positive number corresponding to the position of an argument.
|
|||
|
|
|||
|
\$\#
|
|||
|
This variable gives us the number of arguments supplied to a script.
|
|||
|
|
|||
|
\$!
|
|||
|
This variable gives us the process number of the last background command.
|
|||
|
|
|||
|
\section{For Loop}
|
|||
|
|
|||
|
|
|||
|
\large Matteo Omenetti \normalsize\\
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
The second type of loops are for loops.
|
|||
|
They follow this syntax:
|
|||
|
\begin{verbatim}
|
|||
|
for \[variable\] in \[list\] do
|
|||
|
\[code\]
|
|||
|
done
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Their purpose is to \emph{iterate} over a list. Also, while loops could do this,
|
|||
|
you might argue... \\
|
|||
|
Of course, they could, but for loops are specifically meant to do this. Therefore, for instance,
|
|||
|
you don't have to declare your counter variable outside the loop. Most importantly,
|
|||
|
this variable can be accessed from inside the loop. \\
|
|||
|
|
|||
|
For loops take this form:
|
|||
|
\begin{verbatim}
|
|||
|
for VARIABLE in 1 2 3 4 5 .. N
|
|||
|
do
|
|||
|
command1
|
|||
|
command2
|
|||
|
commandN
|
|||
|
done
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Here is a simple example:
|
|||
|
\begin{verbatim}
|
|||
|
for i in 1 2 3 4 5
|
|||
|
do
|
|||
|
echo "Welcome \$i times"
|
|||
|
done
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
This first example of code simply displays a welcome message 5 times.
|
|||
|
The output of this piece of code is:
|
|||
|
\begin{verbatim}
|
|||
|
Welcome 1 times
|
|||
|
Welcome 2 times
|
|||
|
Welcome 3 times
|
|||
|
Welcome 4 times
|
|||
|
Welcome 5 times
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
There are also other ways to specify the \emph{ numerical range }. For instance, if
|
|||
|
your numerical range is too big, you can simply write: \texttt{ {1..100} }. This piece
|
|||
|
of code means every natural number between 1 and 100 (both included). \\
|
|||
|
Ranges can also count backward like this: \texttt{{10..1}}.
|
|||
|
You can even increment the numerical value by step of two: \texttt{ {0..10..2} }.
|
|||
|
This piece of code means every natural number between 0 and 10 with a step of two,
|
|||
|
0 2 4 6... 10.
|
|||
|
|
|||
|
|
|||
|
\section{Arrays}
|
|||
|
|
|||
|
|
|||
|
\large Marco Tereh \normalsize\\
|
|||
|
|
|||
|
|
|||
|
|
|||
|
There is a special kind of \underline{\href{variables.html}{variable}}, called an array.\\
|
|||
|
|
|||
|
While variables hold a single value, arrays hold many. They could be called a list of variables.
|
|||
|
The simplest way to create an array is using this format:
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
names=("Anna" "Bob" "Clarice" "Dee")
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
This will create an array, called \texttt{names}, which holds 4 values.
|
|||
|
The values in the array can be accessed using the syntax
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
\${names\[SELECTOR\]}
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
where SELECTOR is the selector associated to the desired element. There are two kinds of
|
|||
|
arrays, depending on what kind of selector is used.\\
|
|||
|
|
|||
|
\texttt{names} is an \emph{indexed} array, meaning the selector is a number.
|
|||
|
Since we didn't specify any when we defined it, \texttt{names}' selectors start at
|
|||
|
0 and count up from there.\\
|
|||
|
|
|||
|
Thus we can access the string \texttt{"Anna"} using \texttt{names\[0\]}.
|
|||
|
In the same way we use \texttt{names\[1\]} to access \texttt{"Bob"} and so on.\\
|
|||
|
|
|||
|
If we want to specify a particular index for our values when creating the array
|
|||
|
we can do it like this:
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
names=(\[1\]="Anna" \[2\]="Bob" \[5\]="Ernie" \[12\]="Luigi")
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
As you might have guessed, this will create an array with \texttt{"Anna"} at index 1,
|
|||
|
\texttt{"Bob"} at index 2, \texttt{"Ernie"} at index 3 and so on.\\
|
|||
|
|
|||
|
If our indices are all sequential and we just want to change the starting index, we can use
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
names=(\[12\]="Luigi" "Mario" "Nate")
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Which will create an array with \emph{"Luigi"} at index 12,
|
|||
|
\emph{"Mario"} at index 13 and \emph{"Nate"} at index 14.\\
|
|||
|
An indexed array's selector can also be negative, which will start counting from the end,
|
|||
|
so \emph{\${names\[-1\]}} means \emph{"Nate"}, \texttt{\${names\[-3\]}} is
|
|||
|
\emph{"Luigi"} and so on.\\
|
|||
|
|
|||
|
The other kind of array is an \emph{associative} array.
|
|||
|
In an associative array, the values are not mapped to a number but to some other string.\\
|
|||
|
|
|||
|
Here's an example of an associative array:
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
colors=(\[white\]="\#FFFFFF" \[black\]="\#000000" \[red\]="\#FF0000" \[yellow\]="\#00FFFF")
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
In this case it is not possible to omit the selector as there is no logical word
|
|||
|
that "follows" white. To access its members, we use the same syntax but write a string
|
|||
|
instead of a number as the selector.\\
|
|||
|
Arrays, both kinds, can also be modified after creation. We can use
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
colors\[blue\]="\#0000FF"
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
to add an element to the array (or modify it if it exists already) and
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
unset colors\[black\]
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
to remove one.\\
|
|||
|
|
|||
|
The \texttt{@} and \texttt{*} selectors are special - they cannot be written to but
|
|||
|
reading from them will return \textbf{all} the values in the array, separated by spaces.
|
|||
|
Similarly, \texttt{\${!colors\[@\]}} is a list of
|
|||
|
all the selectors (or indices) that were assigned a value.\\
|
|||
|
|
|||
|
\underline{\href{parameter\_expansion.html}{Parameter Expansion}} works on indexed arrays as well,
|
|||
|
much like it works on strings, but it manipulates the members of the array instead of characters.
|
|||
|
For example:
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
\${names\[@\]: 13}
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
is equivalent to \texttt{"Mario" "Luigi"}, while
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
\${\#names\[@\]}
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
counts the number of elements in the array, in this case 3.\\
|
|||
|
|
|||
|
Further reading: <a href="http://www.gnu.org/software/bash/manual/bashref.html\#Arrays">
|
|||
|
the bash reference manual
|
|||
|
|
|||
|
\section{If Statement}
|
|||
|
|
|||
|
|
|||
|
\large Matteo Omenetti \normalsize\\
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
If statements allow us to make decisions in our Bash scripts. They allow us to
|
|||
|
whether run or not a piece of code based on a condition that we set. \\
|
|||
|
|
|||
|
If statements take this form:
|
|||
|
\begin{verbatim}
|
|||
|
if \[condition\]; then
|
|||
|
command1
|
|||
|
command2
|
|||
|
command3
|
|||
|
...
|
|||
|
fi
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Anything between \texttt{then} and \texttt{fi} will be executed only if the condition
|
|||
|
evaluates to true. \\
|
|||
|
Here is a simple example:
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
i=210;
|
|||
|
|
|||
|
if \[\$i -ge 200\]; then
|
|||
|
echo "You chose a big number."
|
|||
|
fi
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
In this first example we evaluate a variable \texttt{i} to 105.
|
|||
|
The \emph{ if statement } will print "You chose a big number"
|
|||
|
only if the number contained in our variable \texttt{i} is \textbf{G}reater or
|
|||
|
\textbf{E}qual to 200. \\
|
|||
|
This is our case, therefore the output of this piece of code will be:
|
|||
|
\begin{verbatim}
|
|||
|
You chose a big number.
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
If Else
|
|||
|
|
|||
|
Sometimes we want to perform a certain set of actions, if our condition evaluates to
|
|||
|
true and another set of actions if our condition evaluates to false. We can do this with
|
|||
|
the \emph{ if else } statement.
|
|||
|
\emph{ if else } sattements take this form:
|
|||
|
\begin{verbatim}
|
|||
|
if \[condition\]; then
|
|||
|
command1
|
|||
|
command2
|
|||
|
command3
|
|||
|
...
|
|||
|
else
|
|||
|
command1
|
|||
|
command2
|
|||
|
command3
|
|||
|
...
|
|||
|
fi
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Here is a simple example:
|
|||
|
\begin{verbatim}
|
|||
|
i=50;
|
|||
|
|
|||
|
if \[\$i -ge 200\]; then
|
|||
|
echo "You chose a big number."
|
|||
|
else
|
|||
|
echo "You chose a small number."
|
|||
|
fi
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
In this example, that is just an extension of the previous example, we
|
|||
|
evaluate a variable \texttt{i} to 50. If \texttt{i} is greater or equal to
|
|||
|
200, you print out "You chose a big number", otherwise,
|
|||
|
(if \texttt{i} is not greater or equal to 200), just like in this case, you print out
|
|||
|
"You chose a small number".
|
|||
|
Therefore, the output of this piece of code is:
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
You chose a small number.
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
If Elif Else
|
|||
|
Sometimes, in programming, it is necessary to have a series of conditions that lead to
|
|||
|
different paths. We can accommodate this need with the \emph{if else elif} mechanism.
|
|||
|
The \emph{if else elif} mechanism takes this form:
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
if \[condition\]; then
|
|||
|
command1
|
|||
|
command2
|
|||
|
command3
|
|||
|
...
|
|||
|
elif \[condition\]; then
|
|||
|
command1
|
|||
|
command2
|
|||
|
command3
|
|||
|
...
|
|||
|
else
|
|||
|
command1
|
|||
|
command2
|
|||
|
command3
|
|||
|
...
|
|||
|
fi
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Here is a simple example:
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
i=150;
|
|||
|
|
|||
|
if \[\$i -ge 200\]; then
|
|||
|
echo "You chose a big number."
|
|||
|
elif \[\$i == 150\]; then
|
|||
|
echo "You chose 150".
|
|||
|
else
|
|||
|
echo "You chose a small number"
|
|||
|
fi
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
In this example, that is just an extension of the previous example, we evaluate a
|
|||
|
variable \texttt{i} to 150. If \texttt{i} is greater or equal to 200,
|
|||
|
you print out "You chose a big number", if \texttt{i} is equal to 150 you print out
|
|||
|
"You chose 150" otherwise you print out "You chose a small number".
|
|||
|
Therefore, the output of this piece of code is:
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
You chose 150.
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
\section{While Loop}
|
|||
|
|
|||
|
|
|||
|
\large Matteo Omenetti \normalsize\\
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Loops are an important concept in programming and therefore also in scripting.
|
|||
|
Thanks to loops you are able to repeat an instruction
|
|||
|
automatically several times, until a certain condition turns false.\\
|
|||
|
|
|||
|
Two are the main types of loops: while and for. They both generate a repeating
|
|||
|
piece of code, but with some key differences
|
|||
|
that make them suitable for different needs while programming.\\
|
|||
|
|
|||
|
While loops take this form:
|
|||
|
\begin{verbatim}
|
|||
|
while \[condition\]
|
|||
|
do
|
|||
|
command1
|
|||
|
command2
|
|||
|
command3
|
|||
|
...
|
|||
|
done
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Here is a first simple example:
|
|||
|
\begin{verbatim}
|
|||
|
i=0;
|
|||
|
|
|||
|
while \[\$i -lt 4\]
|
|||
|
do
|
|||
|
echo \$i
|
|||
|
i=\$((i + 1))
|
|||
|
done
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
In this first example, you simply create a variable called i and evaluate it to 0.
|
|||
|
Then you access the while loop: the condition \texttt{ \[\$i -lt 4\]} means that this while
|
|||
|
loop will run until the \texttt{ i} variable is less than 4.
|
|||
|
Every cycle of this loop, you print out the value of variable i with \texttt{ echo \$i}
|
|||
|
and finally, you increase its value by 1 with \texttt{ i=\$((i + 1))}.
|
|||
|
Therefore in 4 cycles the value of i will be 4. This will make the condition of the while loop false.
|
|||
|
The output of this piece of code is:
|
|||
|
\begin{verbatim}
|
|||
|
0
|
|||
|
1
|
|||
|
2
|
|||
|
3
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Sometimes it is required to declare infinite loops for various programming purposes. \\
|
|||
|
Here is an example:
|
|||
|
\begin{verbatim}
|
|||
|
i=1;
|
|||
|
|
|||
|
while :
|
|||
|
do
|
|||
|
printf "i=\$i\i: Hello World"
|
|||
|
if \[ \$i == 3 \]; then
|
|||
|
echo "I love DrRacket"
|
|||
|
elif \[ \$i == 5\]; then
|
|||
|
echo "I love Bash"
|
|||
|
elif \[ \$i == 7 \]; then
|
|||
|
echo "I love this website"
|
|||
|
elif \[ \$i == 9 \]; then
|
|||
|
exit 0
|
|||
|
i=\$((i + 1))
|
|||
|
done
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
No termination condition is set for this loop in this example. This type of loop
|
|||
|
is called infinite loop.\\
|
|||
|
The \texttt{ exit} statement is used to quit the loop. This loop will
|
|||
|
iterate for 9 times, then
|
|||
|
as soon as \texttt{ i} becomes equal to 0, the condition of the last if
|
|||
|
statement will evaluate to true and the loop will be terminated. \\
|
|||
|
|
|||
|
The output of this piece of code is:
|
|||
|
\begin{verbatim}
|
|||
|
1: Hello World
|
|||
|
2: Hello World
|
|||
|
3: Hello World
|
|||
|
I love programming
|
|||
|
4: Hello World
|
|||
|
5: Hello World
|
|||
|
I love Bash
|
|||
|
6: Hello World
|
|||
|
7: Hello World
|
|||
|
I love this website
|
|||
|
8: Hello World
|
|||
|
9: Hello World
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
If you want your shell to hang forever doing nothing you can write out the following infinite loop:
|
|||
|
\begin{verbatim}
|
|||
|
while :
|
|||
|
do
|
|||
|
:
|
|||
|
done
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
In scripting, while loops are often used to process files line by line. \\
|
|||
|
Here is an example:
|
|||
|
\begin{verbatim}
|
|||
|
while read -r first\_name last\_name phone;
|
|||
|
do
|
|||
|
printf '\%s\\n' "\$last\_name"
|
|||
|
done \textless "\$file"
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
The \texttt{ read } command is used to read a file line by line.
|
|||
|
The flag \texttt{ -r} is used to tell the
|
|||
|
command read to interpret backslashes (/) literally, instead as escape characters.
|
|||
|
This command, expect for some few
|
|||
|
rare cases, should always be used with this flag.
|
|||
|
In this example, \texttt{ \textless "\$file"} redirects the loop's input from a file
|
|||
|
whose name is stored in a variable.
|
|||
|
This file has 3 columns, \texttt{ first\_name last\_name phone }, separated by
|
|||
|
blank space (or a tab).
|
|||
|
This piece of code only prints out the second column.
|
|||
|
|
|||
|
\end{document}
|