Показаны сообщения с ярлыком Команды. Показать все сообщения
Показаны сообщения с ярлыком Команды. Показать все сообщения

вторник, 6 октября 2009 г.

Команды с рабочего стола!

Так иногда надо вспомнить какую-то консольную программу, а лезть в собственные заметки и перерывать их ломит.... А тут надыбал не столько прикольные, сколько полезные обои. Все просто - на них записаны основные команды! Рекомендую!


От лучика Eli Janssen

Если вы думаете, что правильно сфотографировать диван, ноутбук или колье очень легко, то вы ошибаетесь. Профессиональная предметная фотосъемка призвана показать объект в наилучшем ракурсе и в самом выигрышном освещении.

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

вторник, 1 сентября 2009 г.

Что означают фигурные скобки в командной строке?

Авторы: Алексей Дмитриев, Даник Лейбович, июль-август 2009

Фигурные скобки {по-английски - brace} это один из условных знаков, помогающих сократить количество писанины в командной строке.

Формально они входят в число семи expansions (расширение, раскрытие), применяемых в командной строке шелла bash.

Что это за расширения такие? По-русски их лучше всего назвать сокращениями, как это ни странно. Смотрите сами: всем известная тильда (~), будучи напечатана в командной строке, раскроется в путь к нашему домашнему каталогу:

$ ls ~

bookmarks1.html dos Pictures
cv.avi Gnome-ppp RPM
Desktop hasher Tanya
Documents tmp

Вот и выходит, что тильда является сокращением адреса /home/имя_пользователя.

Из всех семи сокращений bash, данная статья будет посвящена только фигурным скобкам.

Раскрытие фигурных скобок

Допустим, что нам нужно создать для фотоальбома двенадцать каталогов (по числу месяцев) 2009 года. Мы можем поступить так:
$ mkdir фото_01_2009 фото_02_2009 ... фото_12_2009

(вместо троеточия впишем имена всех промежуточных каталогов).

А можем привлечь на помощь сокращение - фигурные скобки:

$ mkdir фото_{01,02,03,04,05,06,07,08,09,10,11,12}_2009

Проделайте этот опыт и сами убедитесь, что в рабочей директории появилось 12 новых каталогов. Чтобы они нам в дальнейшем не мешали, удалим их:

$ rm -R фото_{01,02,03,04,05,06,07,08,09,10,11,12}_2009

Проверьте - их больше нет.

Однако интуиция подсказывает, что должен существовать и более короткий путь, и этот путь, конечно, есть:

$ mkdir фото_{01..12}_2009

А для более сложных сочетаний даже:

$ mkdir фото_{{01..05},07,{09..12}}_2009

Это, сами понимаете, для выборочного создания директорий.

Чтобы закончить с этим примером, отметим, что в выражении фото_{01,02,03,04,05,06,07,08,09,10,11,12}_2009, часть выражения фото_ будет называться префиксом (а по-нашему - приставкой), а _2009 называется суффиксом (или окончанием).

Вот еще пример применения фигурных скобок:

Нужно изменить права доступа к нескольким файлам: old, current и new, находящимся в одной директории:

$ chmod u+x /путь_к_директории/{old,current,new}

Мы применили фигурные скобки, чтобы не писать имена и пути (path) всех трех файлов полностью.

Осторожно, скобки раскрываются

Существует несколько правил, которые соблюдаются при раскрывании фигурных скобок:

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

Например, мы можем создать файлы пес.txt и кот.txt командой:

$ touch {пес.txt,кот.txt}

И они будут благополучно созданы.

$ ls

кот.txt
пес.txt

Но, стоит внутрь фигурных скобок проникнуть пробелу, как начнется нечто несуразное:

$ touch {пес.txt ,кот.txt}

Проверим, что вышло:

$ ls

{пес.txt
,кот.txt}

Мы получили два файла, но с совершенно невообразимыми именами!

Правило 2. При раскрытии фигурных скобок никакой сортировки объектов не происходит, и они интерпретируются в том же порядке, в каком указаны внутри фигурных скобок.

Имеется в виду, конечно, не сортировка файлов в алфавитном или ином порядке; команда ls, при помощи которой мы просматриваем содержимое директорий, автоматически сортирует файлы по алфавиту. Также поступает и любой менеджер файлов, захоти мы просмотреть рабочую директория в графическом интерфейсе. Например, команда touch создает файлы в алфавитном порядке, независимо от того, как мы разместим их в фигурных скобках:

$ touch file{d,c,b}.txt

Посмотрим:

$ ls

fileb.txt filec.txt filed.txt

Отключим сортировку в команде ls:

$ ls -U

fileb.txt filec.txt filed.txt

Все равно, файлы создаются в том же порядке.

Правило 2 говорит о другой сортировке - о том, что при раскрытии фигурных скобок, действия над объектами выполняются в том же порядке, в каком они записаны внутри фигурных скобок, и считывание происходит, как и положено, слева направо (в порядке чтения). Вот пример:

$ echo {о,антре,с,}кот
окот антрекот скот кот

Порядок подстановки сохранен, и получившиеся слова сохраняют порядок, в котором их части находились внутри фигурных скобок.

Есть случаи, когда это свойство фигурных скобок приобретает важное значение. Скажем, мы решили отредактировать файл /etc/X11/xorg.conf. Перед этим обычно создают его резервную копию. Мы воспользуемся для этого фигурными скобками.

Только пойдем на подстраховку - чтобы не проводить обучение с реальным файлом /etc/X11/xorg.conf, что может закончиться печально, мы создадим в домашней директории папку Опыт:

$ mkdir Опыт

и сразу перейдем в нее:

$ cd Опыт

Проверим, все ли в порядке:

$ pwd
/home/ya/Desktop/Опыт

Теперь, в этой папке, мы можем создавать, изменять и уничтожать любые файлы, и ничего нам за это не будет.

Итак, создадим файл xorg.conf:

[Опыт]$ touch xorg.conf

Проверим:

[Опыт]$ ls

xorg.conf

Теперь создадим его резервную копию, применяя фигурные скобки:

[Опыт]$ cp xorg.conf{,.bak}

Проверим:

[Опыт]$ ls
xorg.conf xorg.conf.bak

Допустим, наши изменения в файле xorg.conf были неудачны, и мы решили вернуть на его место сохраненную копию. Для этого мы можем применить почти ту же команду, что и для резервного копирования, изменив только последовательность выражений в фигурных скобках:

