Комментарии 65
Есть ли какие-то технические ограничения, почему нельзя то же самое запустить на Linux? По идее, отличается только путь к файлу, в Linux это будет как правило /etc/hosts. Тем более, судя по методу clear_screen
, такой функционал планировался?
да, думал, как сделать универсальное решение, следите на git
В Linux своя простая настройка /etc/hostname и /etc/hosts
Все через sudo
cat /etc/hostname (было ub)
echo ub24 > /etc/hostname
или
hostnamectl set-hostname ub24
cat /etc/hosts
sed -i 's:^127.0.1.1 ub:127.0.1.1 ub24:' /etc/hosts
или любым редактором: nano, mcedit, gedit меняем ub на ub24 в /etc/hosts
Чтобы все сервисы начали использовать новое имя без перезарузки
hostname `cat /etc/hostname`
или
systemctl restart systemd-hostnamed
На сервере Ubuntu
systemctl restart systemd-networkd.service
systemctl status systemd-networkd.service
entry = f"{ip} {hostname}\n"
if entry not in lines:
А если там табы или несколько пробельчиков для выравнивания?
if not line.endswith(f"{hostname}\n")
Добавили хосты foo, barfoo, bazbarfoo и после этого удаляем foo...
А блокнот уже не годится? :)
Всё же не так уж часто в хостс лазишь, чтобы целого питона ради этого ставить.
Думаю, что логичней ыбло бы на poweshell это делать, если уж cli нужно.
Самое сложное в правке hosts - вспомнить, где на винде этот hosts лежит. Но это хоть нагуглить можно, а вот вспомнить как называется скрипт, который последний раз запускал год назад, уже нетривиально )
Самое сложное в правке hosts - вспомнить, где на винде этот hosts лежит.
Можно в пуске папку закрепить (если он ещё остался и в нём папки можно закреплять).
Я как раз у себя так сделал.
В etc, как у всех. :)
Другое дело, что etc в винде засунуто в какую-то задницу.
В BAT-файл под именем edithosts.bat вставить строку:
start "" "notepad.exe" "%WINDIR%\system32\drivers\etc\hosts"
И сохранить его в папку доступную по Path, или сделать доступной нужную папку. И все... в командной строке пишем edithosts и ничего помнить не надо. :)
Надо помнить, что последний раз, когда надо было отредактировать hosts, создали файл с названием edithosts.bat
Главное - вспомнить, что перед редактированием hosts нужно подойти к компу. :)
Конечно, придется вспомнить или записать на стикере и приклеить к монитору. Однако, это намного проще, чем запоминать или записывать полный путь к hosts. А если вы любите утилиты командной строки, и постоянно с ней работаете, то у вас уже хватает подобных команд и таких батников (или скоро появятся). Тогда еще проще будет вспомнить.
И название то мы выбираем сами, запоминающееся и смысловое... а не как там у млекософта в их дурную голову взбрело... навалом ненужного мусора в корне папки Windows, но вот такие нужные файлы запрятаны в самые непредсказуемые места.
перед редактированием hosts нужно подойти к компу
Как бы не обязательно: сейчас (хотя это и лет 10 - 15 назад так было) ПК можно со смарта управлять не вставая с дивана/кровати/etc.
Не говоря уж про управление с другого континента. =)
Однако, это намного проще, чем запоминать или записывать полный путь к hosts
Уже писал
это хоть нагуглить можно
Раз в год, когда надо его отредактировать, можно и поискать. Если заводить батник на каждую такую же "частую" активность, никакой памяти на имена не хватит.
PowerToys. Два клика в трее и меняй/добавляй)
![](https://habrastorage.org/getpro/habr/upload_files/5b8/c51/c9c/5b8c51c9cf2dc957b4f01cbb3e9706e3.png)
Ну как-то совсем бедно с функционалом. Всё ещё в блокноте (не родном виндовом, правда) удобнее работать с этим файлом, кмк. Да и питон устанавливать не нужно. =)
add — Добавить запись в файл hosts. Пример: add 127.0.0.1 example.com
Может лучше поменять местами аргументы и если не введён айпишнег, то скрипт вводил бы дефолтный (127.0.0.1 или 0.0.0.0, как юзверю больше нравится)?
Эта утилита — отличный пример того, как Python позволяет создавать простые, но эффективные инструменты для решения повседневных задач.
Лаба по информатике чтоле?
На счёт эффективности и повседневности я бы поспорил. Далеко не каждый день в этот файл лазаешь, да и не каждый год.
На счёт эффективности и повседневности я бы поспорил. Далеко не каждый день в этот файл лазаешь, да и не каждый год.
В курсовых и дипломах надо писать громкие слова. Самый запомнившийся мне диплом начинался что-то на тему "информационная система для нашего деревенского ГАИ - это большой шаг в развитии человечества"..
А ещё есть такая штука как ask/sed- которые по умолчанию доступны на Linux, и на винде тоже через msys2 и иже с ними.
И питон ставить не придётся и использовать много где ещё можно.
Следующая статья очевидно будет: консольная утилита на пистон для вывода Hello, World
Упражняться на редактировании системных файлов - так себе затея.
А почему нет? Заодно вызов uac отработаешь, а не просто вываливаться с ошибкой будешь по нехватке прав. То, что практического смысла немного, не значит, что теоретического нет, как контрольная по информатике вполне сойдёт.
"HOSTS_PATH = r'C:\Windows\System32\drivers\etc\hosts'"
А если windows не на С: ?
или не в "windows"
Еще и папка "Windows" может называться совсем иначе. Точно могла вроде как в Windows XP, на современных что-то не проверял. Лет 20 назад была мода называть эту папку иначе, чтоб запутывать кулхацкеров малолетних. :)
Тут возможно нужно использовать %windir% или %system32%, но как оно сработает через питона - тот еще вопрос.
Вы довольно точны. Примерно с висты, есть гарантия, что для текущей системы C:\Windows - это именно текущий виндовый каталог.
А вот то, что путь к host настраивается в реестре (HLKM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\DataBasePath) уже почти недоработка.
Чья недоработка и в чем? Однако, удобная штука... можно, оказывается, файл hosts спрятать от кулхацкеров, не знал. Правда, он им вряд ли очень нужен, особенно, когда уже есть доступ к машине. Лет 20 назад я бы обязательно перепрятал этот файл, потом бы забыл куда перепрятал, поматерился бы, переставил опять винду...
Недоработка автора поделки из статьи, что пути захардкожены, а не читаются по настройкам. А вот, обращение по C:\Windows (само по себе) по факту недоработкой не является, так как не промахнется.
Соглашусь, что такое кодирование явно не верх мастерства. Но, автор вроде бы и не претендовал на это. Для программы, которая написана за 30 минут, да еще и для самого себя - очень даже хорошо.
Доработать надо, и автор это признает и даже собирается сделать.
Практическая ценность программы тоже вызывает огромные сомнения.
Однако, статья полезная, особенно для новичков. Особенно, если будет указано на допущенные недоработки. Гораздо интереснее, чем читать как установить Питона на Винду, или как окошечко открыть в Ткинтере.
А вот, обращение по C:\Windows (само по себе) по факту недоработкой не является
Microsoft настолько задолбали кулхацкеры, считающие, что винда может быть только в C:\Windows
и нигде иначе, что запилила лютый костыль для этих целей?
В удивительное время живём. Закидываешь этот код в нейронку, просишь переписать на PowerShell. Копи-паст. И вуаля. Полная аналогичная функциональность.
Софт полезный, но он будет более удобным если написать его на C++, Delphi, C#.
Чем он будет более удобным?
Запускаться будет без установки питона
Питоновские программы тоже можно запускать без установки Питона. Если чуть заморочиться с компиляцией в исполняемый файл. Как например тут описано. https://habr.com/ru/companies/vdsina/articles/557316/
Вы отстали от трендов. Сейчас go очень популярен для таких тулзов.
А если просто в виде батника то же самое реализовать? Тогда даже, на 98-й будет работать.
Ну хорошо хоть не на электроне, а то это тоже стильно, модно, молодежно.
Я про админские тулзы. Там только консоль, только хардкор. Там есть некоторая тенденция использования го. Например: https://github.com/kubernetes/kubectl
Админские скрипты пишутся на cmd или powershell. Ибо должны работать всегда, без установки дополнительных библиотек.
Поигрался недавно с powershell - интеграция с системой у него так себе. Расширение ps1 система не знает (не говоря уже о том, чтобы запустить по имени из PATH), чтобы запустить скрипт руками надо знать магический ключ -ExecutionPolicy RemoteSigned.
Поигрался недавно с powershell - интеграция с системой у него так себе.
IDE (ISE) в системе есть, сам интерпретатор тоже. Что ещё надо для полного счастья?
чтобы запустить скрипт руками надо знать магический ключ -ExecutionPolicy RemoteSigned.
Когда вы пытаетесь запустить скрипт, а политикой запрещено, он вам сам при запуске даёт ссылку на инструкцию на эту тему. Так что именно знать не обязательно, достаточно просто читать, что вам пишут.
Я, впрочем, по мере возможности на cmd пытаюсь скрипты админские писать, у меня ещё достаточно компьютеров, где повершелла нет ни в каком виде.
Что ещё надо для полного счастья?
Надо, чтобы скрипт просто запускался по имени c поиском в PATH из стандартной консоли (cmd.exe).
Из cmd запускается cmd и bat.
А ps1 надо запускать из powershell.
Понятно, разбалован Линухом, где из стандартного шелла можно запускать скрипт на любом языке, лишь бы shebang был прописан. И, скажем, в PC DOS 7 можно было запускать из стандартного command.com REXX скрипты.
Ну так используйте powershell как стандартный шелл. В 11 точно есть такая настройка, в 10 не помню, если честно.
А cmd использует системные ассоциации из проводника, так что вам надо переписать их, если хочется именно запускать скрипты. Ну или через "powershell .\script.ps1" запускать.
Надо всё же учитывать, что cmd - это дикое легаси, которое выросло из command.com. И ждать от него поведения полноценного шелла не стоит.
А cmd использует системные ассоциации из проводника, так что вам надо переписать их, если хочется именно запускать скрипты
На мой взгляд это надо сделать поставщику ОС, чтобы работало из коробки - если уж powershell становится основным языком, а cmd уходит в legacy. Запуск скрипта двойным кликом из explorer - тоже естественное дейтсвие.
cmd - это дикое легаси, которое выросло из command.com. И ждать от него поведения полноценного шелла не стоит.
Хотя бы то, что умел command.com в PC DOS 7 (автоматически запускать скрипты на legacy .BAT языке или REXX, распознавая по содержимому) могли бы реализовать.
Запуск скрипта двойным кликом из explorer - тоже естественное дейтсвие.
Открытие скрипта на редактирование двойным кликом - тоже естественное действие. Тут просто кому что естественней.
Хотя бы то, что умел command.com в PC DOS 7
PC DOS - это не Microsoft.
а потом Перезапустите Windows
мимосектант тоталкоммандера с кучей закладок на панели
Вещества по пятницам. Блокнот это вам не это!
Во всех ос файл hosts лежит в папке erc для тех кто спрашивал :)
Потратьте еще пол-часа и выучите Argparse. Сможите писать настоящии cli за тоже время. https://docs.python.org/3/library/argparse.html#argument-groups
То что вы сделали это интерактиваня консолька. Тут тоже можно научиться и сделать быстрее и проще https://docs.python.org/3/library/cmd.html#module-cmd
Можно конечно и совместить, чтобы внутри консольки были подсказки по аргументам, но уже не так тривально. Тут можно зависимости подтянуть, например https://github.com/python-cmd2/cmd2 или https://click.palletsprojects.com/en/8.1.x/
Кстати, афтар, а зачем ты старую учётку снёс?
Если сильно заминусовали, то можно было скрыть пост (в черновики или куда там, не помню) и сделать сброс репы (один раз позволяется хабром).
там не в посте дело было
WindowsHostsManager: Консольная утилита для работы с файлом hosts в Windows на Python