Главная страница

курс bash. Введение в Linux и Bash


Скачать 4.28 Mb.
НазваниеВведение в Linux и Bash
Дата28.11.2022
Размер4.28 Mb.
Формат файлаpdf
Имя файлакурс bash.pdf
ТипУрок
#817935
страница4 из 5
1   2   3   4   5

Задание:
Имя команды cat – это сокращение от "catenate" (plustilino)связывать, соединять). Если в качестве аргументов программе передать несколько файлов, то их содержимое будет соединено и выведено на экран.
Создайте два текстовых файла с какими-либо данными. С помощью программы cat объедините данные этих файлов в третьем файле.
Ответ:
После имени команды перечисляем файлы, содержимое которых передается в поток вывода.
Затем перенаправляем поток вывода в файл.
Документация Linux
Man-подобных системстраницы
Вместе с дистрибутивами GNU/Linux устанавливается большое число консольных утилит, выполняемых в Bash-оболочке. Кроме того, множество программ потом устанавливает сам пользователь. В связи с этим невозможно запомнить весь перечень команд с их параметрами.
Поэтому для каждой программы должна иметься страница документации, так называемая man-страница. Здесь man – это сокращение от слова manual (plustilino)руководство, пособие).
Доступ к этим страницам осуществляется с помощью одноименной программы man. В качестве аргумента ей передается имя команды, информацию о которой мы хотим получить.
Например, man date или man cat.
34

На скриншоте показана страница документации к утилите sleep, входящей в GNU/Linux.
Страница открывается по команде man sleep и является одной из самых коротких. Здесь мы можем видеть всю структуру man-страницы, состоящей из следующих разделов:
1. NAME. Имя команды, и кратко что она делает.
2. SYNOPSIS. Варианты синтаксиса, т. е. способов записи, команды. Параметры без скобок являются обязательными. В квадратных скобках – необязательными
(plustilino)опциональными).
3. DESCRIPTION. Подробное описание программы и ее ключей.
4. AUTHOR. Разработчик программы.
5. REPORTING BUGS. Куда сообщать об ошибках.
6. COPYRIGHT. Авторские права на программу, лицензия, под которой она распространяется.
7. SEE ALSO. Дополнительная информация.
35

Данные разделы стандартны и характерны для всех man-страниц.
Обратите внимание, в первой строке мана пишется имя программы и в скобках ставится число. Так в примере выше написано SLEEP(plustilino)1). Число обозначает раздел, к которому относится данная страница документации Linux. Пользовательские утилиты относятся к разделу под номером 1.
Если посмотреть документацию к программе apt-get, с помощью которой во многих дистрибутивах Linux устанавливается ПО, то там будет стоять число 8. К восьмому разделу относятся программы администрирования системы, то есть выполняемые с правами суперпользователя (plustilino)root'а, в том числе проприетарные (коммерческие).а).
Большинство man-страниц достаточно длинные и не помещаются на одном экране. Поэтому пользуются горячими клавишами навигации по документации:

Стрелки вверх и вниз для построчной проктуртки.

Клавиши Page Up и Page Down для постраничной прокрутки.

Home и End перемещают в начало или конец страницы.

Нажатие q приводит к закрытию страницы документации.
Есть и другие клавиши управления.
В зависимости от дистрибутива часть страниц может быть переведена на русский язык.
Однако большинство, как и почти вся документация в сфере IT, написаны на английском языке.
Документация Info
Info-руководство – другой вариант документации команд Linux. Описание команд в info менее формализировано и поэтому зачастую более понятно.
Команда вида info имя_программы откроет ту часть info-документации, где начинается описание указанной программы.
На скрине info-страница для утилиты yes.
36

Info-руководство – по-сути один большой гипертекстовый сборник, в котором можно перемещаться по ссылкам. Для этого надо установить курсор в подчеркнутую фразу, начинающейся с *, и нажать Enter.
С помощью клавиши u можно подняться на самый верхний уровень info-документации
Linux. Клавиши n и p перемещают вниз и вверх от статьи к статье. На изображении ниже показано начало самого верхнего уровня иерархии страниц info.
Опция -подобных систем-подобных системhelp
У многих команд есть ключ --help, который позволяет быстро получить краткую справку.
Информация выводится тут же в терминал, и остается видимой во время написания следующей команды. Нередко --help выдает русифицированную справку.
37

Команда apropos
Может возникнуть ситуация, когда требуется выполнить какую-либо задачу, а есть ли программа для этого, и как она называется, не известно. В таких случаях можно попробовать поискать с помощью утилиты apropos. Она выводит на экран краткие описания команд, содержащие строку, переданную ей в качестве аргумента.
Допустим нам надо проверить, есть ли каком-то файле повторяющиеся строки. По английски "повторять, повторение" – repeat. Следовательно, команда поиска подходящей программы будет выглядеть так: apropos repeat.
Нашлось четыре программы, из которых очевидно нам подходит uniq. Получив по ней справку, выясняем, что ключ -d позволяет выводить только повторяющиеся строки.
Примечание. Аналогично apropos'а, в том числе проприетарные (коммерческие).у работает утилита man с ключом -k.
Абсолютная и относительная адресация.
Команда c) и блочные устройства (b)d)
Часто выполняемыми задачами в командной строке являются просмотр содержимого каталога и переход в другой, т. е. изменение текущего каталога. В Bash по-умолчанию текущим является домашний каталог пользователя. Чтобы сделать текущим другой, используется команда cd.
В качестве аргумента команде cd передается адрес директории, в которую мы хотим перейти
(plustilino)которую хотим сделать текущей). Адрес может быть задан двумя способами: с помощью абсолютной или относительной адресации.
В случае абсолютной адресации путь к каталогу указывается, начиная с корневого
каталога, и далее вниз по дереву папок до требуемого. Так все следующие записи являются
38
абсолютными адресами: /home/pl/Desktop, /boot, /etc/vim. Первый знак слэша (plustilino)/) обозначает корневой каталог.
При относительной адресации путь к каталогу указывается, начиная с текущего
каталога (plustilino)другими словами, относительно текущего каталога). Когда используется относительная адресация, слэш никогда не бывает первым знаком. В случае относительного адреса начало может быть одним из следующих:

Точка в начале или отсутствие какого-либо спецзнака обозначают текущий
каталог.

Двумя точками обозначается каталог на уровень выше текущего, т. е. родительский.
Примеры относительных адресов: ./Documents/images, Documents/images, ../test. Первые два адреса указывают на одно и то же: каталог (plustilino)images), вложенный в каталог (plustilino)Documents), который вложен в текущий. Точку-слэш имеет смысл ставить только перед исполняемыми файлами. Иначе Bash будет искать программу в системных каталогах, а не текущем.
Адрес ../test говорит, что надо подняться на один уровень выше текущего в иерархии папок.
Уже оттуда перейти в имеющийся там каталог test.
Понятно, что в любую директорию можно перейти, используя как абсолютный, так относительный адрес. Однако уместность использования адресов зависит от ситуации. Так если требуется перейти в корневой каталог, то проще написать /, то есть абсолютный адрес.
Если необходимо узнать содержимое каталога, вложенного в текущий, достаточно просто написать название нужной папки, то есть использовать относительную адресацию.
В командной оболочке Linux можно выделить еще один способ адресации – адрес
относительно домашнего каталога пользователя. Обозначается домашний каталог знаком тильды (plustilino)

). Так из любого каталога адрес заставит обратиться в домашнюю папку. А адрес
/Documents во вложенную в домашнюю.
В Bash для перемещения по дереву каталогов используется команда cd, которая в качестве аргумента принимает адрес места назначения.
В примере выше, используя относительную адресацию, мы переходим в каталог bin. Обратим внимание, что после перехода изменилось приглашение командной строки. Теперь в нем указан адрес относительно домашнего каталога. В папке bin мы запускаем скрипт pycharm.sh.
Здесь также используется относительная адресация, но через точку, обозначающую текущий каталог.
39

Если команде cd не передавать аргумент, то она сделает текущим домашний каталог пользователя, где бы вы до этого не находились. На скрине выше с помощью абсолютного адреса мы переходим в каталог /opt/google. После этого в приглашении Bash фигурирует абсолютный адрес.
Однако даже если вы используете абсолютную адресацию, но каталог находится в домашней папке пользователя, не важно на какой глубине, то приглашение Bash будет содержать адрес относительно домашнего каталога, т. е. через тильду.
Следует помнить одну полезную особенность – это автодополнение при нажатии клавиши
Tab. Для адресов оно работает также как для команд.
Вопросы
1. Вы находитесь в домашнем каталоге. Где вы окажитесь после выполнения команды cd ../test.py..?
2. На ваш взгляд, какой может быть смысл в том, что при автодополнении Bash подставляет слэш в конце адреса? Например, сработает и так: cd programs. Но
Bash предпочтет cd programs/test.py.
Ответы
1. Вы окажитесь в корневом каталоге, так как команда cd ../test.py../test.py заставляет подняться на два уровня выше. Домашний каталог вложен в папку home, а папка home вложена в корневой каталог.
2. Скорее всего смысл слэша в конце – это дать понять, что мы имеем дело с каталогом, а не файлом. Когда автодополняется имя файла (plustilino)при использовании других команд, а не cd), слэша в конце не бывает.
Команда ls – просмотр каталога
Команда ls используется в командной оболочке Linux для вывода содержимого каталогов и информации о файлах. Кроме утилиты ls, есть схожие с ней dir и vdir, отличающиеся поведением по-умолчанию.
В качестве аргументов ls принимает адреса каталогов или файлов. Если их не передавать, то будет выведено содержимое текущей папки.
Указав адрес или адреса других каталогов, можно посмотреть их содержимое.
40

Обратите внимание, что в случае команды ls смены текущего каталога не происходит, как при использовании cd. Bash лишь выводит нам файлы и папки запрашиваемого каталога. Если нужно сразу просмотреть несколько каталогов, их указывают простым перечислением.
У программы ls есть много ключей, позволяющих получать о файлах более подробную информацию, а также выводить ее в различных форматах. Информацию по всем ключам можно получить с помощью команды ls --help. Самым используемым ключом является - l, благодаря которому выводится подробная информация об объектах.
В первой строке указано общее количество блоков дискового пространства, которое занимают файлы просматриваемого каталога. В данном случае один блок соответствует 1024- м байтам, или 1-му килобайту.
В описании каждого файла первый символ указывает на тип файлового объекта, далее идут права (plustilino)rwxrwxrwx). О типах файл ов в Unix-подобных ОС
мы уже говорили, о правах будет сказано позже. В примере выше имеется две директории (plustilino)d), один именованный канал (plustilino)p) и два обычных файла (plustilino)-).
Во втором столбце числом указывается количество жестких ссылок для файлов. Что значат числа в этом столбце для каталогов, непонятно. Далее идут имена владельца, группы, размер,
дата последнего изменения и имя файла. Размер указан в байтах, но с помощью ключа -h можно получить более читаемый формат:
Ключ -a позволяет увидеть скрытые файлы:
41

Здесь также используется ключ -1, чтобы вывод был в столбик. Кроме скрытого файла .iamhidden мы видим имена текущего каталога (plustilino).) и родительского (plustilino)..). Если они не нужны, вместо -a употребляют -A.
Если требуется просмотреть не только сам каталог, но и вложенные в него папки, используется ключ -R:
В отличие от cd, команде ls можно передавать не только имена каталогов, но и файлов.
Например, когда нужно получить информацию о конкретном файле или группе файлов.
На скрине во второй команде используется шаблон. О шаблонах мы поговорим позже.
Задание
По-умолчанию ls сортирует файлы по алфавиту. С помощью справочной системы Linux узнайте, как сортировать файлы по размеру и времени изменения.
Ответ
Для сортировки по времени используется ключ -t. Обычно его комбинируют с -l. При этом сортировка происходит по убыванию, т. е. более новые файлы будут вверху. Если требуется обратная сортировка, то надо использовать дополнительный ключ -r, который обозначает реверс (plustilino)не важно чего).
Для сортировки по размеру используется ключ -S.
42

Копирование, перемещение, создание и
удаление файлов и каталогов
Частыми операциями в файловой структуре являются создание файлов и каталогов, их копирование, перемещение, переименование, а также удаление. Очевидно для подобных действий в командной оболочке Linux должны быть предусмотрены специальные команды.
Копирование файлов и каталогов
В Bash для копирования файлов используется команда cp (plustilino)от "copy"), которой обычно передаются два аргумента:
1. адрес с именем исходного файла,
2. новый адрес с именем или просто адрес каталога, куда помещается копия.
сp
адрес/имя_оригинала
адрес/имя _копии
или
сp
адрес/имя_оригинала
адрес/
Адрес может быть как абсолютным, так относительным. Если операции с файлами выполняются в текущем каталоге, то указывать адрес смысла нет. Пишется только имя исходного файла и имя копии. Поскольку файлов с одинаковыми именами и адресами быть не может, имя копии должно отличаться от имени исходного файла.
Рассмотрим примеры.
cp readme readme2
В данном случае создается копия файла readme, которая остается в той же директории под именем readme2.
cp readme Desktop/
В папку Desktop копируется файл readme. Здесь текущим является родительский Desktop'а, в том числе проприетарные (коммерческие).у каталог. Имена копии и файла оригинала будут совпадать, а вот полные адреса – нет.
cp /home/irina/tux.png /mnt/D/pingvin.png
Здесь копируется файл из одного каталога в другой, используются абсолютные адреса, имя копии изменяется.
Если надо скопировать несколько разных файлов в один и тот же каталог, то после команды cd сначала перечисляются все файлы-оригиналы, а последним указывается каталог, куда помещаются копии. Понятно, что при таком групповом действии имена файлов изменить нельзя.
Чтобы скопировать каталог со всем его содержимым, необходимо использовать ключ -r команды cp:
cp -r ./letters ./oldletters
43

Перемещение и переименование
В Bash-оболочке Linux для перемещения и переименования используется одна и та же команда – mv (plustilino)от "move" – перемещать). Переименование можно рассматривать как частный случай перемещения, ведь по-сути изменяется полный адрес файла, что равносильно перемещению, даже если файл остается в том же каталоге.
Также как в случае cp, для mv необходимо указать пару аргументов. Выбор между перемещением и переименованием зависит от того, что это за аргументы. При перемещении файл меняет свой адрес, следовательно, если в первом и втором аргументах указаны разные адреса, то произойдет перемещение. Если адреса одинаковые, а различаются только имена, происходит переименование. Кроме того, перемещение может быть совмещено с переименованием.
В случае перемещения без переименования во втором аргументе указывается только каталог места назначения.
mv document.txt Work
mv document.txt Work/doc23.txt
Здесь в первом случае файл document.txt перемещается в каталог Work. Во-втором случае одновременно происходит перемещение файла и его переименование: файл document.txt перемещается в директорию Work и получает новое имя doc23.txt.
При использовании команды mv для переименования в качестве второго аргумента указывается новое имя:
mv order.txt orderNew.txt
mv Work/list.odt Work/names.odt
Каталоги перемещаются и переименовываются по тому же принципу, что и файлы.
Групповое перемещение файлов работает также, как с командой cp.
Создание файлов и каталогов
Новые директории создаются командой mkdir. Например, чтобы создать каталог Work в текущей директории необходимо выполнить следующую команду:
mkdir Work
или
mkdir ./Work
Существует множество способов создания файлов, обычно они создаются какой-либо программой. Если все же возникает необходимость создать пустой файл, сделать это можно с помощью программы touch. В качестве аргумента ей передается имя создаваемого файла.
Еще один способ – перенаправление вывода какой-либо команды в файл
. Пример:
cal > ./Work/January
Здесь программа cal выводит календарь на текущий месяц, а поскольку стоит знак перенаправления вывода, то вывод команды будет записан в файл January, находящийся в папке Work.
44

Удаление файлов и каталогов
Для удаления файлов используется команда rm. Например:
rm ghost.png
Командой rmdir можно удалить пустой каталог. Если же каталог не пуст, следует использовать команду rm с ключом -r:
Вопросы
У вас в каталоге есть файлы с разными расширениями. Вам надо группу файлов, имеющих одно и тоже расширение, скопировать в другой каталог. Как это сделать одной командой?
Какой ключ надо использовать, чтобы при перемещении случайно не перезаписать уже имеющийся в каталоге файл с таким именем?
Ответы
Чтобы скопировать группу файлов, имеющих схожесть в именах, следует задать шаблон, которому будет соответствовать каждый такой файл.
Чтобы случайно не перезаписать имеющийся файл при перемещении или копировании, надо использовать ключ -i.
Жесткие и символьные ссылки
Индексный дескриптор
Для пользователя файл – это область данных на диске, к которой можно обратиться через имя файла. Однако в операционных системах на базе ядра Linux вся информация о файле привязана не к его имени, а так называемому числовому индексному дескриптору. У каждого файла есть свой уникальный индексный дескриптор, к которому привязаны сведения об этом файле: в каких блоках диска хранится его содержимое, размер, время создания, модификации и др.
45

Индексные дескрипторы файлов хранятся в специальной таблице. Каждый логический и физический диск имеет собственную таблицу дескрипторов.
Именно номер индекса является истинным именем файла в системе. Мы можем их увидеть с помощью ключа -i команды ls.
Жесткие ссылки
Поскольку индексные дескрипторы представляют собой номера, а файлов в операционной системе обычно очень много, то искать файл по его индексу было бы неудобно: человеку работать с осмысленными словами куда удобнее, чем с длинными числами. Поэтому любому файлу в системе обычно дается осмысленное словесное имя, которое не содержит информации о файле, а лишь указывает, то есть ссылается, на его дескриптор.
Имя файла, ссылающееся на его индексный дескриптор, называется жесткой ссылкой.
Механизм жестких ссылок – это основной способ обращаться к файлу в Unix-подобных операционных системах.
Поскольку файл в операционной системе однозначно определяет только номер его дескриптора, а имя файла является лишь указателем-ссылкой на него, то очевидно таких ссылок можно создать множество. Все они будут указывать на один объект. Результатом этого является то, что у файла в Linux может быть несколько имен.
Для образного сравнения, представим придорожные указатели на какую-нибудь бензоколонку: их много, они находятся в разных местах трассы, но указывают на одну и туже точку местности.
Почему бывает недостаточно одного имени файла? Все дело в удобстве доступа из разных мест файловой структуры, а также в предоставлении доступа. Так одно имя файла может быть в одном каталоге, второе – в другом.
Следствием механизма жестких ссылок Linux является то, что удаление жесткой ссылки на
файл не приводит к удалению самого файла из системы при наличии у этого файла
других жестких ссылок (имен файла). И это понятно, так как все жесткие ссылки равны между собой, независимо от времени создания, местонахождения в структуре каталогов и др.
Файл будет доступен системе, пока будет существовать хотя бы одна жесткая ссылка на него.
В случае удаления всех ссылок, файл удалится из системы, так как станет просто недоступен.
Символьные, или мягкие, ссылки
Несмотря на возможности, которые предоставляют жесткие ссылки, у них есть ограничения:

их можно создавать только на файлы, но не на каталоги;
46


жесткую ссылку нельзя создать на файл, находящийся на другом диске.
Последнее означает, что нельзя создать жесткую ссылку на файл находящийся, например, на съемном носителе или другом разделе жесткого диска. Это связано с тем, что каждый носитель имеет собственную таблицу дескрипторов.
Поэтому в операционных системах GNU/Linux поддерживается также механизм мягких ссылок. Часто их называют символьными ссылками. Они представляют собой файлы,
указывающие не на индексные дескрипторы, а на имена файлов, т. е. на жесткие
ссылки. Мягкая ссылка в Linux аналог ярлыка в Windows.
Поскольку жесткая ссылка указывает непосредственно на индексный дескриптор, а мягкая – только на жесткую ссылку, то если удалить все жесткие ссылки файла, то символьная ссылка работать не будет. Она станет "битой".
На рисунке изображена связь между символьными ссылками и именами файла, а также между именами и индексными дескрипторами. Верхний квадрат соответствует индексному дескриптору файла, квадраты со скругленными углами – именам файла, а круги – символьным ссылкам. Индексный дескриптор файла всегда один, а имен может быть множество. Также может существовать неограниченное количество символьных ссылок на каждое имя файла.
При удалении жесткой ссылки, на имя которой ссылалась символьная, последняя не наследует связь с дескриптором и утрачивает свою работоспособность. Если в данном примере удалить жесткую ссылку с именем logotip, то файлы pic1 и tux станут бесполезны, так как открыть файл 555795 с их помощью уже будет нельзя.
Жесткая ссылка – не копия!
Может показаться, что копирование файлов и создание жестких ссылок почти одно и то же, так как в итоге получаются вроде бы два файла. Однако это абсолютно разные операции, приводящие к разным результатам.
При копировании файла создается новый файл, данные которого записываются в свободное место на диске, и который имеет собственный индексный дескриптор. В случае создания
47
жесткой ссылки, файл по-прежнему остается в единственном числе, появляется лишь дополнительный указатель на него.
На практике это имеет следующие последствия. При внесении изменений в файл, обращение к которому было под одним именем, эти изменения обнаружатся и тогда, когда обращение к файлу произойдет под другим именем. При создании копии файла и последующем изменении данных этой копии, данные первоначального файла, с которого "снималась" копия, не изменятся.
В случае мягких ссылок, хоть и создается новый файл (plustilino)с собственным индексным дескриптором), но он не содержит данных файла-оригинала, а лишь содержит запись адреса другого файла. Символьная ссылка – особый тип файла Linux.
Создание ссылок в Linux
В командной оболочке Linux, чтобы создать еще одну жесткую ссылку на файл, то есть еще одно имя, используется команда ln (plustilino)от "link" – ссылка, связывать). Первым аргументом указывается существующее имя файла, вторым – имя новой ссылки. Адреса обоих аргументов могут быть как относительными, так и абсолютными.
В примере для файла butt2.png, который находится в каталоге image, создаются две дополнительные жесткие ссылки. Одна – в текущем каталоге (plustilino)./), другая – в папке Загрузки.
В первом случае файл не переименовывается, т. к. это не обязательно, ведь полные имена файлов различны. Однако можно и переименовать, как это происходит во втором случае.
С помощью команды ls -l можно убедиться, что на файл указывают три жесткие ссылки.
Мы можем посмотреть информацию о каждом имени и убедиться, что это один и тот же файл, так как все данные совпадают.
48

Символьные ссылки создаются с помощью той же команды ln, однако используется ключ -s
(plustilino)от "symbolic"). В качестве первого аргумента пишется абсолютный адрес файла или каталога, на который делается ссылка, в качестве второго – абсолютный или относительный адрес создаваемой мягкой ссылки.
Здесь на рабочем столе создаются две символьные ссылки: на каталог image и на файл
2018.ods. Имя ссылки можно оставить таким же как у объекта, если ссылка создается в другом каталоге. Команда ls -l среди прочего отображает адрес, на который указывает символьная ссылка. Если бы мы при создании мягкой ссылки использовали относительные адреса источников, то они так бы и хранились, и файлы-ссылки были бы нерабочими.
Практическая работа
Создайте текстовый файл с помощью перенаправления вывода команды cal. Создайте на этот файл дополнительную жесткую ссылку. Внесите изменения в файл, обратившись к нему по второму имени. Изменения можно внести, дописав (plustilino)>>) в файл дату с помощью перенаправления вывода команды date. Посмотрите содержимое файла, воспользовавшись первым именем файла. Тем самым вы убедитесь, что имеете дело с одним и тем же файлом, доступным под разными именами.
Создайте символьную ссылку на каталог. Посмотрите в графической оболочке, как дистрибутив Linux по особому обозначает такой объект (plustilino)обычно у иконки появляется маленькая черная стрелка).
Пример выполнения
Права доступа
Категории пользователей по отношению к файлу
GNU/Linux как любая Unix-подобная операционная система является многопользовательской. Это значит, что в системе могут работать одновременно или по-
49
очереди несколько или множество пользователей. У каждого из них должно быть собственное файловое пространство, доступ к которому других пользователей ограничен.
Отсюда вытекает, что у любого файла в Linux должны быть специальные атрибуты – права на доступ. Эти атрибуты должны сообщать, кто имеет право работать с файлом.
Выделяют три категории пользователей, которым могут предоставляться права на файл:

Сам владелец (plustilino)u – user) объекта – конкретный пользователь, чье имя числится в атрибутах файла как имя владельца этого файла. Обычно если пользователь создает файл, то он автоматически записывается как его владелец.

Группа (plustilino)g – group), к которой принадлежит владелец файла. Когда в Linux создается пользователь, то для него создается одноименная группа. Однако средствами администрирования системы можно объединять пользователей в различные группы.
При этом конкретный пользователь может входить в состав нескольких групп. Группы позволяют предоставлять права доступа к ресурсам сразу нескольким людям, но при этом ограниченному кругу лиц.

Все остальные (plustilino)o – other) – это все те, кто не является владельцем файла и не принадлежит к группе владельца файла. То есть любой посторонний пользователь.
Права на файл могут изменять только владелец этого файла и суперпользователь.
Чтение, запись, выполнение
Чтение, запись, выполнение – это то, что можно делать с существующим файлом, возможные действия над ним. У каждой категории пользователей (plustilino)владельца, группы, остальных) должны быть свои права на каждое вышеупомянутое действие.
Право на чтение (plustilino)r – read) означает, что файл можно просматривать. Например, открыть файл и, если он текстовый, прочитать содержащийся в нем текст. Если это файл изображения, то можно посмотреть изображение. Наличие права только на чтение не позволяет изменять файл. То есть нельзя будет исправить текст или подрисовать что-то к картинке.
Право на запись (plustilino)w – write) позволяет изменять файл, то есть дописывать в него информацию или заменять ее другой.
Право на исполнение (plustilino)x – execution) имеет смысл не для всех файлов, хотя может быть установлено для любого. Это право позволяет исполнять файл как программу, при этом в файле должны быть записаны инструкции для процессора, то есть файл должен быть исполняемой программой.
Буквенная запись прав доступа
Поскольку есть три категории пользователей (plustilino)владелец, группа, остальные) и три действия над файлом (plustilino)чтение, запись, исполнение), то получается, что в атрибутах файла должно быть девять записей о правах, указывающих на то, кто и что может делать с файлом.
50

Первые три записи – это права владельца
, вторые три записи – права группы
, последняя тройка – права на файл для всех остальных
. Если обозначить каждое право соответствующей буквой, и все права всем предоставляются, то получится такая запись:
rwx rwx rwx
Мы уже видели нечто подобно в выводе команды ls -l. В первом столбце, после символа типа файла указываются права доступа к файлу в буквенной нотации.
Если какое-либо право не предоставляется той или иной категории, то вместо буквы ставится знак минус. Например, на скрине выше файл text.txt все могут читать, но изменять – только владелец.
Запись прав доступа с помощью чисел
Записывать права доступа можно не только с помощью букв. Если положительное значение права (plustilino)когда доступ есть) обозначать единицей, а отрицательное (plustilino)доступа нет) – нулем, то получим такую картину для файла, который могут все читать, но изменять только владелец:
110100100 51

Именно с помощью нулей и единиц хранятся данные в памяти компьютера, в том числе атрибуты доступа. Под права выделяются 9 бит в атрибутах файла, каждый бит хранит ноль или единицу.
Однако запись из девяти символов достаточно длинная. Чтобы ее сократить, используют преобразование двоичных чисел в восьмеричные. Триады нулей и единиц двоичной системы как раз составляют значения от 0 до 7 в восьмеричной системе счисления. Поэтому права доступа трех категорий (plustilino)владельца, группы, остальных) можно выразить как три независимых друг от друга числа от 0 до 7-ми.
Не все числа имеют смысл. Трудно представить файл, который можно изменять, но нельзя прочитать. Часто используемые числа, которые полезно запомнить: 4 – только чтение, 5 – чтение и выполнение, 6 – чтение и запись, 7 – все права.
Права доступа к каталогам
Каталог в Linux – это особый тип файла, смысловым содержанием которого является список других файлов.
Каталоги имеют те же биты прав, что и остальные файлы. Однако то, что эти права означают,
в случае каталогов накладывает определенную специфику.
Право на чтение в случае каталога означает лишь возможность узнавать список содержащихся в нем файлов. При этом что-то узнать о свойствах файлов (plustilino)размере, датах, правах) не получится.
52

Право на исполнение в случае каталога означает, что в него можно заходить, просматривать и изменять содержимое файлов, если на них есть разрешения, узнавать свойства файлов.
Однако право на выполнение для каталога не дает права изменять имена файлов в этом каталоге. Ведь таким образом мы меняли бы данные самого каталога, а для этого нужно право на изменение самого каталога.
Если для каталога установлено только право на исполнение, то его содержимое просматривать нельзя. Можно лишь выполнять поиск файлов и обращаться к известным файлам.
На скрине создается каталог и в нем файл. С помощью команды chmod (plustilino)рассматривается в следующем уроке) у каталога убираются права на чтение и запись для всех. После этого мы не можем просматривать его содержимое с помощью команды ls. Однако можем обращаться к находящемуся в нем файлу. Также можно перейти в каталог, то есть сделать его текущим
(plustilino)на скрине не показано).
Если каталог можно изменять (plustilino)право на запись), то можно изменять состав файлов в нем, то есть можно удалять, переименовывать файлы, создавать новые. Причем все это возможно даже с файлами, доступ к которым запрещен для данной категории. Это создает дополнительную опасность, которая "лечится" вводом для каталогов дополнительного t-бита.
При его наличии пользователь может выполнять файловые операции только со своими файлами.
Отметим пару вытекающих из вышесказанного особенностей:

Доступ к конкретному файлу зависит от наличия доступа на исполнение к каталогам на протяжении всего пути.

Изменять существующие файлы можно, не имея доступа на запись в каталог, достаточно иметь доступ на запись самого файла.
Команда c) и блочные устройства (b)hmod) – изменение прав доступа
Команда chmod (plustilino)change mode – сменить режим) предназначена для изменения прав доступа к файлам и каталогам в Unix-подобных операционных системах.
Синтаксис команды выглядит следующим образом:
53
chmod [ключи] установка_прав имя_файлаключи] установка_прав имя_файла
Ключи необязательны. Устанавливать права можно двумя способами: с помощью буквенного обозначения прав (plustilino)rwx) и с помощью числового в восьмеричной системе счисления.
Изменение прав с помощью символьной нотации
При установке прав с помощью символов в первом аргументе (plustilino)установка_прав) программы chmod используются три группы символов.
В первой группе указывается, кому будет предоставляться или запрещаться доступ: владельцу (plustilino)u), группе (plustilino)g), остальным (plustilino)o) или всем (plustilino)a). Можно указать как одну, так сразу несколько категорий.
Вторая группа обозначает запрещение, разрешение или назначение права и всегда состоит из одного символа: -, + или =.
В третьей группе перечисляется изменяемые права: чтение (plustilino)r), запись (plustilino)w), исполнение (plustilino)x).
Можно указывать сразу несколько прав.
54

На скрине в первом примере группе добавляется право на запись, что выражается как g+w.
Во втором примере группе и остальным назначается право r--. В третьем случае остальным запрещается читать файл. Отметим, что один и тот же результат можно получить разными способами: как через назначение, так добавлением или удалением права.
Если требуется назначить разным группам пользователей разные права, то такое возможно путем перечисления выражений установка_прав через запятую. При этом пробелы перед и после запятой не ставятся. Также можно перечислить несколько файлов, которым устанавливаются права или задать шаблон. Пример: chmod o-r,a-w month.txt text.txt
Здесь остальным запрещается читать и для всех категорий пользователей устанавливается запрет на изменение. Данные правила применяются по отношению к двум файлам.
Обратим внимание, изменение прав доступа к файловому объекту не меняет дату его модификации. Файл изменяется только тогда, когда меняется его содержание. В свою очередь, права – это одни из внешних атрибутов файла (plustilino)наряду с датами), которые хранятся не в самом файле, а его индексном дескрипторе.
Если все же требуется узнать, когда были изменены права на файл, используйте ключ -c:
pl@pl-desk:$ ls -lc test.html
-rw-rw-rw- 1 pl pl 1798 авг 31 07:58 test.html
55

Установка прав с помощью чисел
Способ использования команды chmod, когда предоставляемые права выражаются одной восьмеричной цифрой для каждой категории пользователей, несколько проще с точки зрения записи. Однако надо помнить, что обозначают цифры:
7 – разрешены чтение, запись, исполнение
6 – разрешены чтение и запись
5 – разрешены чтение и исполнение
4 – разрешено только чтение
0 – ничего не разрешено
В первом аргументе chmod указываются три цифры: первая обозначает права владельца, вторая – группы, третья – остальных.
В первом примере файлу назначаются права на чтение и запись для владельца, а для группы и остальных – только на чтение. Во втором примере всем даются права на чтение и запись.
Установка прав для каталогов
В случае каталогов права на чтение, запись и исполнение имеют особый смысл, о чем было сказано в предыдущем уроке
. Кроме того, часто требуется рекурсивно назначить права для вложенных в каталог объектов. Для этого используется ключ -R.
В примере мы устанавливаем для каталога и вложенных в него объектов права 754. По отношению к каталогам это означает, что владелец может делать все, группа – просматривать
56
содержимое каталога, остальные – только узнавать список объектов каталога. Обратите внимание на использование ключа -d команды ls. Он позволяет получить сведения о самом каталоге, а не его содержимом.
Если для директории установлено право на запись, то та категория, для которой это право установлено, может удалить из этой директории любой файл. Даже тот, который ей не принадлежит. Поэтому бывает полезно устанавливать t-бит. При его наличии у каталога удалять и переименовывать файлы в нем может только владелец этих файлов.
В примере команда chmod применяется в числовой нотации. При этом используется дополнительная цифра 1, которая обозначает установку t-бита. В буквенной нотации достаточно просто написать +t без указания категории пользователей. В выдаче команды ls мы видим символ t вместо икса в тройке прав всех остальных. Это не значит, что бит t заменяет бит x. Это особенность вывода информации. Буква t говорит, что право на исполнение есть. Если бы его не было, использовалась бы заглавная буква.
Шаблоны имен файлов
Bash, а также другие командные оболочки Linux и средства языков программирования позволяют находить в структуре дерева каталогов те файлы, имена которых соответствуют определенному шаблону имени файла. В случае командной оболочки именно она сравнивает с шаблоном имя очередного файла. Если оно соответствует шаблону, то файл будет учтен, если нет – будет пропущен. Шаблон можно сравнить с коробкой, в которую влезет не каждый объект. Не только из-за размеров, также из-за несовпадения формы коробки и предмета.
Зачем нужны шаблоны имен? Часто требуется выполнить однотипные действия над группой файлов. Описывать эти действия по отношению к каждому отдельному файлу было бы трудоемкой задачей. Таким образом, шаблоны позволяют выделить группу файлов, чьи имена удовлетворяют определенным условиям, из общей массы.
Кроме того, шаблоны часто используют для поиска файлов.
Шаблоны имен файлов и каталогов задаются с помощью специальных символов. Чаще используются два: * – звездочка, ? – знак вопроса.
Звездочкой (plustilino)*) в шаблоне обозначают любую группу символов. Их количество роли не играет. Это могут быть пять, десять, один символ или даже ни одного. Так, например, шаблону, состоящему всего из одного символа *, будет соответствовать абсолютно любой файл. Использование шаблона *.html позволит выделить все html-файлы, а шаблон
57
my*.odt – файлы, начинающиеся с "my" и оканчивающиеся на ".odt". Шаблон *2010* определяет все файлы, в именах которых присутствует группа символов 2010.
Знаком вопроса (plustilino)?) в шаблоне обозначают любой один символ. Например, под шаблон otchet.??? подойдут файлы, имеющие расширение из любых трех букв, но начинающиеся именно так, как задано в шаблоне. Шаблону descrip?ion.pdf будут соответствовать файлы с заданным именем, но вместо знака вопроса может стоять любой символ.
Кроме символов звезды и вопроса, существуют более сложные правила записи шаблонов.
Так использование квадратных скобок [ ] со списком вложенных значений позволяет осуществлять более гибкий поиск файлов. Пусть требуется найти все файлы, имена которых начинаются с буквы m, при этом регистр не учитывается. Шаблон будет выглядеть так:
[ключи] установка_прав имя_файлаmM]*]*.
Если надо одновременно найти файлы, начинающиеся на буквы, идущие подряд в алфавите, то задается диапазон. Например, под шаблон [ключи] установка_прав имя_файлаm-pM]*-P]???.png]???.png подойдут все файлы с расширением png, имена которых состоят из четырех букв, причем первая буква m или n или
o или p без учета регистра.
Понятно, что в одном шаблоне имени файла можно использовать разные специальные символы. Например, [ключи] установка_прав имя_файлаaA]*.???]*.???.
В Bash шаблоны имен используются с командами, которые в качестве аргументов принимают имена файлов. Например, ls – просмотр каталогов, cp – копирование файлов, find – поиск файлов и др. Однако на самом деле командам передается не шаблон, а уже подошедшие под него файлы. Определением подходящих под шаблон объектов занимается сама командная оболочка Linux, в данном случае Bash.
58

Поиск файлов. Команда find)
Одной из частых задач администрирования является поиск файлов на компьютере. Данная задача не так проста. Ведь поиск может производиться не только по имени, но и по множеству других свойств файла: размеру, владельцу, времени создания или изменения и др.
Также искать можно в одном каталоге, во вложенных папках, в директориях, находящихся в разных ветвях дерева каталогов.
Таким образом, прежде чем выполнять поиск файлов, надо ответить на два вопроса: что искать и где искать. Отвечая на вопрос "что искать" мы должны указать свойство, по которому выполняется поиск, и его значение или диапазон значений. Пусть требуется найти файлы определенного размера, тогда запрос может быть сформулирован так: "найти файлы, размер которых больше 100 мегабайт".
Запрос может быть более сложным, предполагать поиск сразу по нескольким свойства.
Например, надо найти файлы с определенным расширением, созданные за два последних дня.
При поиске по имени часто используются шаблоны и регулярные выражения, так как человек может не помнить полного имени, или выполняется поиск группы файлов. В последнем случае целью обычно является не столько сам поиск файлов, сколько их фильтрация. То есть выделение из общей массы с последующим выполнением той или иной операции, например, перемещения.
Отсюда следует, что в формуле "где искать + что искать" может быть третья составляющая –
"что делать с найденным".
В командной оболочке Unix-подобных операционных систем для поиска используется программа, или утилита, find. С ее помощью можно гибко настроить критерии поиска, при
59
необходимости выполнить какое-либо действие с найденными объектами. Понятно, что синтаксис команды find сложен, используется множество ключей и комбинаций параметров.
Здесь мы рассмотрим несколько примеров использования find. Полную информацию можно получить, воспользовавшись справочной систем ой
Linux
В простом случае команда find имеет такой синтаксис:
find место_поиска ключ-свойство значение_свойства
На скрине место поиска обведено желтой рамкой, пара ключ и значение – оранжевой. В первом случае в каталоге folder ищутся все файлы, которые были изменены (plustilino)-mtime) за последние 10 дней. Во втором случае файлы ищутся по имени (plustilino)-name) в текущем каталоге.
Имена файлов должны соответствовать шаблону *2*.
Обратите внимание, утилита find не поддерживает "стандарт команд Bash", согласно которому ключи из целого слова, а не одной буквы, должны начинаться с двух подчеркиваний. У find они начинаются с одного.
Если нужно указать несколько каталогов или несколько параметров поиска, это делается перечислением.
Здесь в двух каталогах выполняется поиск файлов png, размер которых больше 5 килобайт.
Шаблон записан в кавычках, иначе не работает.
Если с найденными файлами надо что-то сделать, используется ключ -exec.
В примере ищутся файлы, оканчивающиеся на "txt". Каждый найденный передается команде cp (plustilino)файл подставляется на место фигурных скобок). Команда cp копирует файл в каталог
Загрузки. Конец аргумента exec обозначается обратным слэшем и точкой с запятой.
Задание
Воспользовавшись справочной системой Linux, выясните, какой ключ и как надо использовать для ограничения глубины поиска. Например, надо найти в домашнем каталоге файлы html. При этом во вложенных папках искать не следует.
Ответ
60

Для ограничения поиска по вложенным каталогам используется ключ -maxdepth. Чтобы искать только в указанном каталоге передается значение 1. Пример команды:
find . -maxdepth 1 -name '*.html'
Команда sud)o – администрирование системы
В Unix-подобных операционных системах должен быть привилегированный пользователь – суперпользователь, он же администратор. Логин его учетной записи – root, а домашний каталог находится в /root. Этот пользователь предназначен для администрирования системы, а значит обладает правами на операции с системными файлами, установку программного обеспечения, создание и удаление других пользователей, предоставление им различных доступов.
В более ранних дистрибутивах GNU/Linux, возможно и некоторых сейчас, при установке операционной системы, кроме того что создавался обычный пользователь, надо было задать пароль для root'а, в том числе проприетарные (коммерческие).а. После этого войти в систему можно было как под юзером, так под администратором.
Это создавало дополнительную опасность для системы. Бесконтрольное манипулирование файлами администратором или вход под root'а, в том числе проприетарные (коммерческие).ом злоумышленника могли привести к краху системы. Так выполнение под админом команды rm -rf /test.py ведет к удалению всех файлов.
Поэтому во многих современных дистрибутивах Linux учетная запись суперпользователя отключена, хотя она имеется в системе. Ее можно включить, задав для root'а, в том числе проприетарные (коммерческие).а пароль. Однако этого делать не рекомендуют.
Для администрирования системы Linux сейчас широко используется утилита sudo. Она позволяет первому, который создавался при установке ОС, пользователю выполнять команды с правами администратора. Однако основное преимущество не в том, чтобы не заходить в систему под рутом, а в том, что sudo может быть сконфигурирована так, что пользователь не сможет выполнять абсолютно все административные задачи, а сможет только позволенные.
Используется команда sudo следующим образом:
sudo команда параметры_команды
Допустим, нам надо отредактировать конфигурационный файл hosts. Редактировать мы его планируем в консольном текстовом редакторе nano. Если выполнить команду nano
/test.pyetc/test.pyhosts, файл откроется, но мы не сможем сохранить изменения в нем, так как владельцем файла является root, а все остальные могут только читать файл.
61

Однако, воспользовавшись sudo, мы откроем файл как суперпользователь и получим право на запись. При этом Bash попросит ввести пароль (plustilino)вводимые символы при этом не отображаются) вашей (plustilino)не рута) учетной записи.
Sudo-сессия сохраняется какое-то время. Поэтому выполнение последующих команд с использованием sudo может не требовать ввода пароля.
Если требуется более длительное время работы с правами администратора, то одним из вариантов является команда sudo -s. Вы перейдете в режим суперпользователя, в приглашении командной оболочки Linux символ доллара $ заменяется на знак решетки #.
Вернуться в обычный режим можно, выполнив команду exit.
В примере мы переходим в режим администратора, копируем файл в каталог root'а, в том числе проприетарные (коммерческие).а. Под обычным пользователем мы не можем даже просматривать этот каталог.
Пакетный менеджер APT
Пакетными менеджерами принято называть приложения, предназначенные для управления программным обеспечением, которое установлено в системе или может быть установлено из репозиториев.
62

Почему в unix-подобных ОС системы управления ПО называют "пакетными"? Дело в том, что программы для Linux распространяются в архивах, содержащих множество файлов, а не один исполняемый, как это обычно происходит в случае Windows. Такие архивы, содержащие файлы самой программы, метаданные и другие файлы, принято называть пакетами.
Пакетный менеджер определенным образом распаковывает архив, организует выполнение ряда команд таким образом, чтобы программное обеспечение правильно установилось, были соблюдены все зависимости, не допускает конфликтов с другим ПО.
В мире Linux существует целый ряд пакетных менеджеров. Их распространенность зависит от степени популярности дистрибутивов, в которых они используются. Так часто встречается пакетный менеджер APT (plustilino)advanced package tool), так как он используется семейством Debian,
к которому относятся Ubuntu, Linux Mint и др. Среди других менеджеров можно отметить
YUM для дистрибутивов, пакеты которых распространяются в формате RPM (plustilino)Fedora, CentOS
и др).
Программы apt и apt-get (plustilino)аналог apt, появился раньше, более низкоуровневый) запускаются из командной строки. Однако для них бывают различные надстроенные графические интерфейсы. Таким образом, обычный пользователь может устанавливать и удалять программы в привычной для него среде. Однако вся гибкость управления программами доступна в основном через Bash.
С помощью первого аргумента (plustilino)он же "команда" на скрине), передаваемого программе apt, мы указываем, что хотим сделать: установить программу, удалить, обновить. Вторым аргументом идет имя пакета или его часть, если выполняется поиск. Как для команды, так и для имен пакетов работает автодополнение. Программы берутся из списка источников ПО – репозиториев, список которых можно редактировать.
63

Поскольку изменение установленного на компьютере программного обеспечения относится к административным задачам, то для части команд apt необходимы права администратора.
Таким образом, полный синтаксис установки и удаления ПО таков:
sudo apt install имя_пакета sudo apt remove имя_пакета
Пусть надо установить консольный файловый менеджер Midnight Commander. Имени пакета мы не знаем, поэтому воспользуемся командой search утилиты apt. На экране появится список пакетов с кратким описанием. Очевидно нам нужен пакет mc.
Далее устанавливаем программу, передавая apt'а, в том числе проприетарные (коммерческие).у команду install. Сначала apt соберет данные о пакете и его зависимостях. После этого попросит подтвердить ваше намерение установить пакет, и начнется процесс установки.
64

С помощью sudo apt autoremove можно удалить неиспользуемые пакеты. Скорее всего они требовались для установки ПО. Если надо удалить саму программу, то используется команда remove утилиты apt.
Задание
Установите программу cowsay. Изучите ее документацию и выведите подобное:
65

Ответ
Установка программы: sudo apt install cowsay
Вывести антилопу Гну: cowsay -f gnu Ваша_фраза
Получить список файлов с фигурами: cowsay -l
Архиватор tar
С целью создания и распаковки архивов в GNU/Linux часто используют программу tar. Она архивирует файлы без сжатия. Однако может сама обращаться к утилите, предназначенной для этого, поэтому выполнять отдельно команду сжатия/разжатия не требуется. Утилитой- компрессором может выступать gzip или любая другая из множества.
Архивы без сжатия имеют расширение .tar, со сжатием – в случае gzip расширение будет .tar.gzip или .tar.gz. При распаковке программа tar по расширению файла-архива поймет,
к какой утилите следует обратиться. В случае упаковки, чтобы tar применил программу- компрессор, следует указывать специальную опцию.
Если сжатие выполняется, сначала происходит упаковка файлов в один архив, и только после этого применяется сжатие уже к единственному файлу-архиву. Поэтому расширение, например, .gz находится в конце, а .tar – перед ним.
После имени команды tar записываются ключи, которые сообщают, что мы хотим сделать – упаковать, распаковать или выполнить другое действие. Без ключей команда tar не используется. Затем указывается имя архива. Если выполняется процесс упаковки, то файлы и папки, которые надо поместить в архив, перечисляются после имени создаваемого архива.
Имена/адреса файлов и каталогов можно задавать в том числе с помощью шаблона.
66

В примере ключ -c указывает, что мы создаем архив. Ключ -f необходим, так как упаковка будет выполняться в файл, а не поток вывода. Этот ключ используется почти всегда. В архив упаковываются два объекта – каталог ampBash и файл linux2019.txt.
Ключ -t позволяет вывести на экран список содержимого архива. Если же мы хотим видеть список архивируемых файлов в процессе самой упаковки, в комбинации с ключом -c используется -v. Получается -cvf.
Для распаковки архива требуется ключ -x:
В примере распаковка происходит в текущий каталог. Если надо распаковать в другой, то перед адресом каталога-назначения указывается опции -C. Например: tar -xf archive
-C folder/test.py
Если мы хотим добавить файлы в существующий архив, используется ключ -r:
В случае сжатия необходим дополнительный ключ. Если это -a, то утилита для сжатия определяется по расширению. Хотя есть ключи, которые позволяют указывать конкретные комрессоры.
Здесь можно сравнить размеры сжатого архива и обычного.
Утилита grep
Если с помощью команды find файлы ищут, то утилита grep выполняет поиск по их содержимому. Например, надо найти файл, содержащий тот или иной текст. Или в одном файле найти строки, включающие конкретное слово. Также grep используется для фильтрации вывода других команд. При этом вывод этих команд перенаправляется на ввод к grep. Сам же grep тоже может перенаправлять свой вывод, например, в файл.
67

Пусть у нас есть каталог с HTML-файлами и мы хотим узнать используемую версию языка
HTML. Для этого не обязательно просматривать все файлы. Достаточно посмотреть любой один и найти в нем строку, начинающуюся с "
1   2   3   4   5


написать администратору сайта