Pull to refresh

Comments 137

UFO landed and left these words here
Забавно, а посты какого содержания на хабре лично вы хотели бы видеть? «Система защиты именованных пайпов в Windows — о чем умолчал Рихтер?» С полутора читателями, которые смогут понять о чем вообще речь? :)

Насколько я понимаю, хабр — это ресурс для широкой аудитории. Многим специалистам, не являющимся системными администраторами, будет интересно прочитать о том, что есть общего в shell'ах. Да и те, у кого квалификация администратора не очень высока (я, например) могут найти пару забытых фишек.

Книги и учебники это, конечно, хорошо — но они толстые и забываются. Не у всех, увы, идеальная память. А грамотно подобранный в одном месте материал в хорошем изложении, комментариями автора и историческими ретроспективами — это очень пользительно.
Вы, конечно, извините, но поддержу theaqua… Первая мысль — что я на уроке информатики классе так в шестом. Даже с учетом того, что сейчас мс-дос в вряд ли в школьной программе, после заголовка «Мощный командный интерпретатор» и демонстрации его мощи с помощью команды эхо, просто сполз

Наверное все испортило первое слово заголовка :) Ведь оказывается же!
Ну дык в конце написано, что под мощным интерпретатором я имел в виду powershell
Клевый пост, кое где повеселил, но есть и полезные штуки, эт я за eyeofhell зацепился
Вас я тоже готов спросить — посты какого содержания вы лично хотели бы видеть на хабре? «Система защиты именованных пайпов в Windows — о чем умолчал Рихтер?» С полутора читателями, которые смогут понять о чем вообще речь? :)

Для человека, 5+ лет занимающегося какой-либо технологией за деньги и прочитавшего по ней десяток книг, практически любой пост по этой технологии — «урок информатики классе так в шестом».

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

Я программированием на кмд.экзе 5 лет за деньги не занимался, эти бесполезные секреты у меня в голове присыпаны толстым слоем других занимательных вещей.

Но теперь меня больше интересует, почему вас так сильно интересует, какие посты хочу читать я? :)
Ну как же. Мне кажется что это годный пост в формате хабре. Многие хабравчане считают, что это пост не в формате хабра. Так как я довольно много пишу на хабр, то мне хотелось бы лучше понять формат хабра — это поможет мне лучше использовать его в своих злобных и корыстных целях :).
Да какие 5+, описанные в топике вещи можно найти в небезызвестной книге Фигурнова, с которой когда-то вообще предполагалось начинать знакомство с компьютером.
UFO landed and left these words here
Если почитать внемяемый учебник по операционным системам — и не такие «чудеса» откроются.
Автор своей статьёй либо всех толсто тролит, либо за 3 дня после регистрации ещё не разобрался и путает этот ресурс с ЖЖ-шкой
Я бы не сказал, что книги Таненбаума предназначены для начального уровня. К ним нужно подходить, имея какой-то опыт. Статья все-таки начального уровня.

Лично мне было бы интересно видеть статьи разного уровня на Хабре, в том числе и начального. Кому-то это сильно поможет — гораздо больше, чем обсуждение, скопировал Samsung дизайн у Apple или нет.
Я бы не сказал, что на начальном уровне кому-то нужны описанные в топике средства и методы.
Это просто интересно знать. И меня огорчает, что статьи, где описываются приемы программирования или администрирования, часто встречают резкой критикой. А ведь их становится все меньше.
Критика резкой бывает только для бесполезных и тривиальных знаний. Можно с таким же успехом как эта статья написать про сложности создания папок с именем «.» и «..». Это банальности, не имеющие практической ценности для тех, кто хоть немного «в теме». На хабре таких — большинство и когда это станет не так, скорее всего я перестану здесь появляться.
Дело в том, что аудитория очень разная. Когда я только начинал двигаться от уровня чайника куда-то выше в 2009-2010 годах, мне очень помогли статьи о простых вещах на Хабре. Возможно, сейчас мне уже не так интересно читать про объектную модель JavaScript, но в свое время это было откровением. Я думаю, все должны понимать, что если для них что-то просто и очевидно, есть люди, которым это нужно, и лучше бы им узнать это на хорошем ресурсе с комментариями профессионалов, а не на каком-нибудь местном форуме, где научат плохому.
Да, на образовательный пост не тянет, но мне было интересно, сам бы я в этом не разбирался (а зачем?).
Скандалы, интриги, расследования! Показать всё, что скрыто!(с)
А ещё в Windows есть аналог команды 'cd', называется она 'cd'
Сенсей, я вижу Вы обладаете Скрытыми Знаниями! Аналог ping не подскажете?
но в Windows можно писать cd\ или cd…, а в bash пробел обязателен
Зато в cmd весьма забавное автодополнение по ТАБу.
UFO landed and left these words here
UFO landed and left these words here
UFO landed and left these words here
Символические ссылки на самом деле. А в бинарнике уже описано, что делать, если он вызван с таким-то именем.
Я знаю. Но всё равно спасибо. Вы мне показали, что это может быть не понятно при чтении. Поэтому я исправил.
Не раскрыта тема записи в \\Device\PhysicalMemory и выполнения своего кода в режиме ядра благодаря перезаписи таблицы векторов прерываний.

