в основном, вы не можете. Прочитайте эту статью, под названием: Task_killable: Новое состояние процесса в Linux . Выдержка
Ядро 2.6.25
Linux® 2,6.25 ввело новое состояние процессов для процессов спать под названием Task_killable, который предлагает альтернативу эффективным, но потенциально незамедлительным заданным task_uniNTERREBRESTIMAL и простым в пробуждении, но более безопасную задачу.
Это так q & a под названием: Что такое непрерывный процесс? также объясняет его.
Я обнаружил это в этой очень интересной книге под названием: Интерфейс программирования Linux: Linux и Unix System Programming .
*. * ~
не расширяется ни в какие каталоги, он просто будет соответствовать любому файлу или каталогу в текущем каталоге, имеющему .
где-то в нем и оканчивается на ~
Если вы хотите найти все файлы, которые заканчиваются на ~
из каталога, в котором вы находитесь, я бы использовал find
как
find -type f -name '*~' -delete
Ваш rm -r *. * ~
(так же, как rm -r ./*.*~
) удалит файлы и каталоги, соответствующие *. * ~
, то есть файлы и каталоги, имена которых содержат точку и оканчиваются на ~
Но подкаталог
не содержит точек, поэтому не подходит.
Прочтите glob (7) и помните, что это ваша оболочка (а не программа / bin / rm
!), Которая выполняет подстановку .
Итак, вы набираете rm -r ./*.*~
в свою оболочку. Ваша оболочка расширяет это до rm -r ./test.txt~
; затем он находит программу / bin / rm
в вашем $ PATH
, вызывает fork (2) для создания дочернего процесса, а затем execve ( 2) в программе / bin / rm
с массивом аргументов rm -rf ./test.txt~
, поэтому rm
даже не видит ./ subdir
Чтобы удалить все файлы резервных копий в любом прямом подкаталоге, введите rm * / *.* ~
; с недавним bash
(версия 4 или новее) и zsh
вы можете удалить любой файл резервной копии даже глубоко в дереве файлов с помощью rm ** / *. *
Возможный способ понять, что делает оболочка, - это заменить вашу команду (например, rm
) на echo
. Это должно дать вам расширение (но прочтите echo (1) , поскольку echo
понимает некоторые параметры, такие как -n
). В некоторых хороших оболочках вы даже можете использовать клавишу tab для автозаполнения . Я использую zsh в качестве интерактивной оболочки, потому что мне нравятся ее функции автозаполнения.
Наконец, rm (1) знает о -i
(интерактивно спрашивает вас перед удалением). Поэтому я предлагаю rm -i ** / * ~
Кстати, если вы не знаете о системах контроля версий, пора их изучить (я настоятельно рекомендую использовать git ....), особенно для «исходного» кода, такого как файлы (программы C или Python, сценарии оболочки и т. д. и т. д.), и вам не понадобятся файлы резервных копий.