GNU/Linux | Notes
2.4K subscribers
111 photos
8 files
75 links
Open Source, Dotfiles, Debian/Ubuntu, Software, Linux, Scripts, Notes, Terminal, Shell, Gnu, Tools, Games, Fun, Free Software Movement.

Автор: Кирилл Рехов
Почта: krekhov.dev@gmail.com
Кто я: https://xn--r1a.website/krxnotes/246
GitHub: https://github.com/krekhovx
Download Telegram
Сортировка и удаление дубликатов в файле

Предположим, ваш файл содержит около 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
🔥12👍5😁1
Vim

Это не IDE в традиционном понимании, а скорее текстовый редактор. Однако благодаря своей расширяемости и поддержке множества плагинов, Vim можно настроить так, чтобы он функционировал как полноценная IDE.

Вот несколько инструментов и плагинов, которые часто используются для превращения Vim в мощную IDE:

1. fzf: Это командный инструмент для поиска файлов, который можно интегрировать с Vim для быстрого поиска и открытия файлов в проекте. Он помогает навигации по большим кодовым базам.

2. NERDTree: Плагин для управления файловой системой, который предоставляет дерево каталогов, подобное тому, что есть в других IDE. Это помогает легко перемещаться между файлами проекта.

3. vim-better-whitespace: Плагин, который подсвечивает и удаляет лишние пробелы в коде. Он помогает поддерживать чистоту и консистентность стиля кодирования, улучшая читаемость и предотвращая ошибки.

и многие другие.

Ссылка на мой .vimrc

#shell #dotfiles
👍122🎄1
fzf, fzy, ripgrep утилиты

Установка:
$ 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
63👍1
shellcheck

ShellCheck — это статический анализатор скриптов на языке shell (bash, sh и других). Основная цель утилиты — помочь разработчикам выявлять и исправлять ошибки, потенциальные баги и нарушения стиля в их скриптах. ShellCheck анализирует код и предоставляет рекомендации по улучшению, предупреждая о возможных проблемах, таких как:

1. Синтаксические ошибки.
2. Неинициализированные переменные.
3. Некорректное использование команд.
4. Проблемы с кавычками и экранированием.
5. Советы по улучшению читаемости и поддерживаемости кода.

Установка:
$ apt install shellcheck


Запуск:
$ shellcheck ./script.sh


Использование ShellCheck помогает сделать скрипты более надежными и переносимыми. Оно особенно полезно для автоматизации процессов, где стабильность и корректность выполнения скриптов имеют критическое значение.

#utils #shell
🔥6👍431
exec

Пример:
$ exec $SHELL


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

#shell #utils
🔥633❤‍🔥2
alias & unalias

Список всех псевдонимов:
$ alias


Удалить псевдоним:
$ unalias <my-alias>


Удалить все псевдонимы:
$ unalias -a


Если псевдонимы прописаны в .bashrc, можно сделать:
$ exec $SHELL

чтобы вернуть их после unalias команды.

#shell #utils
6🔥2
Почему /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-подобными системами.

#shell #debian
11👍5😁2
dotfiles-debian

В репозитории находятся различные конфигурации инструментов, которые я использую при разработке в окружении XFCE для Debian: bash, vim, vifm, mc, tmux, gdb, git, newsboat, dircolors, bash-completion, xfce4-terminal, различные цветовые схемы для терминала, .bash_aliases, .bashrc, локальные скрипты и т.д.

> GitHub

#shell #terminal #dotfiles #debian #info
6👎42👌1
umask

Только владелец должен иметь доступ, достаточный для полноценной работы с файлами и каталогами, а остальные вообще не должны иметь прав. Эту ситуацию можно исправить изменением маски. Я рекомендую установить ее в 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
👍12🔥2🤯2
exec и tee

С помощью 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
53👍2❤‍🔥1
Сценарии командной оболочки.pdf
6.4 MB
Рекомендую отличную книгу для освоения Bash. По ней я учился писать свои первые сценарии =) Всё объясняется понятно, много практики и примеров для автоматизации задач в Unix. Если хотите уверенно работать с командной строкой — обязательно посмотрите!

#books #shell
👍2974
Командная строка Linux.pdf
5.2 MB
Это база. Книга, которая отлично подходит для всех, кто хочет научиться уверенно пользоваться командной строкой в Linux. В ней подробно и понятно объясняются основные команды, приёмы работы с файлами, процессами и многое другое. Если хотите разобраться в Linux с нуля или углубить знания — очень советую!

#books #shell
👍2352
Выполнение команд в SubShell

Команда выполняется в текущем Shell:
$ ls


Команда выполняется во временном дочернем процессе — в SubShell:
$ (ls)


SubShell — это отдельная копия Shell, которая запускается для команд в круглых скобках. После выполнения команд внутри ( ) Subshell завершается, и все изменения (переменные, текущий каталог и т.п.) не сохраняются в основном Shell.

Пример изоляции:
$ cd /tmp
$ (cd /; ls)
$ pwd # по‑прежнему /tmp


Subshell позволяет временно менять окружение, не затрагивая основной shell-сеанс.

#shell
👍272
Управление фоновыми задачами в Shell

Запускает команду в фоне:
$ xlogo &


Список процессов:
$ ps


Список фоновых задач:
$ jobs


Только PID фоновых задач:
$ jobs -p


Отправить задачу в фон:
Ctrl + Z # остановить задачу (перевести в состояние Stopped)


Вернуть задачу с номером 1 на передний план:
$ fg %1


Продолжить выполнение в фоне:
$ bg %1


#shell
👍171
Bash_и_кибербезопасность.pdf
4.8 MB
Bash и кибербезопасность. Атака, защита и анализ из командной строки Linux.

#books #shell
👍10