Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Я хочу получать рассылки с лучшими постами за неделю
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
Создавая аккаунт, я соглашаюсь с правилами Пикабу и даю согласие на обработку персональных данных.
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam

Пикабу Игры +1000 бесплатных онлайн игр

Болты и гайки - это головоломка, в которой вам нужно откручивать болты с досок! Ваша задача - выбрать правильный болт для откручивания, чтобы вы могли открутить все доски! Соревнуйтесь с друзьями и коллегами!

Болты и Гайки

Казуальные, Головоломки, Логическая

Играть
Сможешь найти все слова, спрятанные в пузырях? Скорее заходи в игру и проверь!

Слова в пузырях

Казуальные, Головоломки, Словесная

Играть
Постройте дом своей мечты прямо сейчас! Соединяйте три предмета в один ряд, зарабатывайте звезды и покупайте красивые детали интерьера. Звучит заманчиво? Увлекательная головоломка в жанре «три в ряд» заставит размяться ваш мозг. Присоединяйтесь к онлайн-игре бесплатно прямо сейчас!

Строить дом - три в ряд

Три в ряд, Казуальные, Детские

Играть
Уникальная игра, объединяющая популярные механики Match3 и пошаговые бои!

Магический мир

Мидкорные, Ролевые, Три в ряд

Играть
Игра «История одной фермы» - увлекательное и бросающее вызов вашим серым клеточкам приключение, от которого невозможно оторваться!

История одной фермы - маджонг

Маджонг, Казуальные, Приключения

Играть

Топ прошлой недели

  • Oskanov Oskanov 8 постов
  • alekseyJHL alekseyJHL 6 постов
  • XpyMy XpyMy 1 пост
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая кнопку «Подписаться на рассылку», я соглашаюсь с Правилами Пикабу и даю согласие на обработку персональных данных.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Новости Пикабу Помощь Кодекс Пикабу Реклама О компании
Команда Пикабу Награды Контакты О проекте Зал славы
Промокоды Скидки Работа Курсы Блоги
Купоны Biggeek Купоны AliExpress Купоны М.Видео Купоны YandexTravel Купоны Lamoda
Мобильное приложение

Командная оболочка bash

С этим тегом используют

Linux IT Программирование Все
81 пост сначала свежее
Avenir.Sirgun
Avenir.Sirgun
27 дней назад

PulseToPipeWire . часть 02. удаление пакетов⁠⁠

Переезд с алса+пульсаудио на pipewire+wireplumber

Предыдущая часть PulseToPipeWire . часть 01. вступление



Если не указано особо, то делаем из под root учётной записи.

Показываю на примере ос ArchLinux

1. Сохраняем списки установленных пакетов

pacman -Qqe > pkg-$(date +%y-%m-%d)-core.txt

comm -13 <(pacman -Qqdt | sort) <(pacman -Qqdtt | sort) > optdep-$(date +%y-%m-%d).txt

2. Удаление одной командой.
здесь оно лучше, тк иначе столкнётесь с неодолимыми зависимостями. замучаетесь по одному выковыривать.
___Если скажет "блабла отсутствует" , то уберите его их команды ниже.

pacman -Rn pulseaudio-rtp pulseaudio-equalizer pulseaudio-bluetooth pulseaudio paprefs pavucontrol-qt pulsemixer pulseaudio-alsa

если кому интересно личное общение,
то способы можно найти по информации в профиле.


Подписывайтесь здесь и на соцсети :)

Linux Программа Компьютерная помощь Гайд Вопрос Тестирование Командная оболочка bash Текст
27
Avenir.Sirgun
Avenir.Sirgun
1 месяц назад
GNU/Linux
Серия Linux

Как убить, перезапустить программу в #Linux⁠⁠

# plank restart

sleep 35s # ожидаем запуск

kill -9 $(pidof plank) # убиваем процесс по айди

# kill -1 $(`ps -A | grep -w plank | awk '{ print $1}'`)

sleep 2s # ждём завершения kill

plank

#где plank имя программы. если нет такой, попробуй на блокноте или калькуляторе.


предложите свои варианты в комментариях ?

