en
Feedback
GNU/Linux | Notes

GNU/Linux | Notes

Open in Telegram

Open Source, GNU/Linux, Debian/Ubuntu, Dotfiles, Software, Scripts, Notes, Terminal, Shell, Tools, Games, Fun, Misc, Music, Geek, Free Software Movement. Почта: krekhov.dev@gmail.com Кто я: https://t.me/krxnotes/246 GitHub: https://github.com/krekhovx

Show more
2 280
Subscribers
-124 hours
-17 days
-1230 days
Posts Archive
Как поднять себе настроение работая в оболочке ? Я нашел два прикольных пакета в Debian, называются они cowsay и oneko. Можно
Как поднять себе настроение работая в оболочке ? Я нашел два прикольных пакета в Debian, называются они cowsay и oneko. Можно позабавиться:
$ sudo apt-get install -y cowsay
$ cowsay "Have a good day!"
Я например добавил cowsay себе в ~/.profile и при каждом входе в оболочку вижу эту забавную надпись (смотреть скриншот). Забавляемся дальше:
$ sudo apt-get install -y oneko
$ oneko &
За курсором будет бегать прикольный котик! ——— @krxnotes

Что делает данная команда ? Пример:
$ exec $SHELL
Переменная окружения $SHELL имеет значение текущей оболочки по-умолчанию (ее путь), в моем случае это /bin/bash. Что делает exec ? Он заменяет текущий процесс на новый, то есть заменяет текущий /bin/bash на новый /bin/bash. Таким образом, вы остаетесь в той же оболочке, но все предыдущие настройки и процессы текущей оболочки будут сброшены. Это может быть полезно для обновления или сброса окружения без необходимости открывать новый терминал. Например, мы изменили какие-то файлы окружения пользователя, допустим это /etc/bash.bashrc, чтобы не открывать новый терминал, можно просто запустить команду сброса/запуска нового /bin/bash после изменений. ——— @krxnotes

Команды alias и unalias Список всех псевдонимов:
$ alias
Удалить псевдоним:
$ unalias <my-alias>
Удалить все псевдонимы:
$ unalias -a
Если псевдонимы прописаны в .bashrc, можно сделать:
$ exec $SHELL
чтобы вернуть их после unalias команды. ——— @krxnotes

Почему /bin/sh В различных проектах часто используют не /bin/bash, а /bin/sh, почему ? Он же старый! /bin/sh или Dash (Debian Almquist Shell) - легковесная оболочка командной строки, предназначенная для замены более тяжеловесного Bash. Она была создана для ускорения процесса загрузки и выполнения скриптов в системе. Поэтому многие дистрибутивы Linux, такие как Debian и Ubuntu, используют Dash в качестве оболочки по умолчанию. Скрипты, написанные на /bin/sh, обычно используются для максимальной переносимости между различными Unix-подобными операционными системами. Оболочка /bin/sh представляет собой стандартную оболочку командной строки в Unix-подобных системах, которая должна быть доступна на всех таких системах. В то время как /bin/bash (Bourne-Again Shell) является расширенной оболочкой командной строки, которая предоставляет больше функций, чем /bin/sh. Она представляет собой улучшенную версию стандартной оболочки /bin/sh, что делает ее более мощной и удобной для использования. Когда скрипт написан на /bin/sh, он чаще всего будет работать на всех Unix-подобных системах, исключая специфичные возможности, предоставляемые /bin/bash. Но если в скрипте используются уникальные функции /bin/bash, то он может не работать на системах, где /bin/bash не является стандартной оболочкой. Поэтому использование /bin/sh в некоторых проектах может быть обусловлено требованием максимальной переносимости скрипта между различными Unix-подобными системами. ——— @krxnotes

Библиотечные функции и системные вызовы. Библиотечные функции - верхний уровень, работает в пространстве пользователя, обеспечивает более удобный интерфейс к функциям, которые выполняют работу (системным вызовам). То есть библиотечные функции обращаются к системным вызовам. Системные вызовы - работают в привилегированном режиме от имени ядра и предоставляются самим ядром. Например, библиотечная функция printf() формирует строку, в соответствии с заданным форматом, и передает ее низкоуровневому системному вызову write(), который и выводит строку на устройство стандартного вывода. Цепочка: Программа обращается к библиотечным функциям, находясь в пользовательском режиме. Затем библиотечная функция обращается к системным вызовам. Системные вызовы уже работают в режиме привилегированном (являются частью ядра). Затем когда системный вызов завершает работу, он возвращает управление библиотечной функции и происходит обратный переход в пользовательский режим. Unix производит переключение из пространства пользователя в пространство ядра всякий раз, когда приложение делает системный вызов или приостанавливается аппаратным прерыванием. Например, код модуля исполняется в пространстве ядра, а обычная программа, исполняется в пространстве пользователя (прикладное ПО). ——— @krxnotes

