Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
особенно тем, кто по тем или иным причинам перешёл на эту ОС с Windows
Разве файловые менеджеры не имеют корзин?
А если сделать из этого deb/rpm пакет с DKMS, и будет перехватывать только файлы, которые удаляет пользователь сам, но не приложения в процессе работы — это будет полезный модуль с практическим применением.
Многим пользователям Linux, особенно тем, кто по тем или иным причинам перешёл на эту ОС с Windows, не хватает возможности удаления файлов «в корзину»
.fstrashstatic struct qstr fstrash = {
.len = 8, .name = ".fstrash",
};
if (dentry->d_inode->i_nlink == 1) {
...
}
Хорошо, что в GNU/Linux всё-таки нет корзины — предполагается мозг у пользователя.На описываемом в статье уровне ни в одной ОС нет корзины. На уровне в котором она есть в windows (или что вы там имеете в виду) она имеется везде.
#!/bin/bash
if [ $# -eq 0 ] ; then echo "Usage: $0 filename ..." ; exit 1 ; fi
FSTRASH='.fstrash'
while [ $# -gt 0 ] ; do
case $1 in
-* ) shift ; continue ;;
esac
FILENAME=$1
FULLFILENAME=$(stat --printf='%n\n' ${FILENAME})
if [ $? -ne 0 ] ; then shift ; continue ; fi
FS=''
#LS=''
ISNOTFINDEDFS=0
if [ ${FULLFILENAME:0:1} != '/' ] ; then
FULLFILENAME="${PWD}/${FULLFILENAME}"
fi
FSPATHLIST="$(mount | grep -E '^\/dev\/' | awk '{print $3}' | sed -n '1d;p')"
for FS in ${FSPATHLIST} ; do
if [ x"${FS}" = x"${FULLFILENAME:0:${#FS}}" ] ; then
ISNOTFINDEDFS=1
mkdir -p "${FS}/${FSTRASH}" &>/dev/null
if [ $? -eq 0 ] ; then
mv --target-directory="${FS}/${FSTRASH}" "${FULLFILENAME}"
else
echo "${FULLFILENAME} :: Не достаточно прав!"
fi
break
fi
done
if [ $ISNOTFINDEDFS -eq 0 ] ; then
mkdir -p "/${FSTRASH}" &>/dev/null
if [ $? -eq 0 ] ; then
mv --target-directory="/${FSTRASH}" "${FULLFILENAME}"
else
echo "${FULLFILENAME} :: Не достаточно прав!"
fi
fi
shift
done
snprintf(name, sizeof(name), "XXX-%lu-%s", \
object->d_inode->i_ino, object->d_name.name);
Динамическое расширение ядра Linux — добавляем функцию «удалить в корзину»