Да, кстати пайпы в PowerShell передают не поток байт, как в *nix, а полноценные объекты, у которых можно читать свойства и вызывать методы.
Сейчас попробовал на windows 8 и смог создать файлы nil и con…
Потому что у автора ошибка. Файл называется NUL.
Файл CON он назвал правильно. Во всех Windows это зарезервированные имена, насчёт Win8 не знаю.
Спасибо, исправил. Кстати, amdf, это ты написал Windows Native Shell? Отличная прога, вечный респект и уважуха! :)
«Аналог /dev/null — это файл nil».
Это, как вы по нечётным разам верно называете, девайс. Такой же, как con, prn, com1, lpt1.

«Хм, я для этого использовал Windows PE»
фигня какая-то.

reg load hku\aliensoft C:\WINDOWS\system32\config\SOFTWARE
reg load hku\aliensys C:\WINDOWS\system32\config\SYSTEM
reg load hku\alienuser «C:\Documents and Settings\%USERNAME%\NTUSER.DAT»

и редактируйте сколько угодно
А можешь подробнее объяснить, пожалуйста? Я в статью включу (хотя у меня подозрение, что рассуждения о копировании винд вообще нужно выкинуть из статьи, они тут как-то не к месту). Вдобавок у моего друга щас как раз такая проблема возникла: копирнуть кучу винд (сам-то я на GNU/Linux'е сижу).

Где эти команды надо набирать? В винде до копирования? После? Или в консоли восстановления? Что они делают? Что-то копируют? Что, откуда и куда? hku/alien — это так нужно набирать или это просто так у тебя папки или юзеры называются?
Запускаете консоль восстановления или command.com внутри win pe. можно из винды, как таковой.

reg.exe — стандартный виндовозный редактор реестра из командной строки.

Команды подключают эти реестры (эти куски реестра) к текущему реестру. Например, в winpe вы можете увидеть присоединённое через regedit32.exe (графический) как дополнительные ветки реестра, удалить смс-блокер из автозапуска или (что вероятнее) из команды запуска оболочки (они обычно встают вместо explorer.exe).

Можно продолжать работать с реестром через reg.exe, но пальчиками, пальчиками.
P.S.1) в древности в DOS мы и печатали copy some.txt prn или type some.txt > lpt1

P.S.2) и в линуксе /dev/null не является файлом.

Настолько, насколько я ни фига не петрю в лине, все файлы и все девайсы представлены потоками (символов). Разве что к файлам применимы операции позиционирования курсора. А все потоки представлены в древесной структуре каталогов. Поэтому рядом с файлом в одной папке может быть генератор случайных чисел или сетевой сокет (как минимум hardlink на что нибудь, так что вы сами не различите шорткат от собственно ресурса).
Спасибо за reg.exe. И спасибо за пояснение про устройства vs файлы. А вот про гну/линукс не согласен. Там все узлы дерева папок называются файлами. В том числе папки, устройства, сокеты и др. Иными словами, файлы в юниксе бывают разных видов: обычные файлы, папки, устройства и др.
Насколько я понимаю, идеология *nix: «всё — файл».
кстати, кто-нибудь знает, как при помощи echo напечатать одно слово ON?
не подходит,
echo "ON"
напечатает в кавычках
А, понял. Я в powershell тестил — там все ок. А в cmd.exe с кавычками.
Работает, но как-то странно. Если набрать в консоли Far-а, то печатает пустую строку. Если в cmd.exe, то работает правильно.
set /p a=on<nul — вроде, вот так работает везде.
У FARа собственный обработчик командной строки, в частности, echo, cd он не передает в cmd.exe.
Хотя у меня Far 2.0 b1777 на «echo.ON» напечатал, как и полагается, ON.
легко:
echo.on


