The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"самоудаляющийся shell script (/bin/ash)?"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"самоудаляющийся shell script (/bin/ash)?"
Сообщение от regunkov Искать по авторуВ закладки(ok) on 14-Сен-04, 16:55  (MSK)
subj: самоудаляющийся shell script (/bin/ash)?
Подкажите пример скрипта который будет сам себя удалять.
Подробнее:

есть временная директория ``/my_temp_dir''
есть скрипт ``/my_temp_dir/srcipt.sh''
в скрипте выполняются некоторые полезные команды,
после этого должна быть удалена полностью директория ``/my_temp_dir''
( rm -rf /my_temp_dir )
затем ( sync )
затем ( mount -o remount,ro /dev/nftla / )
затем ( reboot )

сложности:
если делать удаление как написано, то маунт ругается
``mount: Mounting /dev/nftla on / failed: Device or resource busy''

Учесть что нет временной директории и диска в оперативке.
Никаких временных файлов после работы скрипта оставаться не должно, или
они должны быть удалены до перезагрузки.

Ваши советы...

  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "самоудаляющийся shell script (/bin/ash)?"
Сообщение от klalafuda emailИскать по авторуВ закладки on 14-Сен-04, 18:04  (MSK)
>subj: самоудаляющийся shell script (/bin/ash)?
>Подкажите пример скрипта который будет сам себя удалять.
>Подробнее:
>
>есть временная директория ``/my_temp_dir''
>есть скрипт ``/my_temp_dir/srcipt.sh''
>в скрипте выполняются некоторые полезные команды,
>после этого должна быть удалена полностью директория ``/my_temp_dir''
>( rm -rf /my_temp_dir )
>затем ( sync )
>затем ( mount -o remount,ro /dev/nftla / )
>затем ( reboot )
>
>сложности:
>если делать удаление как написано, то маунт ругается
>``mount: Mounting /dev/nftla on / failed: Device or resource busy''
>
>Учесть что нет временной директории и диска в оперативке.
>Никаких временных файлов после работы скрипта оставаться не должно, или
>они должны быть удалены до перезагрузки.
>
>Ваши советы...

может "/tmp/script && cd / && rmdir /tmp && траляля" ? ну или в этом духе.

// wbr

  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "самоудаляющийся shell script (/bin/ash)?"
Сообщение от regunkov Искать по авторуВ закладки(ok) on 14-Сен-04, 20:17  (MSK)
>>subj: самоудаляющийся shell script (/bin/ash)?
>>Подкажите пример скрипта который будет сам себя удалять.
>
>может "/tmp/script && cd / && rmdir /tmp && траляля" ? ну
>или в этом духе.
>
>// wbr

Дело в том что скрипт запускается послеперезагрузки системы из файла
/etc/inittab
там первоя строка
::sysinit:/my_temp_dir/srcipt.sh <параметры_скрипта>

Причем в результате работы скрипта, файл /etc/inittab переписывается
ранее сохраненным оригинальным файлом.
Похоже что && в /etc/inittab не работает.

Может какие еще предположения.
А то второй день в нете роюсь ничего дельного.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "самоудаляющийся shell script (/bin/ash)?"
Сообщение от bass Искать по авторуВ закладки(??) on 15-Сен-04, 08:01  (MSK)
>>>subj: самоудаляющийся shell script (/bin/ash)?
>>>Подкажите пример скрипта который будет сам себя удалять.
>>
>>может "/tmp/script && cd / && rmdir /tmp && траляля" ? ну
>>или в этом духе.
>>
>>// wbr
>
>Дело в том что скрипт запускается послеперезагрузки системы из файла
>/etc/inittab
>там первоя строка
>::sysinit:/my_temp_dir/srcipt.sh <параметры_скрипта>
>
>Причем в результате работы скрипта, файл /etc/inittab переписывается
>ранее сохраненным оригинальным файлом.
>Похоже что && в /etc/inittab не работает.
>
>Может какие еще предположения.
>А то второй день в нете роюсь ничего дельного.

я делал так: вместе со скриптом стартовал простенький демон на c (пример  есть на этом сайте в архивах), который после получения от этого же скрипта SIGXXX, вычищал неоходимое пространство,собственный бинарник и умирал сам :)

  Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "самоудаляющийся shell script (/bin/ash)?"
