среда, 16 декабря 2015 г.

Полезные команды Linux

Терминал Linux очень гибкий и полезный инструмент. С помощью него можно сделать, что угодно, и во многих случаях даже намного эффективнее чем в графическом интерфейсе. Многие команды можно объединять между собой, перенаправлять вывод одной команды, на вход другой, что делает их применение еще более эффективным. В этой статье я хочу поделиться несколькими полезными командами, которые я открыл для себя на во время использования Linux и которыми до сих пор пользуюсь для автоматизации рутинных действий.
В качестве командной оболочки используется самая популярная — bash. Также для некоторых задач нам понадобиться демон планирования выполнения задач cron.
Некоторые из этих команд упрощают выполнение той или иной задачи, некоторые полностью выполняют нужные действия за пользователя. Возможно не все они будут вам полезны, так как, некоторые команды нужны только веб мастерам, другие системным администраторам, а еще одни обычным домашним пользователям. Но давайте перейдем к списку.

Создание папок в терминале

Для создания папки в терминале используется команда mkdir. Вот так она выглядит:
$ mkdir имя_папки
Но не все знают о ее дополнительных возможностях. Чтобы создать несколько вложенных папок используйте команду p:
$ mkdir -p /mnt/foo/bar/
Создать несколько папок за один раз:
$ mkdir /mnt/{foo,bar,doc,man}
Создать папку и перейти в нее:
$ mkdir /home/foo/doc/bar && cd $_
Кстати, синтаксис фигурных скобок поддерживается и другими стандартными командами Linux.

Ожидать завершения команды и выключить компьютер

Это скорее не команда, а небольшая стандартная функция оболочки Bash, о которой не все знают. Иногда нам нужно оставить на выполнение какую нибудь долго работающую утилиту, например обновление системы, а самим куда то отойти. И при этом мы хотим чтобы после завершения работы утилиты компьютер автоматически выключился. Можно просто объединить команды с помощью стандартного синтаксиса Bash. Для объединения используются символы && и ||. Первый — выполнить другую команду если первая завершилась успешно, второй если первая завершилась ошибкой.
Например обновить систему и если все хорошо выключить PC:
$ su —
$ apt-get update && apt-get upgrade && shutdown -h now
Или выключить компьютер если обновление не удалось:
$ apt-get update && apt-get upgrade || shutdown -h now
Или выключить не зависимо от того произошла ошибка или нет:
$ apt-get update && apt-get upgrade ; shutdown -h now
Здесь приведена команда обновления Ubuntu, но в других дистрибутивах достаточно заменить эту команду на свою, чтобы все заработало.

Повторить последнюю команду

Если мы уже начали говорить  о возможностях Bash пойдем дальше. Символ !! означает выполнить последнюю команду. Часто ли у вас случалось такое, что вы набираете команду нажимаете Enter и понимаете, что для ее работы нужно было использовать sudo? Тогда приходиться набирать ту же команду только уже правильно. Но можно пойти другим путем, просто выполнить:
$ sudo !!
Кроме символа !! В Bash есть еще несколько указателей на команды:
!^ — первый аргумент предыдущей команды;
!$ — последний аргумент предыдущей команды;
!* — все аргументы предыдущей команды;
!-2 — вторая с конца команда.
А вот так можно сохранить последнюю выполненную команду в скрипт:
$ echo «!!» > foo.sh

Вызвать последнюю команду которая начиналась с символов

И еще о возможностях Bash. Например вы помните что подключались в последний раз к определенному узлу по ssh, и теперь вам нужно подключится к нему снова. Чтобы не вводить полностью команду можно набрать знак «!» и символы с которых начиналась команда:
$ !ssh 
Будет выполнена последняя команда которая начиналась на ssh.

Посмотреть ip адрес

Часто возникает необходимость быстро узнать ip адрес своей машины. Для этого есть легко запоминающаяся команда, использующая curl и сайт ifconfig.me:
$ curl ifconfig.me

Форматирование вывода

Многие команды Linux выводят данные разделяя столбцы пробелами. Одна из них mount. И естественно в этом выводе трудно что либо разобрать. Для разделения столбцов табуляциями используйте утилиту column:
$ mount | column -t

Динамический просмотр лога

Допустим есть у нас лог файл в который пишется определенная информация и мы хотим видеть все изменения сразу, на лету. Тогда используйте команду tail с опцией -f:

$ tail -f /адрес/лог/файла
Будет выведено 8 последних строк из лога файла, а затем они будут постоянно обновляться.

