Как посмотреть код linux

Обновлено: 06.07.2024

Много лет тому назад, когда наша эра только-только начиналась (когда был создан первый персональный компьютер ;-)), хакеры запускали свои бэкдоры дающие шелл и т.д. и называли эти проги названиями типа top, ps, nfsd, etc для того, чтобы сисоп когда смотрел список работающих процессов думал, что эти проги нормальные системные утилиты и игнорировал их. Но технический прогресс не стоял на месте и эту фишку всё чаще и чаще стали просекать. Тогда хаксоры стали модифицировать такие системные утилиты как ps & top чтобы сисоп не мог видеть некоторые процессы, утилиты ls & du чтобы сисоп не мог видеть некоторые каталоги и файлы и т.д. Но прогресс продолжал шагать уверенным шагом вперёд в светлое будущее.

Были разработаны такие тулзы, как, например, Tripwire, которые могли стучать сисопу когда видели что какие-то файлы были модифицированы. Для того, чтобы контролировать всё больше и больше территории из одной точки хаксоры стали патчить системные библиотеки. Сисопы в ответ придумывали свои извраты. В конце концов, эта жестокая и беспощадная война руткитов и бэкдоров с системами обнаружения вторжения перешла на новое поле боя - в саму операционную систему. Хакеры
стали модифицировать самый центр операционных систем - ядро (kernel). И действительно это рульно - подкрутил немного ядро ОС в нужном месте и никакой ls не покажет твоих файлов. Даже ls с read-only диска со статической линковкой библиотечных функций будет молчать!
🙂 Кроме того, обнаружить и удалить Rootkit из ядра ОС тяжелее, чем обычный,
да и возможностей у него больше. Поэтому создание руткитов, бэкдоров и других тулзов для работы в самом сердце операционки стало очень эффективным и популярным занятием последние несколько лет. Теперь уже есть достаточно много док на эту тему, но большинство из них на английском. Кроме того, уже разработано достаточно много новых фич и те, которые описывались в доках 2-3 года назад уже устарели. Поэтому я и решил написать эту доку. Но тема эта довольно большая и сложная, так что я решил написать об этом в нескольких частях.

А теперь собственно о том как мы будем "подкручивать" операционку.
Исходники ядра Linux открыты и распространяются бесплатно. Поэтому их можно модифицировать, компилировать и создавать новое ядро таким каким надо. Но компиляция может занимать слишком много времени и к тому же надо перезагружать комп и т.д. и т.п. Так что это ломно даже для самих разработчиков ядра Linux'а. Это и стало одной из причин создания системы LKM для Linux'а. LKM - Loadable Kernel Modules - подгружаемые модули ядра.
LKM - это что-то на подобии Plug-in'ов для Web-Browser'ов
и других программ. То есть LKM реализует добавление какой-то новой возможности в уже существующую большую программу не перерабатывая ее исходный код, не перекомпилируя и не переинсталируя
ее, а просто загрузкой нужного модуля в нужный момент. Подобные системы существуют во многих ОС, но в этой статье, как я уже сказал, я затрону только LKM систему Linux'а.

Для понимания этой статьи необходимы хотя бы базовые знания языка C и ОС Linux.

Основные команды для работы с LKM модулями под
Linux:

  • lsmod - (LiSt MODules) просмотр списка загруженных модулей
  • insmod - (INStall MODule) загрузка модуля
  • rmmod - (ReMove MODule) выгрузка модуля

Основные правила и отличия программирования LKM'ов для ядра (kernel space) от обычных прог
(user space):