[моё] Linux Компьютерная помощь Короткопост Командная оболочка bash Текст
63
13
gato.esfarrapado
gato.esfarrapado
1 месяц назад
GNU/Linux

Фрактал. На bash. Псевдографика!⁠⁠

Фрактал. На bash. Псевдографика! Искусственный интеллект, ChatGPT, Командная оболочка bash, Программирование, Linux, Фракталы, Графика, ASCII, Длиннопост

Попросил ГПТ нарисовать мне фрактал. На bash. Попросил - получи!

#!/bin/bash

# Set the dimensions of the output

WIDTH=80

HEIGHT=40

# Set the range of the complex plane

RE_MIN=-2.0

RE_MAX=1.0

IM_MIN=-1.5

IM_MAX=1.5

# Function to calculate the Mandelbrot set

mandelbrot() {

local re im

local i j

local max_iter=100

local output

for ((j=0; j<HEIGHT; j++)); do

for ((i=0; i<WIDTH; i++)); do

re=$(echo "$RE_MIN + ($RE_MAX - $RE_MIN) * $i / $WIDTH" | bc -l)

im=$(echo "$IM_MIN + ($IM_MAX - $IM_MIN) * $j / $HEIGHT" | bc -l)

z_re=0

z_im=0

iter=0

while (( $(echo "$z_re * $z_re + $z_im * $z_im <= 4" | bc -l) && iter < max_iter )); do

temp_re=$(echo "$z_re * $z_re - $z_im * $z_im + $re" | bc -l)

z_im=$(echo "2 * $z_re * $z_im + $im" | bc -l)

z_re=$temp_re

((iter++))

done

if (( iter == max_iter )); then

output="#"

else

output="."

fi

echo -n "$output"

done

echo ""

done

}

# Run the Mandelbrot function

mandelbrot

Показать полностью 1
[моё] Искусственный интеллект ChatGPT Командная оболочка bash Программирование Linux Фракталы Графика ASCII Длиннопост
2
70
imctobitch
imctobitch
Норм автор
Типичный программист
Серия I'm CTO, bitch
3 месяца назад

Гибкий график⁠⁠

Гибкий график I`m CTO bitch, График работы, Многозадачность, 1С, Python, Юмор, Разработка, IT юмор, Программист, Скриншот, PHP, Командная оболочка bash, IT

😡 Телеграм-канал

[моё] I`m CTO bitch График работы Многозадачность 1С Python Юмор Разработка IT юмор Программист Скриншот PHP Командная оболочка bash IT
3
12
anetto1502
anetto1502
3 месяца назад
Лига программистов

Поиск команд в консоли с помощью ctrl+r⁠⁠

Стрелочки вверх-вниз помогут найти в консоли команду, которая использовалась раньше. Это удобно для недавних команд, но не поможет со старыми.

Нажмите в linux-консоли ctrl+r и введите любую часть искомой команды. Будет предложен вариант команды из истории. Если он не подходит, нажмите ещё раз ctrl+r для поиска дальше в истории. Добавьте букв для уточнения поиска. Если пропустили нужную команду, итерируйтесь в обратную сторону с помощью ctrl+shift+r (но этот хоткей работает не везде, иногда надо настроить).

Поиск команд в консоли с помощью ctrl+r Программирование, IT, Telegram (ссылка), Командная оболочка bash, Терминал

На скрине приведён пример поиска по параметру mig, по команде vim, по флагу cpu.

Обратите внимание, что курсор будет стоять на начале найденной подстроки. Прервать поиск можно с помощью ctrl-c. Когда нашли нужную команду, нажмите enter для выполнения, esc или стрелочку в сторону для модификации.

Больше хаков в терминале в нашем бесплатном курсе cli-for-dev на степике или в видео forkbomb в docker.

[моё] Программирование IT Telegram (ссылка) Командная оболочка bash Терминал
6
zloibb
zloibb
6 месяцев назад

Оболочка Linux⁠⁠

Все оболочки линукса молчат и не выебываются, в то же время zsh

"Матушка земля
белая березонька"

[моё] Linux Политика Командная оболочка bash IT IT юмор Мат Текст
5
user9643937
8 месяцев назад
GNU/Linux

Ответ на пост «Полезные команды Linux»⁠⁠1

# ... (previous code)

# Get user input for source directory
$sourceDirectory = Read-Host "Enter the source directory:"

# ... (other input prompts)

# Get files to archive
$filesToArchive = Get-ChildItem -Path $sourceDirectory -Filter $fileExtension

# ... (rest of the code)

# Check for archive creation errors
if ($LASTEXITCODE -ne 0) {
Write-Error "Failed to create archive. Error code: $LASTEXITCODE"
# You could add specific error handling based on the error code
}

# ... (rest of the code)

# Check for file deletion errors
foreach ($file in $filesToArchive) {
try {
Remove-Item -Path $file.FullName -Force
} catch {
Write-Error "Failed to delete file: $($_.Exception.Message)"
}
}

Показать полностью
Linux Командная оболочка bash Консоли Длиннопост Ответ на пост Текст
4
22
anetto1502
anetto1502
9 месяцев назад
Лига программистов

Методика измерения времени работы программы. Как загрузка CPU/memory/IO влияет на производительность кода⁠⁠

В комментариях к видео Идеальный скрипт на баш 2 мне сказали, что в bash в конструкции if надо использовать "<" вместо "-lt", который применял я. Давайте разберёмся, как вообще измерять время работы программы и что на это влияет. Вас ждёт фарш из кучи команд: htop, iotop, lscpu, time, xargs, yes, seq, sync, timeout и хтонический ужас однострочников на bash. Материал в видео, кому удобнее — ниже его текстовая версия.

Кроме ютуба, для удобства есть дзен / VK / rutube.

Сегодня разберём, как корректно измерять время выполнения программы и какие причины влияют производительность. Посмотрим, как можно загрузить систему и наглядно посмотреть на её состояние.

Сравним скорость -lt и < внутри if мы в следующем видео. Начать придётся издалека, через тернии к звёздам.

Что вообще важно для любого эксперимента? Описать методику эксперимента. Для измерения скорости обратите внимание на следующие нюансы:

0. На каком оборудовании мы работаем

1. Измерять секунды и десятки секунд, а не наносекунды

2. Фиксировать условия по загрузка ядер и видеокарты, оперативной памяти, вводу/выводу

3. И сколько измерений проводить и как усреднять, средняя или медиана, что делать с выбросами и подобное

Не будем вдаваться детали инструментов конкретных языков программирования, где можно измерять время выполнения конкретной функции. Не будем также говорить об очень малых замерах, где нужно учитывать непосредственно тики процессора. Будем измерять процессы, длящиеся секунды штатными средствами операционной системы Linux.

В начале про оборудование. Посмотрим на доступные ядра нашей системы с помощью команды lscpu. Видим 4 интелловых ядра i7-3770 с гипертредингом в 2 потока каждое, то есть 8 виртуальных ядер. Запомним - это наше оборудование

lscpu

...
CPU(s): 8

Потоков на ядро: 2

Ядер на сокет: 4

Имя модели: Intel(R) Core(TM) i7-3770 CPU @ 3.40GHz

...

Для длительных временных промежутков достаточно встроенной в bash команды time:

type time

time — это ключевое слово командного процессора

Справка нас обманывает, потому что показывает информацию о бинарнике /usr/bin/time

man time

А это не то, что нужно. Это справка по такой команде:

which time

/usr/bin/time

Вот пример её вывода:

/usr/bin/time sleep 1

0.00user 0.00system 0:01.00elapsed 0%CPU (0avgtext+0avgdata 2260maxresident)k

72inputs+0outputs (1major+95minor)pagefaults 0swaps

Мне такой вывод непривычен, поэтому вернёмся к встроенному time:

time sleep 1

real 0m1,002s — общее время работы программы

user 0m0,002s — время в пользовательском режиме

sys 0m0,000s — время в режиме ядра или системных вызовов

До эры искуственного интеллекта в виде ChatGPT был популярен stackoverflow, детали смотрите там. Важно обратить внимание, что real — это про общее время работы, а user и sys — время процессорное. Для них 10 будет означать, что программа работала 10 ядросекунд — при этом неважно, 10 секунд на 1 ядро или 1 секунда на 10 ядрах

