Канал для программистов работающих с Linux.
Почти все Python девелоперы с нами ну и другие тоже подтянутся.
По рекламе: @jannytg
@anothertechrock
Post #530
1.46K
🐧 @juniorlinux
Showing posts older than #531 · Back to latest
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
xclip — утилита, которая позволяет работать с буферами обмена прямо из терминала. Она умеет читать данные из stdin и записывать их в нужный буфер, а также доставать оттуда содержимое.xclip < notes.txt
xclip -selection clipboard < notes.txt
ls | grep log | xclip -selection clipboard
xclip -selection clipboard -o
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
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


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
sudo symlinks -rd /opt/
symlinks -rv /home/user/projects
history | awk '{print $2}' | sort | uniq -c | sort -nr | head
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 и т.п.)
sudo -i.sudo -i ≈ sudo su -sudo su - — дурной тон: запускается лишний процесс, команда громоздкая и вообще не нужная.
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
tr. С ее помощью можно удалить нечитаемые символы:tr -cd '\11\12\15[:print:]' < bad.txt > clean.txt
-c — инвертирует набор, т.е. все символы, не входящие в указанный диапазон, будут выбраны-d — удаляет выбранные символы (вместо замены)\11, \12, \15 — это табуляция (\t), перевод строки (\n) и возврат каретки (\r), записанные в восьмеричном (octal) виде. Каждое число — это ASCII-код символа.[:print:] — все видимые символы.{} в Bash позволяют разворачивать выражения в последовательность аргументов.echo {1..10}
# 1 2 3 4 5 6 7 8 9 10echo {10..1}
# 10 9 8 7 6 5 4 3 2 1echo {1..501..100}
# 1 101 201 301 401 501echo {501..1..100}
# 501 401 301 201 101 1seq, фигурные скобки умеют работать с буквами:echo {A..P}
# A B C D E F G H I J K L M N O Pecho {A..P..2}
# A C E G I K M Omkdir ~/Sources/{test1,test2,test3}diff {orig,patched}/path/to/prog.ccp -p file.txt{,.bak}
# создаст file.txt и file.txt.bak{} ломают расширение!echo file{1.. 2}.txt # не сработаетtr:echo {A..P..2} | tr -d " "
# ACEGIKMOalias 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.hppmkdir -p {source,help{/pages,/yelp,/images}}.
├── help
│ ├── images
│ ├── pages
│ └── yelp
└── source

watch. Она используется для периодического запуска другой команды и отображения её вывода в терминале с обновлением через заданный интервал времени. Это удобно для "живого мониторинга" изменений в системе.watch [опции] команда
watch запускает команду каждые 2 секунды.-n <сек> — задать интервал обновления в секундах (по умолчанию 2).-d — подсвечивать изменения между обновлениями.-t — убрать заголовок (без отображения времени и команды).-g — завершить выполнение, когда вывод изменится.watch -n 5 df -h
watch -n 2 ps aux | grep apache
watch -d cat /proc/meminfo
watch -n 1 "ps -C firefox -o %cpu,%mem,cmd"
watch -g ls -l file.txt