Страницы

Поиск по вопросам

Показаны сообщения с ярлыком sh. Показать все сообщения
Показаны сообщения с ярлыком sh. Показать все сообщения

воскресенье, 29 марта 2020 г.

можно ли дозаписать в файл zip в конец файла не распаковывая его на диске на Linux?

#linux #bash #centos #zip #sh


Как дозаписать в файл упакованный в zip не распаковывая его на Linux из скрипта?
Может можно распаковать в оперативку и там дописать и запаковать заново? 
Есть идея монтировать раздел в оперативной памяти для этого, но кажется, что это
не лучший вариант
    


Ответы

Ответ 1



Обновить существующий архив новыми или измененными файлами, рекурсивно: zip -ur ARCH.zip FOLDER|FILE ...

четверг, 26 декабря 2019 г.

Ubuntu. Запуск скрипта при блокировке экрана по Ctrl+Alt+L

#ubuntu #bash #cron #sh


Возможно ли прикрутить скрипт в дополнение к горячим клавишам (Ctrl+Alt+L) на блокировку
экрана?

Есть в Ubuntu такой баг https://bugs.launchpad.net/ubuntu/+source/gnome-screensaver/+bug/1286910),
если при блокировке экрана стоит раскладка RU, то и на экране блокировки при вводе
пароля будет эта же раскладка вместо дефолтной системной EN.

Хочу запускать скрипт для смены раскладки клавиатуры на английский язык при блокировке
экрана, чтобы при вводе пароля не отслеживать, на каком языке его набираю. Надоело,
т. к. в день вводить пароль приходится десятки раз. Скрипт такой:

#!/bin/sh
kbd=`setxkbmap -print | sed -n 's#xkb_symbols[^"]*"\([^"]*\)".*$#\1#p' | awk -F+
'{print $2}'`
   if [ $kbd != us ]; then
    xdotool key 'alt+shift'
   fi


В скрипте выполняется проверка и меняется раскладка на EN.

А может у кого-нибудь есть решение по исправлению данного бага и при блокировке экрана
по-умолчанию можно сделать английский язык.

Ubuntu 15.04.
    


Ответы

Ответ 1



Сделал так: Вариант 1 (проверка по наличию процесса lockscreen) Создал скрипт cat ~/scripts/enru.sh #!/bin/bash CHKSTR=`ps aux| grep -v grep | grep lockscreen` if [[ $CHKSTR == *lockscreen* ]]; then kbd=`setxkbmap -print | sed -n 's#xkb_symbols[^"]*"\([^"]*\)".*$#\1#p' | awk -F+ '{print $2}'` if [[ $kbd == ru ]]; then xdotool key 'alt+shift' fi fi Добавил в crontab от имени пользователя строку crontab -u USERNAME -e * * * * * DISPLAY=:0 bash ~/scripts/enru.sh >/dev/null 2>/dev/null Скрипт каждую минуту проверяет, запущен ли процесс usr/lib/unity/unity-panel-service --lockscreen-mode и, при его наличии, запускает проверку и изменение раскладки клавиатуры. Уверен, что можно сделать более красиво - предлагайте варианты. Вариант 2 (запуск при нажатии Ctrl+Alt+L) Создал скрипт $ cat ~/scripts/enru2.sh #!/bin/bash gnome-screensaver-command --lock && gsettings set org.gnome.desktop.input-sources current 0 # current 0 говорит о том, что нужно включить дефолтную раскладку en_EN. current 1, соответственно, ru_RU Проверяем, есть ли у нас дополнительные комбинации клавиш, которые мы уже используем: $ gsettings get org.gnome.settings-daemon.plugins.media-keys custom-keybindings ['/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/'] custom0 говорит о том, что одна комбинация уже добавлена, поэтому надо добавить следующую - custom1: $ gsettings set org.gnome.settings-daemon.plugins.media-keys custom-keybindings "['/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/']" Если же вы добавляете свою первую комбинацию клавиш, то выполните команду $ gsettings set org.gnome.settings-daemon.plugins.media-keys custom-keybindings "['/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/']" Отключаем хоткеи для системного lockscreen'а: $ gsettings set org.gnome.settings-daemon.plugins.media-keys screensaver '' Задаём имя нашему хоткею: $ gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/ name 'Lockscreen' Указываем, какую команду надо выполнять: $ gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/ command "/home/$USER/scripts/enru2.sh" Задаём комбинацию клавиш для запуска блокировки экрана: $ gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/ binding 'l'

понедельник, 23 декабря 2019 г.

Как заменить нулями данные в середине бинарного файла?

#linux #sh


Есть ли стандартная для RedHat команда (кроме пары dd + truncate) для замены нулями
данных в середине бинарного файла?
    


Ответы

Ответ 1



Можно использовать однострочник на Python или другом скриптовом языке: python -c "f=open('some','r+b');f.seek(123);f.write('\0'*4);"

Ответ 2



В копилку. Emacs поддерживает работу с бинарными файлами, как с обычными: M-x hexl-find-file открыть файл в шестнациричном формате C-M-d вставить байт в десятичном формате. C-M-o вставить байт в восмиричном формате C-M-x вставить байт в шестнацитиричном формате Ссылки https://www.gnu.org/software/emacs/manual/html_node/emacs/Editing-Binary-Files.html

