Фигурные скобки
{} в Bash позволяют разворачивать выражения в последовательность аргументов.Простой пример:
echo {1..10}
# 1 2 3 4 5 6 7 8 9 10Можно в обратную сторону:
echo {10..1}
# 10 9 8 7 6 5 4 3 2 1Третий параметр задаёт шаг:
echo {1..501..100}
# 1 101 201 301 401 501Можно и в обратную сторону:
echo {501..1..100}
# 501 401 301 201 101 1В отличие от
seq, фигурные скобки умеют работать с буквами:echo {A..P}
# A B C D E F G H I J K L M N O PШаг тоже поддерживается:
echo {A..P..2}
# A C E G I K M OСоздать сразу несколько директорий:
mkdir ~/Sources/{test1,test2,test3}Сравнить оригинал и патч одной командой:
diff {orig,patched}/path/to/prog.cСделать бэкап файла:
cp -p file.txt{,.bak}
# создаст file.txt и file.txt.bak⚠️ Важно: пробелы внутри
{} ломают расширение!echo file{1.. 2}.txt # не сработаетМожно убрать пробелы из вывода, передав вывод в
tr:echo {A..P..2} | tr -d " "
# ACEGIKMOСоздадим псевдоним для получения n-й буквы алфавита:
alias nth="echo {A..Z} | tr -d ' ' | cut -c"
nth 10
# JКвадратные скобки
[] — это сопоставление с шаблоном имён файлов, а фигурные {} — просто генерация последовательности.ls file[1-9].txt
# отберёт существующие файлы
ls file{1..9}.txt
# попытается вывести все файлы последовательности, даже если их нетКомбинация наборов:
touch {a,b,c}.{hpp,cpp}
# создаст a.cpp a.hpp b.cpp b.hpp c.cpp c.hppВложенные расширения:
mkdir -p {source,help{/pages,/yelp,/images}}Структура получится такая:
.
├── help
│ ├── images
│ ├── pages
│ └── yelp
└── source
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥4😱1
Ответ через час.
#вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
Для замены, замещения или удаления символов из стандартного ввода используется консольная команда
Опции:
🔴
🔴
Диапазон символов для выборки:
🔴
🔴
В результате команда оставит только стандартные печатные символы, табы и переводы строк.
#вопросы
tr. С ее помощью можно удалить нечитаемые символы:tr -cd '\11\12\15[:print:]' < bad.txt > clean.txt
Опции:
-c — инвертирует набор, т.е. все символы, не входящие в указанный диапазон, будут выбраны-d — удаляет выбранные символы (вместо замены)Диапазон символов для выборки:
\11, \12, \15 — это табуляция (\t), перевод строки (\n) и возврат каретки (\r), записанные в восьмеричном (octal) виде. Каждое число — это ASCII-код символа.[:print:] — все видимые символы.В результате команда оставит только стандартные печатные символы, табы и переводы строк.
#вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4
Выберите НЕвалидное имя переменной в bash.
Anonymous Quiz
38%
__ (двойное подчеркивание)
11%
_1var
8%
_var_
31%
some-var
12%
Посмотреть ответ
Команда
yes в Linux — это простая утилита, которая бесконечно выводит строку (по умолчанию y) в стандартный вывод.Эта команда часто применяется для автоматизации скриптов или тестирования.
$ yes [строка]
y.yes бесконечно генерирует вывод, поэтому почти всегда ее используют вместе с пайпами (|) или ограничителями (head).y можно автоматизировать. Здесь все запросы будут автоматически подтверждаться y:yes | apt-get install package
no. Здесь на все запросы ответ будет n:yes n | command
yes можно использовать для загрузки процессора. Этот процесс будет сильно нагружать CPU, пока его не остановить (Ctrl+C):yes > /dev/null
yes "строка" | head -n 1000 > file.txt
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4❤2
Обе команды связаны с повышением прав, но делают это по-разному.
su — substitute user sudo — substitute user and do su переключает вас на другого пользователя внутри текущей сессии. Для этого нужно знать пароль целевой учётки, а не своей.user@dev:/$ su john
Пароль: ****
john@dev:/$ whoami
john
Вы стали Джоном и работаете от его имени.
su без дефиса, как в этом примере, просто меняет пользователя, но оставляет окружение старого. О su - мы еще поговорим.sudo запускает одну команду от имени другого пользователя (по умолчанию — root). При этом спрашивается ваш пароль, а не пароль того, под кем выполняется команда.user@dev:/$ sudo -u john whoami
john
Чтобы это работало, у пользователя
user должны быть разрешения в /etc/sudoers:user ALL=(ALL:ALL) ALL
Редактируется через
visudo:sudo visudo
Проверить конфигурацию можно так:
sudo visudo -c
visudo защищает от ошибок: если синтаксис неправильный, файл не сохранится.Иногда можно заметить команду
su - john.Зачем дефис?
Он очищает окружение и запускает оболочку, как будто вы вошли в систему под новым пользователем.
Посмотрим на примере:
ssh user@pc
export a="test"
su john
echo $a
# test
Переменная
$a сохранилась.А теперь с дефисом:
su - john
echo $a
# ничего не выводит
Переменные исчезли — новая, "чистая" среда.
su — просто смена пользователя, старое окружение остаётся;su - — полная имитация входа в систему под новым пользователем.sudo тоже может запустить shell с разным уровнем "чистоты" окружения:sudo -s # shell с правами root, окружение текущее
sudo -i # shell как при входе под root (загружается /root/.profile и т.п.)
Если в /root/.profile прописать переменную, то она появится только при
sudo -i.sudo -i ≈ sudo su -Но писать
sudo su - — дурной тон: запускается лишний процесс, команда громоздкая и вообще не нужная.Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤3
Чтобы получить топ-10 команд, которые вы вводите чаще всего, посчитайте частоту команд в истории. Это интересно и полезно для самоанализа.
#вопросы
history | awk '{print $2}' | sort | uniq -c | sort -nr | head
#вопросы
👍8🔥2
Как переименовать файл "new" в файл "old"?
Anonymous Quiz
74%
mv new old
4%
move new old
3%
cp new old
14%
rn new old
4%
Посмотреть ответ
symlinks — это консольный инструмент в Linux, который помогает управлять символьными ссылками (symbolic links, или "ярлыками" в файловой системе). Она позволяет искать, проверять и исправлять ссылки в заданном каталоге.На большинстве систем утилита ставится пакетом
symlinks:sudo apt install symlinks # Ubuntu, Debian
sudo dnf install symlinks # Fedora
sudo pacman -S symlinks # Arch
symlinks [опции] [каталог]
-c — заменить абсолютные / беспорядочные ссылки на относительные-d — удалить битые ссылки-o — предупреждать о ссылках между файловыми системами-r — проверять рекурсивно подкаталоги-s — сокращать длинные ссылки (отображаются в выводе только если не указан параметр -c)-t — показывать, что будет сделано с помощью -c-v — показывать подробный отчет (выводит все ссылки)symlinks -v /usr/local/bin
Команда выведет список ссылок и покажет, какие из них "good" — рабочие, а какие "dangling" — битые (ведут в несуществующий файл).
sudo symlinks -rd /opt/
symlinks -rv /home/user/projects
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1👍1
Docker простыми словами - канал шпаргалка для тех, кто использует Docker в работе программиста, тестировщика или на любой другой позиции.
Первый канал по Docker. Поискав в телеграме каналы по docker и не найдя ничего, я решил обьединить контент в одном месте.
По содержанию в канале:
- вопросы с собеседований
- команды докера
- книги
- тесты для проверки ваших знаний
- обучающие видео
- чат для обсуждения
Подписывайтесь, комментируйте и предлагайте свой контент в нашем новом сообществе: @justdocker
Первый канал по Docker. Поискав в телеграме каналы по docker и не найдя ничего, я решил обьединить контент в одном месте.
По содержанию в канале:
- вопросы с собеседований
- команды докера
- книги
- тесты для проверки ваших знаний
- обучающие видео
- чат для обсуждения
Подписывайтесь, комментируйте и предлагайте свой контент в нашем новом сообществе: @justdocker
В Linux работа с копированием устроена чуть глубже, чем просто привычные сочетания клавиш. В X11-среде (GNOME, Xfce, KDE и др.) есть два буфера обмена, и они ведут себя по-разному:
Буферы независимы: выделили текст — он уже доступен для вставки, но Ctrl+V вставит что-то другое.
xclip — утилита, которая позволяет работать с буферами обмена прямо из терминала. Она умеет читать данные из stdin и записывать их в нужный буфер, а также доставать оттуда содержимое.xclip < notes.txt
Теперь содержимое notes.txt можно вставить средней кнопкой мыши.
xclip -selection clipboard < notes.txt
Теперь текст вставится по Ctrl+V — как обычно.
ls | grep log | xclip -selection clipboard
Результат команды окажется в буфере обмена — удобно вставить путь или имя файла в другой терминал или чат.
xclip -selection clipboard -o
Выведет содержимое системного буфера в stdout. Можно использовать в конвейере:
xclip -selection clipboard -o | wc -w
Создай алиасы, чтобы не набирать флаги каждый раз:
alias ccopy="xclip -sel c"
alias cpaste="xclip -sel c -o"
Теперь:
echo "important text" | ccopy
cpaste
— скопирует и вставит содержимое в системный буфер.
Практическое применение
xclip выходит далеко за рамки простого копирования текста. Вот несколько примеров, где он действительно экономит время и клики:grep "ERROR" /var/log/syslog | tail -n 5 | xclip -sel c
Вывели последние ошибки и сразу скопировали их — можно вставлять в чат или тикет.
cat build.log | grep version | xclip -sel c
В другой вкладке:
cpaste
Так можно быстро перекидывать строки между сессиями (например, dev и prod).
find . -type f -name "*.sh" | head -n 1 | xclip -sel c
vim $(cpaste)
Ни одной мышиной операции — путь к файлу скопирован и подставлен в команду.
grep "API_KEY" .env | cut -d= -f2 | xclip -sel c
Токен копируется в буфер, не отображаясь в терминале и не попадая в историю.
generate-password | xclip -sel c
Пароль уже в буфере — вставляй куда нужно без вывода на экран.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6❤1
Ответ через час.
#вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
Команда
Результат выведется в терминал и одновременно запишется в файл. По умолчанию
Команда
⚙️ Пример 1.
Если попытаться записать в системный файл так:
— ничего не выйдет (перенаправление выполняется от имени обычного пользователя).
А вот так сработает:
Потому что
⚙️ Пример 2.
Можно записывать системные логи "на лету". Например, мониторить сеть и одновременно вести лог:
Так можно просматривать пинг в реальном времени и получить лог-файл после остановки.
#вопросы
tee в Linux читает стандартный ввод и одновременно выводит его на экран и записывает в файл(ы), что позволяет просматривать вывод и сохранять его для последующего использования.ls -lh | tee files.txt
Результат выведется в терминал и одновременно запишется в файл. По умолчанию
tee затирает файл. Чтобы дописать в конец, нужно использовать опцию -a.Команда
tee имеет большой потенциал использования.Если попытаться записать в системный файл так:
sudo echo "text" > /etc/config
— ничего не выйдет (перенаправление выполняется от имени обычного пользователя).
А вот так сработает:
echo "text" | sudo tee /etc/config
Потому что
tee запускается с правами root и записывает корректно.Можно записывать системные логи "на лету". Например, мониторить сеть и одновременно вести лог:
ping google.com | tee -a ping.log
Так можно просматривать пинг в реальном времени и получить лог-файл после остановки.
#вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍3
🦇 Утилита bat
🦇 Достоинства
✔️ Выводит содержимое файлов с подсветкой синтаксиса (как в редакторах кода)
✔️ Показывает нумерацию строк
✔️ Умеет подсвечивать различия при сравнении файлов
✔️ Поддерживает постраничный просмотр (через
✔️ Может заменять cat в привычных командах
🦇 Установка:
🦇 Практическая польза
🔴 Для чтения конфигов и логов с подсветкой,
🔴 В скриптах и DevOps-инструментах (как улучшенный cat),
🔴 Для ревью кода прямо в терминале,
🔴 Как быструю замену IDE, если нужно просто глянуть файл красиво.
📎 Репозиторий с примерами, скриншотами и инструкциями - https://github.com/sharkdp/bat
bat — это современная замена классической команды cat, которая выводит содержимое файлов, но делает это намного удобнее и красивее.bat:less)sudo apt install bat # Ubuntu / Debian
sudo dnf install bat # Fedora
sudo pacman -S bat # Arch Linux
bat часто используют:Please open Telegram to view this post
VIEW IN TELEGRAM
❤2👍2🥰1
В Linux есть несколько способов не записывать команду в историю — в зависимости от того, нужно ли исключить одну конкретную команду, определённый тип команд или вообще ничего не сохранять в истории.
Самый простой и распространённый способ — поставить пробел в начале команды.
ls -la # Перед ls стоит пробел
ignorespace.Проверить можно так:
echo $HISTCONTROL
Если видите что-то вроде
ignoredups:ignorespace или ignoreboth, значит всё ок. Если нет — можно добавить:export HISTCONTROL=ignoredups:ignorespace
Теперь все команды, начинающиеся с пробела, не попадут в ~/.bash_history.
Можно задать шаблоны, которые Bash не будет сохранять вовсе.
export HISTIGNORE="ls:pwd:exit"
Теперь указанные команды исчезнут из истории независимо от того, как их вызывать.
Шаблон может содержать
*:export HISTIGNORE="ls *:cd *"
Всё, что начинается с
ls или cd, будет игнорироваться.Если команда уже выполнена, можно стереть её "задним числом". Для этого можно сперва посмотреть ее номер в истории, а затем удалить, указав этот номер:
history
history -d <номер>
history)При удалении команды из истории с помощью
history -d <номер> Bash удаляет запись с указанным номером только из памяти. Если на этом остановиться и просто выйти из терминала, старая история из файла может перезаписать изменения, и команда вернётся.Чтобы принудительно обновить файл на диске после удаления команды из истории, используйте опцию
-w (write):history -w
Это гарантирует немедленное применение изменений, что особенно важно, если вы не планируете закрывать терминал в ближайшее время.
Чтобы избежать появления в истории самой команды
history -d, можно объединить несколько команд в одну строку:history -d $((HISTCMD-1)); history -w
Т.о., полностью удаление команды будет выглядеть так:
history # Найти номер команды
history -d <номер> # Удалить команду по номеру
history -d $((HISTCMD-1)); history -w # Удалить из истории саму команду history -d и перезаписать файл истории
Если нужно поработать "в тени", можно временно отключить запись:
set +o history # выключить запись в историю
set -o history # включить обратно
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5👍2❤1
Please open Telegram to view this post
VIEW IN TELEGRAM