while read line; do bash -c "> \"$line\""; done < <(ls -1)
Показаны сообщения с ярлыком консоль. Показать все сообщения
Показаны сообщения с ярлыком консоль. Показать все сообщения
суббота, 2 мая 2020 г.
Обнулить все файлы в каталоге.
Для довольно специфической задачи понадобилось обнулить все файлы в каталоге:
среда, 30 октября 2019 г.
Консольная утилита для управления WordPress
У нас есть сервер, на котором крутятся сайты на WordPress для других отделов. Они их как-то сами наполняют и админят, но, конечно же, обновлять и не думают.
Nginx, PHP, Mysql я им обновлю, а как быть с самими сайтами?
Можно было бы добавить себя в админы каждого сайта, но не всё так просто. На каких-то сайтах локальная аутентификация, на других LDAP, на третьих что-то ещё.
Объединяет их то, что они лежат на одном сервере. Обновить их оказалось довольно просто (имея рутовые права на сервере).
Нужна утилита wp-cli. К сожалению, её нет в официальных репах Debian'а, но эту утилиту можно скачать с её официального сайта (это один файл на php) и положить в любой каталог из переменной path. Если мы хотим, чтобы утилита могла обновлять сама себя, её надо положить в каталог, правами на запись в который должен обладать пользователь www-data (или под кем вы там запускаете web-сервер). Ну тут смотрите сами, снижаем безопасность в угоду удобству, как обычно.
Утилите надо создать каталог с правами на запись, куда она сможет скачивать обновления Вордпресса и плагинов. Он должен лежать в домашнем каталоге пользователя web-сервера, у меня это /var/www и назвать .wp-cli.
Далее, утилиту надо запускать от имени web-сервера, это www-data в Debian по умолчанию.
Например так:
От рута:
# sudo -u www-data bashПереходим в каталог с первым сайтом:
$ cd /var/www/site1 $ wp core check-update $ wp core update $ wp core updatedb $ wp plugin update --allПереходим в следующий и повторяем, пока не кончатся сайты. Ну а дальше скрипты для автоматизации, ansible и т.д., но вы это и без меня знаете.
среда, 27 февраля 2019 г.
Создать пользователя в DJANGO через SQL
Понадобилось попасть в админку сайта на django, имя рутовый доступ к серверу. База сайта лежала в локальном sqlite.
Генерируем себе пароль с помощью утилиты djpass:
$ ./djpass ololo Hash: pbkdf2_sha256$120000$nwEK2MXzMCj7$u3ZGMBCbdGC72pNJkh8dZ79pcYbmlGNQCrDXvvG8WuA=Эту утилиту я поставил в мусорную тестовую виртуальную машину на Debian, дабы не засорять свой комп, а уж тем более сервер, всяким непотребством. Ставится через программу cargo, которая есть в стандартных репах Debian:
# apt install cargo $ cargo install djpassЕсли что, утилита оказывается в каталоге ~/.carbo/bin С хешем наперевес идём в базу. В моём случае, как я уже сказал, это sqlite:
# sqlite3 /path/to/db/file sqlite> INSERT INTO "auth_user" VALUES(3,"pbkdf2_sha256$120000$nwEK2MXzMCj7$u3ZGMBCbdGC72pNJkh8dZ79pcYbmlGNQCrDXvvG8WuA= ","",1,"megaadmin","","",1,1,"2019-02-27 11:32:20","");Готово. Далее у меня была внутреняя ошибка 500, но при включенном дебаге выяснил, что просто права к базе были некорректными, nginx не мог до неё добраться.
понедельник, 27 октября 2014 г.
Узнать каталог, из которого запущен процесс
Как узнать, кто слушает определённый порт?
P.S. Проще даже так:
# ss -tpunl | grep 3780
udp UNCONN 2754 0 10.100.10.22:3780 *:* users:(("python",4313,6))
Что же это за процесс?# ps ax|grep 4313 4313 pts/4 Rl+ 29106:08 python ./server.pyНекий server.py, не ясно откуда запущенный. Что ж:
# pwdx 4313 4313: /home/username/conntrackd/conntrack-decoderНашли :)
P.S. Проще даже так:
# ls -l /proc/4313/cwd lrwxrwxrwx 1 username username 0 Окт 27 14:48 /proc/4313/cwd -> /home/username/conntrackd/conntrack-decoder
пятница, 1 августа 2014 г.
Bridge с помощью iproute2
Всех админов в пределах досягаемости бью по рукам за использование ifconfig/route на linux-серверах. К счастью в новых дистрибутивах эти анахронизмы даже не установлены по умолчанию и народ рано или поздно начнёт переучиваться.
Сегодня попробуем создать бридж с помощью всемогущей утилиты ip из пакета iproute2
ip l s dev eth1 up ip l s dev eth0.1999 up ip l add name br0 type bridge ip l s dev eth1 master br0 ip l s dev eth0.1999 master br0 ip l s dev br0 upThat's all, folks!
вторник, 22 июля 2014 г.
FTP через TELNET
Для академических целей попробуем подключиться к FTP с использованием утилиты telnet.
Для успешного скачивания файла нам потребуется две открытые консоли и калькулятор. Вместо telnet можно использовать nc/netcat. Подключаться будем в пассивном режиме.
Авторизируемся:
Не закрывая первую консоль во второй консоли пишем:
Для успешного скачивания файла нам потребуется две открытые консоли и калькулятор. Вместо telnet можно использовать nc/netcat. Подключаться будем в пассивном режиме.
Авторизируемся:
$ telnet mirror.yandex.ru 21 Trying 213.180.204.183... Connected to mirror.yandex.ru. Escape character is '^]'. 220-Welcome to Yandex Mirror FTP service. Your served by: node01d.mirror.yandex.net 220 USER anonymous 331 Please specify the password. PASS a@b.ru 230 Login successful.Открываем на сервере порт для "пассивного" подключения:
PASV 227 Entering Passive Mode (213,180,204,183,221,153).Здесь мы видим параметры для ВТОРОГО подключения. Первые четыре числа -- это ip-адрес сервера, пятое и шестое -- это порт для подключения. Вычисляется по формуле: первое*256 + второе.
Не закрывая первую консоль во второй консоли пишем:
$ telnet mirror.yandex.ru 56729 Trying 213.180.204.183... Connected to mirror.yandex.ru. Escape character is '^]'.В рамках этого соединения мы можем только получать данные. Вот примерный список FTP-команд:
ABOR - прервать передачу
CWD - сменить директорию
DELE - удалить файл на сервере
LIST - детальный список файлов на сервере
MDTM - узнать время модификации файла
MKD - создать каталог на сервере
NLST - упрощенный список файлов на сервере
PASS - отправить пароль
PASV - перейти в пассивный режим
PORT - заставить сервер подключиться к клиенту на определенный порт (активный режим)
PWD - вывести название текущего каталога
QUIT - окончить соединение
RETR - скачать файл с сервера
RMD - удалить каталог на сервере
RNFR - переименовать из
RNTO - переименовать в
SITE - серверо-специфицеские команды
SIZE - узнать размер файла
STOR - залить файл на сервер
TYPE - установить режим передачи
USER - отправить пользовательский логин
Пользуясь командами (и переподключаясь во второй консоли каждый раз на новый порт, который нам указывает сервер, скачиваем файл.
Первая консоль:LIST 150 Here comes the directory listing. 226 Directory send OK. CWD pub 250 Directory successfully changed. PASV 227 Entering Passive Mode (213,180,204,183,217,235). LIST 150 Here comes the directory listing. 226 Directory send OK. CWD tools 250 Directory successfully changed. PASV 227 Entering Passive Mode (213,180,204,183,230,239). LIST 150 Here comes the directory listing. 226 Directory send OK. CWD crosstool 250 Directory successfully changed. PASV 227 Entering Passive Mode (213,180,204,183,230,34). LIST 150 Here comes the directory listing. 226 Directory send OK. PASV 227 Entering Passive Mode (213,180,204,183,202,255). RETR index.html 150 Opening BINARY mode data connection for index.html (6922 bytes). 226 Transfer complete.Вторая консоль:
$ telnet mirror.yandex.ru 56729 Trying 213.180.204.183... Connected to mirror.yandex.ru. Escape character is '^]'. drwxr-xr-x 17 ftp ftp 4096 Jul 22 03:27 altlinux drwxr-sr-x 20 ftp ftp 4096 Jul 21 10:29 altlinux-beta drwxr-xr-x 7 ftp ftp 4096 Jul 21 10:43 altlinux-nightly drwxr-xr-x 17 ftp ftp 4096 Jul 22 07:38 archlinux drwxr-xr-x 7 ftp ftp 4096 Jul 21 10:56 archserver drwxr-sr-x 6 ftp ftp 4096 Sep 17 2007 asplinux-tigro drwxr-xr-x 4 ftp ftp 4096 Jul 21 10:56 astra drwxr-xr-x 39 ftp ftp 4096 Jul 21 10:35 calculate drwxrwxr-x 38 ftp ftp 4096 Jul 22 05:06 centos drwxr-xr-x 8 ftp ftp 4096 Jul 22 03:53 debian drwxrwsr-x 6 ftp ftp 4096 Jul 22 03:22 debian-backports drwxr-xr-x 5 ftp ftp 4096 Jul 22 02:36 debian-cd drwxrwxr-x 6 ftp ftp 4096 Jul 22 01:04 debian-multimedia drwxrwsr-x 6 ftp ftp 4096 Jul 21 10:34 debian-security drwxr-sr-x 7 ftp ftp 4096 Jul 21 20:40 epel drwxr-xr-x 7 ftp ftp 4096 Jul 22 05:08 fedora drwxrwxr-x 12 ftp ftp 4096 Jul 22 04:21 freebsd drwxr-xr-x 6 ftp ftp 4096 Jul 22 07:32 gentoo-distfiles drwxrwxr-x 169 ftp ftp 4096 Jul 22 07:32 gentoo-portage drwxr-xr-x 10 ftp ftp 12288 Jul 21 10:08 knoppix drwxr-xr-x 3 ftp ftp 4096 Jul 22 02:04 libreoffice drwxr-xr-x 7 ftp ftp 4096 Jul 21 10:32 linuxmint drwxr-xr-x 5 ftp ftp 4096 Jul 22 04:24 macports drwxr-xr-x 6 ftp ftp 4096 Jul 22 07:32 mageia drwxr-xr-x 39 ftp ftp 4096 Jun 30 09:26 mirrors drwxr-xr-x 6 ftp ftp 4096 Mar 11 14:53 mopslinux drwxr-xr-x 8 ftp ftp 4096 Jul 22 07:40 mozilla drwxr-xr-x 48 ftp ftp 4096 Jul 22 02:18 openbsd drwxr-xr-x 5 ftp ftp 4096 Jul 22 05:06 openmandriva drwxr-xr-x 8 ftp ftp 4096 Jul 21 17:33 opensuse drwxr-xr-x 8 ftp ftp 4096 Jul 22 06:07 pub drwxr-xr-x 8 ftp ftp 4096 Jul 21 10:31 puppyrus drwxr-xr-x 10 ftp ftp 4096 Jul 22 05:32 rosa drwxr-xr-x 4 ftp ftp 4096 Jul 21 10:33 runtu drwxrwxr-x 5 ftp ftp 4096 Jul 22 04:32 sabayon drwxr-xr-x 13 ftp ftp 4096 Jul 22 04:32 scientificlinux drwxr-xr-x 6 ftp ftp 4096 Apr 02 17:53 simplelinux drwxr-xr-x 42 ftp ftp 4096 Jul 22 00:34 slackware drwxr-xr-x 6 ftp ftp 4096 Jul 22 02:09 ubuntu drwxr-xr-x 30 ftp ftp 4096 Jul 22 04:16 ubuntu-cdimage drwxr-xr-x 12 ftp ftp 4096 Jul 22 06:16 ubuntu-releases Connection closed by foreign host. $ telnet mirror.yandex.ru 55787 Trying 213.180.204.183... Connected to mirror.yandex.ru. Escape character is '^]'. lrwxrwxrwx 1 ftp ftp 11 Feb 17 2013 FreeBSD -> ../freebsd/ lrwxrwxrwx 1 ftp ftp 11 Feb 17 2013 OpenBSD -> ../openbsd/ drwxr-xr-x 13 ftp ftp 4096 Nov 16 2011 linux drwxrwxr-x 3 ftp ftp 4096 Sep 23 2008 media drwxr-xr-x 15 ftp ftp 4096 Aug 03 2013 scm drwxrwxr-x 2 ftp ftp 4096 Aug 09 2013 site drwxr-xr-x 13 ftp ftp 4096 Nov 27 2011 software drwxr-xr-x 3 ftp ftp 4096 Apr 30 2008 tools Connection closed by foreign host. $ telnet mirror.yandex.ru 59119 Trying 213.180.204.183... Connected to mirror.yandex.ru. Escape character is '^]'. drwxrwxr-x 3 ftp ftp 4096 May 22 2013 crosstool Connection closed by foreign host. $ telnet mirror.yandex.ru 58914 Trying 213.180.204.183... Connected to mirror.yandex.ru. Escape character is '^]'. drwxrwxr-x 5 ftp ftp 4096 Mar 28 2012 files -rw-rw-r-- 1 ftp ftp 6922 May 22 2013 index.html -rw-rw-r-- 1 ftp ftp 543 May 22 2013 index.html.sign -rw-r--r-- 1 ftp ftp 962 Apr 02 07:57 sha256sums.asc Connection closed by foreign host. $ telnet mirror.yandex.ru 51967 Trying 213.180.204.183... Connected to mirror.yandex.ru. Escape character is '^]'. [тут вырезано содержимое получаемого файла] Connection closed by foreign host.
воскресенье, 15 декабря 2013 г.
Почему не запускается бинарник?
user@book:~$ /home/user/some_program/program_bin bash: /home/user/some_program/program_bin: Нет такого файла или каталога user@book:~$ ls -l /home/user/some_program/program_bin -rwxr-xr-x 1 user user 286567 май 27 2012 /home/user/some_program/program_bin user@book:~$ file /home/user/some_program/program_bin /home/user/some_program/program_bin: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.2.0, not stripped user@book:~$ /home/user/some_program/program_bin bash: /home/user/some_program/program_bin: Нет такого файла или каталога user@book:~$ mount | grep home /dev/mapper/_dev_dm_3 on /home/user type ext4 (rw,relatime,data=ordered) user@book:~$ ls -ld /home/user/some_program drwxr-xr-x 15 user user 4096 окт 24 19:38 /home/user/some_program
user@book:~$ ld /home/user/some_program/program_bin
ld: i386 architecture of input file `/home/user/some_program/program_bin' is incompatible with i386:x86-64 output
понедельник, 11 февраля 2013 г.
sudo через ssh
Иногда бывает необходимо срочно выполнить какую-то команду на куче серверов одновременно. И даже при наличии puppet на это уйдёт некоторое время. Поэтому я использую такой приём:
for i in $(seq 1 7); do ssh -t username@server${i}.example.com sudo ifconfig ix0 promisc up; done
А суть этого поста в параметре -t, без которого sudo не хочет запрашивать пароль.
пятница, 15 июня 2012 г.
Быстрое развертывание хоста виртуализации на Centos+KVM+libvirt
KVM -- специальная прослойка-интерфейс для предоставления доступа виртуальным машинам к реальному железу. Требует обязательной поддержки аппаратной виртуализации в процессоре.
1. Ставим Centos 6 x86_64 в минимальной конфигурации. Я обычно ставлю с netinstall, убрав галочки со всех компонентов.
2. Устанавливаем собственно модули, эмулятор qemu и библиотеку libvirt, которая является оберткой для комфортного управления машинами.
3. В файле /etc/libvirt/libvirtd.conf находим и раскомментируем следующие опции (отключаем шифрование административного подключения, разрешаем входящие подключения по сети, режим аутентификации -- sasl):
4. Включаем "удаленный рабочий стол" по протоколу VNC. Там же можно включить протокол SPICE, если нужно. В файле /etc/libvirt/qemu.conf
5. Еще одно место, где нужно разрешить демону libvirtd принимать соединения. В файле /etc/sysconfig/libvirtd
6. Создать пользователя и задать ему пароль. Этот пользователь не имеет отношения ни к локальным unix-пользователям, ни к пользователям виртуальных машин. Это логин+пароль для подключения к libvird с другой машины. Дать команду:
7. Открыть в iptables подключения с админской машины (для VNC 5900/tcp, для libvirt 16509/tcp).
8. Запускаем.
9.Проверим работу локально.
На админскую машину ставим virt-manager и пробуем подключиться.
1. Ставим Centos 6 x86_64 в минимальной конфигурации. Я обычно ставлю с netinstall, убрав галочки со всех компонентов.
2. Устанавливаем собственно модули, эмулятор qemu и библиотеку libvirt, которая является оберткой для комфортного управления машинами.
yum install qemu-kvm libvirt
3. В файле /etc/libvirt/libvirtd.conf находим и раскомментируем следующие опции (отключаем шифрование административного подключения, разрешаем входящие подключения по сети, режим аутентификации -- sasl):
listen_tls = 0 listen_tcp = 1 mdns_adv = 0 auth_tcp = "sasl"
4. Включаем "удаленный рабочий стол" по протоколу VNC. Там же можно включить протокол SPICE, если нужно. В файле /etc/libvirt/qemu.conf
vnc_listen = "0.0.0.0" vnc_password = "pa55w0rd"
5. Еще одно место, где нужно разрешить демону libvirtd принимать соединения. В файле /etc/sysconfig/libvirtd
LIBVIRTD_ARGS="--listen"
6. Создать пользователя и задать ему пароль. Этот пользователь не имеет отношения ни к локальным unix-пользователям, ни к пользователям виртуальных машин. Это логин+пароль для подключения к libvird с другой машины. Дать команду:
saslpasswd2 -a libvirt username
7. Открыть в iptables подключения с админской машины (для VNC 5900/tcp, для libvirt 16509/tcp).
8. Запускаем.
service libvirtd start
9.Проверим работу локально.
virsh listЕсли ошибок нет, значит всё, сервер настроен верно.
На админскую машину ставим virt-manager и пробуем подключиться.
суббота, 10 марта 2012 г.
Сделать фото вебкамерой из консоли
Простой способ сделать фото с подключенной вебкамеры (например для использования в скриптах):
mplayer -vo png -frames 1 tv://Моя камера, видимо, не успевает до конца инициализироваться, поэтому вместо фото я получаю зеленый прямоугольник. Достаточным оказалось поставить параметр -frames 2, после чего первый кадр просто удаляю.
понедельник, 30 января 2012 г.
Шифрование домашнего каталога
Миграция на шифрованный раздел.
По ряду причин решил зашифровать домашний каталог на ноутбуке, благо он вынесен на отдельный том lvm.
Было:
Стало:
Для этого мне понадобилось:
Включить в ядре опции:
Механизм миграции будет следующим: уменьшим текущий домашний раздел lvm до минимально возможного, создадим новый раздел lvm, зашифруем его, создадим на нем новый домашний раздел. Перенесем данные со старого раздела на новый. Далее настроим систему так, чтобы домашний раздел подключался только после входа пользователя в систему. После чего, по желанию, можно удалить старый раздел, расширить новый раздел lvm за счет старого, расширить зашифрованный раздел, а за ним уже расширить домашний раздел.
На домашнем разделе занято всего ~50 гигабайт.
Значит уменьшаю home до 60 гигабайт, создаю новый том lvm и шифрую его:
Создаю на новом домашнем разделе файловую систему и переношу туда данные со старого раздела
Добавляю в /etc/pam.d/system-auth строчки (выделены):
По ряду причин решил зашифровать домашний каталог на ноутбуке, благо он вынесен на отдельный том lvm.
Было:
+----------------------------------------------------+ | Disk /dev/sda | | +-------+---------------------------------------+ | | | sda1 | sda2 lvm | | | | | +------+------+------+--------------+ | | | | / | | /usr | /var | swap | /home | | | | | | +------+------+------+--------------+ | | | +-------+---------------------------------------+ | | | +----------------------------------------------------+
Стало:
+----------------------------------------------------+ | Disk /dev/sda | | +-------+---------------------------------------+ | | | sda1 | sda2 lvm | | | | | +------+------+------+--------------+ | | | | / | | /usr | /var | swap | luks | | | | | | | | | | +----------+ | | | | | | | | | | | /home | | | | | | | | | | | +----------+ | | | | | | +------+------+------+--------------+ | | | +-------+---------------------------------------+ | | | +----------------------------------------------------+* Кстати, схема-то упрощенная. У lvm не обозначена еще volume group :) *
Для этого мне понадобилось:
Включить в ядре опции:
Cryptographic API -> SHA224 and SHA256 digest algorithm (CONFIG_CRYPTO_SHA256)и
Device Drivers ->Далее я пересобрал ядро и установил пакет cryptosetup.
Multiple devices driver support (RAID and LVM) ->
Device mapper support ->
Crypt target support (CONFIG_DM_CRYPT)
Механизм миграции будет следующим: уменьшим текущий домашний раздел lvm до минимально возможного, создадим новый раздел lvm, зашифруем его, создадим на нем новый домашний раздел. Перенесем данные со старого раздела на новый. Далее настроим систему так, чтобы домашний раздел подключался только после входа пользователя в систему. После чего, по желанию, можно удалить старый раздел, расширить новый раздел lvm за счет старого, расширить зашифрованный раздел, а за ним уже расширить домашний раздел.
На домашнем разделе занято всего ~50 гигабайт.
Значит уменьшаю home до 60 гигабайт, создаю новый том lvm и шифрую его:
# lvresize -r -L60G /dev/mapper/vg-home # lvcreate -n hm -l 51734 vg # cryptosetup luksFormat /dev/mapper/vg-hmПароль в последнем шаге должен совпадать с паролем пользователя, т.к. пароль автоматически передается во время входа в систему.
Создаю на новом домашнем разделе файловую систему и переношу туда данные со старого раздела
# cryptsetup luksOpen /dev/mapper/vg-hm secret # mkfs.ext4 /dev/mapper/secret # mkdir /mnt/temp # mount /dev/mapper/vg-hm /mnt/temp # cp -r /home/* /mnt/temp # umount /mnt/tempТеперь устанавливаю pam_mount. У этого пакета необходимо включить USE-флаг crypt.
Добавляю в /etc/pam.d/system-auth строчки (выделены):
auth required pam_env.so auth required pam_unix.so try_first_pass likeauth nullok auth optional pam_permit.so auth optional pam_mount.so account required pam_unix.so account optional pam_permit.so password required pam_cracklib.so difok=2 minlen=8 dcredit=2 ocredit=2 retry=3 password required pam_unix.so try_first_pass use_authtok nullok sha512 shadow password optional pam_permit.so session required pam_limits.so session required pam_env.so session required pam_unix.so session optional pam_permit.so session optional pam_mount.soА в /etc/security/pam_mount.conf.xml следующее:
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE pam_mount SYSTEM "pam_mount.conf.xml.dtd">
<!--
See pam_mount.conf(5) for a description.
-->
<pam_mount>
<!-- debug should come before everything else,
since this file is still processed in a single pass
from top-to-bottom -->
<debug enable="0" />
<!-- Volume definitions -->
<volume user="yuri" path="/dev/mapper/vg-hm" mountpoint="~" cipher="aes-cbc-essiv:sha256" />
<!-- pam_mount parameters: General tunables -->
<!--
<luserconf name=".pam_mount.conf.xml" />
-->
<!-- Note that commenting out mntoptions will give you the defaults.
You will need to explicitly initialize it with the empty string
to reset the defaults to nothing. -->
<mntoptions allow="nosuid,nodev,loop,encryption,nonempty,allow_root,allow_other" />
<!--
<mntoptions deny="suid,dev" />
<mntoptions allow="*" />
<mntoptions deny="*" />
-->
<mntoptions require="nosuid,nodev" />
<!-- requires ofl from hxtools to be present -->
<logout wait="0" hup="0" term="0" kill="0" />
<!-- pam_mount parameters: Volume-related -->
<mkmountpoint enable="1" remove="true" />
</pam_mount>
И не забыть убрать строчку с home из /etc/fstab.среда, 16 ноября 2011 г.
Сохранение правил iptables в Fedora 16
Netfilter, внутриядерный межсетевой экран Linux, управляемый утилитой iptables, при перезагрузке, как известно, не сохраняет правила фильтрации самостоятельно. Эта задача на совести сборщиков дистрибутивов. И сколько пользуюсь системами, родственными RedHat, правила всегда сохранялись командой
ненужный systemd, который, как оказалось, не может заменить init-скрипты на 100% процентов. Сотрудник Red Hat (судя по адресу электронной почты) Thomas Woerner сообщил:
"Пожалуйста, воспользуйтесь старым init-скриптом, его переместили в /usr/libexec:
# service iptables saveНо в Fedora 16 используют этот
/usr/libexec/iptables.init saveНет никакой возможности добавить функцию save в systemd."
воскресенье, 11 сентября 2011 г.
Проверка заряда батареи из командной строки
Узнать состояние батареи лэптопа можно простой командой acpi из одноименного пакета.
$ acpi Battery 0: Discharging, 28%, 01:09:38 remaining
понедельник, 18 апреля 2011 г.
Смена runlevel по-умолчанию в Fedora 15
Долгое время настройка дефолтного ранлевела производилась в файле /etc/inittab. Однако в грядущей Fedora 15 используется новая система загрузки - systemd, и изменение загрузочного уровня производится созданием символьной ссылки:
ln -s /lib/systemd/system/graphical.target /etc/systemd/system/default.target
воскресенье, 17 апреля 2011 г.
Уровень громкости alsa
Чтобы сохранить уровень громкости, настроенный через alsamixer, достаточно дать команду от root:
# alsactl store
среда, 2 марта 2011 г.
Каталог ".." на флешке
Принесли флешку, обработанную вирусом следующим способом: вирус создал каталог ".." - две точки - и перекинул туда все файлы, что были на флешке. На их место положил собственные exe-файлы с измененными ярлыками. Антивирусная программа удалила все экземпляры вируса, но восстановить файлы из каталога с двумя точками не смогла.
В Dos/Windows восстановление таких файлов достаточно простое - dir /X e:\ и move e:\E2E2~1 c:\temp. Windows под рукой не оказалось, но Linux справился с задачей не хуже. Вернее пакет mtools. Достаточно указать путь к устройству (флешке) в конфигурационном файле:
В Dos/Windows восстановление таких файлов достаточно простое - dir /X e:\ и move e:\E2E2~1 c:\temp. Windows под рукой не оказалось, но Linux справился с задачей не хуже. Вернее пакет mtools. Достаточно указать путь к устройству (флешке) в конфигурационном файле:
drive c: file=/dev/sdb1Далее командой
# mdir c:увидеть настоящее имя каталога с двумя точками - E2E2~1. И командой
# mmove c:\E2E2~1\* c:\tempвытащить эти файлы. После чего каталог ".." можно удалить:
# mrd c:\E2E2~1
среда, 12 января 2011 г.
Восстановление файлов после форматирования
Принесли sd-карту, которую отформатировали штатными средствами фотоаппарата. Попросили восстановить хоть что-нибудь. Попробуем.
четверг, 9 декабря 2010 г.
Полезные команды в консоли
Несколько полезных штук, не заслуживающих отдельного поста:
Перевести дату из формата Unix Epoch (количество секунд с 01.01.1970) в понятный человеку:
Перевести дату из формата Unix Epoch (количество секунд с 01.01.1970) в понятный человеку:
$ date -d @1291903188Можно подставить формат по вкусу:
$ date -d @1291903188 +'%F %T'Заменить символ в файле/потоке по его шестнадцатеричному номеру (32 - это код символа "2"):
$ sed 's/\x32/3/'Заменить символы внутри переменной в bash:
$ VAR='test'; echo ${VAR/t/f}
fest
$ VAR='test'; echo ${VAR//t/f}
fesf
$ VAR='test'; echo ${VAR/t/}
esВывести переменную с определенного символа (определенной длины):$ VAR='test'; echo ${VAR:2}
st
$ VAR='test'; echo ${VAR:1:2}
es
понедельник, 22 ноября 2010 г.
Склеивание нескольких изображений в PDF
Как сшить несколько изображений в один многостраничный файл PDF? Достаточно входящей в пакет ImageMagick команды convert:
Здесь изображения уменьшаются, цвет переводится в оттенки серого и на выходе получаем PDF.
$ convert -resize 20% -colorspace gray *jpeg out.pdf
Здесь изображения уменьшаются, цвет переводится в оттенки серого и на выходе получаем PDF.
вторник, 5 октября 2010 г.
Удаленное использование Sysrq
В Linux есть специальные комбинации для непосредственного управления ядром. Перечень этих комбинаций (это комбинации Alt, Sysrq и еще одной клавиши) найти легко. Но как передать команду ядру, находясь в удаленной сессии, например по ssh?
Ответ есть в документации к ядру (в файле Documentation/sysrq.txt) - достаточно просто отправить символ нужной клавиши в /proc/sysrq-trigger. Например:
Ответ есть в документации к ядру (в файле Documentation/sysrq.txt) - достаточно просто отправить символ нужной клавиши в /proc/sysrq-trigger. Например:
# echo s > /proc/sysrq-trigger
SysRQ : Emergency Sync
Подписаться на:
Сообщения (Atom)