Самое для меня вкусное:
1. Обрабатываем текущий директорий по ссылке http://localhost:8000/$ python -m SimpleHTTPServerЭто одностроковая команда запускает веб-сервер на порту 8000 с содержимым текущего каталога на всех интерфейсах (адрес 0.0.0.0), а не только для локального интерфейса localhost. Если у вас есть файл “
index.html” или “
index.htm”, то доступ будет предоставлен к ним, в противном случае в качестве содержимого будет представлено содержимое текущего рабочего каталога.
Эта команда работает, поскольку
python поставляется со стандартным модулем, называемым
SimpleHTTPServer. Аргумент
-m позволяет команде
python искать модуль с названием
SimpleHTTPServer.py везде, где он может быть размещен (указывается в
sys.path и в переменной
$PYTHONPATH). Как только модуль будет найден, он будет выполнен как скрипт. Если вы посмотрите на исходный код этого модуля, вы увидите, что модуль проверяет, запущен ли он как скрипт
(- f __name__ == ‘__main__’), и, если это так, то он запускает метод
test(), который запускает в текущем директории веб сервер.
Для того, чтобы использовать другой порт, укажите его в качестве следующего аргумента:
$ python -m SimpleHTTPServer 8080Эта команда запускает HTTP для всех локальных интерфейсов на порту 8080.
2. Запуск предыдущей команды, но с заменой “foo” на “bar”$ ^foo^bar^Это еще один определитель события. Он предназначен для выполнения быстрой подстановки. Он заменяет foo на bar и повторяет последнюю команду. Это фактически ссылка на
!!:s/foo/bar/. Эта однострочная команда применяет модификатор
s к определителю события
!!. Как уже было рассказано в примере 1, определитель события !! ссылается на предыдущую команду. Теперь с помощью модификатора s задается подстановка (приветствуем sed) и она заменяет первое слово на второе.
Заметьте, что эта одностроковая команда заменяет в предыдущей команде только одно слово. Для замены всех слов добавьте модификатор g (g обозначает “глобальный”).
$ !!:gs/foo/barЭта одностроковая команда также для оболочки Bash, поскольку определители событий являются особенностью Bash.
3. Быстрое создание копий файла$ cp filename{,.bak}Эта одностроковая команда копирует файл с именем
filename в файл с именем
filename.bak. Она работает следующим образом: Команда использует фигурные скобки для создания списка аргументов для команды
cp. Фигурные скобки является механизмом, с помощью которого можно генерировать произвольные строки. В нашем одностроковом примере
filename{,.bak} берется строка
filename, затем берется строка
filename с расширением
.bak, т. е.
filename.bak, и обе строки помещаются на место фигурных скобок. Получается команда
cp filename filename.bak, которая копирует файл.
Рассмотрим подробнее свойства фигурных скобок — с их помощью вы можете выполнять различные комбинаторные задачи. Рассмотрим следующий интересный пример:
$ echo {a,b,c}{a,b,c}{a,b,c}С его помощью генерируются всевозможные трехбуквенные строки из набора
{a, b, c}:
aaa aab aac aba abb abc aca acb acc
baa bab bac bba bbb bbc bca bcb bcc
caa cab cac cba cbb cbc cca ccb cccА ниже показано, как генерировать всевозможные двухбуквенные строки из набора
{a, b, c}:
$ echo {a,b,c}{a,b,c}Будет сгенерировано:
aa ab ac ba bb bc ca cb ccЕсли вам понравились эти примеры, то вам, возможно, понравится моя статья, в которой я описываю действия со множествами (такие, как пересечение, объединение, симметрия, степень множества и т.д.), для выполнения которых используется только командная строка. Статья называется “Операции с множествами в оболочке Шелл в Unix”. А поскольку у меня в оболочке шелл уже есть множества, то вскоре, возможно, напишу статью “Комбинаторика в оболочке шелл” и “Алгебра в оболочке шелл”. Интересная тема для исследования. Возможно, даже напишу статью “Топология в оболочке шелл”. - :)
4. Находим последнюю команду, начинающуюся с “whatever”, но не запускаем ее$ !whatever:pЕще одно использование определителей событий. Определитель события
!whatever ищет в истории команд самую последнюю команду, которая начинаается с
whatever. Но вместо исполнения, команда просто выводится на экран монитора. Модификатор
:p указывает, что нужно выдать команду на экран вместо ее исполнения.
Эта одностроковая команда только для оболочки Bash, поскольку определители событий являются особенностью Bash.
5. Записываем видео с рабочего стола linux$ ffmpeg -f x11grab -s wxga -r 25 -i :0.0 -sameq /tmp/out.mpgПо чистой случайности я так много работаю видео с помощью
ffmpeg, что и без руководства знаю, что делает эта команда.
Обычно
ffmpeg описывают как команду, у которой масса параметров, а последний параметр — выходной файл. В нашем случае этими параметрами являются
-f x11grab -s wxga -r 25 -i :0.0 -sameq, а выходной файл -
/tmp/out.mpg.
Выясним, что означают параметры:
* -f x11grab указывает
ffmpeg использовать в качестве входного формата формат
x11grab. Фреймбуфер X11 имеет специальный формат, в котором представлены данные, и этот параметр позволяет
ffmpeg правильно их декодировать;
* -s wxga указывает
ffmpeg использовать разрешение
wxga, что означает размер изображения
1366×768. Это странное разрешение, я бы записал
-s 800x600;
* -r 25 задает скорость записи в 25 кадров в секунду;
* -i :0.0 указывает, что в качестве входного видеофайла используется X11 дисплей
0.0 данного компьютера;
* -sameq позволяет сохранить исходное качество входного потока. Лучше сохранить качество, а потом выполнить дополнительную обработку.
Вы также можете указать команде
ffmpeg сохранять изображение с другого x-сервера, заменив для этого
-i :0.0 на
-i host:0.0.
6. Создание туннеля между localhost:2001 и некоторая_машина:80$ ssh -N -L2001:localhost:80 somemachineЭта одностроковая команда создает туннель между портом 2001 вашей машины и портом 80 некоторой другой машины. Каждый раз, когда подключаетесь к порту 2001 на вашей машине, ваше соединение будет перенаправлено через туннель на порт 80 некоторой машины.
Параметр
-L имеет формат
-L port:host:hostport. Всякий раз, когда создается соединение к
localhost:port, оно перенаправляется через безопасный канал и соединение осуществляется к
host:hostport удаленного компьютера.
Параметр
-N указывает, что вы не запускаете оболочку, когда подключаетесь к удаленной машине.
Для того, чтобы показать что-нибудь конкретное, приведу другой пример:
$ ssh -f -N -L2001:www.google.com:80 somemachineЭто одностроковая команда создает туннель с порта
2001 вашего компьютера на сайт
www.google.com:80 через некоторый компьютер (
somemachine). Каждый раз, когда вы подключаетесь к
localhost:2001,
ssh туннелирует ваш запрос через машину
somemachine, где она пытается открыть соединение с
www.google.com.
Обратите внимание на дополнительный флаг
-f,
ssh запускается как демон (переходит в фоновый режим), так что терминал использоваться не будет.
7. Выясняем, какая программа какой порт TCP слушает# netstat -tlnpЗдесь все просто.
Netstat является стандартной утилитой, с помощью которой можно получить информацию о сетевой подсистеме Linux. В данной конкретной команде эта утилита вызывается с аргументами
-tlnp:
* -t требует выдавать информацию только о сокетах TCP.
* -l требует выдавать информацию только о прослушиваемых сокетах.
* -n требует не выполнять обратный поиск по IP.
* -p требует выдавать PID и имя программы, которой принадлежит сокет (требуются права
root).
Для того, чтобы получить более подробную информацию, касающуюся сокетов, открытых на вашем компьютере, используйте утилиту
lsof. Например, команда
/usr/sbin/lsof -U -u kosвыдаст данные о всех открытых UNIX-сокетах и всех файлах, принадлежащих процессам, запущенным пользователем “kos”.
А чтобы узнать, какие файлы открыты в том или ином каталоге, служит опция +d команды lsof. Поэтому, чтобы узнать, кем занят диск, дайте команду следующего вида:
[user]$ /usr/sbin/lsof +d /mnt/cdromДля того, чтобы узнать, какие процессы в данный момент прослушивают сетевые соединения, воспользуйтесь командой
lsof с опцией
-i :
[root]# /usr/sbin/lsof -i Поскольку и в этом случае количество информации, выдаваемой командой
lsof с опцией
-i может оказаться очень велико, можно конкретизировать запрос. Для этого нужно использовать команду в следующем формате:
[root]# /usr/sbin/lsof -i adressгде после опции
-i указывается еще параметр – интересующий вас порт, сервис или имя хоста. В общем случае параметр
adress задается в следующем виде (квадратные скобки обозначают необязательность каждой части параметра):
[46][protocol][@hostname|hostaddr][:service|port]Здесь “46” обозначает версию протокола IP. Цифру 6 можно указывать только в том случае, если ваше ядро поддерживает IPv6. Если не указано ни 4, ни 6, будут рассматриваться соединения по тому и другому варианту протокола. Задавать версию протокола можно указывая опцию в форме -i4 -i6 (это то же самое, что и указать просто -i). Если указывается только версия IP-протокола без указания других частей параметра address, отображаются только данные о тех процессах и файлах, которые работают по соответствующему протоколу.
Вместо “
protocol” в параметре может стоять либо
TCP, либо
UDP (либо ничего).
“
hostname” - имя хоста, а “
hostaddr” - числовой адрес. В случае протокола IPv4 эта часть задается в форме десятично-точечной записи, в случае IPv6 – в форме чисел, разделенных двоеточиями и заключенных в скобки.
“
service” - это название одного из сервисов, например,
smtp, или список таких сервисов.
“
port” - это номер порта или список таких номеров.
8. Форматированная выдача списка файловых систем, смонтированных в текущий момент$ mount | column -tЗдесь важно не то, что выдаются файловые системы. Важна команда
column -t. Она принимает входной поток и форматирует его по столбцам так, чтобы столбцы были выравнены по вертикали.
9. Исполнение команды без сохранения ее в истории выполненных команд$ <пробел>командаЭта одностроковая команда работает, по меньшей мере, в bash, я не проверял ее в других оболочках.
10. Изображение первых десяти работающих процессов, отсортированных по объему используемой памяти$ ps aux | sort -nk +4 | tailЭто, конечно, не самый лучший способ изображения первых десяти процессов, которые потребляют максимум памяти, но он работает.
Берется результат
ps aux, который сортируется (
sort) по 4-му столбцу, а затем используется
tail, выдающий последние десять строк, в которых показаны процессы с наибольшим потреблением памяти.
Если я бы захотел узнать, какие процессы потребляют наибольший объем памяти, я бы просто использовал команду
htop или
top, но не
ps.
11.Бонусная одностроковая команда: Запуск сервера SMTPpython -m smtpd -n -c DebuggingServer localhost:1025Эта одностроковая команда запускает сервер
SMTP на порту 1025. Здесь используется стандартная библиотека
smtpd для языка
Python (задается при помощи
-m smtpd) и передаются три аргумента:
-n, -c DebuggingServer и
localhost:1025.
Аргумент
-n указывает
Python-у не устанавливать для
setuid (позволяет изменять пользователя) значение “
nobody” — код будет работать под вашим пользователем.
Аргумент
-c DebuggingServer указывает
Python-у использовать класс
DebuggingServer в качестве реализации
SMTP, которая печатает каждое получаемое сообщение в выходной поток
stdout.
Аргумент
localhost:1025 указывает
Python-у запускать
SMTP сервер как
locahost на порту 1025.
Однако, если вы захотите запустить сервер на стандартном порту 25, вам нужно будет использовать команду
sudo, поскольку только пользователь с правами
root может запускать сервисы на портах 1 — 1024. Они также известны как привилегированные порты.
sudo python -m smtpd -n -c DebuggingServer localhost:25Ссылки:
Новость на OpenNetПервые 10Следующие 10И еще 10lsof