——— НАВИГАЦИЯ ———
Git: #git
Жвачка: #fun
Ядро: #kernel
Разное: #misc
ПО: #software
Игры: #games
Книги: #books
Люди: #people
Сборка: #build
Утилиты: #utils
Python: #python
Теория: #theory
Debian: #debian
Новости: #news
Оболочка: #shell
Память: #memory
СПО: #opensource
Терминал: #terminal
Мои мысли: #thoughts
Безопасность: #security
Информация канала: #info
Конфигурационные файлы: #dotfiles
Кто я: https://xn--r1a.website/krxnotes/246
Откуда берется информация: https://xn--r1a.website/krxnotes/500
Поддержать канал:
Git: #git
Жвачка: #fun
Ядро: #kernel
Разное: #misc
ПО: #software
Игры: #games
Книги: #books
Люди: #people
Сборка: #build
Утилиты: #utils
Python: #python
Теория: #theory
Debian: #debian
Новости: #news
Оболочка: #shell
Память: #memory
СПО: #opensource
Терминал: #terminal
Мои мысли: #thoughts
Безопасность: #security
Информация канала: #info
Конфигурационные файлы: #dotfiles
Кто я: https://xn--r1a.website/krxnotes/246
Откуда берется информация: https://xn--r1a.website/krxnotes/500
Поддержать канал:
2202 2036 6907 4603
Спасибо, что читаете!Блокировка/автовыход из терминала/консоли
Автовыход из терминала (bash): Переменная окружения
Автоблокировка: Для автоблокировки можно использовать утилиту
Заблокировать текущую консоль:
Заблокировать все консоли:
Обе эти настройки помогут повысить безопасность, особенно в многопользовательских системах или в условиях, где доступ к терминалу должен быть ограничен в ваше отсутствие.
#shell #utils #security
Автовыход из терминала (bash): Переменная окружения
TMOUT задает таймаут в секундах для автоматического выхода из сессии bash. Сессия завершится через 60 секунд неактивности:export TMOUT=60
Автоблокировка: Для автоблокировки можно использовать утилиту
vlock. Это утилита, которая блокирует текущую виртуальную консоль, требуя ввода пароля для разблокировки. Это удобно для временной блокировки доступа к терминалу, когда вам необходимо отойти, не выходя из сессии.$ apt-get install -y vlock
Заблокировать текущую консоль:
$ vlock
Заблокировать все консоли:
$ vlock -a
Обе эти настройки помогут повысить безопасность, особенно в многопользовательских системах или в условиях, где доступ к терминалу должен быть ограничен в ваше отсутствие.
#shell #utils #security
Оболочки (Shells)
Shell - это общее название для командных интерпретаторов, которые позволяют взаимодействовать с операционной системой через командную строку. Bash (Bourne Again SHell) - это один из видов Shell, который является стандартным и наиболее распространенным в Linux-системах. Таким образом, Bash - это конкретный тип shell, но не единственный.
Покажет все доступные оболочки:
#shell
Shell - это общее название для командных интерпретаторов, которые позволяют взаимодействовать с операционной системой через командную строку. Bash (Bourne Again SHell) - это один из видов Shell, который является стандартным и наиболее распространенным в Linux-системах. Таким образом, Bash - это конкретный тип shell, но не единственный.
Покажет все доступные оболочки:
$ cat /etc/shells
#shell
Сортировка и удаление дубликатов в файле
Предположим, ваш файл содержит около 8 тысяч строк с путями, и вы не уверены, есть ли среди них дубликаты. Как можно упорядочить и очистить файл?
В файле много подобных строк:
Команда выглядит так:
#shell #utils
Предположим, ваш файл содержит около 8 тысяч строк с путями, и вы не уверены, есть ли среди них дубликаты. Как можно упорядочить и очистить файл?
В файле много подобных строк:
po/ru/man1/arch.1.po
po/ru/man1/arch.1.po
po/ru/man1/b2sum.1.po
po/ru/man1/base32.1.po
po/ru/man1/base64.1.po
po/ru/man1/basename.1.po
po/ru/man1/basename.1.po
Команда выглядит так:
$ sort paths.txt | uniq > clean-paths.txt
#shell #utils
Vim
Это не IDE в традиционном понимании, а скорее текстовый редактор. Однако благодаря своей расширяемости и поддержке множества плагинов, Vim можно настроить так, чтобы он функционировал как полноценная IDE.
Вот несколько инструментов и плагинов, которые часто используются для превращения Vim в мощную IDE:
1. fzf: Это командный инструмент для поиска файлов, который можно интегрировать с Vim для быстрого поиска и открытия файлов в проекте. Он помогает навигации по большим кодовым базам.
2. NERDTree: Плагин для управления файловой системой, который предоставляет дерево каталогов, подобное тому, что есть в других IDE. Это помогает легко перемещаться между файлами проекта.
3. vim-better-whitespace: Плагин, который подсвечивает и удаляет лишние пробелы в коде. Он помогает поддерживать чистоту и консистентность стиля кодирования, улучшая читаемость и предотвращая ошибки.
и многие другие.
Ссылка на мой .vimrc
#shell #dotfiles
Это не IDE в традиционном понимании, а скорее текстовый редактор. Однако благодаря своей расширяемости и поддержке множества плагинов, Vim можно настроить так, чтобы он функционировал как полноценная IDE.
Вот несколько инструментов и плагинов, которые часто используются для превращения Vim в мощную IDE:
1. fzf: Это командный инструмент для поиска файлов, который можно интегрировать с Vim для быстрого поиска и открытия файлов в проекте. Он помогает навигации по большим кодовым базам.
2. NERDTree: Плагин для управления файловой системой, который предоставляет дерево каталогов, подобное тому, что есть в других IDE. Это помогает легко перемещаться между файлами проекта.
3. vim-better-whitespace: Плагин, который подсвечивает и удаляет лишние пробелы в коде. Он помогает поддерживать чистоту и консистентность стиля кодирования, улучшая читаемость и предотвращая ошибки.
и многие другие.
Ссылка на мой .vimrc
#shell #dotfiles
fzf, fzy, ripgrep утилиты
Установка:
fzf (Fuzzy Finder) — это интерактивный инструмент командной строки для нечеткого поиска и фильтрации. Пример использования:
fzy — аналогичный инструмент, ориентированный на скорость и простоту, неинтерактивный, но также эффективен для фильтрации. Пример:
ripgrep (rg) — мощный и быстрый инструмент для поиска текста в файлах. Поддерживает рекурсивный поиск и регулярные выражения, игнорирует файлы, указанные в
Все три утилиты отлично дополняют рабочие процессы разработчиков, ускоряя поиск и навигацию по проектам. Часто используются в совокупности с Vim, или другими текстовыми редакторами/IDE.
#shell #utils
Установка:
$ apt-get install -y fzf fzy ripgrep
fzf (Fuzzy Finder) — это интерактивный инструмент командной строки для нечеткого поиска и фильтрации. Пример использования:
$ find . -type f | fzf
fzy — аналогичный инструмент, ориентированный на скорость и простоту, неинтерактивный, но также эффективен для фильтрации. Пример:
$ find . -type f | fzy
ripgrep (rg) — мощный и быстрый инструмент для поиска текста в файлах. Поддерживает рекурсивный поиск и регулярные выражения, игнорирует файлы, указанные в
.gitignore. Идеален для поиска текста в проектах:$ rg 'search_term'
Все три утилиты отлично дополняют рабочие процессы разработчиков, ускоряя поиск и навигацию по проектам. Часто используются в совокупности с Vim, или другими текстовыми редакторами/IDE.
#shell #utils
shellcheck
ShellCheck — это статический анализатор скриптов на языке shell (bash, sh и других). Основная цель утилиты — помочь разработчикам выявлять и исправлять ошибки, потенциальные баги и нарушения стиля в их скриптах. ShellCheck анализирует код и предоставляет рекомендации по улучшению, предупреждая о возможных проблемах, таких как:
1. Синтаксические ошибки.
2. Неинициализированные переменные.
3. Некорректное использование команд.
4. Проблемы с кавычками и экранированием.
5. Советы по улучшению читаемости и поддерживаемости кода.
Установка:
Запуск:
Использование ShellCheck помогает сделать скрипты более надежными и переносимыми. Оно особенно полезно для автоматизации процессов, где стабильность и корректность выполнения скриптов имеют критическое значение.
#utils #shell
ShellCheck — это статический анализатор скриптов на языке shell (bash, sh и других). Основная цель утилиты — помочь разработчикам выявлять и исправлять ошибки, потенциальные баги и нарушения стиля в их скриптах. ShellCheck анализирует код и предоставляет рекомендации по улучшению, предупреждая о возможных проблемах, таких как:
1. Синтаксические ошибки.
2. Неинициализированные переменные.
3. Некорректное использование команд.
4. Проблемы с кавычками и экранированием.
5. Советы по улучшению читаемости и поддерживаемости кода.
Установка:
$ apt install shellcheck
Запуск:
$ shellcheck ./script.sh
Использование ShellCheck помогает сделать скрипты более надежными и переносимыми. Оно особенно полезно для автоматизации процессов, где стабильность и корректность выполнения скриптов имеют критическое значение.
#utils #shell
exec
Пример:
Переменная окружения
#shell #utils
Пример:
$ exec $SHELL
Переменная окружения
$SHELL имеет значение текущей оболочки по-умолчанию (ее путь), в моем случае это /bin/bash. Что делает exec? Он заменяет текущий процесс на новый, то есть заменяет текущий /bin/bash на новый /bin/bash. Таким образом, вы остаетесь в той же оболочке, но все предыдущие настройки и процессы текущей оболочки будут сброшены. Это может быть полезно для обновления или сброса окружения без необходимости открывать новый терминал. Например, мы изменили какие-то файлы окружения пользователя, допустим это /etc/bash.bashrc, чтобы не открывать новый терминал, можно просто запустить команду сброса/запуска нового /bin/bash после изменений.#shell #utils
Почему /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-подобными системами.
#shell #debian
В различных проектах часто используют НЕ
/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-подобными системами.
#shell #debian
umask
Только владелец должен иметь доступ, достаточный для полноценной работы с файлами и каталогами, а остальные вообще не должны иметь прав. Эту ситуацию можно исправить изменением маски. Я рекомендую установить ее в 077. В этом случае для каталогов права будут определены так: 777 - 077 = 700 (drwx------), а для файлов: 666 - 077 = 600 (или -rw-------). Тогда доступ к файлу имеет только владелец. Все остальные - отдыхают.
Выдержка из книги Linux глазами хакера, 4 издание - Михаил Фленов.
Можно прописать в
Ссылка на калькулятор: https://wintelguy.com/umask-calc.pl
#shell #books #security #dotfiles
Только владелец должен иметь доступ, достаточный для полноценной работы с файлами и каталогами, а остальные вообще не должны иметь прав. Эту ситуацию можно исправить изменением маски. Я рекомендую установить ее в 077. В этом случае для каталогов права будут определены так: 777 - 077 = 700 (drwx------), а для файлов: 666 - 077 = 600 (или -rw-------). Тогда доступ к файлу имеет только владелец. Все остальные - отдыхают.
Выдержка из книги Linux глазами хакера, 4 издание - Михаил Фленов.
Можно прописать в
~/.bashrc для обычного пользователя:# set a secure umask to 077
# files: 600 (rw-------)
# directories: 700 (rwx------)
umask 077
Ссылка на калькулятор: https://wintelguy.com/umask-calc.pl
#shell #books #security #dotfiles
exec и tee
С помощью exec можно делать замену дескрипторов/процессов.
tee читает из своего stdin и пишет в stdout например, сценарий
Затем выполнить:
Разбор. Здесь два процесса, первый наш исполняемый
Часто с tee командами возникает (freeze shell) tee останавливает появления приглашения PS1, который ожидает EOF в своем stdin, в качестве обходного пути можно сделать
Перенаправить stdout и stderr в
Перенаправить stdout в
Перенаправить stderr в
Для заметки:
Другой пример, сценарий
Трюки без exec, а с tee:
#shell #utils
С помощью exec можно делать замену дескрипторов/процессов.
tee читает из своего stdin и пишет в stdout например, сценарий
script.sh:#!/bin/bash
exec 2> >(tee file.log)
sleep .1
>&1 echo "hello 1"
>&2 echo "hello 2"
Затем выполнить:
$ ./script.sh
Разбор. Здесь два процесса, первый наш исполняемый
script.sh, а второй это tee. У первого процесса stderr (2 файловый дескриптор) смотрит в pipe, у второго процесса stdin (1 файловый дескриптор) смотрит тоже в этот pipe, то есть весь stderr сценария будет перенаправляться в tee, который будет записывать это в файл file.log.Часто с tee командами возникает (freeze shell) tee останавливает появления приглашения PS1, который ожидает EOF в своем stdin, в качестве обходного пути можно сделать
sleep .1 как в примере выше.Перенаправить stdout и stderr в
file.txt:exec &> >(tee file.txt)
Перенаправить stdout в
file.txt:exec 1> >(tee file.txt)
Перенаправить stderr в
file.txt:exec 2> >(tee file.txt)
Для заметки:
&> и >& одинаковы
2>&1 перенаправляет stderr в stdout
>/dev/null перенаправляет только stdout
Другой пример, сценарий
main.sh:#!/bin/bash
>&1 echo "hello 1"
>&2 echo "hello 2"
Трюки без exec, а с tee:
$ ./main.sh 2>&1 | tee logs/file.log
$ ./main.sh 2> >(tee logs/stderr.log)
#shell #utils
Сценарии командной оболочки.pdf
6.4 MB
Командная строка Linux.pdf
5.2 MB
Это база. Книга, которая отлично подходит для всех, кто хочет научиться уверенно пользоваться командной строкой в Linux. В ней подробно и понятно объясняются основные команды, приёмы работы с файлами, процессами и многое другое. Если хотите разобраться в Linux с нуля или углубить знания — очень советую!
#books #shell
#books #shell
Выполнение команд в SubShell
Команда выполняется в текущем Shell:
Команда выполняется во временном дочернем процессе — в SubShell:
SubShell — это отдельная копия Shell, которая запускается для команд в круглых скобках. После выполнения команд внутри ( ) Subshell завершается, и все изменения (переменные, текущий каталог и т.п.) не сохраняются в основном Shell.
Пример изоляции:
Subshell позволяет временно менять окружение, не затрагивая основной shell-сеанс.
#shell
Команда выполняется в текущем Shell:
$ ls
Команда выполняется во временном дочернем процессе — в SubShell:
$ (ls)
SubShell — это отдельная копия Shell, которая запускается для команд в круглых скобках. После выполнения команд внутри ( ) Subshell завершается, и все изменения (переменные, текущий каталог и т.п.) не сохраняются в основном Shell.
Пример изоляции:
$ cd /tmp
$ (cd /; ls)
$ pwd # по‑прежнему /tmp
Subshell позволяет временно менять окружение, не затрагивая основной shell-сеанс.
#shell
Управление фоновыми задачами в Shell
Запускает команду в фоне:
Список процессов:
Список фоновых задач:
Только PID фоновых задач:
Отправить задачу в фон:
Вернуть задачу с номером 1 на передний план:
Продолжить выполнение в фоне:
#shell
Запускает команду в фоне:
$ xlogo &
Список процессов:
$ ps
Список фоновых задач:
$ jobs
Только PID фоновых задач:
$ jobs -p
Отправить задачу в фон:
Ctrl + Z # остановить задачу (перевести в состояние Stopped)
Вернуть задачу с номером 1 на передний план:
$ fg %1
Продолжить выполнение в фоне:
$ bg %1
#shell
Локализация
Набор переменных, который определяет язык приложений, консоли и другие локальные параметры системы.
Например, разбор en_US.UTF8:
en - язык.
US - региональная настройка.
UTF8 - кодировка.
Язык - тут думаю понятно.
Региональная настройка - это определенные параметры, такие как формат даты и времени, валюта,
числовой формат и другие локальные настройки, которые могут отличаться от других стран.
Кодировка - определяет соответствие между символами и числовыми значениями, которые используются
компьютером для их хранения и обработки.
Получить все доступные локализации:
Чтобы изменить локализацию можно задать:
Если при выводе выдаются ошибки типа: Cannot set LC_CTYPE to default locale: No such file or directory
То скорее всего задается локализация, которая не была сгенерирована. Для этого нужно подправить
Затем выполнить:
Появится новая локализация:
Можно запустить приложение с другим языком, например:
LANG - Локализация, установленная в этой переменной используется в качестве значения для всех остальных LC_* переменных.
LANGUAGE - Запасные локализации (нужно для вывода сообщений на разных языках).
#shell #utils
Набор переменных, который определяет язык приложений, консоли и другие локальные параметры системы.
Например, разбор 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 - Запасные локализации (нужно для вывода сообщений на разных языках).
#shell #utils
dotfiles-debian
В репозитории находятся различные конфигурации инструментов, которые я использую в окружении Xfce для Debian, это моё повседневное рабочее окружение: firefox, bash, vim, vifm, mc, tmux, gdb, git, newsboat, neomutt, dircolors, bash-completion, различные цветовые схемы для xfce4-terminal,
> GitHub
#shell #terminal #dotfiles #debian #info
В репозитории находятся различные конфигурации инструментов, которые я использую в окружении Xfce для Debian, это моё повседневное рабочее окружение: firefox, bash, vim, vifm, mc, tmux, gdb, git, newsboat, neomutt, dircolors, bash-completion, различные цветовые схемы для xfce4-terminal,
.bash_aliases, .bashrc, локальные скрипты, классические игры и многое, многое другое.> GitHub
#shell #terminal #dotfiles #debian #info
skel
В нем лежат файлы, которые копируются в домашний каталог каждого нового пользователя. Обычно это начальные настройки:
Это как бы некий скелет (skeleton).
#shell
/etc/skel — это шаблон домашней директории.В нем лежат файлы, которые копируются в домашний каталог каждого нового пользователя. Обычно это начальные настройки:
.bashrc, .profile, .bash_logout и подобное. Если нужно, чтобы все новые пользователи автоматически получали какие‑то файлы или настройки — можно положить их в /etc/skelЭто как бы некий скелет (skeleton).
#shell