Вычисляем md5 и sha1 строки в консоли

Standard

Часто бывает необходимо вычислить md5 (или sha1) значение строки (для паролей, к примеру). Раньше мне приходилось идти в браузер набирать в поисковике «md5 online», теперь использую только консоль. На маке есть чудесная программа openssl, ее мы будем использовать для вычисления. Т.к. взять аргумент в alias нельзя, приходиться создавать функции, итак мои функции для вычисления sha1 и md5 в ~/.bash_profile :

sha1(){
echo -n "$1" | openssl sha1;
}
# Назвал не md5 тк такая прога уже есть в консоли мака,
# чтобы не затереть выбрал km5
km5(){
echo -n "$1" | openssl md5;
}

чтобы начать их использовать — набирите source ~/.bash_profile. Теперь можно вычислить sha1 от строки 111:

sha1 111
# => 6216f8a75fd5bb3d5f22b6f9958cdede3fc086c2

Как поменять название хоста в shell

Standard

У меня появилось 3 сервера, все на том же hetzner. Тк по умолчанию названия у них почти одинаковые (название ОС + архитектуры) можно запутаться с каким сервером работаешь в shell. Чтобы этого избежать выполняем такую команду:

hostname SOMENAME

После чего, перезагружаем shell (у меня — bash):

exec bash -l

к слову, стандартная перезагрузка (shell source ~/.bashrc) не изменяет название хоста.
К сожалению приведенные выше команды изменяют название до следующей перезагрузки ОС. Чтобы сделать изменения перманентными — задаем необходимое название в этом файле:

/etc/hostname

После этого, перезапуск apache может выдать такую ошибку: «apache2: apr_sockaddr_info_get() failed for somename» — пропишите в /etc/hosts строку «127.0.0.1 somename».
У вас также может быть ошибка «apache2: Could not reliably determine the server’s fully qualified domain name, using 127.0.0.1 for ServerName» чтобы избавиться добавьте строку ServerName localhost в файл /etc/apache2/httpd.conf .
В итоге у меня все работает по такому принципу: я даю серверу имя в панели управления hetzner, затем прописываю это имя в конфиге ssh (статья как работать с ssh) и наконец: изменяю имя хоста на самом сервере, как я описал выше.

Что интересного в терминале Mac OS X ?

Standard

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

Очень полезная команда open — служит чтобы открывать стандартными программами файлы, например вы находитесь в директории /users/someuser/ и хотите открыть эту папку в Finder — просто наберите open . и терминал откроет Finder с этой папкой. Обратное кстати тоже верно — если вы перетащите папку в терминал, он автоматически вставит путь к этой папке. Если  в выводе есть ссылка, нажмите cmd + двойной щелчок по мышке, откроется браузер с этой ссылкой. Тут я описывал как добавить wget на mac os.

Новые команды, к-ых нет в Linux:

1) ditto:

ditto myfile.txt Documents Копирует файл myfile.txt в Documents
ditto Documents "Documents Backup" Создает копию директории Documents называемой "Documents backup"
ditto archive.zip Documents Распаковывает контент archive.zip директорию Documents.
ditto Documents archive.zip Создает новый сжатый архив содержащий директорию Documents

2) cal / ncal :
Выводят календарь в терминал:

3) say:
Произносит необходимую фразу, к примеру say «Как вам этот блог ребята?»
4) afplay:
Проигрывает музыкальный файл из консоли — afplay sound.mp3

Как использовать sudo в цепочных командах

Standard

Есть такая команда: cat hosts.txt >> /etc/hosts (мы хотим добавить список хостов из файла в файл hosts). Допустим нам нужны права на то, чтобы прочитать первый файл и права на запись во второй. Как быть?
Решение, следующее:
sudo sh -c 'cat hosts.txt >> /etc/hosts'