root  / my Debian tips&tricks  / enter in linux 

Official Debian logo

Краткий справочник по linux

Содержание

Типы файлов

Права доступа

Команды для работы с файлами и каталогами

Команды архивирования файлов

Создание и монтирование файловых систем

Оболочка bash

  1. Типы файлов

    • файлы физических устройств
    • именованные каналы или буферы FIFO (named pipes)
      mkfifo test_fifo
    • гнезда (sockets)
    • символические ссылки (symlinks)
      ln -s откуда куда

    Наверх

  2. Права доступа

    Пример

    admhome@serv-admhome:~$ ls -la start_icecast2.sh
    -rwxrw-r-- 1 admhome admhome 53 окт.   9  2010 start_icecast2.sh

    Расшифровка первого символа в правах доступа

    • - = обычный файл
    • d = каталог
    • b = файл блочного устройства
    • c = файл символьного устройства
    • s = доменное гнездо (socket)
    • p = именованный канал (pipe)
    • l = символическая ссылка (link)

    Далее 3 группы по три символа - это права на владельца, группу и всех остальных соответственно. Для изменения прав есть команда chmod. Её можно использовать в двух вариантах.

    В первом варианте нужно явно указать, кому какое право даётся или кто этого права лишается:

    admhome@serv-admhome:~$ chmod wXp имя-файла

    Вместо w подставляется

    • u = пользователь, который является владельцем
    • g = группа
    • o = все пользователи, не входящие в группу, которой принадлежит данный файл
    • a = все пользователи системы, т. е. и владелец, и группа, и все остальные

    Вместо X ставится:

    • + это предоставление права
    • – это лишение соответствующего права
    • = это установка указанного права вместо имеющихся

    Вместо p — символ, обозначающий соответствующее право:

    • r = чтение
    • w = запись
    • x = выполнение

    Например

    • предоставить всем пользователям системы право на выполнение данного файла
      admhome@serv-admhome:~$ chmod a+x file_name
    • убрать право на чтение и запись для всех, кроме владельца файла
      admhome@serv-admhome:~$ chmod go-rw file_name
    • предоставить всем права на чтение, запись и выполнение
      admhome@serv-admhome:~$ chmod ugo+rwx file_name

    Второй вариант - цифровое представление прав

    • r = 4
    • w = 2
    • x = 1

    При указании прав доступа суммируются необходимые цифры

    Например когда необходимо владельцу полные права (4+2+1=7), группе - только чтение и запись (4+2=6) а остальных лишить всех прав (0), то получим запись:

    admhome@serv-admhome:~$ chmod 760 file_name

    Однако есть ещё 3 бита прав:

    • 4 — бит смены идентификатора пользователя
      root@serv-admhome:~# chmod +s file_name
    • 2 — бит смены идентификатора группы
    • 1 — бит сохранения задачи (sticky bit)

    Эти права (если они необходимы) ставятся перед правами доступа в числовом виде:

    root@serv-admhome:~# chmod 4775 file_name

    Наверх

  3. Команды для работы с файлами и каталогами

    • chown, chgrp - смена владельца файла и группы файла, сменить владельца может только root, сменить группу - владелец файла или root
    • mkdir - создать каталог

      В созданном каталоге появятся 2 записи: . - ссылка на себя и .. - ссылка на родительский каталог

      Команду часто используют с опциями:

      • -m mode - задать режим доступа для нового каталога (например, -m 755)
      • -p - создать указанные промежуточные каталоги (если они не существуют)
    • cat - многофункциональная команда, вывод содержимого на стандартный поток вывода, конкатенация файлов, перенаправления ввода со стандартного потока в файл

      Команду часто используют так:

      • перенаправить один файл в другой

        admhome@serv-admhome:~$ cat file1 > file2
      • конкатенация файлов

        admhome@serv-admhome:~$ cat file1 file2 ... fileN > new-file
      • перенаправления ввода со стандартного потока в файл

        admhome@serv-admhome:~$ cat > newfile

        чтобы завершить ввод с клавиатуры нажмите Ctrl+D или Ctrl+C

    • cp - копирование

      Применение:

      admhome@serv-admhome:~$ cp [options] source destination
      admhome@serv-admhome:~$ cp [options] source_directory new_directory

      Если в качестве целевого указывается существующий файл, то его содержимое будет затерто.

      Команду часто используют с опциями:

      • -i - запрашивает подтверждение перед перезаписью существующего файла
      • -p - сохраняет время модификации файла и максимально возможные полномочия. Без этой опции для нового файла задаются полномочия, соответствующие полномочиям запустившего команду пользователя
      • -R или -r - если source - каталог, то копируется как он, так и все входящие в него подкаталоги, т. е. сохраняется исходная форма дерева каталогов
      • -d - символические ссылки остаются ссылками, иначе копируются файл, на который дается ссылка
      • -f - перезаписывает файлы при копировании (если такие уже есть) без дополнительных предупреждений
    • mv - перемещение/переименование

      Однако mv не позволяет переименовать сразу несколько файлов (используя шаблон имени), так что команда mv *.xxx *.yyy не будет работать.

      Команду часто используют с опциями:

      • -i - запрашивает подтверждение перед перезаписью существующего файла
    • rm и rmdir - удаление

      rm удаляет файлы, rmdir удаляет пустой каталог

      Команду часто используют с опциями:

      • -i - запрашивает подтверждение перед удалением
      • -r (для rm) - удалить непустой каталог со всеми входящими в него подкаталогами и файлами
    • more и less - просмотр содержимого текстовых файлов

      more часто используемые клавиши:

      • пробел - следующая страница
      • Enter - следующая строка
      • B - вернёт на 1 экран назад
      • Q - выход

      less часто используемые клавиши:

      • Стрелка вверх, Стрелка вниз, PgUp, PgDown - перемещение по тексту
      • Q - выход
    • find - поиск

      admhome@serv-admhome:~$ find [список_каталогов] критерий_поиска

      Чаще всего шаблоны имен файлов строятся с помощью специальных символов "*", "?", квадратных скобок. Значок "*" используется для замены произвольной строки символов, а значок "?" заменяет один произвольный символ. В квадратных скобках задаётся интервал для поиска.

      Например:

      • "*" — соответствует всем файлам, за исключением скрытых
      • ".*" — соответствует всем скрытым файлам (но также текущему каталогу "." и каталогу уровнем выше "..": не забывайте об этом!)
      • "*.*" — соответствует только тем файлам и каталогам, которые имеют "." в середине имени, или оканчиваются на точку

      Команду часто используют с опциями:

      • -name шаблон - ищет файлы, имена которых соответствуют шаблону
      • -group имя - ищет файлы, принадлежащие указанной группе
      • -size число[c] - ищет файлы, размером в число 512-байтных блоков. Если после числа стоит символ c, значит размер указан в байтах (символах)
      • -mtime число - ищет файлы, которые в последний раз изменялись указанное число дней назад
      • -newer образец - ищет файлы, которые изменялись после изменения файла, указанного в образце
      • -type тип_файла - ищет файлы указанного типа. Тип задается одним из символов b (блок-ориентированные устройства), c (байт-ориентированные устройства), d (файл каталога), f (обычный файл), p (именованный канал) либо l (символическая ссылка)

      Например:

      • найти каталог по имени

        admhome@serv-admhome:~$ find /usr -name doc -type d
      • найти каталог по имени с соблюдением правил построения сложных критериев

        admhome@serv-admhome:~$ find /usr \( -name doc -and -type d \)
      • найти файлы где либо имя файла оканчивается на *.tmp, либо размер файла больше 100 Кбайт

        admhome@serv-admhome:~$ find /home/kos \( \( -name *.tmp \) -or \( -size +200 \) \)

      После поиска удобно указать интерпретатору что сделать с найдеными файлами:

      • простой пример - печать

        admhome@serv-admhome:~$ find /home/kos -name *.tmp -print
      • удалить в текущем каталоге все файлы, к которым пользователи не обращались в течение 30 дней

        admhome@serv-admhome:~$ find . -type f -atime +30 -exec rm {} \;

        Если вместо -exec можно поставить -ok, тогда перед выполнением указанной команды к каждому файлу будет запрашиваться подтверждение

    • split — разбиваем файл на несколько частей

      Имена выходных файлов будут составляться из указанного префикса и двух дополнительных букв "aa", "ab", "ac" и т. д. (без пробелов и точек между префиксом и буквами). Если префикс имен файлов не задан, то по умолчанию используется "x", так что выходные файлы будут называться "xaa", "xab" и т. д.

      Команду часто используют с опциями:

      • -b - размер выходных файлов в байтах (вслед за –b должно стоять число, а за ним — буква k - килобайты или m - мегабайты)

      Пример разбивки файла на куски и обратного слияния кусков в файл:

      admhome@serv-admhome:~$ split -b1400k song.mp3 song.
      admhome@serv-admhome:~$ cat song.* > song.mp3
    • diff и patch - сравнение и применение патча

      просто сравнить

      admhome@serv-admhome:~$ cmp file1 file2

      отчёт о различиях в файлах

      admhome@serv-admhome:~$ diff paper.old paper.new

      отчёт о различиях в файлах с перенаправлением в файл для дальнейшей обработки

      admhome@serv-admhome:~$ diff paper.old paper.new > paper.diff

      Существует ещё команда diff3, которая позволяет сравнить сразу 3 файла.

      для примера - разница в коде программы после правки

      admhome@serv-admhome:~$ diff program.c program.c.new > program.c.diff

      применить полученный патч к старой программе и получим новую программу

      admhome@serv-admhome:~$ patch program.c program.c.diff > program.c.new

    Наверх

  4. Команды архивирования файлов

    • tar - "соединяет" файлы в один архив без сжатия

      Команду часто используют с опциями:

      • -A, --catenate, --concatenate - добавляет файлы в существующий архив
      • -c, --create - создает новый архив
      • -d, --diff, --compare - найти различия между архивом и файловой системой
      • --delete - удалить из архива (не может использоваться с магнитной лентой!)
      • -r, --append - дописывает файлы в конец архива
      • -t, --list - выводит список файлов архива
      • -u, --update - добавляет только файлы, которые новее, чем имеющаяся в архиве копия
      • -v, --verbose - подробный листинг обрабатываемых файлов
      • -x, --extract, --get - извлечь файлы из архива

      Посмотреть примеры работы с tar

    • gzip - сжимает файлы

      сжать файл

      admhome@serv-admhome:~$ gzip файл

      разжать файл

      admhome@serv-admhome:~$ gzip -d файл_архива

      или

      admhome@serv-admhome:~$ gunzip файл_архива

      Исходные файлы после сжатия удаляются, остается только архивный файл (файлы перемещаются в архив), а при разархивации удаляется архив.

      Команду часто используют с опциями:

      • -h, --help - вызов краткой помощи по использованию программы
      • -l, --list - выдает имя файла, содержащегося в архиве, его объем и степень сжатия
      • -L, --license - отображает номер версии и лицензию на программу
      • -N, --name - сохранять (или восстанавливать) исходное имя и время создания файла
      • -n, --no-name - не сохранять (не восстанавливать) исходное имя и время создания файла
      • -q, --quiet - подавляет выдачу на экран предупреждающих сообщений
      • -r, --recursive - рекурсивно обрабатывать подкаталоги (используется в случае. когда задан шаблон имен обрабатываемых файлов)
      • -S .suf, --suffix .suf - добавить суффикс .suf к имени сжатого файла (вместо добавляемого по умолчанию суффикса gz; но учтите, что при разархивации файлов с суффиксами, отличными от gz, программа вас не поймет)
      • -t, --test - протестировать архивный файл
      • -v, --verbose - выдача дополнительных сообщений в процессе работы программы
      • -V, --version - отобразить версию программы
      • -1, --fast - быстрое сжатие
      • -9, --best - более высокая степень сжатия

      Поскольку программа gzip не умеет сохранять в одном архиве несколько файлов, то обычно ее применяют для сжатия архивов, созданных программой tar. Более того, среди опций программы tar имеется специальная опция -z, позволяющая сразу после создания сжать его с помощью программы gzip. Для выполнения такого сжатия надо использовать команду tar примерно следующим образом:

      admhome@serv-admhome:~$ tar -czf имя_архива шаблон_имен_файлов (или имя_каталога)

      Имейте в виду, в этом случае суффикс .gz не добавляется автоматически к имени архива, лучше сразу задать имя архива с указанием обеих суффиксов: имя.tar.gz.

    • bzip2 - тоже сжимает файлы

      Работает bzip2 примерно так же, как команда gzip, т. е. замещает каждый файл, имя которого задано в командной строке, сжатой версией, добавляя к имени файла суффикс .bz2.

      Команда bunzip2 (или bzip2 -d) разархивирует указанные в командной строке файлы. Если эти файлы не были созданы программой bzip2, они не будут разархивироваться, будет выдано соответствующее предупреждение. При разархивации bzip2 пытается угадать имя разархивируемого файла по следующим правилам:

      • filename.bz2 заменяется на filename
      • filename.bz заменяется на filename
      • filename.tbz2 заменяется на filename.tar
      • filename.tbz заменяется на filename.tar
      • любое другое "имя" заменяется на "имя.out"

      Команду часто используют с опциями:

      • -d, --decompress - принудительная разархивация. Эта опция необходима в силу того, что bzip2, bunzip2 и bzcat — это на самом деле одна и та же программа, которая сама по расширению имени файла принимает решение о том, какое действие надо выполнить над указанным файлом. Опция -d отключает этот механизм и заставляет программу разархивировать указанные файлы
      • -z, --compress - принудительная архивация
      • -t, --test - проверка целостности указанного файла(ов) без разархивации
      • -f, --force - перезапись существующего файла. По умолчанию bzip2 не перезаписывает существующие файлы. Если вы хотите перезаписать существующий файл, надо задать опцию -f
      • -k, --keep - сохранять (не удалять) исходные файлы при архивации или разархивации
      • -s, --small - снижает требования к объему используемой оперативной памяти за счет снижения скорости архивации. Эту опцию рекомендуется применять на компьютерах с малым объемом ОЗУ (8 Мбайт и меньше)
      • -q, --quiet - не выводить малосущественные сообщения
      • -v, --verbose - выводить дополнительную информацию в процессе работе (представляет интерес в диагностических целях)
      • -L, --license, -V, --version - отобразить версию программы и лицензионное соглашение

    Наверх

  5. Создание и монтирование файловых систем

    Общее дерево файлов и каталогов системы Linux формируется из отдельных "ветвей". В UNIX нет понятия "форматирования диска" (и команды форматирования), а используется понятие "создание файловой системы". Чтобы эту файловую систему использовать для записи в нее файлов, надо ее вначале подключить в общее дерево каталогов ("смонтировать"). "Родной" файловой системой для него в настоящее время является "вторая расширенная файловая система" (second extended filesystem) ext2fs.

    Создание файловой системы типа ext2fs подразумевает создание в данном разделе на диске суперблока, таблицы индексных дескрипторов и совокупности блоков данных. Делается все это все с помощью команды mkfs. В простейшем случае достаточно дать эту команду в следующем формате:

    root@serv-admhome:~# mkfs -t ext2 /dev/hda5

    где /dev/hda5 надо заменить на соответствующее устройство или раздел. Например, если нужно создать файловую систему на дискете, команда примет вид:

    root@serv-admhome:~# mkfs -t ext2 /dev/fd0

    После этого в разделе /dev/hda5 будет создана файловая система ext2fs. В новой ФС создается каталог с именем lost+found. Он используется в экстренных случаях fsck, не удаляйте его. Для того, чтобы начать работать с новой ФС необходимо подключить её в дерево каталогов с помощью команды mount.

    В качестве параметров mount передаётся устройство и точка монтирования. Точка монтирования - каталог в уже существующем и известном системе дереве каталогов, который будет теперь служить корневым каталогом для подключаемой ФС. Например команда:

    root@serv-admhome:~# mount /dev/hdb1 /mnt/disk2

    подсоединяет файловую систему первого раздела на втором жестком диске к каталогу /mnt/disk2 (этот каталог должен существовать!).

    После монтирования ФС в /mnt/disk2 его прежнее содержимое станет недоступно (как и информация о прежнем владельце и правах доступа). Когда новая ФС будет размонтирована - прежнее содержимое каталога станет доступно. Прежнее содержимое не уничтожается, а просто становится временно недоступным. Поэтому в лучше использовать пустые каталоги для монтирования ФС.

    В той форме, которую мы использовали примере выше, команда mount будет работать только если все недостающие параметры она найдет в файле /etc/fstab. Если такого файла не существует, или он не содержит необходимых данных, надо применять более полную форму команды mount:

    root@serv-admhome:~# mount -t type device path

    где type - тип файловой системы, device - на каком устройстве (в каком разделе) она находится, а path - точка монтирования.

    Файл /etc/fstab нужен для автомонтирования ФС при загрузке ОС. Каждая строка содержит поля отбитые пробелом:

    • имя устройства - может быть локальным /dev/hda5 или путевое имя NFS, например, pc21:/home/jim
    • точка монтирования
    • тип ФС
    • опции монтирования (по умолчанию rw — чтение, запись)
    • уровень дампа - используется программой dump, предназначенной для создания резервных копий
    • порядок (приоритет) проверки файловых систем fsck

    В mount можно вначале задать список типов файловых систем, которые не надо монтировать - с помощью флага no. Такая возможность полезна если используется mount с аргументом -a (монтировать всё). По этой команде монтируется всё что перечислено в /etc/fstab. Пример:

    root@serv-admhome:~# mount -a -t nomsdos,ext

    монтирует все файловые системы, кроме msdos и ext.

    Обычно монтирование доступно только root, но если в /etc/fstab имеется строка

    /dev/cdrom /cd iso9660 ro,user,noauto,unhide,

    то любой пользователь сможет смонтировать ФС на своем CDROM, используя команду

    admhome@serv-admhome:~$ mount /dev/cdrom или [user]$ mount /cd

    mount и /etc/fstab часто используют с параметрами:

    • async - весь ввод-вывод в файловую систему должен производиться асинхронно
    • auto - файловая система может монтироваться командой mount c опцией -a
    • defaults - использовать набор опций, задаваемый по умолчанию: rw, suid, dev, exec, auto, nouser, async
    • dev - файлы байт-ориентированных и блок-ориентированных устройств в файловой системе интерпретируются как специальные файлы
    • noauto - файловая система может монтироваться только явно. Опция -a не приведет к монтированию файловой системы
    • exec - разрешает выполнение двоичных файлов
    • remount - позволяет перемонтировать уже смонтированную файловую систему. Обычно используется для изменения опций монтирования файловой системы, особенно для того, чтобы расширить права доступа (вместо прав только на чтение установить права на чтение/запись)
    • ro - монтирует файловую систему только на чтение
    • rw - монтирует файловую систему для чтения и записи
    • suid - позволяет задействовать биты смены идентификатора пользователя и смены идентификатора группы
    • sync - весь ввод-вывод в файловую систему должен производиться синхронно
    • user - позволяет непривилегированному пользователю монтировать файловую систему. Для таких пользователей монтирование всегда выполняется с опциями noexec, nosuid, nodev
    • nodev - файлы байт-ориентированных и блок-ориентированных устройств в файловой системе не интерпретируются как специальные файлы
    • nosuid - не позволяет задействовать биты смены идентификатора пользователя и смены идентификатора группы
    • nouser - запрещает непривилегированному пользователю монтировать файловую систему

    Наверх

  6. Оболочка bash

    Зарезервированные символы:

    ` ~ ! @ # $ % ^ & * ( ) _ — [ ] { } : ; ' " / \ > <

    Если имя файла с пробелами:

    admhome@serv-admhome:~$ cp two\ words two_words
    admhome@serv-admhome:~$ cp 'two words' two_words

    Различие в использовании символов ' и " состоит в том, что внутри одинарных кавычек теряют специальное значение все символы, а внутри двойных кавычек — все специальные символы кроме $, ' и \ (знака доллара, одинарных кавычек и обратного слэша).

    Операторы

    • Оператор ; - нужен чтобы задать несколько команд в одной строке:

      admhome@serv-admhome:~$ command1 ; command2

      Запуск команд осуществится последлвательно.

    • Оператор & - организует исполнение команд в фоновом режиме

      admhome@serv-admhome:~$ command1 ; command2

      Оболочка запустит command1, сразу command2, и немедленно вернет управление пользователю.

    • Операторы && и || - управляющие операторы

      && - следующая команда выполнится только тогда, когда предыдущая команда выполнилась успешно

      || - следующая команда выполнится только тогда, когда предыдущая команда выполнилась неуспешно

    Потоки

    • стандартный ввод (standard input или stdin) - программа получает данные (по умолчанию - клавиатура)

    • стандартный вывод (standard output или stdout) - программа выдаёт данные (по умолчанию - терминал пользователя)

    • стандартный поток сообщений об ошибках (standard error или stderr) - программа сообщает об ошибках (по умолчанию - терминал пользователя)

    Перенаправление ввода/вывода, каналы и фильтры

    • Операторы >, < и >>

      перенаправить вывод команды в файл:

      admhome@serv-admhome:~$ ls -l > /home/admhome/dir.txt

      дописать вывод команды в файл:

      admhome@serv-admhome:~$ ls -l >> /home/admhome/dir.txt

      подсчёт числа слов в файле /home/jim/report.txt:

      admhome@serv-admhome:~$ cat /home/admhome/report.txt > wc -w

      или

      admhome@serv-admhome:~$ wc -w < /home/admhome/report.txt

      вывод на печать:

      admhome@serv-admhome:~$ cat /home/admhome/report.txt > lpr

      4 эквивалентные команды:

      admhome@serv-admhome:~$ cat > file
      admhome@serv-admhome:~$ cat>file
      admhome@serv-admhome:~$ >file cat
      admhome@serv-admhome:~$ > file cat

      "раздвоить" выходной поток - направить выходной поток и на экран и в файл:

      admhome@serv-admhome:~$ ls -l >& /home/admhome/dir.txt
    • Оператор | - организация программного канала (конвейера)

      admhome@serv-admhome:~$ cat myfile | grep Linux | wc -l

      вывод cat myfile будет обработан grep Linux вывод которой будет обработан wc -l

    • Фильтры

      К числу команд-фильтров относятся уже упоминавшиеся выше команды cat, more, less, wc, cmp, diff, а также:

      • grep, fgrep, egrep - искать во входном файле или данных со стандартного ввода строки, содержащие указанный шаблон, и вывести их на стандартный вывод
      • tr - заменить во входном потоке все встречающиеся символы, перечисленные в заданном перечне, на соответствующие символы из второго заданного перечня
      • comm - сравнить два файла по строкам и выдать на стандартный вывод 3 колонки: в одной — строки, которые встречаются только в 1 файле, во второй — строки, которые встречаются только во 2-ом файле: и в третьей — строки, имеющиеся в обоих файлах
      • pr - форматировать для печати текстовый файл или содержимое стандартного ввода
      • sed - строковый редактор для выполнения некоторых преобразований над входным потоком данных (берется из файла или со стандартного ввода)

    Параметры и переменные. Окружение оболочки

    Наверх

LJ