Благодаря github и PyYoshi
Я нашел этот пример для systemd
Создайте файл
sudo vim /etc/systemd/system/disable-transparent-huge-pages.service
Поместите это в сервисный файл
[Unit]
Description=Disable Transparent Huge Pages
[Service]
Type=oneshot
ExecStart=/usr/bin/sh -c "/usr/bin/echo "never" | tee /sys/kernel/mm/transparent_hugepage/enabled"
ExecStart=/usr/bin/sh -c "/usr/bin/echo "never" | tee /sys/kernel/mm/transparent_hugepage/defrag"
[Install]
WantedBy=multi-user.target
Для пользователей Debian/Ubuntu
[Unit]
Description=Disable Transparent Huge Pages
[Service]
Type=oneshot
ExecStart=/bin/sh -c "/usr/bin/echo "never" | tee /sys/kernel/mm/transparent_hugepage/enabled"
ExecStart=/bin/sh -c "/usr/bin/echo "never" | tee /sys/kernel/mm/transparent_hugepage/defrag"
[Install]
WantedBy=multi-user.target
Затем включите службу
systemctl enable disable-transparent-huge-pages
systemctl start disable-transparent-huge-pages
systemctl status disable-transparent-huge-pages
Я думаю, потому что в Linux у вас может быть несколько оболочек (bash ksh ... .)
В Windows есть только 1 программа, cmd. И теперь Microsoft нужны 2 программы, чтобы добавить больше функциональности (power shell)
В Linux нужно только изменить оболочку, чтобы улучшить ваши требования
Я бы сказал: 1) из-за истории, 2) потому что это хорошая идея.
Обычно мы вызываем gnome-terminal
или xterm
эмулятор терминала . В былые времена не было эмуляторов терминала, потому что не было графических пользовательских интерфейсов. Все, что было, это настоящие терминалы, устройства с экраном и клавиатурой, которые через последовательный кабель подключались к компьютеру. Оболочки тогда тоже были полезны и были написаны для поддержки приема команд с терминалов. (Возможно, из произвольных файловых дескрипторов, но это не имеет значения.)
С чем-то вроде виртуальных терминалов Linux и графического интерфейса пользователя было полезно заставить их эмулировать исходные терминалы, чтобы старые части программного обеспечения могли просто работать, или минимум бы с минимальными изменениями. Это означает не только оболочку, но и другие программы, которые взаимодействуют с «терминалом». ( ls
? vi
? emacs
?)
Кроме того, разделение является хорошей идеей, поскольку позволяет поменять местами эмулятор терминала и оболочку независимы друг от друга. Я могу использовать Bash на xterm, или zsh на gnome-terminal, или Bash через соединение SSH, или ...
Если бы части были связаны вместе, этот выбор был бы труднее.
Кстати, я не совсем уверен, что cmd.exe
сам по себе реализует часть эмуляции терминала. Некоторое время я не касался компилятора в Windows, но, если я правильно помню, можно создать «консольное приложение» без использования cmd.exe
. См. здесь и здесь .
Ваша предпосылка неверна. Роль «терминала» в Windows более или менее играет conhost.exe - подсистема консоли не спроектирована таким образом, чтобы сделать ее взаимозаменяемой, как терминалы в Linux (есть и другие отличия, например , когда вы запускаете процесс в режиме консоли, такой как cmd.exe, еще не подключенный к консоли, системные библиотеки, запускающие процесс, позаботятся о его создании за вас), но это отдельный уровень, управляемый отдельным процессом.
Мир Windows сильно отличается от мира Unix. Одно из отличий заключается в том, что в Windows исполняемый файл имеет внутри себя специальные данные, которые сообщают операционной системе, какого рода исполняемым файлом он является; для целей данного вопроса существует дерево видов исполняемых файлов:
Исполняемые файлы, которые работают в традиционной графической подсистеме. Они обещают создавать свои собственные окна, если это необходимо, а также читать и отвечать на сообщения, генерируемые графической подсистемой.
Исполняемые файлы, которые работают в консольной подсистеме. Они требуют, чтобы операционная система создала для них специальный вид окна (консоль). Консоль берет на себя обязанности по реагированию на сообщения и обеспечивает программе более простую среду.
Исполняемые файлы, которые запускаются в подсистеме "Современный пользовательский интерфейс" после Windows 8. Они похожи на программы, работающие в графической подсистеме, но используют другой API (и рассматриваются ОС как отдельный класс процессов).
cmd.exe
- не единственная программа, которая запускается в консоли. Существуют мириады консольных программ, включая порты очень большого числа утилит GNU (см., например, проект GnuWin32) и PowerShell, альтернативную консольную оболочку для Windows 7 и более новых версий, очень намного более гибкую и мощную, чем cmd.exe
.
Когда консольная программа запускается в консоли, вы не взаимодействуете непосредственно с программой, вы взаимодействуете с консольной подсистемой, которая является посредником между вводом пользователя и запущенной программой; например, консольная подсистема переводит нажатия клавиш в кодированные символы, ожидаемые консольной программой, и использует указанный файл шрифта для перевода символов, выводимых программой, в красивые маленькие картинки, которые видит пользователь.
gnome-terminal
будет запускать bash
как приложение по умолчанию, но
xterm
, gnome-terminal
и семейства предназначены для запуска произвольной команды, а не только оболочки, вы можете запустить, например:
xterm -e /bin/bash
xterm -e /usr/local/bin/fish
xterm -e tail -f /var/log/messages
xterm -e man ls
в последнем случае xterm покажет мне справочную страницу ls , если я выйду, xterm
выйдет.
в случае /var/log/messages я мог бы использовать параметры xterm для установки шрифта или изменения цвета.
обратите внимание, что gnome-terminal
также использует синтаксис -e
для запуска команд.