- Всё о работе в командной строке Linux
- Как открыть командную строку в Linux
- Что такое командная строка bash?
- Основные команды для работы в командной строке Linux
- Команды для службы с файлами и каталогами:
- Системные команды
- Управление действиями
- Сетевые бригады
- Подсказки по использованию команд в Linux
- Разбор опций командной строки в UNIX-подобных системах
- Введение
- POSIX
- Длинные опции
- Откуда берутся параметры в программе
- Разбор опций
- getopt
- пример программы с использованием getopt()
- getopt_long()
- Пример программы с использованием getopt_long()
- Заключение
Всё о работе в командной строке Linux
Лучшая профессиональная работа в Linux немыслима без использования командной строки. Пользователям, привыкшим трудиться в системах с графическим интерфейсом, работа с командной строкой может показаться неудобной: то, что возможно сделать одним перетаскиванием мышью в командной строке потребует ввода с клавиатуры многих слов: команды с аргументами. Однако в Linux этот вид интерфейса всегда был основным, а потому и хорошо развитым. Командная строка (Command Line) или Консоль (Console) или Терминал (Terminal) — интерфейс для управления програмками с помощью команд.
Команды состоят из букв, цифр, символов, набираются построчно, исполняются после нажатия клавиши Enter. Основной инструмент здесь клавиатура. Данный интерфейс встроен в ядро системы, он станет доступен, даже если графический интерфейс не запустится. Преимущества: небольшой расход ресурсов, упругость при составлении перечня действий из команд, возможность автоматического выполнения команд, возможность воспроизводить и вставлять команды. Если сравнивать интерфейсы в разных системах, то можно заметить, что главные команды одинаковы во всех дистрибутивах семейства Linux, а вот графические программы в каждой системе смогут очень сильно различаться.
Как открыть командную строку в Linux
В командных оболочках, утилизируемых в Linux, есть масса способов экономии усилий (нажатий на клавиши) при выполнении более распространённых действий: автоматическое дополнение длинных названий команд или имён файлов, розыск и повторное выполнение команды, уже когда-то исполнявшейся раньше, подстановка списков имён файлов по отдельному шаблону и многое другое. Преимущества командной строки становятся особенно очевидны, когда требуется выполнять однотипные операции над множеством объектов. В системе с графическим интерфейсом требуется столько перетаскиваний мышью, сколько есть объектов, в командной строке будет довольно одной (пусть длинной и сложной) команды.
Как получить доступ к командной строке в Ubuntu? Нет ничто проще. Чтобы открыть эмулятор терминала в Ubuntu, выберите на панели пункт «Приложения->Стандартные->Терминал». Опустится эмулятор терминала — Gnome terminal. Также эмулятор терминала Gnome terminal в Ubuntu возможно запустить из окна запуска приложений. Для этого нажмите Alt+F2 и введите в открывшемся окне заглавие программы — «gnome-terminal». Чтобы получить доступ к настоящей текстовой консоли, возможно воспользоваться комбинациями клавиш Ctrl+Alt+F1… Ctrl+Alt+F6. Ctrl+Alt+F7 — переход обратно в графичный режим.
Командная строка, оболочка, консоль — эти термины используются для обозначения взаимодействия человека-оператора с операторной системой с применением стандартных устройств ввода-вывода, обеспечивающих ввод команд и получение итогов их выполнения. В операционных системах семейства Linux подобное взаимодействие обеспечивается специальным программным провиантом — оболочкой ( shell ) . Наиболее распространенной из них, является оболочка проекта GNU bash ( Bourne Again SHell ). Bash строится на оболочке Bourne ( sh ) созданной Стефеном Борном и включает в себя свойства множества иных оболочек — C ( csh ) , Korn ( ksh ), tc ( tcsh ) . Bash была написана Брайаном Фоксом (Brian Fox ) и в истиннее время поддерживается Четом Рейми ( Chet Ramey ).
Что такое командная строка bash?
Bash расшифровывается как Bourne again shell (что возможно перевести как «Еще одна оболочка Борна»), название частично заимствованно от более ранешней версии командной оболочки UNIX, которая называлась просто Bourne shell («Оболочка Борна» – по имена разработчика Стивена Борна). Bash позволяет интерактивно взаимодействовать с компьютером, вводя некоторые команды и получая на них соответствующий отклик. Также этот командный процессор позволяет исполнять скрипты (команды из файла), может производить автодополнение названий файлов и директорий, благоволит использование переменных, операторов ветвления и цикла. Далее в статье будут приведены наиболее простые и необходимые для работы в bash команды, которые помогут вам сориентироваться и начать сами использовать командную строку для своих задач, но сначала необходимо перейти к интерфейсу инструктивной строки.
Командный интерпретатор bash – это один из нескольких интерпретаторов, доступных в Linux. Иное свое название – Bourne-again shell – интерпретатор bash получил в честь Стивена Борна (Stephen Bourne), творца его ранней версии (/bin/sh). По большей части bash совместим с sh, но содержит множество улучшений, касающихся как функциональность, так и возможности программирования. Bash сочетает возможности интерпретаторов Korn shell (ksh) и C shell (csh) и представляется POSIX-совместимым интерпретатором.
Основные команды для работы в командной строке Linux
Команды для службы с файлами и каталогами:
- pwd – отобразить путь текущего каталога
- cd – перейти в указанный каталог
- ls – показать список файлов каталога, с ключом -l показывает дополнительные сведения о файлах.
- cp – копирование файлов/папок
- mv – смещение файлов/папок
- mkdir – создать папку
- rm – удалить файлы/папки, с ключом -r устраняет и все вложенные папки, с ключом -f — удаляет открытые файлы или каталоги
- rmdir – удаление порожний папки
- chmod – изменить права доступа к файлу
- chown — сменить владельца файла или каталога
- find — отыскать файл. Задается исходный путь для поиска и шаблон поиска, find / -name .X* — разыскивать от корневого каталога файлы, содержащие в имени символы .X
- which — отобразить полный путь выполняемого файла, доступного в данной оболочке, например which ifconfig
- touch — изменить преходящие отметки файла. Удобно использовать для создания пустых файлов – touch myfile основывает пустой файл myfile .
Системные команды
Эти команды обычно используется от имени суперпользователя ( с бригадой sudo ).
- reboot – перезагрузка системы
- poweroff – выключение компьютера
- reset – очищает окно терминала
- passwd – переменить свой пароль, а суперпользователю — поменять пароль любого пользователя
- users — отобразить перечень пользователей, вошедших в систему.
- yum — установка, удаление или обновление программного обеспечения в дистрибутивах Fedora, RedHat и т.п.
- dpkg — аппарат, удаление или обновление программного обеспечения в дистрибутивах Debian, Ubuntu и т.п.
- apt-get — установка, устранение или обновление программного обеспечения в дистрибутивах на основе Debian (Ubuntu, Mint и т.п.)
Управление действиями
- ps – отобразить список текущих активных процессов
- lsof — отобразить список открытых файлов процесса или юзера
- strace — отобразить список системных вызовов
- last — отобразить историю перезагрузок и регистраций юзеров в системе
- kill – послать сигнал процессу, обычно используется для принудительного завершения службы процесса.
- killall – завершение работы всех процессов, имена которых заданы метеопараметром командной строки
- top – отображение списка текущих процессов и интерактивное управление ими.
Сетевые бригады
- ifconfig – конфигурация сетевых интерфейсов
- route — таблица маршрутизации
- ifup / ifdown — подсоединить /выключить сетевой интерфейс
- ip — просмотр или изменение параметров конфигурации протокола IP
- netstat — показать состояние сетевых соединений
- arp, ping, nslookup, traceroute — наиболее часто используемые бригады сетевой диагностики.
Подсказки по использованию команд в Linux
При работе в командной оболочке Linux, в основной массе случаев, можно получить справочную информацию по использованию конкретной команды, введя ее имя с метеопараметром —help:
ls —help — отобразить справку для команды ls. В большинстве случаев, для получения справочной данных, допускается использование ключа -h
ls -h В операционных системах семейства Linux, более подробную ссылочную информацию можно получить из комплекта документации, известного как man-страницы, поскольку он доступен по бригаде man. Этот комплект включает в себя 8 разделов, содержащих справочную информацию, которую возможно вывести на экран с использованием команды man
Источник
Разбор опций командной строки в UNIX-подобных системах
Введение
POSIX
Стандарт POSIX описывает ожидаемое поведение программ в UNIX-подобных системах. При написание программы никто вас не заставит строго следовать стандарту, однако, это является хорошей идеей, так как это облегчит жизнь вашим пользователям. Вот основные правила касающиеся аргументов команды:
- в имени программы должно быть не менее 2 и не более 9 символов;
- имена программ должны быть написаны только строчными символами и цифрами;
- имя опции должно быть простым буквенно-цифровым символом. Опции с множеством цифр запрещены;
- все опции должны начинаться с символа «-«;
- для опций без аргументов должны быть реализована возможность объединения опций (например foo -a -b -c и foo -abc);
- аргумент опции должен отделятся от нее пробелом;
- аргумент опции не может быть необязательным;
- если опции требуется множество значений аргумента, они должны передаваться в виде строки, разделенные запятыми или разделителем;
- опции должны идти перед операндами;
- аргумент «—» указывает на окончание всех опций;
- порядок опций не должен играть роли, кроме случаев когда опции взаимоисключающие, тогда побеждает последняя;
- порядок аргументов может иметь значение;
- программы читающие или записывающие именованные файлы, должны трактовать единственный аргумент «-» как стандартный ввод или стандартный вывод соответственно.
Длинные опции
В GNU программах также используются длинные опции, поведение которых не описано в POSIX, длинные опции начинаются с «—» Для этих опций в GNU также реализованы следующие соглашения:
- каждая короткая опция должна иметь свой вариант длинной опции;
- длинную опцию можно сократить до кратчайшей строки, обеспечивающей ее уникальность;
- Аргументы длинной опции отделяются либо разделителем, либо знаком «=».
Откуда берутся параметры в программе
как известно функция main() в С определяется так:
int main(int argc, char *argv[])
Здесь присутствует два параметра: argc определяет количество аргументов в командной строке, а argv хранит массив указателей на эти аргументы.
Следует отметить, что argv[0] — всегда имя команды, а argv[argc] == NULL, эти два факта могут оказаться полезными при разработке.
Разбор опций
В 80-х годах группа поддержки Unix заметила, что каждая программа Unix использует собственные методы разбора опций. Что послужило толчком к разработке функции getopt(), чтобы упростить написание кода, придерживающегося стандартных соглашений.
Функция GNU getopt_long(), является совместимой с getopt(), а также упрощает разбор длинных опций.
getopt
Объявление:
#include
int getopt(int argc, char *argv[], const char *optstring);
extern char *optarg;
extern int optind, opterr, optopt;
Аргументы argc и argv передаются непосредственно от функции main(), а optstring является строкой символов опций. Если за какой либо буквой в строке следует двоеточие, значит эта опция принимает аргумент.
Для использования getopt() ее вызывают повторно в цикле, до тех пор, пока она не вернет -1. Каждый раз обнаружив действительный символ опции, функция возвращает этот символ. Если опция принимает аргумент, то указатель на него помещается в переменную optarg.
переменная optind хранит текущий индекс в argv. Когда переменная opterr не равна нулю (по умолчанию 0), getopt() сама выводит сообщения в случае недействительной опции или отсутствия аргумента. Если же opterr равен нулю, то в случае возникновения ошибки getopt() возвращает «?» или «:» в зависимости от того найдена недействительная опция или пропущен обязательный аргумент опции, в переменной optopt будет находится обнаруженный недействительный символ.
Следует заметить, что стандартная функция getopt() останавливается сразу как только найдет первый аргумент начинающийся не с символа «-«, GNU вариант функции просматривает в поисках опций, всю командную строку. Поведение GNU функции можно изменить (но это выходит за рамки статьи).
пример программы с использованием getopt()
- #include
- #include
- #include
- int main( int argc, char **argv) <
- if (argc == 1) < // если запускаем без аргументов, выводим справку
- printf( «getopt test\n» );
- printf( «usage:\n» );
- printf( » opts -a n -b m -o s\n» );
- printf( «example:\n» );
- printf( » $ opts -a 323 -b 23 -o ‘-‘\n» );
- printf( » 323 — 23 = 300\n» );
- return 0;
- >
- char *opts = «a:b:o:» ; // доступные опции, каждая принимает аргумент
- int a, b; // тут храним числа
- char op; // а тут оператор
- int opt; // каждая следующая опция попадает сюда
- while ((opt = getopt(argc, argv, opts)) != -1) < // вызываем getopt пока она не вернет -1
- switch (opt) <
- case ‘a’ : // если опция -a, преобразуем строку с аргументом в число
- a = atoi(optarg);
- break ;
- case ‘b’ : // тоже для -b
- b = atoi(optarg);
- break ;
- case ‘o’ : // в op сохраняем оператор
- op = optarg[0];
- break ;
- >
- >
- switch (op) <
- case ‘+’ : // если опаратор + складываем, и т.д.
- printf( «%d + %d = %d\n» , a, b, a + b);
- break ;
- case ‘-‘ :
- printf( «%d — %d = %d\n» , a, b, a — b);
- break ;
- case ‘*’ :
- printf( «%d * %d = %d\n» , a, b, a * b);
- break ;
- case ‘/’ :
- printf( «%d / %d = %d\n» , a, b, a / b);
- break ;
- >
- return 0;
- >
* This source code was highlighted with Source Code Highlighter .
getopt_long()
int getopt_long(int argc, char *argv[], const char *optstring, const struct option *longopts, int *longindex);
первые три аргумента те же, что и в getopt(), longopts является указателем на массив длинных опций, longindex указывает на переменную, в которую помещается индекс обнаруженной длинной опции в longopts, если в это нет необходимости может быть NULL.
Структура option определена следующим образом:
struct option
<
const char *name;
int has_arg;
int *flag;
int val;
>
name — имя опции без предшествующих черточек;
has_arg — как понятно из названия, переменная описывает имеет ли длинная опция аргумент, может принимать три значения:
- 0 — не принимает аргумент;
- 1 — обязательный аргумент;
- 2 — необязательный аргумент.
flag — если этот указатель равен NULL, то getopt_long() возвращает значение поля val, иначе она возвращает 0, а переменная на которую указывает flag заполняется значением val;
val — обычно содержит некоторую символьную константу, если длинная опция соответствует короткой, то эта константа должна быть такой же как и та что появляется в аргументе optstring.
Важно заметить, что последний элемент массива longopts, должен быть заполнен нулями.
Пример программы с использованием getopt_long()
- #include
- #include
- #include
- #include
- void usage( char *name)
- <
- printf( «usage: %s\n \ \t-h this message\n \ \t-c [config file]\n \ \t—help this message\n \ \t—config=config_file\n», name);
- return ;
- >
- int main ( int argc, char *argv[])
- <
- int c;
- while (1) <
- static struct option long_opt[] = <
- < «help» , 0, 0, 'h' >,
- < «config» , 1, 0, 'c' >,
- >;
- int optIdx;
- if ((c = getopt_long(argc, argv, «c:h» , long_opt, &optIdx)) == -1)
- break ;
- switch ( c ) <
- case ‘h’ :
- usage(argv[0]);
- return (-1);
- case ‘c’ :
- printf( «option ‘c’ selected, filename: %s\n» , optarg);
- return (1);
- default :
- usage(argv[0]);
- return (-1);
- >
- >
- return (0);
- >
* This source code was highlighted with Source Code Highlighter .
Заключение
В статье рассмотрены основы использования функций разбора аргументов командной строки в UNIX-подобных системах. Этот материал может быть более обширен, но любой заинтересовавшийся человек в состоянии узнать и изучить все тонкости самостоятельно.
Статья подготовлена по материалам книги Арнольда Роббинса «Linux программирование в примерах» ISBN 5-9579-0059-1
Источник