Раздел 4

УПРАВЛЕНИЕ ФАЙЛАМИ

Обзор

На предыдущем уроке было рассказано о том, как создавать файлы с помощью редактора vi. Этот урок объясняет как организовывать, защищать файлы и как управлять ими.

ЦЕЛИ

  1. Использовать метасимволы для выполнения команд над несколькими файлами.
  2. Выполнять команды cat, pg и pr для вывода на экран содержимого нескольких файлов.
  3. Печатать содержимое файлов командой lp.
  4. Проверять готовность принтера командой lpstat.
  5. Отменять запрос принтера.
  6. Перемещать и переименовывать файлы командой mv.
  7. Копировать файлы командой cp.
  8. Получать доступ к отдельному файлу из двух разных мест посредством связывания имен файлов.
  9. Символически связывать файлы в разных файловых системах.
  10. Создавать каталоги командой mkdir.
  11. Переименовывать каталоги командой mv.
  12. Копировать каталоги командой cp -r.
  13. Удалять обычные файлы командой rm.
  14. Удалять каталоги командой rmdir.
  15. Описать назначение прав доступа к файлу.
  16. Изменять права доступа к файлу командой chmod.
  17. Описать права доступа к файлу и каталогу по умолчанию и команду umask.
  18. Изменять права владения файлом командой chown.
  19. Выводить на экран идентификаторы пользователя (uid) и группы (gid) командой id.
  20. Изменять групповое членство, назначенное файлу, командой chgrp.
  21. Выполнять команду newgrp для изменения вашей входной группы.

Печать файлов с использованием метасимволов в их именах

Цели

  1. Использовать метасимволы для выполнения команд над несколькими файлами.
  2. Выполнять команды cat, pg и pr для вывода на экран содержимого нескольких файлов.
  3. Печатать содержимое файлов командой lp.
  4. Проверять готовность принтера командой lpstat.
  5. Отменять запрос принтера.

Метасимволы в именах файлов

Многие команды системы UNIX могут выполняться для нескольких файлов одновременно. Например, команды cat, pg и pr могут выводить на экран содержимое нескольких файлов одновременно:

$ pr budget90 budget91 budget92 budget93<RET>

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

Как работают метасимволы? Вы набираете одинаковые символы для имен файлов, в данном случае - budget. А метасимволы вы используете для представления символов, которые различаются.

Перед тем, как выполнить команду, shell оценивает командную строку. Затем shell заменяет метасимволы теми частями имен файлов, которые удовлетворяют им.

Метасимволы, используемые shell, подобны (но не идентичны) некоторым метасимволам редакторов vi, ex и ed. Разница в том, что метасимволы shell представляют части имен файлов, а метасимволы редакторов представляют образцы содержимого файлов. Ниже приведены основные метасимволы shell.

Звездочка

Звездочка * представляет собой произвольную строку в именах файлов (возможно, пустую, не содержащую ничего).

Звездочка сама по себе представляет имя каждого файла каталога, за исключением тех файлов, чьи имена начинаются с точки (.).

У команды ls есть интересная разновидность, появляющаяся при использовании метасимволов. Предположим, вы набрали ls * и используете звездочку в качестве аргумента команды. Если звездочкой представлен каталог, то команда ls выведет на экран содержимое каталога. В противном случае, ls выведет на экран только имена подходящих файлов. Смотрите Примеры 1 и 2 и Другие примеры на следующей странице. В Примере 2 ls * представляет все файлы, а когда представленное имя есть имя каталога, команда ls выводит на экран содержимое каталога, как в случае с каталогами receivable и work.

МЕТАСИМВОЛЫ В ИМЕНАХ ФАЙЛОВ

* представляет произвольную строку (возможно, пустую)
? представляет любой одиночный знак
[ ] представляет ОДИН из указанных символов

ПРИМЕР 1:

$ cd<RET>

$ cd unit4<RET>

$ ls budget*tot<RET>

budget8tot budget9tot budgettot представляет пустую строку!

ПРИМЕР 2:

$ ls work<RET>

dec.92 jun.92 mar.92 sep.92

dec.93 jun.93 mar.93 sep.93

$ ls *<RET>

budget88 budget8tot budget91 budget93 budget9tot tot

budget89 budget90 budget92 budget94 budgettot

receivable:

91_Adams 91_Somers 92_French 92_Reynolds

91_Harris 92_Anderson 92_Johnson

work:

dec.92 dec.93 jun.92 jun.93 mar.92 mar.93 sep.92 sep.93

ДРУГИЕ ПРИМЕРЫ: Наберите на своем терминале команды:

$ ls *tot

$ pr work/*

$ pg budget*

$ cat b*4

Знак вопроса

Знак вопроса ? представляет собой любой одиночный символ в имени файла. Вы можете использовать в команде несколько знаков вопроса, каждый из которых будет представлять по одному символу. В Примере 1 budget8? представляет два файла - budget88 и budget89.

Единственным исключением при использовании метасимвола ? являются файлы, имена которых начинаются с точки (.).

ЗНАК ВОПРОСА

ПРИМЕР 1:

$ ls budget?tot<RET>

budget8tot budget9tot

$ cat budget8? > total8<RET>

$ cat total8<RET>

1988 % of sales $ projection

---- ---------- ------------

sales net 100.000 3200000

1989 % of sales $ projection

---- ---------- ------------

sales net 100.000 3800000

$ ls budget??<RET>

budget88 budget89 budget90 budget91 budget92 budget93 budget94

$

Класс символов

Класс символов - это группа символов, заключенная в квадратные скобки [ ]. В данном случае shell подставляет один из символов, указанных в скобках.

Класс символов - это может быть либо список символов, либо ряд символов с использованием дефиса, где первым указывается самый старший символ (в соответствии с ASCII кодами). Смотрите Пример 1 на следующей странице.

Поскольку каждый класс символов представляет лишь один символ, вы можете указать в командной строке несколько классов символов.

Для представления символов, НЕ УКАЗАННЫХ в классе символов, наберите восклицательный знак (!) на месте первого символа внутри скобок. Shell подставляет в этом случае любой из символов, не стоящий в скобках. Пример 2 на следующей странице показывает применение такого исключенного класса, когда на экран выводятся имена всех файлов каталога, за исключением файла budget 91.

При использовании метасимвола [ ] существует аналогичное исключение - файлы, имена которых начинаются с точки (.).

КЛАСС СИМВОЛОВ

ПРИМЕР 1:

$ ls budget9[023]<RET>

budget90 budget92 budget93

$ ls budget9[1-3]<RET>

budget91 budget92 budget93

ПРИМЕР 2:

$ ls budget9[!1]<RET>

budget90 budget92 budget93 budget94

$

Комбинирование метасимволов ?, *, [ ]

Используя имена файлов в качестве аргументов команд, вы можете комбинировать метасимволы. В Примере 1 на следующей странице команда wc делает полный подсчет для каждого файла, имя которого начинается с budget, а затем идет 8 или 9 и что-либо еще.

Вы можете использовать метасимволы в любом месте в имени пути. В Примере 2 на следующей странице вы работаете с каталогом receivable. Первая звездочка не дает быть напечатанным всему каталогу receivable. Вам нужно получить список файлов принятых счетов с 1991 по 1992 от клиентов, чьи имена начинаются с A по L.

Вы можете использовать метасимволы в качестве аргументов команды find. Но имя файла у этой команды должно быть написано в кавычках. Использование кавычек обсуждается в четвертом уроке шестого раздела. В Примере 3 на соседней странице файл tot является единственным файлом каталога unit4, имя которого начинается с букв to.

КОМБИНИРОВАНИЕ МЕТАСИМВОЛОВ ?, *, [ ]

ПРИМЕР 1:

$ wc budget[89]*<RET>

23 72 995 budget88

23 72 995 budget89

69 216 2985 budget8tot

23 72 995 budget90

23 72 995 budget91

23 72 995 budget92

23 72 995 budget93

23 72 995 budget94

92 288 3980 budget9tot

322 1008 13930 total

$

ПРИМЕР 2:

$ ls rec*/9[12]_[A-L]*<RET>

receivable/91_Adams receivable/92_Johnson

receivable/91_Harris receivable/92_French

receivable/92_Anderson

$

ПРИМЕР 3:

$ find .. -name 'see*' -print<RET>

../unit6/seepath

../seepath

$

Вывод на экран нескольких файлов одновременно

Команды pg, pr и cat печатают содержимое файлов на экране вашего терминала. Используя метасимволы, на экран можно выводить сразу несколько файлов.

Команда pg

Команда pg позволяет комбинировать метасимволы в именах файлов. В Примере 1 на соседней странице на экран выводятся имена файлов, в которых НЕТ цифр от 0 до 9.

Команда cat

Опция -v команды cat показывает на экране непечатаемые символы, за исключением табуляций, символов новой строки и формата.

Опция -t команды cat, использованная после опции -v, выводит на экран непечатаемые символы, включая табуляции, обозначаемые ^I. В Примере 2 на следующей странице, когда вы применяете команду cat к файлам sep.92 и sep.93, раздается звонок. Если вы добавите опцию "-v", то вместо звонков появятся их символы CTRL/g. Если вы добавите опции -v и -t к команде cat, то вы увидите символы ^I, представляющие табуляции.

ВЫВОД НА ЭКРАН НЕСКОЛЬКИХ ФАЙЛОВ ОДНОВРЕМЕННО

ПРИМЕР 1:

$ ls b*[!0-9]<RET>

budget8tot budget9tot budgettot

$ pg b*[!0-9]<RET>

::::::::::::::

budget8tot

::::::::::::::

.

.

` .

ПРИМЕР 2:

$ ls work/sep.9?<RET>

work/sep.92 work/sep.93

$ cat work/sep.9?<RET>

Status Report For 3Q92 July - September 1992

------------------------------

.

.

.

$ cat -v work/sep.9?<RET>

Status Report For 3Q92 July - September 1992

------------------------------

^G^G^G^G^G^G^G^G

.

.

.

$ cat -v -t work/sep.9?<RET>

^IStatus Report For 3Q92 July - September 1992

^I----------------------------

^G^G^G^G^G^G^G^G

.

.

.

Команда pr

Опция -d команды pr выводит файлы на экран, удваивая пробелы.

Опция -n команды pr выводит на экран нумерацию строк файла. В Примере 1 на следующей странице содержимое файла budgettot перенаправляется в файл newbudget, который выводится на экран с удвоенными пробелами и нумерацией строк.

КОМАНДА pr

ПРИМЕР 1:

$ ls *tt*<RET>

budgettot

$ pr -dn *tt* > newbudget<RET>

$ cat newbudget<RET>

Nov 17 08:53 1988 budgettot Page 1

1 1987 % of sales $ projection

2 ---- ---------- ------------

3 sales net 100.000 3200000

.

.

.

$

Печать содержимого файлов командой lp

Вы использовали команды pg, pr и cat для печати содержимого файлов на экран терминала. Команда lp печатает содержимое файлов на принтере. В зависимости от прав доступа к вашим файлам и каталогам, вы можете набрать команду:

lp имя_файла

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

cat имя_файла | lp

Команда lp не производит форматирования, поэтому принтер печатает содержимое файла точно так же, как команда cat выводит его на экран. Когда вы используете конвейеры для вывода на принтер, то обычно вы форматируете файлы командой pr. Например, чтобы напечатать на принтере файл с удвоенными пробелами, наберите:

pr -dn имя_файла | lp

Выбор принтера

Если ваша система имеет несколько принтеров, то команда lp по умолчанию использует один принтер. Для выбора другого принтера наберите lp -d и имя принтера. Имена принтеров можно узнать у системного администратора. Формат команды:

pr имя_файла | lp -d имя_принтера

Опции команды lp

Опция -n команды lp позволяет вам указать количество печатаемых копий. Формат команды:

pr имя_файла | lp -n количество

Опция -m команды lp посылает вам сообщение, когда нужные вам файлы будут напечатаны. Другие опции команды lp указаны в "Справочнике пользователя".

ПЕЧАТЬ СОДЕРЖИМОГО ФАЙЛОВ КОМАНДОЙ lp

ПРИМЕР 1: Перенаправление вывода на принтер:

$ pr -dn tot | lp<RET>

request id is lp-4573 (standard input)

$

ПРИМЕР 2:

$ ls -R | lp -d lp1<RET>

request id is lp1-4574 (standard input)

$

ПРИМЕР 3:

$ pr b*tot | lp -n 2 -m<RET>

request id is lp1-4576 (standard input)

$ mailx<RET>

mailx version 4.0 Type ? for help.

"/var/mail/jmg": 1 message 1 new

>N 1 lp Wed Feb 1 10:31 9/115

? 1<RET>

Message 1:

From lp Wed Feb 1 10:34 EST 1989

To: jmg

Subject: lp

Content-Type: text

Content-Length: 57

Status: R

printer request lp1-4576 has been printed on printer lp1

? d<RET>

? q<RET>

$

Принтерный статус

Команда lp составляет очередь из требований на печать и сообщает вам номер вашего заказа. Команда lpstat сообщает статус и номера ваших требований. Опция -o команды lpstat сообщает статус и номера всех требований команды lp.

Отмена запроса принтера

Команда cancel отменяет любое требование принтера, работа по которому еще не завершена. Аргументом этой команды является номер требования, который выводят на экран команды lp и lpstat. Чтобы прекратить выполняемую в данный момент принтером работу, укажите имя принтера в качестве аргумента команды cancel.

ПРИНТЕРНЫЙ СТАТУС

ПРИМЕР 1:

$ lpstat<RET>

lp1-4574 jmg 743 Aug 2 10:56 on lp1

$ lpstat -o<RET>

lp3-4573 slf 268 Aug 2 10:53 on lp3

lp1-4574 jmg 743 Aug 2 10:56 on lp1

lp1-4575 jas 851 Aug 2 10:58 waiting

$

ПРИМЕР 2:

$ pr budget88 | lp -d lp1<RET>

request id is lp1-7099 (standard input)

$ cancel lp1-7099<RET>

request "lp1-7099" canceled

$

Выводы и упражнения

Выводы урока

Метасимволы в именах файлов: заменители частей имен файлов

Звездочка: представляет любую строку (возможно, пустую)

Знак вопроса: представляет любой одиночный символ

Класс символов: представляет любой символ, из указанных в квадратных скобках [ ]

≈ список символов или ряд символов
≈ знак восклицания: представляет любой символ КРОМЕ указанных в скобках

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

Опция -v команды cat: выводит на экран непечатаемые символы, за исключением табуляций, символов новой строки и формата

Опция -v -t команды cat: Выводит на экран непечатаемые символы, включая табуляции

Опция -dn команды pr: выводит на экран файл, удваивая пробелы

Команда lp: печатает содержимое файла на принтере

≈ создает очередь из заявок на принтерную печать и сообщает номер вашей заявки

Опция -d команды lp: позволяет выбирать принтер

Опция -n команды lp: позволяет указывать количество печатаемых копий

Опция -m команды lp: посылает вам сообщение, о том, когда ваш заказ будет выполнен

Команда lpstat: сообщает статус и номера заявок команды lp

Опция -o команды lpstat: сообщает статус и номера всех заявок lp

Команда cancel: отменяет принтерные заказы, которые еще не выполнены

Упражнение 4.1.А

А. Войдите в свой каталог. Спросите у преподавателя имя вашего принтера.

1. Распечатайте на принтере календарь на этот год.

В. Войдите в каталог unit3.

1. Выведите на экран список файлов, имена которых оканчиваются на em.

2. Выведите на экран список файлов, имена которых начинаются с буквы p.

3. Выведите на экран список файлов, имена которых содержат букву a.

С. Войдите в каталог unit4.

1. Используя перенаправление, создайте файл с именем work93. В этом файле должны содержаться все файлы, имена которых оканчиваются на число 93.

2. Выведите на экран список файлов, имена которых начинаются со слова budget, а затем следуют любые два символа.

3. Выведите на экран содержимое файлов budget90, budget91, budget92, используя метасимволы. Затем одной командой распечатайте эти файлы на принтере.

4. Проверьте статус сделанных вами заявок на принтер. Затем, попытайтесь отменить эти заявки, до того как они будут выполнены.

5. Используя перенаправление, создайте файл с именем budgetall. В этом файле должны содержаться файлы budget88, budget89, budget90, budget91, budget92, budget93 и budget94.

D. Войдите в каталог unit5.

1. Используя метасимволы в именах файлов, выполните одну команду file, чтобы выяснить типы всех файлов каталога.

2. Пользуясь "Справочником пользователя", найдите опцию команды pr, которая печатает каждую строчку с отступом. Выведите на экран файл friends с отступом в 10 позиций и с нумерацией строк.

3. Выведите на экран файл friends, удваивая пробелы. Но на этот раз создайте конвейер таким образом, чтобы файл выводился постранично.

4. В вашем каталоге найдите все файлы, имена которых заканчиваются на t.

Организация файлов

Цели

  1. Перемещать и переименовывать файлы командой mv.
  2. Копировать файлы командой cp.
  3. Получать доступ к отдельному файлу из двух разных мест посредством связывания имен файлов.
  4. Символически связывать файлы в разных файловых системах.
  5. Создавать каталоги командой mkdir.
  6. Переименовывать каталоги командой mv.
  7. Копировать каталоги командой cp -r.
  8. Удалять обычные файлы командой rm.
  9. Удалять каталоги командой rmdir.

Перемещение, копирование и переименование файлов

Создав файл, вы можете переименовать его или переместить в другой каталог командой mv. Вы также можете скопировать его в другой файл или каталог командой cp. Эти две команды имеют одинаковый формат и должны иметь по меньшей мере два аргумента:

cp опции файл(ы) цель

mv опции файл(ы) цель

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

Опция -i

Если целью является обычный файл, и файл с этим именем уже существует, то система ПЕРЕПИСЫВАЕТ его содержимое на содержимое нового файла, который вы копируете или перемещаете. Чтобы избежать этого, используйте с командами mv и cp опцию -i. В этом случае система будет задавать вам вопрос - надо ли переписывать существующий файл? Чтобы переписать файл, ответьте y (да); в противном случае система не даст вам переписать файл.

В Примере 1 на следующей странице команда mv изменяет имя файла с budget92 на budget98.

В Примере 2 команда cp копирует содержимое файла budget98 в новый файл под именем budget99. Заметьте, что применение метасимволов возможно, потому что в каталоге есть только один файл подходящий к описанию b*98.

В Примере 3 команда cp -i копирует файл budget88 в каталог, в котором вы находитесь.

В Примере 4 команда mv -i спрашивает вас, хотите ли вы переписать существующий файл.

В Примере 5 команда cp копирует файл с именем june.92 из каталога work в текущий каталог.

В Примере 6 команда cp копирует файл с именем 92_French из каталога receivable в текущий каталог unit4 и меняет его имя на French92.

Вот список файлов, используемых в примерах.

$ ls unit4<RET>

budget88 budget8tot budget91 budget93 budget9tot

budget89 budget90 udget92 budget94 budgettot

ПЕРЕМЕЩЕНИЕ, КОПИРОВАНИЕ И ПЕРЕИМЕНОВАНИЕ ФАЙЛОВ

cp опции файл(ы) цель

mv опции файл(ы) цель

ПРИМЕР 1:

$ mv budget92 budget98<RET>

$ ls budget92<RET>

No such file or directory

$

ПРИМЕР 2:

$ cp b*98 budget99<RET>

$ ls b*9[89]<RET>

budget98

budget99

$

ПРИМЕР 3:

$ cp -i budget88 ..<RET>

$ ls ../bud*<RET>

../budget88

$

ПРИМЕР 4:

$ mv -i budget88 ..<RET>

mv: overwrite ../budget88? n<RET>

$

ПРИМЕР 5:

$ cp work/jun.92 .<RET>

$ ls jun*<RET>

jun.92

$

ПРИМЕР 6:

$ cp rec*/*Frenc? French92<RET>

$ ls Fr*<RET>

French92

$

Связывание файлов

Иногда вы хотите разместить файл в нескольких каталогах одновременно, например, чтобы другие пользователи имели доступ к файлу из разных мест в системе. Другими словами, вы хотите связать (link) этот файл. Команда ln добавляет к обычному файлу связующее звено, и вы получаете доступ к файлу из нескольких каталогов или под разными именами. Формат команды:

ln файл(ы) цель

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

Аргументы в пользу связывания файлов

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

Когда не стоит связывать

Копирование бывает предпочтительнее связывания в случае, если вы и другой пользователь хотите модифицировать файл каждый по-своему. Например, два разных человека не могут одновременно вызвать vi для работы с одним файлом.

Опция -i команды ls

В ОС UNIX имя каждого файла имеет ассоциированный номер, который используется как косвенный указатель к содержимому файла. Этот косвенный указатель называется inode number. Опция -i команды ls выводит на экран inode number файла. В Примере 1 на следующей странице, после того, как вы связали файл под именем check.paint с вашим каталогом unit4, выводимое количество связующих звеньев изменяется с 1 на 2. После того, как вы изменяете имя файла на paint1 и выводите список файлов в обоих каталогах, содержимое файла и его inode number остаются неизменными.

СВЯЗЫВАНИЕ ФАЙЛОВ

ln файл(ы) цель

ПРИМЕР 1:

$ ls -li ../unit3/paint<RET>

3028 -rw-r----- 1 jas train 1447 Jul 8 14:35 ../unit3/paint

$ ln ../unit3/paint .<RET>

$ ls -li ../unit3/pa*<RET>

3028 -rw-r----- 2 jas train 1447 Jul 8 14:35 ../unit3/paint

$ ls -li pa*<RET>

3028 -rw-r----- 2 jas train 1447 Jul 8 14:35 paint

$ mv paint paint1<RET>

$ ls -li paint1 ../unit3/paint<RET>

3028 -rw-r----- 2 jas train 1447 Jul 8 14:35 ../unit3/paint

3028 -rw-r----- 2 jas train 1447 Jul 8 14:35 paint1

$ pr paint1<RET>

DATE

President

Anderson Paint Company

.

.

$ pr ../unit3/paint<RET>

DATE

President

Anderson Paint Company

.

.

$

Символические связи

Символическая связь - это файл, содержащий имя пути к другому файлу. Символические связи могут осуществлять соединение через физически различные файловые системы. Они также поддерживают имена старой системы совместимыми с более новыми. Например, ранние версии ОС UNIX организовывали каталог news в каталоге usr. Сейчас /usr/news связан символически с /var/news.Если вы набираете cat /usr/news/*, то на экран по-прежнему выводятся новости, расположенные в /var/news/*.

Символические связи создаются опцией -s команды ln. Формат этой команды:

ln -s файл цель

Файл - это фактический файл. Также это может быть имя пути. Файл не обязан существовать на момент написания команды. Впоследствии, когда вы создадите этот файл, он станет символически связан с целью.

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

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

Опция -ld команды ls

Опция -d, добавленная к команде ls -l, выводит на экран статус каталога. Пример 2 на следующей странице показывает, что каталог /usr/news символически связан с каталогом /var/news.

СИМВОЛИЧЕСКИЕ СВЯЗИ

ПРИМЕР 1:

$ cat /usr/news/*<RET>

В соответствии с изменениями в системных именах от 05-19-89,

все сообщения для "mona5" должны отправляться "jo5".

$ cat /usr/news/*<RET>

В соответствии с изменениями в системных именах от 05-19-89,

все сообщения для "mona5" должны отправляться "jo5".

$

ПРИМЕР 2:

$ ln -s /var/news /usr/news<RET>

$ ls -ld /usr/news /var/news<RET>

lrwxrwxrwx 2 bin bin 512 Sep 26 14:04 /usr/news -> /var/news

-rwxrwxrwx 2 bin bin 512 Sep 26 14:04 /var/news

$

Создание каталога командой mkdir

Команда mkdir позволяет вам создавать каталоги. Чтобы создать каталог в нужном вам месте, войдите в вышестоящий каталог (команда cd). Затем наберите mkdir и имя нового каталога в качестве аргумента этой команды:

mkdir имя_каталога

Создав каталог, вы по-прежнему останетесь в вышестоящем каталоге. Для перехода в новый каталог вы должны воспользоваться командой cd.

После создания каталога вы можете копировать и перемещать в него файлы или создавать в нем собственные файлы. В Примере 1 на следующей странице команда ls лишь возвращает к приглашению $, потому что каталог mydata пуст.

Переименование каталогов

Команда mv перемещает файлы с одного места на другое. При работе же с каталогами эта команда только переименовывает их, не перемещая на другое место. Смотрите Пример 2 на следующей странице.

СОЗДАНИЕ КАТАЛОГА КОМАНДОЙ mkdir

mkdir имя_каталога

ПРИМЕР 1:

$ mkdir mydata<RET>

$ cd mydata<RET>

$ pwd<RET>

/home/stu2/unit4/mydata

$ ls -l<RET>

total 0

$ cd ..<RET>

$mv budgettot mydata<RET>

$ ls mydata/b*<RET>

mydata/budgettot

$

ПРИМЕР 2:

$ mv mydata data<RET>

$ ls -ld data<RET>

drwx------ 2 jas train 48 Dec 19 12:37 data

$

Копирование каталогов

Команда cp копирует только файлы. Для копирования файлов каталога, подкаталогов и их файлов используйте команду cp -r. При необходимости можно создать новый каталог командой mkdir (каталог, в котором должны появится эти файлы). Формат команды:

cp -r опции файл(ы) цель

В Примере 1 вы создаете подкаталог games вашего каталога. Затем вы копируете содержимое каталога fun, включая его подкаталог morefun, в новый каталог games.

Перемещение каталогов

Для перемещения каталога придерживайтесь вышеприведенного формата с командой mv.

Ранние версии ОС UNIX не содержат опцию cp -r. Для копирования каталога со всеми подкаталогами и файлами необходима команда cpio. Нужно совершить следующие шаги:

Шаг 1: Создайте новый каталог, куда нужно скопировать файлы, командой mkdir.

Шаг 2: Войдите в каталог, который вы хотите скопировать.

Шаг 3: Наберите: find . -print | cpio -pwd имя_каталога (в который нужно копировать).

КОПИРОВАНИЕ КАТАЛОГОВ

cp -r опции файл(ы) цель

ПРИМЕР 1:

$ cd<RET>

$ ls -F fun<RET>

ATTlogo heart* morefun/ thanks

$ mkdir games<RET>

$ cp -r fun games<RET>

$ ls -F games/*<RET>

ATTlogo heart* morefun/ thanks

$

Удаление обычных файлов командой rm

Поскольку пространство диска разделено между всеми пользователями, экономия его - дело каждого пользователя. Если у вас есть файлы, не нужные вам сейчас, но могущие понадобиться вам впоследствии, попросите системного администратора сохранить их на каком-нибудь носителе - например, на дискете. Если некоторые файлы вам больше не нужны совсем, то удалите их командой rm.

Вы можете набирать в командной строке имена этих файлов целиком, а можете использовать метасимволы. Смотрите Пример 1 на следующей странице.

ПРЕДУПРЕЖДЕНИЕ: Система может удалить ВСЕ файлы, не задав вам дополнительного вопроса. Например, если вы наберете rm *, то система удалит все файлы текущего каталога. Если вы удалили файл, то уже не сумеете восстановить его самостоятельно. Сделать это может лишь системный администратор при условии, что была сделана соответствующая страховочная копия. Поэтому будьте осторожны при наборе этой команды. Например:

rm m* - удаляет все файлы, начинающиеся на m

rm * - удаляет все файлы в текущем каталоге

Опция rm -i

Если вы установите опцию -i для команды rm, то система будет переспрашивать вас, следует ли ей удалять файл. Чтобы удалить файл, наберите y (да). Смотрите Пример 2 на следующей странице.

УДАЛЕНИЕ ОБЫЧНЫХ ФАЙЛОВ

ПРИМЕР 1:

$ cd work<RET>

$ rm 92.may<RET>

rm: 92.may non-existent

$ ls<RET>

dec.92 dec.93 jun.92 jun.93

mar.92 mar.93 sep.92 sep.93

$ rm m*2<RET>

$ ls<RET>

dec.92 dec.93 jun.92 jun.93

mar.93 sep.92 sep.93

$

ПРИМЕР 2:

$ rm -i *<RET>

dec.92: ? n<RET>

dec.93: ? y<RET>

jun.92: ? n<RET>

jun.93: ? y<RET>

mar.93: ? y<RET>

sep.92: ? n<RET>

sep.93: ? y<RET>

$ ls<RET>

dec.92 jun.92 sep.92

$ cd ..<RET>

$ pwd<RET>

/home/stu2/unit4

$

Удаление каталогов

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

Если вы удалили каталог по ошибке, то немедленно найдите системного администратора. Если существовали страховочные копии ваших файлов, то системный администратор способен восстановить их.

Опция rm -r

Для удаления каталога со всеми находящимися в нем файлами, а также подкаталогами и их файлов используйте опцию -r команды rm. Эта опция рекурсивно удаляет каталог и его содержимое, не задавая при этом дополнительных вопросов. Смотрите Пример 1 на следующей странице.

Вы можете комбинировать опции -r и -i, тогда система будет удалять каталог, переспрашивая. Смотрите Пример 2 на следующей странице.

Команда rmdir

Если каталог пуст, то его можно удалить командой rmdir. Смотрите Пример 3 на следующей странице.

УДАЛЕНИЕ КАТАЛОГОВ

ПРИМЕР 1:

$ rm data<RET>

rm: data directory

$ rmdir data<RET>

rmdir: data: Directory not empty

$ rm -r data<RET>

$ ls data<RET>

No such file or directory

$

ПРИМЕР 2:

$ rm -ri work<RET>

directory work?y<RET>

work/dec.92? y<RET>

work/jun.92? y<RET>

work/sep.92? y<RET>

work? y<RET>

$

ПРИМЕР 3:

$ mkdir temp<RET>

$ rmdir temp<RET>

$

Выводы и упражнения

Выводы урока

Команда mv: перемещает файлы в файлы под другим именем (переименовывает) или в другие каталоги

Команда cp: копирует файлы в файлы под другим именем или в другие каталоги

≈ качестве аргумента можно задавать путь к файлу или каталогу
≈ при копировании нескольких файлов аргумент должен быть каталогом

Опция -i команд cp и mv: система спрашивает вас, нужно ли ей переписывать существующий файл заново

Команда ln: добавляет к обычному файлу связующее звено

≈ становится возможен доступ к файлу из разных каталогов или под разными именами
≈ команда
ls -s: выводит на экран inode number файла

Команда ln -s: создает символические связи

Команда mkdir: создает каталоги

≈ сперва войдите в вышестоящий каталог

Команда mv: переименовывает каталоги

≈ команда ls -ld: выдает статус каталога

Команда cp -r: копирует каталог со всеми файлами и подкаталогами

≈ если необходимо, создайте каталог
cp -rопции файл(ы) цель
≈ Для перемещения каталога сначала скопируйте его, а затем удалите старый

Команда rm: удаляет файлы

≈ опция rm *: удаляет все файлы текущего каталога
≈ опция
rm -i: система переспрашивает, нужно ли ей удалять файл

Команда rm -r: удаляет каталог и все его содержимое

≈ включая подкаталоги и их файлы

Команда rmdir: удаляет пустой каталог

Упражнение 4.2.А

A. Перейдите в свой каталог

1. Создайте новый каталог под именем amuse.

B. Перейдите в каталог fun.

1. Переименуйте файл thanks в thank.you.

2. Сделайте копию файла heart и назовите ее AMORE.Проверьте, что этот файл создан.

3. Интерактивно переместите файл thank.you в каталог amuse.

4. Скопируйте все файлы, начинающиеся на "A", в каталог amuse.

5. Войдите в каталог amuse и просмотрите его содержимое. В нем должно быть
три файла.

C. Перейдите в каталог unit4.

1. Создайте каталог b.check.

2. Скопируйте все файлы каталога unit4, начинающиеся на budget, в каталог b.check.

3. Войдите в каталог b.check. Просмотрите его содержимое и убедитесь, что все файлы, начинающиеся на budget, скопированы.

4. Удалите в каталоге b.check все файлы, начинающиеся на budget.

D. Перейдите в свой каталог.

1. Свяжите файл heart каталога fun с каталогом amuse, используя прежнее имя файла

2. Переименуйте каталог amuse в play.

E. Перейдите в каталог play.

1. Удалите файл thank.you.Убедитесь, что этот файл удален.

2. Удалите интерактивно все файлы, содержащие букву "M".

 

F. Перейдите в свой каталог.

1. Последовательно и интерактивно удалите каталог play.

2. Создайте новый каталог toys.

3. Скопируйте целиком содержимое каталога fun в каталог toys.

Права доступа к файлу

Цели

  1. Описать назначение прав доступа к файлу.
  2. Изменять права доступа к файлу командой chmod.
  3. Описать права доступа к файлу и каталогу по умолчанию и команду umask.
  4. Изменять права владения файлом командой chown.
  5. Выводить на экран идентификаторы пользователя (uid) и группы (gid) командой id.
  6. Изменять групповое членство, назначенное файлу, командой chgrp.
  7. Выполнять команду newgrp для изменения вашей входной группы.

Права доступа к файлу

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

Владелец - Каждый файл системы UNIX имеет владельца. Обычно, это пользователь, создавший файл.

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

Остальные - Все другие пользователи системы.

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

Чтение - Позволяет просматривать содержимое файла такими командами, как cat, pr и cp. Разрешение на чтение также позволяет вам получать список файлов каталога.

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

Выполнение - Если файл содержит программу, то вы можете использовать его как команду UNIX. Разрешение на выполнение позволяет переходить в другой каталог и делает доступными все файлы каталога.

ПРЕДУПРЕЖДЕНИЕ: Даже когда файл защищен от записи, он может быть удален, если есть разрешение на запись и выполнение для вышестоящего каталога. Таким образом, лучшее правило для защиты файлов - снять разрешение на запись ваших каталогов для группы и остальных пользователей.

ПРАВА ДОСТУПА К ФАЙЛУ

Владелец: обычно пользователь, создавший файл

Группа: первоначально системный администратор приписывает вас к группе - к каждому созданному вами файлу приписывается имя этой группы

Остальные: все остальные пользователи

  ФАЙЛ КАТАЛОГ
Чтение Позволяет читать файл командами cat, cp, pr и др. Позволяет получать список файлов каталога.
Запись Позволяет изменять содержимое файла редактированием. (Необходимо также разрешение выполнения). Позволяет добавлять новые файлы, удалять и переименовывать
Выполнение Позволяет выполнить файл как команду (Необходимо также разрешение чтения) Позволяет переходить в другой каталог и обращаться к его файлам.

Вывод на экран режима доступа к файлу

Команда ls -l выводит на экран режим доступа к файлу. Символы со второго по десятый в ответе системы на команду ls -l обозначают режим доступа в следующем формате:

drwxr-x--- 1 jas prof 112 Jul 7 15:20 phone.list

Первый символ обозначает тип файла - d означает каталог. Символы со второго по четвертый указывают режим доступа владельца; с пятого по седьмой - группы; с восьмого по десятый - остальных пользователей.

Вы можете иметь разрешения на чтение, запись и выполнение для владельца, группы и остальных. Тире в любой позиции обозначает отсутствие соответствующего доступа. Смотрите Пример 1 на следующей странице.

Если вы находитесь в своем каталоге, то команда ls -l покажет режим доступа к нему. Вы должны проверить степень защиты своего каталога.

ВЫВОД НА ЭКРАН РЕЖИМА ДОСТУПА К ФАЙЛУ

ПРИМЕР 1:

$ cd unit4<RET>

$ ls -l<RET>

total 47

-rw-rw---- 1 jas train 995 Nov 17 12:04 budget88

-rw-rw---- 1 jas train 995 Nov 17 12:03 budget89

-rw-rw---- 1 jas train 2985 Nov 17 08:53 budget8tot

-rw-rw---- 1 jas train 995 Nov 17 12:03 budget90

-rw-rw---- 1 jas train 995 Nov 17 12:02 budget91

-rw-rw---- 1 jas train 995 Nov 17 12:02 budget92

-rw-rw---- 1 jas train 995 Nov 17 11:58 budget93

-rw-rw---- 1 jas train 3980 Nov 17 08:53 budget9tot

-rw-rw---- 1 jas train 6965 Nov 17 08:53 budgettot

drwxrwxrwx 2 jas train 144 Nov 17 13:34 receivable

-rw-rw---- 1 jas train 551 Nov 17 08:53 tot

drwxrwxrwx 2 jas train 192 Nov 17 13:34 work

$

ПРИМЕР 2:

$ cd<RET>

$ ls -ld<RET>

drwxrwx--- 7 jas train 240 Oct 28 08:32 .

$

Изменение режима доступа к файлу командой chmod

Если вы являетесь владельцем файла или суперпользователем, то вы можете изменять права доступа к файлу командой chmod. Ее формат:

chmod -опции режим файлы

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

Цифровой код

В цифровом коде каждое разрешение имеет свое численное значение:

разрешение значение

r                        4
w                       2
x                        1

Цифровой код состоит из трех цифр - по одной на каждую категорию пользователей. Каждая цифра есть сумма разрешений, приписанных этой категории. Например:

владелец группа остальные

r w x        r - x          - - -
4+2+1      4+0+1        0+0+0
7            5               0

режим доступа

Когда вы используете команду chmod, то система изменяет режим доступа, не задавая при этом вопросов. Чтобы убедиться в установке нового режима, воспользуйтесь командой ls -l.

Опция -R команды chmod

Опция -R воздействует на аргумент, устанавливая заданный режим для каждого файла каталога. Но такая команда может причинить больше вреда, чем пользы. Ее применение оправдано в случае использования с каталогом, содержащим исполнимые файлы, например, с каталогом $HOME/bin, где будет выгоден одинаковый доступ к файлам.

ЗАМЕЧАНИЕ: Поскольку опция -R воздействует и на подкаталоги, то в большинстве случаев ее используют, добавляя разрешение на выполнение.

ИЗМЕНЕНИЕ РЕЖИМА ДОСТУПА К ФАЙЛУ КОМАНДОЙ chmod

chmod -опции режим файлы

ПРИМЕР 1:

$ cd fun<RET>

$ ls -l ATTlogo<RET>

-rw-r--r-- 2 jas train 173 Jul 7 14:01 ATTlogo

$ chmod 640 ATTlogo<RET>

$ ls -l ATTlogo<RET>

-rw-r----- 2 jas train 173 Jul 7 14:01 ATTlogo

$ ls -l heart<RET>

-rwxrw---- 1 jas train 164 Jul 7 16:36 heart

$ chmod 753 heart<RET>

$ ls -l heart<RET>

-rwxr-x-wx 1 jas train 164 Jul 7 16:36 heart

$

ПРИМЕР 2:

$ cd<RET>

$ ls -ld fun<RET>

drwxr-xr-x 3 jas train 288 Aug 6 08:29 fun

$ chmod 750 fun<RET>

$ ls -ld fun<RET>

drwxr-x--- 3 jrs train 288 Aug 6 08:29 fun

$

ПРИМЕР 3:

$ chmod -R 700 fun<RET>

$ ls -l fun/*<RET>

-rwx------ 1 jrs train 1164 Nov 17 fun/ATTlogo

-rwx------ 1 jrs train 753 Nov 17 fun/heart

-rwx------ 1 jrs train 9278 Nov 17 fun/thanks

fun/morefun:

total 6

-rwx------ 1 jrs train 553 Nov 17 terms

-rwx------ 1 jrs train 1839 Nov 17 twilight.unix

$

Символьный код

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

chmod категория_пользователей операция разрешение файл(ы)

КАТЕГОРИЯ ПОЛЬЗОВАТЕЛЕЙ

u владелец
g группа
o остальные

ОПЕРАЦИЯ

+ добавить
- отнять
= назначить

РАЗРЕШЕНИЯ

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

Вы можете использовать команду chmod и с символьным кодом. Вы для каждой категории пользователей добавляете, отнимаете или назначаете разрешения. Если вы не указываете категорию, то система делает доступ одинаковым для всех пользователей. Смотрите Пример 1 на следующей странице.

СИМВОЛЬНЫЙ КОД

ПРИМЕР 1:

$ cd fun<RET>

$ ls -l ATTlogo<RET>

-rw-r----- 2 jas train 1164 Jul 7 14:01 ATTlogo

$ chmod g+x ATTlogo<RET>

$ ls -l ATTlogo<RET>

-rw-r-x--- 2 jas train 1164 Jul 7 14:01 ATTlogo

$ chmod +w ATTlogo<RET>

$ ls -l ATTlogo<RET>

-rw-rwx-w- 2 jas train 1164 Jul 7 14:01 ATTlogo

$ ls -l heart<RET>

-rwxr-x-wx 1 jas train 753 Jul 7 14:01 heart

$ chmod go-x heart<RET>

$ ls -l heart<RET>

-rwxr---w- 1 jas train 753 Jul 7 14:01 heart

$ chmod =rw heart<RET>

$ ls -l heart<RET>

-rw-rw-rw- 1 jas train 753 Jul 7 14:01 heart

$

Команда umask

Система UNIX имеет два режима доступа по умолчанию - один для каталогов, другой для обычных файлов. Если вы указываете права доступа, то каждый созданный вами каталог имеет доступ на чтение, запись и выполнение. Другими словами, режим доступа 777. Обычные файлы, как правило, не имеют доступ на выполнение, то есть их режим по умолчанию - 666. Например, обычный файл, созданный редактором, НЕ ИМЕЕТ доступа на выполнение. Добавить доступ на выполнение вы можете командой chmod.

В системном файле /etc/profile системный администратор может установить маску (mask) для режимов доступа к каталогам и файлам. Маска снимает определенные разрешения в доступе по умолчанию. Для ознакомления с маской системы выполните команду umask. Смотрите Пример 1 на следующей странице.

Команда umask выводит на экран четырехзначное число. Первая цифра - ноль, и она не используется shell. Три последующих цифры соответствуют трем категориям пользователей: владелец, группа и остальные. Каждая цифра обозначает разрешения, СНИМАЮЩИЕСЯ с этой категории пользователей.

Маска не влияет на доступ к уже существующим файлам и каталогам. Она воздействует только на создаваемые файлы. Для изменения режима доступа существующих файлов, пользуйтесь командой chmod.

Таблица на следующей странице демонстрирует наиболее распространенные маски. Например, маска 0002 снимает разрешение на запись для категории остальных пользователей. При такой маске созданные файлы будут иметь режим доступа 664, а каталоги - 775.

Для установления своей собственной маски, действующей только на ваши файлы, выполните команду umask, задав при ней трехзначный аргумент. Эти три цифры будут означать разрешения, снимаемые с владельца, группы и остальных пользователей соответственно. Смотрите Пример 2 на следующей странице.

КОМАНДА umask

чтение=4; запись=2; выполнение=1.

Маска Файлы Каталоги

umask 000 666 777

(по умолчанию) rw-rw-rw- rwxrwxrwx

umask 022 644 755

rw-r--r-- rwxr-xr-x

umask 027 640 750

rw-r----- rwxr-x---

umask 077 600 700

rw------- rwx------

ПРИМЕР 1:

$ umask<RET>

0022

$

ПРИМЕР 2:

$ umask 077<RET>

$ mkdir testing<RET>

ls -ld tes*<ESC>

drwx------ 2 jas train 13 Oct 31 13:51 testing

$

Изменение владельца файла командой chown

Только вы, как владелец файла, и суперпользователь могут изменить права доступа к файлу. Даже если скопируете этот файл другому пользователю, владельцем файла все равно останетесь вы - другой пользователь не сможет изменить режим доступа к этому файлу. Например, вы ограничили доступ к файлу, и другой пользователь не сможет использовать этот файл в полной мере. В этом случае вы можете передать владение файлом другому пользователю командой chown. Формат команды:

chown -опции входное_имя файл(ы)

Аргумент входное_имя команды chown соответствует входному имени другого пользователя. Аргумент файл(ы) соответствует передаваемым файлам. Смотрите Пример 1 на соседней странице.

Опция -R команды chown

Опция chown -R последовательно меняет владельцев файлов, находящихся в текущем каталоге и его подкаталогах. Смотрите Пример 2 на следующей странице.

ИЗМЕНЕНИЕ ВЛАДЕЛЬЦА ФАЙЛА КОМАНДОЙ chown

chown -опции входное_имя файл(ы)

ПРИМЕР 1:

$ cd<RET>

$ cd unit3<RET>

$ cp poem /home/stu8/verse<RET>

$ ls -l /home/stu8/verse<RET>

-rw-r--r-- 1 stu2 train 942 Nov 07 10:37 verse

$ chown stu8 /home/stu8/verse<RET>

$ ls -l /home/stu8/verse<RET>

-rw-r--r-- 1 stu8 train 942 Nov 07 10:37 verse

$

ПРИМЕР 2:

$ cd<RET>

$ cp -r fun ../slf/nofun<RET>

ls -l ../slf/nofun/*<RET>

-rw-rw---- 1 jas train 1164 Nov 17 09:46 nofun/ATTlogo

-rwxrw---- 1 jas train 753 Nov 17 10:27 nofun/heart

-rw-rw---- 1 jas train 9278 Nov 17 11:58 nofun/thanks

nofun/morefun:

total 6

-rwx------ 1 jas train 553 Nov 17 07:47 terms

-rwx------ 1 jas train 1839 Nov 17 08:14 twilight.unix

$ chown -R slf ../slf/nofun<RET>

ls -l ../slf/nofun/*<RET>

-rw-rw---- 1 slf train 1164 Nov 17 09:46 nofun/ATTlogo

-rwxrw---- 1 slf train 753 Nov 17 10:27 nofun/heart

-rw-rw---- 1 slf train 9278 Nov 17 11:58 nofun/thanks

nofun/morefun:

total 6

-rwx------ 1 slf train 553 Nov 17 07:47 terms

-rwx------ 1 slf train 1839 Nov 17 08:14 twilight.unix

Использование команд id и groups

Вывод на экран идентификаторов пользователя и группы командой id

При начале каждого сеанса вы попадаете в одну и ту же группу. Команда id выводит на экран ваш идентификатор пользователя (uid) и идентификатор вашей текущей группы (gid). Смотрите Пример 1 на следующей странице.

Команда groups печатает список всех групп, которым вы принадлежите. Смотрите Пример 2 на следующей странице. Это бывает нужно при проверке прав доступа к файлам. Чтобы изменить группу, приписываемую новым файлам, создаваемым вами, используйте команду newgrp.

КОМАНДЫ id И groups

ПРИМЕР 1:

$ id<RET>

uid=248(jas) gid=1(train)

$

ПРИМЕР 2:

$ groups<RET>

train prof

$

Изменение группы, приписанной файлу, командой chgrp

Статус группы для нового файла получает та группа, в которой вы находились в момент создания файла. Только члены этой группы или суперпользователи могут изменить группу, приписанную файлу. Если вы скопировали файл в каталог другой группы, то члены этой группы не смогут изменить группу, приписанную файлу. Это делается командой chgrp. Формат команды:

chgrp -опции имя_новой_группы файл(ы)

В Примере 1 на следующей странице пользователь меняет приписанную файлу calendar группу с train на prof.

Опция chgrp -R

Опция -R команды chgrp последовательно изменяет группы, приписанные файлам, содержащимся в текущем каталоге и его подкаталогах. Смотрите Пример 2 на следующей странице.

ИЗМЕНЕНИЕ ГРУППЫ, ПРИПИСАННОЙ ФАЙЛУ, КОМАНДОЙ chgrp

chgrp -опции имя_новой_группы файл(ы)

ПРИМЕР 1:

$ cd<RET>

$ ls -l calendar<RET>

-rw------- 1 jas train 637 Oct 20 09:46 calendar

$ chgrp prof calendar<RET>

$ ls -l calendar<RET>

-rw------- 1 jas prof 637 Oct 20 09:46 calendar

$

ПРИМЕР 2:

$ ls -l fun<RET>

total 26

-rw-rw---- 1 jas train 1164 Nov 17 09:46 ATTlogo

-rwxrw---- 1 jas train 753 Nov 17 10:27 heart

drwxrwx--- 2 jas train 64 Nov 17 11:32 morefun

-rw-rw---- 1 jas train 9278 Nov 17 11:58 thanks

$ chgrp -R prof fun<RET>

$ ls -l fun<RET>

total 26

-rw-rw---- 1 jas prof 1164 Nov 17 09:46 ATTlogo

-rwxrw---- 1 jas prof 753 Nov 17 10:27 heart

drwxrwx--- 2 jas prof 64 Nov 17 11:32 morefun

-rw-rw---- 1 jas prof 9278 Nov 17 11:58 thanks

$

Изменение группы, приписываемой новым файлам, командой newgrp

Когда несколько пользователей работают над одним проектом, системный администратор может объединить их в одну группу. Файл /etc/group содержит список групп вашей системы. Если вы хотите перейти в другую группу, обратитесь к системному администратору. Если вы принадлежите к нескольким группам, то вам может потребоваться перейти в другую группу, чтобы создаваемые вами файлы принадлежали ей. Для перехода в другую группу существует команда newgrp. Формат этой команды:

newgrp имя_группы

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

Чтобы вернуться в ту группу, куда вы входите по умолчанию, наберите newgrp и нажмите <RET>.

В Примере 1 на следующей странице пользователь jas принадлежит группе prof. В данный момент этот пользователь находится в группе train. Поэтому перед созданием нового файла .newstat он должен перейти обратно в группу prof.

В Примере 2 на следующей странице показано, что существует группа с именем sys. Вы хотите перейти в эту группу. Но поскольку вы не являетесь ее членом, сделать этого не можете и получаете сообщение об ошибке.

ИЗМЕНЕНИЕ ГРУППЫ КОМАНДОЙ newgrp

newgrp имя_группы

ПРИМЕР 1:

$ cd unit4<RET>

$ ls -l .stat<RET>

-rw-r----- 1 root prof 173 Jul 7 14:01 .stat

$ id<RET>

uid=248(jas) gid=8(train)

$ newgrp prof<RET>

$ id<RET>

uid=248(jas) gid=13(prof)

$ vi .newstat<RET>

a This report will contain new proprietary

information about our project status:

$ newgrp<RET>

$ id<RET>

uid=248(jas) gid=8(train)

$

ПРИМЕР 2:

$ cat /etc/group<RET>

root::0:root

other::1:stu1,stu2,stu3,stu4,j<=

bin::2:root,bin,daemon

sys::3:root,bin,sys,adm

adm::4:root,adm,daemon

mail::6:root,jcb,fed,lee

daemon::12:root,daemon

prof::13:stu1,stu2,stu3,stu4,s<=

train::8:stu1,stu2,stu3,stu4

$ newgrp sys<RET>

newgrp: Sorry

$

Выводы и упражнения

Выводы урока

Права доступа к файлу: защищают файл от изменений, копирования и уничтожения

Три категории пользователей:

Владелец: пользователь, создавший файл
Группа: системный администратор включает вас в группу пользователей, и к каждому создаваемому вами файлу приписывается имя этой группы
Остальные: все другие пользователи

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

Чтение: просмотр содержимого файла, каталога
Запись: изменение содержимого редактированием или переписыванием, добавление, уничтожение и переименование новых файлов каталога (при наличии доступа на выполнение)
Выполнение: выполнение файла как команды, если это программа; переход в другой каталог и доступ к его файлам

Команда ls -l: печатает права доступа к файлу: -rwxrwxrwx

может быть разный набор доступов для каждой категории пользователей
тире в любой позиции означает отсутствие соответствующего доступа

Команда ls -ld: демонстрирует права доступа ко входному каталогу

Команда chmod: изменяет права доступа к файлу

≈ Цифровой код: чтение=4, запись=2, выполнение=1
≈ Символьный код: u=владелец, g=группа, o=остальные
+ добавить, - убрать, = назначить доступ
опция
chmod -R: изменяет права доступа к файлам последовательно

Команда umask: выводит на экран убираемые по умолчанию доступы для заново создаваемых файлов

режим для каталогов по умолчанию: 077; режим для файлов по умолчанию: 066

Команда chown: передает права владения файлом другому пользователю

опция chown -R: передает права владения файлами последовательно

Команда id: сообщает ваш идентификатор и имя вашей текущей группы

Опция groups: сообщает ваш идентификатор и имена всех групп, в которые вы входите

Команда chgrp: изменяет группу, приписанную файлу

опция chgrp -R: изменяет группы, приписанные файлам, последовательно

Команда newgrp: изменяет вашу группу

возвращение в исходную группу: newgrp <RET>

Упражнение 4.3.А

А. Перейдите в ваш каталог.

1. Измените права доступа к файлу calendar так, чтобы только вы имели право на чтение и запись. Проверьте, что права доступа изменились.

2. Измените права доступа к каталогу unit3 так, чтобы владелец имел полный доступ, у группы был доступ на чтение, а остальные пользователи не имели доступа.

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

4. Измените права доступа ко всем файлам каталога unit3, начинающимся на s так, чтобы владелец и группа имели доступ на чтение и запись, а остальные не имели права доступа

5. Какова текущая маска системы?

6. Каковы при этой маске права доступа к новым файлам и каталогам?

7. Каковы ваш идентификатор и идентификатор вашей группы?

8. Скольким группам вы принадлежите?

9. Скопируйте файл unit3/address вашего соседа в свой каталог. Проверьте, что вы являетесь владельцем своей копии этого файла.

10. Верните право владения вашей копии файла address обратно исходному владельцу.
Проверьте, что владелец файла изменился.

В. Перейдите в подкаталог bin вашего каталога.

1. С помощью редактора vi, создайте файл файл под именем present. Добавьте в него следующие четыре строки:

echo today is:
date
echo the users logged on are:
who
Сохраните этот файл и выйдите из vi.

2. Измените права доступа к файлу present так, чтобы владелец и остальные имели доступ на чтение и выполнение

3. Выполните этот файл, набрав: present<RET>

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

С. Перейдите в каталог unit4.

1. Измените группу, приписанную файлу tot, на группу prof.

2. Создайте файл под именем newstuff, к которому приписана группа prof.