Я однажды записал expect
сценарий для входа ssh сервера (как случай) и мой сценарий был чем-то вроде этого:
#!/usr/bin/expect
spawn ssh MyUserName@192.168.20.20
expect "password"
send "MyPassword\r"
interact
Я думаю, возможно, interact
отсутствует в Вашем сценарии.
Самый легкий способ сделать это состоял бы в том, чтобы изменить двоичный файл:
sed s-/proc/mtd-/tmp/mntx- < romdump > romdump.new
ln -s /proc/mounts /tmp/mntx
./romdump.new
Прием здесь, так как Вы редактируете двоичный файл, должен удостовериться исходная строка /proc/mtd
та же длина как новая строка /tmp/mntx
, так, чтобы Вы не изменяли размер или местоположение ничего в двоичном файле.
Это не является надежным — это не будет работать, если двоичный файл создаст путь в частях вместо того, чтобы использовать фиксированную строку. Но это, вероятно, добьется цели.
Я не знаю о способе добавить вещи к /proc
за пределами записи модуля (или простой код ядра). Могли бы быть некоторые утилиты там все же.
Если можно создать и вставить модуль, то это довольно просто: можно просто создать другую символьную ссылку (/proc/mounts
уже символьная ссылка).
Источник (mnt_link.c
):
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/proc_fs.h>
#define MODULE_VERS "0.0"
#define MODULE_NAME "mnt_link"
static int __init init_mnt_link(void)
{
static struct proc_dir_entry *symlink;
symlink = proc_symlink("mnt", NULL, "self/mounts");
if(!symlink)
return -ENOMEM;
return 0;
}
static void __exit cleanup_mnt_link(void)
{
remove_proc_entry("mnt", NULL);
}
module_init(init_mnt_link);
module_exit(cleanup_mnt_link);
MODULE_AUTHOR("U&L");
MODULE_LICENSE("CC-WIKI");
MODULE_DESCRIPTION("Create a /proc/mnt symlink to /proc/self/mounts");
Make-файл:
obj-m := mnt_link.o
KDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
(Это предполагает, что Вы будете создавать для своей существующей системы Linux. Для создания чего-то для Android можно обратиться к: Как Вы создаете загружаемый модуль ядра для Android?.)
После того как Вы загрузили модуль (insmod mnt_link.ko
), необходимо добраться:
$ ls -l /proc/m*nt*
lrwxrwxrwx 1 root root 11 Nov 27 22:43 /proc/mnt -> self/mounts
lrwxrwxrwx 1 root root 11 Nov 27 22:43 /proc/mounts -> self/mounts
Однако та ваша утилита могла бы очень хорошо ожидать что-то еще, чем эта символьная ссылка. (Возможно, это зависит от другого модуля, загружаемого для предоставления некоторой информации в том местоположении.)
CC-WIKI
не известная GPL-совместимая лицензия на ядро (см. include/linux/license.h
).
– Lekensteyn
19.10.2013, 01:05
/proc файловая система существует в памяти так сказать. См. http://www.kernel.org/doc/Documentation/filesystems/proc.txt для большего количества информации. Ссылки, вероятно, не будут работать.
Вы смогли использовать LD_PRELOAD для прерывания открытого () функция. См. https://stackoverflow.com/questions/426230/what-is-the-ld-preload-trick
Вы могли бы также смочь отредактировать двоичный файл для изменения имени файла от/proc/mnt до/proc_mnt и символьной ссылки это к/proc/mounts.
Другая опция состояла бы в том, чтобы перекомпилировать ядро и сделать/proc/mnt псевдонимом для/proc/mounts.
link failed No such file or directory
. попытка
– Paul Lammertsma
27.11.2012, 23:16
/proc
кроме с помощью кода ядра.
– Gilles 'SO- stop being evil'
28.11.2012, 01:44
ln
дает "зарегистрированный Файл ссылки, существует", в то время как/tmp/mntx
не делает. (На самом деле я должен был создать/tmp
каталог.) – Paul Lammertsma 29.11.2012, 12:13ln
команда была назад, извините. Фиксированный! – Jim Paris 29.11.2012, 17:14