Bash

Новый пользователь

Для генерации паролей удобно использовать pwgen -s.

Создание пользователя qwerty с группой qwerty, башем в качестве шелла по-умолчанию и с домашней директорией:

U=qwerty
G=$U
groupadd $G
useradd --create-home -s /bin/bash -g $G $U
passwd $U

Запрет на чтение домашней директории другими пользователями:

chmod 750 /home/$U

Скрыть юзернейм и хостнейм

Например, чтобы делать скриншоты и скринкасты для документации.

Приглашение баша определяется переменной PS1. Чтобы скрыть имя пользователя и хост, но оставить текущее местоположение, можно указать такой формат:

PS1="\\w \$ "

Пример вывода:

~ $
~ $
~ $ cd folder/
~/folder $
~/folder $ cd anotherFolder
~/folder/anotherFolder $

Чтобы без лишних настроек получить чистое окно консоли:

PS1="\\w \$ ";clear

Переменную PS1 можно определить в ~/.bashrc. Подробнее об этой переменной.

Освободить место

Когда забивается диск, перестают работать самые базовые вещи. Даже клавиша TAB в баше. Ничего нельзя доустановить, чтобы решить проблему.

Поэтому NCurses Disk Usage лучше устанавливать сразу после развёртывания сервера.

sudo apt-get install ncdu

Программа рекурсивно сканирует папки и сортирует их в порядке убывания размера. Навигация как в mc, выход — q.

Когда место кончится:

  1. df -h чтобы понять, какие разделы переполнены.

  2. ncdu из точки монтирования нужного раздела.

Команда ncdu сканирует текущую директорию (working directory).

Команда ncdu по-умолчанию не следует симлинкам.