Для примера попробуем посчитать уникальные строки в большом файлике на 130 мегабайт и 14 млн уникальных строк.

time sort -u rockyou.txt | wc -l

14341564

real 0m34,771s

user 1m7,906s

sys 0m0,931s

Вот тут наглядно видно, что real — это совсем не сумма user и sys. Кстати, вам интересно, как можно изящно ускорить подсчёт уникальных строк за счёт магии баша? Их есть у меня! Лайкните этот пост, и я сниму отдельный ролик про всякие хаки и оптимизации на этом поприще.

Про встроенную команду time мы можем найти в справке по самому bash

man bash

Ищем там с помощью ввода /time (слеш, потом time), дальше сильно промотав вниз с помощью кнопки n (сокращение от next, следующий поиск). Тут и описание вывода, и переменная окружения TIMEFORMAT, с помощью которой можно настроить вывод time.

Больше о переменных окружения в нашем бесплатном курсе на степике под названием Командная строка для разработчиков – cli-for-dev.

Проще, конечно, загуглить нужное, кому нужна эта справка. Для вывода только real нам понадобится такая конструкция

TIMEFORMAT="%R"; time sleep 1

Запомнили, это пригодится позднее. Дальше о фиксированных условиях.

С этим пунктом мы надолго. Теперь посмотрим на загрузку системы и как она влияет на время работы команды. Мне нравится команда htop за наглядность. Тут показывается загрузка каждого ядра в режиме реального времени и многое другое. Строку load average мы с вами разбирали в видео про атаку forkbomb в docker-контейнере. Посмотрите, если пропустили.

Методика измерения времени работы программы. Как загрузка CPU/memory/IO влияет на производительность кода Telegram (ссылка), Программирование, Командная оболочка bash, Обучение, Производительность, Методика, IT, YouTube, Разработка, Программа, Видео, Длиннопост

Пример работы htop

Загрузим вычислитель. Нам нужно взять "тяжёлую" для процессора команду и запустить её, загрузив все логические ядра системы. Согласно философии Unix, программа должна решать одну задачу и решать её хорошо. Команда xargs умеет параллелить. Она берёт входную строку и преобразует её в одну или несколько команд. Для наглядности покажу, как xargs работает в связке с echo:

echo 123 | xargs echo my arg is

Если аргументов несколько, по умолчанию они все пойдут указанной команде:

echo 1 2 3 | xargs echo my arg is

С помощью флага -n можно настроить, сколько аргументов пойдёт в одну команду. Если указать один, то наши три числа превратятся в три разные команды:

echo 1 2 3 | xargs -n1 echo my arg is

Если указать два, то первые два аргумента пойдут в первую команду, оставшийся третий аргумент пойдёт во вторую:

echo 1 2 3 | xargs -n2 echo my arg is

Вернёмся к одному аргументу на команду. И теперь магия - укажем, что надо запускаться параллельно на всех ядрах с помощью P0

echo 1 2 3 | xargs -P0 -n1 echo my arg is

Блеск. Дело за малым - нам надо загрузить всю систему. В моем случае, как мы выяснили в lscpu, надо 8 потоков. Воспользуемся командой seq, сокращение от sequence

seq 8

seq 8 | xargs -P0 -n1 echo hello process

Чудо. Мы умеем параллельно запускать 8 команд. Теперь надо сделать так, чтобы эти команды сурово грузили процессор. Можно использовать сторонние тулзы нагрузочного тестирования типа stress, но зачем?

Методика измерения времени работы программы. Как загрузка CPU/memory/IO влияет на производительность кода Telegram (ссылка), Программирование, Командная оболочка bash, Обучение, Производительность, Методика, IT, YouTube, Разработка, Программа, Видео, Длиннопост

Пойдём рабоче-крестьянским путём

Есть команда yes, которая умеет адски спамить. По умолчанию она спамит буквой y, то есть всегда говорит да, прямо как Джим Керри в комедии 2008 года:

yes

Может спамить любой строкой:

yes hello world

Прикол в том, что этот спам сильно грузить процессор, что нам и нужно. Направляем вывод команды yes в чёрную дыру dev null:

yes > /dev/null

После чего смотрим в htop на загрузку. И получаем отличную жужалку, которая нагружает ядро. Но только одно. Постойте, мы же умеем параллелить!