1. Практически нет никаких методов какого-либо контроля. В kernel'е у тебя абсолютная власть, никаких ограничений - ты Царь
🙂 (естественно тебе нужны права root'а что запустить модуль).

2. Так как практически нет методов контроля, то нет и методов исправления твоих ошибок. Если твой мод сделает что-то неправильно, то может зависнуть весь комп и kernel (ядро) убежит в "panic'е" :(. Поэтому на удаленной системе перед загрузкой модуля можешь выполнять эту команду:

$ echo "1" > /proc/sys/kernel/panic

Тогда, если произойдет panic, комп автоматически перезагрузится.

3. Нет доступа к библиотекам libc, и т.д.

4. Нет простого способа использовать системные вызовы. Иногда можно обойтись другими способами, но иногда придется
и чуть-чуть извращаться.

5. Немного другие include файлы: сначала должны быть

и другие при необходимости.

6. Вместо главной функции main() как в обычной проге в kernel module должна быть функция init_module(). А также cleanup_module() которая будет вызываться когда модуль будет выгружаться.

7. Параметры модулю должны передаваться не через переменные argc, argv, а с использованием MODULE_PARM (пример смотри в модулях ниже).

8. Вместо некоторых привычных функций надо использовать их kernel space аналоги: вместо malloc -> kmalloc, free -> kfree, printf -> printk. Причем у функции kmalloc не один аргумент, как у malloc, а два: желаемый объем памяти и ее тип. В большинстве случаев тип памяти - GFP_KERNEL но может быть и GFP_ATOMIC. Подробней об этом позже.

9. Компилировать модуль надо не в исполняемую (executable) прогу, а в объектный (object) файл (например с помощью флага -c к компилятору gcc).

А теперь давай напишем традиционный Hello World! но в виде kernel module 🙂

int init_module()
printk("Hack World!\n");
return 0;
>

Теперь в консоле (будем считать, что ты сохранил исходный код в файле mod.c):

Если ты работаешь на обычной консоле, а не на вируальной (без X'ов и не по telnet'у/ssh), то ты
увидиш текст Hack World! на экране и без команды tail.

Ну а теперь давай перейдем к более полезным наворотам.

Обнаружение и скрытие модулей.

Список загруженных модулей можно получить командой lsmod или cat
/proc/modules. А значит сисоп может обнаружить наш модуль и удалить его командой
rmmod! Так что теперь мы поговорим о том как прятать модули 🙂
Это можно сделать несколькими способами, но мы воспользуемся самым простым и эффективным. Для начала небольшое отступление.

Возможно ты уже слышал о таком методе хранения данных как "связный список". Это когда элемент списка содержит в себе данные и еще и ссылку на следующий элемент списка. Некоторую информацию очень удобно хранить и обрабатывать в таком виде. И много инфы в Linux kernel'е так и хранится - есть связный список содержащий инфу о загруженных модулях (но не модули! а инфу - то есть название, размер, состояние и т. д.). Инфа о модуле содержится в структуре module (структкра module описана в файле
/usr/src/linux/include/linux/module.h). Инфа о процессах, например, тоже хранится в связном списке в виде структуры task_struct (структура task_struct описана в файле
/usr/src/linux/include/linux/sched.h).

Когда кто-то хочет посмотреть список загруженных модулей (командой lsmod или cat /proc/modules) специальная функция (а точнее
modules_read_proc(), которая лежит в /usr/src/linux/fs/proc/proc_misc.c) проходится по связному списку инфы о модулях и выводит их названия и размер.
Для того, чтобы скрыть модуль мы просто удалим информацию о нем из этого связного списка, но сам модуль останется и будет работать дальше :).
А удалить элемент из связного списка просто - нужно в элементе, находящимся перед удаляемым, поменять значение указателя на следующий элемент
- на такой, чтобы он указывал на следующий элемент после удаляемого, а не на удаляемый.

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

char *hide;
long show=0;

// следующие 2 строки нужны чтоб передать модулю параметры (адрес или название мода для скрытия или восстановления)
MODULE_PARM(hide, "s");
MODULE_PARM(show, "l");

int init_module(void)
struct module *corr, *prec;

if(!hide) // если не указан модуль для скрытия
if(show) // если указан модуль для восстановления
// впихнуть инфу о модуле в связный список сделав его вновь видимым
((struct module *)show)->next = __this_module.next;
__this_module.next = (struct module *)show;
>
return -1;
>

