Тествайте Bash Scripting Knowledge с този пъзел

Добре дошли в Bash Challenge # 6 от Да знам IT & FOSS. В това ежеседмично предизвикателство ще ви покажем снимка от терминала и ще ви помоля да обясните защо резултатът не е този, който очаквахме.

Разбира се, най-забавната и най-креативната част от предизвикателството ще бъде да се намери как да се коригира показаната на екрана команда (и), за да се получи правилния резултат. Миналата седмица Bash Challenge беше първо ниво, но този път имаме анте и имаме проблем с ниво 2 за вас.

Можете също така да закупите тези предизвикателства (с непубликувани предизвикателства) под формата на книга и да ни подкрепите:

Готов за игра? Ето това е предизвикателството тази седмица:

Файлът, който оцеля до rm

Днес описанието ни е доста кратко: имам три файла в директория. Като root използвах rm * в тази директория. Но има един файл, който упорито отказва да бъде изтрит:

 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 

Предизвикателството ви е да намерите:

  • Какво предотврати изтриването на третия файл?
  • Как действително да изтриете този файл?

Очакваме с нетърпение да прочетете вашите решения в раздела за коментари по-долу!

Малко подробности

За да създам това предизвикателство, използвах:

  • GNU Bash, версия 4.4.5 (x86_64-pc-linux-gnu)
  • Debian 4.8.7-1 (amd64)
  • Всички команди са тези, които се доставят със стандартна дистрибуция на Debian
  • Команди не са били псевдоним

Решението

Как да се възпроизвежда

Това е суровият код, който използвахме, за да произведем това предизвикателство. Ако изпълните това в терминал, ще можете да възпроизведете точно същия резултат, както е показано в илюстрацията на предизвикателството (ако използвате същата софтуерна версия като мен):

  # 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 

Какъв беше проблема ?

Използвах командата chattr да настроя (i) mmutable Linux файловата система за файла c . В зависимост от вашата точно файлова система, всички промени в атрибутите не са налични.

Но тук използвам файлова система ext2, която поддържа флага i . И да цитирам човека:

  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. 

Така че основно след chattr +i файлът се заключва, докато не изчистим този флаг. Моля, забележете, че атрибутът се съхранява във файловата система. Той ще оцелее при рестартиране и демонтиране / монтиране на файловата система.

Как да поправя това?

Първо, можем да проверим обяснението по-горе, като използваме командата lsattr :

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

Ясно е, че (i) mmutable флагът е зададен. Така че, за да премахнете този файл (или да направите някаква промяна в него), трябва първо да изтрия този флаг. След това мога да правя каквото си искам на файла както обикновено:

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

Ако не сте наясно с съществуването на chattr, неговите ефекти могат да бъдат доста озадачаващи. Трябва да споменем, че chattr е специфична за Linux команда, първоначално написана за файловите системи ext2 / 3/4. Но днес някои от функциите му се поддържат от други файлови системи.

В BSD-света има подобна команда, наречена chflags . Прочетете повече в Уикипедия (// en.wikipedia.org/wiki/Chattr) за леко запознаване с тези команди в сравнение с chattr .

Надяваме се, че ви харесва това предизвикателство. Останете на линия за по-голямо удоволствие!

Препоръчано

Пълно ръководство за трикратно зареждане на Windows, Kubuntu и Debian
2019
GNOME 3.26 Издаден! Проверете новите функции
2019
3D отпечатване с отворен код: проучване на научни и медицински решения
2019