Как побороть баг в newusers

Первый раз в жизни приключилась необходимость, экспортировать большое количество пользователей из одного дистрибутива, в другой. Сперва думал, как и чего наколхозить для достижения истинного дзена, но нашел утилиту newusers (нашел – громко сказано, она всегда рядом была, в пакете shadow) и возрадовался.

Прога умеет создавать пользователей руководствуясь списком в текстовом файле, где каждая строка имеет вид:

user_name:clear_text_password:number_uid:number_gid:text_comment:home_dir:user_shell

где:

  1. user_name – это имя пользователя (латиницей);
  2. clear_text_password – нешифрованный пароль;
  3. number_uid – цифровой идентификатор пользователя (должен быть больше UID_MIN и меньше UID_MAX в файле /etc/login.defs) ;
  4. number_gid – цифровой идентификатор группы (должен быть больше GID_MIN и меньше GID_MAX в файле /etc/login.defs) ;
  5. text_comment – Комментарий, или фио пользователя (можно кириллицей);
  6. home_dir – домашняя директория (скрипт создаст ее сам);
  7. user_shell – командная оболочка или например /usr/sbin/nologin, если в шелл пользователю нельзя;

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


root@server:/home/serp# newusers ./userlist.txt
*** Error in `newusers': free(): invalid next size (fast): 0x00000000012b23d0 ***
Aborted (core dumped)

Читать

Кое что о SED

В жизни любого айтишника, бывают моменты, когда нужно сделать много однообразной работы, но инструментами, которые могли бы помочь автоматизировать процесс не владеешь. И тут возникает вопрос, что быстрее: потратить время, научиться пользоваться инструментом, и потом сделать все за 5 минут, или потратить время и сделать все в ручную.

Зачастую, сделать в ручную быстрее, если конечно не думать о том, что возможно придется еще не раз делать эту работу, а обычно так и бывает!

Так случилось, что сегодня мне нужно было в пяти мегабайтном CSV файле из почти 100 000 строк заменить сперва все запятые на точку с запятой, а затем все точки на запятые. Не буду вдаваться в подробности, но сперва, я попробовал как обычно открыть его в Libre  Office Calc. Точнее открыл то я его без проблем, а вот операция “поиск с заменой” подвесила редактор на долго. Прождав минут 10, я его прибил. Решил, что старый добрый nano сделает это быстрее. Хрен там было!

Любой смыслящий в линукс, скажет – в SED это сделать легко, но так уж вышло, что для меня SED это тот самый инструмент, который изучить все не доводилось. Но решил попробовать. Нашел довольно хороший мануал для новичков, и блин эта ацкая прога перемолола файл примерно за 2 СЕКУНДЫ!!!!

Сказать что я был удивлен – ничего не сказать. Я сперва подумал, что команду не правильно ввел…. Но все было верно. Ниже перепост того мануала. Автору ОГРОМНОЕ СПАСИБО. Ссылка на оригинал в конце.

Читать

10 Способов сгенерировать пароль в консоли

One of the great things about Linux is that you can do the same thing hundreds of different ways—even something as simple as generating a random password can be accomplished with dozens of different commands. Here’s 10 ways you can do it.

We gathered all of these commands from Command-Line Fu and tested them out on our own Linux PC to make sure they work. You should be able to use at least some of these on Windows with Cygwin installed, though we didn’t test all of them—the last one definitely works though.

Generate a Random Password

For any of these random password commands, you can either modify them to output a different password length, or you can just use the first x characters of the generated password if you don’t want such a long password. Hopefully you’re using a password manager like LastPass anyway so you don’t need to memorize them.

This method uses SHA to hash the date, runs through base64, and then outputs the top 32 characters.

date +%s | sha256sum | base64 | head -c 32 ; echo

Читать

Unix как IDE: Введение

Профессиональные программисты, как новички, так и профессионалы, нередко являются сторонниками концепции IDE, или «интегрированной среди разработки». И вправду, удобно иметь самые необходимые средства организации, написания, поддержки и тестирования кода в одном приложении с единым интерфейсом для всего многообразия инструментов. Вдобавок, среда, специально спроектированная для программирования на разных языках, как правило, имеет ряд преимуществ, таких как автодополнение, проверка и подсветка синтаксиса.

Подобные средства есть для всех распространенных настольных ОС, включая Linux и BSD, при этом многие из них совершенно бесплатны, засим вряд ли имеет смысл кодить в Блокноте Windows, в nano, или при помощи cat.

Однако, в среде поклонников Unix гуляет в разнообразных вариациях мем о том, что «Unix — это IDE», в том смысле, что средства, которыми разработчики располагают в терминале, легко реализуют основные возможности современных IDE. Вы можете соглашаться или отказываться назвать Unix «IDE» в том самом смысле, что и Eclipse или Microsoft Visual Studio. Так или иначе, вас скорее всего удивит, насколько законченную среду разработки может являть собой скромный Bash.

Читать

Удобная работа в Bash

Тут  приведены  некоторые  полезные  хитрости,  направленные  на более
   удобное  использование  командной  строки.  Все  мы  не хотим повторно
   набирать  какую-то  длинную  команду  и  ищем ее в истории. Тут – пара
   трюков от том, как можно энто самое удобство малость повысить.

1. Потеря комманд в .history

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

   bash  по  умолчанию  пишет в историю набранные за сеанс команды только
   при  своем  закрытии  (перед  самоликвидацией).  Поэтому  при открытии
   нового  терминала  в другой вкладке вы не увидите только что набранные
   команды из первой вкладки – они еще не записаны в хистори.

   К  тому  же  закрыв  первый  терминал,  а потом второй вы не найдете в
   истории  команд  набранных в первом терминале. Потому что по умолчанию
   bash не дописывает файл .history, а переписывает.

   Исправить  ситуацию  можно,  дописав в конфигурационный файл ~/.bashrc
   пару строк

        shopt -s histappend
        PROMPT_COMMAND=’history -a’

   Теперь  каждая  введенная  вами команда будет писаться в историю сразу
   же. Не бойтесь – дырку на жестком месте такая конфигурация не протрет.
   Не  так  уж  часто  вы  команды  в  баше набираете. 🙂 Да и слава богу
   кеширование дисков пока еще рулит.

Читать

Оптимизируем процесс работы в консоли

Все привыкли редактировать текст в текстовых редакторах, блокнотах, веб-формах и т.д. В процессе набора текста мы пользуемся привычными стрелками, кнопками «End» и «Home», более опытные зажимают «Ctrl» и стрелками шагают по словам (что, кстати, не всегда работает). И при переходе на консоль мы ориентируемся на те же самые правила, даже не зная, что bash предлагает очень удобные средства и комбинации клавиш, которые очень упрощают работу и минимизируют количество операций для выполнения задачи. К тому же, в bash есть удобные средства работы с историей, масса различных подстановок и других интересных функций. Самые часто используемые мной и любым опытным администратором я и опишу в этой статье.

Для того, чтобы все, описанное мной, заработало, не нужно ничего до устанавливать, не нужно писать скрипты, конфиги и прочие дополнения: все эти средства работают абсолютно одинаково в большинстве современных интерпретаторах bash, работающих на любой UNIX системе.
Мой педагогический опыт говорит о том, что практика — лучший способ понять, полюбить и привыкнуть к новым функциям, поэтому я не стал рисовать голые таблицы, а сделал повествование, и рекомендую в процессе чтения статьи открыть консоль и пробовать все, чем еще не пользовались, руками.

Читать

скрин-сейвер!

А вот кому скрин-сейвер?
Зависит от xprintidle, slock.

#!/bin/sh
TIMEOUT_S=900
TIMEOUT_MS=$((${TIMEOUT_S}*1000))
FILE=`mktemp`

while true; do
STAMP=`date +"%Y-%m-%d %H:%M:%S"`
IDLE=`xprintidle`
if [ "$IDLE" -gt "$TIMEOUT_MS" ] ; then
if [ ! -e ${FILE} ] ; then
echo "${STAMP} lock"
xset dpms force off
slock
touch ${FILE}
fi
else
if [ -e ${FILE} ] ; then
echo "${STAMP} unlock"
rm -f ${FILE}
fi
fi
sleep 5
done

Быстрый способ удалять из консоли несколько директорий за 1 раз.

Уверен, что многие из нас собирают разную информацию и раскладывают по директориям (музыка, книжки, фотки).

Если у вас есть каталог, содержащий десять подкаталогов, и вы хотите удалить 4 из них, самый медленный способ -это вводить каждый раз команду.

Читать

Изменение реакции BASH на ввод несуществующей команды

В Debian и Ubuntu bash пропатчен специальным патчем, который добавляет функцию, обрабатывающую ввод несуществующей команды.

Функция эта называется command_not_found_handle. В Ubuntu она уже используется для вывода сообщения о возможности установить недостающую программу.
Естественно эту функцию можно переопределить в .bashrc, приспособив ее под свои нужды. У меня, например, просто выводится сообщение об отсутствии введенной команды.

function command_not_found_handle {
EXECUTED_CMD=`history | tail -n 1 | awk ‘{$1 = “”; print $0}’ | colrm 1 1`
echo -e “ОноТолЕй СъеЛ 33[1;37m$EXECUTED_CMD33[0;37m. ПЫщЬ пЫщЬ!!!111”
echo -e “Воены УПЧК следят за тобой “‘$USERNAME’
}