среда, 10 июля 2019 г.

Перенаправление stdout и stderr и на экран и в файл

Как в начале скрипта перенаправить вывод в файл и на экран одновременно?


Ответ

написанное ниже справедливо, насколько я знаю, лишь для «продвинутых» оболочек типа gnu/bash и zsh

для перенаправления всего, что будут выдавать команды, выполняющиеся внутри скрипта, в файл (вдобавок к выводу на терминал), можно использовать команду exec в комплекте с программой tee
если требуется записывать в файл file только то, что команды скрипта будут выдавать в stdout, можно написать так:
exec > >(tee file) command1 command2
если же требуется записывать в файл и то, что отправляется в stderr, то надо добавить перенаправление 2>&1
exec > >(tee file) 2>&1 command1 command2

дополнение по поводу просто вывода в файл обоих потоков полностью posix-совместимым образом
и stdout и stderr, в которые выведут информацию команды, будут записаны в file
exec >file 2>&1 command1 command2
а так file будет дополнен (а не перезаписан, как в предыдущем примере):
exec >>file 2>&1 command1 command2

четверг, 29 ноября 2018 г.

Ubuntu. Запуск скрипта при блокировке экрана по Ctrl+Alt+L

Возможно ли прикрутить скрипт в дополнение к горячим клавишам (Ctrl+Alt+L) на блокировку экрана?
Есть в Ubuntu такой баг https://bugs.launchpad.net/ubuntu/+source/gnome-screensaver/+bug/1286910), если при блокировке экрана стоит раскладка RU, то и на экране блокировки при вводе пароля будет эта же раскладка вместо дефолтной системной EN.
Хочу запускать скрипт для смены раскладки клавиатуры на английский язык при блокировке экрана, чтобы при вводе пароля не отслеживать, на каком языке его набираю. Надоело, т. к. в день вводить пароль приходится десятки раз. Скрипт такой:
#!/bin/sh kbd=`setxkbmap -print | sed -n 's#xkb_symbols[^"]*"\([^"]*\)".*$#\1#p' | awk -F+ '{print $2}'` if [ $kbd != us ]; then xdotool key 'alt+shift' fi
В скрипте выполняется проверка и меняется раскладка на EN.
А может у кого-нибудь есть решение по исправлению данного бага и при блокировке экрана по-умолчанию можно сделать английский язык.
Ubuntu 15.04.


Ответ

Сделал так:
Вариант 1 (проверка по наличию процесса lockscreen)
Создал скрипт
cat ~/scripts/enru.sh
#!/bin/bash CHKSTR=`ps aux| grep -v grep | grep lockscreen` if [[ $CHKSTR == *lockscreen* ]]; then kbd=`setxkbmap -print | sed -n 's#xkb_symbols[^"]*"\([^"]*\)".*$#\1#p' | awk -F+ '{print $2}'` if [[ $kbd == ru ]]; then xdotool key 'alt+shift' fi fi
Добавил в crontab от имени пользователя строку
crontab -u USERNAME -e
* * * * * DISPLAY=:0 bash ~/scripts/enru.sh >/dev/null 2>/dev/null
Скрипт каждую минуту проверяет, запущен ли процесс usr/lib/unity/unity-panel-service --lockscreen-mode и, при его наличии, запускает проверку и изменение раскладки клавиатуры. Уверен, что можно сделать более красиво - предлагайте варианты.
Вариант 2 (запуск при нажатии Ctrl+Alt+L)
Создал скрипт
$ cat ~/scripts/enru2.sh
#!/bin/bash gnome-screensaver-command --lock && gsettings set org.gnome.desktop.input-sources current 0 # current 0 говорит о том, что нужно включить дефолтную раскладку en_EN. current 1, соответственно, ru_RU Проверяем, есть ли у нас дополнительные комбинации клавиш, которые мы уже используем:
$ gsettings get org.gnome.settings-daemon.plugins.media-keys custom-keybindings
['/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/']
custom0 говорит о том, что одна комбинация уже добавлена, поэтому надо добавить следующую - custom1
$ gsettings set org.gnome.settings-daemon.plugins.media-keys custom-keybindings "['/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/']"
Если же вы добавляете свою первую комбинацию клавиш, то выполните команду
$ gsettings set org.gnome.settings-daemon.plugins.media-keys custom-keybindings "['/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/']" Отключаем хоткеи для системного lockscreen'а:
$ gsettings set org.gnome.settings-daemon.plugins.media-keys screensaver '' Задаём имя нашему хоткею:
$ gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/ name 'Lockscreen' Указываем, какую команду надо выполнять:
$ gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/ command "/home/$USER/scripts/enru2.sh" Задаём комбинацию клавиш для запуска блокировки экрана:
$ gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/ binding 'l'

понедельник, 19 ноября 2018 г.

Как заменить нулями данные в середине бинарного файла?

Есть ли стандартная для RedHat команда (кроме пары dd + truncate) для замены нулями данных в середине бинарного файла?


Ответ

Можно использовать однострочник на Python или другом скриптовом языке:
python -c "f=open('some','r+b');f.seek(123);f.write('\0'*4);"