[Опыт]$ cp xorg.conf{.bak,}
cp: переписать `xorg.conf'? Y

Команда cp запрашивает подтверждения, мы нажимаем ENTER, и дело сделано: файл xorg.conf переписан файлом xorg.conf.bak.

Нужно только не забывать, что шелл интерпретирует команду:

$ cp xorg.conf{.bak,}

как

$ cp xorg.conf.bak xorg.conf.

Поэтому порядок объектов внутри фигурных скобок чрезвычайно важен.

Правило 3. При раскрытии фигурных скобок шелл рассматривает все символы внутри фигурных скобок как простые символы, а не как метасимволы или символы регулярных выражений.

Поэтому, хотя команда

$ rm file*

Удалит из текущей директории все файлы типа file1, file2, fileN, file_file и подобные,

но команда :

$ rm ./file{*,1}

удалит только два файла file* и file1, то есть астериск (*) будет интерпретирован как простая звездочка.

Правило 4. Если нужно поместить внутри фигурных скобок выражения, содержащие фигурные скобки, или запятые, то необходимо экранировать эти символы обратным слэшем (/), а если нужно ввести сам обратный слэш, то его экранируют вторым обратным слэшем:

$ echo Например:{comma-\,,brace-\{,backslash-\\}

Например:comma-, Например:brace-{ Например:backslash-\

Данная статья, как явствует из ее названия, посвящена только применению фигурных скобок в командной строке bash. Они применяются также в скриптах bash, но эта тема далеко выходит за рамки нашего сегодняшнего рассмотрения.

Резюме

Фигурные скобки, если научиться ими грамотно пользоваться, могут здорово помочь при работе в командной строке.


Работа в командной строке, это искуство, сродни живописи. Посетив сайт художника и увидев его работы, видишь как он вкладывал свои мысль и душу.

среда, 17 июня 2009 г.

Рекурсивные операции с файлами в Linux

Оригинал

Автор

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

Эпиграф

— Это новый “Гарри Поттер”. Я заказал версии для детей и взрослых, чтобы проверить, что в тексте нет различий.
Морис Мосс, The IT Crowd.

chmod

Неправильно:

chmod -r 755 dir

Ключ -r у chmod интерпретируется как “запретить всем чтение файла”, а 755 в данном случае рассматривается как название файла, у которого изменяются права. Поскольку в подавляющем большинстве случаев файла с таким названием в текущей директории отсутствует, то команда возвращает ошибку.

Правильно:

chmod -R 755 dir

chown, chattr, chgrp

Неправильно:

chown -r user:group dir
chattr -r dir +I
chgrp -r group dir

У вышеперечисленных команд опция -r просто отсутствует. Для рекурсивной обработки директорий необходимо использовать опцию -R. Очевидно, так сделано из солидарности с “братской” командой chmod

Правильно:

chown -R user:group dir. .
chgrp -R group dir
chattr -R dir # только Linux, только для ext2/ext3

cp

Неправильно:

cp -r dir destdir

Правильно:

cp -R dir destdir

Несмотря на то, что в странице документации cp из GNU coreutils сказано, что опции -r и -R равнозначны и означают рекурсивную обработку встречающихся директорий, опция -r, в отличие от -R, не соответствует стандарту POSIX и ее указание может повлечь за собой неожиданные последствия в случае, если очередной копируемый объект является чем-то отличным от обычного файла или директории (например, символической ссылкой, fifo или сокетом). В таких случаях некоторые реализации cp просто копируют содержимое ссылки/fifo, тогда как при -R такие объекты пересоздаются заново. Раньше такое поведение было присуще GNU cp, о чем до сих пор имеется свидетельство в русском man cp. Что касается более правильных (чем Linux) систем, то, например, в BSD-версии cp опция -r работает в “режиме совместимости”, т.е. не создает символическую ссылку заново, а копирует содержимое в файл с тем же именем.

ls

Неправильно:

ls -r

Ключ -r команды ls означает “обратный порядок сортировки”
Правильно:

ls -R

rm, grep

Зато в следующих случаях употребление -r/-R равнозначно:

rm -r dir
rm -R dir

а также

grep -r pattern dir
grep -R pattern dir

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

Прочие команды

Поскольку команд, в том или ином виде поддерживающих рекурсивную обработку каталогов, набралось довольно много, то я попробовал свести их в одну таблицу.

команда -r -R
chacl рекурсия удаление ACL только с файлов
setfacl не поддерживается рекурсия
cvs номер ревизии рекурсия
diff рекурсия не поддерживается
gzip/gunzip рекурсия не поддерживается
zip рекурсия рекурсия, начиная с текущей директории (см. man zip, там есть существенная разница в обработке -r и -R)
rsync рекурсия использование относительных путей
wget рекурсия указывает список отвергаемых шаблонов

Заключение

Как видно, в большинстве случаев для указания рекурсии используется опция -r в нижнем регистре, в противовес стандартным утилитам, для которых характерно все же -R. Поэтому совет один: в случае сомнения смотрите в man, там все написано :)

Постскриптум

По абзацу про cp видно, что русская документация в некоторых дистрибутивах (не будем показывать пальцем на Debian и Ubuntu) не соответствует реальному положению дел. В частности, несмотря на то, что в jaunty используется GNU coreutis 6.10, русский man описывает cp версии 4.1. Желающие могут самостоятельно сравнить свою версию man 1 cp с локализованной. Другими словами, русская страница документации cp в силу своей древности вводит пользователя в заблуждение, т.е. врёт. По этой причине я рекомендую сделать apt-get remove manpages-ru.


Говорят, что для женщины самый важный день в жизни это свадьба. Естественно, что она хочет выглядеть ослепительно. Но свадебные наряды стоят огромных денег. Но есть сайт, где можно найти недорогие платья свадебные с фото, и выбрать подходящий наряд.

пятница, 10 апреля 2009 г.

Собрание лучших шпаргалок по Linux

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

Для начинающих, “продолжающих” и опытных пользователей предлагаю неплохую подборку шпаргалок по различным аспектам работы в . Все мануалы оригинальные (в смысле, не испорченные переводом на русский ;-) ). Итак:

Для начинающих, “продолжающих” и опытных пользователей предлагаю неплохую подборку шпаргалок по различным аспектам работы в . Все мануалы оригинальные (в смысле, не испорченные переводом на русский ;-) ). Итак:

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

Безопасность

Администрирование

Gnome/

/awk/vim и прочие утилиты

По дистрибутивам

Прочее

  • Online Man Pages - The ultimate cheat sheet repository. Also use the ‘man‘ command.

Источник -All the Best Linux Cheat Sheets.

Возможно, вас заинтересует:

  1. Тема Gmail для Linux-гиков Сегодня на Gmail появилась новая фишка: темы. И не сказать,...
  2. Ещё про авто под Linux В развитие моей недавней темы автомобиля и Linux — довольно...
  3. linux-2.6.25.10 — новость одной строкой cd /usr/src && wget ftp://ftp.kernel.org/pub/linux/kernel/v2.6/incr/patch-2.6.25.9-10.bz2 && cd linux && bzcat...
  4. 30 Linux login-экранов Сегодня можно посмотреть своеобразный хит-парад, состоящий из 30 красивых экранов...
  5. Топ-25 игрушек под Linux Нашёл весьма приличное обозрение игр под Linux. Сам я играми...
Собрание лучших шпаргалок по Linux | FlyCat.Info: КОТорый летает...

воскресенье, 1 марта 2009 г.

HuMan: diff

Виртуальная энциклопедия "Linux по-русски": новости, статьи, ссылки на материалы по операционной системе GNU/Linux.

Алексей Дмитриев, 24 февраля 2009

Команда diff служит для выявления различий между двумя файлами или всеми соответствующими файлами в двух директориях. Понятно, что применять команду имеет смысл только в случаях, когда исследуемые файлы или директории весьма схожи по содержанию.

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

Команда diff без опций

Команда diff имеет мудреный вывод, чтобы разобраться с ним, составим два файла: cot.txt и cot2.txt:

$ cat cot.txt                 $ cat cot2.txt  кот                           кот собака                        крыса ящерица                       собака                               ящерица 

И запустим команду:

$ diff cot.txt cot2.txt 1a2 > крыса 

Попробуем разобраться с выводом команды. Выражение " > крыса" явно означает, что в правом (т.е. втором) файле есть лишнее слово: "крыса". Сложнее расшифровать выражение 1a2. Поскольку "крыса" вторая строка второго файла, то логично предположить, что цифра 2 означает номер строки, различной в сравниваемых файлах. Проверим предположение, поместив "крысу" на 4 строку:

$ diff cot.txt cot2.txt 3a4 > крыса 

Так и есть, отличается 4 строка второго файла. Появились и мысли насчет первой цифры, а также буквы "a".

Я понял это так:

1. Если считать эталонным первый файл, то 3 означает строку первого файла, после которой добавлена строка "крыса", являющаяся 4 строкой второго файла. Буква "a", по-видимому, означает первую букву в английском слове "added" (добавлено).

Или по-другому:

2. Если считать эталонным второй файл, то команда diff подсказывает, что надо сделать, дабы превратить первый файл во второй. Надо после третьей строки первого файла добавить (add) четвертую строку второго файла. Тогда файлы станут одинаковыми по содержанию.

Посмотрим, что произойдет, если мы поменяем сравниваемые файлы местами - первым поставим больший файл cot2.txt, а вторым меньший cot.txt:

$ diff cot2.txt cot.txt 4d3 > крыса 

Номера строк поменялись зеркально, что не удивительно, так как аналогично поменялось и расположение сравниваемых файлов. А вот буква "a" сменилась буквой "d". Рискнем предположить, что это первая буква слова "delete" - удалить. Итак, если удалить четвертую строку первого файла, то файлы станут одинаковыми. Цифра три в правой части выражения 4d3, вероятно, показывает, после какой строки второго файла следует различие в тексте файлов.

Осталось рассмотреть случай, когда в сравниваемых файлах одинаковое число строк. Давайте слегка изменим файл cot2.txt, заменив слово "собака" на выражение "собака серая", а "крысу" уберем совсем. Теперь в обоих файлах по три строки.

$ diff cot.txt cot2.txt 2c2 < собака --- > собака серая 

Программа указывает на разницу во вторых строках файлов. А букву "с" осмелюсь интерпретировать как первую букву слова "change" (заменить). То есть команда подсказывает, что если заменить вторую строку первого файла (cot.txt) на вторую строку второго файла (cot2.txt), то файлы станут одинаковыми.

Поменяем файлы местами:

$ diff cot2.txt cot.txt 2c2 < собака серая --- > собака 

Как видите, ничего не изменилось, только теперь следует заменить вторую строку файла cot2.txt на вторую строку файла cot.txt.

Появляются некоторые общие соображения:

1. Команда diff не считает какой-либо из файлов эталонным.

2. Команда diff дает подсказку, как сделать файлы одинаковыми.

3. Если вы хотите унифицировать файлы в сторону увеличения, то первым ставьте мЕньший файл.

4. Если вы хотите унифицировать файлы в сторону уменьшения, то первым ставьте бОльший файл.

5.Величина файла измеряется в количестве строк, а не в количестве байт. Если количество строк совпадает, то критерием служит количество слов; если оно совпадает, в дело идут символы.

(Узнать параметры файла можно при помощи команды wc).

Опция -с: Контекстный формат

-C число_строк --context=число_строк

При сравнении файлов зачастую нужно видеть не только различающиеся строки, но и соседние с ними, как "сверху", так и "снизу". Эти дополнительные строки называются контекстом. Опция -с позволяет видеть желательное число строк контекста. Если число_строк не указано, то, по умолчанию, показывается по три строки контекста до и после отличающейся строки. Поэтому нам придется увеличить число строк в наших образцовых файлах:

$ diff -c cot.txt cot2.txt                   *** cot.txt     2009-02-16 20:20:58.000000000 +0300  --- cot2.txt    2009-02-16 20:20:56.000000000 +0300 *************** *** 2,8 ****   собака   ящерица   белка ! зубр   попугай   рыба   змея --- 2,8 ----   собака   ящерица   белка ! бизон   попугай   рыба   змея 

Как видите, этот формат тоже требует разъяснения. Очевидно, что в заголовке указаны сравниваемые файлы, показано, какими условными знаками (звездочками или черточками) будут помечаться относящиеся к ним строки вывода; затем указано время модификации файла (похоже, что с точностью до наносекунды!). А вот что такое +0300, не берусь сказать, может быть выяснится по ходу дальнейших исследований.

Далее следует, так сказать, "тело" вывода. Среди соответствующих условных обозначений (звездочек и черточек) указаны интервалы приведенных строк через запятую (***2,8***), а знаком восклицания помечена строка, не совпадающая в сравниваемых файлах.

Добавим строку "крыса" в конец файла cot2.txt:

$ diff -C 1 cot.txt cot2.txt *** cot.txt     2009-02-16 20:20:58.000000000 +0300 --- cot2.txt    2009-02-16 22:37:11.000000000 +0300 *************** *** 4,6 ****   белка ! зубр   попугай --- 4,6 ----   белка ! бизон   попугай *************** *** 8 **** --- 8,9 ----   змея + крыса 

Из вывода можно понять, что во втором файле добавилась строка "крыса", но не хотел бы я разбираться с различиями многостраничных файлов, где строки состоят не из одного слова, а из настоящих предложений!

Давайте уберем первую строку первого файла "кот", и, заодно, уменьшим число строк контекста до 0:

$ diff -C 0 cot.txt cot2.txt *** cot.txt     2009-02-16 22:46:29.000000000 +0300 --- cot2.txt    2009-02-16 22:37:11.000000000 +0300 *************** *** 0 **** --- 1 ---- + кот *************** *** 4 **** ! зубр --- 5 ---- ! бизон *************** *** 7 **** --- 9 ---- + крыса 

Здорово! Получилось, что мы не убрали кота из первого файла, а добавили во второй! Явно здесь первый файл служит эталоном. Чтобы убедиться в этом, восстановим кота в первом файле и уберем во втором:

$ diff -C 0 cot.txt cot2.txt *** cot.txt     2009-02-16 22:50:36.000000000 +0300 --- cot2.txt    2009-02-16 22:50:44.000000000 +0300 *************** *** 1 **** - кот --- 0 ---- *************** *** 5 **** ! зубр --- 4 ---- ! бизон *************** *** 8 **** --- 8 ---- + крыса 

Ну и ну! Нет, эталоном здесь и пахнет. Чтобы понять этот вывод, нужно сильно напрячься. В первом файле, где "кот" есть, почему-то значится "- кот". Вероятно, нужно убрать кота, чтобы строки стали одинаковы. Но почему же тогда на восьмой строке второго файла, где живет "крыса", значится "+ крыса"? В конце концов, я нашел такое объяснение:

'!'   Строка, не совпадающая в двух файлах.  '+'  Строка, которой нет соответствия в первом файле.  '-'    Строка, которой нет соответствия во втором файле. 

Да-а, к этому формату нужно привыкнуть. Впрочем, есть еще унифицированный формат.

Опция --u: Унифицированный формат

-U число_строк --unified=число_строк

Унифицированный формат по умолчанию не выводит строк контекста:

$ diff -u cot.txt cot2.txt --- cot.txt     2009-02-16 22:50:36.000000000 +0300 +++ cot2.txt    2009-02-16 22:50:44.000000000 +0300 @@ -1,8 +1,8 @@ -кот  собака  ящерица  белка -зубр +бизон  попугай  рыба  змея +крыса 

Присмотревшись и вдумавшись, можно понять следующее:

1. В заголовке сказано, что минусами помечены строки из первого файла, а плюсами - из второго.

2. Формат даты такой же, как у контекстного формата.

3. Диапазоны строк указаны для обоих файлов и отмечены знаками двойной "собаки".

4. Слова, общие для двух файлов ничем не отмечены (или, если хотите, отмечены пробелом).

5. Знаком минус помечены строки, которые есть только в первом файле, как бы изъятые из первого файла, если считать его эталонным.

6. Знаком плюс помечены строки, которых нет в первом файле, как бы добавленные к нему.

Не знаю как вам, но мне этот формат кажется наиболее понятным.

Используя опцию -U число_строк (--unified=число_строк), можно просматривать нужное число строк контекста. Я этого делать не стану, так как мои примерные файлы слишком короткие для этого. Проделайте этот опыт самостоятельно с файлами подлиннее.

Опция -y или --side-by-side (бок-о-бок) Сравнительный формат

Этот формат команды diff выдает две колонки текста, что наиболее наглядно. По умолчанию длина строки 130 символов, что хорошо для длинных строк, для статьи же неудобно. Поэтому я сразу применю опцию -W 25, которая задаст ширину колонки в 25 символов.

$ diff -y -W 25 cot.txt cot2.txt  кот         < собака          собака ящерица         ящерица белка           белка зубр        |   бизон попугай         попугай рыба            рыба змея            змея             >   крыса 

Между двумя колонками текста находится узкая колонка условных обозначений. Эти обозначения могут быть следующими:

Пробел Соответствующие строки эквивалентны. Это означает, что либо они одинаковые, либо различие игнорировано из-за одной из опций '--ignore' .

'|' Соответствующие строки разные, и либо обе приведены полностью, либо обе не полностью.

'\' Соответствующие строки разные, первая строка приведена не полностью.

'/ ' Соответствующие строки разные, вторая строка приведена не полностью.

'<' Строка содержится только в первом файле.

'>' Строка содержится только во втором файле.

'(' Строка содержится только в первом файле, но различие игнорируется.

')' Строка содержится только вo втором файле, но различие игнорируется.

У опции -y есть, в свою очередь, несколько опций (или под-опций)

--left-column (левая колонка)

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

$ diff -y -W25 --left-column cot.txt cot2.txt кот           <        собака        (  ящерица       (        белка         (              зубр          |   бизон                       попугай       (                   рыба          (                       змея          (               >   крыса 

По-моему, все кристально ясно, может быть, я начинаю привыкать к этой команде?

Заметим в скобках, что опции --right-column (правая колонка) не существует.

--suppress-common-lines

Подавляет вывод строк, совпадающих в сравниваемых файлах:

$ diff -y -W25 --suppress-common-lines cot.txt cot2.txt  кот         < зубр        |   бизон             >   крыса 

Яснее ясного.

Жаль, что эта опция не может быть применена вместе с опцией --left-column, добавление которой никак не влияет на вывод команды.

Опция -e или --ed

Команда diff позволяет выводить результаты своей работы в формате командного файла для редактора ed:

$ diff -e cot.txt cot2.txt 8a крыса . 5c бизон . 1d 

Мы теперь достаточно знаем о синтаксисе команды diff, чтобы и без редактора понять, что означает этот вывод.

1. Инструкции показывают, как превратить первый файл во второй.

2. "8a крыса " означает добавить после восьмой строки строку "крыса ".

3. "5c бизон" означает заменить пятую строку строкой "бизон".

4. 1d значит удалить первую строку.

Однако, при желании, мы можем воспользоваться редактором ed для превращения файла cot.txt в файл cot2.txt.

Для этого сначала перенаправим вывод команды diff -e cot.txt cot2.txt в файл ed.script, который будет автоматически создан в рабочей директории:

$ diff -e cot.txt cot2.txt > ed.script

Затем запустим следующую конструкцию:

$ (cat ed.script && echo w) | ed - cot.txt

и проверим результат:

$ cat cot.txt  собака ящерица белка бизон попугай рыба змея крыса 

Полагаю, что "заклинание" в командной строке требует некоторого пояснения:

1. Применен программный канал, символом которого служит вертикальная черта (|). Вывод левой части канала служит вводом для правой части (команды ed - cot.txt).

2. Выражение в скобках в левой части программного канала, означает последовательное выполнение двух команд: cat ed.script и echo w, а знак && между ними означает логическое "и". Благодаря этому знаку вывод обеих команд объединяется:

$ (cat ed.script && echo w) 8a крыса . 5c бизон . 1d w 

Мы видим уже знакомый нам скрипт и приписанную командой echo в последней строке букву "w", которая служит командой редактора ed.

3. В правой части программного канала команда ed - cot.txt. Благодаря дефису редактор ed принимает стандартный ввод в качестве командного скрипта. Команды, сгенерированные программой diff -e, изменяют содержимое файла cot.txt, а команда w заставляет переписать этот файл с учетом изменений.

Не спрашивайте меня, почему все это так, и как можно иначе, сейчас не время рассматривать работу редактора ed - это тема отдельного исследования.

Важен факт, что файл cot.txt превратился (по своему содержанию, а не по названию) в файл cot2.txt.

Опция -f или --forward-ed (прямой ed)

Эта опция делает то же самое, что и опция -e, но выдает результат не с последней строки, а с первой, то есть в обратном порядке. Есть еще ряд отличий, в результате которых редактор ed не может использовать вывод этой опции в своей работе. Эта опция вообще бесполезна, и существует для совместимости со старыми версиями diff.

Опция -n или --rcs

Выводит результат в формате RCS - Системы управления изменениями (Revision Control System - RCS). Кто знает, что это такое, пусть читает руководство на русском языке.

Опция -D NAME

--ifdef=NAME

Как уже понятно читателю, команда diff создана программистами и для программистов, отсюда и изобилие различных форматов вывода. Ведь при написании программ чрезвычайно важно сличить разные варианты одной и той же программы, чтобы найти ошибки и разночтения.

Описываемая опция позволяет производить слияние двух файлов - текстов на языке программирования Си. Результат работы 'diff' в этом формате будет содержать все строки обоих файлов. Строки общие для файлов отображаются только один раз; разные части разделяются с помощью директив препроцессора Cи '#ifdef NAME' или '#ifndef NAME', '#else', и '

воскресенье, 8 февраля 2009 г.

Перенаправление стандартных потоков данных в Linux

Виртуальная энциклопедия "Linux по-русски": новости, статьи, ссылки на материалы по операционной системе GNU/Linux.

Алексей Дмитриев, февраль 2009.

Введение

Прежде чем заводить речь о перенаправлениях, нужно представлять себе работу процесса в Юниксовидных ОС. Вдаваться во внутреннюю структуру процесса не входит в наши намерения, мы будем рассматривать процесс как некий "черный ящик", а лучше завод, перерабатывающий данные.

Наблюдая за заводом извне, мы замечаем три потока:

  • 0. На территорию завода поступает входящий поток "сырья" - данных подлежащих переработке.
  • 1. Из ворот выходит поток продукции - данных, подвергшихся переработке на заводе-процессе.
  • 2. Из трубы поднимается дым, по виду которого можно судить о работе завода. Если дыма не заметно, то завод работает нормально (у нас ведь экологически чистое производство информации). Если вдруг повалил густой дым, то, ясное дело, что-то не в порядке.

На компьютерном языке эти три потока данных называются стандартными потоками. Каждый имеет числовой дескриптор (номер), название и направление по умолчанию.

Дескриптор 0: Входящий стандартный поток (Standart Input, stdin). По умолчанию, поступает со стандартного устройства ввода (обычно с клавиатуры).

Дескриптор 1: Выходящий стандартный поток (Standar Output, stdout). По умолчанию направляется на стандартное устройство вывода (обычно экран монитора).

Дескриптор 2: Стандартный поток сообщений об ошибках (Standart Error, stderr). С английского переводится как "стандартная ошибка", но в русском языке такое выражение звучит двусмысленно. Поэтому я предпочитаю называть его стандартным сообщением, тем более, что в большинстве случаев оно сообщает не об ошибке, а о ходе процесса. По умолчанию направляется туда же, куда и стандартный вывод - на экран монитора, но не смешивается со стандартным выводом, а раскладывается по разным "полкам".

Входящий поток, показан зеленым, имеет дескриптор 0
Выходящий поток, показан красным, имеет дескриптор 1
Поток сообщений, показан синим, имеет дескриптор 2

Вот пример стандартного ввода и вывода:

$ echo стандарный ввод   (Enter)  стандарный ввод 

Команда echo направляет поток данных с клавиатуры на экран дисплея.

А вот пример стандартного сообщения об ошибке:

$ cat file.txt  cat: file.txt: Нет такого файла или каталога 

Каждый из этих стандартных потоков можно перенаправлять, то есть направлять не туда, куда поток направляется по умолчанию. Это и есть перенаправление.

Перенаправление стандартного вывода

Во многих случаях удобнее работать не со стандартным выводом на монитор, а с файлами. Файлы можно сохранять, редактировать, посылать по почте, и т.д. Мы всегда можем перенаправить вывод команды в файл, применив оператор перенаправления > и указав имя файла. При этом не важно, существует ли такой файл на самом деле. Если такого файла нет, то он будет создан, а если есть, то перезаписан (все прежнее содержимое будет стерто, а новое записано).

$ echo стандарный ввод > ввод.txt

Как видите, на экране не появились слова "стандартный ввод", зато в текущей директории появился файл ввод.txt с этими словами.

Можно дописать в файл ввод.txt вывод других команд, не уничтожая имеющегося содержимого. Для этого служит оператор >>

$ echo и стандарный вывод >> ввод.txt

Проделайте этот опыт самостоятельно, чтобы убедиться, что это так. Для определения текущей директории применяется команда pwd:

$ pwd  /home/ваш_логин/ 

Это я на случай, если вы не сразу найдете файл ввод.txt. (pwd расшифровывается как "print working directory" - "сообщить рабочую директорию").

Внимание: Следите за тем, в какой директории вы находитесь и без надобности не перенаправляйте вывод в существующие файлы. Могут быть уничтожены важные файлы (особенно, если вы имеете дурную привычку работать под логином администратора - root'а).

Перенаправление ввода

Не все команды принимают файлы в качестве аргумента; некоторые принимают данные только из стандартного ввода.

Например, команда tr, которая служит для перевода (замены) выбранных символов в другие символы или удаления их.

На этот случай служит оператор перенаправления ввода < .

$ tr [a-z] [A-Z] < case.txt  TRANSLATION LOWER CASE INTO UPPERCASE 

В файле case.txt содержался тот же текст, только написанный строчными буквами.

Если желательно записать результат работы команды в другой файл, то можно совместить перенаправление ввода с перенаправлением вывода:

$ tr [a-z] [A-Z] < case.txt > case-upper.txt

Появится файл case-upper.txt, содержащий только что виденный нами текст.

И, наконец, можно дописать изменения текста в исходный файл:

$ tr [a-z] [A-Z] < case.txt >> case.txt

А вот пытаться переписать исходный файл измененным текстом не получится - будут утеряны и исходный файл и результат изменений:

$ tr [a-z] [A-Z] < case.txt > case.txt

Попробуйте сами...

Перенаправление стандартного потока сообщений

Если команда "страдает болтливостью", то есть выводит множество сообщений, которые вам не нужны, или непонятны, то лучше перенаправить поток этих сообщений в другое русло. Вывод ненужных сообщений замедляет работу команды, засоряет экран монитора, отвлекает от работы.

Например, команда wc, которая подсчитывает количество строк, слов, байт, или символов, работает только с текстовыми файлами (кроме опции -с). Если среди заданных команде для обработки файлов попадутся бинарные или .html файлы, то команда выдаст множество сообщений. Зададим команде wc просчитать все файлы в текущей директории (при помощи символа астериска - *)

$ wc *  wc: Documents: Is a directory       0       0       0 Documents       9      14     207 MyComputer.desktop     310    1963   12555 bookindx.txt       2       5      39 case-upper.txt       2       5      38 case.txt wc: mill.gif:1: Invalid or incomplete multibyte or wide character wc: mill.gif:2: Invalid or incomplete multibyte or wide character wc: mill.gif:3: Invalid or incomplete multibyte or wide character wc: mill.gif:4: Invalid or incomplete multibyte or wide character wc: mill.gif:5: Invalid or incomplete multibyte or wide character wc: mill.gif:6: Invalid or incomplete multibyte or wide character     73     307   12702 mill.gif     119     745    9468 redirections_and_pipes.txt wc: sed.html:53: Invalid or incomplete multibyte or wide character     2732   14592  167105 sed.html     682    4198   29314 sed_mcmahon.txt     114     156    1715 shema.txt     150     318    5066 trash.desktop      15      18     258 Дисковод       1       0       2 Текстовый файл    4209   22321  238469 итого 

Строки вывода, начинающиеся с wc: являются сообщениями. На самом деле этих сообщений было намного больше, мне пришлось уменьшить их количество, чтобы не загромождать статью.

Избавиться от них очень просто: нужно воспользоваться тем же оператором перенаправления (>), предварив его номером перенаправляемого потока. Стандартный поток сообщений имеет дескриптор (номер) 2, вот и поставим двойку перед оператором перенаправления - 2> . Куда же перенаправить этот поток? Можно перенаправить в какой-нибудь файл, если хотите на досуге разобраться с этими сообщениями. (Например, при компиляции программ выдается множество сообщений, которые вовсе не бессмысленны). А если сообщения вам не нужны, то лучше перенаправить их в файл /dev/null. Это специальный файл, который принимает любое количество данных и обращает их в ничто - эдакая бездонная и безвозвратная мусорная корзина, а лучше - "черная дыра". Вот в нее то и направим ненужный поток сообщений:

$ wc * 2> /dev/null       0       0       0 Documents       9      14     207 MyComputer.desktop     310    1963   12555 bookindx.txt       2       5      39 case-upper.txt       2       5      38 case.txt      73     307   12702 mill.gif     119     745    9468 redirections_and_pipes.txt    2732   14592  167105 sed.html     682    4198   29314 sed_mcmahon.txt     114     156    1715 shema.txt     150     318    5066 trash.desktop      15      18     258 Дисковод       1       0       2 Текстовый файл    4209   22321  238469 итого 

В итоге получаем на экране только вывод программы.

Возникает резонный вопрос: "А можно ли прочитать на экране только сообщения, а вывод программы перенаправить в файл?". Конечно можно:

$ wc * 1> /dev/null

а, принимая во внимание, что перенаправляется по умолчанию только стандартный вывод (поток номер 1), то единичку перед оператором перенаправления ставить ни к чему, результат будет один:

$ wc * > /dev/null  wc: Documents: Is a directory wc: mill.gif:1: Invalid or incomplete multibyte or wide character wc: mill.gif:2: Invalid or incomplete multibyte or wide character wc: mill.gif:3: Invalid or incomplete multibyte or wide character ... 

Существует также возможность перенаправить потоки 1 и 2 в разные файлы:

$ wc * > wc.txt 2> /dev/null

Убедитесь сами, что файл wc.txt не содержит стандартных сообщений.

И последняя хитрость. Можно направить оба выходных потока: стандарный вывод и стандартное сообщение в один и тот же файл, так, чтобы в файле сохранить все, что мы увидели бы на экране монитора:

$ wc * > wc.txt 2>&1

Первый оператор перенаправления направляет стандартный вывод в файл, а второй оператор перенаправления указывает, что стандартное сообщение следует направить туда же, куда и поток номер 1.

Заключение

Перенаправление стандартных потоков широко применяется при работе в командной строке. Кроме очевидной потребности сохранять результаты работы различных команд в файлах, перенаправление позволяет избавиться от ненужных сообщений, задавать командам данные из файлов, автоматизировать рутинные задачи.

среда, 15 октября 2008 г.

Fushi - если хотите научить кого-то работать в консоле.

Вот, нашет интересный пост. Я думаю будет очень полезен начинающим юзерам.

Смольный и Linux - Fushi - если хотите научить кого-то работать в консоле.

Fushi - сокращенно от Fake User Shell Interface, это обучающая программа, которая выглядить как стандартная командная строка, но разработана специально для пользователей которые только начинают разбираться в ней, основное назначение данного скрипта, обучение пользователя основам.

Т.к. изначальный fushi был немного бажен, пришлось его подправить, а так же полностью перевести на русский. Делал я это быстро поэтому, замечания по орфографии принимаются. Так же если кому-то станет интересно, fushi можно развить, добавить примеров, и доработать, получится неплохой интерактивный учебник.

Перерабатывая fushi постарался как можно больше сделать упор на man страници, дабы сразу пристрастить пользователя к курению манов.

При запуске вам доступно 8 уроков. Это база, которую все должны знать используя Linux системы. Используя данный скрипт можно не бояться потерять какие-то файлы или данные, вы будете строго следовать заданиям(урокам) которые вам предоставляются, в "фейковом" терминале.

Надеюсь на данный скрипт обратят внимание учителя, которые приступили к преподаванию информатики в школах на Linux-е.

Хочу обратить внимание, что скрипт больше адаптирован под Debian based системы.
Если в других системах будут возникать проблемы с кодировкой, просто смените локаль терминала на UTF8.

Качаете, разархивируете, двойной клик, Запустить в терминале.

Скачать FUSHI

воскресенье, 13 июля 2008 г.

Консоль не так страшна. Руководство для новичков.

Консоль не так страшна. Руководство для новичков. / Linux для всех / Блоги / Хабрахабр

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

Итак, поехали.

PS1


Будем считать, что способы перехода в режим консоли Вам знакомы. Переходим, логинимся и видим приглашение примерно такого вида:
имя_пользователя@сетевое_имя:`$

