Раздел 4
УПРАВЛЕНИЕ ФАЙЛАМИ
Обзор
На предыдущем уроке было рассказано о том, как создавать файлы с помощью редактора vi. Этот урок объясняет как организовывать, защищать файлы и как управлять ими.
ЦЕЛИ
Печать файлов с использованием метасимволов в их именах
Цели
Многие команды системы
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
$
Выводы урока
Упражнение 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.Цели
Перемещение, копирование и переименование файлов
Создав файл, вы можете переименовать его или переместить в другой каталог командой
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*
- удаляет все файлы, начинающиеся на mrm *
- удаляет все файлы в текущем каталогеОпция
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>
$
Выводы урока
Упражнение 4.2.А
A. Перейдите в свой каталог
1. Создайте новый каталог под именем
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. Свяжите файл
2. Переименуйте каталог
amuse в play.E. Перейдите в каталог
play.1. Удалите файл
thank.you.Убедитесь, что этот файл удален.2. Удалите интерактивно все файлы, содержащие букву "
M".
F. Перейдите в свой каталог.
1. Последовательно и интерактивно удалите каталог
2. Создайте новый каталог
toys.3. Скопируйте целиком содержимое каталога
fun в каталог toys.Цели
Права доступа к файлу
Важное значение имеет защита файла от изменений, копирования и удаления. Будучи владельцем своих файлов, вы контролируете, кто имеет право доступа к вашим файлам. Для каждого файла существуют три категории пользователей, которые могут иметь доступ к файлам:
Каждая категория пользователей может иметь разные права доступа к файлу. Существует три вида разрешения на доступ:
ПРЕДУПРЕЖДЕНИЕ: Даже когда файл защищен от записи, он может быть удален, если есть разрешение на запись и выполнение для вышестоящего каталога. Таким образом, лучшее правило для защиты файлов - снять разрешение на запись ваших каталогов для группы и остальных пользователей.
ПРАВА ДОСТУПА К ФАЙЛУ
Владелец: обычно пользователь, создавший файл
Группа: первоначально системный администратор приписывает вас к группе - к каждому созданному вами файлу приписывается имя этой группы
Остальные: все остальные пользователи
ФАЙЛ | КАТАЛОГ | |
Чтение | Позволяет читать файл командами 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 |
Цифровой код состоит из трех цифр - по одной на каждую категорию пользователей. Каждая цифра есть сумма разрешений, приписанных этой категории. Например:
владелец группа остальные |
r w x r - x - - - |
Когда вы используете команду
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
категория_пользователей операция разрешение файл(ы)КАТЕГОРИЯ ПОЛЬЗОВАТЕЛЕЙ
ОПЕРАЦИЯ
РАЗРЕШЕНИЯ
Вы можете использовать команду 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
$
Выводы урока
Упражнение 4.3.А
А. Перейдите в ваш каталог.
1. Измените права доступа к файлу
2. Измените права доступа к каталогу
unit3 так, чтобы владелец имел полный доступ, у группы был доступ на чтение, а остальные пользователи не имели доступа.3. Последовательно измените права доступа к файлам каталога
unit4 так, чтобы владелец имел полный доступ, группа имела доступ на чтение и выполнение, а остальные пользователи имели доступ на чтение4. Измените права доступа ко всем файлам каталога
unit3, начинающимся на s так, чтобы владелец и группа имели доступ на чтение и запись, а остальные не имели права доступа5. Какова текущая маска системы?
6. Каковы при этой маске права доступа к новым файлам и каталогам?
7. Каковы ваш идентификатор и идентификатор вашей группы?
8. Скольким группам вы принадлежите?
9. Скопируйте файл
unit3/address вашего соседа в свой каталог. Проверьте, что вы являетесь владельцем своей копии этого файла.10. Верните право владения вашей копии файла
address обратно исходному владельцу.В. Перейдите в подкаталог
bin вашего каталога.1. С помощью редактора
2. Измените права доступа к файлу
present так, чтобы владелец и остальные имели доступ на чтение и выполнение3. Выполните этот файл, набрав:
present<RET>Заметьте, что действие этой программы есть действие всех четырех команд, содержащихся в файле. Подробнее о программах языка shell в шестом разделе курса.
С. Перейдите в каталог
unit4.1. Измените группу, приписанную файлу
tot, на группу prof.2. Создайте файл под именем
newstuff, к которому приписана группа prof.