Что такое поддержка ? В контексте операционных систем "поддержка" обычно означает, что разработчики продолжают предоставлять обновления безопасности, исправления ошибок и иногда новые функции для определенной версии операционной системы. Когда говорят, что поддержка для определенной версии операционной системы закончилась, это означает, что производитель перестал предоставлять обновления для этой версии. Это означает, что безопасность и стабильность операционной системы могут стать уязвимыми, так как обновления безопасности не будут выпускаться. Например, если в CentOS 8 закончилась поддержка, это означает, что не будут выпускаться обновления безопасности и исправления ошибок для этой версии. В то время как поддержка для CentOS 7, возможно, продолжается, и обновления будут выпускаться. Например, Debian Bullseye имеет стабильный выпуск и имеет поддержку. Обычно стабильные версии дистрибутивов длятся около 5 лет. Однако это может измениться в зависимости от решения проекта. ——— @krxnotes

Как установить скаченный шрифт ? Например, появилось необходимость установить новый шрифт в терминале. Скачиваем шрифт из интернета (обычно с форматом .ttf), затем кладем его в ~/.fonts директорию. Обновить кэш:
$ fc-cache -fv
Проверить доступность:
$ fc-list | grep "my new font"
Затем в настройках терминала выбрать новый шрифт. ——— @krxnotes

Что такое FAQ ? FAQ - это аббревиатура от английского выражения "Frequently Asked Questions", что в переводе на русский язык означает "Часто задаваемые вопросы". FAQ представляет собой список самых часто задаваемых вопросов и ответов на них, который обычно размещается на веб-сайте или в документации к продукту или услуге. Это помогает пользователям быстро найти ответы на свои вопросы без необходимости обращаться к службе поддержки или другим источникам информации. ——— @krxnotes

Типы файлов. 1. Обычный файл (regular file) '-' 2. Каталог (directory) 'd' 3. Именованный канал (named pipe) 'p' 4. Символическая ссылка (soft link) 'l' 5. Специальный файл устройства (device file) 'c' и 'b' 6. Сокет (socket) 's' ——— @krxnotes

Что такое fingerprint ? При первом подключении по SSH к удаленной машине генерируется fingerprint и добавляется в файл ~/.ssh/known_hosts, наш ПК запоминает эту комбинацию и сверяет ее при каждом входе, если кто-то переустановит SSH сервер или OC, то мы об этом узнаем, потому что изменится fingerprint. ——— @krxnotes

Локализация. Набор переменных, который определяет язык приложений, консоли и т.д. Например, разбор en_US.UTF8 en - язык. US - региональная настройка. UTF8 - кодировка. Язык - тут думаю понятно =) Региональная настройка - это определенные параметры, такие как формат даты и времени, валюта, числовой формат и другие локальные настройки, которые могут отличаться от других стран. Кодировка - определяет соответствие между символами и числовыми значениями, которые используются компьютером для их хранения и обработки. Получить все доступные локализации:
$ locale -a
Чтобы изменить локализацию можно задать:
$ export LANG=en_US.UTF8
Если при выводе выдаются ошибки типа: Cannot set LC_CTYPE to default locale: No such file or directory То скорее всего задается локализация, которая не была сгенерирована. Для этого нужно подправить /etc/locale.gen файл. В этом файле нужно раскомментировать нужную локализацию, например en_US.UTF-8 UTF-8 Затем выполнить:
$ locale-gen
Появится новая локализация:
$ locale -a
Можно запустить приложение с другим языком, например:
$ LANGUAGE=zh_TW vim
LANG - Локализация, установленная в этой переменной используется в качестве значения для всех остальных LC_* переменных. LANGUAGE - Запасные локализации (нужно для вывода сообщений на разных языках). ——— @krxnotes

Что такое upstream ? Процесс клонирования — это, в сущности, создание собственного репозитория (Б) на основе существующего (А) с целью добавить к продукту какие-то собственные изменения. Это называется fork (клонирование). Так вот, (Б) — это форк/клон, а (А) — это upstream. Создатель форка может быть никак не связан с создателями проекта и обычно может вносить изменения в форк, но не в upstream. В upstream он может только предлагать изменения. Поддержкой upstream занимаются мейнтейнеры (сопровождающие) проекта. Их версия является "канонической", и все изменения, которые они принимают, обычно в конечном счёте попадают в форки, которые от них зависят. В этом смысле они "выше по течению": те изменения, что они принимают, "растекаются вниз" по форкам. Отсюда и название. В целом, эти термины характеризуют определённый вид отношений между двумя репозиториями. Это необязательно должны быть два серверных репозитория. Эти термины применимы и к ситуации, когда у вас есть локальный клон репозитория с сервера. Репозиторий на сервере — это upstream, а у вас, в некотором смысле, форк. ——— @krxnotes

Поддерживаю! ——— @krxnotes
Поддерживаю! ——— @krxnotes

Настройка компиляции и линковки (переменные). CC Относится к компилятору (gcc, cc и т.д.). CFLAGS Этап компиляции. (Compiler Flags) - это флаги, передаваемые компилятору (например, gcc) для управления процессом компиляции исходного кода. Они могут включать опции для оптимизации кода, установки уровня предупреждений, определения макросов и т.д. Например: -Wall, -g3, -O0, -I/usr/local/include LDFLAGS Этап компоновки. (Linker Flags) - это флаги, передаваемые компоновщику (линкеру) для управления процессом компоновки объектных файлов в исполняемый файл или библиотеку. Они могут включать опции для указания путей к библиотекам, которые нужно подключить, установки версии библиотеки, определения символов и т.д. Например: -lm LIBS Включает в себя статические и динамические библиотеки (-lm, archive.a). CPPFLAGS Дополнительные флаги для препроцессора. Переменные вида CXX относятся к C++, например CXXFLAGS Опции предупреждений gcc: -Werror, -Wall Языковой стандарт: -std=c99 -ansi ——— @krxnotes

gcc (GNU Compiler Collection). Получение объектного файла (-с (compile) означает только компиляция - без компоновки):
$ gcc -c main.c
Процесс сборки, получение бинарного файла (-o задает имя исполняемого файла):
$ gcc -o exe a.o b.o
Компиляция одиночного файла:
$ gcc main.c -o program
Поместить отладочную информацию в объектный/исполняемый файл:
$ gcc -g<level>
$ gcc -g3 main.c
Удалить отладочную информацию из ELF файла:
$ strip -s a.out
Различные уровни оптимизации 0-3, 0 - НЕ оптимизировать код:
$ gcc -O0 main.c
-O3 означает оптимизировать код (улучшает его производительность, уменьшает размер кода и т.д.) Даже если программа собрана с -O3, volatile все равно говорит компилятору - НЕ оптимизировать код. Вывод сообщений о всех предупреждениях или ошибках, возникающих во время компиляции:
-Wall
Дополнительные предупреждения:
-Wextra
Эти флаги служат для поиска библиотек, передается компоновщику:
-L<путь> -l<библ>
Для поиска заголовочных файлов -I/usr/local/include
-I<путь>
В этой команде линкуется (связывается) exe с библиотекой math
gcc -o exe sums.c -lm
Бывают случаи когда нужной библиотеки нет в стандартной библиотеке и компиляцию придется осуществлять с дополнительным флагом, например так:
$ gcc main.c -lpthread
——— @krxnotes

sync. Всё что хранилось в памяти, буферах, кэшах, будет записано на диск, предотвращается потеря данных. Ядро хранит данные в памяти во избежание частых (обычно медленных) дисковых операций чтения и записи. Это повышает производительность, но если компьютер аварийно завершает работу, данные могут быть утеряны, либо может быть повреждена файловая система. sync гарантирует, что все, что хранилось в памяти, будет записано на диск. Например в выводе команды:
$ free -h
В секции buff/cache можно увидеть кол-во используемой памяти и вот именно она будет сброшена на диск. Например:
$ sync; umount /mnt
Так как это обеспечит более надежное сохранение данных на диск. Команда sync гарантирует, что все данные, находящиеся в оперативной памяти, будут записаны на диск перед тем как размонтировать файловую систему. Команда sync в Linux предназначена для записи данных из кэша (включая буфер и кэш страниц) на диск. Однако она не очищает кэш и буферы. То есть, после выполнения команды sync, данные остаются в кэше, но они уже записаны на диск, что обеспечивает их сохранность в случае отключения питания или сбоя. Поэтому, если вы используете команду sync и затем проверяете секцию buff/cache с помощью команды free -h, вы не увидите уменьшения этой секции. Это нормальное поведение. ——— @krxnotes

Этапы разработки (коротко). 1. Сбор и обработка требований 2. Получение технических заданий, планы работ 3. Разработка - Дизайн - Кодирование - Тестирование - Документирование 4. Поддержка - Внедрение (Установка ПО, обучение пользователей) - Сопровождение (Исправление выявленных ошибок, поддержка пользователей) ——— @krxnotes

Этапы компиляции. 1. Препроцессинг (обработка - cpp компонент)
$ gcc -E main.c -o main.i
Текст обрабатывается, производится: - замена комментариев пустыми строками - обрабатывает директивы #define / #ifdef - включает #include (копирует содержимое файлов как текст) 2. Трансляция кода в ассемблер (cpp компонент)
$ gcc -S main.i -o main.s
- транслирует исходный текст программы в ассемблерный код 3. Компиляция (объектный файл - as компонент)
$ as main.s -o main.o
- транслирует ассемблерный код в машинный код (бинарный модуль) - обработка и анализ кода - выполняется удаление излишних конструкций и упрощение кода с сохранением его смысла - генерация кода из преобразованного, получается объектный файл Объектный файл - это программа машинных кодов с частичным сохранением символьной информации, необходимой в процессе сборки. При отладочной сборке возможно сохранение большого количества символьной информации (переменные, функции, типы). 4. Компоновка - линковка (связывание воедино всех объектных файлов - ld компонент)
$ gcc main.o -o program
- определяет связь объектных файлов, нужно чтобы файл А увидел переменную в файле Б, этой задачей занимается компоновщик. Когда программа делает ссылку на функцию, содержащуюся в библиотеке, компоновщик отыскивает эту функцию (например printf()) и добавляет ее код к программе. Таким образом, к программе добавляются только те функции, которые действительно будут в ней использоваться. При этом возможны ошибки связывания, если объявили функцию не в том месте, то получим ошибку на этом этапе. 5. Загрузка Вызвать загрузчик для загрузки нашей программы в память. Кратко: исходный текст -> препроцессинг -> ассемблер -> машинный код -> компоновка -> загрузка. Можно не вызывать данные компоненты напрямую, в компиляторе они уже включены: cpp - препроцессор as - ассемблер gcc - компилятор ld - линковка ——— @krxnotes

Компилятор. Термины - коротко. Компилятор распознает язык по расширению файла. Исходник Исходный файл содержит код на языке Си, файл оканчиваются на .c, например file.c Компиляция Исходный код пропускается через компилятор, проверка на ошибки и т.д. Результат Бинарный файл. Компилятор создает новый файл (исполняемый файл/бинарник), содержит машинный код, поток единиц и нулей, понятные ПК, это и есть программа. Кодирование - бинарный код (текст воспроизводится в бинарный код (0/1)). Декодирование - бинарный код воспроизводится в текст. Трансляторы: Компилятор -> СКОРОСТЬ Интерпретатор -> ГИБКОСТЬ ——— @krxnotes

Что такое ELF ? Executable and Linkable Format. Файл ELF является выходным файлом компилятора или линкера и имеет двоичный формат. Вместо того чтобы напрямую использовать язык CPU, мы используем ЯП, имеющий стандартные функции. Компилятор транслирует эти функции в объектный код. Этот объектный код затем линкуется в полную программу (с помощью ld). Результатом является двоичный файл, который может быть выполнен на конкретной платформе и конкретном типе CPU. Объектные файлы, библиотеки, дампы ядра, a.out файлы, всё это ELF файлы.
$ file a.out
a.out: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=7478e8fc71c172b058f3633fabcafb3b110c00a0, for GNU/Linux 3.2.0, not stripped ——— @krxnotes