Когда люди говорят о Linux, они обычно имеют в виду дистрибутив Linux. Строго говоря, Linux — это ядро, основной компонент операционной системы, который, проще говоря, действует как мост между программными приложениями и оборудованием. Дистрибутив Linux — это операционная система, состоящая из ядра Linux, инструментов и библиотек GNU, а также коллекций программного обеспечения. Обычно дистрибутивы Linux включают среды рабочего стола, систему управления пакетами и набор предустановленных приложений.
Некоторые из самых популярных дистрибутивов Linux — это Debian, Red Hat, Ubuntu, Arch Linux, Fedora, CentOS, Kali Linux, OpenSUSE, Linux Mint и т. Д.
Когда вы впервые входите в систему Linux, прежде чем выполнять какую-либо работу, всегда полезно проверить, какая версия Linux работает на машине. Например, определение дистрибутива Linux может помочь вам понять, какой менеджер пакетов вам следует использовать для установки новых пакетов.
В этой статье показано, как с помощью командной строки проверить, какой дистрибутив и версия Linux установлены в вашей системе.
Вопрос — ответ #4 — Как читать исходный код других программ? Зачем?
команда lsb_release
Утилита lsb_release отображает информацию LSB (Linux Standard Base) о дистрибутиве Linux. Эта команда должна работать во всех дистрибутивах Linux, в lsb-release установлен пакет lsb-release :
lsb_release -a
No LSB modules are available. Distributor ID: Debian Description: Debian GNU/Linux 9.5 (stretch) Release: 9.5 Codename: stretch
Дистрибутив и версия Linux показаны в строке описания. Как видно из вывода выше, в моей системе установлен Debian GNU / Linux 9.5 (stretch).
Вместо того, чтобы печатать всю приведенную выше информацию, вы можете отобразить строку описания, в которой ваша версия Debian -d ключом -d .
lsb_release -d
Результат должен выглядеть примерно так:
Description: Debian GNU/Linux 9.5 (stretch)
Если вы получили сообщение «команда не найдена: lsb_release», вы можете попытаться определить версию Linux, используя другие методы, указанные ниже.
/etc/os-release файл
Файл /etc/os-release содержит идентификационные данные операционной системы, включая информацию о дистрибутиве. Этот файл является частью пакета systemd и должен присутствовать во всей системе, в которой работает systemd.
Чтобы просмотреть содержимое файла os-release , используйте cat или less :
cat /etc/os-release
Результат должен выглядеть примерно так:
PRETTY_NAME=»Debian GNU/Linux 9 (stretch)» NAME=»Debian GNU/Linux» VERSION_ID=»9″ VERSION=»9 (stretch)» ID=debian HOME_URL=»https://www.debian.org/» SUPPORT_URL=»https://www.debian.org/support» BUG_REPORT_URL=»https://bugs.debian.org/»
/etc/issue файл /etc/issue
Файл /etc/issue содержит текст идентификации системы, который печатается перед запросом на вход. Обычно этот файл содержит информацию о версии Linux:
cat /etc/issue
Результат будет выглядеть примерно так:
Debian GNU/Linux 9 n l
команда hostnamectl
Утилита hostnamectl является частью systemd и используется для запроса и изменения имени хоста системы. Эта команда также отображает дистрибутив Linux и версию ядра .
Как ВЗЛОМАТЬ приложение и получить ИСХОДНЫЙ КОД программы? [Reverse engineering, JetBrains dotPeek]
hostnamectl
Static hostname: debian9.localdomain Icon name: computer-vm Chassis: vm Machine ID: a92099e30f704d559adb18ebc12ddac4 Boot ID: 7607cbe605d44f638d6542d4c7b3878e Virtualization: qemu Operating System: Debian GNU/Linux 9 (stretch) Kernel: Linux 4.9.0-8-amd64 Architecture: x86-64
/etc/*release файл /etc/*release
Если ни одна из вышеперечисленных команд у вас не работает, то, скорее всего, вы используете очень старый и устаревший дистрибутив Linux. В этом случае вы можете использовать одну из следующих команд, которая должна распечатать содержимое файла выпуска или версии дистрибутива:
cat /etc/*release
cat /etc/*version
Вы можете найти больше информации о файлах релиза / версии по этой ссылке .
команда uname
Команда uname отображает несколько системной информации, включая архитектуру ядра Linux, имя, версию и выпуск.
Чтобы узнать, какая версия ядра Linux работает в вашей системе, введите следующую команду:
uname -srm
Linux 4.9.0-8-amd64 x86_64
Приведенный выше вывод говорит нам, что ядро Linux 64-битное, а его версия — «4.9.0-8-amd64».
Выводы
Есть несколько различных команд, которые могут помочь вам узнать дистрибутив Linux и версию, работающую в системе.
Если у вас есть дистрибутив Linux со средой рабочего стола, вы также можете проверить свой дистрибутив и версию с помощью графического интерфейса.
Не стесняйтесь оставлять комментарии, если у вас есть вопросы.
Источник: routerus.com
Как просмотреть и просмотреть исходный код ядра Linux? — Подсказка по Linux
Ядро Linux — это ядро операционной системы (ОС), которое позволяет ей поддерживать оборудование, протоколы и многое другое и управлять ими. В этом руководстве будет кратко объяснена структура исходного кода ядра. Корневая папка ядра, расположенная в / usr / src /, обычно / usr / src / linux *, содержит его исходный код, подобный тому, который вы можете просмотреть по адресу https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/?h=v5.1.3
Исходный каталог содержит следующие подкаталоги, называемые дерево ядраизучение структуры дерева ядра и функции каждого пути — это первый шаг к просмотру ядра.
Корневой каталог дерева ядра:
Документация/: исходная документация ядра.
ЛИЦЕНЗИИ /: Он содержит лицензии, которые должны применяться к исходному тексту ядра и отдельным исходным файлам, которые могут иметь разные лицензии. Внутри этого каталога вы найдете 3 подкаталога: предпочтительный (GNU GPL), исключения перечислены в файле КОПИРОВАНИЯ и Другой.
арка /: исходные коды для конкретных архитектур (например, powerpc, x86 и т. д.). Внутри этого каталога вы найдете подкаталоги, принадлежащие каждой поддерживаемой архитектуре: i386, sparc, arm и т. Д.
блокировать/: Уровень блочного ввода-вывода, содержит код для управления блочными устройствами (такими как жесткие диски, DVD, гибкие диски и т. д.) и их запросы.
Сертификаты /: сертификаты и файлы подписи, чтобы включить подпись модуля, чтобы ядро загружало подписанные модули, это может быть полезно для предотвращения запуска вредоносного кода с такими модулями ядра, как руткиты.
Крипто /: Крипто API. Содержит криптографические шифры, которые решают задачи шифрования и сжатия.
драйверы /: Драйверы аппаратных устройств. Содержит код драйверов устройств для поддержки оборудования. В этом каталоге вы найдете подкаталоги для каждого оборудования, такого как видео, Bluetooth и т. Д. (Любое поддерживаемое оборудование).
fs /: код для виртуальной файловой системы и дополнительных файловых систем. Этот каталог содержит код для поддержки, чтения и записи файловых систем.
включают/: заголовки ядра. Этот каталог содержит заголовки C для файлов ядра, таких как функции для компиляции кода.
в этом/: загрузка ядра. Содержит исходный код, связанный с инициализацией ядра. Исходный код хранится в файле с именем mainc.c в каталоге /init. Код инициализирует ядро и некоторые начальные процессы.
ipc /: Межпроцессное взаимодействие, такое как сигналы и каналы.
ядро /: Основные подсистемы, такие как код обработки сигналов планировщика и т. Д.
lib /: библиотечные подпрограммы стандартные строковые операции, операции, зависящие от оборудования, отладочные подпрограммы и код синтаксического анализа командной строки.
мм /: Управление памятью и виртуальной памятью. Ядро управляет как оборудованием, так и виртуальной памятью (свопинг). В этом каталоге хранится код для управления памятью.
сеть/: Сетевой стек. Содержит код, связанный с протоколами связи, такими как IP, TCP, UP и т. Д.
образцы /: пример кода и файлы конфигурации.
скрипты /: скрипты для сборки ядра.
безопасность/: Модуль безопасности Linux (LSM) — это структура, позволяющая использовать политики безопасности для управления модулями.
звук/: Звуковая подсистема, здесь вы найдете звуковые драйверы и код, связанный со звуком, например ALSA,
инструменты/: инструменты для разработки сжатого ядра, такие как ACPI, cgroup, инструменты тестирования USB, тестовый модуль vhost, инструменты GPIO, IIO и spi, инструмент внутренней энергетической политики и многое другое.
usr /: initramfs, который укореняет файловую систему и init в кеш памяти ядра.
virt /: Виртуализация, этот каталог содержит модуль KVM (Kernel Virtual Machine) для гипервизора.
Это основные подкаталоги дерева ядра и их функции, надеюсь, они вам пригодятся.
Источник: ciksiti.com
Русские Блоги
Несколько способов для Linux получить исходный код веб-страницы
Блог JavaEye был запущен, когда я был аспирантом, и был в основном заброшен. Теперь я решил записать проблемы или решения, встречающиеся в обычном программировании.
Первый — использовать инструменты из linux для получения исходного кода веб-страницы. Я использую Wget и также могу использовать Curl. Если curl более гибок, можно установить много параметров.
// Получить веб-страницу через Wget
string GetHtmlByWget(string url)
// Получить имя файла загружаемой веб-страницы
string fileName = url.substr((int)url.find_last_of(«/») + 1);
if(fileName != «»)
string strCom = «wget -q»; // команда wget, -q означает, что не отображать информацию о загрузке
strCom.append(url);
system (strCom.c_str ()); // Выполнить wget
ifstream fin(fileName.c_str());
if(!fin)
return «»;
>
string strHtml = «»;
char chTemp[1024] = «»;
// Чтение файла веб-страницы в память
while(fin.getline(chTemp , 1024))
strHtml.append(string(chTemp));
strcpy(chTemp , «»);
>
fin.close();
strCom = «rm -f»; // Команда удаления файла, -f означает прямое удаление без запроса
strCom.append(fileName);
system (strCom.c_str ()); // Удалить только что скачанный файл
return strHtml; // Возврат к исходному коду веб-страницы
>
else
return «»;
>
>
Второе — использовать сокет для получения исходного кода.
// Получить исходный код веб-страницы через GET
string GetHtmlByGet(string url)
string strHtmlContent = «»;
int sockfd;
struct sockaddr_in addr;
struct hostent *pURL;
char text[RECVBUF];
// Анализируем ссылку
UrlInfo urlInfo = ParseURL(url);
string sAccept = «Accept: */*rnAccept-Language: zh-cnrnAccept-Encoding: gzip, deflate»;
// Другой хост UserAgent отличается
string sUserAgent = «Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/534.10 (KHTML, like Gecko) Chrome/8.0.552.224 Safari/534.10»;
// Преобразовать порт в строку
char t[6];
string strPort;
sprintf(t,»%d», urlInfo.Port);
strPort = t;
// Построить строку отправки
string strRequest = «»;
strRequest.append(«GET «);
strRequest.append(urlInfo.File);
strRequest.append(«?»);
strRequest.append(urlInfo.Body);
strRequest.append(» HTTP/1.1rn»);
strRequest.append(sAccept);
strRequest.append(«rnUser-Agent:»);
strRequest.append(sUserAgent);
strRequest.append(«rnHost:»);
strRequest.append(urlInfo.Host);
strRequest.append(«:»);
strRequest.append(strPort);
strRequest.append(«rnConnection: Keep-Alivernrn»);
char* host = const_cast(urlInfo.Host.c_str());
sockfd = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP); // Отправить по TCP
pURL = gethostbyname(host);
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = *((unsigned long*)pURL->h_addr);
addr.sin_port = htons(80);
// Connect
connect(sockfd,(struct sockaddr *)
// отправить
send(sockfd, const_cast(strRequest.c_str()), strRequest.length(), 0);
// принять
while(recv(sockfd, text, RECVBUF, 0) > 0)
strHtmlContent.append(text);
bzero(text,RECVBUF);
>
// Закрыть сокет
close(sockfd);
// Возвращаем результат принятия
return strHtmlContent;
>
#include
#include
#include
#define MAX_BUF 65536
char wr_buf[MAX_BUF+1];
int wr_index;
/*
* Write data callback function (called within the context of
* curl_easy_perform.
*/
size_t write_data( void *buffer, size_t size, size_t nmemb, void *userp )
<
int segsize = size * nmemb;
/* Check to see if this data exceeds the size of our buffer. If so,
* set the user-defined context value and return 0 to indicate a
* problem to curl.
*/
if ( wr_index + segsize > MAX_BUF ) <
*(int *)userp = 1;
return 0;
>
/* Copy the data from the curl buffer into our buffer */
memcpy( (void *)
/* Update the write index */
wr_index += segsize;
/* Null terminate the buffer */
wr_buf[wr_index] = 0;
/* Return the number of bytes received, indicating to curl that all is okay */
return segsize;
>
/*
* Simple curl application to read the index.html file from a Web site.
*/
int main( void )
<
CURL *curl;
CURLcode ret;
int wr_error;
wr_error = 0;
wr_index = 0;
/* First step, init curl */
curl = curl_easy_init();
if (!curl) <
printf(«couldn’t init curln»);
return 0;
>
/* Tell curl the URL of the file we’re going to retrieve */
curl_easy_setopt( curl, CURLOPT_URL, «www.exampledomain.com» );
/* Tell curl that we’ll receive data to the function write_data, and
* also provide it with a context pointer for our error return.
*/
curl_easy_setopt( curl, CURLOPT_WRITEDATA, (void *)
curl_easy_setopt( curl, CURLOPT_WRITEFUNCTION, write_data );
/* Allow curl to perform the action */
ret = curl_easy_perform( curl );
printf( «ret = %d (write_error = %d)n», ret, wr_error );
/* Emit the page if curl indicates that no errors occurred */
if ( ret == 0 ) printf( «%sn», wr_buf );
curl_easy_cleanup( curl );
return 0;
>
Источник: russianblogs.com