├── _config.yml ├── files ├── exemplo.sh └── exemplo.in ├── unix.tar.gz ├── keynote ├── unix.key ├── unix.pdf └── handouts.pdf ├── roteiro ├── roteiro.pdf └── roteiro.tex ├── README.md └── html └── README.md /_config.yml: -------------------------------------------------------------------------------- 1 | theme: jekyll-theme-architect -------------------------------------------------------------------------------- /files/exemplo.sh: -------------------------------------------------------------------------------- 1 | echo "O conteúdo da sua variável de ambiente \$PATH é: $PATH" 2 | -------------------------------------------------------------------------------- /unix.tar.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leobezerra/minicurso-unix/master/unix.tar.gz -------------------------------------------------------------------------------- /keynote/unix.key: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leobezerra/minicurso-unix/master/keynote/unix.key -------------------------------------------------------------------------------- /keynote/unix.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leobezerra/minicurso-unix/master/keynote/unix.pdf -------------------------------------------------------------------------------- /keynote/handouts.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leobezerra/minicurso-unix/master/keynote/handouts.pdf -------------------------------------------------------------------------------- /roteiro/roteiro.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leobezerra/minicurso-unix/master/roteiro/roteiro.pdf -------------------------------------------------------------------------------- /files/exemplo.in: -------------------------------------------------------------------------------- 1 | Bem vindo ao minicurso de UNIX! 2 | 3 | Este é um minicurso piloto, com o objetivo de te ajudar a entender melhor sistemas UNIX e suas principais ferramentas. 4 | 5 | Neste minicurso, você entenderá como o sistema de arquivos do Linux é estruturado em diretórios e aprenderá a usar as seguintes ferramentas: 6 | - pwd 7 | - mkdir 8 | - cd 9 | - ls 10 | - touch 11 | - rm 12 | - cp 13 | - mv 14 | - ln 15 | - cat 16 | - less 17 | - head 18 | - tail 19 | - diff 20 | - gzip 21 | - tar 22 | - zip 23 | - grep 24 | - find 25 | - sort 26 | - unique 27 | - wc 28 | - cut 29 | - sed 30 | - ps 31 | - kill 32 | 33 | Para aprender a usar essas ferramentas, use este arquivo de teste para executar o roteiro básico disponibilizado no SIGAA. 34 | 35 | Lembre-se: quem testa os comandos aprende muito mais do que quem só assiste a uma palestra ou lê manuais. 36 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | **Instituto Metrópole Digital (IMD), Universidade Federal do Rio Grande do Norte (UFRN)** 2 | *Leonardo Bezerra (leobezerra at imd.ufrn.br)* 3 | 4 | --- 5 | 6 | # Bem vindo! 7 | 8 | 9 |
10 | 11 | --- 12 | 13 | ## Orientações gerais 14 | 15 | Este minicurso foi pensado para ajudar quem precisa de sistemas UNIX no dia a dia. 16 | 17 | O minicurso consiste de um roteiro prático de exercícios e de slides de consulta. 18 | 19 | O roteiro de exercícios está disponível em dois formatos: Markdown, que pode ser visualizado no browser, ou PDF, configurado para impressão. 20 | 21 | --- 22 | 23 | ## Escolha uma versão 24 | 25 | [Versão web](html) | [Versão offline](unix.tar.gz) 26 | 27 | --- 28 | -------------------------------------------------------------------------------- /html/README.md: -------------------------------------------------------------------------------- 1 | ## Roteiro básico 2 | 3 | Abaixo você encontrará a descrição de uma série de tarefas triviais presentes no cotidiano de quem trabalha com sistemas UNIX, organizados por tópicos. 4 | 5 | Caso tenha dúvida na utilização de algum comando, consulte seu manual ou a tabela de comandos úteis encontrada neste [link](http://cheatsheetworld.com/programming/unix-linux-cheat-sheet/). 6 | 7 | --- 8 | 9 | ## Introdução 10 | 11 | 12 | 13 | 14 | --- 15 | 16 | ## Slides 17 | 18 | Os slides que descrevem brevemente os comandos apresentados neste minicurso podem ser vistos abaixo, ou baixados [neste link](../keynote/handouts.pdf). 19 | 20 | 21 | 22 | --- 23 | 24 | # Exercícios 25 | 26 | Utilize os links abaixo para navegar pelos exercícios. 27 | 28 | 1. [Diretórios](#dirs) 29 | 1. [Arquivos](#files) 30 | 1. [Arquivos e fluxos](#streams) 31 | 1. [Compressão de arquivos](#compression) 32 | 1. [Busca](#seeking) 33 | 1. [Manipulação de fluxos](#manip) 34 | 1. [Processos](#processes) 35 | 1. [Permissões](#permissions) 36 | 1. [Executáveis](#running) 37 | 38 | --- 39 | 40 | ### Diretórios 41 | 42 | 1. Abra o terminal e verifique em qual pasta ele é inicializado. 43 | 1. Crie um diretório **minicursos** e um subdiretório **unix**. 44 | 1. Use o comando **ls** para verificar que o diretório e o subdiretório foram criados. 45 | 46 | **Dica** -- é possível criar um diretório e seu subdiretório com apenas uma chamada ao comando **mkdir**. Também é possível listar um diretório recursivamente utilizando o comando **ls**. 47 | 48 | [Voltar para os slides](#slides) 49 | 50 | --- 51 | 52 | ### Arquivos 53 | 54 | 1. Com o auxílio de um editor de texto, crie dois arquivos de nome **arquivo1.txt** e **arquivo2**, contendo, respectivamente, as frases "*Este é o arquivo 1.*" e "*Este é o arquivo 2.*". 55 | 1. Mova ambos os arquivos para o diretório **minicursos**. 56 | 1. Crie um arquivo vazio **vazio.txt** no subdiretório **unix**. 57 | 1. Copie o arquivo **arquivo2** para o subdiretório **unix**. 58 | 1. Renomeie o arquivo **arquivo2** contido no subdiretório **unix** para **nao-vazio**. 59 | 60 | [Voltar para os slides](#slides) 61 | 62 | --- 63 | 64 | ### Arquivos e fluxos 65 | 66 | 1. Baixe o arquivo [exemplo.in](../files/exemplo.in). 67 | 1. Crie um link simbólico chamado **exemplo** na pasta minicursos para o arquivo baixado no item anterior. 68 | 1. Visualize o conteúdo de **exemplo** sem usar um editor de texto. 69 | 1. Sem usar um editor de texto, copie as 5 primeiras linhas do arquivo apontado por **exemplo** para um novo arquivo **mini-exemplo.txt**, que deve ser criado dentro do subdiretório **unix**. 70 | 1. Sem usar um editor de texto, adicione as 5 últimas linhas do arquivo apontado por **exemplo** ao arquivo **mini-exemplo.txt**. 71 | 1. Gere um arquivo **mini-exemplo2.txt** idêntico ao arquivo **mini-exemplo.txt** sem usar os comandos **cp**, **mv**, **head**, **tail** ou um editor de texto. Assegure que os arquivos sejam idênticos sem usar um editor de texto. 72 | 73 | [Voltar para os slides](#slides) 74 | 75 | --- 76 | 77 | ### Compressão de arquivos 78 | 79 | 1. Comprima o arquivo **mini-exemplo.txt** usando compressão Gzip. 80 | 1. Compare os tamanhos dos arquivos **mini-exemplo.txt.gz** e **mini-exemplo2.txt**. 81 | 1. Acesse o diretório pai do diretório **minicursos**. 82 | 1. Crie um pacote **tar** sem compressão chamado **minicursos.tar**, contendo o diretório **minicursos**. 83 | 1. Crie um pacote **tar** com compressão de arquivos Gzip chamado **minicursos.tar.gz**, contendo o diretório **minicursos**. 84 | 1. Crie um pacote **tar** com compressão de arquivos XZ chamado **minicursos.tar.xz**, contendo o diretório **minicursos**. 85 | 1. Crie um pacote comprimido Zip chamado **minicursos.zip**, contendo o diretório **minicursos**. 86 | 1. Compare o tamanho dos diferentes arquivos de nome-base **minicursos**. 87 | 88 | **Dica --** para ver o tamanho de um arquivo, use uma das opções do comando **ls**. Para ver o tamanho de um diretório, consulte o manual do comando **du**. 89 | 90 | [Voltar para os slides](#slides) 91 | 92 | --- 93 | 94 | ### Busca 95 | 96 | 1. Busque no arquivo exemplo as palavras "*teste*" e "*testa*", sem usar um editor de texto. 97 | 1. Acesse sua pasta home (não confunda com o diretório **/home**). 98 | 1. Localize o arquivo cujo nome contenha a palavra **exemplo**. 99 | 1. Filtre a lista de ocorrências encontradas no item acima para mostrar apenas arquivos cuja extensão seja **txt**. 100 | 1. Busque, em todas as ocorrências encontradas no item acima, a palavra "*Este*". 101 | 102 | **Dica --** para executar o item 5, utilize o comando **xargs**. 103 | 104 | [Voltar para os slides](#slides) 105 | 106 | --- 107 | 108 | ### Manipulação de fluxos 109 | 110 | 1. Usando o arquivo **arquivo2** contido no diretório **minicursos** como base, gere um arquivo de nome **recortado.txt** no subdiretório **unix** contendo a frase "*Este é o 2.*". 111 | 1. Usando o arquivo **arquivo2** contido no diretório **minicursos** como base, gere um arquivo de nome **esfacelado.txt** no subdiretório **unix** contendo a frase "*Este arquivo*". 112 | 1. Usando o arquivo **arquivo2** contido no diretório **minicursos** como base, gere um arquivo de nome **tabulado.txt** no subdiretório **unix**, contendo o mesmo conteúdo de **arquivo2**, porém com separação de palavras por tabulação em vez de espaço. 113 | 1. Considerando o arquivo apontado por **exemplo**, liste em ordem alfabética os comandos aprendidos no minicurso. 114 | 1. Conte a quantidade de comandos identificados no item anterior. 115 | 116 | **Dica --** para executar o item 3, utilize o comando **tr**. 117 | 118 | [Voltar para os slides](#slides) 119 | 120 | --- 121 | 122 | ### Processos 123 | 124 | 1. Abra um editor de texto de sua preferência. 125 | 1. Identifique o código de processo da instância aberta do editor de texto. 126 | 1. Mate a instância aberta do editor de texto. 127 | 1. Liste, em ordem alfabética e sem repetições, os usuários que têm processos ativos no sistema. 128 | 1. Conte a quantidade de processos ativos iniciados pelo usuário **root**. 129 | 130 | [Voltar para os slides](#slides) 131 | 132 | --- 133 | 134 | ### Permissões 135 | 136 | 1. Crie um arquivo de nome **arquivo_restrito** e configure suas permissões para que ninguém possa utilizá-lo para leitura, escrita ou execução. Verifique se você consegue realizar alguma destas operações. 137 | 1. Crie um diretório de nome **dir_restrito** e configure suas permissões para que ninguém possa visualizar seu conteúdo. Verifique se você consegue visualizar seu conteúdo após esta operação. 138 | 1. Altere as permissões do diretório **dir_restrito** para que seu proprietário (você) possa navegá-lo, mas não possa criar arquivos nele. 139 | 140 | [Voltar para os slides](#slides) 141 | 142 | --- 143 | 144 | ### Executáveis 145 | 146 | 1. Baixe o arquivo [exemplo.sh](../files/exemplo.sh). Configure suas permissões para que você possa executá-lo. Teste sua execução. 147 | 1. Configure a variável **PATH** para poder executar o script acima sem precisar digitar seu caminho. Faça esta configuração de forma que apenas a sessão em uso do terminal tenha sua configuração alterada. 148 | 1. Inicie uma nova sessão do terminal (nova aba ou janela) e configure a variável **PATH** para poder executar o script acima sem precisar digitar seu caminho, mas de forma que qualquer nova sessão do terminal seja afetada. Teste esta configuração na tela já em uso do terminal e também em uma nova janela. 149 | 150 | [Voltar para os slides](#slides) 151 | 152 | -------------------------------------------------------------------------------- /roteiro/roteiro.tex: -------------------------------------------------------------------------------- 1 | %!TEX encoding = UTF-8 2 | \documentclass[a4paper,10pt,titlepage,twosided]{book} 3 | \usepackage[utf8]{inputenc} 4 | \usepackage{amssymb,amsmath} 5 | \usepackage{array} 6 | \usepackage{algorithm} 7 | \usepackage{algorithmic} 8 | \usepackage{graphicx} 9 | %\usepackage{subfig} 10 | \usepackage{lscape} 11 | \usepackage{xspace} 12 | \usepackage{setspace} 13 | \usepackage{scale} 14 | \usepackage{multirow} 15 | \usepackage{booktabs} 16 | \usepackage{pdfpages} 17 | \usepackage{pdflscape} 18 | \usepackage{subfig} 19 | \usepackage{array} 20 | \usepackage[sort&compress, numbers]{natbib} 21 | \usepackage{changepage} 22 | \usepackage{url} 23 | \usepackage{listings} 24 | \usepackage{soul} 25 | \usepackage{verbatimbox} 26 | \usepackage{chngcntr} 27 | \counterwithout{section}{chapter} 28 | 29 | \usepackage[portuguese, english]{babel} 30 | %\usepackage{anysize} 31 | %\marginsize{0cm}{0cm}{0cm}{0cm} 32 | \usepackage[tmargin=2cm,rmargin=2.8cm,lmargin=1cm, bmargin=3cm]{geometry} 33 | \usepackage[Sonny]{fncychap} 34 | \usepackage{drop} 35 | 36 | \ChTitleVar{\LARGE\sffamily\bfseries} 37 | % \ChRuleWidth{0.5pt} 38 | 39 | \let\origdoublepage\cleardoublepage 40 | \newcommand{\clearemptydoublepage}{% 41 | \clearpage 42 | {\pagestyle{empty}\origdoublepage}% 43 | } 44 | 45 | \newtheorem{definition}{Definition} 46 | \renewcommand{\algorithmicrequire}{\textbf{Input:}} 47 | \renewcommand{\algorithmicensure}{\textbf{Output:}} 48 | 49 | %\newcommand{\drop}[1]{{\fontsize{5cm}{1em}\selectfont\textsf #1}} 50 | 51 | \pagestyle{myheadings} 52 | \usepackage{geometry} 53 | %\geometry{bindingoffset=1cm} 54 | \setlength{\evensidemargin}{-2cm} 55 | \setlength{\oddsidemargin}{-1cm} 56 | %\let\tmp\oddsidemargin 57 | %\let\oddsidemargin\evensidemargin 58 | %\let\evensidemargin\tmp 59 | %\reversemarginpar 60 | 61 | \title{Minicurso de UNIX} 62 | \author{Leonardo Bezerra} 63 | \begin{document} 64 | 65 | \newcommand{\rights}{\footnote{Autor: Leonardo Bezerra.}} 66 | 67 | \definecolor{light-green}{RGB}{234, 247, 178} 68 | \sethlcolor{light-green} 69 | \newcommand{\gmm}{\texttt{g++}\xspace} 70 | \newcommand{\git}{\texttt{git}\xspace} 71 | 72 | \newenvironment{code} 73 | {\verbbox} 74 | {\endverbbox\par\bigskip\colorbox{light-green}{\parbox{\textwidth}{\theverbbox}}\par} 75 | 76 | \newenvironment{incode} 77 | {\verbbox} 78 | {\endverbbox\par\colorbox{light-green}{\parbox{\textwidth}{\theverbbox}}\par} 79 | 80 | \setcounter{page}{1} 81 | \setcounter{chapter}{1} 82 | \chapter*{Minicurso de UNIX\rights} 83 | 84 | \section{Roteiro básico} 85 | 86 | Abaixo você encontrará a descrição de uma série de tarefas triviais presentes no cotidiano de quem trabalha com sistemas UNIX. Caso tenha dúvida na utilização de algum comando, consulte seu manual ou a tabela de comandos úteis encontrada neste link: \url{http://cheatsheetworld.com/programming/unix-linux-cheat-sheet/}. 87 | 88 | \subsubsection{Diretórios} 89 | 90 | \begin{enumerate} 91 | \medskip 92 | \item Abra o terminal e verifique em qual pasta ele é inicializado. 93 | \item Crie um diretório \textsf{minicursos} e um subdiretório \textsf{unix}. 94 | \item Use o comando \texttt{ls} para verificar que o diretório e o subdiretório foram criados. 95 | \item[] \textbf{Extra -- é possível criar um diretório e seu subdiretório com apenas uma chamada ao comando \texttt{mkdir}. Também é possível listar um diretório recursivamente utilizando o comando \texttt{ls}.} 96 | \end{enumerate} 97 | 98 | \subsubsection{Arquivos} 99 | 100 | \begin{enumerate} 101 | \medskip 102 | \item Com o auxílio de um editor de texto, crie dois arquivos de nome \textsf{arquivo1.txt} e \textsf{arquivo2}, contendo, respectivamente, as frases ``\emph{Este é o arquivo 1.}" e ``\emph{Este é o arquivo 2.}". 103 | \item Mova ambos os arquivos para o diretório \textsf{minicursos}. 104 | \item Crie um arquivo vazio \textsf{vazio.txt} no subdiretório \textsf{unix}. 105 | \item Copie o arquivo \textsf{arquivo2} para o subdiretório \textsf{unix}. 106 | \item Renomeie o arquivo \textsf{arquivo2} contido no subdiretório \textsf{unix} para \textsf{nao-vazio}. 107 | \end{enumerate} 108 | 109 | \subsubsection{Arquivos e fluxos} 110 | 111 | \begin{enumerate} 112 | \medskip 113 | \item Baixe o arquivo \textsf{exemplo.in} disponibilizado no SIGAA. 114 | \item Crie um link simbólico chamado \textsf{exemplo} na pasta minicursos para o arquivo baixado no item anterior. 115 | \item Visualize o conteúdo de \textsf{exemplo} sem usar um editor de texto. 116 | \item Sem usar um editor de texto, copie as 5 primeiras linhas do arquivo apontado por \textsf{exemplo} para um novo arquivo \textsf{mini-exemplo.txt}, que deve ser criado dentro do subdiretório \textsf{unix}. 117 | \item Sem usar um editor de texto, adicione as 5 últimas linhas do arquivo apontado por \textsf{exemplo} ao arquivo \textsf{mini-exemplo.txt}. 118 | \item Gere um arquivo \textsf{mini-exemplo2.txt} idêntico ao arquivo \textsf{mini-exemplo.txt} sem usar os comandos \texttt{cp}, \texttt{mv}, \texttt{head}, \texttt{tail} ou um editor de texto. Assegure que os arquivos sejam idênticos sem usar um editor de texto. 119 | \end{enumerate} 120 | 121 | \subsubsection{Compressão de arquivos} 122 | 123 | \begin{enumerate} 124 | \medskip 125 | \item Comprima o arquivo \textsf{mini-exemplo.txt} usando compressão Gzip. 126 | \item Compare os tamanhos dos arquivos \textsf{mini-exemplo.txt.gz} e \textsf{mini-exemplo2.txt}. 127 | \item Acesse o diretório pai do diretório \textsf{minicursos}. 128 | \item Crie um pacote \textsf{tar} sem compressão chamado \textsf{minicursos.tar}, contendo o diretório \textsf{minicursos}. 129 | \item Crie um pacote \textsf{tar} com compressão de arquivos Gzip chamado \textsf{minicursos.tar.gz}, contendo o diretório \textsf{minicursos}. 130 | \item Crie um pacote \textsf{tar} com compressão de arquivos XZ chamado \textsf{minicursos.tar.xz}, contendo o diretório \textsf{minicursos}. 131 | \item Crie um pacote comprimido Zip chamado \textsf{minicursos.zip}, contendo o diretório \textsf{minicursos}. 132 | \item Compare o tamanho dos diferentes arquivos de nome-base \textsf{minicursos}. 133 | \item[] \textbf{Extra -- para ver o tamanho de um arquivo, use uma das opções do comando \texttt{ls}. Para ver o tamanho de um diretório, consulte o manual do comando \texttt{du}.} 134 | \end{enumerate} 135 | 136 | \subsubsection{Busca} 137 | 138 | \begin{enumerate} 139 | \medskip 140 | \item Busque no arquivo exemplo as palavras ``\emph{teste}" e ``\emph{testa}", sem usar um editor de texto. 141 | \item Acesse sua pasta home (não confunda com o diretório \texttt{/home}). 142 | \item Localize o arquivo cujo nome contenha a palavra \textsf{exemplo}. 143 | \item Filtre a lista de ocorrências encontradas no item acima para mostrar apenas arquivos cuja extensão seja \texttt{txt}. 144 | \item Busque, em todas as ocorrências encontradas no item acima, a palavra ``\emph{Este}". 145 | \item[] \textbf{Extra -- para executar o item 5, utilize o comando \texttt{xargs}.} 146 | \end{enumerate} 147 | 148 | \subsubsection{Manipulação de fluxos} 149 | 150 | \begin{enumerate} 151 | \medskip 152 | \item Usando o arquivo \textsf{arquivo2} contido no diretório \textsf{minicursos} como base, gere um arquivo de nome \textsf{recortado.txt} no subdiretório \textsf{unix} contendo a frase ``\emph{Este é o 2.}". 153 | \item Usando o arquivo \textsf{arquivo2} contido no diretório \textsf{minicursos} como base, gere um arquivo de nome \textsf{esfacelado.txt} no subdiretório \textsf{unix} contendo a frase ``\emph{Este arquivo}". 154 | \item Usando o arquivo \textsf{arquivo2} contido no diretório \textsf{minicursos} como base, gere um arquivo de nome \textsf{tabulado.txt} no subdiretório \textsf{unix}, contendo o mesmo conteúdo de \textsf{arquivo2}, porém com separação de palavras por tabulação em vez de espaço. 155 | \item Considerando o arquivo apontado por \textsf{exemplo}, liste em ordem alfabética os comandos aprendidos no minicurso. 156 | \item Conte a quantidade de comandos identificados no item anterior. 157 | \item[] \textbf{Extra -- para executar o item 3, utilize o comando \texttt{tr}.} 158 | \end{enumerate} 159 | 160 | \subsubsection{Processos} 161 | 162 | \begin{enumerate} 163 | \medskip 164 | \item Abra um editor de texto de sua preferência. 165 | \item Identifique o código de processo da instância aberta do editor de texto. 166 | \item Mate a instância aberta do editor de texto. 167 | \item Liste, em ordem alfabética e sem repetições, os usuários que têm processos ativos no sistema. 168 | \item Conte a quantidade de processos ativos iniciados pelo usuário \textsf{root}. 169 | \end{enumerate} 170 | 171 | \subsubsection{Permissões} 172 | 173 | \begin{enumerate} 174 | \medskip 175 | \item Crie um arquivo de nome \textsf{arquivo\_restrito} e configure suas permissões para que ninguém possa utilizá-lo para leitura, escrita ou execução. Verifique se você consegue realizar alguma destas operações. 176 | \item Crie um diretório de nome \textsf{dir\_restrito} e configure suas permissões para que ninguém possa visualizar seu conteúdo. Verifique se você consegue visualizar seu conteúdo após esta operação. 177 | \item Altere as permissões do diretório \textsf{dir\_restrito} para que seu proprietário (você) possa navegá-lo, mas não possa criar arquivos nele. 178 | \end{enumerate} 179 | 180 | \subsubsection{Executáveis} 181 | 182 | \begin{enumerate} 183 | \item Baixe o arquivo \textsf{exemplo.sh}, disponível no SIGAA. Configure suas permissões para que você possa executá-lo. Teste sua execução. 184 | \item Configure a variável \texttt{PATH} para poder executar o script acima sem precisar digitar seu caminho. Faça esta configuração de forma que apenas a sessão em uso do terminal tenha sua configuração alterada. 185 | \item Inicie uma nova sessão do terminal (nova aba ou janela) e configure a variável \texttt{PATH} para poder executar o script acima sem precisar digitar seu caminho, mas de forma que qualquer nova sessão do terminal seja afetada. Teste esta configuração na tela já em uso do terminal e também em uma nova janela. 186 | \end{enumerate} 187 | 188 | \end{document} 189 | 190 | 191 | --------------------------------------------------------------------------------