Препятствуйте тому, чтобы файл был удален даже после комнаты-f

Как всегда, проблема была без окончания чтения документации.

Я должен был на самом деле выполнить NetworkManager (гном автоматически берет его), и отключите archlinux's network демон. Это - все здесь: https://wiki.archlinux.org/index.php/NetworkManager#Configuration

Примечание: Можно запустить демона вручную путем выполнения:

sudo /etc/rc.d/networkmanager

5
28.07.2013, 00:09
2 ответа

На Linux Вы могли использовать неизменное использование флага chattr достигнуть только для чтения на уровне файловой системы (требует соответствующих полномочий хотя). Я не использую OS X и не знаю, имеет ли он что-то подобное, но Вы могли бы достигнуть "после того, как скрипт запущен, test.txt все еще существуйте" с помощью:

#!/bin/sh
mv test.txt test.bak
trap "mv test.bak test.txt" EXIT

rm -f test.txt

Этот сценарий переименовывает test.txt кому: test.bak и переименовывает его назад, когда сценарий вышел (после того, как rm -f test.txt). Это не действительно только для чтения, но если Вы kill -KILL Ваш сценарий, это должно сохранить Ваши данные, по крайней мере.

Альтернативная идея, если Вы настаиваете, имея ту строку в нем, почему бы не выйти ранее?

#!/bin/sh
# do your thing
exit
# my boss insisted to have the 'rm' line below.

rm -f test.txt

Альтернатива, которая поворачивается rm в функцию, которая ничего не делает:

#!/bin/sh
# do your thing
rm() {
    # this function does absolutely nothing
    : # ... but it has to contain something
}

rm -f test.txt

Подобный функциональному методу выше, но использование устаревшего alias управляйте для искажения rm к true встроенный, который ничего не делает (но returing истинный код выхода):

#!/bin/sh
# do your thing
alias rm=true

rm -f test.txt

Альтернатива, которая удаляет rm от среды (предполагающий, что существует нет rm встроенный):

#!/bin/sh
# do your thing
PATH= # now all programs are gone, mwuahaha

# gives error: bash: rm: No such file or directory
rm -f test.txt

Другой, который изменяется $PATH при помощи тупика rm программа (использование /tmp как путь поиска):

#!/bin/sh
# do your thing
>/tmp/rm # create an empty "rm" file
chmod +x /tmp/rm
PATH=/tmp

rm -f test.txt

Для получения дополнительной информации о созданном-ins, выполненном help <built-in> для деталей. Например:

true: true
    Return a successful result.

    Exit Status:
    Always succeeds.

Для других команд использовать man rm или посмотрите в странице руководства, man bash.

9
27.01.2020, 20:34
  • 1
    патча, Если у нее есть административные привилегии, она может также изменить владельца файла, нет? –  Braiam 28.07.2013, 00:17
  • 2
    @Braiam, Если скрипт будет запущен как административный пользователь, то изменение владельца действительно не поможет. –  Lekensteyn 28.07.2013, 00:18
  • 3
    это, кажется, не переименовывает его к .txt после сценария если законченное РЕДАКТИРОВАНИЕ: хорошо, таким образом, первый теперь работает, но мне любопытно при добавлении, что выход рано рассчитал бы! это умно, но возможно слишком умно, я думаю –  ItsASecret 28.07.2013, 00:19
  • 4
    Эй, какой мошенник Вы! Хороший! –  Braiam 28.07.2013, 00:21
  • 5
    @ItsASecret я сделал опечатку, переименовывание, должен был быть сделан к test.txt. Я действительно надеюсь, что Вы используете это в качестве руководства и не являетесь копией/вставкой? Корректируйтесь при изменении текущего рабочего каталога, например. –  Lekensteyn 28.07.2013, 00:22

Удаление файла требует разрешения записи на каталоге, содержащем его.

$ chmod -w .
$ rm -f test.txt
rm: cannot remove `test.txt': Permission denied

Необходимо, вероятно, сделать это во временном каталоге, созданном с этой целью; Вы не хотите удалять разрешение записи на своем корневом каталоге, например, хотя достаточно легко восстановиться с chmod +w .

2
27.01.2020, 20:34
  • 1
    Отметьте: сценарий с полномочиями пользователя root может все еще удалить этот файл (это содержит, по крайней мере, для Linux и FreeBSD). –  Lekensteyn 28.07.2013, 12:15

Теги

Похожие вопросы