В виртуальных и реальных терминалах переменная среды TERM
устанавливается программой, которая связывается с логином
и полностью наследуется интерактивной оболочке, которая запускается после входа в систему. Где именно это происходит, варьируется от системы к системе и в зависимости от типа терминала.
Настоящие последовательные клеммы могут различаться по типу в зависимости от того, что находится на другом конце провода. Поэтому обычно программа getty
вызывается с аргументом, указывающим тип терминала, или передается программе TERM
из данных конфигурации службы диспетчера служб.
init
это можно увидеть в записях / etc / inittab
, которые будут читать что-то вроде S0: 3: respawn: / sbin / agetty ttyS0 9600 vt100-navПоследний аргумент
agetty
в этой строке, vt100-nav
, - это тип терминала, установленный для / dev / ttyS0
. Итак, / etc / inittab
- это место, где можно изменить тип терминала для реальных терминалов в таких системах. /usr/lib/systemd/system/serial-getty@.service
( / lib / systemd / system / serial-getty @ .service
в не объединенных системах), который читает Environment = TERM = vt100, устанавливая переменную
TERM
в среде, переданной в agetty
. В этом файле служебной единицы можно изменить тип терминала для реальных терминалов в таких системах. Обратите внимание, что это применимо ко всем реальным терминалам, которые используют этот шаблон служебной единицы. (Чтобы изменить его только для отдельных терминалов, необходимо вручную создать экземпляр шаблона.) init
берет тип терминала из третьего поля записи каждого терминала в / etc / ttys
и устанавливает TERM
из той среды, в которой он выполняет getty
. Итак, / etc / ttys
- это место, где можно изменить тип терминала для реальных терминалов на BSD. Виртуальные терминалы ядра, как вы заметили, имеют фиксированный тип.В отличие от NetBSD, которая может изменять тип виртуального терминала ядра на лету, Linux и другие BSD имеют один фиксированный тип терминала, реализованный во встроенной программе эмуляции терминала ядра. В Linux этот тип соответствует linux
из базы данных terminfo. (Эмуляция терминала ядра FreeBSD представляет собой ограниченное подмножество xterm
, начиная с версии 9.)
mingetty
или vc-get-tty
(от nosh package) программа «знает», что она может разговаривать только с виртуальным терминалом, и они жестко подключают «известные» типы виртуальных терминалов, соответствующие операционной системе, для которой была скомпилирована программа. /usr/lib/systemd/system/getty@.service
( /lib/systemd/system/getty@.service
в не объединенных системах), который читает Environment = TERM = linux, устанавливая переменную
TERM
в среде, переданной в agetty
. Для виртуальных терминалов ядра: не изменяет тип терминала. В конце концов, программа эмулятора терминала в ядре не меняется. неверно изменять тип. В частности, это приведет к замораживанию курсора / клавиши редактирования распознавания последовательности CSI. Последовательности CSI linux
, отправляемые эмулятором терминала ядра Linux, отличаются от последовательностей CSI xterm
или vt100
, отправляемых программами эмулятора терминала GUI в режиме DEC VT.
Эмулятор терминала с графическим интерфейсом пользователя - одна из многих программ, от демона SSH до экрана
, использующих псевдотерминалы. Тип терминала зависит от того, какая программа-эмулятор терминала работает на главной стороне псевдотерминала и как она настроена. Большинство эмуляторов терминала GUI запускают программу на ведомой стороне с переменной TERM
, значение которой совпадает с их эмуляцией терминала на ведущей стороне. Такие программы, как SSH-сервер, будут пытаться «пройти» через тип терминала, который находится на стороне клиента соединения.Обычно есть какое-то меню или параметр конфигурации для выбора среди эмуляций терминала.
Правильный способ определить способность к цвету - это , а не , чтобы зашить список типов терминалов в вашем скрипте. Существует очень много типов терминалов, поддерживающих цвет.
Правильный способ - посмотреть, что termcap / terminfo говорит о вашем типе терминала.
colour=0 if tput Co > /dev/null 2>&1 then test "`tput Co`" -gt 2 && colour=1 elif tput colors > /dev/null 2>&1 then test "`tput colors`" -gt 2 && colour=1 fi
СРОК
. Руководство по телефону . Программное обеспечение. No tienes que escribir un duplicado exacto de todo lo que hizo un mal script. La reescritura es una oportunidad para arreglar la lógica y el código. Comience por descifrar lo que hace el código original y luego conviértalo en algo sensato.
La respuesta a su pregunta directa es "No. Tendrá que proporcionar el comienzo y el final usted mismo". Afortunadamente, eso no es muy difícil.
El comandomkpart
departed
toma un argumento start
y end
(unidades predeterminadas en megabytes ). Solo necesita especificarlos cuando cree las particiones. p.ej. utilizando un archivo de imagen de disco:
$ cat partition.sh
#!/bin/sh
truncate -s 1G disk.img # create a 1G disk image file
parted -s disk.img mklabel msdos # create the partition table
# make some partitions
parted -s disk.img mkpart primary 1 100
parted -s disk.img mkpart primary 101 200
parted -s disk.img mkpart primary 201 800
parted -s disk.img mkpart primary 801 1000
parted -s disk.img print
Alternativamente, ejecutar parted
solo una vez:
#!bin/sh
truncate -s 1G disk.img # create a 1G disk image file
parted -s disk.img mklabel msdos \
mkpart primary 1 100 \
mkpart primary 101 200 \
mkpart primary 201 800 \
mkpart primary 801 1000 \
print
$./partition.sh
Model: (file)
Disk /home/cas/stack-exchange/2018-01-03/pauldsmith/disk.img: 1074MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 1049kB 99.6MB 98.6MB primary
2 101MB 200MB 99.6MB primary
3 201MB 800MB 599MB primary
4 801MB 1000MB 199MB primary
La parte difícil es calcular los valores iniciales y finales exactos para sus particiones para que estén correctamente alineados para el tamaño del sector. La primera partición es fácil -1 MB se alinea con sectores de 512 bytes y 4K. Cualquier partición que comience en un múltiplo exacto de 1 MB también se alineará correctamente (todas las particiones creadas en el ejemplo anterior están alineadas correctamente ).
Puede usar variables de shell para cualquiera de los valores iniciales y finales de la partición, lo que le permite usar la aritmética de shell para calcularlos (pero recuerde que la aritmética de shell es solo de números enteros -use bc
o dc
si necesita hacer cálculos de punto flotante -o porcentaje ).
Por cierto, puede verificar la alineación con el comando parted
's align-check
. p.ej.
$ parted disk.img align-check optimal 1
WARNING: You are not superuser. Watch out for permissions.
1 aligned
Si align-check
se usa con la opción de modo script -s
de parted
, no produce ningún resultado. En su lugar, sale con el estado 1 si no está alineado. De lo contrario, continúa con el resto del guión.
parted
no tiene ninguna capacidad si/entonces, por lo que si desea automatizar la verificación de alineación -así como la creación de particiones,use la primera versión de la secuencia de comandos anterior para que pueda insertar un comando check-align
entre cada mkpart
y responder adecuadamente si el código de salida no es -cero.
Вы можете использовать parted
для печати конечного сектора:
$ parted /dev/sda 'unit s print'
Number Start End Size File system Name Flags
1 2048s 1048575s 1046528s fat32 primary boot, esp
2 1048576s 2095103s 1046528s ext4 primary raid
Затем следующий раздел начинается с +1 сектора после последнего:2095103s
(при условии, что размер предыдущего раздела был указан в правильных единицах ).
(parted) mkpart primary 2095104s 100%
Также вы можете использовать проценты, чтобы оставить расчет самому parted
.