find. -type f -name cpu.csv -exec sh -c '
for f
do
[ -f ${f%/*}/http.csv ] && { mv "$f" "${f%.???}_http.csv"; :; } \
|| \
[ -f ${f%/*}/ftp.csv ] && mv "$f" "${f%.???}_ftp.csv"
done
' sh {} +
Мы настраиваем команду find
, которая рекурсивно ищет files
из текущего каталога и далее и имеет имя cpu.csv
, собирает и отправляет имена, собранные в группу, команде sh
. Внутри sh
мы устанавливаем цикл for
, который будет перебирать аргументы командной строки до sh
и искать наличие http.csv
, и в этом случае cpu.csv должен быть переименован в cpu _http.csv. Аналогично для другого случая.
Не уверен, что есть обновленный туториал в том же стиле, но изменения ограничены:
arch/x86/vdso
перемещено в arch/x86/entry/vdso
; Последнее означает, что вам нужно объявить переменную только один раз, в arch/x86/include/asm/vvar.h
, с фиксированным смещением, с помощью макроса DECLARE_VVAR
. Для его определения используйте макрос DEFINE_VVAR
; для доступа к нему используйте макрос VVAR
. Связанный коммит выше содержит ряд примеров (всех существующих применений общих переменных ).
Вы не можете воссоздать поведение произвольного системного вызова в vDSO, по крайней мере, без обращения к ядру в режиме ядра. vDSO действительно полезен только для вызовов, которые можно обрабатывать в пользовательском пространстве; таких не много.