Сообщение от regunkov Искать по авторуВ закладки(ok) on 17-Сен-04, 11:35  (MSK)
>>>>subj: самоудаляющийся shell script (/bin/ash)?
>>>>Подкажите пример скрипта который будет сам себя удалять.
>>>
>>>может "/tmp/script && cd / && rmdir /tmp && траляля" ? ну
>>>или в этом духе.
>>>
>>>// wbr
>>
>>Дело в том что скрипт запускается послеперезагрузки системы из файла
>>/etc/inittab
>>там первоя строка
>>::sysinit:/my_temp_dir/srcipt.sh <параметры_скрипта>
>>
>>Причем в результате работы скрипта, файл /etc/inittab переписывается
>>ранее сохраненным оригинальным файлом.
>>Похоже что && в /etc/inittab не работает.
>>
>>Может какие еще предположения.
>>А то второй день в нете роюсь ничего дельного.
>
>я делал так: вместе со скриптом стартовал простенький демон на c (пример
> есть на этом сайте в архивах), который после получения от
>этого же скрипта SIGXXX, вычищал неоходимое пространство,собственный бинарник и умирал сам
>:)

Решение хорошее, но для меня неудобно.
Бинарник демона придется компилить через кросс среду. И к тому же получится аппаратно-зависимое решение.

Я все-таки создал tmpfs туда пихаю скрипт последних действий, вызываю его (exec - производит выход из текуцщего скрипта, а значит шелл его отпускает). а об очистке tmpfs не волнуюсь - все делает reboot.

Тему оставляю открытой! Может есть еще оригинальные решения?

  Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "самоудаляющийся shell script (/bin/ash)?"
Сообщение от Brainbug Искать по авторуВ закладки(ok) on 17-Сен-04, 12:03  (MSK)
>>>>>subj: самоудаляющийся shell script (/bin/ash)?
>>>>>Подкажите пример скрипта который будет сам себя удалять.
>>>>
>>>>может "/tmp/script && cd / && rmdir /tmp && траляля" ? ну
>>>>или в этом духе.
>>>>
>>>>// wbr
>>>
>>>Дело в том что скрипт запускается послеперезагрузки системы из файла
>>>/etc/inittab
>>>там первоя строка
>>>::sysinit:/my_temp_dir/srcipt.sh <параметры_скрипта>
>>>
>>>Причем в результате работы скрипта, файл /etc/inittab переписывается
>>>ранее сохраненным оригинальным файлом.
>>>Похоже что && в /etc/inittab не работает.
>>>
>>>Может какие еще предположения.
>>>А то второй день в нете роюсь ничего дельного.
>>
>>я делал так: вместе со скриптом стартовал простенький демон на c (пример
>> есть на этом сайте в архивах), который после получения от
>>этого же скрипта SIGXXX, вычищал неоходимое пространство,собственный бинарник и умирал сам
>>:)
>
>Решение хорошее, но для меня неудобно.
>Бинарник демона придется компилить через кросс среду. И к тому же получится
>аппаратно-зависимое решение.
>
>Я все-таки создал tmpfs туда пихаю скрипт последних действий, вызываю его (exec
>- производит выход из текуцщего скрипта, а значит шелл его отпускает).
>а об очистке tmpfs не волнуюсь - все делает reboot.
>
>Тему оставляю открытой! Может есть еще оригинальные решения?

Kak nas4et:
#!/bin/sh
echo test
rm -f $0
exit 0

Pravda ja ne testiroval do konca vse, a posemu ne znaju posledstvij (esli takovije imejutca). Shell ja dumaju razli4ija osobogo ne sigrajet.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

6. "самоудаляющийся shell script (/bin/ash)?"
Сообщение от regunkov Искать по авторуВ закладки(ok) on 17-Сен-04, 13:09  (MSK)
>>>>>>subj: самоудаляющийся shell script (/bin/ash)?
>>>>>>Подкажите пример скрипта который будет сам себя удалять.
>>>>>
>>>>>может "/tmp/script && cd / && rmdir /tmp && траляля" ? ну
>>>>>или в этом духе.
>>>>>
>>>>>// wbr
>>>>
>>>>Дело в том что скрипт запускается послеперезагрузки системы из файла
>>>>/etc/inittab
>>>>там первоя строка
>>>>::sysinit:/my_temp_dir/srcipt.sh <параметры_скрипта>
>>>>
>>>>Причем в результате работы скрипта, файл /etc/inittab переписывается
>>>>ранее сохраненным оригинальным файлом.
>>>>Похоже что && в /etc/inittab не работает.
>>>>
>>>>Может какие еще предположения.
>>>>А то второй день в нете роюсь ничего дельного.
>>>
>>>я делал так: вместе со скриптом стартовал простенький демон на c (пример
>>> есть на этом сайте в архивах), который после получения от
>>>этого же скрипта SIGXXX, вычищал неоходимое пространство,собственный бинарник и умирал сам
>>>:)
>>
>>Решение хорошее, но для меня неудобно.
>>Бинарник демона придется компилить через кросс среду. И к тому же получится
>>аппаратно-зависимое решение.
>>
>>Я все-таки создал tmpfs туда пихаю скрипт последних действий, вызываю его (exec
>>- производит выход из текуцщего скрипта, а значит шелл его отпускает).
>>а об очистке tmpfs не волнуюсь - все делает reboot.
>>
>>Тему оставляю открытой! Может есть еще оригинальные решения?
>
>Kak nas4et:
>#!/bin/sh
> echo test
> rm -f $0
>exit 0
>
>Pravda ja ne testiroval do konca vse, a posemu ne znaju posledstvij
>(esli takovije imejutca). Shell ja dumaju razli4ija osobogo ne sigrajet.

Не пойдет.
Не размонтируется смотри так:

>#!/bin/sh
> echo test
> rm -f $0
mount -t minix -o remount,ro /dev/nftla /
>exit 0

  Рекомендовать в FAQ | Cообщить модератору | Наверх

7. "самоудаляющийся shell script (/bin/ash)?"
Сообщение от Maxim Kuznetsov Искать по авторуВ закладки on 17-Сен-04, 13:59  (MSK)
>subj: самоудаляющийся shell script (/bin/ash)?
>Подкажите пример скрипта который будет сам себя удалять.
>Подробнее:
>
>есть временная директория ``/my_temp_dir''
>есть скрипт ``/my_temp_dir/srcipt.sh''
>в скрипте выполняются некоторые полезные команды,
>после этого должна быть удалена полностью директория ``/my_temp_dir''
>( rm -rf /my_temp_dir )
>затем ( sync )
>затем ( mount -o remount,ro /dev/nftla / )
>затем ( reboot )
>
>сложности:
>если делать удаление как написано, то маунт ругается
>``mount: Mounting /dev/nftla on / failed: Device or resource busy''
>
>Учесть что нет временной директории и диска в оперативке.
>Никаких временных файлов после работы скрипта оставаться не должно, или
>они должны быть удалены до перезагрузки.
>
>Ваши советы...

в вашем случае ДО ОПЕРАЦИЙ по удалению всего-чего-можно
надо сменить текщий каталог ;-)
cd ..
нельзя отмонтировать каталог в котором кто-то работает, его (каталог) перед размонтированием должны все покинуть ;-))
именно из-за этого Вы например Ваш скрипт выдаст ту-же ошибку,
если Вы запустите его из текщего каталога :
cd temp_dir ; ./script.sh
всё просто - ошибку размонтирования вызвали именно Вы - текущий катfлог в сессии остался в temp_dir ;[
правильно будет запускать Ваш скрипт из другого каталога :
temp_dir/script.sh
вот так уже должно работать ;-))

  Рекомендовать в FAQ | Cообщить модератору | Наверх

8. "самоудаляющийся shell script (/bin/ash)?"
Сообщение от Maxim Kuznetsov Искать по авторуВ закладки on 17-Сен-04, 14:04  (MSK)
кратко :
в скрипт перед размонтированием добавить cd /
сам скрипт запускать, находясь в другом каталоге

(что-то моё пред. сообщение криво как-то получилось ;-)

  Рекомендовать в FAQ | Cообщить модератору | Наверх