seq 8 | xargs -P0 -n1 yes > /dev/null

Всё хорошо, но эта команда работает, пока мы её не прервём. А нам бы добавить немного удобства. Пусть система загрузится на 10 секунд. Линукс и так умеет. Команда timeout прервёт запущенную команду, если она сама не завершиться за указанное время, в моём примере 1 секунду:

timeout 1 yes

И мы ещё time можем сюда навесить. Измерим время команды yes, которую прервёт по таймауту:

time timeout 1 yes

Я вас ещё не совсем замучил? Теперь объединим всё это безобразие. На 10 секунд загрузим 8 ядер системы собранной нами на коленке жужжалкой:

seq 8 | xargs -P0 -n1 timeout 10 yes > /dev/null

В рамках нашего примера есть два сходных варианта:

seq 8 | xargs -P0 -n1 timeout 10 yes > /dev/null # Грузим sys

seq 8 | xargs -P0 -n1 timeout 10 md5sum /dev/zero # Грузим user

Теперь у нас готова жужжалка для загрузки ядра процессора. С загрузкой других компонент системы разобраться проще. Для загрузки оперативной памяти достаточно создать огромную переменную:

a=$(seq 10)

echo $a

a=$(seq 100 000 000)

Но совершенно неудобно оценивать размер. Поэтому воспользуемся питоном. Незатейливо создадим большую строку, благо звёздочка удобно переопределена для строк. Один английский символ занимает один байт плюс накладные расходы на переменную, берём их "кило", то есть 1024 и получим килобайт.

python3.10

var = "a"*10

В IDLE можно не писать print, результат работы команды выводится на экран:

var

Кстати, в питоне накладные расходы на переменную довольно велики. В случае строки это 49 байт:

import sys

var = ""

sys.getsizeof(var) # 49

var = "a"

sys.getsizeof(var) # 50

var = "a" * 100

sys.getsizeof(var) # 149

Возведём 1024 в степень. Вторая степень даст мегабайт, третья - гигабайт. То есть такая переменная займёт в памяти около гигабайта, плюс 49 байт на служебную информацию.

var = "a"*1024**3

У нас свободно около 5 гигабайт, займём их все. Пока не удалим эту переменную или не завершим интерпретатор питона, память будет загружена.

var = "a"*5*1024**3

Для просмотра загруженности подсистемы ввода-вывода есть команда iotop, которой требуются права суперпользователя. Нам нужны только первые две строки

sudo iotop

Для загрузки ввода-вывода возьмём псевдогенератор случайных чисел и будем записывать его в файл:

cat /dev/urandom > /tmp/1

Зачастую проблема не в самом вводе-выводе, а в его буферизации. Так называется отложенная запись на диск. Операционная система для более эффективной работы с оборудованием пишет не сразу. Например, после записи файла на флешку на самом деле он там окажется не сразу, а через некоторое время. Для этого существует (или существовало? кто видел флешку в 2024 году?) безопасное извлечение флешки – как раз, чтобы операционка корректно дописала отложенный буфер.

В линуксе есть команда sync, которая завершиться, когда весь буфер запишется на диск.

sync

Пробовать измерять время будем на примере цикла в баше:

i=0; while [[ $i -lt 10 ]]; do i=$(( $i+1 )); echo $i ; done; echo $i

Увеличим число нулей:

i=0; while [[ $i -lt 1000000 ]]; do i=$(( $i+1 )); done; echo $i

Добавим time. Если просто добавить time, то мы измерим время только присваивания:

time i=0; while [[ $i -lt 1000000 ]]; do i=$(( $i+1 )) ; done; echo $i

Чтобы измерить время всей конструкции, оформим цикл в виде отдельного процесса с помощью доллара и скобок:

time $( i=0; while [[ $i -lt 1000000 ]]; do i=$(( $i+1 )) ; done; echo $i )

Ещё ошибка: результат подпроцесса - число, а команда time пытается это число выполнить как команду. Добавим echo:

time echo $( i=0; while [[ $i -lt 1000000 ]]; do i=$(( $i+1 )) ; done; echo $i )

