Где находится корзина для корневого раздела?

При принятии '====' под ключевыми словами раздела следующий Python решил бы проблему, не имея необходимость быть явным на именах раздела:

import sys
from collections import OrderedDict

combined = OrderedDict()
seperator = '===='

for file_name in 'f1.txt f2.txt'.split(): #sys.argv[1:]:
    with open(file_name) as fp:
        lines = fp.readlines()
        data = []
        while len(lines):
            # reverse over the lines
            line = lines.pop(-1)
            if not line.strip(): continue # skip empty
            if line.startswith(seperator):
                name = lines.pop(-1)
                section = combined.setdefault(name, [])
                section.extend(reversed(data))
                data = []
            else:
                data.append(line)

for idx, k in enumerate(reversed(combined)):
    if idx != 0:
        print # insert empty line before all but first
    sys.stdout.write(k)
    print('=' * len(k))
    for line in combined[k]:
        sys.stdout.write(line)

Необходимо дать имена файлов на вызове командной строки.

Это генерирует вывод:

Numbers
========
1
2
3
4
5
6

Letters
========
A
B
C
D
E
F
6
12.06.2015, 12:50
4 ответа

Те файлы, которые вы удалили, на самом деле могут быть открыты другим процессом. В этом случае файловое пространство станет доступным, когда этот процесс закроет свой хэндл к файлу.

Вы можете просмотреть эти файлы с помощью lsof:

lsof |grep "var/log"|grep deleted
7
27.01.2020, 20:23

Согласно man-странице trash-put , trash-put помещает файлы в корзину, которая определена в Спецификации корзины FreeDesktop.org .

В главе Каталоги корзины , удаление мусора следует за таким резервным процессом:

  1. Домашняя корзина, расположенная в $ XDG_DATA_HOME / Trash . В вашем случае это может быть / root / Trash для root. Также возможно, что sudo пропустил $ XDG_DATA_HOME , поэтому также попробуйте поискать его в своей корзине. Это основной используемый мусор .
  2. Для каталогов, не использующих тот же корень монтирования, что и $ XDG_DATA_HOME , можно использовать корзину в верхних каталогах подключенных каталогов.
    1. $ topdir / .Trash / $ UID можно попробовать сначала.
    2. Если тест не прошел (например, $ topdir / .Trash не существует), используйте $ topdir / .Trash- $ UID . В вашем случае попробуйте найти его в /. Trash-0 , поскольку sudo делает ваш UID корневым.

Обновление:

Использование «корневого мусора» дает мне больше.

Из действительно старого руководства , в котором упоминается gksudo nautilus '/root/.Trash/', .Trash (вместо Trash как в fd.o) в корневом каталоге $ XDG_DATA_HOME может быть хорошим вариантом для начала.

Согласно действительно старый вопрос на китайском языке , в котором .Trash-root создается для съемного диска запрашивающей стороны, некоторые реализации используют имя пользователя вместо числового UID.

2
27.01.2020, 20:23

Псевдонимы не будут вызываться при использовании sudo :

$ alias a=ls
$ sudo a
sudo: a: command not found

Это означает, что файлы были фактически удалены а не в мусорное ведро.

Если есть процессы, которые все еще держат файлы открытыми, например для записи в них пространство, используемое файлами, не будет освобождено до тех пор, пока эти процессы не закроют файлы или не завершатся.

3
27.01.2020, 20:23

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

Но для этого есть решения:

Если вы хотите, чтобы sudoработал со всеми вашими псевдонимами (и таким образом обходил проблему, указанную @Kusalananda ), вы можете добавить следующий псевдоним в свой файл псевдонимов:

alias sudo='sudo '

Если бы вы сделали это, sudo rmбыло бы расширено до sudo trash-put, как вы и ожидали.

Чтобы ответить на комментарий @Dubu о том, что псевдонимы работают только как первое слово команды :, если вы добавите флаг -gв определение псевдонима, он станет глобальным и будет работать, даже если не находится в командной позиции.. Вы могли бы сделать это с вашим псевдонимом rm. Однако вы, вероятно, не хотите иметь другие неприятные сюрпризы с sudo, поэтому первый метод здесь более уместен. Это более актуально, если вы хотите, например, установить псевдоним для передаваемой по каналу команды (, например.alias -g pl='| less').

Что касается расположения корзины при использовании trash-cliс sudo, на это отвечает @Arthur2e5. Я просто могу добавить, что в моем случае это:

/home/.Trash-0

0
27.01.2020, 20:23

Теги

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