prec = corr = &__this_module; // инициализируем переменные для поиска

while(corr != NULL) // проходимся по всем элементам связного списка
if(strcmp(corr->name, hide) == 0) // если название текущего модуля = названию скрываемого
printk("0x%p\n", corr); // сообщить адрес инфы о модуле, чтоб потом его можно было сделать снова видимым
prec->next = corr->next; // убираем инфу о модуле из списка меняя значение ссылки-указателя. после чего мод становится невидимым 🙂
>
prec = corr;
corr = corr->next;
>

Функция cleanup_module() не нужна, т.к. модуль сразу после загрузки и скрытия/восстановления нужного модуля делает вид, что произошла ошибка и автоматически выкидывается. insmod пишет что произошла ошибка (hmod.o: init_module: Operation not permitted . ), но это нормально и ненужно делать rmmod 🙂

Использование мода.
Компилируем:

$ insmod hmod.o hide=имя_модуля_для_прятания

Теперь модуль будет спрятан (можно проверить командой
lsmod), а адрес инфы о модуле будет выведен на консоль и в /var/log/messages

Смотрим адрес инфы о модуле:

$ tail -n 1 /var/log/messages
Oct 20 11:43:54 kernel: 0xd089200

А теперь снова показываем модуль путем впихивания инфы о модуле в связный список (необходимо указать адрес из
/var/log/messages):

$ insmod hmod.o show=0xd089200

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

К сожалению, я не смог найти базовые команды, такие как 'ls', которые мне кажутся достаточно простыми для начала.

Вы случайно не знаете какую-нибудь веб-страницу, книгу или что-то еще?

Я работаю в Ubuntu 12.04

Все эти основные команды являются частью пакета coreutils .

Вы можете найти всю необходимую информацию здесь:

Если вы хотите загрузить последний источник, вы должны использовать git:

Чтобы установить git на свой компьютер с Ubuntu, вы должны использовать apt-get (git не входит в стандартную установку Ubuntu):

sudo apt-get install git

По правде говоря, здесь вы можете найти конкретный источник для команды ls :

Всего 4984 строки кода для команды «достаточно просто» как ls . Вы все еще заинтересованы в ее чтении ?? Удачи! : D

Прямые ссылки на источники для некоторых популярных программ в coreutils :

  • cat (767 строк)
  • chmod (570 строк)
  • cp (2912 строк)
  • cut (831 строка)
  • date (570 строк)
  • df (1718 строк)
  • du (1112 строк)
  • echo (272 строки)
  • head (1070 строк)
  • hostname (116 строк)
  • kill (312 строк)
  • ln (651 строка)
  • ls (4954 строки)
  • md5sum (878 строк)
  • mkdir (306 строк)
  • mv (512 строк)
  • nice (220 строк)
  • pwd (394 строки)
  • rm (356 строк)
  • rmdir (252 строки)
  • shred (1325 строк)
  • tail (2301 строка)
  • tee (220 строк)
  • touch (437 строк)
  • wc (801 строка)
  • whoami (91 строка)

ls является частью coreutils. Вы можете получить это с помощью git:

Вы найдете coreutils в списке других пакетов (прокрутите вниз) на этой странице .

Они более четкие, умные, простые и бесполезные, например, ls.c имеет всего 369 LOC

После этого будет легче понять более сложный код GNU.

Вы можете просмотреть код в Интернете. Откройте один из архивов и проверьте папку src.

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

Он основан на Gnulib фактическом исходном коде в подкаталог lib

Вы можете найти много команд здесь:

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

Всем привет! Меня зовут Саша, и я больше шести лет занимаюсь тестированием бэкенда (сервисы Linux и API). Мысль о статье у меня появилась после очередной просьбы знакомого тестировщика подсказать ему, что можно почитать по командам Linux перед собеседованием. Обычно от кандидата на позицию QA инженера требуют знание основных команд (если, конечно, подразумевается работа с Linux), но как понять, про какие команды стоит почитать во время подготовки к собеседованию, если опыта работы с Linux мало или вовсе нет?

Поэтому, хоть про это уже и много раз написано, я всё же решился написать ещё одну статью «Linux для новичков» и перечислить здесь базовые команды, которые нужно знать перед любым собеседованием в отдел (или компанию), где используют Linux. Я подумал, какие команды и утилиты и с какими параметрами я использую чаще всего, собрал фидбек от коллег, и скомпоновал это всё в одну статью. Статья условно делится на 3 части: сначала краткая информация об основах ввода-вывода в терминале Linux, затем обзор самых базовых команд, а в третьей части описывается решение типовых задач в Linux.

У каждой команды есть много опций, здесь все они перечислены не будут. Всегда можно ввести `man <команда>` или `<команда> --help`, чтобы узнать о команде подробнее.

Если какая-то команда выполняется слишком долго, её можно завершить, нажав в консоли Ctrl+C (процессу посылается сигнал SIGINT).


Если мы выведем содержимое файла man_signal, то мы увидим, что оно идентично тому, что было бы при простом запуске команды `man signal`.


Операция перенаправления `2>&1` означает перенаправление stderr туда же, куда направлен stdout.

Еще один удобный инструмент для работы с вводом-выводом (а точнее, это удобное средство межпроцессного взаимодействия) — pipe (или конвейер). Конвейеры часто используются для связи нескольких команд: stdout команды перенаправляется в stdin следующей, и так по цепочке:

Вывести текущую (рабочую) директорию.

Вывести текущую дату и время системы.

Данная команда показывает, кто залогинен в системе. Помимо этого также на экран выводится uptime и LA (load average).

Вывести содержимое директории. Если не передать путь, то выведется содержимое текущей директории.


Лично я часто использую опции -l (long listing format — вывод в колонку с дополнительной информацией о файлах), -t (сортировка по времени изменения файла/директории) и -r (обратная сортировка — в сочетании с -t наиболее «свежие» файлы будут внизу):

Есть 2 специальных имени директории: "." и "..". Первое означает текущую директорию, второе — родительскую директорию. Их бывает удобно использовать в различных командах, в частности, ls:


Также есть полезная опция для вывода скрытых файлов (начинаются на ".") — -a:


И еще можно использовать опцию -h — вывод в human readable формате (обратите внимание на размеры файлов):

Изменить текущую директорию.


Если не передавать имя директории в качестве аргумента, будет использоваться переменная окружения $HOME, то есть домашняя директория. Также может быть удобно использовать `

` — специальный символ, означающий $HOME:

mkdir


Иногда нужно создать определенную структуру директорий: например, директорию в директории, которой не существует. Чтобы не вводить несколько раз подряд mkdir, можно использовать опцию -p — она позволяет создать все недостающие директории в иерархии. Также с этой опцией mkdir не вернет ошибку, если директория существует.


Опция -r позволяет рекурсивно удалять директории со всем их содержимым, опция -f позволяет игнорировать ошибки при удалении (например, о несуществующем файле). Эти опции позволяют, грубо говоря, гарантированно удалить всю иерархию файлов и директорий (если на это есть права у пользователя), поэтому, их нужно использовать с осторожностью (классический пример-шутка — "rm -rf /", при определенных обстоятельствах удалит вам если не всю систему, то очень много важных для её работоспособности файлов).

Копировать файл или директорию.


У этой команды также есть опции -r и -f, их можно использовать, чтобы гарантированно скопировать иерархию директорий и папок в другое место.

Переместить или переименовать файл или директорию.

Вывести содержимое файла (или файлов).


Также стоит обратить внимание на команды head (вывести n первых строк или байт файла) и tail (о ней — далее).

Вывести n последних строк или байт файла.


Очень полезной является опция -f — она позволяет выводить новые данные в файле в реальном времени.

Иногда текстовый файл слишком большой, и неудобно выводить его командой cat. Тогда можно открыть его с помощью команды less: файл будет выводиться по частям, доступна навигация по этим частям, поиск и прочий простой функционал.


Также может оказаться удобным вариант использования less с конвейером (pipe):

Вывести список процессов.


Я сам обычно использую BSD опции "aux" — вывести все процессы в системе (так как процессов может быть много, я вывел только первые 5 из них, использовав конвейер (pipe) и команду head):


Многие также используют BSD опции "axjf", что позволяет вывести дерево процессов (здесь я убрал часть вывода для демонстрации):


У этой команды много различных опций, так что при активном использовании рекомендую ознакомиться с документацией. Для большинства же случаев хватит просто знать "ps aux".

Послать сигнал процессу. По умолчанию посылается сигнал SIGTERM, который завершает процесс.


Так как процесс может иметь обработчики сигналов, kill не всегда приводит к ожидаемому результату — моментальному завершению процесса. Чтобы «убить» процесс наверняка, нужно послать процессу сигнал SIGKILL. Однако это может привести к потере данных (например, если процесс перед завершением должен сохранить какую-то информацию на диск), так что нужно пользоваться такой командой осторожно. Номер сигнала SIGKILL — 9, поэтому короткий вариант команды выглядит так:


Помимо упомянутых SIGTERM и SIGKILL существует еще множество различных сигналов, их список можно легко найти в интернете. И не забывайте, что сигналы SIGKILL и SIGSTOP не могут быть перехвачены или проигнорированы.

Послать хосту ICMP пакет ECHO_REQUEST.


По умолчанию ping работает, пока его не завершить вручную. Поэтому может быть полезна опция -c — количество пакетов, после отправки которых ping завершится самостоятельно. Ещё одна опция, которую я иногда использую — -i, интервал между посылками пакетов.

OpenSSH SSH клиент, позволяет подключаться к удаленному хосту.


Есть много нюансов в использовании SSH, также этот клиент обладает большим количеством возможностей, поэтому при желании (или необходимости) можно почитать про это более подробно.

Копировать файлы между хостами (для этого используется ssh).

rsync

Также для синхронизации директорий между хостами можно использовать rsync (-a — archive mode, позволяет скопировать полностью всё содержимое директории «как есть», -v — вывод на консоль дополнительной информации):

Вывести на экран строку текста.


Здесь заслуживают внимания опции -n — не дополнять строку переносом строки в конце, и -e — включить интерпретацию экранирования с помощью "\".


Также с помощью этой команды можно выводить значения переменных. Например, в Linux exit code последней завершенной команды хранится в специальной переменной $?, и таким образом можно узнать, какая именно ошибка произошла в последнем запущенном приложении:

telnet

Клиент для протокола TELNET. Используется для коммуникации с другим хостом.


Если нужно использовать протокол TLS (напомню, что SSL давно устарел), то telnet для этих целей не подойдёт. Зато подойдёт клиент openssl:

Пример использования openssl с выводом ответа на GET запрос

Изменить владельца файла

Изменить владельца файла или директории можно с помощью команды chown:


В параметр этой команде нужно отдать нового владельца и группу (опционально), разделенных двоеточием. Также при изменении владельца директории может быть полезна опция -R — тогда владельцы изменятся и у всего содержимого директории.

Изменить права доступа файла

Эта задача решается с помощью команды chmod. В качестве примера приведу установку прав «владельцу разрешено чтение, запись и исполнение, группе разрешено чтение и запись, всем остальным — ничего»:


Первая 7 (это 0b111 в битовом представлении) в параметре означает «все права для владельца», вторая 6 (это 0b110 в битовом представлении) — «чтение и запись», ну и 0 — это ничего для остальных. Битовая маска состоит из трёх битов: самый младший («правый») бит отвечает за исполнение, следующий за ним («средний») — за запись, и самый старший («левый») — за чтение.
Также можно выставлять права с помощью специальных символов (мнемонический синтаксис). Например, в следующем примере сначала убираются права на исполнение для текущего пользователя, а затем возвращаются обратно:


У этой команды есть много вариантов использования, поэтому советую прочитать про неё подробнее (особенно про мнемонический синтаксис, например, здесь).

Вывести содержимое бинарного файла

Это можно сделать с помощью утилиты hexdump. Ниже приведены примеры её использования.


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

Искать файлы

Найти файл по части имени в дереве каталогов можно с помощью команды find:


Также доступны другие опции и фильтры поиска. Например, так можно найти файлы в папке test, созданные более 5 дней назад:

Искать текст в файлах


Один из популярных способов использования команды grep — использование её в конвейере (pipe):


Опция -v позволяет сделать эффект grep'а обратным — будут выводиться только строки, не содержащие паттерн, переданный в grep.

Смотреть установленные пакеты

Универсальной команды нет, потому что всё зависит от дистрибутива Linux и используемого пакетного менеджера. Скорее всего вам поможет одна из следующих команд:

Посмотреть, сколько места занимает дерево директорий

Один из вариантов использования команды du:


Можно менять значение параметра -d, чтобы получать более подробную информацию о дереве директорий. Также можно использовать команду в комбинации с sort:


Опция -h у команды sort позволяет сортировать размеры, записанные в human readable формате (например, 1K, 2G), опция -r позволяет отсортировать данные в обратном порядке.

«Найти и заменить» в файле, в файлах в директории

Данная операция выполняется с помощью утилиты sed (без флага g в конце заменится только первое вхождение «old-text» в строке):


Можно использовать её для нескольких файлов сразу:

Вывести колонку из вывода


При этом надо иметь ввиду, что awk обладает гораздо более богатым функционалом, так что при необходимости работы с текстом в командной строке стоит почитать об этой команде подробнее.

Узнать IP адрес по имени хоста

С этим поможет одна из следующих команд:

Сетевая информация

Можно использовать ifconfig:


А можно и ip:


При этом, если, например, вас интересует только IPv4, то можно добавить опцию -4:

Посмотреть открытые порты

Для этого используют утилиту netstat. Например, чтобы посмотреть все слушающие TCP и UDP порты с отображением PID'а процесса, слушающего порт, и с числовым представлением порта, нужно использовать ее со следующими опциями:

Информация о системе

Получить данную информацию можно с помощью команды uname.


Чтобы понять, в каком формате производится вывод, можно обратиться к help'у данной команды:

Информация о памяти

Чтобы понять, сколько оперативной памяти занято или свободно, можно воспользоваться командой free.

Информация о файловых системах (свободное место на дисках)

Команда df позволяет посмотреть, сколько места свободно и занято на примонтированных файловых системах.


Опция -T указывает, что нужно выводить тип файловой системы.

Информация о задачах и различной статистике по системе

Для этого используется команда top. Она способна вывести разную информацию: например, топ процессов по использованию оперативной памяти или топ процессов по использованию процессорного времени. Также она выводит информацию о памяти, CPU, uptime и LA (load average).


Эта утилита обладает богатым функционалом, так что если вам надо часто ей пользоваться, лучше ознакомиться с её документацией.

Дамп сетевого трафика

Для перехвата сетевого трафика в Linux используется утилита tcpdump. Чтобы сдампить трафик на порте 12345, можно воспользоваться следующей командой:


Опция -A говорит о том, что мы ходим видеть вывод в ASCII (поэтому это хорошо для текстовых протоколов), -i any указывает, что нас не интересует сетевой интерфейс, port — трафик какого порта дампить. Вместо port можно использовать host, либо комбинацию host и port (host A and port X). И еще полезной может оказаться опция -n — не конвертировать адреса в хостнеймы в выводе.
Что если трафик бинарный? Тогда нам поможет опция -X — выводить данные в hex и ASCII:


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