UPD: итить… столько народу отписало одно и то же за пару минут пока читал…
И близко консоль Windows не стоит с тем же bash'ом.

К примеру, перенаправление. В Windows оно жутко урезано.

# так можно
echo >a.txt
# а так нет
grep test <a.txt


Я уже молчу о более сложных перенаправлениях.
Ээээ, grep test — это не перенаправление, а такая команда в UNIX'е.
Никто и не говорит, что cmd.exe так же крут, как и bash.
А конкретно перенаправления в cmd.exe такие же, как и в UNIX'е
Вы не правы. Суть примера не в grep, а в обратном перенаправлении: во втором примере содержимое ИЗ a.txt передается утилите grep (хотя мог бы быть и не grep). Обратное перенаправление не поддерживается cmd.exe.
Ой, простите, неправильно понял. Но обратное пренаправление в cmd.exe есть! Вот, например:
>type con > foo
3
2
1
^Z

>sort < foo
1
2
3
А в powershell его таки нет.

The '<' operator is reserved for future use.
Да не, работает всё
f:\>find "ved" < test.txt
preved
medved


Более того, перенаправления STDERR и тп тоже работают как надо:
f:\>find 2>&1
FIND: Неправильный формат параметра

f:\>find 2>nul
[пусто]
Какая версия у вас? Как вчера помню, что обратное перенаправление не работало на Win. XP.
Это на семёрке было. На хр проверил, всё точно так же:

Скриншот WinXP
image
Странно, значит я таки что-то не правильно делал.
Вроде бы по правилам DOS перенаправляется только stdout, а stderr валится на конколь?
И чтобы stderr спихнуть в текстовик, надо дополнительное колдунство.
Да, допиливать до уровня никсов консольку со времен WinNT стали
some_bugged_programm.exe 2> errors.log
И никакого колдунства.
«2» — это аргумент для some_bugged_program.exe?
или ключевое слово, соответствующее stderr?
«2» — это элемент синтаксиса. (во всяком случае в гну/лине работает, в винде и досе щас лень проверять)
А почему вы в ответ на «по правилам DOS» пишете «в гну/лине»?!
потому что я знаю, что в гну/лине 2 — это элемент синтаксиса и догадываюсь, что в DOS'е скорее всего тоже
От версии зависит.
Если

C:\>ver

Microsoft Windows XP [Версия 5.1.2600]

то в FAT32 есть «длинные» имена файлов, в которых может быть много такого мусора, который классическому DOS-у и не снился.
Добавлю вам ещё: ^D в линукс посылает отнюдь не EOF, а очень даже EOT.
В том-то и всё дело, что нет. Смотрите:

Ctrl+Буква в гну/линуксе посылает символ с кодом, который получается путём вычитания 64 из кода этой буквы. Например, код A — это 65, поэтому Ctrl-A посылает символ с кодом 65 — 64 = 1, обозначаемый SOH, он же ^A. Ctrl-B посылает символ с кодом 2, он же STX, он же ^B. (Обозначения вида ^A, ^B и т. д. называются карет-нотацией.) Ну а Ctrl-D по идее должен был бы послать символ с кодом 4, он же (как вы совершенно верно заметили) EOT, он же ^D. Но есть одно «но»: в обычном режиме терминал обрабатыват Ctrl-D по-особому. Вместо того, чтобы слать EOT, он не шлёт вообще ничего. Он шлёт признак того, что ввод закончился, шлёт информацию о том, что слать больше вообще ничего не будет. Это и есть EOF. То есть EOF — это не обычный символ. У него нет кода. А вот если вы переведёте терминал в raw-режим, то Ctrl-D будет слать EOT (как вы, опять-таки, правильно заметили).
В консоли восстановления установочного диска или флэшки Windows 7 присутствует обычный regedit32.exe. Так что можно редактировать реестр в привычной среде. А еще из этой же консоли прекрасно запускается Total Commander (теперь и 64-битный).
Прочитал первую половину топика, вспомнил зачитанный до дыр томик Фигурнова за (кажется) 1994й год, прослезился. И ведь виндоз тогда был исключительно 3.11, а перенаправления, type, con и nul уже были! Умели ведь…
Фигурнов? Винда?