При использовании ncdu из корня файловой системы, бывает полезно исключить примонтированные диски: sudo ncdu --exclude=/media/* --exclude=/mnt/*

Подсветка синтаксиса в less

В Ubuntu:

sudo apt install source-highlight

Затем в $HOME/.bashrc добавить

export LESSOPEN="| /usr/share/source-highlight/src-hilite-lesspipe.sh %s"
export LESS=' -R -N'

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

Опция -N необязательна. Она добавляет номера строк.

Шпаргалка по nano

Чтобы видеть номер текущей строки при редактировании:

nano -c file.txt

Комбинации клавиш:

  • Вырезать строку — CTRL+K.

  • Вставить строку — CTRL+U.

  • Undo — ALT+U или Esc+U (под M в справке подразумевается клавиша meta).

  • Redo — ALT+E или Esc+E.

Сканирование портов

Иногда nmap не может просканировать порты, т.к. устройство игнорирует пинг.

Там есть опция -Pn, чтобы не пинговать перед сканированием.

В строчке ниже сканируются порты с первого по сотый.

nmap -p 1-100 -Pn 192.168.1.1

Бэкапы для несекретной информации

Должны обладать:

  • избыточностью;

  • простым чтением и навигацией;

  • простотой в удалении старых снапшотов.

Предлагаю использовать cron и tar.

На инстансе, откуда делаются бэкапы, из-под рута настраивается безпарольный доступ к файл-серверу по SSH.

Полагаю, если:

  • файл-сервер находится в локальной сети,

  • cron-задача на клиенте настроена из-под рута,

  • публичный ключ на клиенте защищен от чтения другими пользователями,

то приватный ключ можно делать без парольной фразы.

Открытый ключ копируется на сервер в файл /home/USER/.ssh/authorized_keys.

Права:

drwx------ (700) user user .ssh
-rw------- (600) user user .ssh/authorized_keys

Может потребоваться изменить настройки SSH-сервера (разрешить publickey- или RSA-аутентификацию). И нужно сделать reload SSH-сервера.

Затем, например, в /usr/local/bin клиента кладём скрипт с правами 700 root:root примерно следующего содержания:

#!/bin/sh
tar -cvpz --one-file-system -C "/путь/к/папке/" папка | ssh логин@сервер "(cat > /бэкапы/`date +\"%Y-%m-%dT%H.%M.%S\"`-названиеПапки.tar.gz)"

sudo crontab -u root -e

0 0,6,12,18 * * * /usr/local/bin/myScript.sh

Проблема, которая тут может возникнуть — закончится место на файл-сервере. В моём случае, это несущественно. Буду удалять старые снапшоты вручную время от времени.

Проверить файл на вирусы самым дешевым способом

sudo apt-get install clamav
clamscan файл
status=$?

А если нужно проверить целую папку, удобнее всего это сделать так:

clamscan --infected --recursive=yes папка

Предлагаю также увеличивать лимиты, чтобы при сканировании не игнорировались файлы больше 25 мегабайт: --max-filesize=4000m --max-scansize=4000m (см. man clamscan). Есть также опции для увеличения лимита времени на файл (--max-scantime, по-умолчанию 120000 миллисекунд), предела уровней вложенности директорий и т.д.

MD5 всех файлов в директории в Linux и FreeBSD

Во FreeBSD результат выводится в другом формате, нежели в Linux.

Команде

md5sum * > checklist.chk

во FreeBSD приблизительно соответствует команда

md5 -r * > checklist.chk

где -r означает «reversed»: сначала хэш-сумма, потом имя файла.

И можно было бы сравнивать эти файлы хотя бы Meld’ом визуально, если бы порядок строк не отличался. Если я правильно понял, порядок glob зависит от переменной LC_COLLATE, но мне не удалось сделать его одинаковым. Поэтому я решил прибегнуть к универсальному средству — к Перлу.

# Linux:
perl -e 'opendir DIR,"."; my @f = sort grep {!/^\.\.?$/} readdir(DIR); closedir DIR; foreach(@f) { print "\"$_\"\n"; }' | xargs md5sum > x.chk

# FreeBSD:
perl -e 'opendir DIR,"."; my @f = sort grep {!/^\.\.?$/} readdir(DIR); closedir DIR; foreach(@f) { print "\"$_\"\n"; }' | xargs md5 -r > x.chk

# Удобно сравнивать даже из консоли:
diff --ignore-space-change x1.chk x2.chk
colordiff --ignore-space-change x1.chk x2.chk

# Оба файла работают в Linux.
md5sum -c x1.chk
md5sum -c x2.chk

# Во FreeBSD (11.1-RELEASE) проверка MD5
# списка файлов не поддерживается.

Расшифровка однострочника:

# Открыть текущую директорию в handle с названием DIR.
opendir DIR,".";

# Справа налево:
# прочитать содержимое директории;
# убрать '.' и '..';
# отсортировать,
# сохранить в массив @f.
my @f = sort grep {!/^\.\.?$/} readdir(DIR);

# Закрыть директорию DIR.
closedir DIR;

# Вывести каждое имя файла с новой строки в кавычках.
foreach(@f) {
    print "\"$_\"\n";
}

Поддиректории игнорируются самими командами md5 и md5sum.

Удалить конфиденциальные сведения из истории консоли

Конечно, можно удалить всю историю из текущего окна консоли (history -c), но для многих ситуаций это может быть слишком радикальным шагом, ведь есть возможность удалить отдельные строки из истории.

Вначале надо узнать идентификаторы последних команд.

history | tail -n 20

Затем удалить конкретные команды.

history -d идентификатор

Главное не забыть стереть в терминале результат первой команды.

clear

Выйти из sudo

Sudo позволяет не вводить пароль какое-то время после первого использования. Это настраивается.

Можно явно попрощаться, не закрывая окно терминала:

sudo -k

В следующий раз sudo снова спросит пароль.

Linux UI

Адресная строка в Gnome Files

По-умолчанию, в файловом менеджере Gnome путь текущей папки показан в виде последовательности кнопок. Чтобы переключиться на текстовое поле, нужно нажать Ctrl+L.

Туда можно также ввести sftp-адрес. Например, sftp://username@192.168.0.1/folder

Здоровье

Эргономика рабочего места

Чтобы не сломать руку об мышку, рекомендую программу Workrave. Она заставляет делать перерывы раз в три минуты по 30 секунд и длинные перерывы время от времени. Идея в том, чтобы убирать руки и вообще ничего ими не делать.

Минус: она может выбивать из состояния потока.

Иногда нужно просто проверить эргономику рабочего места. Можно не заметить, что поза очень неудобная.

Я в очередной раз поменял всё, и вроде стало лучше. Привыкаю. Текущие девайсы:

  1. Кронштейны настенные KROMAX ATLANTIS-15 для мониторов (нет регулировки по высоте, к сожалению);

  2. Стол с регулируемой высотой (ручной привод) SKARSTA СКАРСТА 120x70 см. (похоже, он теперь называется TROTTEN);

  3. Стул на колёсиках LOBERGET ЛОБЕРГЕТ / BLYSKÄR БЛИСКЭР на винтовой опоре (по происшествии полугода могу сказать, что не самая удобная спинка, и на нём накапливается статическое электричество, но стул точно удобнее нерегулируемого);

  4. Любая вертикальная мышь. Я использую какую-то NoName 870174 для правшей.

  5. Большой тканевый коврик без подушки (я использую с подушкой, но она развёрнута в другую сторону). Подушка помогала только первые пару недель. Вертикальная мышь намного лучше.