Библиотека сайта rus-linux.net
5. Файлы и программы
5.1 Файлы: Предварительные замечания
Структура каталогов и файлов в Linux очень сходна с той, которая используется в DOSWin. Фалы имеют имена, которые подчиняются специальным правилам и хранятся в каталогах, некоторые из файлов являются исполнимыми и у некоторых из них существуют ключи командной строки. Более того, вы можете использовать символы шаблонов, перенаправление и конвейеризацию. Есть только несколько небольших отличий:
- в DOS, имена файлов хранятся в так называемом формате 8.3; например
NOTENOUG.TXT
. В Linux мы можем делать лучше. Если вы установили Linux, используя файловую систему, подобную ext2 или umsdos, то вы можете использовать более длинные имена файлов (до 255 символов), и с более чем одной точкой в имени: например,This_is.a.VERY_long.filename
. Пожалуйста заметьте, что я использовал символы и верхнего и нижнего регистра: в действительности... - символы верхнего и нижнего регистра в именах файлов отличаются друг
от друга. Поэтому
FILENAME.tar.gz
иfilename.tar.gz
являются разными файлами.ls
является командой, аLS
является ошибкой; - пользователи Windows, будьте осторожны при использовании длинных имен в
Linux. Если имя файла содержит пробелы (не рекомендуется, но возможно), то
вы должны заключить имя файла в двойные кавычки при обращении к нему.
Например:
А Также некоторые символы не должны использоваться: это$ # следующая команда создает каталог, названный "My old files" $ mkdir "My old files" $ ls My old files bin tmp
!*$&#
. - не существует обязательных расширений типа
.COM
и.EXE
для программ или.BAT
для командных файлов. Исполнимые файлы отмечаются символом звездочка `*
' в конце их имен, при использовании командыls -F
. Например:
Файлы$ ls -F I_am_a_dir/ cindy.jpg cjpg* letter_to_Joe my_1st_script* old~
cjpg*
иmy_1st_script*
являются исполнимыми, то есть ``программами''. В DOS, файлы резервных копий заканчиваются на.BAK
, тогда как под Linux они заканчиваются на знак тильды `~
'. Также файл, чье имя начинается со знака точки, считается скрытым. Например: файл.I.am.a.hidden.file
не будет показан при выполнении командыls
; - Ключи командной строки (switches) программ DOS задаются в виде
/switch
, Linux использует ключи в виде-switch
или--switch
. Пример:dir /s
становитсяls -R
. Заметим, что много программ DOS, такие какPKZIP
илиARJ
, используют ключи в стиле UNIX.
Вы можете теперь перепрыгнуть к разделу Перевод команд из DOS в Linux, но я надеюсь, что вы будете читать дальше.
5.2 Символьные ссылки
В UNIX имеется тип файлов, которых нет в DOS: символьные ссылки. Он
может быть описан как ссылка на файл или каталог и может быть использован
вместо файла или каталога, на который она указывает; они сходны с ярлыками
в Windows. Примером символьный ссылки может быть /usr/X11
, которая
указывает на каталог /usr/X11R6
, или /dev/modem
, который
указывает либо на /dev/ttyS0
либо на /dev/ttyS1
.
Для того, чтобы создать символьную ссылку, используется команда:
$ ln -s <file_or_dir> <linkname>
Пример:
$ ln -s /usr/doc/g77/DOC g77manual.txt
Теперь вы можете ссылаться на g77manual.txt
вместо
/usr/doc/g77/DOC
. Ссылки показываются следующим образом в списке
файлов каталога:
$ ls -F
g77manual.txt@
$ ls -l
(разные вещи...) g77manual.txt -> /usr/doc/g77/DOC
5.3 Права доступа и владение
Файлы и каталоги DOS имеют следующие атрибуты: A (архивный), H (скрытый), R (только чтение) и S (системный). В Linux только H и R имеют значение: скрытые файлы начинаются с точки, а для того чтобы задать атрибут R, читайте дальше.
В UNIX файл имеет ``права доступа'' и ``владельца'', который относится к ``группе''. Посмотрите пример:
$ ls -l /bin/ls
-rwxr-xr-x 1 root bin 27281 Aug 15 1995 /bin/ls*
Первое поле содержит права доступа к файлу /bin/ls
, который
принадлежит пользователю root, группы bin. Опуская другую информацию,
запомните, что означает -rwxr-xr-x
, слева направо:
-
это тип файла (-
= обычный файл, d
= каталог,
l
= ссылка, и т.д.); rwx
являются правами доступа для
владельца файла (чтение, запись, выполнение); r-x
являются правами
доступа для группы, к которой относится владелец файла (чтение,
выполнение); (Я не хочу делать обозрение концепции групп, вы можете выжить
без нее, поскольку вы начинающий пользователь ;-) r-x
являются
правами доступа для всех остальных пользователей (чтение, выполнение).
Каталог /bin
тоже имеет права доступа: смотрите раздел
<@@ref>Права доступа к каталогамDirectories Permissions для
дополнительной информации. Вот поэтому вы не можете удалить файл
/bin/ls
до тех пор, пока не станете пользователемroot: вы просто
не имеете прав сделать это. Для изменения прав доступа к файлу используется
команда:
$ chmod <whoXperm> <file>
где who---это u
(пользователь, который является владельцем),
g
(группа), o
(остальные), X---это либо +
, либо
-
, perm---это r
(чтение), w
(запись), или
x
(выполнение). Вот общие примеры использования команды
chmod
:
$ chmod +x file
устанавливает право на выполнения данного файла.
$ chmod go-rw file
удаляет право на чтение и запись для всех, кроме владельца файла.
$ chmod ugo+rwx file
дает всем права на чтение, запись и выполнение.
# chmod +s file
делает так называемый ``setuid'' или ``suid'' файл---файл, который любой может выполнять с привилегиями владельца. Обычно, это применяется к файлам, владельцем которых является root; часто это важные системный файлы, такие как X-сервер.
Более коротким способом для ссылки на права доступа является использование
цифрового обозначения: rwxr-xr-x
может быть выражен как 755
(каждый символ соответствует биту: ---
равен 0, --x
равен
1, -w-
равен 2, -wx
равен 3...). Это выглядит трудным, но,
немного попрактиковавшись, вы поймете концепцию. root, будучи
администратором, может изменять права доступа на файлы любого пользователя.
RMP.
5.4 Файлы: Перевод команд
На левой стороне находятся команды DOS; справа их аналоги в Linux.
ATTRIB: chmod
COPY: cp
DEL: rm
MOVE: mv
REN: mv
TYPE: more, less, cat
Операторы перенаправления и конвейеризации: < > >> |
Символы шаблонов: * ?
устройство nul: /dev/null
Устройства prn, lpt1: /dev/lp0 or /dev/lp1; lpr
Примеры
DOS Linux
---------------------------------------------------------------------
C:\\GUIDO>ATTRIB +R FILE.TXT $ chmod 400 file.txt
C:\\GUIDO>COPY JOE.TXT JOE.DOC $ cp joe.txt joe.doc
C:\\GUIDO>COPY *.* TOTAL $ cat * > total
C:\\GUIDO>COPY FRACTALS.DOC PRN $ lpr fractals.doc
C:\\GUIDO>DEL TEMP $ rm temp
C:\\GUIDO>DEL *.BAK $ rm *~
C:\\GUIDO>MOVE PAPER.TXT TMP\\ $ mv paper.txt tmp/
C:\\GUIDO>REN PAPER.TXT PAPER.ASC $ mv paper.txt paper.asc
C:\\GUIDO>PRINT LETTER.TXT $ lpr letter.txt
C:\\GUIDO>TYPE LETTER.TXT $ more letter.txt
C:\\GUIDO>TYPE LETTER.TXT $ less letter.txt
C:\\GUIDO>TYPE LETTER.TXT > NUL $ cat letter.txt > /dev/null
n/a $ more *.txt *.asc
n/a $ cat section*.txt | less
Примечания:
*
намного ``умнее '' в Linux:*
соответствует всем файлам, за исключением скрытых;.*
соответствует всем скрытым файлам (но также текущему каталогу `.
' и каталогу уровнем выше `..
': beware!);*.*
соответствует только тем, которые имеют `.
' в середине имени, или оканчиваются на точку;p*r
соответствует и `peter' и `piper';*c*
соответствует и `picked' и `peck';- при использовании
more
, необходимо нажимать на клавишу <SPACE> для того, чтобы продвигаться по файлу, и `q' для выхода.less
является более интуитивно понятной командой и позволяет вам использовать клавиши управления курсором; - нет команды
UNDELETE
(восстановления после удаления), так что дважды подумайте до удаления чего-либо; - в добавлении к используемым в DOS'
< > >>
, в Linux имеется2>
для перенаправления сообщений об ошибках (stderr); более того,2>&1
перенаправляет stderr в stdout, в то время как1>&2
перенаправляет stdout в stderr; - Linux имеет дополнительный шаблон (wildcard):
[]
. Использование:[abc]*
соответствует файлам, начинающимся с a, b, c;*[I-N1-3]
соответствует файлам, оканчивающимся на I, J, K, L, M, N, 1, 2, 3; - команда
lpr
<file> печатает файл в фоновом режиме. Для проверки состояния очереди печати используйте командуlpq
; для удаления файла из очереди печати используйтеlprm
; - нет команды, похожей на команду
RENAME
в DOS; так что командаmv *.xxx *.yyy
не будет работать. команда, похожая на REN, доступна с ftp://metalab.unc.edu/pub/Linux/utils/file; - используйте команды
cp -i
иmv -i
для того, чтобы вас предупредили, когда файл будет перезаписываться.
5.5 Запуск программ: Многозадачность и сеансы работы
Для запуска программы просто наберите ее имя, так как вы делали это в
DOS. Если каталог (Раздел
Использование каталогов), где находится программа, находится в переменной среды PATH
(Раздел
Файлы инициализации системы), то программа будут запущена. Исключение: в отличии от DOS, в
Linux программа, расположенная в текущем каталоге, не будет запускаться до
тех пор, пока вы не включите этот каталог в PATH. Предупреждение: если
prog
это ваша программа, то наберите ./prog
для ее
запуска из текущего каталога.
Типичная командная строка выглядит примерно так:
$ command [-s1 [-s2] ... [-sn]] [par1 [par2] ... [parn]] [< input] [> output]
где -s1
, ..., -sn
являются ключами программы, а
par1
, ..., parn
являются параметрами программы. Вы
можете запустить несколько команд из одной командной строки:
$ command1 ; command2 ; ... ; commandn
Это все о запуске программ, но теперь легко сделать следующий шаг. Одна из основных причин использования Linux---это то, что она является многозадачной операционной системой---она может выполнять разные программы (с этого места мы будем называть их процессами) одновременно. Вы можете запускать процессы в фоновом режиме и продолжать работать. Более того, Linux позволяет вам иметь несколько сеансов работы: Это подобно наличию множества компьютеров на одном!
- Для того,чтобы переключится в сеанс 1..6 на виртуальных консолях, нажмите <ALT-F1> ... <ALT-F6>
- Для запуска нового сеанса в той же самой виртуальной консоли без
выхода из нее, наберите
su - <loginname>
. Пример:su - root
. Это полезно, например, когда вам надо выполнить задачу, которую может выполнить только root. - Для окончания сеанса работы наберите
exit
. Если у вас есть приостановленные задания (смотрите дальше), то вас предупредят. - Для запуска процесса в фоновом режиме, добавьте знак амперсанда
'
&
' в конец командной строки:
Командный процессор идентифицирует процессы по номеру задания (например$ progname [-switches] [parameters] [< input] [> output] & [1] 123
[1]
; смотрите ниже), и по PID (Идентификационный номер процесса; 123 в нашем примере). - Для того, чтобы увидеть, сколько процессов запущено, наберите
ps ax
. Эта команда выдаст список запущенных в настоящее время процессов. - Для того чтобы убить, (завершить) процесс, наберите команду
kill <PID>
. Вам может понадобиться убить процесс в том случае, если вы не знаете, как его правильно завершить... До тех пор, пока вы не станете root, вы не сможете завершать процессы других людей. Иногда процесс может быть завершен только используя командуkill -SIGKILL <PID>
. В дополнение командный процессор позволяет вам остановить или временно приостановить процесс, перевести процесс в фоновый режим, и перевести процесс из фонового режима в интерактивный режим. В этом контексте процессы называются ``заданиями''. - Для того чтобы узнать, сколько заданий существует наберите
jobs
. Здесь задания идентифицируются по номеру задания, а не по их PID. - Для того, чтобы остановить процесс, запущенный в интерактивном режиме, нажмите <CTRL-C> (это не всегда работает).
- Для того, чтобы приостановить процесс, запущенный в интерактивном режиме , нажмите <CTRL-Z> (то же самое).
- Для перевода приостановленного процесса в фоновый режим, наберите
bg <%job>
(он станет заданием). - Для перевода задания в интерактивный режим наберите
fg <%job>
. Для перевода в интерактивный режим последнего задания, запущенного в фоновом режиме, просто наберитеfg
. - Для завершения задания наберите
kill <%job>
, где <job> может быть 1, 2, 3,...
Используя эти команды вы можете форматировать диск, сжимать кучу файлов, компилировать программу и разжимать архив в одно и тоже время и все равно иметь командную строку для своих нужд. Попробуйте сделать это в Windows, просто чтобы посмотреть разницу в производительности (конечно, если он не рухнет).
5.6 Запуск программ на удаленных компьютерах
Для запуска программы на удаленной машине, чьим именем является
remote.machine.edu
:
$ telnet remote.machine.edu
После входа в систему , запустите вашу любимую программу. Излишне говорить, что вам необходимо быть зарегистрированным на удаленной машине и иметь доступ к командному процессору.
Если у вас есть X11, вы даже можете запустить приложение для X на удаленной
машине, отображая его на вашем экране X Windows. Допустим, что
remote.machine.edu
> -- это удаленный компьютер с X и
допустим, что local.linux.box
-- это ваша машина с Linux. Для
запуска с local.linux.box
программы для X, которая расположена на
remote.machine.edu
, выполните следующее:
- запустите X11, запустите
xterm
или подобный эмулятор терминала, затем наберите:$ xhost +remote.machine.edu $ telnet remote.machine.edu
- После входа в систему наберите:
(вместоremote:$ DISPLAY=local.linux.box:0.0 remote:$ progname &
DISPLAY...
, вам может понадобиться написать:setenv DISPLAY local.linux.box:0.0
. Это зависит от командного процессора на удаленной машине).
И все! Теперь progname
будет запущена на
remote.machine.edu
и будет отображаться на вашей машине. Не
пытайтесь делать это через модем, это слишком медленно, чтобы можно было
пользоваться. Более того, это грубый и небезопасный метод: пожалуйста
прочитайте ``Remote X Apps mini-HOWTO'' по адресу
http://www.linuxdoc.org/HOWTO/mini/Remote-X-Apps.html.
Next Previous Contents