Мало о чем говорит, правда? На самом деле приглашение оболочки может содержать много полезной информации. Какой? Это Вы можете решить сами. За приглашение оболочки отвечает переменная окружения PS1. Не буду читать нудные лекции о том что это такое, перейдем сразу к практике.
Находим файл /home/<имя пользователя>/.bashrc (далее, вместо /home/<имя пользователя> используется ~). На первых порах, для удобной навигации по файлам и каталогам в консоли, рекомендую использовать файловый менеджер Midnight commander. Вызывается он простой командой mc. Возможно его придется установить из репозиториев Вашего дистрибутива. Итак, файл нашли, жмем F4 (открывает файл для редактирования) и при помощи курсоров спускаемся в самый конец файла. Пишем:
PS1="\u@\t \w \$ "

Сохраняем клавишей F2, закрываем файл и mc клавишей F10, вводим команду exit (выход из консоли) и логинимся заново. Теперь приглашение оболочки стало выглядеть так:
имя_пользователя@текущее_время текущий_каталог $

Вот некоторые значения переменной PS1. На самом деле их больше и Вы без труда сможете найти полный список этих значений.
\a - Cимвол Ctrl-g, который вызывает системный звонок
\d - Текущая системная дата
\h - Сетевое имя машины
\n - Символ новой строки
\t - Текущее системное время в формате 24 часов
\@ - Текущее системное время в формате 12 часов am/pm
\w - Имя текущего рабочего каталога
\u - Имя пользователя
\! - Номер следующей команды в истории команд


