[humor, unix] touch, rm
хахахаха
Месье мастер плоских шуток? :\
шелл - опасная штука
нет, это юникс вэй - тупая штука
как я понимаю, touch -- отработает, и параметры -rf ен примет, т.к. -- скажет ему о том, что параметры кончились. Получается, что -rf перейдёт к следующей команде?
нет
%
"If you weren't my teacher, I'd think you just deleted all my files."
-- an anonymous UCB CS student, to an instructor who had typed "rm -i *" to
get rid of a file named "-f" on a Unix system.
%
Это пять!
Сам придумал?
нет, это юникс вэй - тупая штукаВиндовз вэй конечно намного лучше в этом смысле. Ты не получал файлы типа my_cool_sexy_foto.jpg.exe по ICQ? Когда последние 4 буквы не влазят в окошко, а иконка файла такая же, какая по дефолту ставится на jpeg.
и лучше включить показ расширений и в explorer-е.
ps
рекомендаций, что надо делать, чтобы вот так не подставляться с командами в unix-е, я не встречал.
рекомендаций, что надо делать, чтобы вот так не подставляться с командами в unix-е, я не встречал.Не быть рутом?
и подыхание админского скрипта при создание пользователем файла с именем "-rf"?
рекомендаций, что надо делать, чтобы вот так не подставляться с командами в unix-е, я не встречал.Как защититься от конкретно этой беды очевидно. Ответ уже был в этом треде. В рекомендациях я его встречал, тема обсуждённая неоднкратно.
Я же придерживаюсь другой рекомендации, которая применима не только к Unix, и не только к компьютерам - не пользоваться неявными аргументами при использовании опасных инструментов.
и подыхание админского скрипта при создание пользователем файла с именем "-rf"?Не могу представить здравый скрипт, который будет делать rm *.
имхо, правильнее все-таки обеспечивать структурированный доступ к разнородным параметрам.
rm "-rf xxx"
неизвестный параметр, или отработает?
ругнулась на неправильный набор параметров =)
Он есть. Ответ уже был в этом треде. Просто не все им пользуются.
> rm "-rf xxx"
Скажет, что опции <пробел> программа не знает.
А если поссать на телевизор, можно получить удар током. Вот такой вот real life way.
ps
но ведь все равно получается. что скрипт правильно не работает.
Ссать на телевизор - это запускать такое . А здесь обсуждается случай, когда тебя может убить током от случайного прикосновения к ссущему на телефизор.
Виндовз вэй конечно намного лучше в этом смысле. Ты не получал файлы типа my_cool_sexy_foto.jpg.exe по ICQ? Когда последние 4 буквы не влазят в окошко, а иконка файла такая же, какая по дефолту ставится на jpeg.А что ты здесь считаешь частью виндовс вэй - то, что имя не влезает в окошко, то, что иконка такая же или то, что оба типа файлов можно сразу "запустить"?
А что ты здесь считаешь частью виндовс вэй - то, что имя не влезает в окошко, то, что иконка такая же или то, что оба типа файлов можно сразу "запустить"?Да, то, что файлы представляют собой иконки, и файлы любых типов "запускаются". То, что иконки определённого вида вызывают определённую ассоциацию у пользователя, вот только не всегда эта ассоциация оказывается верной.
Нет. Тут обсуждается, что делая уборку на столе путём смахивания всего без разбора в мусорное ведро, можно потерять и что-то ценное.
Ты не путай
Ссать на телевизор - это запускать такое . А здесь обсуждается случай, когда тебя может убить током от случайного прикосновения к ссущему на телефизор.
В файловом менеджере, предоставляемом windows, никакое имя файла не может изменить поведение операции удаления группы файлов. В bash+coreutils показано, что это не так.
Теперь скажи, что нужно сравнивать в твоем случае получения файла по icq.
удалить вещь 1
удалить вещь 2
..
удалить вещь N
?
rm -options -- filenames
У команды del, кстати, насколько я помню - возможностей гораздо меньше, чем у rm, так что нечего жаловаться.
это ностальгия виндовского юзера по юниксовому шеллу.
Хм, а я дел использовал задолго до первой встречи с никсами.
ностальгию по юниксам люди всасывают с молоком матери
Да, то, что юниксоиды всасывают - это факт
В файловом менеджере, предоставляемом windows, никакое имя файла не может изменить поведение операции удаления группы файлов. В bash+coreutils показано, что это не так.Не правда... Если выделить все иконки на десктопе и среди них будут: Мой компьютер, Сетевое окружение и Корзина, а потом нажать DEL, то ничего не произойдет.
Если выделить все иконки на десктопе и среди них будут: Мой компьютер, Сетевое окружение и Корзина, а потом нажать DEL, то ничего не произойдетЭто, наверное, в 3.1 такое было.
Ну, типа. Нет!
Обрати внимание на то, что и в списке доступных команд - команды delete не будет.
с соответствующим запросом на подтверждение
корзина не удаляется - по крайней мере, при настройках по умолчанию
хм, а я не нашел как корзину на рабочий стол вывести
> команды delete не будет.
Кнопки на клавиатуре не научились прятать.
А то прикольные были бы сообщения в Network:
Хочу настроить VPN, а с клавиатуры пропали почти все кнопки, что делать, нельзя выбрать ни один пункт меню?
клавиатура от лебедева уже на подходе, так что все будет :/
В файловом менеджере, предоставляемом windows, никакое имя файла не может изменить поведение операции удаления группы файлов. В bash+coreutils показано, что это не так.В NTFS есть хардлинки или я ошибаюсь?
Не понял вопрос.
Т.е. предлагается алгоритм удаления вещей со стола:Даже хуже:
удалить вещь 1
удалить вещь 2
..
удалить вещь N
посмотреть на вещь 1
удалить вещь 1
посмотреть на вещь 2
удалить вещь 2
а отсортировать, потом удалить нужное скопом?
есть, разумеется
Ну что я должен рассматривать в качестве противопоставления подходу мирабилиса?
Ну так вот это неоптимально, если задача звучит как "получить чистый стол". В explorere я могу легко получить чистый стол не смотря на то, что там лежит (меня отдельно спросят про ящики стола). А вот в баше (в случае злого умысла) я точно останусь и без вещей в ящиках и меня никто не предупредит.
А ты держи ящики не над поверхностью стола, а под ней, как у всех нормальных людей. Тогда мусор смахнёшь, а ящики не тронешь.
На самом деле не разумеется, потому что в документации ОС про них ничего не сказано. Так вот с помощью хардлинков можно опровергнуть вот это утверждение:
:
В файловом менеджере, предоставляемом windows, никакое имя файла не может изменить поведение операции удаления группы файлов.
Причём здесь мирабилис? Проблема запускаемых иконок не частная, а общая. Противопоставлять можешь почтовую программу mutt.
Проблема запускаемых иконок не частная, а общая.Нет тут никакой проблемы.
Фокус в том, что вред от запускаемых иконок - явно преднамеренный, а от отсутствия вывода хоть какой-нибудь информации об интерпретируемых командах у rm, mv, rd и cp - нет.
> Нет тут никакой проблемы.
Ок, буду знать. Проблемы нет.
ну, ладно, надо будет поэкспериментировать
Во-вторых, у мс есть все, чтобы избежать проблемы запускаемых иконок:
- Мой любимый файловый менеджер при наведении на файл показывает не только иконку, но и полное имя с расширением, каким бы длинным имя не было.
- Мой любимый почтовый клиент (ОЕ) при скачивании аттача показывает не только иконку, но и N последних символов имени, включая расширение.
> не только иконку, но и полное имя с расширением,
> каким бы длинным имя не было.
Долго ты будешь искать нужное, если оно показывается только при наведении.
> Мой любимый почтовый клиент (ОЕ) при скачивании аттача показывает
> не только иконку, но и N последних символов имени, включая расширение.
В то время как главное в данном случае - это content type.
почему именно content-type?
ps
content-type, вообще, только браузер умеет обрабатывать.
Нужное я могу опознать по первым N буквам имени (иконке, времени, и.т.д)
>В то время как главное в данном случае - это content type.
Нет. Главное (в нашем споре) - что произойдет при нажатии open. А тут все зависит только от расширения.
Если так, то rm * тоже не нужно использовать - удалишь (не)нужное по первым буквам.
> Главное (в нашем споре) - что произойдет при нажатии open.
> А тут все зависит только от расширения.
Вот и ещё проблема с мелкомягкими: игнорирование стандартов Internet.
В той системе, откуда пришёл файл, расширение может и не иметь такого значения, как думает OE.
content-type, вообще, только браузер умеет обрабатывать.Веб-программисты не верят в жизнь вне 80 порта. Content-type есть не только в HTTP, но и в формате email сообщения.
Во-вторых, у мс есть все, чтобы избежать проблемы запускаемых иконокУ мс есть всё чтобы bash запустить. Никто не сомневался, что есть. Важно то, что пропагандируемая философия заключается в том, что any file is clickable.
- Мой любимыйРад за тебя, что ты идёшь поперек философии навязываемой производителем твоей ОС.
так ведь это проблема как раз в unix way-е повсеместно идет: что при передаче параметров, через командную строку, что при работе в php - везде идет сознательное смещивание двух разных каналов передачи данных в один, что приводит к огребанию по ушам - по полной - в случае малейшей ошибки.
ведь с rm из начального поста все тоже самое - смешав в единое - доверяемую информацию - наши настройки, и не доверяемую - имена файлов - мы и получили капкан, который периодически и срабатывает.
В моем менеджере нет команды rm, вырази свою мысль поточнее.
>Вот и ещё проблема с мелкомягкими: игнорирование стандартов Internet.
Ну да, мс, соглашается со стандартами Internet, как с неизбежным злом и старается минимизировать их использование
> В той системе, откуда пришёл файл, расширение может и не иметь такого значения, как думает OE.
Есть стандарт - который описывает, как ОС должна вести себя с content-type-ом при работе вне браузера?
(ps : Мой любимый файлменеджер - explorer)
Командную строку набирает человек. Он может вставить в неё явным и неявным образом tainted информацию. Но компьютер не защищён от этого.
> что при работе в php
А причём здесь unix?
> ведь с rm из начального поста все тоже самое - смешав в единое - доверяемую информацию - наши настройки, и
> не доверяемую - имена файлов - мы и получили капкан, который периодически и срабатывает.
См. выше.
Кстати только сейчас мне подумалось. А неужели cmd.exe иным образом обрататывает аргументы?
ты говоришь, что полное имя знать не обязательно
а я говорю, что rm * набирать не обязательно
отмазки примерно одинаковой силы
'/' вроде не может содержаться в имени файла
rm * набирать не обязательноИ не надо, за тебя это сделает кривой make.
>а я говорю, что rm * набирать не обязательно
ну да, тут уже предлагали замену
rm file1
rm file2
...
реальная замена: rm -r trash/
разве речь шла про это?
речь шла про то, какие подходы лучше использовать, чтобы избежать вот таких неявных ошибок.
> А причём здесь unix?
потому, что php - построен на тех же самых принципах, что и сам *nix.
> Кстати только сейчас мне подумалось. А неужели cmd.exe иным образом обрататывает аргументы?
cmd - вроде звездочку сам не обрабатывает.
и в качестве, основного префикса для опций используется "/", а тире - это уже мода с никсов пошла.
Какая версия make это делает сама?
rm -r trash/ удалит все подкаталоги
а rm * - нет
Есть. Не ОС, а MUA. Стандарт называется RFC1437, 1993 год. А вообще Content-Type был придуман RFC1049, 1988 год. Браузеры тогда были?
с помойкой, в которой кто-то злонамеренный понаставил засад типа файлов '-rf', именно так следует поступать
задача ставилась в общем виде, без всякого мусора
Сказал, как в воду пёрнул.
А как должен вести себя MUA при вызове внешних программ?
Неважно, можно допустить ошибку в Makefile (от этого никто не застрахован) - и потерять многое.
> '/' вроде не может содержаться в имени файла
То, что какая-то программа начинает свои ключи с / - частный случай.
И действительно ли на виндовых fs запрещён / в имени файла?
и где же там зафиксировано самое главное - как для произвольного файла определить его content-type?
Пездец. С таким мощным заявлением даже лень спорить.
> cmd - вроде звездочку сам не обрабатывает.
Я не могу проверить. Можешь узнать точно?
> к разнородным параметрам
не пиши на *sh, пиши на языках, где такое есть
только вот для интерактивной работы такое почему-то не очень подходит, несмотря на красоту и очевидность концепции
много было попыток, теперь вот и MS взялись со своим monad, посмотрим что будет с ним
в частности, отцы unix придумали C без таких средств как основной язык, мне кажется, чтобы не быть похожими на lisp-машины, с которыми они обязаны были быть знакомыми
то есть если довести до логического завершения работу с параметрами, получится lisp
всё (кроме пайпов) приходит в argv
В виндовз допустить ошибку нельзя? Или там от этого страхуют?
кем ставилась? вообще-то, лучше избегать выполнения дурных задач, поставленных другими, а придумывать свои, правильные; а для тех, кто не согласен - что ж, есть windows
На это нет стандарта.
вчера не подходило?
сегодня не подходит?
никогда подходит не будет?
Не передергивай так дёшево. Вижу, ты хочешь утянуть разговор в своё любимое русло.
Ты хотел, что бы тебе рассказали про Content-Type вне браузера - тебе рассказали.
прежде чем сегодня долбиться в ту же стену, нужно понять, почему ничего не получилось у предшественников, и чем ты лучше их
в письме нет файлов, там вложения
В ответ на:
вообще-то, лучше избегать выполнения дурных задач, поставленных другими, а придумывать свои, правильные
это тоже nix-way ? =)
ну тогда нет ничего странного в поведении OE.
> это тоже nix-way ? =)
Да.
ведь с rm из начального поста все тоже самое - смешав в единое - доверяемую информацию - наши настройки, и не доверяемую - имена файлов - мы и получили капкан, который периодически и срабатывает.Прежде чем удалить что-нить, я делаю ls <шаблон для удаления>. И удаляю я обычно либо rm <имя файла или шаблон>, либо rm -Rf <дирректория>, где имя директории не содержит шаблонов.
Считаю, что в данном случае ls аналогично просмотру расширений в винде. В смысле, прежде чем удалить что-то (в винде - запустить что-то следует посмотреть, что именно ты удаляешь (запускаешь).
а никто и не говорил, что поведение странное
оно просто дурное
> ну тогда нет ничего странного в поведении OE.
Теперь ты дёшево передергиваешь. Никто не говорит, что OE нарушает стандарт. Говорят, что он поступает небезопасно.
угадай, что сделает ls * при наличии файла "-fr"
у браузера от Microsoft и с этим проблемы
Все это правильно - если речь идет об интерактивной работе.
но это теряет смысл - если мы захотим rm записать в виде автоматического или полуавтоматического скрипта.
И что в этом плохого? Я посмотрел на результат работы, понял, что фигня, набрал ls, и будучи наученный этим тредом, понял в чем фигня.
при этом я не потерял ни одного своего файлика.
То, что ls * (и даже ls *f*) не покажет тебе файла "-fr"
если это так важно, тогда пользуйся rm -- *.
А ls без параметров кто-нить отменял?
ls <template>
rm <template>
также речь идет не только - есть или нет вредоносное влияние, но и будет, или не будет скрипт работать так, как задумывалось.
зы
ты лично в скриптах всегда пишешь '--' перед шаблонами?
ты пишешь именно так?
ls -- *.txt
copy -- * /target/
Если шаблоном будет *, то я запускаю ls <шаблон> и вижу, что он мне выдает не только мою дирректорию, но еще и поддиректории. Офигеваю. Задумываюсь (эт очень полезное занятие). Понимаю, что не так (запускаю просто ls). Решаю проблему.
И никак иначе.
Может стоить рассматривать поставленный вопрос не как "доверяете ли вы команде rm", а как "доверяете ли вы содержимому директории".
если кто-то может создать файлик в директории, значит у него хватит прав и на большие злодействия. Значит вопрос стоит в правильной расстановке прав.
P.S.
изначальная тема мне очень понравилась. Думаю, что запомню надолго.
Но похоже, что все перерастает в hollywar. Жаль.
вывод очень неверный
файлы мы можем, например, создавать через ту же заливку через web-интерфейс.
если мы знаем, что на сервере удаление файлов делается :
автоматизированным скриптом - вот с такой строчкой rm *.jpg, то как минимум - мы можем залив файл '-.jpg', осуществить отказ в работе этого скрипта.
т.е ты всегда удаляешь только фиксированный конечный набор файлов?
Т.е. ты абсолютно и полностью доверяешь директории, куда имеют возможность записать кто угодно?
Моя мысль звучала так: "можно не делать лишнего гемора, если не доверяшь. Но если есть какая-то дырка в твоей система, то ей обязательно кто-нить воспользуется".
А ведь еще в старые добрые времена, мой папа мне говорил, что прежде чем запустить файл с дискеты - проверь его антивирусом. А потом он сильно ругался, когда оказывалось, что моя любимая игрушка наводила погром на жестком диске.
но проблема в том, что когда я пишу:
copy * \dev\null
я совсем не ожидаю, что имена файлов имеют какое-то значение.
он должен либо с чего-то начинаться, либо чем-то заканчиваться. И чаще всего, я знаю, какие именно файлы я буду удалять этим скриптом, и их набор очень даже конечен. Если это не так, тогда все это хранится в отдельной директории, которая чистится rm -Rf dir; mkdir dir.
вообще в скриптах, как минимум, стОит всегда указывать абсолютный путь до удаляемых файлов
могу в третий раз повторить, что даже если звездочка на что-то заканчивается, то все равно нормально скрипт работать не будет.
copy *.txt \dev\null
все равно не скопирует файлы, если они начинаются на '-'
> через web-интерфейс
и разрешаем любые имена? уже неминуемо будут проблемы, что с ../../../, что с .cgi или там .php
> если мы знаем, что на сервере удаление файлов делается :
> автоматизированным скриптом - вот с такой строчкой rm *.jpg
так вот не надо так делать
надо и проверять имена, и писать скрипты безопасно, для чего есть более подходящие языки
> проблема в том, что когда я пишу:
> copy * \dev\null
это синтаксис нового шелла от MS?
короче, вам надо повторять всё более трёх раз,
напрашивается вывод, что Windows не очень хорошо влияет на головной мозг
> абсолютный путь до удаляемых файлов
не обязательно абсолютный, ./* тоже сойдёт
совсем, не уверен
во-первых - это противоречит той же атомарности
во-вторых - на уровне скрипта часто нет знания о полных путях к файлам, есть только знание о текущей дире.
кто и когда это будет делать?
пробежался поиском по данному форуму и по google-у.
постоянно видны советы запускать тот же перл вот таким способом: "pl -xx -zz *", причем в том числе и от более-менее адекватных людей.
что такое pl?
если эти советы даны для случая, когда названия файлов контролирует злоумышленник, то советчики неправы
во-первых - это противоречит той же атомарности1. как это противоречит атомарности?
во-вторых - на уровне скрипта часто нет знания о полных путях к файлам, есть только знание о текущей дире.
2. rm -mykeys $pwd*
вам виднее как у вас exe-шник perl-а называется.
> если эти советы даны для случая, когда названия файлов контролирует злоумышленник, то советчики неправы
причем здесь злоумышленник?
мы даже без всякого злоумышленника может получить очень и очень странный результат, если по каким-то причинам у нас в дире образовались файлы с именами, начинающиеся с подчеркивания.
то есть ты не читал советы из гугла и форума, а сам решил, что они такие?
> начинающиеся с подчеркивания
и какие результаты будут от имён файлов, начинающихся с подчёркивания?
И зачем ты меня заставляешь запоминать и обращать внимание на то, как называется исполняемый файл perl-а?
кто и когда это будет делать?Зависит от разработчика.
Если все пишет один человек, то где ему удобно.
Если несколько, тот кто пишет web-часть, будет считать, что это обязанность shell-ого программиста. Shell-овый программист - что это обязанность web-разработчика, не дать создать файл с кривым именем.
В итоге и получается дырка в системе.
На самом деле, народ уже давно наступал на эти грабли, когда на всяких форумах в тели сообщения ставили закрывающийся тэг, а потом писали что-нить свое. Так и появилось в php функция htmlspecialchars.
с тире
а тут вдруг стал к мелочам придираться...
ps
Придирись хоть к чему-нибудь, если не получается ответь по существу? (C)
что-то я совсем не понял, почему файл с названием, которое начинается с тире - это кривой файл?
а если небо упадёт на землю, то вообще пи*дец
никто не называет файлы, начиная имя с тире, кроме злоумышленников
> И зачем ты меня заставляешь запоминать и обращать внимание на то,
> как называется исполняемый файл perl-а?
потому что от этого зависит смысл совета
если не хочешь запоминать, мог бы скопировать, или буфер обмена в windows уже отменили?
на чем основывается это предположение?
в стандарте написано?
> если не хочешь запоминать, мог бы скопировать, или буфер обмена в windows уже отменили?
адекватный чел - и так поймет, а ответ от неадекватного - все равно обычно смысла мало несет.
на практике и здравом смысле
> адекватный чел - и так поймет
а прикинь, если есть команда pl и делает что-то другое?
вообщем, все это мне напоминает - креатив про грабли.
ps
вместо того, чтобы убирать грабли - разработчики упираются и предлагают поставить резиновую ручку потолще.
грабли убрали, когда добавили опцию --
ее добавили ко всем командам, во все программы?
дa, это обрабатывается стандартными функциями разбора параметров
хотя, конечно, решение плохо масштабируется - если, например, нужно несколько списков
> если, например, нужно несколько списков
если добавить несколько списков, то тут же захочется деревьев - и получится лисп
вместо этого попытались разбить операции на базовые, работающие с одним списком параметров, а более сложные структуры можно передавать через файловую систему, например
Уже сколько раз в этом треде звучал ответ. По-моему ты в режиме write-only.
Еще раз: rm -- *.
Хотя, как я уже говорил ни в одном здравом скрипте такого не будет.
Да. И кроме этого в скриптах есть еще куча моментов, которые надо делать не так, как при интерактивной работе.
в скриптах есть еще куча моментов, которые надо делать не так, как при интерактивной работеСейчас нет времени искать точную ссылку, но это твои слова:
"Я, мол, запускаю в шеле 10 команд, потом лезу в историю и делаю из неё скрипт". Ты этим пытался доказать, что шел лучше, чем драг-н-дроп какой-нибудь. Так что, на самом деле не так всё шоколадно?
Да, моя фраза. А чем это противоречит вышеотквоченной фразе? Разве в программировании плохо сначала делать набросок, а потом вставлять в него многочисленные проверки и прочее и таким образом доводить до production состояния?в скриптах есть еще куча моментов, которые надо делать не так, как при интерактивной работеСейчас нет времени искать точную ссылку, но это твои слова:
"Я, мол, запускаю в шеле 10 команд, потом лезу в историю и делаю из неё скрипт". Ты этим пытался доказать, что шел лучше, чем драг-н-дроп какой-нибудь. Так что, на самом деле не так всё шоколадно?
unlink glob("*")не содержит подводных камней, или? Но у перла интерактивный интерпретатор если и есть, то не очень популярен. Поэтому связка "из истории в скрипт" лично мне кажется недостижимой. Я вообще чем больше bash узнаю, нем больше в нем разочаровываюсь. Простейший пример:
./a | sudo ./b | ./c
Как теперь эту задачу снять? Ничего из этого не работает:
kill %1
sudo kill %1
sudo kill `jobs -p`
Пока я пришел к выводу, что на sh писать скрипты вообще нельзя.Смотря какие. Скрипты, которые на > 60% занимаются выполнением системных команд именно на sh и надо писать.
./a | sudo ./b | ./cА причём здесь sh? Независимо от языка ты не можешь убить чужой процесс.
Как теперь эту задачу снять?
> code: unlink glob("*")
> не содержит подводных камней, или?
Оно не скажет тебе, какие из файлов не получилось удалить, и почему.
Оставить комментарий
rosali
Зацените:Прикол, да?