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 тоже имеет права доступа: смотрите раздел Права доступа к каталогам для дополнительной информации. Вот поэтому вы не можете удалить файл /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.

Предыдущая  Следующая Оглавление



Распространение материалов сайта означает, что распространитель принял условия лицензионного соглашения.
Идея и реализация: © Владимир Довыденков и Анатолий Камынин,  2004-2024