screen


С приглашением разобрались. Стало интересней, но удобней не стало. Будем делать удобней. Существует замечательный консольный оконный менеджер screen, который значительно упрощает жизнь настоящего юниксоида. Про screen на Хабре есть хорошая статья "Screen - текстовый оконный менеджер" (обязательно к прочтению) и я не хотел бы повторяться. Внесу лишь несколько дополнений в вышеуказанную статью.
Все настройки screen находятся в файле `/screenrc. Приведу несколько полезных:
# убираем приветствие при запуске screen
startup_message off
# показывать мигание экрана вместо писка динамика
vbell on
# размер буфера прокрутки
defscrollback 1000
# за счет этой строки имя работающего в окне приложения отображается рядом с номером окна.
shelltitle '$ |sh'

Подробней про строку shelltitle '$ |sh'. Пример строки состояния:
0 mc 1* vim 2 mutt

Это означает, что в первом окне, а оно текущее (символ *), запущен vim, во втором почтовик mutt, а в нулевом mc. Чтобы эта опция работала, необходимо в /etc/profile добавить строку:
export PROMPT_COMMAND = 'echo -n -e "\033k\033\134"'

Стало удобней, но напрягает постоянно набирать команду screen. Можно настроить screen на запуск сразу после входа пользователя в систему. Для этого в конц /etc/profile добавим следующие строки:
if [ "`tty`" = "/dev/vc/1" ]; then
if [ -x /usr/bin/screen ]; then
screen -R; logout
fi
fi

Это означает, что screen должен запускаться на первом терминале (тот, который запускается ctrl+alt+F1) сразу после входа пользователя, а после выхода из screen должен происходить logout.
И напоследок интересная фича screen. Ctrl+a h - создание текстовых скриншотов, очень полезная фича, посмотреть полученный результат можно так: "less hardcopy.X", где Х - это номер текущего окна screen.

alias и писк динамика


Стало удобней? Думаю да. Но можно еще удобней. Вы слыхали про alias? Нет? Сейчас расскажу, точней покажу как это работает. Опять идем в `/.bashrc и в конец файла пишем:
alias rpm='rpm -ihv'

Теперь при запуске команды rpm program.rpm будет выполняться rpm -ihv program.rpm.

Вы наверно обратили внимание, что работа в консоли порой сопровождается надоедливым писком динамика. Вот три способа отключения:
1. Выполните команду "setterm -blength 0 -bfreq 0 -store"
2. Добавьте в /etc/inputrc или в ~/.inputrc строку "set bell-style visible"
3. Добавьте в /etc/screenrc или в ~/.screenrc строку "vbell on"


Послесловие


И под конец еще несколько советов.
1. Вам просто необходимо познакомиться с текстовым редактором vim. На Хабре есть целый блог про него.
2. Пользуйтесь манами. Это что-то вроде помощи по использованию приложений. Для примера, наберите man mc и увидите подробный мануал по использованию вышеупомянутого mc.
3. Научитесь искать ответы на возникшие вопросы самостоятельно, только так вы сможете подружиться с такой системой как Linux. А она не берет в друзья кого попало.

К сожалению это далеко не все, что можно рассказать о консоли Linux, но если Вы поняли, что консоль не такая страшная, скорее даже симпатичная, и что в ней можно работать с большим комфортом, то цель статьи достигнута.

Источники:
http://www.xakep.ru/magazine/xa/069/112/…
http://skif.bas-net.by/bsuir/base/node13…
http://www.linuxfocus.org/Russian/May200…

суббота, 28 июня 2008 г.

Очень полезные команды Linux на одном листе

Записки на полях: Linux (Очень полезные команды Linux)

