ПОРТАЛ ПРОГРАММИСТОВ
Полезные консольные команды в Linux


Смонтировать сетевой каталог Windows (в окне запуска Alt+F2):
smb://xxx.yyy.zzz.www/folder_name
где xxx.yyy.zzz.www – IP-адрес узла.

Вычленить звуковую дорожку из видео при помощи MPlayer:
$ mplayer -vc null -vo null -ao pcm -benchmark video.avi

Раскодировать сжатый звук в WAV при помощи MPlayer:
$ mplayer -ao pcm music.mp3

Сконвертировать все изображения JPG в текущем каталоге в формат PNG, используя ImageMagick:
$ mogrify -format jpg *.png

Разбить большой видеофайл в формате MKV на части по 700 Мб:
$ mkvmerge --split size:700m -o myfile.mkv

Найти текст рекурсивно во всех файлах указанного расширения в текущем каталоге:
$ grep -i -r "SomeText" ./*.d

Для скачивания больших файлов программа wget – поддерживает докачку в любое время, если запустить ее с параметром -c:
$ wget -c http://some.url

Также можно указать имя сохраняемого файла:
$ wget --output-document=file.name http://some.url

Вывести список папок в текущем каталоге:
$ ls -p | grep "/"

Рекурсивно сравнить все файлы в двух каталогах (полезно для отслеживания изменений в исходниках):
$ diff -bur dir1/ dir2/

Создать символьную ссылку на файл:
$ ln -s /destination/file linkToFile

Найти и заменить все слова "Foo" на "Bar" в текстовом файле:
$ sed "s/Foo/Bar/g" list.txt > list2.txt

Вывести список всех блочных устройств (жестких дисков, флеш-накопителей и др.):
$ sudo fdisk -l

Показать версию ядра:
$ uname -r

Скрипт для группового переименования расширений файлов:
#!/bin/sh
n=0;
for i in *; do
j=$n".jpg";
mv $i $j;
let n++;
done

Создание сайта для проекта на GitHub:
$ git clone https://github.com/user/repository.git
$ cd repository
$ git checkout --orphan gh-pages
$ git rm -rf .
$ git add index.html
$ git commit -a -m "First pages commit"
$ git push origin gh-pages

Команда для подсчета строк кода в C-подобном языке с пропуском однострочных и многострочных комментариев (годится для C, C++, D, Java, C#, JavaScript и т. д.):
$ find . -type f -name '*.cpp' -exec cat {} \; | sed '/^\s*#/d;/^\s*$/d;/^\s*\/\//d' | sed '/^\/\*/,/\*\//d' | wc -l

Групповое изменение размера изображений:
$ mogrify -resize 1459x1094! *.jpg

То же самое, но с сохранением соотношения сторон:
$ mogrify -resize 1459x1094 *.jpg

Сжать видео с камеры для веба:
$ ffmpeg -i INPUT.MPG -s 640x360 -b 640k -ab 192k -vcodec mpeg2video -acodec mp2 OUTPUT.MPG

Собрать последовательность кадров в единый видеоролик:
$ ffmpeg -i frame%04d.png -vcodec huffyuv test.avi
или
$ ffmpeg -i frame%04d.png -vcodec mjpeg -sameq test.avi

Смонтировать/размонтировать флешку с файловой системой NTFS (предварительно узнав ее обозначение при помощи dmesg):
$ dmesg
$ sudo mount -t ntfs-3g /dev/sdc1 /media/NTFSDISK -o force
$ sudo umount /media/NTFSDISK

Узнать информацию о CD/DVD-приводе:
$ dmesg | egrep -i --color 'cdrom|dvd|cd/rw|writer'

...и о том, какие диски он умеет читать и записывать:
$ more /proc/sys/dev/cdrom/info

Сконверировать в PDF сразу множество документов при помощи LibreOffice:
$ libreoffice3.4 --headless -convert-to pdf:writer_pdf_Export -outdir ~/outdir ~/inputdir/*.odt

Shell-скрипт, компилирующий все исходники на C в текущем каталоге без Make-файла (сборка инкрементальная – т. е., каждый раз компилируются только те исходники, которые были изменены с момента предыдущего цикла сборки):
#!/bin/sh
CC="gcc"
CFLAGS="-I../include"
LFLAGS="-shared"
TARGET="libjewelscript.so"
for file in ./*.c; do
local src=$(basename $file)
local obj=${file%%.*}.o
if test $src -nt $obj; then
echo "CC $src > $obj";
$CC $CFLAGS -c -o $obj $src || { exit 1; }
fi
done
objects=$(ls -dm *.o | tr ',' ' ')
echo "CC *.o > $TARGET";
$CC $LFLAGS -o $TARGET $objects || { exit 1; }

Shell-скрипт, разыменовывающий все символьные ссылки в текущем каталоге:
#!/bin/sh
for file in ./*.h; do
if [ -h "$file" ]; then
echo "unlinking $file...";
cp --remove-destination `readlink $file` $file
fi
done

Узнать максимальное количество аргументов, которое можно передать программе:
$ getconf ARG_MAX

Работаем с Git и репозиторием на GitHub:
1. Создаем ключ аутентификации SSH:
$ ssh-keygen -t rsa -C "your_email@youremail.com"
2. Добавляем содержимое файла ~/.ssh/id_rsa.pub в список ключей на вашем аккаунте на GitHub (Settings > SSH Keys > Add SSH key) .
3. Загружаем локальную рабочую копию репозитория по зашифрованному соединению:
$ git clone git@github.com:username/repository.git
4. Создаем/удаляем файлы, вносим изменения, а затем:
$ git rm old.file
$ git add new.file
$ git commit -m "Made some changes"
$ git push origin master

Как запихнуть двоичные данные в CSS – для этого используется кодирование Base64:
$ base64 -w 0 inputFilename > outputFilename

Календарь на текущий месяц:
$ cal

Как сконвертировать много RAW-фотографий из камеры Sony? Это можно сделать при помощи программы dcraw:
$ dcraw DSC01269.ARW

Любой линуксоид регулярно использует команду ls, выводящую список файлов в текущем каталоге. А вот как заставить ее показывать скрытые файлы (это те, что с точкой в начале) – знает, наверное, не каждый:
$ ls -a

Очень часто приходится удалять с диска однотипные файлы. Ни в коем случае не тратьте свое время, не делайте это вручную – у вас же есть всемогущий find! Вот пример использования этой команды для рекурсивного удаления файлов *.pyc в текущем каталоге:
$ find . -name "*.pyc" -exec rm -rf {} \;
Напоминаю, что find также можно использовать для того, о чем говорит его название – для поиска файлов:
$ find ./ -name filename

Вот этот bash скрипт выполняет узкоспециализированную, но необычайно полезную задачу – ищет заданный текст в ODT-файлах. Eсли нужно найти документ с определенным известным текстом:
#!/bin/bash
if [ $# -ne 2 ]; then
echo "Usage: search searchpath searchterm"
exit 1
fi
find $1 -name "*.odt" | while read file
do
unzip -ca "$file" content.xml | grep -qli "$2"
if [ $? -eq 0 ]; then
echo "Found keyword in: " $file
fi
done

Забыли, что делали час назад? Не беда – вам поможет утилита history, которая выводит историю введеных вами консольных команд:
$ history

Чтобы узнать идентификатор производителя вашего Линукса, номер версии и её кодовое имя, введите команду:
$ lsb_release -ircs
В ответ на эту команду в консоль поступит примерно следующее:
Ubuntu 12.04 precise

Чтобы узнать класс вашего компьютера, выполните команду
$ arch
В ответ вы получите что-то вроде
i686

Чтобы узнать разрядность вашего Линукса, наберите в консоли
$ getconf LONG_BIT
Ответом будет 32 или 64.

Допустим, вы из некоего директория с помощью команды cd перешли в какой-то другой директорий, неважно какой. Чтобы вернуться в исходный директорий, выполните команду
$ cd -

Если вы хотите вывести в консоль только список директориев внутри текущего директория, выполните команду
$ ls -d */

Расшаренные папки будут выделены цветом. Вместо команды ls можно использовать команду l. При этом имена директориев, выведенных на экран, будут заканчиваться слэшем. Удобно.

Как вы проверяете работу вашего Интернет-подключения к сайту? Конечно, можно пинговать сайт или запустить команду traceroute (её, скорее всего, вам придётся установить), но проще запустить команду mtr, например:
$ mtr anysite.com
Целевой сайт будет трассироваться до тех пор, пока не нажмёте Ctrl+С. Думаю, с выводимой динамической таблицей вы сумеете разобраться.

Чтобы посмотреть, какие приложения вашего компьютера в данный момент используют Интернет, выполните команду
$ lsof -P -i -n
Возможно, вы будете удивлены.

Если желаете узнать, с какими удалёнными IP-адресами и через какие порты работают приложения вашего компьютера, использующие Интернет, выполните команду
$ ss -p

Чтобы узнать свой публичный IP-адрес, вовсе не обязательно запускать браузер и заходить на сайт 2ip.ru. Достаточно в консоли выполнить команду
$ curl ifconfig.me
Через несколько секунд в консоль будет выведен ваш IP-адрес.

Вы, конечно же, в свою систему установили пакет ubuntu-restricted-extras, содержащий проприетарные плагины, кодеки и прочий интересный софт, недоступный под свободной лицензией. :) Однако, обновляя систему с помощью штатного менеджера, вы вряд ли обновите что-либо, принадлежащее этому пакету. Не проблема, выполните в эмуляторе терминала вот такую команду:
$ sudo apt-get upgrade ubuntu-restricted-extras
Затем по завершению обновления перезагрузитесь.

Через фреймбуфер можно в Сети и без браузера смотреть всякую всячину, и возможно, вы не захотите, чтобы некто с помощью команды history мог установить, чем вы занимались в консоли. Нет ничего проще. Чтобы консольная команда не попала в историю, перед вводом команды нажмите пробел. Впрочем, из истории можно удалить любую ранее выполненную команду. Например, вот так удаляется команда с номером 2000:
$ history -d 2000

Существует много способов создать пустой файл. Самый простой:
$ > file_name
Пробел перед именем файла обязателен! Кстати, этой же командой можно очистить существующий файл с указанным именем. Поэтому пользуйтесь осторожно.

Допустим, вы в консоли выполнили команду, которая вам понравилась, и вы собираетесь её увековечить, записав эту команду в текстовый файл. Можно, конечно, вызвать историю, выделить и скопировать приглянувшуюся команду в буфер, затем, вызвав редактор, скопировать эту команду в его буфер и затем записать в файл. Но есть способ проще. Выполняем команду
$ fc
Вызывается консольный редактор nano и в буфер редактирования автоматически помещается последняя выполненная консольная команда. Остаётся только записать её в файл.

Чтобы узнать аски-код любой клавиши с учётом используемой таблицы, выполните команду
$ showkey -a
Нажимайте клавиши, переключайте регистры и смотрите коды. Чтобы выйти из команды, нажмите Ctrl+D.

Хотите раскрасить, нет, не консоль, а унылые инструкции, выводимые командой man? Тогда выполните вот эти две команды:
$ sudo apt-get install most
$ sudo update-alternatives --set pager /usr/bin/most