Командная строка

12
Анатолий Денисов
На сайте с 09.06.2007
Offline
48
2285

Предпосылок создания этой темы несколько:

1. Несколько месяцев назад необходимо было проводить сложную отладку, при которой основной упор делался на просмотр серверных логов в динамике. Т.е., грубо говоря, после каждой перезагрузки страницы нужно было смотреть записи в логе. Если бы не команда tail (о которой ниже), затраты времени на открывание/закрывание/открывание/закрывание и т.д. были бы очень большими.

2. Недавно был на конференции REMIX, посвященной новым продуктам Microsoft - в частности, Windows Server 2008. Одним из основных продемонстрированных нововведений была возможность активного использования командной строки. Продемонстрированные вещи для Microsoft действительно можно считать значимым событием, а вот в UNIX-среде многое из этого существует уже давно.

3. Ну и, наконец, сегодня на одном из форумов, посвященных CMS, встретил вопрос о том, какие команды полезны при работе с командной строкой.

В общем, хотелось бы популяризировать эту тему - ИМХО, использование консоли может сильно повысить скорость работы. Особенно, при работе с крупными проектами.

[все примеры использовались для FreeBSD, но многие из них актуальны для всех UNIX-платформ]

find

Поиск файлов и директорий. Пример:

find /home/site.ru/ -name !_test*

(поиск в /home/site.ru/ файлов, название которых начинается на !_test)

egrep

Поиск по содержанию. Пример:

egrep -lur ddddd.xml /home/site.ru/*

Поиск файлов, содержащих ddddd.xml, в /home/site.ru/

tail

Очень полезная вещь при отладке. Выводит в консоль дополнения в файл. Например:

tail -f /home/site.ru/logs/error.log

В режиме реального времени будет выводить новые записи в файле логов.

cat

Выводит содержимое. Пример:

cat /home/site.ru/logs/error.log

Выведет содержимое лога ошибок.

grep

Чаще всего применяется в сочетании с другими командами. "Фильтрует" текст. Например:

tail -f /home/site.ru/logs/error.log | grep Fatal

Будет отображать только те новые записи в логе, которые содержат слово Fatal (например, фатальные ошибки при выполнении PHP-скриптов)

Другой пример:

cat /home/site.ru/logs/error.log | grep Fatal

Выведет все строчки из лога ошибок, содержащие Fatal.

pwgen

Генерация паролей. Например:

pwgen -acn 12

Сгенерирует строку из 12-ти символов вроде такой: thufe4Rueesh

Считаю полезными и потенциально часто используемыми еще несколько команд (для работы с БД, доменами) - если интересно, могу описать.

Уверен, многие из участников этого форума могут дополнить этот список.

ЖЖ (http://anatolydenisov.livejournal.com/), Гос. тендеры (http://tender.cmsmagazine.ru/gos/), стоимость разработки сайтов (http://www.cmsmagazine.ru/creators/price/)
D
На сайте с 14.01.2007
Offline
153
#1
Анатолий Денисов:
Уверен, многие из участников этого форума могут дополнить этот список.

ммммм... а зачем?

Анатолий Денисов
На сайте с 09.06.2007
Offline
48
#2
Dinozavr:
ммммм... а зачем?

Тот список, который я привел, далеко не исчерпывающий. Мне кажется, те, кто прочитают эту ветку, будут, по крайней мере, знать, что можно сделать через командную строку. Возвращаясь с tail. Я, откровенно говоря, даже не думал, что такой функционал существует. И проблему отладки планировал решать так: сделать (найти) софт (скрипт), который будет куда-то выводить то, что мне нужно (новые записи). Я бы его, конечно, нашел (написал), но зачем? Если есть одна команда, которая все это делает штатно (и которую мне подсказал наш системный администратор - а не у каждого он есть :-) ).

DI
На сайте с 03.01.2007
Offline
123
#3

Начали бы тогда уж с команд cd, ls, find, su и вообще с описания того, что такое консоль, как туда попасть и что там можно и нужно делать. А лучше бы вообще не начинали - тот, кому надо, без труда найдет это все через поисковики, а если захочет изобрести велосипед (лично мне бы и в голову не пришло, что в наше время не существуют примитивных функционалов, к тому же, если не первый год работать с nix-системами) - то он сам себе злобный буратино:)

PS: вместо большинства команд многим пользователям подойдет одна - mc.

Анатолий Денисов:
Ну и, наконец, сегодня на одном из форумов, посвященных CMS, встретил вопрос о том, какие команды полезны при работе с командной строкой.

Вопрос из серии "какие запчасти полезны при езде на машине":)

Высказывание идиотского утверждения требует на порядок меньше усилий, чем его последовательное и обоснованное опровержение и более того, иногда это опровержение вообще невозможно. © (http://zhurnal.lib.ru/s/shapiro_m_a/raspidiota.shtml)
Анатолий Денисов
На сайте с 09.06.2007
Offline
48
#4

DenIT,

Что касается поисковиков - подавляющий объем информации, который они выдают, адресован скорее администраторам. Мне же хотелось бы акцентировать внимание именно на том, что полезно для веб-разработчиков.

Однако, согласен, описание действительно началось с конца.

Для использования описанных выше команд нужно, прежде всего, зайти на сервер по SSH. Наиболее часто используемая программа для этого - PuTTY (http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html)

mc

Midnight Commander - почти Norton Commander. Позволяет, в частности, визуально выполнять все операции по работе с файлами (копирование, перемещение и т.д.) - прямо на сервере. Особенно удобно, когда нужно перенести что-то в пределах сервера - не нужно скачивать сначала на свой компьютер, потом обратно.

DI
На сайте с 03.01.2007
Offline
123
#5
Анатолий Денисов:
Что касается поисковиков - подавляющий объем информации, который они выдают, адресован скорее администраторам.

Вообще-то, я практически уверен, что выдаются либо мануалы, либо их расширенная расшифровка. А эта информация не только для администраторов, это для всех, кто собирается пользвоваться командой. Ибо надо понимать, что это за команда и зачем она нужна. И в этих статьях есть примеры типа ваших, только более развернутые.

*nix, к счастью, система не для полных чайников, поэтому хочет человек этого или нет - но основы придется понять, без этого никак.

Анатолий Денисов:
Midnight Commander - почти Norton Commander. Позволяет, в частности, визуально выполнять все операции по работе с файлами (копирование, перемещение и т.д.) - прямо на сервере. Особенно удобно, когда нужно перенести что-то в пределах сервера - не нужно скачивать сначала на свой компьютер, потом обратно.

Анатолий Денисов, ничего личного, но не пытайтесь, пожалуйста, подобными формулировками доносить истину до потенциальных пользователей, а то это больше похоже на оскорбление mc :)

Анатолий Денисов
На сайте с 09.06.2007
Offline
48
#6
DenIT:
ничего личного, но не пытайтесь, пожалуйста, подобными формулировками доносить истину до потенциальных пользователей, а то это больше похоже на оскорбление mc :)

Где в моих сообщениях есть намеки на истину в последней инстанции? :-). Я высказываю свое мнение - как можно использовать командную строку в разработке веб-приложений. И предполагаю, что эта информация будет полезна. По той простой причине, что многие дальше использования FTP-клиента, Блокнота (Notepad++ и т.д.) и phpMyAdmin'а (в качестве средств разработки) не идут - в силу привычки. Я сам с этого начинал - и мне, считаю, повезло, что кружными путями я все-таки пришел к SSH, PuTTY и т.д. - жаль только теперь потерянного когда-то времени на то, что теперь делается одной командой.

[Удален]
#7

частенько использую в своих скрипта нечто

`rm -r * filesgroup/$id`;

так что парни учитесь, командная строка и правда сила :)

ну и я не читал этот пост весь, прочел пару строк. как пример частенько спрашивают как скопировать сайт. напишите скрипт, который мог вы скопировать сайт :)

так вот ответ опять же вам командная строка

`wget -r http://www.yandex.ru`;

удачи :)

Мэкс
На сайте с 03.07.2005
Offline
67
#8

Конечно командная строка - это сила, однако в IBM'овских продуктах ( например Lotus Domino или WebSphere ) этот вопрос давно решен двумя путями:

1. Логи Web сервера пишуться в базу данных, где есть уже масса подготовленных категоризированных видов ( все, по сайтам, по пользователям, по кодам ошибки и.т.д )

2. В Java и Lotus Script есть специальные классы для логирования, и эти логи тоже пишуться в базу данных и просматриваются в реальном времени. Для полного щастья достаточно программисту везде, где он считает нужным, ставить сброс в информации лог, с указанием уровня логирования, и при отладке просто менять уровни логирования. Особенно важно включать эти функции при интеграции системы со сторонними системами, например с 1С или документооборотом. При просмотре таких логов сразу становится ясно на чьей стороне происходит ошибка.

Знание некоторых принципов легко возмещает незнание некоторых фактов. К. Гельвеций
Анатолий Денисов
На сайте с 09.06.2007
Offline
48
#9

Мэкс,

вопрос в том, КАК просматривать эти данные (записи логов). Насколько я понимаю, в указанных Вами продуктах созданы средства для тонкой настройки фиксации событий. Но как в режиме реального времени разработчик может увидеть новые записи, не прилагая доп. усилий (т.е. что бы что-то само ему их показало)?

Мэкс
На сайте с 03.07.2005
Offline
67
#10
Анатолий Денисов:
Но как в режиме реального времени разработчик может увидеть новые записи, не прилагая доп. усилий (т.е. что бы что-то само ему их показало)?

Да без проблем...

Конкретно в Lotus Domino можно установить в базе данных логов опцию autorefresh в ON и видеть в выбранном, или специально построенном разработчиком виде все изменения в реальном времени.

Там же есть даже отладчик, который позволяет гнать скрипт на сервере в пошаговом режиме или останавливаться на брейках. Про такой же отладчик на WebSphere не знаю, но вполне вероятно, что тоже есть.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий