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

суббота, 2 мая 2020 г.

Обнулить все файлы в каталоге.

Для довольно специфической задачи понадобилось обнулить все файлы в каталоге:
while read line; do bash -c "> \"$line\""; done < <(ls -1)

среда, 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 г.

Узнать каталог, из которого запущен процесс

Как узнать, кто слушает определённый порт?
# 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 up
That's all, folks!

вторник, 22 июля 2014 г.

FTP через TELNET

Для академических целей попробуем подключиться к FTP с использованием утилиты telnet.

Для успешного скачивания файла нам потребуется две открытые консоли и калькулятор. Вместо 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, которая является оберткой для комфортного управления машинами.
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.

Было:
+----------------------------------------------------+
|                  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 -> 
Multiple devices driver support (RAID and LVM) ->
Device mapper support ->
Crypt target support (CONFIG_DM_CRYPT)
Далее я пересобрал ядро и установил пакет cryptosetup.

Механизм миграции будет следующим: уменьшим текущий домашний раздел 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, правила всегда сохранялись командой
# service iptables save
Но в Fedora 16 используют этот ненужный systemd, который, как оказалось, не может заменить init-скрипты на 100% процентов. Сотрудник Red Hat (судя по адресу электронной почты) Thomas Woerner сообщил: "Пожалуйста, воспользуйтесь старым init-скриптом, его переместили в /usr/libexec:
/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. Достаточно указать путь к устройству (флешке) в конфигурационном файле:
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) в понятный человеку:
$ 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:
$ convert -resize 20% -colorspace gray *jpeg out.pdf

Здесь изображения уменьшаются, цвет переводится в оттенки серого и на выходе получаем PDF.

вторник, 5 октября 2010 г.

Удаленное использование Sysrq

В Linux есть специальные комбинации для непосредственного управления ядром. Перечень этих комбинаций (это комбинации Alt, Sysrq и еще одной клавиши) найти легко. Но как передать команду ядру, находясь в удаленной сессии, например по ssh?

Ответ есть в документации к ядру (в файле Documentation/sysrq.txt) - достаточно просто отправить символ нужной клавиши в /proc/sysrq-trigger. Например:
# echo s > /proc/sysrq-trigger
SysRQ : Emergency Sync