Справочник основных команд Linux

Одним из коренных отличий семейства ОС Linux от ОС Windows является ведущая роль командной строки или терминала в администрировании системы. Для успешной работы с «Линукс» одного графического интерфейса недостаточно. Полноценное управление тут возможно только через терминал. А в работе с терминалом никак не обойтись без изучения основных команд Linux.

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

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

Справочная информация / документация

(Manual). Показывает инструкцию к программам и командам Linux. Чтобы получить руководство для программы, наберите:

Для инструкции по команде, введите:

whatis

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

whereis

Показывает полный путь к исполняемому файлу и другим файлам программы. Пример:

Вся необходимая информация о команде будет доступна, если набрать:

whoami

Ctrl + R

Права суперпользователя

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

Способы получить права root в Linux

О втором варианте расскажем подробнее.

(Super User Do). Позволяет исполнять команды с правами суперпользователя. Перед переходом в режим root администратора система выполнит запрос пароля и логина root. Пример:

sudo su

sudo gksudo

Максимальную производительность приложений Linux зависит от правильного подбора платформы для ОС. Мощный виртуальный сервер от Eternalhost обеспечит интернет-ресурсу стабильную работу и пространство для развития.

Управления файлами и каталогами

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

Для показа скрытых файлов:

(Concatenate / Catenate). Команда двойного назначения. Показывает на экране что содержит файл или стандартный ввод. Также к «склеивает» несколько переданных подряд файлов в один. Если нужно посмотреть содержимое одного файла, вводим:

Если нужно узнать содержимое нескольких файлов подряд:

Для «склейки» файлов, вводим:

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

(Change Directory). Меняет текущий каталог, в котором работает терминал на указанный. Когда терминал запущен, он использует по умолчанию корневой каталог (root), вернуться в который можно, набрав:

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

Чтобы подняться по древу каталогов на уровень вверх набираем:

Чтобы вернуться к предыдущей директории:

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

mkdir

(Make Directory). Создаёт новую директорию. Можно также создать полную структуру подкаталогов, если ввести сочетание:

(Copy). Утилита, позволяющая скопировать файл или каталог. Копирование файлов и каталогов. Чтобы копирование прошло рекурсивно, т. е. включало все поддиректории и файлы в них, надо добавить к команде:

А если надо дополнить рекурсивное копирование сохранением всех атрибутов, сведения о владельце и временный штамп, добавляем «архивную» опцию -a, чтобы получилось:

(Remove). Отвечает за удаление папок и файлов. Использовать оператор rm следует крайне осторожно. В Linux файлы удаляются не в корзину, откуда их можно восстановить, а стираются безвозвратно. Для рекурсивного удаления используйте сочетание:

(Link). Создаёт программные ссылки на файлы. По функционалу это похоже на ярлыки в Windows.

Типы ссылок Linux

  • символические ( -s ) – указание на адрес файла ил папки без метаданных;
  • твёрдые или жёсткие ( -P ) – содержат сведения о физическом адресе на диске, где хранится файл.
    Удалить ссылку в Linux можно при помощи атрибута –f .

chmod

(Change Mode). Изменяет разрешения доступа к файлу. Под доступом имеется в виду классическая триада: чтение r, изменение w и запуск x. Общий вид:

Популярные комбинации разрешений для команды chmod

chown

(Change Owner). Команда для смены владельца файла и его группы. Для смены владельца используем синтаксис:

Для смены группы файла:

Если надо поменять оба параметра:

Команду можно применить только с правами суперпользователя. Чтобы изменить владельца/группу рекурсивно добавляем:

chgrp

(Disk Free). Даёт полную информацию о свободном пространстве на диске. Анализ включает перечисление файловых систем смонтированных разделов, обзор занятого и свободного места на диске. Для более удобного вывода информации, лучше применять сочетание:

Читайте также: