Linux Professional Institute Learning Logo.
Ir para o conteúdo principal
  • Home
    • Todos os recursos
    • LPI Materiais Didáticos
    • Colabore Conosco
    • Publishing Partners
    • Seja um Publishing Partner
    • Quem Somos
    • FAQ
    • Colaboradores
    • Contato
  • LPI.org
2.4 Lição 1
Tópico 1: A comunidade Linux e a carreira Open Source
1.1 A evolução do Linux e sistemas operacionais populares
  • 1.1 Lição 1
1.2 Principais Aplicações Open Source
  • 1.2 Lição 1
1.3 Entendendo o Software Open Source e suas Licenças
  • 1.3 Lição 1
1.4 Habilidades ICT e trabalhando no Linux
  • 1.4 Lição 1
Tópico 2: Encontrando seu caminho em um Sistema Linux
2.1 O básico sobre a linha de comando
  • 2.1 Lição 1
  • 2.1 Lição 2
2.2 Usando a linha de comando para conseguir ajuda
  • 2.2 Lição 1
2.3 Usando diretórios e listando arquivos
  • 2.3 Lição 1
  • 2.3 Lição 2
2.4 Criando, Movendo e Deletando Arquivos
  • 2.4 Lição 1
Tópico 3: O Poder da Linha de Comando
3.1 Empacotando arquivos na linha de comando
  • 3.1 Lição 1
3.2 Pesquisando e extraindo dados de arquivos
  • 3.2 Lição 1
  • 3.2 Lição 2
3.3 Transformando comandos em Scripts
  • 3.3 Lição 1
  • 3.3 Lição 2
Tópico 4: O Sistema Operacional Linux
4.1 Escolhendo um Sistema Operacional
  • 4.1 Lição 1
4.2 Entendendo o Hardware do Computador
  • 4.2 Lição 1
4.3 Onde os dados são armazenados
  • 4.3 Lição 1
  • 4.3 Lição 2
4.4 Seu Computador na Rede
  • 4.4 Lição 1
Tópico 5: Segurança e Permissões de Arquivos
5.1 Segurança Básica e Identificação de Tipos de Usuários
  • 5.1 Lição 1
5.2 Criando Usuários e Grupos
  • 5.2 Lição 1
5.3 Gerenciando permissões e donos de arquivos
  • 5.3 Lição 1
5.4 Diretórios e arquivos especiais
  • 5.4 Lição 1
How to get certified
  1. Tópico 2: Encontrando seu caminho em um Sistema Linux
  2. 2.4 Criando, Movendo e Deletando Arquivos
  3. 2.4 Lição 1

2.4 Lição 1

Certificação:

Linux Essentials

Versão:

1.6

Tópico:

2 Como se orientar em um sistema Linux

Objetivo:

2.4 Criar, mover e remover arquivos

Lição:

1 de 1

Introdução

Esta lição aborda o gerenciamento de arquivos e diretórios no Linux usando ferramentas de linha de comando.

Um arquivo é uma coleção de dados com um nome e um conjunto de atributos. Se, por exemplo, você transferisse algumas fotos de seu telefone para um computador e lhes desse nomes descritivos, você teria uma porção de arquivos de imagem no computador. Esses arquivos têm atributos, como a data e hora em que o arquivo foi acessado ou modificado pela última vez.

Um diretório é um tipo especial de arquivo usado para organizar arquivos. Uma boa maneira de pensar em diretórios é compará-los às pastas suspensas usadas para organizar papéis em um gaveteiro metálico. Porém, ao contrário das pastas de documentos em papel, podemos facilmente colocar diretórios dentro de outros diretórios.

A linha de comando é a maneira mais eficaz de gerenciar arquivos em um sistema Linux. As ferramentas da linha de comando e do shell têm recursos que tornam o uso da linha de comando mais rápido e fácil do que num gerenciador de arquivos gráfico.

Nesta seção, usaremos os comandos ls, mv, cp, pwd, find, touch, rm, rmdir, echo, cat e mkdir para gerenciar e organizar arquivos e diretórios.