1990 (если не раньше), ПК «Корвет», ОС CP/M-80 и МикроДОС — и в них, в общем, то же самое.
Ну и зачем весь этот тюнинг в игровой приставке? Нужен полноценный и мощный шелл — велкам ту Юникс, Люк.
Вальв не согласен с вашим определением игровой приставки
UFO landed and left these words here
конечно, есть. но, как всё в винде, оно не открыто пользователю через утилиты командной строки, а предосталяется только через API.

кстати, named pipes в винде доступны между хостами (можно подключаться к пайпу на другой машине, если правильно установлены разрешения)
В древности была легенда, что Билла Гейтса в школе обзывали con(чтото типа задрота), поэтому он запретил называть так файлы.
Еще командой con/con можно было вызвать BSOD на 98 виндоусе, своем или по сети
UFO landed and left these words here
Есть, сам сочиняю иногда. Вот Вам веточка для ознакомления.
prn — это девайс, из которого можно порнуху качать, разумеется :)
> Это \\Devices. Её сложно посмотреть через обычный пользовательский интерфейс.
Если сложно, значит все-таки можно. Не поделитесь как?
> Причём перенаправления появились ещё в DOS'е, а вот пайпы появились только в винде (ещё бы, ведь для пайпов нужна мультизадачность).

Пайпы появились еще в DOS. Для них не обязательна многозадачность. Программы могут вызываться и последовательно, но ОС обеспечивает передачу выхлопа одного на вход другого. Именно так и было сделано в DOS. Например здесь.
Таким образом, проверка существования папок и файлов в cmd-скриптах сделана куда менее красиво чем в UNIX'е

Да ну?
IF EXIST c:\windows ECHO 1
что здесь менее красиво? Никакие nul тут не нужны.


А это с какого перепугу? Просто ECHO без параметров выводит текущее состояние вывода эхо на экран (on/off). Для вывода текущего каталога (аналог pwd) можно просто cd или echo %CD%
о проверке существования: я имел в виду «проверить, что это именно папка». спасибо, я уточнил в статье.

про echo без аргументов тоже исправил, спасибо
Если вы это имели ввиду, то «проверить, что это именно папка» можно просто дописав слеш в конце: if exist foo\ echo 1
По-моему, не намного трудней чем в никсе.
пайпы появились только в винде (ещё бы, ведь для пайпов нужна мультизадачность).

Хотите сказать, что DOS 6.22 — это уже винда?
Меня тоже смутила необходимость мультизадачности. Зачем она, если задачи в пайпе можно просто выполнить поочередно?
Echo без параметров (в отличие, например, от cd без параметров) не является аналогом линуксового pwd, исправьте это.
>>а как подредактировать реестр, не загружаясь в него?
В загрузочном диске с ERD Commander'ом есть редактор реестра. Позволяет загрузиться с флешки/диска и редактировать реестр винды, которая отказывается загружаться. Я таким образом (путем удаления из реестра MountedDevices) восстановил работоспособность Windows 7 после переноса с одного диска на другой. При этом пришлось еще и путь к pagefile'у поправить, т.к. он находился на диске Q, которого после переноса винды не стало (перенос производился на другой физический диск с меньшим количеством разделов).
Вы еще давайте расскажите про что можно создать папку, потом переименовать ее например в «foo..\\.» (например в far или totalcmd) и получить гемморой…
Не увидел, по-моему, самое главное: symlink в windows 7, спасает мой 40GB SSD c: от temp и бэкапов iTunes
40 — грустно, да. на моем 64гб живут w2008r2 + sql2012, TFS12. VS12 (разработкой занимаюсь). office13, и у девушки еще GIMP.
правда все пользовательские папки в профилях сразу завернуты на 2tb hdd, + туда же уходят торренты, а так — свап и кеши живут на ssd, софт говорит что в жить ссд до середины 16 года… боюсь, что комп закончится раньше чем ssd. и винт, возможно тоже
кстати вот у меня музыкальная база от WMP живет таки на ssd, но в ней порядка 1000 часов музыки и wmp очен грустно, когда я его запускаю в режиме проиграть весь плейтист в рендоме, так что, наверное музыкальная база там жить и будет…
Странно, тогда, почему Вы не сказали о том, что повершелл:

а) такой же .Net язык, как и C#, например, со всей нереальной дурью возможностей данного фреймворка.
б) что весь его вывод — фактически обьекты либо их коллекции

до кучи — одна из моих публикаций тут — рисование WinForms GUI прямо в скрипте повершелл.
Тогда уж и про папку c:\Windows\System32\drivers\etc\ стоит написать, раз уж такая пьянка.
Может кому пригодится. Аналог команды touch в Windows:

copy /b file +,,

Можно создать bat-файл со следующим содержимым:

@ echo off copy /b %1 +,,

Разместить его в любом из каталогов из переменной PATH и использовать потом в консоли:

touch filename.ext
Спасибо, я про него в курсе. Но мне нужен был только touch и я нашёл для него аналог.
Вполне себе открытия для тех, кто начал свою «компьютерную» жизни не с ОС семейства Windows.

Читается ровно наоборот от статей класса «как выжить в linux», где подробно описывается, что все в юниксе — это файлы, и пр.
я начал компьютерную жизнь с винды. и имею на ней огромный опыт (с 3-5 лет до 16 лет), за всё это время ни разу не слышал про пайпы и перенаправления, хотя прогал под винду. потом пересел на гну/линь и одна из первых вещей, которую я узнал — это пайпы. почему-то они позиционируются как чуть ли ни самая крутая штука в гну/лине. и потом вдруг узнал, что оказывается в винде тоже есть пайпы. у меня сразу возникла мысль: какого #$% мне никто раньше не говорил? это меня и побудило написать эту статью.

P. S.: предчувствуя ваш вопрос: щас мне 20
А я ни в коем случае и не критикую. Наоборот, здорово, что взялись и написали. Меня, наоборот, удивляют люди, считающие, что, раз Хабр — не Мурзилка, нечего на нем и писать то, что им самим известно.

Уверен, что средний нормальный «виндузятник» процентов 30 из этой статьи не знает точно, а про еще 30-40 догадывался, но не использовал. Например, что nul есть в каждой папке :)

Спасибо!
Пайпы и т.п. всплывают практически сразу, как начинаешь писать скрипты. Линукс состоит из написания скриптов, windows — из тыканья мышью. :)
Удивительно.

Большинство комментариев в духе «мне это не нужно, значит, и никому это не нужно».

Создается впечатление, что большинство комментаторов сразу родились с изданием Фигурнова в голове, и никогда не испытывали необходимости учиться чему-либо.
К слову, о пайпах.
Под линуксом их можно использовать для множественного логона в Skype, например, две копии запустить с разными именами польтзователей.
Под виндой работает запуск от другого имени или ключ /secondary.
Оба варианта имеют один и тот же недостаток — требуют ручного выбора логина, а если уже запущен скайп с таким логином — скайп забывает пароль этого логина и приходится его снова вводить.

А можно ли под виндой использовать пайпы для такого запуска скайпа?
Вот почему нельзя создать файл 'con' и подобное. В английском нет такого слова: 'con', которое бы означало 'ботаник'. Кстати 'con', как con man означает confidence man, что означает в приблизительном переводе: человек, который берет уверенностью или нахрапом, но ироническое совпадение в том, что это также и укороченное 'convict' (заключенный). Con man, con artist — так называют жуликов и всяких аферистов.
Only those users with full accounts are able to leave comments. Log in, please.