Linux имеет структуру каталогов и файлов, очень похоже на DOS/Win. Файлы имеют имена, которые подчиняются специальным правилам, хранятся в каталогах, некоторые являются выполнимыми, и большинство из них имеют командные ключи. Кроме того, вы можете использовать маски имен файлов, перенаправление ввода-вывода и конвейеры. Только имеется несколько маленьких отличий:
$ # the following command makes a directory called "My old files"
$ mkdir "My old files"
$ ls
My old files bin tmp
Далее, некоторые символы не должны использоваться: некоторые - это ! * $ &.
$ 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;
UNIX имеет тип файла, который не существует под DOS - это символическая связь. О нем можно думать как о указателе на файл или каталог, и можно использовать вместо файла или каталога, на который он указывает; он напоминает шорткаты Windows 95. Примеры символических связей - /usr/X11, который указывает на /usr/X11R6; /dev/modem, который указывает или на /dev/cua0 или /dev/cua1.
Чтобы создать символическую связь используется команда ln:
$ 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
Файлы DOS и каталоги имеют следующие атрибуты: A(архив), H(скрытый), R(только для чтения), и S(системный). Только H и R имеют смысл в Linux: невидимые файлы начинаются с точки, а 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, слева направо:
$ 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 suid файлами; они часто являются важными
системными файлами, например, X сервер.
Более короткий способ обращения к правам доступа - цифрами: rwxr-xr-x может быть выражен числом, поскольку 755 (каждый символ соответствует биту: --- - это 0, --x - это 1, -w- -это 2, -wx - это 3 ...). Это выглядит сложновато, но, практикуясь, вы поймете эту концепцию.
Root, являясь суперпользователем, может изменять любые права доступа к файлам. RMP.
Слева команды 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
Примечания:
#!/bin/sh
# ren: rename multiple files according to several rules
if [ $# -lt 3 ] ; then
echo "usage: ren \"pattern\" \"replacement\" files..."
exit 1
fi
OLD=$1 ; NEW=$2 ; shift ; shift
for file in $*
do
new=`echo ${file} | sed s/${OLD}/${NEW}/g`
mv ${file} $new
done
Осторожно: он не соответствует DOSовскому REN, поскольку использует "регулярные выражения", который вы все еще не знаете. Короче, если вы просто хотите изменять расширения файла, используйте его как: ren "htm$" "html" * htm. Не забудьте знак $.
Чтобы получать предупреждения перед попыткой перезаписи файла, используйте cp -i и mv -i
Чтобы выполнить программу, напечатайте имя, также как это делается под 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 позволяет вам запускать несколько сеансов:
это похоже на одновременную работу на нескольких компьютерах!
$ progname [-switches] [parameters] [< input] [> output] &
[1] 123
shell идентифицирует процесс номером работы (например [1]; см. ниже) и PID
(Идентификационным Номером Процесса); в нашем примере 123).
Чтобы запустить программу на удаленной машине, чей IP адрес - remote.machine.edu, сделайте:
$ telnet remote.machine.edu
После регистрации на удаленной машине, запустите вашу любимую программу. Само
собой разумеется, вы должны иметь доступ к shell на удаленной машине.
Если у Вас установлен X11, то вы можете даже запустить X приложение на удаленном компьютере, отображаая его на вашем X экране. Допустим, что remote.machine.edu - это удаленный X компьютер, а local.linux.box - это ваша Linux машина. Чтобы запустить с local.linux.box программу X, которая расположена на remote.machine.edu, сделайте следующее:
$ 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. Это зависит от удаленного shell.)
Вуаля! Теперь progname запустится на remote.machine.edu и будет отображаться на вашей машине. Не пробуйте это на модемных соединениях, такая связь слишком медленна, чтобы быть пригодной для использования.