Shell Basics

Matilde Bravo

Introdução

Shell

Interpretador de comandos que permite a comunicação com o Sistema Operativo

e.g: Bash, Zsh

Terminal

Interface que permite utilizar a Shell

e.g: Konsole, GNOME Terminal

Basic Commands

File tree example

. simboliza a diretoria atual

.
├── ficheiro1
├── ficheiro2
├── ficheiro3
├── ficheiro4
└── universidade
    └── 1ano1sem
        ├── Algebra
        ├── Calculo
        ├── LI1
        ├── PF
        ├── TMD
        └── Opcao_UMinho

ls - List files and directories

$ ls
ficheiro1 ficheiro2 ficheiro3 ficheiro4 universidade
$ ls -l
total 8
drwxr-xr-x 3 matilde matilde 4096 Nov 25 17:22 universidade
-rw-r--r-- 1 matilde matilde    4 Nov 24 21:28 ficheiro1
-rw-r--r-- 1 matilde matilde    0 Nov 24 21:16 ficheiro2
-rw-r--r-- 1 matilde matilde    0 Nov 24 21:16 ficheiro3
-rw-r--r-- 1 matilde matilde    0 Nov 24 21:16 ficheiro4

$ ls -la # ls -l -a
total 44
drwx------ 5 matilde matilde 4096 Nov 25 17:29 .
drwxr-xr-x 4 root    root    4096 Nov 24 21:15 ..
-rw------- 1 matilde matilde  843 Nov 25 10:03 .bash_history
-rw-r--r-- 1 matilde matilde   21 Aug  9 17:27 .bash_logout
-rw-r--r-- 1 matilde matilde   57 Aug  9 17:27 .bash_profile
-rw-r--r-- 1 matilde matilde 3280 Nov 25 17:21 .bashrc
-rw-r--r-- 1 matilde matilde    4 Nov 24 21:28 ficheiro1
-rw-r--r-- 1 matilde matilde    0 Nov 24 21:16 ficheiro2
-rw-r--r-- 1 matilde matilde    0 Nov 24 21:16 ficheiro3
-rw-r--r-- 1 matilde matilde    0 Nov 24 21:16 ficheiro4
drwxr-xr-x 2 matilde matilde 4096 Nov 24 21:32 .ghc
-rw------- 1 matilde matilde   32 Nov 25 09:49 .lesshst
drwx------ 3 matilde matilde 4096 Nov 25 09:47 .local
drwxr-xr-x 3 matilde matilde 4096 Nov 25 17:22 universidade

man - Manual pages

$ man ls
NAME
       ls - list directory contents

SYNOPSIS
       ls [OPTION]... [FILE]...

DESCRIPTION:
 -a, --all
        do not ignore entries starting with .

 -l     use a long listing format

 -t     sort by time, newest first; see --time

 -s, --size
        print the allocated size of each file, in blocks

  -X    sort alphabetically by entry extension

cd - Change directory

$ cd universidade
$ ls
1ano1sem
$ cd 1ano1sem/PF

Regressa uma diretoria

$ cd ..

Regressa à home do utilizador /home/matilde

$ cd ~ # ou apenas cd

/ representa a diretoria root

Relative vs absolute paths

Caminho relativo de 1ano1sem para LI1

$ cd LI1

Caminho relativo de LI1 para PF

$ cd ../PF

Caminho relativo de LI1 para universidade

$ cd ../../

Caminho absoluto até à diretoria universidade

$ cd /home/matilde/universidade

É equivalente a :

$ cd ~/universidade

pwd - Print Working Directory

Assumindo que fizemos cd para a diretoria PF

$ pwd
/home/matilde/universidade/1ano1sem/PF

Creating, deleting and displaying files

mkdir - Make directory

$ mkdir series
$ mkdir series/mr_robot/season1
  mkdir: cannot create directory ‘series/mr_robot/season1’:
  No such file or directory
$ mkdir -p series/mr_robot/season1

touch - Create empty file

touch notes

cat - Display files

$ cat ficheiro1
ola
$ cat notes

cp - Copy

Se estivermos na nossa home, neste caso, /home/matilde

$ cp ficheiro1 universidade

Alternativamente, podemos utilizar o path absoluto

$ cp ~/ficheiro1 ~/universidade

Copiar recursivamente para a diretoria atual

$ cp -r ~/universidade/1ano1sem .

mv - Move (or rename)

Se estivermos na diretoria ~

$ mv ficheiro1 universidade/1ano1sem/PF

Mudar o nome de uma diretoria

$ mv universidade uni

rm - Remove

$ rm ~/universidade/1ano1sem/PF/ficheiro1
$ rm  ~/universidade/1ano1sem/LI1
  rm: cannot remove 'universidade/1ano1sem/LI1/': Is a directory

Para apagar uma diretoria temos que remover recursivamente

$ rm  -r ~/universidade/1ano1sem/LI1

Para forçar

$ rm  -rf ~/universidade/1ano1sem/LI1

Redirection and Pipes

Output redirection

Apresentar texto

$ echo "Hello World"
Hello World

Adicionar texto a um ficheiro (overwrite)

$ echo "Hello World" > ficheiro1

Acrescentar texto a um ficheiro (append)

$ echo "Goodbye" >> ficheiro1
$ cat ficheiro1
Hello World
Goodbye

Input redirection

Fornecer o conteúdo de um ficheiro como input

$ cat < ficheiro1
Hello World
Goodbye

Pipes

Conta o número de ficheiros (não escondidos)

$ ls | wc -l
5

Mostra o nome dos dois primeiros ficheiros (alfabeticamente)

$ ls | head -2
ficheiro1
ficheiro2

Mostra todos os ficheiros com a palavra ‘ficheiro’ no nome

$ ls | grep "ficheiro"
ficheiro1
ficheiro2
ficheiro3
ficheiro4

Mostra o número de caracteres da ultima linha do ficheiro1

$ cat ficheiro1 | tail -1 | wc -m
8

Mostra o que está antes do caracter ‘-’ na string fornecida

$ echo "Shell-Basics" | cut -d '-' -f1
Shell

Installing

Package Manager

  • apt/apt-get (e.g: Ubuntu,PopOS)
  • pacman (eg: Manjaro)

Install a package

$ sudo apt install curl
$ sudo pacman -S curl

Update Database

$ sudo apt update
$ sudo pacman -Syy

Upgrade

$ sudo apt upgrade
$ sudo pacman -Syu

List installed packages

$ sudo apt list --installed
$ sudo pacman -Qe

Web transfer

$ curl "https://cesium.di.uminho.pt"
$ curl "https://cesium.di.uminho.pt" > file
$ curl "https://cesium.di.uminho.pt" | grep 'estudantes'
$ wget "https://bit.ly/2HNtDEN" -o cesiumlogo.png

Miscellaneous

Alias

$ alias pls='sudo'
$ alias li='cd ~/universidade/1ano1sem/li'
$ alias gc='git commit -m'

Globbing

Mostra todos os ficheiros que terminam em .hs

$ ls *.hs

Copia todos os ficheiros da diretoria atual para a new_directory

$ cp * new_directory

Apaga todos os ficheiros começados por ‘ficheiro’

$ rm ficheiro*

Operators

git commit -m "new commit" && git push
cd ~/universidade/1ano1sem/PF ; code ficha1
cd ~/universidade || cd ~/uni

Finding

find . -name ficheiro1
./ficheiro1
find . -name "ficheiro*"
./ficheiro3
./ficheiro1
./ficheiro2
./ficheiro4
find ~/Pictures -name "*.jpg"

Grep

-n Show line number
-v Select non matching lines
-w Select exact matches
-i Ignore case distinctions


$ grep -ni 'goodbye' ficheiro1
2:Goodbye

Useful Tips

  • Navegar histórico com e
  • Tab completion
  • CTRL-L ou clear para limpar o ecrã
  • Reverse search com CTRL-R
  • !! para repetir o comando anterior (eg: sudo !!)

Questões