Metti alla prova la tua conoscenza Bash Scripting con questo puzzle

Benvenuti alla Bash Challenge # 6 di Yes I Know IT & It's FOSS. In questa sfida settimanale ti mostreremo uno screenshot del terminale e ti chiederemo di spiegare perché il risultato non è quello che ci aspettavamo.

Naturalmente, la parte più divertente e più creativa della sfida sarà trovare come correggere i comandi visualizzati sullo schermo per ottenere il risultato corretto. La Bash Challenge della scorsa settimana era al livello 1 ma questa volta abbiamo alzato la posta e abbiamo un problema di livello 2 per te.

Puoi anche comprare queste sfide (con sfide non pubblicate) in forma di libro e supportarci:

Pronto a giocare? Quindi ecco la sfida di questa settimana:

Il file che è sopravvissuto

Oggi la nostra descrizione è piuttosto breve: ho tre file in una directory. Come root, ho usato rm * in quella directory. Ma c'è un file che ostinatamente rifiuta di essere cancellato:

 root:011# ls -ls total 12 4 -rw-r--r-- 1 root root 29 nov 21 21:25 a 4 -rw-r--r-- 1 root root 29 nov 21 21:25 b 4 -rw-r--r-- 1 root root 29 nov 21 21:23 c root:012# rm * rm: cannot remove 'c': Operation not permitted root:013# ls -ls total 4 4 -rw-r--r-- 1 root root 29 nov 21 21:23 c 

La tua sfida è trovare:

  • Cosa ha impedito la cancellazione del terzo file?
  • Come effettivamente cancellare quel file?

Non vediamo l'ora di leggere le tue soluzioni nella sezione commenti qui sotto!

Pochi dettagli

Per creare questa sfida, ho usato:

  • GNU Bash, versione 4.4.5 (x86_64-pc-linux-gnu)
  • Debian 4.8.7-1 (amd64)
  • Tutti i comandi sono quelli forniti con una distribuzione Debian standard
  • Nessun comando era alias

La soluzione

Come si riproduce

Ecco il codice raw che abbiamo usato per produrre questa sfida. Se lo esegui in un terminale, sarai in grado di riprodurre esattamente lo stesso risultato visualizzato nell'illustrazione della sfida (supponendo che tu stia utilizzando la stessa versione del software di me):

  # as root : cd /tmp rm -rf ItsFOSS mkdir -p ItsFOSS cd ItsFOSS date > a date > b date > c sudo chattr +ic clear ls -ls rm * ls -ls 

Qual'era il problema ?

Ho usato il comando chattr per impostare l'attributo del filesystem Linux (i) mmutable per il file c . A seconda del filesystem esatto, tutte le modifiche agli attributi non sono disponibili.

Ma qui, sto usando un filesystem ext2 che supporta il flag i . E per citare l'uomo:

  A file with the 'i' attribute cannot be modified: it cannot be deleted or renamed, no link can be created to this file and no data can be written to the file. Only the superuser or a process possessing the CAP_LINUX_IMMUTABLE capability can set or clear this attribute. 

Quindi sostanzialmente dopo chattr +i il file è bloccato fino a quando non cancelliamo questo flag. Si prega di notare che l'attributo è memorizzato nel filesystem. Sopravviverà al riavvio e ai cicli di smontaggio / montaggio del filesystem.

Come risolverlo?

Per prima cosa, possiamo controllare la spiegazione sopra usando il comando lsattr :

 root:014# lsattr c ----i-------------- c 

Chiaramente, il flag (i) mmutable è impostato. Quindi, per rimuovere quel file (o per modificarlo), devo prima cancellare quella bandiera. Dopodiché, posso fare tutto quello che voglio sul file come al solito:

 root:015# chattr -ic root:016# lsattr c ------------------- c root:017# rm c root:018# ls -ls total 0 

Se non sei a conoscenza dell'esistenza di chattr, i suoi effetti possono essere piuttosto sconcertanti. Vale la pena citare chattr è un comando specifico per Linux, originariamente scritto per i filesystem ext2 / 3/4. Ma oggi alcune delle sue funzionalità sono supportate da altri file system.

Nel mondo BSD, esiste un comando simile chiamato chflags . Leggi di più su Wikipedia (// en.wikipedia.org/wiki/Chattr) per un'introduzione gentile a quei comandi rispetto a chattr .

Speriamo che questa sfida ti sia piaciuta. Restate sintonizzati per più divertimento!

Raccomandato

Come recuperare file cancellati in Linux
2019
Come installare PyCharm in Ubuntu 18.04 e 16.04
2019
Guida completa per l'installazione di Linux su Chromebook
2019