Команда Описание
Системная информация
arch отобразить архитектуру компьютера
uname -m
uname -r отобразить используемую версию ядра
dmidecode -q показать аппаратные системные компоненты - (SMBIOS / DMI)
hdparm -i /dev/hda вывести характеристики жесткого диска
hdparm -tT /dev/sda протестировать производительность чтения данных с жесткого диска
cat /proc/cpuinfo отобразить информацию о процессоре
cat /proc/interrupts показать прерывания
cat /proc/meminfo проверить использование памяти
cat /proc/swaps показать файл(ы) подкачки
cat /proc/version вывести версию ядра
cat /proc/net/dev показать сетевые интерфейсы и статистику по ним
cat /proc/mounts отобразить смонтированные файловые системы
lspci -tv показать в виде дерева PCI устройства
lsusb -tv показать в виде дерева USB устройства
date вывести системную дату
cal 2007 вывести таблицу-календарь 2007-го года
date 041217002007.00  установить системные дату и время ММДДЧЧммГГГГ.СС (МесяцДеньЧасМинутыГод.Секунды)
clock -w
сохранить системное время в BIOS
Остановка системы
shutdown -h now Остановить систему
init 0
telinit 0
shutdown -h hours:minutes & запланировать остановку системы на указанное время
shutdown -c отменить запланированную по расписанию остановку системы
shutdown -r now перегрузить систему
reboot
logout выйти из системы
Файлы и директории
cd /home перейти в директорию '/home'
cd .. перейти в директорию уровнем выше
cd ../.. перейти в директорию двумя уровнями выше
cd перейти в домашнюю директорию
cd ~user перейти в домашнюю директорию пользователя user
cd - перейти в директорию, в которой находились до перехода в текущую директорию
pwd показать текущюю директорию
ls отобразить содержимое текущей директории
ls -F отобразить содержимое текущей директории с добавлением к именам символов, храктеризующих тип
ls -l показать детализированое представление файлов и директорий в текущей директории
ls -a показать скрытые файлы и директории в текущей директории
ls *[0-9]* показать файлы и директории содержащие в имени цифры
tree показать дерево файлов и директорий, начиная от корня (/)
lstree
mkdir dir1 создать директорию с именем 'dir1'
mkdir dir1 dir2 создать две директории одновременно
mkdir -p /tmp/dir1/dir2 создать дерево директорий
rm -f file1 удалить файл с именем 'file1'
rmdir dir1 удалить директорию с именем 'dir1'
rm -rf dir1 удалить директорию с именем 'dir1' и рекурсивно всё её содержимое
rm -rf dir1 dir2 удалить две директории и рекурсивно их содержимое
mv dir1 new_dir переименовать или переместить файл или директорию
cp file1 file2 сопировать файл file1 в файл file2
cp dir/* . копировать все файлы директории dir в текущую директорию
cp -a /tmp/dir1 . копировать директорию dir1 со всем содержимым в текущую директорию
cp -a dir1 dir2 копировать директорию dir1 в директорию dir2
ln -s file1 lnk1  создать символическую ссылку на файл или директорию
ln file1 lnk1 создать "жёсткую" (физическую) ссылку на файл или директорию
touch -t 0712250000 fileditest модифицировать дату и время создания файла, при его отсутствии, создать файл с указанными датой и временем (YYMMDDhhmm)
Поиск файлов
find / -name file1 найти файлы и директории с именем file1. Поиск начать с корня (/)
find / -user user1 найти файл и директорию принадлежащие пользователю user1. Поиск начать с корня (/)
find /home/user1 -name "*.bin" Найти все файлы и директории, имена которых оканчиваются на '. bin'. Поиск начать с '/ home/user1' 
find /usr/bin -type f -atime +100 найти все файлы в '/usr/bin', время последнего обращения к которым более 100 дней
find /usr/bin -type f -mtime -10 найти все файлы в '/usr/bin', созданные или изменённые в течении последних 10 дней
find / -name *.rpm -exec chmod 755 '{}' \; найти все фалы и директории, имена которых оканчиваются на '.rpm', и изменить права доступа к ним
find / -xdev -name "*.rpm" найти все фалы и директории, имена которых оканчиваются на '.rpm', игнорируя съёмные носители, такие как cdrom, floppy и т.п.
locate "*.ps" найти все файлы, сожержащие в имени '.ps'. Предварительно рекомендуется выполнить команду 'updatedb'
whereis halt показывает размещение бинарных файлов, исходных кодов и руководств, относящихся к файлу 'halt'
which halt отображает полный путь к файлу 'halt'
Монтирование файловых систем
mount /dev/hda2 /mnt/hda2 монтирует раздел 'hda2' в точку монтирования '/mnt/hda2'. Убедитесь в наличии директории-точки монтирования '/mnt/hda2'
umount /dev/hda2 размонтирует раздел 'hda2'. Перед выполнением, покиньте '/mnt/hda2'
fuser -km /mnt/hda2 принудительное размонтирование раздела. Применяется в случае, когда раздел занят каким-либо пользователем
umount -n /mnt/hda2 выполнить размонитрование без занесения информации в /etc/mtab. Полезно когда файл имеет атрибуты "только чтение" или недостаточно места на диске
mount /dev/fd0 /mnt/floppy монтировать флоппи-диск
mount /dev/cdrom /mnt/cdrom монтировать CD или DVD
mount /dev/hdc /mnt/cdrecorder монтировать CD-R/CD-RW или DVD-R/DVD-RW(+-)
mount -o loop file.iso /mnt/cdrom смонтировать ISO-образ
mount -t vfat /dev/hda5 /mnt/hda5 монтировать файловую систему Windows FAT32
mount -t smbfs -o username=user,password=pass //winclient/share /mnt/share монтировать сетевую файловую систему Windows (SMB/CIFS)
mount -o bind /home/user/prg /var/ftp/user "монтирует" директорию в директорию (binding). Доступна с версии ядра 2.4.0. Полезна, например, для предоставления содержимого пользовательской директории через ftp при работе ftp-сервера в "песочнице" (chroot), когда симлинки сделать невозможно. Выполнение данной команды сделает копию содержимого /home/user/prg в /var/ftp/user
Дисковое пространство
df -h отображает информацию о смонтированных разделах с отображением общего, доступного и используемого пространства (Прим.переводчика. ключ -h работает не во всех *nix системах)
ls -lSr |more выдаёт список файлов и директорий рекурсивно с сортировкой по возрастанию размера и позволяет осуществлять постраничный просмотр
du -sh dir1 подсчитывает и выводит размер, занимаемый директорией 'dir1' (Прим.переводчика. ключ -h работает не во всех *nix системах)
du -sk * | sort -rn  отображает размер и имена файлов и директорий, с соритровкой по размеру
rpm -q -a --qf '%10{SIZE}t%{NAME}n' | sort -k1,1n показывает размер используемого дискового пространства, занимаемое файлами rpm-пакета, с сортировкой по размеру (fedora, redhat и т.п.)
dpkg-query -W -f='${Installed-Size;10}t${Package}n' | sort -k1,1n показывает размер используемого дискового пространства, занимаемое файлами deb-пакета, с сортировкой по размеру (ubuntu, debian т.п.)
Пользователи и группы
groupadd group_name создать новую группу с именем group_name
groupdel group_name удалить группу group_name
groupmod -n new_group_name old_group_name переименовать группу old_group_name в new_group_name
useradd -c "Nome Cognome" -g admin -d /home/user1 -s /bin/bash user1 создать пользователя user1, назначить ему в качестве домашнего каталога /home/user1, в качестве shell'а /bin/bash, включить его в группу admin и добавить комментарий Nome Cognome
useradd user1 создать пользователя user1
userdel -r user1 удалить пользователя user1 и его домашний каталог
usermod -c "User FTP" -g system -d /ftp/user1 -s /bin/nologin user1 изменить атрибуты пользователя
passwd сменить пароль
passwd user1 сменить пароль пользователя user1 (только root)
chage -E 2005-12-31 user1 установить дату окончания действия учётной записи пользователя user1
pwck проверить корректность системных файлов учётных записей. Проверяются файлы /etc/passwd и /etc/shadow
grpck проверяет корректность системных файлов учётных записей. Проверяется файл/etc/group
newgrp [-] group_name изменяет первичную группу текущего пользователя. Если указать "-", ситуация будет идентичной той, в которой пользователь вышил из системы и снова вошёл. Если не указывать группу, первичная группа будет назначена из /etc/passwd
Выставление/изменение полномочий на файлы
ls -lh просмотр полномочий на файлы и директории в текущей директории
ls /tmp | pr -T5 -W$COLUMNS вывести содержимое директории /tmp и разделить вывод на пять колонок
chmod ugo+rwx directory1 добавить полномочия на директорию directory1 ugo(User Group Other)+rwx(Read Write eXecute) - всем полные права. Аналогичное можно сделать таким образом chmod 777 directory1
chmod go-rwx directory1 отобрать у группы и всех остальных все полномочия на директорию directory1.
chown user1 file1 назначить владельцем файла file1 пользователя user1
chown -R user1 directory1 назначить рекурсивно владельцем директории directory1 пользователя user1
chgrp group1 file1 сменить группу-владельца файла file1 на group1
chown user1:group1 file1 сменить владельца и группу владельца файла file1
find / -perm -u+s найти, начиная от корня, все файлы с выставленным SUID
chmod u+s /bin/binary_file назначить SUID-бит файлу /bin/binary_file. Это даёт возможность любому пользователю запускать на выполнение файл с полномочиями владельца файла.
chmod u-s /bin/binary_file снять SUID-бит с файла /bin/binary_file.
chmod g+s /home/public назначить SGID-бит директории /home/public.
chmod g-s /home/public снять SGID-бит с директории /home/public.
chmod o+t /home/public назначить STIKY-бит директории /home/public. Позволяет удалять файлы только владельцам
chmod o-t /home/public снять STIKY-бит с директории /home/public
Специальные атрибуты файлов
chattr +a file1 позволить открывать файл на запись только в режиме добавления
chattr +c file1 позволяет ядру автоматически сжимать/разжимать содержимое файла.
chattr +d file1 указавет утилите dump игнорировать данный файл во время выполнения backup'а
chattr +i file1 делает файл недоступным для любых изменений: редактирование, удаление, перемещение, создание линков на него.
chattr +s file1 позволяет сделать удаление файла безопасным, т.е. выставленный атрибут s говорит о том, что при удалении файла, место, занимаемое файлом на диске заполняется нулями, что предотвращяет возможность восстановления данных.
chattr +S file1 указывает, что, при сохранении изменений, будет произведена синхронизация, как при выполнении команды sync
chattr +u file1 данный атрибут указывает, что при удалении файла содержимое его будет сохранено и при необходимости пользователь сможет его восстановить
lsattr показать атрибуты файлов
Архивирование и сжатие файлов
bunzip2 file1.bz2 разжимает файл 'file1.gz'
gunzip file1.gz
gzip file1 сжимает файл 'file1'
bzip2 file1
gzip -9 file1 сжать файл file1 с максимальным сжатием
rar a file1.rar test_file создать rar-архив 'file1.rar' и включить в него файл test_file
rar a file1.rar file1 file2 dir1 создать rar-архив 'file1.rar' и включить в него file1, file2 и dir1
rar x file1.rar распаковать rar-архив
unrar x file1.rar
tar -cvf archive.tar file1 создать tar-архив archive.tar, содержащий файл file1
tar -cvf archive.tar file1 file2 dir1 создать tar-архив archive.tar, содержащий файл file1, file2 и dir1
tar -tf archive.tar показать содержимое архива
tar -xvf archive.tar распаковать архив
tar -xvf archive.tar -C /tmp распаковать архив в /tmp
tar -cvfj archive.tar.bz2 dir1 создать архив и сжать его с помощью bzip2(Прим.переводчика. ключ -j работает не во всех *nix системах)
tar -xvfj archive.tar.bz2 разжать архив и распаковать его(Прим.переводчика. ключ -j работает не во всех *nix системах)
tar -cvfz archive.tar.gz dir1 создать архив и сжать его с помощью gzip
tar -xvfz archive.tar.gz разжать архив и распаковать его
zip file1.zip file1 создать сжатый zip-архив
zip -r file1.zip file1 file2 dir1 создать сжатый zip-архив и со включением в него нескольких файлов и/или директорий
unzip file1.zip разжать и распаковать zip-архив
RPM пакеты (Fedora, Red Hat и тому подобное)
rpm -ivh package.rpm установить пакет с выводом сообщений и прогресс-бара
rpm -ivh --nodeps package.rpm установить пакет с выводом сообщений и прогресс-бара без контроля зависимостей
rpm -U package.rpm обновить пакет без изменений конфигурационных файлов, в случае отсутствия пакета, он будет установлен
rpm -F package.rpm обновить пакет только если он установлен
rpm -e package_name.rpm удалить пакет
rpm -qa отобразить список всех пакетов, установленных в системе
rpm -qa | grep httpd среди всех пакетов, установленных в системе, найти пакет содержащий в своём имени "httpd"
rpm -qi package_name вывести информацию о конкрентном пакете
rpm -qg "System Environment/Daemons" отобразить пакеты входящие в группу пакетов
rpm -ql package_name вывести список файлов, входящих в пакет
rpm -qc package_name вывести список конфигурационных файлов, входящих в пакет
rpm -q package_name --whatrequires вывести список пакетов, необходимых для установки конкретного пакета по зависимостям
rpm -q package_name --whatprovides show capability provided by a rpm package
rpm -q package_name --scripts отобразит скрипты, запускаемые при установке/удалении пакета
rpm -q package_name --changelog вывести историю ревизий пакета
rpm -qf /etc/httpd/conf/httpd.conf проверить какому пакету принадлежит указанный файл. Указывать следует полный путь и имя файла.
rpm -qp package.rpm -l отображает список файлов, входящих в пакет, но ещё не установленных в систему
rpm --import /media/cdrom/RPM-GPG-KEY ипортировать публичный ключ цифровой подписи
rpm --checksig package.rpm проверит подпись пакета
rpm -qa gpg-pubkey проверить целостность установленного содержимого пакета
rpm -V package_name проверить размер, полномочия, тип, владельца, группу, MD5-сумму и дату последнего изменеия пакета
rpm -Va проверить содержимое всех пакеты установленные в систему. Выполняйте с осторожностью!
rpm -Vp package.rpm проверить пакет, который ещё не установлен в систему
rpm2cpio package.rpm | cpio --extract --make-directories *bin* извлечь из пакета файлы содержащие в своём имени bin
rpm -ivh /usr/src/redhat/RPMS/`arch`/package.rpm установить пакет, собранный из исходных кодов
rpmbuild --rebuild package_name.src.rpm собрать пакет из исходных кодов
YUM - средство обновления пакетов(Fedora, RedHat и тому подобное)
yum install package_name закачать и установать пакет
yum update обновить все пакеты, установленные в систему
yum update package_name обновить пакет
yum remove package_name удалить пакет
yum list вывести список всех пакетов, установленных в систему
yum search package_name найти пакет в репозитории
yum clean packages очисть rpm-кэш, удалив закачанные пакеты
yum clean headers удалить все заголовки файлов, которые система использует для разрешения зависимостей
yum clean all очисть rpm-кэш, удалив закачанные пакеты и заголовки
DEB пакеты (Debian, Ubuntu и тому подобное)
dpkg -i package.deb установить / обновить пакет
dpkg -r package_name удалить пакет из системы
dpkg -l показать все пакеты, установленные в систему
dpkg -l | grep httpd среди всех пакетов, установленных в системе, найти пакет содержащий в своём имени "httpd"
dpkg -s package_name отобразить инфрмацию о конкретном пакете
dpkg -L package_name вывести список файлов, входящих в пакет, установленный в систему
dpkg --contents package.deb отобразить список файлов, входящих в пакет, который ешё не установлен в систему
dpkg -S /bin/ping найти пакет, в который входит указанный файл.
APT - средство управление пакетами (Debian, Ubuntu и тому подобное)
apt-get install package_name установить / обновить пакет
apt-cdrom install package_name установить / обновить пакет с cdrom'а
apt-get update получить обновлённые списки пакетов
apt-get upgrade обновить пакеты, установленные в систему
apt-get remove package_name удалить пакет, установленный в систему с сохранением файлов конфигурации
apt-get purge package_name удалить пакет, установленный в систему с удалением файлов конфигурации
apt-get check проверить целостность зависимостей
apt-get clean удалить загруженные архивные файлы пакетов
apt-get autoclean удалить старые загруженные архивные файлы пакетов
Просмотр содержимого файлов
cat file1 вывести содержимое файла file1 на стандартное устройсво вывода
tac file1 вывести содержимое файла file1 на стандартное устройсво вывода в обратном порядке (последняя строка становиться первой и т.д.)
more file1 постраничный вывод содержимого файла file1 на стандартное устройство вывода
less file1 постраничный вывод содержимого файла file1 на стандартное устройство вывода, но с возможностью пролистывания в обе стороны (вверх-вниз), поиска по содержимому и т.п.
head -2 file1 вывести первые две строки файла file1 на стандартное устройство вывода. По-умолчанию выводится десять строк
tail -2 file1 вывести последние две строки файла file1 на стандартное устройство вывода. По-умолчанию выводится десять строк
tail -f /var/log/messages выводить содержимое файла /var/log/messages на стандартное устройство вывода по мере появления в нём текста.
Манипуляции с текстом
cat file_originale | [operation: sed, grep, awk, grep и т.п.] > result.txt общий синтаксис выполнения действий по обработке содержимого файла и вывода результата в новый
cat file_originale | [operazione: sed, grep, awk, grepи т.п.] >> result.txt общий синтаксис выполнения действий по обработке содержимого файла и вывода результата в существующий файл. Если файл не существует, он будет создан
grep Aug /var/log/messages из файла '/var/log/messages' отобрать и вывести на стандартное устройство вывода строки, содержащие "Aug"
grep ^Aug /var/log/messages из файла '/var/log/messages' отобрать и вывести на стандартное устройство вывода строки, начинающиеся на "Aug"
grep [0-9] /var/log/messages из файла '/var/log/messages' отобрать и вывести на стандартное устройство вывода строки, содержащие цифры
grep Aug -R /var/log/* отобрать и вывести на стандартное устройство вывода строки, содержащие "Aug", во всех файлах, находящихся в директории /var/log и ниже
sed 's/stringa1/stringa2/g' example.txt в файле example.txt заменить "string1" на "string2", результат вывести на стандартное устройство вывода.
sed '/^$/d' example.txt удалить пустые строки из файла example.txt
sed '/ *#/d; /^$/d' example.txt удалить пустые строки и комментарии из файла example.txt
echo 'esempio' | tr '[:lower:]' '[:upper:]' преобразовать символы из нижнего регистра в верхний
sed -e '1d' result.txt удалить первую строку из файла example.txt
sed -n '/string1/p' отобразить только строки содержашие "string1"
sed -e 's/ *$//' example.txt удалить пустые символы в в конце каждой строки
sed -e 's/string1//g' example.txt удалить строку "string1" из текста не изменяя всего остального
sed -n '1,8p;5q' example.txt взять из файла с первой по восьмую строки и из них вывести первые пять
sed -n '5p;5q' example.txt вывести пятую строку
sed -e 's/0*/0/g' example.txt заменить последовательность из любого количества нулей одним нулём
cat -n file1 пронумеровать строки при выводе содержимого файла
cat example.txt | awk 'NR%2==1' при выводе содержимого файла, не выводить чётные строки файла
echo a b c | awk '{print $1}' вывести первую колонку. Разделение, по-умолчанию, по проблелу/пробелам или символу/символам табуляции
echo a b c | awk '{print $1,$3}' вывести первую и треью колонки. Разделение, по-умолчанию, по проблелу/пробелам или символу/символам табуляции
paste file1 file2 объединить содержимое file1 и file2 в виде таблицы: строка 1 из file1 = строка 1 колонка 1-n, строка 1 из file2 = строка 1 колонка n+1-m
paste -d '+' file1 file2 объединить содержимое file1 и file2 в виде таблицы с разделителем "+"
sort file1 file2 отсортировать содержимое двух файлов
sort file1 file2 | uniq отсортировать содержимое двух файлов, не отображая повторов
sort file1 file2 | uniq -u отсортировать содержимое двух файлов, отображая только уникальные строки (строки, встречающиеся в обоих файлах, не выводятся на стандартное устройство вывода)
sort file1 file2 | uniq -d отсортировать содержимое двух файлов, отображая только повторяющиеся строки
comm -1 file1 file2 сравнить содержимое двух файлов, не отображая строки принадлежащие файлу 'file1'
comm -2 file1 file2 сравнить содержимое двух файлов, не отображая строки принадлежащие файлу 'file2'
comm -3 file1 file2 сравнить содержимое двух файлов, удаляя строки встречающиеся в обоих файлах
Преобразование наборов символов и файловых форматов
dos2unix filedos.txt fileunix.txt конвертировать файл текстового формата из MSDOS в UNIX (разница в символах возврата коретки)
unix2dos fileunix.txt filedos.txt конвертировать файл текстового формата из UNIX в MSDOS (разница в символах возврата коретки)
recode ..HTML < page.txt > page.html конвертировать содержимое тестового файла page.txt в html-файл page.html
recode -l | more вывести список доступных форматов
Анализ файловых систем
badblocks -v /dev/hda1 проверить раздел hda1 на наличие bad-блоков
fsck /dev/hda1 проверить/восстановить целостность linux-файловой системы раздела hda1
fsck.ext2 /dev/hda1 проверить/восстановить целостность файловой системы ext2 раздела hda1
e2fsck /dev/hda1
e2fsck -j /dev/hda1 проверить/восстановить целостность файловой системы ext3 раздела hda1 с указанием, что журнал расположен там же
fsck.ext3 /dev/hda1 проверить/восстановить целостность файловой системы ext3 раздела hda1
fsck.vfat /dev/hda1 проверить/восстановить целостность файловой системы fat раздела hda11
fsck.msdos /dev/hda1
dosfsck /dev/hda1
Форматирование файловых систем
mkfs /dev/hda1 создать linux-файловую систему на разделе hda1
mke2fs /dev/hda1 создать файловую систему ext2 на разделе hda1
mke2fs -j /dev/hda1 создать журналирующую файловую систему ext3 на разделе hda1
mkfs -t vfat 32 -F /dev/hda1 создать файловую систему FAT32 на разделе hda1
fdformat -n /dev/fd0 форматирование флоппи-диска без проверки
mkswap /dev/hda3 создание swap-пространства на разделе hda3
swap-пространство
mkswap /dev/hda3 создание swap-пространства на разделе hda3
swapon /dev/hda3 активировать swap-пространство, расположенное на разделе hda3
swapon /dev/hda2 /dev/hdb3 активировать swap-пространства, расположенные на разделах hda2 и hdb3
Создание резервных копий (backup)
dump -0aj -f /tmp/home0.bak /home создать полную резервную копию директории /home в файл /tmp/home0.bak
dump -1aj -f /tmp/home0.bak /home  создать инкрементальную резервную копию директории /home в файл /tmp/home0.bak
restore -if /tmp/home0.bak восстановить из резервной копии /tmp/home0.bak
rsync -rogpav --delete /home /tmp синхронизировать /tmp с /home
rsync -rogpav -e ssh --delete /home ip_address:/tmp  синхронизировать через SSH-туннель
rsync -az -e ssh --delete ip_addr:/home/public /home/local синхронизировать локальную директорию с удалённой директорией через ssh-туннель со сжатием
rsync -az -e ssh --delete /home/local ip_addr:/home/public синхронизировать удалённую директорию с локальной директорией через ssh-туннель со сжатием
dd bs=1M if=/dev/hda | gzip | ssh user@ip_addr 'dd of=hda.gz' сделать "слепок" локального диска в файл на удалённом компьютере через ssh-туннель
tar -Puf backup.tar /home/user создать инкрементальную резервную копию директории '/home/user' в файл backup.tar с сохранением полномочий
( cd /tmp/local/ && tar c . ) | ssh -C user@ip_addr 'cd /home/share/ && tar x -p' копирование содержимого /tmp/local на удалённый компьютер через ssh-туннель в /home/share/
( tar c /home ) | ssh -C user@ip_addr 'cd /home/backup-home && tar x -p'  копирование содержимого /home на удалённый компьютер через ssh-туннель в /home/backup-home
tar cf - . | (cd /tmp/backup ; tar xf - ) копирование одной директории в другую с сохранением полномочий и линков
find /home/user1 -name '*.txt' | xargs cp -av --target-directory=/home/backup/ --parents поиск в /home/user1 всех файлов, имена которых оканчиваются на '.txt', и копирование их в другую директорию
find /var/log -name '*.log' | tar cv --files-from=- | bzip2 > log.tar.bz2 поиск в /var/log всех файлов, имена которых оканчиваются на '.log', и создание bzip-архива из них
dd if=/dev/hda of=/dev/fd0 bs=512 count=1 создать копию MBR (Master Boot Record) с /dev/hda на флоппи-диск
dd if=/dev/fd0 of=/dev/hda bs=512 count=1 восстановить MBR с флоппи-диска на /dev/hda
CDROM
cdrecord -v gracetime=2 dev=/dev/cdrom -eject blank=fast -force clean a rewritable cdrom
mkisofs /dev/cdrom > cd.iso create an iso image of cdrom on disk
mkisofs /dev/cdrom | gzip > cd_iso.gz create a compressed iso image of cdrom on disk
mkisofs -J -allow-leading-dots -R -V "Label CD" -iso-level 4 -o ./cd.iso data_cd create an iso image of a directory
cdrecord -v dev=/dev/cdrom cd.iso burn an ISO image
gzip -dc cd_iso.gz | cdrecord dev=/dev/cdrom - burn a compressed ISO image
mount -o loop cd.iso /mnt/iso mount an ISO image
cd-paranoia -B rip audio tracks from a CD to wav files
cd-paranoia -- "-3" rip first three audio tracks from a CD to wav files
cdrecord --scanbus scan bus to identify the channel scsi
Сеть (LAN и WiFi)
ifconfig eth0 показать конфигурацию сетевого интерфейса eth0
ifup eth0 активировать (поднять) интерфейс eth0
ifdown eth0 деактивировать (опустить) интерфейс eth0
ifconfig eth0 192.168.1.1 netmask 255.255.255.0 выставить интерфейсу eth0 ip-адрес и маску подсети
ifconfig eth0 promisc перевести интерфейс eth0 в promiscuous-режим для "отлова" пакетов (sniffing)
ifconfig eth0 -promisc отключить promiscuous-режим на интерфейсе eth0
dhclient eth0 активировать интерфейс eth0 в dhcp-режиме.
route -n вывести локальную таблицу маршрутизации
netstat -rn
route add -net 0/0 gw IP_Gateway задать ip-адрес шлюза по умолчанию (default gateway)
route add -net 192.168.0.0 netmask 255.255.0.0 gw 192.168.1.1 добавить статический маршрут в сеть 192.168.0.0/16 через шлюз с ip-адресом 192.168.1.1
route del 0/0 gw IP_gateway удалить ip-адрес шлюза по умолчанию (default gateway)
echo "1" > /proc/sys/net/ipv4/ip_forward разрешить пересылку пакетов (forwarding)
hostname отобразить имя компьютера
host www.linuxguide.it разрешить имя www.linuxguide.it хоста в ip-адрес и наоборот
host 62.149.140.85
ip link show отобразить состояние всех интерфейсов
mii-tool eth0 отобразить статус и тип соединения для интерфейса eth0
ethtool eth0 отображает статистику интерфеса eth0 с выводом такой информации, как поддерживаемые и текущие режимы соединения
netstat -tupn отображает все установленные сетевые соединения по протоколам TCP и UDP без разрешения имён в ip-адреса и PID'ы и имена процессов, обеспечивающих эти соединения
netstat -tupln отображает все сетевые соединения по протоколам TCP и UDP без разрешения имён в ip-адреса и PID'ы и имена процессов, слушающих порты
tcpdump tcp port 80 отобразить весь трафик на TCP-порт 80 (обычно - HTTP)
iwlist scan просканировать эфир на предмет, доступности беспроводных точек доступа
iwconfig eth1 показать конфигурацию беспроводного сетевого интерфейса eth1
Microsoft Windows networks(SAMBA)
nbtscan ip_addr разрешить netbios-имя nbtscan не во всех системах ставится по-умолчанию, возможно, придётся доустанавливать вручную. nmblookup включен в пакет samba.
nmblookup -A ip_addr
smbclient -L ip_addr/hostname отобразить ресурсы, предоставленные в общий доступ на windows-машине
smbget -Rr smb://ip_addr/share подобно wget может получить файлы с windows-машин через smb-протокол
mount -t smbfs -o username=user,password=pass //winclient/share /mnt/share смонтировать smb-ресурс, предоставленный на windows-машине, в локальную файловую систему
IPTABLES (firewall)
iptables -t filter -nL отобразить все цепочки правил
iptables -nL
iptables -t nat -L отобразить все цепочки правил в NAT-таблице
iptables -t filter -F очистить все цепочки правил в filter-таблице
iptables -F
iptables -t nat -F очистить все цепочки правил в NAT-таблице
iptables -t filter -X удалить все пользовательские цепочки правил в filter-таблице
iptables -t filter -A INPUT -p tcp --dport telnet -j ACCEPT позволить входящее подключение telnet'ом
iptables -t filter -A OUTPUT -p tcp --dport http -j DROP блокировать исходящие HTTP-соединения
iptables -t filter -A FORWARD -p tcp --dport pop3 -j ACCEPT позволить "прокидывать" (forward) POP3-соединения
iptables -t filter -A INPUT -j LOG --log-prefix "DROP INPUT" включить журналирование ядром пакетов, проходящих через цепочку INPUT, и добавлением к сообщению префикса "DROP INPUT"
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE включить NAT (Network Address Translate) исходящих пакетов на интерфейс eth0. Допустимо при использовании с динамически выделяемыми ip-адресами.
iptables -t nat -A PREROUTING -d 192.168.0.1 -p tcp -m tcp --dport 22 -j DNAT --to-destination 10.0.0.2:22 перенаправление пакетов, адресованных одному хосту, на другой хост
Мониторинг и отладка
top отобразить запущенные процессы, используемые ими ресурсы и другую полезную информацию (с автоматическим обновлением данных)
ps -eafw отобразить запущенные процессы, используемые ими ресурсы и другую полезную информацию (единожды)
ps -e -o pid,args --forest вывести PID'ы и процессы в виде дерева
pstree отобразить дерево процессов
kill -9 98989 "убить" процесс с PID 98989 "на смерть" (без соблюдения целостности данных)
kill -KILL 98989
kill -TERM 98989 Корректно завершить процесс с PID 98989
kill -1 98989 заставить процесс с PID 98989 перепрочитать файл конфигурации
kill -HUP 98989
lsof -p 98989 отобразить список файлов, открытых процессом с PID 98989
lsof /home/user1 отобразить список открытых файлов из директории /home/user1
strace -c ls >/dev/null вывести список системных вызовов, созданных и полученных процессом ls
strace -f -e open ls >/dev/null вывести вызовы бибилотек
watch -n1 'cat /proc/interrupts' отображать прерывания в режиме реального времени
last reboot отобразить историю перезагрузок системы
last user1 отобразить историю регистрации пользователя user1 в системе и время его нахождения в ней
lsmod вывести загруженные модули ядра
free -m показать состояние оперативной памяти в мегабайтах
smartctl -A /dev/hda контроль состояния жёсткого диска /dev/hda через SMART
smartctl -i /dev/hda проверить доступность SMART на жёстком диске /dev/hda
tail /var/log/dmesg вывести десять последних записей из журнала загрузки ядра
tail /var/log/messages вывести десять последних записей из системного журнала
Другие полезные команды
apropos ...keyword выводит список комманд, которые так или иначе относятся к ключевым словам. Полезно, когда вы знаете что делает программа, но не помните команду
man ping вызов руководства по работе с программой, в данном случае, - ping
whatis ...keyword отображает описание действий указанной программы
mkbootdisk --device /dev/fd0 `uname -r` создаёт загрузочный флоппи-диск
gpg -c file1 шифрует файл file1 с помощью GNU Privacy Guard
gpg file1.gpg дешифрует файл file1 с помощью GNU Privacy Guard
wget -r www.example.com загружает рекурсивно содержимое сайта www.example.com
wget -c www.example.com/file.iso загрузить файл www.example.com/file.iso с возможностью останова и продолжения в последствии
echo 'wget -c www.example.com/files.iso' | at 09:00 начать закачку в указанное время
ldd /usr/bin/ssh вывести список библиотек, необходимых для работы ssh
alias hh='history' назначить алиас hh команде history

Оригинал статьи до начала перевода лежал здесь http://www.linuxguide.it/commands_list.php?Choose_Language:English