Maiúsculas e minúsculas

Ao contrário do Microsoft Windows, os nomes de arquivos e diretórios nos sistemas Linux diferenciam maiúsculas de minúsculas. Isso significa que os nomes /etc/ e /ETC/ designam diretórios diferentes. Experimente os seguintes comandos:

$ cd /
$ ls
bin   dev  home  lib64  mnt  proc  run   srv  tmp  var
boot  etc  lib   media  opt  root  sbin  sys  usr
$ cd ETC
bash: cd: ETC: No such file or directory
$ pwd
/
$ cd etc
$ pwd
/etc

O pwd mostra o diretório em que você está no momento. Como vemos, tentar mudar para /ETC não funcionou, pois esse diretório não existe. Mas quando mudamos para o diretório /etc, que existe, a operação foi bem-sucedida.

Criando diretórios

O comando mkdir é usado para criar diretórios.

Vamos criar um novo diretório dentro do nosso diretório pessoal:

$ cd ~
$ pwd
/home/user
$ ls
Desktop  Documents  Downloads
$ mkdir linux_essentials-2.4
$ ls
Desktop  Documents  Downloads  linux_essentials-2.4
$ cd linux_essentials-2.4
$ pwd
/home/emma/linux_essentials-2.4

Ao longo de toda esta lição, todos os comandos serão dados neste diretório ou em um de seus subdiretórios.

Para retornar facilmente ao diretório da lição a partir de qualquer outra posição em seu sistema de arquivos, use o comando:

$ cd ~/linux_essentials-2.4

O shell interpreta o caracter ~ como seu diretório inicial (home).

Quando estiver no diretório da lição, crie mais alguns diretórios para usar nos exercícios. Podemos adicionar todos os nomes de diretório, separados por espaços, ao mkdir:

$ mkdir creating moving copying/files copying/directories deleting/directories deleting/files globs
mkdir: cannot create directory ‘copying/files’: No such file or directory
mkdir: cannot create directory ‘copying/directories’: No such file or directory
mkdir: cannot create directory ‘deleting/directories’: No such file or directory
mkdir: cannot create directory ‘deleting/files’: No such file or directory
$ ls
creating  globs  moving

Observe a mensagem de erro e que apenas moving, globs e creating foram criados. Os diretórios copying e deleting ainda não existem. O mkdir, por padrão, não cria um diretório dentro de um diretório que não existe. A opção -p ou --parents instrui o mkdir a criar diretórios pai caso eles não existam. Experimente o mesmo comando mkdir com a opção -p:

$ mkdir -p creating moving copying/files copying/directories deleting/directories deleting/files globs

Desta vez, não apareceu nenhuma mensagem de erro. Vamos ver quais diretórios existem agora:

$ find
.
./creating
./moving
./globs
./copying
./copying/files
./copying/directories
./deleting
./deleting/directories
./deleting/files

O programa find é geralmente usado para procurar arquivos e diretórios, mas quando não definimos nenhuma opção, ele mostra uma lista de todos os arquivos, diretórios e subdiretórios do seu diretório atual.

Tip

Ao listar o conteúdo de um diretório com ls, as opções -t e -r são particularmente úteis. Elas ordenam a saída por tempo (-t) e invertem a ordem de classificação (-r). Nesse caso, os arquivos mais recentes estarão na parte inferior da saída.

Criando arquivos

Normalmente, os arquivos são criados pelos programas que trabalham com os dados armazenados nos arquivos. Um arquivo vazio pode ser criado usando o comando touch. Se executarmos o touch em um arquivo existente, o conteúdo do arquivo não será alterado, mas o registro de data e hora de modificação do arquivo será atualizado.

Execute o seguinte comando para criar alguns arquivos para a lição de globbing:

$ touch globs/question1 globs/question2012 globs/question23 globs/question13 globs/question14
$ touch globs/star10 globs/star1100 globs/star2002 globs/star2013

Em seguida, vamos verificar se todos os arquivos existem no diretório globs:

$ cd globs
$ ls
question1   question14    question23  star1100  star2013
question13  question2012  star10      star2002

Viu como o touch criou os arquivos? Podemos visualizar o conteúdo de um arquivo de texto com o comando cat. Experimente em um dos arquivos que acabamos de criar:

$ cat question14

Como touch cria arquivos vazios, não devem aparecer resultados. Podemos usar echo com > para criar arquivos de texto simples. Experimente:

$ echo hello > question15
$ cat question15
hello

echo exibe texto na linha de comando. O caractere > instrui o shell a escrever a saída de um comando no arquivo especificado, em vez do terminal. Isso faz com que a saída de echo, neste caso hello, seja gravada no arquivo question15. Isso não é específico ao echo, podendo ser usado com qualquer comando.

Warning

Cuidado ao usar >! Se já existir um arquivo com aquele nome, ele será sobrescrito!

Renomeando arquivos

O comando mv serve para mover e renomear arquivos.

Defina moving como seu diretório de trabalho:

$ cd ~/linux_essentials-2.4/moving

Crie alguns arquivos para praticar. Neste momento, você já deve estar familiarizado com estes comandos:

$ touch file1 file22
$ echo file3 > file3
$ echo file4 > file4
$ ls
file1  file22  file3  file4

Suponha que file22 seja um erro de digitação; o correto seria file2. Corrija o nome com o comando mv. Ao renomear um arquivo, o primeiro argumento é o nome atual, o segundo é o novo nome:

$ mv file22 file2
$ ls
file1  file2  file3  file4

Tenha cuidado ao usar o comando mv. Se o novo nome já estiver atribuído a um arquivo existente, ele será sobrescrito. Vamos testar com file3 e file4:

$ cat file3
file3
$ cat file4
file4
$ mv file4 file3
$ cat file3
file4
$ ls
file1  file2  file3

Note que o conteúdo de file3 agora está em file4. Use a opção -i para que mv avise caso você esteja prestes a sobrescrever um arquivo existente. Experimente:

$ touch file4 file5
$ mv -i file4 file3
mv: overwrite ‘file3’? y

Movendo arquivos

Os arquivos são movidos de um diretório para outro com o comando mv.

Crie alguns diretórios para os quais moveremos arquivos:

$ cd ~/linux_essentials-2.4/moving
$ mkdir dir1 dir2
$ ls
dir1  dir2  file1  file2  file3  file5

Mova file1 para dir1:

$ mv file1 dir1
$ ls
dir1  dir2  file2  file3  file5
$ ls dir1
file1

Observe como o último argumento para mv é o diretório de destino. Sempre que o último argumento para mv for um diretório, os arquivos serão movidos para ele. É possivel especificar diversos arquivos em um único comando mv:

$ mv file2 file3 dir2
$ ls
dir1  dir2  file5
$ ls dir2
file2  file3

Também podemos usar o mv para mover e renomear diretórios. Renomeie dir1 como dir3:

$ ls
dir1  dir2  file5
$ ls dir1
file1
$ mv dir1 dir3
$ ls
dir2  dir3  file5
$ ls dir3
file1

Excluindo arquivos e diretórios

O comando rm serve para excluir arquivos e diretórios, ao passo que o comando rmdir pode excluir apenas diretórios. Vamos limpar o diretório moving excluindo file5:

$ cd ~/linux_essentials-2.4/moving
$ ls
dir2  dir3  file5
$ rmdir file5
rmdir: failed to remove ‘file5’: Not a directory
$ rm file5
$ ls
dir2  dir3

Por padrão, o rmdir pode excluir apenas diretórios vazios; portanto, tivemos de usar rm para excluir um arquivo comum. Tente excluir o diretório deleting:

$ cd ~/linux_essentials-2.4/
$ ls
copying  creating  deleting  globs  moving
$ rmdir deleting
rmdir: failed to remove ‘deleting’: Directory not empty
$ ls -l deleting
total 0
drwxrwxr-x. 2 emma emma 6 Mar 26 14:58 directories
drwxrwxr-x. 2 emma emma 6 Mar 26 14:58 files

Como vimos, o rmdir se recusa a excluir um diretório que não esteja vazio. Use rmdir para remover um dos subdiretórios vazios do diretório deleting:

$ ls -a deleting/files
.  ..
$ rmdir deleting/files
$ ls -l deleting
directories

Excluir um grande número de arquivos ou estruturas de diretórios profundas, com muitos subdiretórios, pode parecer uma tarefa entediante, mas na verdade é fácil. Por padrão, o rm funciona apenas em arquivos regulares. A opção -r é usada para anular esse comportamento. Tenha cuidado, rm -r pode acabar sendo um tiro no pé! Quando usamos a opção -r, o rm não somente exclui qualquer diretório, como também tudo o que estiver dentro desse diretório, incluindo os subdiretórios e seu conteúdo. Veja você mesmo como o rm -r funciona:

$ ls
copying  creating  deleting  globs  moving
$ rm deleting
rm: cannot remove ‘deleting’: Is a directory
$ ls -l deleting
total 0
drwxrwxr-x. 2 emma emma 6 Mar 26 14:58 directories
$ rm -r deleting
$ ls
copying  creating  globs  moving

Percebeu que deleting se foi, mesmo não estando vazio? Como o mv, o rm tem uma opção -i para exibir um aviso antes de executar qualquer ação. Use rm -ri para remover os diretórios da seção moving que não forem mais necessários:

$ find
.
./creating
./moving
./moving/dir2
./moving/dir2/file2
./moving/dir2/file3
./moving/dir3
./moving/dir3/file1
./globs
./globs/question1
./globs/question2012
./globs/question23
./globs/question13
./globs/question14
./globs/star10
./globs/star1100
./globs/star2002
./globs/star2013
./globs/question15
./copying
./copying/files
./copying/directories
$ rm -ri moving
rm: descend into directory ‘moving’? y
rm: descend into directory ‘moving/dir2’? y
rm: remove regular empty file ‘moving/dir2/file2’? y
rm: remove regular empty file ‘moving/dir2/file3’? y
rm: remove directory ‘moving/dir2’? y
rm: descend into directory ‘moving/dir3’? y
rm: remove regular empty file ‘moving/dir3/file1’? y
rm: remove directory ‘moving/dir3’? y
rm: remove directory ‘moving’? y

Copiando arquivos e diretórios

O comando cp é usado para copiar arquivos e diretórios. Copie alguns arquivos para o diretório copying:

$ cd ~/linux_essentials-2.4/copying
$ ls
directories  files
$ cp /etc/nsswitch.conf files/nsswitch.conf
$ cp /etc/issue /etc/hostname files

Se o último argumento for um diretório, o cp criará uma cópia dos argumentos anteriores dentro do diretório. Como no caso de mv, vários arquivos podem ser especificados ao mesmo tempo, desde que o destino seja um diretório.

Quando os dois operandos de cp são arquivos e os dois arquivos existem, o cp sobrescreve o segundo arquivo com uma cópia do primeiro arquivo. Para comprovar, vamos substituir o arquivo issue pelo arquivo hostname:

$ cd ~/linux_essentials-2.4/copying/files
$ ls
hostname  issue  nsswitch.conf
$ cat hostname
mycomputer
$ cat issue
Debian GNU/Linux 9 \n \l

$ cp hostname issue
$ cat issue
mycomputer

Agora, vamos tentar criar uma cópia do diretório files dentro do diretório directory:

$ cd ~/linux_essentials-2.4/copying
$ cp files directories
cp: omitting directory ‘files’

Como vemos, o cp, por padrão, só funciona em arquivos individuais. Para copiar um diretório, usamos a opção -r. Lembre-se de que a opção -r fará com que cp também copie o conteúdo do diretório que está sendo copiado:

$ cp -r files directories
$ find
.
./files
./files/nsswitch.conf
./files/fstab
./files/hostname
./directories
./directories/files
./directories/files/nsswitch.conf
./directories/files/fstab
./directories/files/hostname

Percebeu que, quando um diretório existente é usado como destino, o cp cria uma cópia do diretório de origem dentro dele? Se o destino não existir, ele será criado e preenchido com o conteúdo do diretório de origem:

$ cp -r files files2
$ find
.
./files
./files/nsswitch.conf
./files/fstab
./files/hostname
./directories
./directories/files
./directories/files/nsswitch.conf
./directories/files/fstab
./directories/files/hostname
./files2
./files2/nsswitch.conf
./files2/fstab
./files2/hostname

Globbing

Costumamos chamar de globbing uma linguagem simples de correspondência de padrões. Os shells da linha de comando nos sistemas Linux usam essa linguagem para buscar grupos de arquivos cujos nomes correspondam a um padrão específico. O POSIX.1-2017 especifica os seguintes padrões para a correspondência de caracteres:

*

Corresponde a qualquer número de quaisquer caracteres, incluindo nenhum caractere

?

Corresponde a qualquer caractere

[]

Corresponde a uma classe de caracteres

Em bom português, isso significa que você pode dizer ao seu shell para procurar por um padrão, em vez de uma sequência literal de texto. Geralmente, os usuários do Linux especificam diversos arquivos com um glob em vez de digitar o nome de cada arquivo. Execute os seguintes comandos:

$ cd ~/linux_essentials-2.4/globs
$ ls
question1   question14  question2012  star10    star2002
question13  question15  question23    star1100  star2013
$ ls star1*
star10  star1100
$ ls star*
star10  star1100  star2002  star2013
$ ls star2*
star2002  star2013
$ ls star2*2
star2002
$ ls star2013*
star2013

O shell expande * para qualquer número de qualquer coisa, e assim ele interpreta star* como sendo qualquer coisa, dentro do contexto relevante, que comece com star. Quando você executa o comando ls star*, o shell não executa o programa ls com um argumento star*, mas sim procura por arquivos no diretório atual que correspondam ao padrão star*(incluindo apenas star), e transforma cada arquivo correspondente ao padrão em um argumento para ls:

$ ls star*

No que diz respeito ao ls, isso é o equivalente a

$ ls star10  star1100  star2002  star2013

O caractere * não significa nada para ls. Para comprovar, execute o seguinte comando:

$ ls star\*
ls: cannot access star*: No such file or directory

Quando colocamos \ antes de um caractere, estamos instruindo seu shell a não interpretá-lo. Neste caso, queremos que ls tenha um argumento star*, em vez da expansão feita pelo glob star*.

O ? expande para qualquer caractere único. Experimente os seguintes comandos para ver por si mesmo:

$ ls
question1   question14  question2012  star10    star2002
question13  question15  question23    star1100  star2013
$ ls question?
question1
$ ls question1?
question13  question14  question15
$ ls question?3
question13  question23
$ ls question13?
ls: cannot access question13?: No such file or directory

Os colchetes [] são usados para combinar faixas ou classes de caracteres. Os colchetes [] funcionam como nas expressões regulares POSIX, exceto porque, nos globs, o ^ é usado no lugar de !.

Crie alguns arquivos para experimentar:

$ mkdir brackets
$ cd brackets
$ touch file1 file2 file3 file4 filea fileb filec file5 file6 file7

Os intervalos entre colchetes [] são expressos usando um -:

$ ls
file1  file2  file3  file4  file5  file6  file7  filea  fileb  filec
$ ls file[1-2]
file1  file2
$ ls file[1-3]
file1  file2  file3

É possível especificar vários intervalos:

$ ls file[1-25-7]
file1  file2  file5  file6  file7
$ ls file[1-35-6a-c]
file1  file2  file3  file5  file6  filea  fileb  filec

Os colchetes também podem ser usados para encontrar um conjunto específico de caracteres correspondentes.

$ ls file[1a5]
file1  file5  filea

Também usamos o caractere ^ como o primeiro caractere para encontrar todas as correspondências, exceto determinados caracteres.

$ ls file[^a]
file1  file2  file3  file4  file5  file6  file7  fileb  filec

A última coisa que abordaremos nesta lição são as classes de caracteres. Para buscar correspondências em uma classe de caracteres, use [:classname:]. Por exemplo, para usar a classe digit, que corresponde aos números, faríamos algo assim:

$ ls file[[:digit:]]
file1  file2  file3  file4  file5  file6  file7
$ touch file1a file11
$ ls file[[:digit:]a]
file1  file2  file3  file4  file5  file6  file7  filea
$ ls file[[:digit:]]a
file1a

O glob file[[:digit:]a] corresponde a file seguido por um dígito ou a.

As classes de caracteres suportadas dependem da sua localidade atual. O POSIX requer as seguintes classes de caracteres para todas as localidades:

[:alnum:]

Letras e números.

[:alpha:]

Maiúsculas ou minúsculas.

[:blank:]

Espaços e tabulações.

[:cntrl:]

Caracteres de controle, como backspace, bell, confirmação negativa, escape.

[:digit:]

Numerais (0123456789).

[:graph:]

Caracteres gráficos (todos os caracteres, exceto ctrl e o caractere de espaço)

[:lower:]

Letras minúsculas (a-z).

[:print:]

Caracteres imprimíveis (alnum, punct e o caractere de espaço).

[:punct:]

Caracteres de pontuação, ou seja, !, &, ".

[:space:]

Caracteres de espaço em branco, por exemplo, tabulações, espaços, novas linhas.

[:upper:]

Letras maiúsculas (A-Z).

[:xdigit:]

Números hexadecimais (geralmente 0123456789abcdefABCDEF).

Exercícios Guiados

  1. Dadas as informações a seguir, selecione os diretórios que seriam criados com o comando mkdir -p /tmp/outfiles/text/today /tmp/infiles/text/today

    $ pwd
    /tmp
    $ find
    .
    ./outfiles
    ./outfiles/text

    /tmp

    /tmp/outfiles

    /tmp/outfiles/text

    /tmp/outfiles/text/today

    /tmp/infiles

    /tmp/infiles/text

    /tmp/infiles/text/today

  2. O que -v faz em mkdir, rm e cp?

  3. O que acontece se você acidentalmente tentar copiar três arquivos na mesma linha de comando para um arquivo que já existe em vez de um diretório?

  4. O que acontece quando você usa mv para mover um diretório para dentro de si mesmo?

  5. Como você excluiria todos os arquivos no diretório atual que começa com old?

  6. Qual dos seguintes arquivos corresponderia a log_[a-z]_201?_*_01.txt?

    log_3_2017_Jan_01.txt

    log_+_2017_Feb_01.txt

    log_b_2007_Mar_01.txt

    log_f_201A_Wednesday_01.txt

  7. Crie alguns globs que correspondam à seguinte lista de nomes de arquivos:

    doc100
    doc200
    doc301
    doc401

Exercícios Exploratórios

  1. Use a página do manual de cp para descobrir como fazer uma cópia de um arquivo com as permissões e a data de modificação correspondentes às do original.

  2. O que o comando rmdir -p faz? Experimente-o e explique como ele difere de rm -r.

  3. NÃO EXECUTE ESTE COMANDO: O que você acha que rm -ri / * pode fazer? (É SÉRIO, NÃO TENTE EXECUTÁ-LO!)

  4. Além de usar -i, é possível impedir que o mv sobrescreva os arquivos de destino?

  5. Explique o comando cp -u.

Resumo

O ambiente de linha de comando do Linux fornece ferramentas para gerenciar arquivos. Algumas das mais usadas são cp, mv, mkdir, rm e rmdir. Essas ferramentas, combinadas com globs, permitem realizar tarefas com mais rapidez.

Muitos comandos têm uma opção -i, que solicita uma confirmação antes de fazer qualquer coisa. Essa confirmação ajuda a evitar muitos aborrecimentos se você digitar algo errado.

Muitos comandos incluem uma opção -r. A opção -r normalmente significa recursão. Em matemática e ciência da computação, uma função recursiva é uma função que utiliza a si mesma em sua definição. Quando se trata de ferramentas de linha de comando, geralmente significa aplicar o comando a um diretório e tudo o que está contido nele.

Comandos usados nesta lição:

cat

Lê e exibe o conteúdo de um arquivo.

cp

Copia arquivos ou diretórios.

echo

Exibe um conjunto de caracteres.

find

Atravessa uma árvore do sistema de arquivos e procura por arquivos que correspondam a um conjunto específico de critérios.

ls

Mostra as propriedades dos arquivos e diretórios e lista o conteúdo de um diretório.

mkdir

Cria novos diretórios.

mv

Move ou renomeia arquivos ou diretórios.

pwd

Exibe o diretório de trabalho atual..

rm

Exclui arquivos ou diretórios.

rmdir

Exclui diretórios.

touch

Cria novos arquivos vazios ou atualiza a data de modificação de um arquivo existente.

Respostas aos Exercícios Guiados

  1. Dadas as informações a seguir, selecione os diretórios que seriam criados com o comando mkdir -p /tmp/outfiles/text/today /tmp/infiles/text/today

    $ pwd
    /tmp
    $ find
    .
    ./outfiles
    ./outfiles/text

    Os diretórios marcados seriam criados. Os diretórios /tmp, /tmp/outfiles e /tmp/outfiles/text já existem, por isso o mkdir os ignora.

    /tmp

    /tmp/outfiles

    /tmp/outfiles/text

    /tmp/outfiles/text/today

    X

    /tmp/infiles

    X

    /tmp/infiles/text

    X

    /tmp/infiles/text/today

    X

  2. O que -v faz em mkdir, rm e cp?

    Normalmente, -v ativa a saída detalhada. Ele faz com que os programas respectivos exibam o que estão fazendo no momento em que o fazem:

    $ rm -v a b
    removed 'a'
    removed 'b'
    $ mv -v a b
    'a' -> 'b'
    $ cp -v b c
    'b' -> 'c'
  3. O que acontece se você acidentalmente tentar copiar três arquivos na mesma linha de comando para um arquivo que já existe em vez de um diretório?

    cp se recusará a fazer qualquer coisa e exibirá uma mensagem de erro:

    $ touch a b c d
    $ cp a b c d
    cp: target 'd' is not a directory
  4. O que acontece quando você usa mv para mover um diretório para dentro de si mesmo?

    Aparece uma mensagem de erro dizendo que mv não pode fazer isso.

    $ mv a a
    mv: cannot move 'a' to a subdirectory of itself, 'a/a'
  5. Como você excluiria todos os arquivos no diretório atual que começa com old?

    Seria preciso usar o glob old* com rm:

    $ rm old*
  6. Qual dos seguintes arquivos corresponderia a log_[a-z]_201?_*_01.txt?

    log_3_2017_Jan_01.txt

    log_+_2017_Feb_01.txt

    log_b_2007_Mar_01.txt

    log_f_201A_Wednesday_01.txt

    X

    $ ls log_[a-z]_201?_*_01.txt
    log_f_201A_Wednesday_01.txt

    log_[a-z] busca por log_ seguido por qualquer letra minúscula, então log_f_201A_Wednesday_01.txt e log_b_2007_Mar_01.txt corresponderiam. _201? busca qualquer caractere único, então apenas log_f_201A_Wednesday_01.txt corresponderia. Finalmente, *_01.txt busca qualquer coisa que termine com _01.txt, o que corresponderia à opção restante.

  7. Crie alguns globs que correspondam à seguinte lista de nomes de arquivos:

    doc100
    doc200
    doc301
    doc401

    Existem várias soluções. Eis algumas delas:

    doc*
    doc[1-4]*
    doc?0?
    doc[1-4]0?

Respostas aos Exercícios Exploratórios

  1. Use a página do manual de cp para descobrir como fazer uma cópia de um arquivo com as permissões e a data de modificação correspondentes às do original.

    Usaríamos nesse caso a opção -p. Segundo a página man:

    $ man cp
    -p     same as --preserve=mode,ownership,timestamps
    --preserve[=ATTR_LIST]
                  preserve the specified attributes (default: mode,ownership,time‐
                  stamps), if  possible  additional  attributes:  context,  links,
                  xattr, all
  2. O que o comando rmdir -p faz? Experimente-o e explique como ele difere de rm -r.

    Ele faz com que rmdir se comporte de maneira semelhante a mkdir -p. Se for passado em uma árvore de diretórios vazios, ele removerá todos eles.

    $ find
    .
    ./a
    ./a/b
    ./a/b/c
    $ rmdir -p a/b/c
    $ ls
  3. NÃO EXECUTE ESTE COMANDO: O que você acha que rm -ri / * pode fazer? (É SÉRIO, NÃO TENTE EXECUTÁ-LO!)

    Ele remove todos os arquivos e diretórios com permissão de escrita em sua conta de usuário. Isso inclui quaisquer sistemas de arquivos de rede.

  4. Além de usar -i, é possível impedir que o mv sobrescreva os arquivos de destino?

    Sim, a opção -n ou --no-clobber impede que mv sobrescreva arquivos.

    $ cat a
    a
    $ cat b
    b
    $ mv -n a b
    $ cat b
    b
  5. Explique cp -u.

    A opção -u faz com que cp só copie um arquivo se o destino estiver ausente ou for mais antigo que o arquivo de origem.

    $ ls -l
    total 24K
    drwxr-xr-x 123 emma student  12K Feb  2 05:34 ..
    drwxr-xr-x   2 emma student 4.0K Feb  2 06:56 .
    -rw-r--r--   1 emma student    2 Feb  2 06:56 a
    -rw-r--r--   1 emma student    2 Feb  2 07:00 b
    $ cat a
    a
    $ cat b
    b
    $ cp -u a b
    $ cat b
    b
    $ cp -u a c
    $ ls -l
    total 12
    -rw-r--r-- 1 emma student 2 Feb  2 06:56 a
    -rw-r--r-- 1 emma student 2 Feb  2 07:00 b
    -rw-r--r-- 1 emma student 2 Feb  2 07:00 c

Linux Professional Insitute Inc. Todos os direitos reservados. Visite o site dos Materiais Didáticos: https://learning.lpi.org
31/5000 Este trabalho está licenciado sob a Licença Creative Commons Atribuição-Uso Não-Comercial-NãoDerivativos 4.0 Internacional.

Próxima Lição

3.1 Empacotando arquivos na linha de comando (3.1 Lição 1)

Ir para a próxima lição

Linux Professional Insitute Inc. Todos os direitos reservados. Visite o site dos Materiais Didáticos: https://learning.lpi.org
31/5000 Este trabalho está licenciado sob a Licença Creative Commons Atribuição-Uso Não-Comercial-NãoDerivativos 4.0 Internacional.

A LPI é uma organização sem fins lucrativos.

© 2023 O Linux Professional Institute (LPI) é um organismo de apoio aos profissionais de Open Source e referência mundial em certificação. Com mais de 200.000 pessoas certificadas, somos o principal organismo de certificação independente para Linux e Open Source do mundo. O LPI certificou profissionais de mais de 180 países, oferece exames em diversos idiomas e tem centenas de parcerias de formação em todo o globo.

Nossa missão é proporcionar oportunidades econômicas e criativas para todos, tornando universalmente acessível a certificação de conhecimentos e competências em matéria de Open Source.

  • LinkedIn
  • flogo-RGB-HEX-Blk-58 Facebook
  • Twitter
  • Entre em Contato
  • Política de Privacidade e Cookies

Encontrou um erro ou quer ajudar a aprimorar esta página? Escreva pra nós.

© 1999–2023 The Linux Professional Institute Inc. Todos os direitos reservados.