Очистить терминал

Вывод команд, если во время их разработки были допущены некоторые ошибки может сломать форматирование строк терминала. Или просто может понадобится стереть всю лишнюю информацию. Для этого есть команда:
$ reset

Подключение RAM диска

Если вам нужно немного дискового пространства с высокой скоростью работы, в Linux можно легко подключить немного оперативной памяти в корневую файловую систему:
$ mount -t tmpfs tmpfs /mnt -o size=1024m
В папку /mnt будет подключен RAM диск размером 1024 мегабайт.

Узнать архитектуру системы

Этой простой командой можно быстро узнать разрядность системы:
$ getconf LONG_BIT

Открыть файл на определенной строке

Это не команда, а просто малоизвестная функция консольных редакторов. Очень полезная для программистов. Вот например сообщает программа, что у вас ошибка в 55 строке, вы вместо того чтобы самому искать ту сроку просто набираете:
$ nano +55 /sourcefile
или
$ vim +55 /sourcefile
И оказываетесь сразу на нужной строке

Время выполнения команды

Хотите узнать сколько времени выполняется та или иная команда? Просто добавьте перед ней вызов утилиты time. Например:
time ls ~/
drwxr-xr-x 8 user user 4096 дек 6 14:13 Фильмы
drwxr-xr-x 13 user user 4096 июл 20 2014 Фото
real 0m0.059s
user 0m0.003s
sys 0m0.003s
Эту команду также можно использовать в качестве секундомера. Просто выполните:
$ time read
А затем нажмите Ctrl+D когда нужно будет узнать сколько времени прошло.

Автоматическое удаление старых файлов

Все мы часто качаем файлы из интернета, это торренты, фильмы, музыка и т д. И все это со временем накапливается в папке загрузки если ненужное вовремя не удалять, а нужное не перемещать в другие папки. Тогда папка загрузок начинает напоминать огромную свалку где вообще нереально что-то найти. У себя я всегда время от времени сортировал  и удалял файлы, но когда видел такое у знакомых брался за голову. Есть способ упростить очистку папки загрузок.
Утилита find позволяет находить все файлы созданные позже определенной даты и выполнять с ними нужное действие. Все нужные файлы будем вовремя рассортировывать и перемещать по папкам назначения, а все что останутся в загрузках будут через два дня автоматически удаляться. Знание что файлы будут удалены заставит их вовремя переместить куда нужно.
Вот так выглядит сама команда:
$ find /home/user/Downloads/ -type f -mtime +180 -exec ‘rm -f {}’
Если не хотите полностью удалять файлы можно перемещать их в корзину:
$ find /home/user/Downloads/ -type f -mtime +180 -exec ‘mv {} ~/.Trash’
Подробнее о работе find можно почитать тут. Для полной автоматизации добавим выполнение этой команды каждый день в расписание cron:
$ crontab -e
0 0 * * * find /home/user/Downloads/ -type f -mtime +180 -exec ‘rm -f {}’
Теперь давние файлы будут автоматически удаляться каждый день.

Убить все процессы из консоли

Если у вас небольшое количество оперативной памяти на компьютере и вы любите открывать очень много вкладок в Chromium, то программа а вместе с ней и окружение рабочего стола могут прочно зависать. Браузер создает для каждой вкладки отдельный процесс, поэтому пока планировщик памяти ядра поймет кто виноват в сбое и что нужно делать уйдет много времени, а пытаться убить каждую вкладку по отдельности очень долгое занятие. Есть команда с помощью которой можно из терминала одним махом закрыть все вкладки:
$ ps aux | grep chromium | awk ‘{print $2}’ | xargs kill -TERM
Здесь мы получаем список всех процессов в ps, выбираем из них chromium, потом отбираем второй столбец, то есть PID, и с помощью xargs вызываем kill для каждой вкладки. Точно таким же способом можно уничтожить любое приложение создающее много процессов.

Изменить размер картинки

Иногда возникает необходимость изменить размер нескольких картинок. Например вам нужно залить изображения на фалйобменник или сделать превью к постам в социальных сетях. Конечно если картинка одна то можно просто все сделать в графическом редакторе, но если их много намного эффективнее будет использовать терминал. Этой командой мы найдем все файлы jpg и изменим их расширение на 700х500 с помощью утилиты mogrify:
$ mogrify -resize 700х500 *.jpg

Завершение

Вот и подошел к концу наш список. Если вы знаете другие полезные команды, поделитесь ими в комментариях!

Комментариев нет: