Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
совсем незнакомый
Зарегистрирован: 24.12.2003 Сообщения: 183 Откуда: Israel
|
Добавлено: Чт Янв 15 2004 17:55 Заголовок сообщения: не могу стереть фаил.... |
|
|
люди... интересный глюк на Solaris 9 [SunOS 5.9]
не могу стереть фаил по имени "-oPort=1231"
оболочка - /bin/tcsh
имею на фаил полные права...
это ssh плеванулся....
пробовал:
rm -f -oPort=1231 или rm -f "-oPort=1231", rm -f \-oPort\=1231 ,
rm -rf *1231
получил:
rm: illegal option -- o
rm: illegal option -- P
rm: illegal option -- o
rm: illegal option -- t
rm: illegal option -- =
rm: illegal option -- 2
rm: illegal option -- 2
rm: illegal option -- 2
rm: illegal option -- 2
usage: rm [-fiRr] file ...
как будем стирать ?
|
|
Вернуться к началу |
|
|
совсем незнакомый
Зарегистрирован: 24.12.2003 Сообщения: 183 Откуда: Israel
|
Добавлено: Чт Янв 15 2004 17:59 Заголовок сообщения: |
|
|
стёр:
rm -rf "\-oPort=1231"
|
|
Вернуться к началу |
|
|
and3008
Зарегистрирован: 12.10.2001 Сообщения: 14893 Откуда: Н.Новгород
|
Добавлено: Чт Янв 15 2004 20:48 Заголовок сообщения: |
|
|
Мы все за теб очень рады! |
|
Вернуться к началу |
|
|
test13
Зарегистрирован: 09.01.2004 Сообщения: 43
|
Добавлено: Пт Янв 16 2004 02:48 Заголовок сообщения: |
|
|
Когда же люди будут читать man'уалы? ): |
|
Вернуться к началу |
|
|
LL
Зарегистрирован: 12.01.2004 Сообщения: 103 Откуда: S-Pb
|
Добавлено: Пт Янв 16 2004 10:23 Заголовок сообщения: |
|
|
Когда читать научаться |
|
Вернуться к началу |
|
|
совсем незнакомый
Зарегистрирован: 24.12.2003 Сообщения: 183 Откуда: Israel
|
Добавлено: Пт Янв 16 2004 14:35 Заголовок сообщения: |
|
|
pardon, people!
всё я наврал: то есть, ни фига этот шелл не стёр. "-о" - во всех оболочках [которые имеются на сервере] имеет особое значение.
можно выключить парсинг имён файлов. но не нашёл я комманды
которой можно отключить попытку "понять" "-о" в начале слова в строке.
короче моя гипотеза: оболочкой тут не справиться.
надо либо perl либо C либо ...
а всем злодеям ... создайте такой файлик... и попробуйте стереть оболочкой. кстати забыл добавить :
пробовал -b в tcsh - он не работает. расшифровывает как миленький.
а стёр я файл с помощью sftp, но это вовсе не победа :/
tак что - стерляйте идеями как можно заставить _оболочку_ стереть файл.
[кроме как RTFM или сажите какой ман смотреть]
|
|
Вернуться к началу |
|
|
LL
Зарегистрирован: 12.01.2004 Сообщения: 103 Откуда: S-Pb
|
Добавлено: Пт Янв 16 2004 14:52 Заголовок сообщения: |
|
|
Интересно, кто это подрузамевается под словом злодеи... |
|
Вернуться к началу |
|
|
ryabinkin
Зарегистрирован: 01.12.2003 Сообщения: 152 Откуда: Moscow
|
Добавлено: Пт Янв 16 2004 16:52 Заголовок сообщения: Да, интересно... |
|
|
Действительно, оказывается файл с именем -o создать нелегко...
Я создал его в mc и с его же помощью стер. Эксперименты продолжаются...
Так вот, финал экспериментов:
создание файла с именем -о
touch -- -o
стирание его:
rm -- -o
Главное это -- !!! _________________ Из двух спорящих виноват тот, кто умнее. |
|
Вернуться к началу |
|
|
Dmitry.Karpov
Зарегистрирован: 30.11.2003 Сообщения: 415 Откуда: Moscow
|
Добавлено: Пт Янв 16 2004 18:02 Заголовок сообщения: |
|
|
Я такие вещи давлю так:
rm ./имя_файла
или так:
rm /полный/путь/имя_файла
или так:
touch временный_файл; rm временный_файл имя_файла
А самый правильный путь - подавить интерпретацию дальнейших аргументов как ключей:
rm -- имя_файла _________________ Благословен Бог, сотворивший меня сисадмином! |
|
Вернуться к началу |
|
|
совсем незнакомый
Зарегистрирован: 24.12.2003 Сообщения: 183 Откуда: Israel
|
Добавлено: Пт Янв 16 2004 19:42 Заголовок сообщения: |
|
|
Спасибо всем!
вот, блин.
|
|
Вернуться к началу |
|
|
совсем незнакомый
Зарегистрирован: 24.12.2003 Сообщения: 183 Откуда: Israel
|
Добавлено: Сб Янв 17 2004 06:28 Заголовок сообщения: |
|
|
вопросик один остался... если взять операции затирания в фаиловой системе как работу обязательную [стирать где-то надо будет] и зависящую от самой файловой системы,
то трудоёмкость операции заключается в переработке ввода - т.е.:
с каким вводом быстрее дойдём до вызова unlink()
моя гипотеза - полный путь будет самым быстрым,
потом "./", а только потом - опция с "--" .
говорю без подглядывания в код. если кто заглядывал - попрошу
высказаться;
ну в общем, а как вы думаете ? |
|
Вернуться к началу |
|
|
Dmitry.Karpov
Зарегистрирован: 30.11.2003 Сообщения: 415 Откуда: Moscow
|
Добавлено: Сб Янв 17 2004 15:44 Заголовок сообщения: |
|
|
При наличии в командной строкЕ "--" это разбирает сама программа rm, аргументы которой находятся вместе/рядом (близко друг к другу в оперативной памяти); так же плотно находится в памяти её код. При разборе "./имя_файла" приходится обращаться в директории "точка" (есть такая запись в каждой директории), а это уже вызывает опрос её inode. А при обращении через корень опрашиваются все записи и inodes по пути к файлу, что ещё более увеличивает вероятность обращения к жёсткому диску (а это - жутко долгая операция).
Твоя ошибка в том, что ты не рассматриваешь работу функции unlink(). Попробуй сам набросать черновик этой функции даже без проверки прав доступа и обновления времени последнего доступа. _________________ Благословен Бог, сотворивший меня сисадмином! |
|
Вернуться к началу |
|
|
совсем незнакомый
Зарегистрирован: 24.12.2003 Сообщения: 183 Откуда: Israel
|
Добавлено: Вс Янв 18 2004 02:47 Заголовок сообщения: |
|
|
после:
truss -а rm -- -o
дало мне:
execve("/usr/bin/rm", 0xFFBFFC74, 0xFFBFFC84) argc = 3
argv: rm -- -o
то есть, rm таки получает "--".
Спасибо всем за поучение. и злодеям тоже
|
|
Вернуться к началу |
|
|
Dmitry.Karpov
Зарегистрирован: 30.11.2003 Сообщения: 415 Откуда: Moscow
|
Добавлено: Вс Янв 18 2004 12:13 Заголовок сообщения: |
|
|
совсем незнакомый писал(а): | то есть, rm таки получает "--". |
А кто в этом сомневался? Командную строкУ превращает в аргументы (массив argv[]) shell, а минус он будет рассматривать как спецсимвол только внутри квадратных скобок.
Что-то у тебя нет понимания, какой программный компонент что делает, а без этого возможны самые дикие ошибки.
PS: А что такое "lol"? _________________ Благословен Бог, сотворивший меня сисадмином! |
|
Вернуться к началу |
|
|
crash
Зарегистрирован: 02.11.2001 Сообщения: 1836 Откуда: Бердск
|
Добавлено: Вс Янв 18 2004 12:25 Заголовок сообщения: |
|
|
Dmitry.Karpov писал(а): | PS: А что такое "lol"? |
вроде это хотя хрен его знает на самом деле))) |
|
Вернуться к началу |
|
|
совсем незнакомый
Зарегистрирован: 24.12.2003 Сообщения: 183 Откуда: Israel
|
Добавлено: Вс Янв 18 2004 12:53 Заголовок сообщения: |
|
|
Dmitry.Karpov писал(а): |
А кто в этом сомневался?
Командную строкУ превращает в аргументы (массив argv[])
shell, а минус он будет рассматривать как спецсимвол только внутри квадратных скобок.
|
объясняю сомнения. Было дело и писал оболочку ручками.
не сравнивал с кодом живых шеллов, сознаюсь. Но это была домашка, и писали ея усердно. Возник вопрос:
"оболочка кого от кого?" В процессе разработки вывод был:
Оболочка _должна_ разделять юзверей от утилит - чтобы дырка в утилитках не дырявила систему.
(возможна конечно и дырка в Шелле - это понятно)
поэтому argv[] утилит не был полной копией "оболочкиного" argv[]
Цитата: |
Что-то у тебя нет понимания, какой программный компонент что делает, а без этого возможны самые дикие ошибки.
|
Стормозил.
Исходя из предыдущего. ведь кто что делает - это решение, к-рое принимает создатель шелла (на этот раз - не я ).
Цитата: |
PS: А что такое "lol"? |
это наверное ты форум через links/lynx читаешь.
а в мозиллах тут морды рисуются.. т.н. BBcode.
":lol:" это морда смайлик (от англ. "laughing out loud") |
|
Вернуться к началу |
|
|
Dmitry.Karpov
Зарегистрирован: 30.11.2003 Сообщения: 415 Откуда: Moscow
|
Добавлено: Вс Янв 18 2004 13:08 Заголовок сообщения: |
|
|
совсем незнакомый писал(а): | Было дело и писал оболочку ручками.
не сравнивал с кодом живых шеллов, сознаюсь. Но это была домашка, и писали ея усердно. Возник вопрос:
"оболочка кого от кого?" В процессе разработки вывод был:
Оболочка _должна_ разделять юзверей от утилит - чтобы дырка в утилитках не дырявила систему (возможна конечно и дырка в Шелле - это понятно); поэтому argv[] утилит не был полной копией "оболочкиного" argv[] | Совершенно неправильное понятие, т.к. shell впринципе не может знать, что будет делать та или иная программа; его дело - запускать программы по интерактивным запросам юзера либо по указаниям скрипта.
И ещё раз повторяю: shell получает единую неразрывную строкУ ввода и сам нарезает её на аргументы. Т.е. оболочка не получает argv[] (а если и получает, то sh, csh, bash и т.п. всё равно её перекорёживают).
совсем незнакомый писал(а): | Исходя из предыдущего. ведь кто что делает - это решение, к-рое принимает создатель шелла (на этот раз - не я). | Дык и программу rm писАл кто-то другой, а твоё дело - заставить всю систему (shell, rm, kernel) делать то, что тебе нужно. _________________ Благословен Бог, сотворивший меня сисадмином! |
|
Вернуться к началу |
|
|
|