10. "самоудаляющийся shell script (/bin/ash)?"
Сообщение от regunkov Искать по авторуВ закладки(ok) on 17-Сен-04, 14:17  (MSK)
>кратко :
>в скрипт перед размонтированием добавить cd /
>сам скрипт запускать, находясь в другом каталоге
>
>(что-то моё пред. сообщение криво как-то получилось ;-)

Уточню!

Перемонтирую я как раз рутовую директорию! (другими словами ``/'')
У меня есть ``/var'' на romfs

В том эксперименте, что я 2 мин. назад описал. Делалось следующее.

скрипт
#!/bin/sh
# file name = /mnt/nfs/t.sh

echo start
cd /var
rm $0
echo -n ro..
mount -o remount,ro /dev/nftla /
echo OK
echo -n rw..
mount -o remount,ro /dev/nftla /
echo OK
echo end

exit 0

делаю по шагам
# cd /var
# cp /mnt/nfs/t.sh /
# /t.sh

получаю:# /t.sh                                                                        
start                                                                          
ro..mount: Mounting /dev/nftla on / failed: Device or resource busy            
OK                                                                              
rw..mount: Mounting /dev/nftla on / failed: Device or resource busy            
OK                                                                              
end

  Рекомендовать в FAQ | Cообщить модератору | Наверх

9. "самоудаляющийся shell script (/bin/ash)?"
Сообщение от regunkov Искать по авторуВ закладки(ok) on 17-Сен-04, 14:09  (MSK)
>>subj: самоудаляющийся shell script (/bin/ash)?

>
>в вашем случае ДО ОПЕРАЦИЙ по удалению всего-чего-можно
>надо сменить текщий каталог ;-)
>cd ..
>нельзя отмонтировать каталог в котором кто-то работает, его (каталог) перед размонтированием должны
>все покинуть ;-))
>именно из-за этого Вы например Ваш скрипт выдаст ту-же ошибку,
>если Вы запустите его из текщего каталога :
>cd temp_dir ; ./script.sh
>всё просто - ошибку размонтирования вызвали именно Вы - текущий катfлог в
>сессии остался в temp_dir ;[
>правильно будет запускать Ваш скрипт из другого каталога :
>temp_dir/script.sh
>вот так уже должно работать ;-))

Нет! Дело не в этом.
Только что проверил. От каталога в котором ты находишься не зависит.
Влияет на корректное перемонтирование только наличие команды
rm $0
если она есть то
mount: Mounting /dev/nftla on / failed: Device or resource busy

если ее нет то все проходит без ошибок.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

11. "самоудаляющийся shell script (/bin/ash)?"
Сообщение от konst emailИскать по авторуВ закладки(??) on 17-Сен-04, 20:12  (MSK)
может umount -f
  Рекомендовать в FAQ | Cообщить модератору | Наверх

12. "самоудаляющийся shell script (/bin/ash)?"
Сообщение от regunkov Искать по авторуВ закладки(ok) on 17-Сен-04, 20:54  (MSK)
>может umount -f

Силовой метод?! Но ладно попробуем...

Для теста скрипт
скрипт
#!/bin/sh
# file name = /mnt/nfs/t.sh
echo start
rm $0
echo -n ro..
mount -f -o remount,ro /dev/nftla /
echo OK
echo -n rw..
mount -f -o remount,ro /dev/nftla /
echo OK
echo end
exit 0

Ну че, поехали
# cd /
# cp /mnt/nfs/t.sh /
# ./t.sh                                                                        

start                                                                          
ro..OK                                                                          
rw..OK                                                                          
end                                                                            

Ура!!! Работает!???... или...

# fsck.minix -v /dev/nftla                                                      
Inode 1 (mode = 0040755), i_nlinks=12, counted=11.                              
Inode 209 not used, marked used in the bitmap.                                  
Inode 210 not used, marked used in the bitmap.                                  
Inode 212 not used, marked used in the bitmap.                                  
Zone 6490: marked in use, no file uses it.                                      
Zone 6491: marked in use, no file uses it.                                      
Zone 6492: marked in use, no file uses it.                                      
...
...

Конечно fsck все поправит, а хотя кто знает...
Ан нет. Силой нельзя.

  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру