# Linux (с курса Игоря Литвина) ## Команды общего назначения ### ls Вывод содержимого директории Ключи: - -a: вывести все включая скрытые файлы - -A: то же, что и -a, но без вывода . и . . - -l: подробный вывод (права доступа, жесткая ссылка на файл, владелец, группа, размер в байтах, дата изменения, имя) - -s: выводит размеры файлов - -S: сортирует по размеру, от большего к меньему - -h, используемый вместе с -l или -s представляет размеры файлов в виде мб/гб, т.е. человекочитаемом - -d: выводит только директории без их содержимого - -R: рекурсия, выводит директории и их содержимое, а также содержимое директорий внутри них - -i: выводит значения inode ### mkdir Создание директории. Если не указывать путь, то директория создатся внутри текущей. ```bash= $ mkdir test $ mkdir /home/test ``` По дефолту директория создатся, если путь к ней существует. Если нужно создать несколько директорий, указанных в пути, нужно указать опцию -p ```bash= $ mkdir -p easy/as/pie ``` ### touch touch обновляет mtime у указанного файла. Если файла не существует, он создается. В основном эта команда как раз для этого и используется. ### echo Выводит в поток то, что подается на вход команде. Часто используется с перенаправлениями: ```bash= $ echo “Hello World!” > copyme $ cat copyme Hello World! ``` ### mv Перемещение файлов. ```bash= $ mv /var/tmp/myfile.txt /home/drobbins ``` Часто используется для переименования файлов: ```bash= $ mv copiedme movedme $ ls -i movedme 648284 movedme ``` Также можно перемещать несколько файлов в одну директорию за раз: ```bash= $ mv /var/tmp/myfile1.txt /var/tmp/myarticle3.txt /home/drobbins ``` ### ln Создание ссылок. Без аргументов создаст жесткую сслыку: ```bash= $ cd /tmp $ touch firstlink $ ln firstlink secondlink $ ls -i firstlink secondlink 15782 firstlink 15782 secondlink ``` С аргументом -s создаст символьную ссылку: ```bash= $ ln -s secondlink thirdlink $ ls -l firstlink secondlink thirdlink -rw-rw-r-- 2 agriffis agriffis 0 Dec 31 19:08 firstlink -rw-rw-r-- 2 agriffis agriffis 0 Dec 31 19:08 secondlink lrwxrwxrwx 1 agriffis agriffis 10 Dec 31 19:39 thirdlink -> secondlink ``` ### rm Удаление файлов. Аргументы: * -r: рекурсивное удаление, удаляет все вложенные директории с вложенными файлами * -f: не возвращать код ошибочного завершения, если ошибки были вызваны несуществующими файлами; не запрашивать подтверждения операций. * --no-preserve-root: если в качестве директории для удаления задан корневой раздел /, то считать, что это обычная директория и начать выполнять удаление. ```bash= $ echo 'Вам пиздец' $ sudo rm -rf --no-preserve-root /* ``` ### which Все программы, которые вызываются командой, должны находить в PATH переменной окружения. Проверить, находится ли там команда, можно с помощью which: ```bash= $ which sudo /usr/bin/sudo ``` ### find Параметры: -P - никогда не открывать символические ссылки. -L - получает информацию о файлах по символическим ссылкам. Важно для дальнейшей обработки, чтобы обрабатывалась не ссылка, а сам файл. -maxdepth - максимальная глубина поиска по подкаталогам, для поиска только в текущем каталоге установите 1. -depth - искать сначала в текущем каталоге, а потом в подкаталогах. -mount искать файлы только в этой файловой системе. -version - показать версию утилиты find. -print - выводить полные имена файлов. -type f - искать только файлы. -type d - поиск папки в Linux. Критерии поиска: -name - поиск файлов по имени. -perm - поиск файлов в Linux по режиму доступа. -user - поиск файлов по владельцу. -group - поиск по группе. -mtime - поиск по времени модификации файла. -atime - поиск файлов по дате последнего чтения. -nogroup - поиск файлов, не принадлежащих ни одной группе. -nouser - поиск файлов без владельцев. -newer - найти файлы новее чем указанный. -size - поиск файлов в Linux по их размеру. Программа для поиска файлов в директории(ях). * -iname: игнорирование регистра ```bash= $ find /usr/share/doc -iname readme\* ``` * -regex: поиск по регулярке * -igerex: поиск с игнорированием результатов регулярки * -type: искать файлы опр. типа. Возможные аргументы для -type это: b (блочное устройство), c (символьное устройство), d (директория), p (именованый канал), f (обычный файл), l (символическая ссылка), и s (сокет). * -mtime: поиск файлов по дате последнего изменения. Поиск файлов, измененных в посл. 24 часа: ```bash= $ find . -name \? -mtime -1 ./a ``` Или файлы которые были изменены до текущего 24-часового периода: ```bash= $ find . -name \? -mtime +0 ./b ./c ./d ``` * -size: поиск файлов по их размеру. По умолчанию, аргумент -size это количество 512-байтных блоков, но добавляя к опции суффикс, можно сделать вывод более понятным. Доступные суффиксы: b (512-байтные блоки), c (байт), k (килобайт), и w (2-байтные слова). Дополнительно, перед аргументом можно указать плюс («больше чем») или минус («меньше чем»). Например, для поиска обычного файла в /usr/bin размер которого меньше 50 байт: ```bash= $ find /usr/bin -type f -size -50c /usr/bin/krdb /usr/bin/run-nautilus /usr/bin/sgmlwhich /usr/bin/muttbug ``` * -exec: исполняет указанные действия над найденнымим файлами. Принимает строку команд, оканчивающуюся на **;**, и заменяет все вхождения **{}** именем файла. ```bash= $ find /usr/bin -type f -size -50c -exec ls -l '{}' ';' -rwxr-xr-x 1 root root 27 Oct 28 07:13 /usr/bin/krdb -rwxr-xr-x 1 root root 35 Nov 28 18:26 /usr/bin/run-nautilus -rwxr-xr-x 1 root root 25 Oct 21 17:51 /usr/bin/sgmlwhich -rwxr-xr-x 1 root root 26 Sep 26 08:00 /usr/bin/muttbug ``` ### grep Команда фильтрации вывода или поиска внутри файлов по заданному шаблону. -c - подсчитать количество вхождений шаблона; -h - не выводить имя файла в результатах поиска внутри файлов Linux; -i - не учитывать регистр; -l - отобразить только имена файлов, в которых найден шаблон; -n - показывать номер строки в файле; -s - не показывать сообщения об ошибках; -v - инвертировать поиск, выдавать все строки кроме тех, что содержат шаблон; -w - искать шаблон как слово, окружённое пробелами; -e - использовать регулярные выражения при поиске; -An - показать вхождение и n строк до него; -Bn - показать вхождение и n строк после него; -Cn - показать n строк до и после вхождения; ## Манипуляции с процессами ### fg и bg Если процесс, запущенный из терминала был остановлен с помощью Ctrl+Z, то его можно "растормошить" командой fg или bg. fg продолжит процесс на переднем плане, а bg - в фоне. ### jobs Выводит все процессы, запущенные из текущего терминала, в т.ч. фоновые, запущенные с & ```bash= arkom@arkomDebian:~$ jobs [1]- Running xeyes -center red & [2]+ Running xeyes -center blue & ``` ### ps Выводит процессы, запущенные в системе. * a, -A, -e: выводит все процессы в системе * -d, g: выбрать все процессы, даже фоновые, кроме процессов сессий * -С: выбирать процессы по имени команды * -G: выбрать процессы по ID группы * -t, t: выбрать процессы по tty * -u, U - выбрать процессы пользователя. ### kill Посылает сигнал завершения процесса. Один из: - SIGINT - самый безобидный сигнал завершения, означает Interrupt. Он отправляется процессу, запущенному из терминала с помощью сочетания клавиш Ctrl+C. Процесс правильно завершает все свои действия и возвращает управление; - SIGQUIT - это еще один сигнал, который отправляется с помощью сочетания клавиш, программе, запущенной в терминале. Он сообщает ей что нужно завершиться и программа может выполнить корректное завершение или проигнорировать сигнал. В отличие от предыдущего, она генерирует дамп памяти. Сочетание клавиш Ctrl+/; - SIGHUP - сообщает процессу, что соединение с управляющим терминалом разорвано, отправляется, в основном, системой при разрыве соединения с интернетом; - SIGTERM - немедленно завершает процесс, но обрабатывается программой, поэтому позволяет ей завершить дочерние процессы и освободить все ресурсы; - SIGKILL - тоже немедленно завершает процесс, но, в отличие от предыдущего варианта, он не передается самому процессу, а обрабатывается ядром. Поэтому ресурсы и дочерние процессы остаются запущенными. По умолчанию kill отправляет SIGTERM. Чтобы указать сигнал используется -s. Опции форматирования: - -с: отображать информацию планировщика; - -f: вывести максимум доступных данных, например, количество потоков; - -F: аналогично -f, только выводит ещё больше данных; - -l: длинный формат вывода; - -j, j: вывести процессы в стиле Jobs, минимум информации; - -M, Z: добавить информацию о безопасности; - -o, o: позволяет определить свой формат вывода; - --sort, k: выполнять сортировку по указанной колонке; - -L, H: отображать потоки процессов в колонках LWP и NLWP; - -m, m: вывести потоки после процесса; - -V, V: вывести информацию о версии; - -H: отображать дерево процессов; ## Манипуляции с правами, пользователями и группами ### chown и chgroup Изменение владельца и группы файла/папки ```bash= chown root /etc/passwd chgrp wheel /etc/passwd ``` ### chmod Изменение прав файла/директории. Исп. из под рута. Синтаксис ```bash=100 chmod опции права /путь/к/файлу ``` Синтаксис настройки прав: 0 - никаких прав; 1 - только выполнение; 2 - только запись; 3 - выполнение и запись; 4 - только чтение; 5 - чтение и выполнение; 6 - чтение и запись; 7 - чтение запись и выполнение. 744 - разрешить все для владельца, а остальным только чтение; 755 - все для владельца, остальным только чтение и выполнение; 764 - все для владельца, чтение и запись для группы, и только чтение для остальных; 777 - всем разрешено все. Также c помощью chmod можно менять биты suid и guid у файлов. suid - 1 в начале guid - 2 в начале sticky - 4 в начале ```bash= chmod 4555 file.extension ``` Каждый пользователь имеет право читать и запускать на выполнение с правами владельца файла ### useradd Создание пользователя (записи в /etc/passwd) -b - базовый каталог для размещения домашнего каталога пользователя, по умолчанию /home; -c - комментарий к учетной записи; -d - домашний каталог, в котором будут размещаться файлы пользователя; -e - дата, когда учетная запись пользователя будет заблокирована, в формате ГГГГ-ММ-ДД; -f - заблокировать учетную запись сразу после создания; -g - основная группа пользователя; -G - список дополнительных групп; -k - каталог с шаблонами конфигурационных файлов; -l - не сохранять информацию о входах пользователя в lastlog и faillog; -m - создавать домашний каталог пользователя, если он не существует; -M - не создавать домашнюю папку; -N - не создавать группу с именем пользователя; -o - разрешить создание пользователя linux с неуникальным идентификатором UID; -p - задать пароль пользователя; -r - создать системного пользователя, не имеет оболочки входа, без домашней директории и с идентификатором до SYS_UID_MAX; -s - командная оболочка для пользователя; -u - идентификатор для пользователя; -D - отобразить параметры, которые используются по умолчанию для создания пользователя. Если вместе с этой опцией задать еще какой-либо параметр, то его значение по умолчанию будет переопределено. Общий шаблон: ```bash= useradd -m -d /home/username -G group1,group2 -s /bin/bash username ``` Создаст пользователя с домашней папкой /home/username, оболочкой bash, группами group1,group2 и с именем username ### userdel Удаляет пользака по имени ### usermod Изменяет пользака, а именно его группы -G - дополнительные группы для пользователя; -a - добавить пользователя в дополнительные группы из параметра -G, а не заменять им текущее значение; -g - установить новую основную группу для пользователя, такая группа уже должна существовать, и все файлы в домашнем каталоге теперь будут принадлежать именно этой группе. ### groupadd/groupdel/groupmod Аналогичны командам user* -f - если группа уже существует, то утилита возвращает положительный результат операции; -g - установить значение идентификатора группы GID вручную; -K - изменить параметры по умолчанию автоматической генерации GID; -o - разрешить добавление группы с неуникальным GID; -p - задаёт пароль для группы; -r - указывает, что группа системная; -R - позволяет изменить корневой каталог. ## Файловые системы ### \(c\)fdisk НЕ юзать fdisk, тк есть cfdisk с гуёй, в которой все понятно ### mkfs Создание файловой системы на разделе ```bash= mkfs.[fs type] [target device] ``` btrfs rules! ### mkswap и swapon Инициализация раздела подкачки и его включение ### mount Монтирование файловой системы ```bash= mount /dev/hda1 /mnt/boot ``` Нужно указывать, в какую папку будет монтироваться раздел. Если вызывать команду mount без аргументов, то выведется информация о всех примонтированных разделах ## Мониторинг информации о системе и ресурсах ### uname Базовая информация о ядре и системе | тип информации | аргумент | пример | |----------------------|----------|-----------------------------------| | имя ядра | -s | "Linux" | | имя хоста | -n | "inventor" | | релиз ядра | -r | "2.4.20-gaming-r1" | | версия ядра | -v | "#1 Fri Apr 11 18:33:35 MDT 2003" | | архитектура | -m | "i686" | | процессор | -p | "AMD Athlon(tm) XP 2100+" | | платформа | -i | "AuthenticAMD" | | операционная система | -o | "GNU/Linux" | ### uptime Вывод времени с момента включения машины ### ip neigh Показывает с какими компьютерами происходит обмен данными ### ss sudo ss -tlnp - показывает какие сервисы и с какими портами запущены ### sudo с аргументами sudo -l - позволяет нам понять, что есть в этом машинки и что пользователь может ### df Свободное место на дисках. - -a, --all - отобразить все файловые системы, в том числе виртуальные, псевдо и недоступные; - -B - изменить размер одного блока перед выводом данных, например, можно использовать BM, чтобы вывести все данные в мегабайтах; - -h - выводить размеры в читаемом виде, в мегабайтах или гигабайтах; - -H - выводить все размеры в гигабайтах; - -i - выводить информацию об inode; - -k - выводить размеры в килобайтах; - --output - использовать специальный формат вывода, если не задано, выводит все поля. Доступны такие варианты: 'source', 'fstype', 'itotal', 'iused', 'iavail', 'ipcent', 'size', 'used', 'avail', 'pcent', 'file' и 'target'; - -P - использовать формат вывода POSIX; - --total - выводить всю информацию про использованное и доступное место; - -t, --type - выводить информацию только про указанные файловые системы; - -x - выводить информацию обо всех, кроме указанных файловых систем;