Внутреннее устройство Linux
Шрифт:
совет
Чтобы узнать, не висят ли в текущем терминале приостановленные процессы, выполните команду jobs.
Если вы намерены использовать несколько оболочек, запустите каждую из них в отдельном окне терминала, переведите в фон неинтерактивные процессы (см. следующий раздел) или научитесь использовать команду screen.
2.16.4. Фоновые процессы
Обычно при запуске из оболочки команды в системе Unix вы не увидите строки приглашения, пока команда не завершит работу. Тем не менее можно отделить процесс от оболочки и поместить его в «фон» с помощью символа амперсанда (&); после этого
$ gunzip file.gz &
Оболочка должна в ответ выдать номер PID нового фонового процесса, а строка приглашения появится немедленно, чтобы вы смогли работать далее. Процесс продолжит свое выполнение и после того, как вы выйдете из системы. Это чрезвычайно удобно, если приходится запускать программу, которая производит довольно много вычислений. В зависимости от настроек системы оболочка может уведомить вас о завершении процесса.
Обратной стороной фоновых процессов является то, что они могут ожидать начала работы со стандартным вводом (и, хуже того, выполнять чтение прямо из терминала). Если фоновая программа пытается считывать что-либо из стандартного ввода, она может зависнуть (попробуйте команду fg, чтобы вызвать ее из фона) или прекратить работу. К тому же, если программа выполняет запись в стандартный вывод или стандартную ошибку, все это может отобразиться в терминале вне всякой связи с какими-либо выполняемыми командами: вы можете увидеть неожиданный результат, пока работаете над чем-то другим.
Лучший способ добиться того, чтобы фоновый процесс не беспокоил вас, — перенаправить его вывод (и, возможно, ввод), как описано в разделе 2.14.
Узнайте о том, как обновить окно терминала. Оболочка bash и большинство полноэкранных интерактивных программ поддерживают сочетание клавиш Ctrl+L для повторной отрисовки всего экрана. Если программа производит считывание из стандартного ввода, сочетание клавиш Ctrl+R обычно обновляет текущую строку, однако нажатие неверного сочетания в неподходящий момент может привести вас к более печальной ситуации, чем была раньше. Нажав, например, Ctrl+R в строке приглашения оболочки bash, вы окажетесь в режиме реверсивного поиска isearch mode (для выхода из него нажмите клавишу Esc).
2.17. Режимы файлов и права доступа
Каждый файл системы Unix обладает набором прав доступа, которые определяют, можете ли вы читать, записывать или запускать данный файл. Команда ls -l отображает эти права доступа. Вот пример такой информации:
– rw-r—r—
Режим файла
Оставшаяся часть режима файла содержит сведения о правах доступа, которые разделены
Каждый из наборов прав доступа может содержать четыре основных обозначения (табл. 2.5).
Рис. 2.1. Составляющие режима файла
Таблица 2.5. Обозначение прав доступа
Обозначение
Описание
r
Файл доступен для чтения
w
Файл доступен для записи
x
Файл является исполнимым (можно запустить его как программу)
–
Ничего не обозначает
Права доступа пользователя (первый набор символов) относятся к пользователю, который является владельцем файла. В приведенном выше примере это juser. Второй набор символов относится к группе (в данном случае somegroup). Любой пользователь из этой группы обладает указанными правами доступа. Воспользуйтесь командой groups, чтобы узнать, в какую группу вы входите. Дополнительную информацию можно получить в подразделе 7.3.5.
В третьем наборе (другие права доступа) указано, кто еще будет обладать в системе правами доступа. Их часто называют правами доступа для всех.
примечание
Каждая позиция, содержащая обозначение права доступа на чтение, записи или исполнение, иногда называется битом прав доступа. По этой причине вы можете слышать, как пользователи упоминают про «биты доступа для чтения».
У некоторые исполняемых файлов в правах доступа пользователя вместо символа x указан символ s. Это говорит о том, что исполняемый файл является файлом setuid — при его выполнении он запускается так, словно владельцем файла является пользователь с указанным идентификатором, а не вы. Многие команды используют бит setuid, чтобы получить корневые права доступа, необходимые для изменения системных файлов. В качестве примера можно привести команду passwd, которой необходимо изменять файл /etc/passwd.
2.17.1. Изменение прав доступа
Чтобы изменить права доступа, используйте команду chmod. Сначала укажите набор прав, который вы желаете изменить, а затем укажите бит, подлежащий изменению. Например, чтобы добавить права доступа на чтение файла для группы (g) и всех пользователей (o, по первой букве слова other — «остальные»), нужно запустить следующие две команды:
$ chmod g+r file
$ chmod o+r file
Можно также объединить их таким образом:
$ chmod go+r file
Чтобы удалить эти права доступа, используйте go-r вместо go+r.
примечание
Довольно очевидно, что не следует предоставлять всем пользователям права доступа на запись файла, поскольку каждый получит возможность изменить системные файлы. Но сможет ли при этом кто-либо, подключившись через Интернет, изменить ваши файлы? Вероятно, не сможет, если только в вашей системе нет уязвимости в сетевой защите. Если же она уязвима, то права доступа к файлам ничем вам не помогут.