Компилируем и запускаем программы C, C++ в Linux

В данной статья я расскажу вам про 10ть команд Linux с помощью которых можно собрать информацию о системе и оборудовании.

Список ключей для команды ls.

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

  • -l — вывод подробной информации о содержимом каталога в виде списка;
  • -a (—all) — вывод информации о всех имеющихся объектах явных и скрытых;
  • -A (—allmost-all) — вывод информации о всех имеющихся явных и скрытых объектах (за исключением объектов «.» и «..»);
  • -d (—directory) — вывод информации о директории без вывода его содержимого;
  • -F — к объектам являющимся каталогами добавит в конце символ слеш «/», к объектам являющимися исполняемыми файлами добавляется «*», к объектам являющимися символьными ссылками — «@»;
  • -r (—reverse) — данные ключи меняют сортировку на обратную;
  • -i — отображение номера индексных дескрипторов объектов;
  • -S — сортировка объектов по размеру от большого к меньшему;
  • -Sr — сортировка объектов по размеру от меньшего;
  • -t — сортировка объектов по времени модификации файлов;
  • -R (—recursive) — вывод информации об имеющихся объектах в том числе и объектах во вложенных каталогах.

Способы работы с командой ls и ее ключи, упоминаемые в статье это далеко не весь список. Если вы желаете использовать всю мощь этой на первый взгляд простой команды, то как уже упоминалось ранее, более подробную информацию можно получить при вызове встроенного мануала $ man ls .

Как составить список пользователей в Ubuntu Linux VPS: руководство для начинающих

Если вы хотите просмотреть всех пользователей в Linux Ubuntu VPS, вы можете использовать команду /etc/passwd, поскольку данные локального пользователя сохраняются в файле «/etc/passwd». Есть два способа выполнить эту команду, а именно:

cat /etc/passwd

Или же

less /etc/passwd

После успешного выполнения указанной выше команды вы получите следующий результат:

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

Каждая строка содержит семь разных полей, которые представляют подробные сведения о конкретном пользователе. Например, первая строка вывода — это root:x:0:0:root:/root:/bin/bash, что означает:

Как составить список пользователей в Ubuntu Linux VPS: руководство для начинающих
  • root — логин пользователя.
  • b — заполнитель пароля, так как фактический пароль сохраняется в отдельном файле.
  • 0 — UserID пользователя.
  • 0 — GroupID пользователя.
  • root — командное поле с некоторыми подробностями о пользователе.
  • /root — домашний каталог, который является основным каталогом пользователя.
  • /bin/bash — оболочка пользователя.

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

Выполните следующие команды, чтобы увидеть имена пользователей:

cut -d : -f 1 /etc/passwd

Или же

awk -F: ‘{ print $1}’ /etc/passwd

Опции командной строки

В истории развития операционной системы UNIX программы использовали разные способы задания своих опций: ♦ односимвольные, например ls -а -l (что эквивалентно ls -l -а или ls -al или ls -la); ♦ многосимвольные, например find /var  -xdev; ♦ длинные, например ps  —help; ♦ с аргументами, например kill  -n  15 1, или kill  -n15  1, или du  -В  M, или  du -BM,

Читайте также:  В Skype появился продвинутый аналог секретных чатов

или find /etc -type d, или даже ls —sort=slze;

♦ «нестандартные», например set +x,  tar  czf ~ или dd  if=/dev/dvd  of=.

Знак «минус», предваряющий опции, естественно используется для того, чтобы отличать их от аргументов. Среди прочих, он был выбран потому, что редко встречается как первый символ в аргументах команд (в качестве которых зачастую выступают имена файлов).

И еще потому, что на терминале классической UNIX набор более логичного знака «плюс» (что могло бы означать «включить»,«активировать») требовал достаточных усилий по нажатию клавиши SHIFT. В результате получилось, что, например, в команде set опция х (execution trace) в форме -х включает, а +х выключает трассировку выполнения команд.

В тех редких случаях, когда аргумент команды все же начинается с символа «минус» и тем самым похож на опцию (представим, что нужно выполнить действие над файлом с именем -=filenames=-), специальная опция — сигнализирует о конце списка опций, за которым следуют лексемы, обязанные расцениваться как аргументы, вне зависимости от их написания.

Конец списка опций

[email protected]: ~$ stat -=filename=-

stat: неверный ключ —  «=» Попробуйте «stat —help» для получения более подробного описания.

[email protected]: ~$ stat  — —  -=filename=-

Файл: «-=filename=-» Размер:  0                         Блоков: 0                     Блок B/B: 4096         пустой обычный файл Устройство: fc00h/64512d                  Inode: 26870044            Ссылки: 1 Доступ: (0600/-rw -)                      Uid: (  1000/    john)                Gid: ( 1000/     john) Доступ: 2018-08-24    01:37: +0300

Модифицирован: 2018-08-24 01:37: +0300

Изменён: 2018-08-24 01:37: +0300

Создан: —

Короткие, односимвольные опции (например -l -а) без своих аргументов издревле можно было объединять в группы (-lа или -al), однако их в этом случае сложно отличать от многосимвольных (-xdev) или односимвольных, склеенных со своими аргументами (-ВМ).

Поэтому позже появились длинные (в так называемом GNU-стиле) опции, обозначаемые двумя знаками «минус», позволяющие навести некоторый порядок в виде —block-size=M вместо -ВМ или, предположим,

—dont-descent вместо -xdev.

Командный интерфейс Linux

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

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

Читайте также:  Как обновить Айпад 2 до iOS 10 без компьютера: подробная инструкция

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

Именно командный интерфейс в современном виде — аудиоформе — больше не является уделом художественных фантастических произведений, где капитаны межгалактических кораблей командуют кораблям «включить защитное поле». Теперь мы все можем при помощи командного аудиоинтерфейса смартфона найти ближайшую пиццерию или маршрут к нужному месту. Надеюсь, что и алфавитно-цифровая форма командного интерфейса, доставшаяся «в наследство» от UNIX из 70-х годов прошлого века, вас тоже не особо испугает. Ok, Google?

Забытая история bash.

Если вы открыли терминал и печатаете там команды, потом открыли еще один, немного его поиспользовали, то новый терминал не «вспомнит» ни одной команды, напечатанной в первом. Вдобавок, при закрытии первого терминала второй перезапишет все команды в истории, введённые в первом. Вдвойне досадно!

Это происходит потому, что история bash сохраняется только когда вы закрываете терминал, а не после каждой команды. Чтобы исправить такое поведение, добавьте в ~/.bashrc строки:

shopt -s histappend PROMPT_COMMAND=`history -a`

Добавьте следующую строку, если переменная $PROMPT_COMMAND уже была задана :

PROMPT_COMMAND=‘$PROMPT_COMMAND; history -a’

Это заставит bash дополнять историю вместо того, чтобы перезаписывать её: каждый раз, когда показывается приглашение командной строки, последняя команда добавляется в историю.

Создание папки и просмотр сведений о её владельце, группе и правах доступа

Создадим папку folder командой mkdir так, как описано в → этой статье. Если действовать по такой же схеме, как и описано выше, то окажется, что этого недостаточно. Будет выдана информация только о размере папки:

[email protected]:~# ls -l folder total 0

Поэтому с папками при просмотре сведении о ней работаем по такой схеме: смотрим информацию не об этой папке, а общую информацию о всей папке. Тогда информация о вложенных в неё файлах и папках выдаётся в полной мере:

[email protected]:~# ls -l total 4 -rw-r—r— 1 root root 0 Apr 10 21:06 file drwxr-xr-x 2 root root 4096 Apr 10 21:18 folder

Как отличить папку от файла в linux

Сразу на этом примере остановлюсь на вопросе о том, как отличить папку от файла в linux. В самом начале строки в символах о правах доступа у файла первым символом идет — тогда, как у папки первый символ это буква d. Именно это отличает папку от файла.

Лог загрузки

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

Читайте также:  Как включить вай фай на ноутбуке hp и установить драйвера на wi-fi

sudo dmesg

Лог загрузки

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

sudo dmesg | grep sda

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

sudo dmesg | grep error

Лог загрузки

И так далее.  Информация, которую выводит команда dmesg, хранится в log файле /var/log/dmesg.

Компиляция и запуск программ C, C++

Сначала посмотрим, как скомпилировать и запустить простую программу, написанную на языке Си.

Компиляция и запуск программ на C

Напишите свой код/программу в любимом редакторе CLI/GUI.

Я собираюсь написать свою программу на Си с помощью редактора nano.

$ nano ostechnix.c

Примечание. Вам необходимо использовать расширение .c для программ на Си или .cpp для программ на Си++.

Скопируйте/вставьте следующий код:

#include <stdio.h> int main() { printf(«Welcome To OSTechNix!»); return 0; }

Нажмите Ctrl+O и Ctrl+X для сохранения и выхода из файла.

Чтобы скомпилировать программу, запустите:

$ gcc ostechnix.c -o ostechnix

Или:

$ cc ostechnix.c -o ostechnix

Если в вашем коде/программе есть синтаксические или семантические ошибки, они будут отображены. Сначала необходимо их исправить, чтобы двигаться дальше. Если ошибки нет, то компилятор успешно сгенерирует исполняемый файл ostechnix в текущем рабочем каталоге.

Наконец, запустите программу с помощью команды:

$ ./ostechnix

Вы увидите вывод, как показано ниже:

Welcome To OSTechNix!

Чтобы скомпилировать несколько исходных файлов (например, source1 и source2) в исполняемый файл, запустите:

$ gcc source1.c source2.c -o executable

Для разрешения предупреждений, необходима отладка символов на выходе:

$ gcc source.c -Wall -Og -o executable

Скомпилировать исходный код в инструкции ассемблера:

$ gcc -S source.c

Скомпилировать исходный код без связывания:

$ gcc -c source.c

Вышеприведенная команда создаст исполняемый файл под названием source.o.

Если ваша программа содержит математические функции:

$ gcc source.c -o executable -lm

За более подробной информацией обращайтесь к man-страницам (страницы руководства).

$ man gcc

Компиляция и запуск программ на C++

Напишите вашу C++ программу в любом редакторе по вашему выбору и сохраните ее с расширением .cpp.

Пример простой C++ программы:

$ cat

Программа:

#include <iostream> int main() { std::cout << «Welcome To OSTechNix!» << std::endl; return 0; }

Чтобы скомпилировать эту программу на C++ в Linux, просто запустите:

$ g++ -o ostechnix

Если ошибок не было, то можно запустить эту Си++ программу под Linux с помощью команды:

$ ./ostechnix

Выведет:

Welcome To OSTechNix!

В качестве альтернативы мы можем скомпилировать приведенную выше программу на C++, используя команду «make«, как показано ниже.

$ make ostechnix

Вы заметили? Я не использовал расширение .cpp в вышеприведенной команде для компиляции программы. Нет необходимости использовать расширение для компиляции Си++ программ с помощью команды make.

Запустите, используя команду:

$ ./ostechnix Welcome To OSTechNix!

За более подробной информацией обращайтесь к man-страницам.

$ man g++

Надеюсь, что статья помогла.