Теперь посмотрим, как на этот цикл влияет загрузку системы. Запустим монитор ресурсов htop и загрузим ядро:

seq 8 | xargs -P0 -n1 timeout 10 yes > /dev/null

Попробуем запустить наш цикл. Потом загрузим оперативную память:

python3.10

var = "a"*5*1024**3

И снова цикл. Осталось загрузить ввод-вывод:

sudo iotop

cat /dev/urandom > /tmp/1

И снова запустим цикл.

Одного измерения недостаточно. Собственно, примеры загрузки системы выше были призваны проиллюстрировать влияние внешних факторов на запуск вашего кода. Для минимизации этого влияния следует измерить несколько раз. Можно ручками внести результаты в таблицу. Но, во-первых, мы люди ленивые. А во-вторых, ручная обработка всегда чревата ошибками. Соберём всё в табличку.

А с этим есть проблема. Для вывода time в файл придётся немного извратиться. Дело в том, что перенаправление будет работать для команды выполняемой команды, то есть для всего справа от time. На помощь придёт логическое объединение в виде group command с помощью фигурных скобочек:

man bash

Ищем такую конструкцию /\{

Слеш для поиска, потом экранирование обратным слешом фигурной скобки. Как видно из справки, нужно добавить фигурные скобки и точку с запятой в конце, и только потом перенаправить. При этом time пишет в стандартный поток ошибок, то есть нужно перенаправлять второй дескриптор. Получается вот так:

TIMEFORMAT="%R"; { time $( i=0; while [[ $i -lt 1000000 ]]; do i=$(( $i+1 )) ; done; ) ; } 2>> res.csv;

tail -f res.csv # для проверки, что пишет

libreoffice res.csv # для обработки итоговой таблицы после завершения

Если запустить libreoffice с английским языком, то запятая будет считаться разделителем разрядов и удалится, мы получим неверное время (4567 вместо 4,567).

Закроем файл и откроем снова. Переключим язык на русский, чтобы запятая стала десятичным разделителем. Впишем формулы СРЗНАЧ и СТОТКЛ.

Если запускать скрипт 10 раз лень, можно накинуть ещё цикл (больше циклов богу циклов):

for i in $( seq 2 ); do TIMEFORMAT="%R"; { time $( i=0; while [[ $i -lt 1000000 ]]; do i=$(( $i+1 )) ; done; ) ; } 2>> res.csv; done

Резюмируем. Наша методика экспериментального исследования времени работы программы выглядит так:

берём 8-ядерный i7-3770

проводим 10 измерений командой time

запускаем много циклов "-lt" vs "<"

рассчитываем среднее арифметическое и среднеквадратичное отклонение

В следующем видео заодно интереса ради посмотрим на другие языки.

Теперь вы знаете, как можно загрузить процессор, оперативную память или подсистему ввода-вывода, как посмотреть на эту загрузку и как она может влиять на программу. Такие дела.

В телеграм-канале DevFM пишу о полезном для разработчика: инструментах, например, postgres_dba для анализа узких мест базы данных или fcron, интересных хаках вроде запуска LLM прямо в шрифте, или о Google design docs. А ещё у нас есть бесплатный курс cli-for-dev по Linux на степике, немного подкастов и видео.

Показать полностью 2
[моё] Telegram (ссылка) Программирование Командная оболочка bash Обучение Производительность Методика IT YouTube Разработка Программа Видео Длиннопост
10
Посты не найдены
О Нас
О Пикабу
Контакты
Реклама
Сообщить об ошибке
Сообщить о нарушении законодательства
Отзывы и предложения
Новости Пикабу
RSS
Информация
Помощь
Кодекс Пикабу
Награды
Команда Пикабу
Бан-лист
Конфиденциальность
Правила соцсети
О рекомендациях
Наши проекты
Блоги
Работа
Промокоды
Игры
Скидки
Курсы
Зал славы
Mobile
Мобильное приложение
Партнёры
Промокоды Biggeek
Промокоды Маркет Деливери
Промокоды Яндекс Путешествия
Промокоды М.Видео
Промокоды в Ленте Онлайн
Промокоды Тефаль
Промокоды Сбермаркет
Промокоды Спортмастер
Постила
Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии