Позвольте мне попробовать... Я буду использовать Unix и Linux более или менее синонимично. Если я имею в виду что-то историческое, что предшествовало существованию Linux, я обычно буду писать «Unix», а если я говорю о чем-то более позднем или о чем-то специфичном для Linux-разновидности Unix, я обычно буду писать «Linux». ".
Единственная вещь в вашем списке, представляющая собой обособленное понятие, не пересекающееся с другими, — это «оболочка». Оболочка — это программа, целью которой является общение с пользователем и выполнение операций операционной системы от его имени.
В наиболее распространенных оболочках используется метод, называемый «командной строкой», который заключается в отправке пользователю какого-либо приглашения, ожидании ввода пользователем текстовой команды и последующем выполнении этой команды. Но есть оболочки на основе меню и даже графические оболочки (, такие как Windows File Explorer ), хотя ни один человек -, уважающий Unix, никогда не назовет такую вещь «оболочкой».
В Unix, если кто-то называет что-то «оболочкой», он почти наверняка имеет в виду некоторую форму интерфейса командной строки, как я только что описал. И очень странно в мире Unix называть что-либо «оболочкой», если она не взаимодействует с пользователем, используя модель tty, которую я описываю далее.
Это сбивает с толку, потому что может относиться к нескольким разным вещам.
В Linux есть устройство, называемое «tty». Это абстрактное устройство, которое, как ожидается, будет использоваться для двунаправленной -связи с чем-то, что либо является пользователем, либо каким-то образом получает ввод от пользователя. Иногда это абстрактное устройство может напрямую соответствовать какому-то физическому устройству. Иногда это может быть программа, которая представляет кому-то окно, в котором появляется сообщение и в которое пользователь может вводить текст.
Но причина, по которой существует это абстрактное устройство и причина, по которой его называют «tty», заключается в том, что «tty» — это сокращение от «телетайп», который представлял собой реальное физическое устройство с принтером, печатающим на бумаге, в сочетании с клавиатура. Модель, которую абстрактное устройство «tty» представляет программам, которые его используют, в основном состоит в том, что на другом конце есть телетайп. Вы отправляете ему символы, и эти символы появляются на телетайпе. Когда вы читаете символы из него, эти символы представляют собой клавиши, которые были набраны на клавиатуре.
Старые бумажные -tty на основе принтеров были быстро вытеснены видео tty. На тех, конечно, нет рулона бумаги. А ведь можно перезаписать любой символ на экране. Но вместо того, чтобы предоставлять программам какой-то абстрактный «экранный» интерфейс, ожидается, что программы отправят специальные потоки символов, называемые управляющими последовательностями, которые выполняют множество задач. Обычно существует абстрактная вещь, называемая «курсор», которую можно перемещать по экрану, и любой отправленный символ заменяет то, что находится под курсором, а курсор перемещается на один символ дальше. Часто вы также можете изменить цвет символа, который должен быть напечатан, с помощью управляющих последовательностей.
Существуют «стеклянные tty», которые не следуют этой модели и, следовательно, плохо обрабатываются в мире Unix. Семейство видеотерминалов IBM 3270 относится к этой категории.
То, что пользователи Linux/Unix обычно называют «окном оболочки», представляет собой эмуляцию стеклянного терминала с использованием графического пользовательского интерфейса. Внутри программы, работающие внутри окна оболочки, взаимодействуют с виртуальным tty-устройством, которое иногда называют псевдо-терминалом -tty или псевдо-терминалом -(, также известным как pty ).
Терминал — это просто место, где компьютер и человек должны взаимодействовать. Терминалы могут быть полностью графическими и никоим образом не следовать модели tty,даже если программа может использовать их возможности для имитации этого. Все фактические физические ttys (glass или иным образом )являются терминалами.
Консоль — это особый тип терминала, который, как правило, должен быть напрямую подключен к аппаратному обеспечению, на котором работает операционная система.
В Linux консоль немного виртуализирована, что позволяет использовать специальное нажатие клавиши для переключения между виртуальными консолями. Но эта виртуализация выполняется на реальном оборудовании программным обеспечением в ядре.
Существуют способы использования Linux через так называемую «последовательную консоль», которая представляет собой консоль, подключенную к компьютеру через последовательный порт, такой как USB-порт (, или, на некоторых очень маленьких и/или очень старых компьютерах, какой-то порт RS -232 )и довольно строго следует старой модели телетайпа.
Опять же, идея состоит в том, что эта консоль напрямую физически подключена к компьютеру, а не через какую-то сеть, которая может позволить любому подключиться.
Предполагая, что оболочка подобнаbash
:
URL_1='https://my/sample/url'
URL_2=${URL_1//\//\\\/}
Здесь используется подстановка ${variable//pattern/replacement}
, доступная в некоторых оболочках, с URL_1
в качестве переменной, строкой \/
, т. е. экранированной косой чертой, в качестве шаблона и \\\/
, т. е. экранированной обратной косой чертой, за которой следует скрытая косая черта в качестве замещающего текста. Подстановка заменяет каждое совпадение шаблона замещающим текстом, а приведенный выше код сохраняет результат в переменной URL_2
.
Тестирование:
$ URL_1='https://my/sample/url'
$ URL_2=${URL_1//\//\\\/}
$ printf '%s\n' "$URL_2"
https:\/\/my\/sample\/url
Вы также можете использовать
URL_2=${URL_1//'/'/'\/'}
(т. е. используйте одинарные кавычки вместо экранирования обратной косой черты ).
Попробуйте
$ sed 's%/%\\/%g' < <(echo https://my.domain.com/blabla/temp.htm)
https:\/\/my.domain.com\/blabla\/temp.htm
можно решить так-
user@node-01:~> echo https://my/sample/url >./test1.txt
user@node-01:~> cat test1.txt
https://my/sample/url
user@node-01:~> sed 's/\//\\\//g' test1.txt
https:\/\/my\/sample\/url
Если вы хотите заменить встроенный, используйте sed-i Ваше здоровье!