надо на си под слаком сделать
сканировать все каталоги и находить все i-узлы (i-node) с двумя и более жесткими связями
для любого файла печатать список всех имен файлов указывающих на этот файл
буду рад любой идее
спасибо
что такое i-узлы (i-node) (с двумя и более жесткими cвязями?)
Модератор: Модераторы разделов
-
elide
- Бывший модератор
- Сообщения: 2421
- Статус: Übermensch
- ОС: лялих
Re: что такое i-узлы (i-node)
вот даже как... насколько я знаю, в самом иноде хранится только счетчик имен.
сами имена можно получить лишь просканировав всю файловую систему и отобрав файлы с нужным инодом.
если такую фигню надо делать постоянно, можно организовать индекс, типа как у locate. только его обновлять надо будет.
сами имена можно получить лишь просканировав всю файловую систему и отобрав файлы с нужным инодом.
если такую фигню надо делать постоянно, можно организовать индекс, типа как у locate. только его обновлять надо будет.
слава роботам!
-
elide
- Бывший модератор
- Сообщения: 2421
- Статус: Übermensch
- ОС: лялих
Re: что такое i-узлы (i-node)
стало мне интересно и написал я такую фигню на шелле (на си мне было лень писать)
конкретно это тебе, разумеется, не нужно, но тут описан весь процесс, так что переписать на ц нехитро.
Код: Выделить всё
#!/bin/sh
[ "G$1" = "G" ] && { echo "Usage: $0 filename";exit 1;}
DIR=`dirname "$1"`; cd "$DIR"; ff=`pwd -P`/`basename "$1"`; fmp="$ff" # modified Bolverk's code
[ -L $ff ] && ff=`/bin/ls -l $ff | awk -F'-> ' '{ print $2 }'`
fspec=`/bin/ls -iL "$ff"` || exit 1
inode=`echo $fspec | sed -e 's/^ *\([0-9]\+\).*/\1/g'`
while true; do
fmp=`echo $fmp | sed -e 's/\/[^/]\+$//'`
[ "G$fmp" = "G" ] && { mp="/"; break; }
mp=`cat /proc/mounts | cut -d' ' -f2 | grep $fmp` && break
done
echo searching for hardlinks to \'$inode\' on \'$mp\'
find $mp -inum $inode -mount 2> /dev/nullслава роботам!