summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGabriel Krisman Bertazi <gabriel@krisman.be>2014-03-28 17:17:39 -0300
committerGabriel Krisman Bertazi <gabriel@krisman.be>2015-02-10 21:51:04 -0200
commitfe98c8d2fb8ead755492d13c3b68e3898d2d67ed (patch)
tree0f46977d103d473a37c69c6df8d1228ccab0d1b4
parentd0b3117ddbe3dd8b20d380d6f27d9099b3a5a0f8 (diff)
Slides de shell para edição 2014.2014
-rw-r--r--bixos/shell.tex391
-rw-r--r--imagens/Stdstreams.pdfbin0 -> 17155 bytes
-rw-r--r--imagens/pipe.pdfbin0 -> 17686 bytes
3 files changed, 208 insertions, 183 deletions
diff --git a/bixos/shell.tex b/bixos/shell.tex
index 8736b35..0a178c3 100644
--- a/bixos/shell.tex
+++ b/bixos/shell.tex
@@ -1,12 +1,12 @@
\documentclass{beamer}
-\input{../lib/estilo.tex}
-\input{../lib/titulo.tex}
+%\input{../lib/estilo.tex}
+%\input{../lib/titulo.tex}
\input{../lib/shell.tex}
\usepackage{xspace}
\usepackage{url}
-\begin{document}
+
\newcommand{\software}{\emph{software}\xspace}
\newcommand{\Software}{\emph{Software}\xspace}
@@ -14,38 +14,84 @@
\newcommand{\opensource}{\emph{Open-Source}\xspace}
\newcommand{\Shell}{\emph{Shell}\xspace}
-\gpsltitle{Aula 02:\\ \Shell}
+\usepackage[brazil]{babel}
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+\usepackage[absolute,overlay]{textpos}
+\usepackage{multirow}
-\begin{frame}{Objetivos}
- \begin{itemize}
- \item Entender as vantagens do uso da linha de comando frente às interfaces
- gráficas.
- \item Conhecer o formato dos comandos e os comandos básicos para realizar
- tarefas cotidianas em um terminal Unix.
- \end{itemize}
-\end{frame}
+\usetheme{Darmstadt}
+\title{Aula 04 - Hackeando a linha de comando }
+\author{LibrePlanet São Paulo}
+\date{\today}
+
+\begin{document}
+
+\frame{
+ \titlepage
+}
+
+%\gpsltitle{Aula 02:\\ Hackeando o \Shell}
\begin{frame}{Terminal}
\begin{figure}[h]
\centering
\begin{itemize}
- \item Um terminal é um \emph{front-end} para a entrada de comandos em um
- \Shell.
- \item Existem diversos emuladores de terminal no Linux, como o
- gnome-terminal, o urxvt, o Xfce Terminal, o xterm, etc.
- \item para abrir o gnome-terminal, por exemplo, aperte alt-f2 e
- digite ``gnome-terminal''
- \vfill
- \begin{center}
- \begin{shell}[0.8]
- \usercmd{echo ``Olá mundo!''}
+ \item Um terminal atua como uma interface para entrada e saída de dados no computador.
+
+ \item Existem diversos emuladores de terminal no GNU/Linux, como o
+ gnome-terminal, o urxvt, o Xfce Terminal, o xterm, etc.
+ \item Para abrir o gnome-terminal, por exemplo, aperte alt-f2 e
+ digite ``gnome-terminal''
+ \vfill
+ \begin{center}
+ \begin{shell}[0.8]
+ \usercmd{echo ``Olá mundo!''}
\end{shell}
\end{center}
\end{itemize}
\end{figure}
\end{frame}
+\begin{frame}{Shell}
+ \begin{itemize}
+ \item {Programa de computador que oferece uma interface de interação
+ do usuário com o sistema, através de uma \emph{linha de comando}.}
+ \item {Interface poderosa, que oferece muita agilidade e controle
+ sobre a execução de programas}
+ \item {Permite executar programas, controlando a entrada e saída,
+ encadear a execução de programas, e \bf{scripting}.}
+ \item {Existem diversos shells para o GNU/Linux: sh, \bf{bash}, ksh, zsh,
+ csh, ...}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}{Por que usar linha de comando?}
+ \begin{itemize}
+ \item {Agilidade na execução de tarefas simples.}
+ \item {Scripting para agilizar execução de tarefas complexas.}
+ \item {\bf{Pleno controle sobre a execução do programa!}}
+ \item {Não ficar limitado por aquilo que é oferecido pela interface gráfica.}
+ \item {Porque é legal!}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}{Prompt}
+ \begin{center}
+ \begin{itemize}
+ \item Indica que o shell está pronto para receber um comando.
+ \end{itemize}
+ \begin{figure}[h]
+ \begin{shell}[0.8]
+ %TODO marcar usuario, nome da maquina, diretorio e comando
+ \usercmd[gabriel@argo]{cd $\mathtt{\sim}$/mc102}
+% \usercmd[-bash-4.2$]{}
+ \end{shell}
+ \end{figure}
+ \end{center}
+\end{frame}
+
\begin{frame}{Comandos}
\begin{figure}[h]
\centering
@@ -72,39 +118,13 @@
\end{frame}
-
-\begin{frame}{Elementos da linha de comando}
- \begin{figure}[h]
- \centering
+\begin{frame}{echo}
+ \begin{center}
\begin{shell}[0.8]
%TODO marcar usuario, nome da maquina, diretorio e comando
- \usercmd[bixo@maquina:$\mathtt{\sim}$/mc102]{comando}
+ \usercmd[gabriel@argo]{echo ``Bixos \the\year''}
\end{shell}
- \end{figure}
-\end{frame}
-
-\begin{frame}{Principais comandos}
- \begin{itemize}
- \item \emph{echo ``Bixos \the\year''} : Escreve na tela o argumento passado.
- \item \emph{ls} : Lista todos os arquivos do diretório atual.
- \item \emph{pwd} : Exibe o diretório atual
- \item \emph{cd} : Muda o diretório atual
- \item \emph{rm aluno.tx} : Remove o arquivo alunos.tx
- \item \emph{mkdir alunos}: Cria um diretório ``Alunos'' dentro do
- diretório atual.
- \end{itemize}
-\end{frame}
-
-\begin{frame}{ls}
- \begin{itemize}
- \item \emph{ls} : Lista todos os arquivos do diretório atual.
- \end{itemize}
- \begin{center}
- \begin{shell}[0.8]
- \usercmd{ls \\ calcI.pdf \;\; Desktop \;\; Documents \;\; \\ F129
- \;\;\;\;\;\;\; lab03.c \;\;\;\;\; MC102}
- \end{shell}
- \end{center}
+ \end{center}
\end{frame}
\begin{frame}{ls -a}
@@ -143,144 +163,102 @@
\end{frame}
\begin{frame}{cd}
- \begin{center}
- \begin{shell}[0.9]
- \begin{scriptsize}
- \usercmd{pwd\\ /home/bixo}\\
- \usercmd{ls\\ dir1 dir2 dir3}\\
- \usercmd{cd dir1}\\
- \usercmd{pwd\\ /home/bixo/dir1}\\
- \usercmd{cd ..}\\
- \usercmd{pwd\\ /home/bixo/dir1}\\
- \usercmd{cd dir2/subpasta}\\
- \usercmd{pwd\\ /home/bixo/dir2/subpasta}\\
- \usercmd{cd ../dir3}\\
- \usercmd{pwd\\ /home/bixo/dir3}
- \end{scriptsize}
- \end{shell}
- \end{center}
-\end{frame}
+ \begin{itemize}
+ \item Caminha pela árvore de diretórios.
+ \end{itemize}
-\begin{frame}{cd}
- \begin{center}
+ \begin{center}
\begin{shell}[0.8]
- \usercmd{pwd\\ /usr/lib/urxvt/perl}\\
- \usercmd{cd}\\
- \usercmd{pwd\\ /home/bixo}\\
- \usercmd{cd \~{}bixo2}\\
- \usercmd{pwd\\ /home/bixo2}
- \end{shell}
- \end{center}
+ %TODO marcar usuario, nome da maquina, diretorio e comando
+ \usercmd[gabriel@argo]{cd mc102}\\
+ \usercmd[gabriel@argo]{cd $\mathtt{\sim}$}\\
+ \usercmd[gabriel@argo]{cd /home/gabriel/}\\
+ \usercmd[gabriel@argo]{cd -}\\
+ \usercmd[gabriel@argo]{cd ..}\\
+ \end{shell}\\
+ \begin{itemize}
+ \item Verifique com pwd!
+ \end{itemize}
+ \end{center}
\end{frame}
-\begin{frame}{Principais comandos - 2}
+\begin{frame}{mkdir}
\begin{itemize}
- \item \emph{wget [remote\_file]} : Faz download do arquivo para a sua
- máquina.
- \item \emph{cp [origem] [destino]} : Copia um arquivo de um diretório para
- outro.
- \item \emph{mv [origem] [destino]} : Move um arquivo de um diretório para
- outro.
- \item \emph{cat [file]} : Imprime o arquivo na saída padrão
- \item \emph{grep [Keyword] [file]} : Imprime na saída padrão as linhas do
- arquivo [file] que contém as palavras chaves [Keyword]
+ \item Criar diretórios
\end{itemize}
+ \begin{center}
+ \begin{shell}[0.8]
+ \usercmd[gabriel@argo]{mkdir projeto1}\\
+ \end{shell}\\
+ \end{center}
\end{frame}
-\begin{frame}{cp}
- \begin{center}
+\begin{frame}{rm}
+ \begin{itemize}
+ \item Remover arquivos
+ \end{itemize}
+ \begin{center}
+ \begin{shell}[0.8]
+ \usercmd[gabriel@argo]{rm file1 file2 file3}\\
+ \usercmd[gabriel@argo]{rm -r projeto1}\\
+ \end{shell}\\
+ \begin{itemize}
+ \item Cuidado! Não existe ``lixeira'', uma vez removido não há um
+ mecanismo direto para desfazer.
+ \end{itemize}
+ \end{center}
+\end{frame}
+
+
+\begin{frame}{Movimentar arquivos}
+ \begin{itemize}
+ \item \emph{cp} : Copia um arquivo de um diretório para outro.
+ \begin{center}
\begin{shell}[0.8]
\usercmd{cp arquivo1 arquivo2}\\
- \comment{Copia recursivamente diretórios e seus arquivos}\\
\usercmd{cp -r dir1 dir2}
\end{shell}
\end{center}
-\end{frame}
-
-\begin{frame}{rm}
- \begin{itemize}
- \item Cuidado! Não existe ``lixeira'', uma vez removido não há um
- mecanismo direto para desfazer.
- \end{itemize}
- \begin{center}
+ \item \emph{mv} : Move um arquivo de um diretório para outro.
+ \begin{center}
\begin{shell}[0.8]
- \usercmd{rm arquivo}\\
- \comment{Remove recursivamente diretórios e seus arquivos}\\
- \usercmd{rm -r dir}
+ \usercmd{mv arquivo1 arquivo2}
\end{shell}
\end{center}
-\end{frame}
-
-\begin{frame}{Exercício - Comandos básicos}
- Utilizando o terminal e os comandos vistos execute o seguinte procedimento:
- \begin{itemize}
- \item Baixe para a sua home, via terminal, o arquivo:
- \url{http://www.students.ic.unicamp.br/\~ra116931/bixos.txt}
- \item Crie um diretório na sua \emph{home} chamada ``gpsl2013''.
- \item Copie o arquivo baixado para dentro da pasta recém-criada na sua
- \emph{home} e liste os arquivos da pasta para verificar que o arquivo foi
- criado.
- \item Navegue até a pasta e use cat para ler o conteúdo do arquivo.
- \item Use grep para encontrar referências a ``Monty Python'' no arquivo
- baixado.
- \end{itemize}
-\end{frame}
-
-\begin{frame}{diff}
- \begin{itemize}
- \item \emph{diff <original> <novo>}: usado para mostrar a diferença entre arquivos.
- \end{itemize}
- \begin{center}
+ \item \emph{wget} : Faz download do arquivo para a sua máquina.
+ \begin{center}
\begin{shell}[0.8]
- \usercmd{cat arquivo1\\ Este é um arquivo\\ Com algum conteúdo}\\
- \usercmd{cat arquivo2\\ Este é um arquivo\\ Mas esta linha é diferente\\ Com algum conteúdo}\\
- \usercmd{diff arquivo1 arquivo2\\
- 1a2\\
- > Mas esta linha é diferente}
+ \usercmd{wget http://www.gnu.org/}
\end{shell}
\end{center}
+ \end{itemize}
\end{frame}
-\begin{frame}{interpretando a saída do diff}
- \begin{center}
- \begin{shell}[0.8]
- \usercmd{diff arquivo1 arquivo2\\
- 1a2\\
- > Mas esta linha é diferente}
- \end{shell}
- \end{center}
+\begin{frame} {grep}
\begin{itemize}
- \item XaY: linhas foram adicionadas. Y é a linha no arquivo novo,
- e X é a linha anterior no arquivo original.
- \item XdY: linhas foram deletadas. X são as linhas no arquivo antigo que
- foram deletadas no arquivo novo.
- \item XcY: linhas foram mudadas. As linhas X foram mudadas paras as
- linhas Y do arquivo novo (mudança de conteúdo).
+ \item Imprime linhas de arquivo que correspondam a um padrão
\end{itemize}
+ \begin{shell}[0.95]
+ \usercmd{grep ``GNU'' free\_software.rules}\\
+ \usercmd{grep -i ``gNu Is Not'' whats\_gnu.rules}
+ \usercmd{grep -v ``windows'' good\_sw\_that.rules}
+ \end{shell}
+
\end{frame}
-\begin{frame}{diff unificado}
- \begin{center}
- \begin{shell}[1.0]
- \begin{footnotesize}
- \usercmd{diff -u arquivo1 arquivo2\\
- -{-}- arquivo12013-03-06 18:39:27.518342133 -0300\\
- +{+}+ arquivo22013-03-06 18:39:37.434955077 -0300\\
- @@ -1,2 +1,3 @@\\
- \phantom{ }Este é um arquivo\\
- +Mas esta linha é diferente\\
- \phantom{ }Com algum conteúdo}
- \end{footnotesize}
- \end{shell}
- \end{center}
+\begin{frame} {Entrada e saída padrão}
+ \begin{itemize}
+ \item{Arquivos pré-conectados à entrada e saída do seu programa.}
+ \item{stdin, stdout, stderr};
+ \item {fprintf (stderr, ``Ops! Não vou passar no Susy! '');}
+ \end{itemize}
+ \begin{figure}[h]
+ \includegraphics[scale=0.4]{../imagens/Stdstreams.pdf}
+ \end{figure}
\end{frame}
%% Redirecionamento de entrada e saída: Redirecionamento de entrada, pipes
\begin{frame}{Redirecionamento de I/O}
- A entrada e saída de programas podem ser redirecionadas de e para arquivos ou
- outros programas. Desta forma, podemos analisar a saída em editores de texto,
- mudar rapidamente os parâmetros de entrada, ou ainda encadear programas, no
- qual a saída de um é a entrada de outro.
\begin{center}
\begin{itemize}
\item Redirecionar a entrada a partir de um arquivo texto ``input.txt'':
@@ -297,38 +275,85 @@
\end{shell}
\begin{itemize}
- \item Redirecionar a saída de um programa para outro com pipe ``|'':
+ \item Redirecionar stdout para arquivo1 e stderr para arquivo2:
\end{itemize}
\begin{shell}[0.8]
- \usercmd{calc1 < in.tx | calc2}
+ \usercmd{calculator 1> arq1 2> arq2}
\end{shell}
+ \begin{itemize}
+ \item Append ao final do arquivo:
+ \end{itemize}
+ \begin{shell}[0.8]
+ \usercmd{calculator >{}> out.txt}
+ \end{shell}
\end{center}
-
\end{frame}
+\begin{frame} {Pipe - Encadeando programas}
+ \begin{itemize}
+ \item É possível redirecionar a saída de um programa para outro com pipe ``|'':\\
+ \end{itemize}
+ \begin{shell}[0.95]
+%% \usercmd{prog1 <in.f | prog2 | prog3 > out.f }\\
+ \usercmd{cat list\_of\_sw | grep ``GNU'' | less }\\
+ \usercmd{cat gnu\_packages | wc -l}
+ \end{shell}
+ \begin{figure}[h]
+ \includegraphics[scale=0.3]{../imagens/pipe.pdf}
+ \end{figure}
+
+\end{frame}
-\begin{frame}{Informações úteis}
+\begin{frame}{Exercício - Comandos básicos}
+ Utilizando o terminal e os comandos vistos execute o seguinte procedimento:
\begin{itemize}
- \item A tecla Tab auto-completa nome de programas, caminho para arquivos,
- etc.
- \item Para rodar um comando em modo de super-usuário, utilize o comando
- \emph{sudo}
- \item Existe também o comando \emph{man}. Ele recebe o nome de um programa
- como argumento e exibe o seu manual.
- \item Outra convenção muito útil é implementar textos de ajuda e de versão.
- Muitos programas implementam isso.
- \item O comando \emph{apropos [termo]} pesquisa uma palavra-chave nos arquivos
- do man.
+ \item \url{http://www.students.ic.unicamp.br/\~ra118077/star_wars_v.txt}
+
+ \item {Quantas falas LUKE tem no filme?}
+ \item {Quantas vezes a princesa LEIA fala o nome de Luke?}
+ \item { *spoiler alert* Descubra o número da linha em que
+ VADER revela seu segredo a LUKE?}
\end{itemize}
- \begin{center}
- \begin{shell}[0.8]
- \usercmd{ ls -{}-help}\\
- \usercmd{ ls -{}-version}\\
- \usercmd{ man ls }\\
- \usercmd{ apropos browser}
- \end{shell}
- \end{center}
+\end{frame}
+
+\begin{frame}{Scripting}
+ \begin{itemize}
+ \item {Automatizar tarefas repetitivas.}
+ \item {Não é compilado. O shell intrepreta os comandos dinamicamente.}
+ \item {suporta toda a sintaxe usual da linha de comando.}
+ \item {Linguagem de programação completa!}
+ \item {for, while, if-then-else, variaveis,...}
+
+ \end{itemize}
+\end{frame}
+
+
+\begin{frame}{SSH - Secure Shell}
+ \begin{itemize}
+ \item {Protocolo seguro para acesso remoto.}
+ \item {Permite executar programas e acessar seus dados em máquinas remotas.}
+ \item {O IC oferece uma máquina com acesso SSH para os alunos [user]@ssh.students.ic.unicamp.br}
+ \item {Você pode fazer tudo o que faria em um shell local:}
+ \begin{itemize}
+ \item Executar e desenvolver seus programas.
+ \item Imprimir
+ \item ...
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}{}
+ \begin{center}
+ \includegraphics[width=0.5\textwidth]{../imagens/lp-br-sp.png}
+
+ Gabriel Krisman Bertazi - krisman@libreplanetbr.org\\
+ Martin Ichilevici de Oliveira - martin@libreplanetbr.org\\
+ Sergio Durigan Junior - sergiodj@libreplanetbr.org\\
+
+ \vfill
+ libreplanet-br-sp@libreplanet.org || IRC: \#lp-br-sp (Freenode.net)
+ \end{center}
\end{frame}
\end{document}
diff --git a/imagens/Stdstreams.pdf b/imagens/Stdstreams.pdf
new file mode 100644
index 0000000..3b67049
--- /dev/null
+++ b/imagens/Stdstreams.pdf
Binary files differ
diff --git a/imagens/pipe.pdf b/imagens/pipe.pdf
new file mode 100644
index 0000000..61e7e53
--- /dev/null
+++ b/imagens/pipe.pdf
Binary files differ