Первые шаги в Unix

Автор: Андрей Лаврентьев (lavr@unix1.jinr.ru), http://unix1.jinr.ru/~lavr/

"Серия: Заметки" ~~~~~~~~~~~~~~~~ Вы начинающий пользователь Unix и это ваш первый-второй-третий... и тд сеанс. Если у вас нет навыков общения с компьтером или большими вычислительными системами или хуже того, ваш опыт обогащен общением с операционными системами фирмы Microsoft с "худшей" стороны, как и в любой иной ситуации, мой первый совет - сбор информации: книги по тематике, различные руководства как внутри организации, так и доступные на публичных архивах Internet. Как только нашли необходимое, вперед за клавиатуру и сразу осваивать на практике... Вы заняли исходную позицию перед монитором и готовы приступить: все что вы видите на экране дисплея или графического терминала (X-terminal'а) в самом начале сеанса, это различные формы приглашения для входа в систему: Например: приглашение в OS Linux (linux4u) (ttyp6) Debian GNU 1.3 linux4u login: или приглашение в OS FreeBSD FreeBSD (unix1.jinr.dubna.su) (ttyp4) login: или приглашение в OS Solaris (Sun Microsystems Unix) UNIX(r) System V Release 4.0 (ultra) login: или приглашение в OS HP-UX (Hewllet Packard Unix) HP-UX dtserv.jinr.dubna.su B.10.20 A 9000/780 (ttyp2) login: или ConvexOS, Release 10.1 (cv.jinr.dubna.su) login: или Exemplar S Class () [SPP-UX Release 5.2] login: или приглашение в OS AIX (IBM Unix) AIX Version 4 (C) Copyrights by IBM and by others 1982, 1994. login: или приглашение в OS OSF1 (бывший Digital Unix, ныне Compaq Tru64 Unix) Digital UNIX (dbserv.jinr.dubna.su) (ttyp4) login: Все это разновидности "системного приглашения" для входа, те ввода имени пользователя - loginname или username и затем пароля на приглашение: Password: Несколько отличается приглажение в CDE(Common Desktop Environment), якобы удобная графическая среда пользователя, но и в ней не сложно понять что система хочет сначала, получить от вас имя и затем пароль. Итак, входим в OS Unix, например как пользователь "lavr": FreeBSD (unix1.jinr.dubna.su) (ttyp4) login: lavr Password: Last login: Sun Oct 3 19:20:55 1999 from :0.0 Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994 The Regents of the University of California. All rights reserved. FreeBSD 2.2.8-RELEASE (LAVRWORK) #0: Thu Feb 11 21:11:10 MSK 1999 Welcome to FreeBSD! Handbook is in /usr/share/doc/handbook and the FAQ in /usr/share/doc/FAQ. lynx /usr/share/doc/handbook & lynx /usr/share/doc/FAQ. No new messages. вс 3 окт 1999 19:47:45 MSD unix1:/home/lavr> ^^^^- при достоверном пароле мы попадаем в командную строку операционной системы Unix или в случае графической среды, которая называется X-Windows, у нас запускаются несколько различных приложений или desktop - "рабочий стол", это зависит от настроек. Как и во всех системах защиты, вводимый нами пароль не отображается на дисплее в целях сохранения безопасности. Промежуточная информация которую мы видим при входе в Unix, обычно указывает тип и версию OS Unix, в нашем примере: FreeBSD 2.2.8-RELEASE (LAVRWORK) #0: Thu Feb 11 21:11:10 MSK 1999 права или торговую марку: Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994 The Regents of the University of California. All rights reserved. время и место(имя машины) откуда был произведен предыдущий заход под вашим именем: Last login: Sun Oct 3 19:20:55 1999 from :0.0 ^^^^^^^^^- в данном случае с локальной машины с использованием графической системы X-Windows. возможны иные сообщения, подготовленные системным администратором: Welcome to FreeBSD! Handbook is in /usr/share/doc/handbook and the FAQ in /usr/share/doc/FAQ. lynx /usr/share/doc/handbook & lynx /usr/share/doc/FAQ. а также осуществляется ряд действий, первоначально заданных администратором, по настройке вашей рабочей среди - environment, эти настройки вы можете впоследствии изменить под свои цели и нужды, после приобретения навыков и знаний. Продолжим, итак, мы в командной строке: unix1:/home/lavr> Теперь нам доступно все что не запрещено. :) с чего можно начать? - с команды, которая должна стать основной для пользователя Unix, "man" - показать руководство по искомой команде, например: unix1:/home/lavr> man man MAN(1) FreeBSD General Commands Manual MAN(1) NAME man - format and display the on-line manual pages SYNOPSIS man [-adfhktw] [-m system] [-p string] [-M path] [-P pager] [-S list] [section] name ... это фрагмент руководства по самой команде "man" OS Unix FreeBSD. начало положено, вероятно встает вопрос что за командная строка, комадная строка чего? При регистрации - заведении нового пользователя, ему назначается домашняя директория - место для хранения файлов, почты, программ и другой личной информации пользователя и назначается командный интерпретатор - SHELL, это программа связывающая пользователя с системой. SHELL - обрабатывает-разбирает запросы от пользователя к системе или отрабатывает свои собственны команды по запросу пользователя. В Unix имеется достаточно богатый набор интерпретаторов комадной строки на настоящий момент. В последнее время большой популярностью пользуются bash, tcsh, но это не означает что они самые лучшие или единственные, огромными возможностями обладают такие shell как, ksh - KornShell или Z-Shell и др. Основополагающим и самым древним интерпретатором является sh - Bourne-shell, которой идет в поставке любой OS Unix, так же как и еще один старинный интерпретатор csh - C-Shell, с якобы схожим синтаксисом языка "Cи". У нас не стоит задача сравнения или обсуждения тех или иных возможностей интерпретаторов, но коротко, стоит отметить что большинство системных scripts - скриптов (процедур с элементами программирования) пишется на sh, csh - плохо подходит для этих целей, равно как и его расширенный собрат - tcsh, хорошим средством с большими возможностями, является bash, который включает в себя возможности sh - Bourne-Shell. И bash, и tcsh предоставляют достаточный набор удобств для облегчения жизни пользователя в командной строке, работа в которой с незапамятных времен, была основополагающей в Unix. Дабы никого не обидеть, необходимо упомянуть EMACS - это целая среда для облегчения жизни пользователю, разработчику. В прошлом, пользователь заходя в Unix подразумевал emacs, заканчивая сеанс - emacs, забывая про Unix. :-) Если вы не заказали себе SHELL при регистрации в системе, то самое время посмотреть что мы имеем в качестве интерпретатора: unix1:/home/lavr> echo $SHELL /usr/local/bin/tcsh unix1:/home/lavr> сие означает что наш интерпретатор - tcsh, попутно разберем введенную команду, echo - команда системы или встроенная команда интерпретатора, выдает сообщения на стандартный вывод(терминал) заданные ей в качестве параметров или показывает значение переменных среды - environment. В нашем случае $SHELL означает переменную, о чем указывает наличие символа "$" перед заданным параметром. Echo - оно же "эхо" и есть, пример: unix1:/home/lavr> echo "Просто Эхо" Просто Эхо unix1:/home/lavr> в данном примере ясно видно что echo полностью отвечает своему названию, а двойные кавычки использовались нами для указания одного параметра - нужной нам строки символов. Более подробно об "echo" - 'man echo'. Чтобы увлечь пользователя, хотя бы самую малость, или как-то "подогреть" его интерес к Unix, рассмотрим еще несколько полезных команд и настроек: командная строка, например: unix1:/home/lavr> ^^^^^^^^^^^^^^^^^- интерпретаторы позволяют пользователю использовать свои собственные настройки PROMPT - "приглашения" командной строки, отличные от системных. Мы будем рассматривать только интерпретаторы tcsh и bash, перед тем как привести некоторые примеры, сразу хочу пояснить пожалуйста не путайте переменные среды - ENVIRONMENT, с переменными интерпретатора - SHELL. Продолжим, прежде чем менять будь то переменные среды ENVIRONMENT, будь то переменные SHELL, желательно посмотреть их значения и выяснить для чего они установлены. Переменные среды - ENVIRONMENT, можно посмотреть с помощью стандартной команды "env", например: unix1:/home/lavr> env PORTSDIR=/m/FBSD/FreeBSD-current/ports USER=lavr MACHTYPE=i386 MAIL=/var/mail/lavr SSH_AGENT_PID=4632 VENDOR=intel SHLVL=1 HOME=/home/lavr LESS=-ceM XNLSPATH=/usr/X11R6/lib/X11/nls XKEYSYMDB=/usr/X11R6/lib/X11/XKeysymDB PERLLIB=/usr/share/perl PAGER=less VISUAL=/usr/bin/vi GROUP=dug TMPDIR=/tmp LOGNAME=lavr TERM=xterm BLOCKSIZE=K DISTDIR=/m/FBSD/distfiles LESSCHARSET=koi8-r PATH=/home/lavr/bin:/usr/local/bin:/usr/local/sbin:/usr/local/audio:/bin:/usr/bi n:/usr/X11R6/bin:/sbin:/usr/sbin PACKAGES=/m/FBSD/packages-current DISPLAY=:0.0 LANG=ru_SU.KOI8-R LESSBINFMT=*u[%x] WRKDIR=/usr/pkg/tmp SSH_AUTH_SOCK=/tmp/ssh-lavr/agent-socket-4631 SHELL=/usr/local/bin/tcsh HOST=unix1.jinr.dubna.su OSTYPE=FreeBSD PWD=/home/lavr LC_ALL=ru_SU.KOI8-R TERMCAP=/etc/termcap TZ=:/etc/localtime MANPATH=/usr/local/man:/usr/share/man:/usr/X11R6/man HOSTTYPE=FreeBSD EDITOR=/usr/bin/vi WINDOWID=20971534 команду "env" можно использовать независимо от вашего SHELL-интерпретатора. Для более полной информации - 'man env'. Закрепим пройденный материал на примере интерпретатора tcsh: 1. Результат первого примера, переменные среды - ENVIRONMENT, которые мы получили используя команду системы "env", смотрите выше. 2. В tcsh имеется встроенная команда "printenv" которая предоставляет сервис, аналогичный системной команде "env", например: unix1:/home/lavr> printenv PORTSDIR=/m/FBSD/FreeBSD-current/ports USER=lavr MACHTYPE=i386 MAIL=/var/mail/lavr SSH_AGENT_PID=4632 VENDOR=intel SHLVL=1 HOME=/home/lavr LESS=-ceM XNLSPATH=/usr/X11R6/lib/X11/nls XKEYSYMDB=/usr/X11R6/lib/X11/XKeysymDB PERLLIB=/usr/share/perl PAGER=less VISUAL=/usr/bin/vi GROUP=dug TMPDIR=/tmp LOGNAME=lavr TERM=xterm BLOCKSIZE=K DISTDIR=/m/FBSD/distfiles LESSCHARSET=koi8-r PATH=/home/lavr/bin:/usr/local/bin:/usr/local/sbin:/usr/local/audio:/bin:/usr/bi n:/usr/X11R6/bin:/sbin:/usr/sbin PACKAGES=/m/FBSD/packages-current DISPLAY=:0.0 LANG=ru_SU.KOI8-R LESSBINFMT=*u[%x] WRKDIR=/usr/pkg/tmp SSH_AUTH_SOCK=/tmp/ssh-lavr/agent-socket-4631 SHELL=/usr/local/bin/tcsh HOST=unix1.jinr.dubna.su OSTYPE=FreeBSD PWD=/home/lavr LC_ALL=ru_SU.KOI8-R TERMCAP=/etc/termcap TZ=:/etc/localtime MANPATH=/usr/local/man:/usr/share/man:/usr/X11R6/man HOSTTYPE=FreeBSD EDITOR=/usr/bin/vi WINDOWID=20971534 результат должен быть одинаков: printenv==env Теперь посмотрим какие у нас установленны переменные самого интерпретатора tcsh, для этого воспользуемся его встроенной командой "set", или другой встроенной командой "@", например: unix1:/home/lavr> set addsuffix argv () cdpath (/sys /usr/src/bin /usr/src/sbin /usr/src/usr.bin /usr/src/usr.sbin /usr/src/lib /usr/src/libexec /usr/src/share /usr/src/contrib /usr/src/etc /usr/src/games /usr/src/gnu /usr/src/include /usr/src/) cpu unix1 cwd /home/lavr dirstack /home/lavr echo_style bsd edit gid 100 group dug history 500 home /home/lavr loginsh noclobber nonomatch owd /tmp path (/home/lavr/bin /usr/local/bin /usr/local/sbin /usr/local/audio /bin /usr/bin /usr/X11R6/bin /sbin /usr/sbin) prompt unix1:/home/lavr> prompt2 %R? prompt3 CORRECT>%R (y|n|e|a)? savehist 500 shell /usr/local/bin/tcsh shlvl 1 status 0 tcsh 6.08.00 term xterm tt xterm tty ttyp1 uid 310 user lavr version tcsh 6.08.00 (Astron) 1998-10-02 (i386-intel-FreeBSD) options 8b,nls,dl,al,sm,rh,color unix1:/home/lavr> Теперь рассмотрим то же, но применительно к интерпретатору bash, настройки среды - ENVIRONMENT, результат работы команды "env" : [linux4u]~ > env REMOTEUSER=lavr INFOPATH=/home/lavr/info:/usr/local/info:/usr/info:/usr/X11R6/info HISTSIZE=500 HOSTNAME=linux4u LOGNAME=lavr HISTFILESIZE=500 VISUAL=vi TERMINFO=/usr/lib/terminfo MAIL=/var/spool/mail/lavr MACHTYPE=i586-debian-linux PAGER=less WWW_HOME=http://www.jinr.dubna.su CDPATH=.:/home/lavr CERN_ROOT=/cern/pro TERMCAP=/etc/termcap TERM=xterm HOSTTYPE=i586 PATH=/home/lavr/bin:/home/lavr/sbin:/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin: /cern/pro/bin:/cern/adamo/3.3/bin:/usr/local/sbin:/usr/sbin:/sbin CERN_LIB=/cern/pro/lib HOME=/home/lavr XKEYSYMDB=/usr/X11R6/lib/X11/XKeysymDB LESSKEY=/etc/lesskey.bin SHELL=/bin/bash ADAMO_LIB=/cern/adamo/3.3/lib PS1=[\h]\w >\040 USER=lavr TMPDIR=/tmp _23500_GNU_nonoption_argv_flags_=000000000 MANPATH=/home/lavr/man:/usr/local/man:/usr/man:/usr/X11R6/man:/cern/pro/man:/cer n/adamo/3.3/man SSH_AUTH_SOCK=/tmp/ssh-lavr/agent-socket-23498 LESS=-ceMX BLOCKSIZE=K LESSCHARSET=koi8-r LESSBINFMT=*u[%x] DISPLAY=linux4u:12.0 LANG=ru_SU.KOI8-R HOST=linux4u SSH_CLIENT=159.93.17.121 753 22 HISTFILE=/home/lavr/.bash_history.linux4u OSTYPE=linux MM_CHARSET=ru_SU.KOI8-R ADAMO_ROOT=/cern/adamo/3.3 WINDOWID=54525968 NNTPSERVER=news.jinr.dubna.su PWD=/home/lavr XNLSPATH=/usr/X11R6/lib/X11/nls HISTCONTROL=ignoreboth SHLVL=2 no_exit_on_failed_exec=1 EDITOR=vi _=/usr/bin/env _8576_GNU_nonoption_argv_flags_=0 переменные самого интерпретатора bash, можно посмотреть с помощью встроенной команды самого bash - "set", например: [linux4u]~ > set MAILCHECK=60 REMOTEUSER=lavr INFOPATH=/home/lavr/info:/usr/local/info:/usr/info:/usr/X11R6/info HISTSIZE=500 UID=310 HOSTNAME=linux4u LOGNAME=lavr BASH_VERSINFO=([0]="2" [1]="00" [2]="0" [3]="1" [4]="release" [5]="i586-debian-l inux") OPTIND=1 HISTFILESIZE=500 PPID=23500 VISUAL=vi TERMINFO=/usr/lib/terminfo MAIL=/var/spool/mail/lavr MACHTYPE=i586-debian-linux DIRSTACK=() PAGER=less WWW_HOME=http://www.jinr.dubna.su CDPATH=.:/home/lavr CERN_ROOT=/cern/pro IFS=' ' TERMCAP=/etc/termcap TERM=xterm EUID=310 HOSTTYPE=i586 PATH=/home/lavr/bin:/home/lavr/sbin:/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin: /cern/pro/bin:/cern/adamo/3.3/bin:/usr/local/sbin:/usr/sbin:/sbin CERN_LIB=/cern/pro/lib OLDPWD=/home/ftp HOME=/home/lavr XKEYSYMDB=/usr/X11R6/lib/X11/XKeysymDB LESSKEY=/etc/lesskey.bin SHELL=/bin/bash ADAMO_LIB=/cern/adamo/3.3/lib LINES=40 PS1='[\h]\w >\040' PS2='> ' PS4='+ ' USER=lavr TMPDIR=/tmp _23500_GNU_nonoption_argv_flags_=000000000 MANPATH=/home/lavr/man:/usr/local/man:/usr/man:/usr/X11R6/man:/cern/pro/man:/cer n/adamo/3.3/man SSH_AUTH_SOCK=/tmp/ssh-lavr/agent-socket-23498 LESS=-ceMX BLOCKSIZE=K LESSCHARSET=koi8-r LESSBINFMT='*u[%x]' COLUMNS=80 SHELLOPTS=braceexpand:hashall:histexpand:monitor:history:interactive-comments:em acs DISPLAY=linux4u:12.0 PIPESTATUS=([0]="0") RANDOM=28471 LANG=ru_SU.KOI8-R HOST=linux4u SSH_CLIENT='159.93.17.121 753 22' HISTFILE=/home/lavr/.bash_history.linux4u OSTYPE=linux MM_CHARSET=ru_SU.KOI8-R ADAMO_ROOT=/cern/adamo/3.3 WINDOWID=54525968 NNTPSERVER=news.jinr.dubna.su OPTERR=1 PWD=/home/lavr XNLSPATH=/usr/X11R6/lib/X11/nls _=clear HISTCONTROL=ignoreboth SHLVL=2 BASH_VERSION='2.00.0(1)-release' no_exit_on_failed_exec=1 BASH=/bin/bash EDITOR=vi mc=() { MC=/tmp/mc$$-"$RANDOM"; /usr/bin/mc -U -P "$@" >"$MC"; cd `cat "$MC"`; /bin/rm "$MC"; unset MC } emacs=() { if [ -z "$DISPLAY" ]; then /usr/bin/emacs "$@"; else /usr/bin/emacs "$@" & fi } pp=() { ps auxwww | egrep "(PID|${*:-.*})" } ff=() { if [ $# -eq 0 ]; then echo "Usage: ff pattern"; else find . \( -name \*$*\* -o -name $*\* -o -name \*$* \) -print; fi } setenv=() { if [ $# -eq 0 ]; then set; else export $1="$2"; fi } unsetenv=() { export -n $*; unset $* } пусть вас не смущает количество переменных и функции, как было сказано выше интерпретатор bash - это очень мощное средство, с огромнымы возможностями. Сделайте свой выбор и постарайтесь освоить хотя бы малую часть возможностей интерпретатора, поверьте, это очень пригодится. Самое время хотя бы мельком прочитать руководство: unix1:/home/lavr> man tcsh или unix1:/home/lavr> man bash и вероятно не помешает, unix1:/home/lavr> man environ Вернемся к некоторым важным переменным среды и интерпретатора, приглашение командной строки - PROMPT, вид командной строки можно установить через переменные интерпретаторов "prompt" для tcsh и "PS1" для bash, например: в случае tcsh: unix1:/home/lavr> set prompt="%m:%/[%T]%#" и в результате, меняяем вид на: unix1:/home/lavr[16:04]> последовательности символов %m,%/,%T и %# - это только малый набор готовых директив характерных только для задания "prompt" конкретно в tcsh, для обзора возможных смотрите 'man tcsh'. в случае bash: [linux4u]~ > PS1="\h\w[\@] >" linux4u~[05:28pm] > сответственно последовательность \h,\w,\@ - характерна для bash, для полного обзора смотрите 'man bash'. Если по какой-то причине, у вас не работают команды операционной системы, например "env" или другие, возможно что неудачно установлена переменная PATH среды или переменные path для tcsh и PATH для bash. PATH - путь, он есть путь, последовательность директорий которые система будет просматривать на предмет запуска той или иной программы-команды. Пример задания переменной PATH: в tcsh, unix1:/home/lavr[17:45]>setenv PATH ${HOME}:/usr/local/bin:/usr/local/sbin:/bin:/usr/bin:/usr/X11R6/bin:/sbin:/usr/sbin это пример задания переменной среды PATH, используя команду для установки переменный среды в tcsh - setenv. unix1:/home/lavr[17:51]>set path=( ~/bin /usr/local/bin /usr/local/sbin /bin /usr/bin /usr/X11R6/bin /sbin /usr/sbin ) это пример задания переменой path интерпретатора tcsh, однако некоторые свои переменные tcsh синхронизирует с переменными среды, path одна из таких переменных. в bash, linux4u~[05:28pm] >PATH=$HOME/bin:/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/usr/local/sbin:/usr/sbin:/sbin пример задания переменной PATH в bash, для того чтобы экспортировать ее в среду, достаточно выполнить: linux4u~[05:54pm] >export PATH либо сразу выполнить 'export PATH=параметры'. Не используйте мое ЗНАЧЕНИЕ переменной пути - PATH из примера, оно зависимо от системы, ниже я постараюсь отразить общую структуру дерева Unix. В общем случае, установить переменные среды можно так: tcsh, 'setenv ИМЯ значение' bash, 'export ИМЯ=значение' посмотреть, echo $ИМЯ (напоминаю, символ "$" указывает что нужно показать ЗНАЧЕНИЕ переменной, иначе просто получим результат "эха") переменные интерпретаторов: tcsh, 'set имя=значение' bash, 'ИМЯ=значение' Некоторые полезные переменные среды: HOME,USER,LOGNAME,MAIL,EDITOR,PAGER,LANG TERM,TERMCAP. Переменная среды PATH нам уже знакома, переменная HOME указывает на домашнюю директорию пользователя, как нетрудно догадаться. рассмотрим некоторые переменные на примерах: unix1:/home/lavr[18:39]>echo $HOME /home/lavr unix1:/home/lavr[18:41]> unix1:/home/lavr[18:41]>echo $USER lavr unix1:/home/lavr[18:42]>echo $LOGNAME lavr unix1:/home/lavr[18:42]> в данный момент переменные среды USER и LOGNAME совпадают и соответствуют имени - login, вошедшего в сеанс пользователя. unix1:/home/lavr[18:42]>echo $MAIL /var/mail/lavr unix1:/home/lavr[18:44]> переменная MAIL указывает полный путь к вашему почтовому ящику в системе, о работе с почтой будет описано в другой _заметке_. переменная среды EDITOR, указывает на то какой редактор будет использоваться по умолчанию при вызове редактора из других программ. unix1:/home/lavr[18:44]>echo $EDITOR /usr/bin/vi unix1:/home/lavr[18:48]> Сразу хочу заметить, в стандартной конфигурации разных Unix, основные редакторы , которые приходят с системой это: ed - строчный текстовый редактор "Эд"; vi,view,ex - что суть, одно и тоже, полноэкранный текстовый редактор "Ви-ай". Базовый набор команд редактора "Vi" полностью включает команды строчного редактора "ed", который очень удобно использовать для мелких и быстрых правок текста. Предупреждаю, не торопитесь запускать любой из этих редакторов если ранее вы не сталкивались с редакторами у которых имеется режим "командной строки" и режим "редактирование". Для освоения этих редакторов советую использовать две открытые сессии терминалов(виртуальные консоли или xterm, или два физических терминала - это зависит от ваших возможностей), в одном сеансе - 'man vi[ed]', а в другом - 'vi [test]' или 'ed [test]'. Если у вас все-таки возникли проблемы с выходом из редакторов, то: - в случае ed, необходимо выйти в командный режим используя сочетание клавиш CTRL-C (те послать сигнал INTR-прервать, ASCII DEL или BREAK), и получить в строке первым символом - "?", что означает переход в "командный режим" и затем выдать комадну "Q" - выйти из редактора. - в случае vi, в комадный режим можно выйти через нажатие "escape" или CTRL-C, переход в командный режим обычно сопровождается звуковым сигналом и затем задать команду ":q" или ":q!". Не трудно заметить, что самое замечательное свойство редакторов ed/vi, это то что они есть во всех Unix, других качеств, как положительных, так и отрицательных(?), тоже достаточно, но об этом отдельно в других заметках или разделах FAQ'ов. Несколько наиболее распространненых в Unix редакторов: - joe, jove, emacs(это целая среда), vile,vim,nvi (разнообразие vi-подобных) - xemacs, nedit - редакторы ориентированные для работы в графическом режиме X-Windows. переменная PAGER указывает какая программа будет вызываться для просмотра файлов в текстовом формате, например команда "man" в разных OS Unix, зачастую проверяет эту переменную для использования в дальнейшем заданной там программы просмотра. Например: unix1:/home/lavr> echo $PAGER less unix1:/home/lavr> или 1.lavr@sunhe:/home/sunhe/lavr>echo $PAGER more 2.lavr@sunhe:/home/sunhe/lavr> Где, less и more - самые распространенные и продвинутые утилиты для просмотра текстовых файлов. Переменные среды TERM и TERMCAP указывают тип используемого терминала и базу данных с описаниями различных терминалов соответственно. Возможно, в следующих заметках суть этих терминов и их использование будет объяснено подробнее, сейчас же упомяну что все экранно-ориентированные программы используют одну из двух баз, старую - termcap или более современную, продвинутую - terminfo для операций с курсором, цветом, функциональными клавишами и тд и тп, тс операций ввода-вывода, в зависимости от типа терминала определенного в переменной TERM. Назначение этих переменных зависит от типа терминала(hardware), косвенно от OS Unix, режима терминала - текстовая консоль (виртуальная - богатая возможность использования переключения страниц видео-памяти в Intel-based Unix) или графический режим X-Windows. В широко известных Intel-based OS Unix: Linux, FreeBSD, Solaris-x86, SCO, Xenix, переменная TERM часто имеет следующие значения(в случае текстовой консоли): Linux : TERM=linux FreeBSD : TERM=cons25 или pc3[x] (cons25r и pc3r с koi8-support) Solaris : TERM=at386 SCO/Xenix: TERM=[не помню] (подойдет at386 или измененный на его основе) SUN/HP/OSF: TERM=sun/hp/sx и разнообразные модификации на базе указанных значений TERM, смотрите файл /etc/termcap, например 'more /etc/termcap'. В случае использования X-Windows, переменная TERM чаще всего имеет значения взависимости от используемой программы a-la "xterm": xterm,color-xterm,kxterm и тд и тп. Если вы используете эмуляторы терминала в различных программах дозвонки(bbs) или эмуляторов терминала в пакетах для работы с Unix из Windows9x/NT, не забудьте привести в соответствие или выбрать наиболее подходящий для вас режим эмуляции удаленного терминала, например в bbs'ках: kermit,telix,telemate и многих других: ansi/vt52/100/200/220/... тот же принцип и в пакетах "эмуляторы удаленного терминала" для Windows9x/NT. (Разнообразные NetTERM/TerraTERM и тд) Проверить, настроить или видоизменить "эмуляторы терминалов" можно после входа в систему, изменив переменные TERM/TERMCAP/TERMINFO, например: unix1:/home/lavr> echo $TERM xterm unix1:/home/lavr> echo $TERMCAP /etc/termcap unix1:/home/lavr> что говорит об использовании грфической среды X-Windows, для нее эмулятора терминала - xterm (TERM=xterm) и базы описания терминалов, файл /etc/termcap, который определен через переменную TERMCAP. Как упоминалось выше, в качестве базы описания терминалов можно использовать как TERMCAP, так и TERMINFO, в моих примерах я опираюсь на базу TERMCAP, в силу старой привычки. Нужно отемтить, использование баз TERMCAP/TERMINFO, часто зависит от того как ваш администратор собирает те или иные экранно-ориентированные программы. примеры текстовых консолей, FreeBSD: unix1:/home/lavr> echo $TERM pc3r unix1:/home/lavr> echo $TERMCAP /etc/termcap unix1:/home/lavr> Linux: [linux4u]~ > echo $TERM linux [linux4u]~ > echo $TERMCAP /etc/termcap [linux4u]~ > Sun(Sparc): ultra:/home/lavr> echo $TERM sun ultra:/home/lavr> echo $TERMCAP /etc/termcap ultra:/home/lavr> В программах удаленного доступа, например через модем - режим online, в старых-добрых telix/telemate, я использую эмуляцию терминалов vt52/ansi, тогда при входе на Unix машину имеет смысл проверить и при необходимости переопределить переменные TERM/TERMCAP. Например в telix, я выбираю эмуляцию vt52, а при входе через модем на машину с OS Unix, устанавливаю переменную TERM=vt100, в случае telemate - выбираю эмуляцию ansi-терминала и затем в Unix использую TERM=ansi или pcansi (и разнообразные модификации ansi или pcansi). Кстати, можно сделать разбор и установку переменной TERM при входе - те отработке "login", а в случае неизвестного терминала попросить задать переменную TERM интерактивно, как это сделать - личное дело администратора или пользователя, а вот где - ниже, мы коротко разберем процедуру входа в систему для пользователей с интерпретаторами bash/tcsh[sh/csh]. Последняя, упомянутая нами переменная среды - LANG. Эта переменная имеет отношение к локализации операционной системы, в нашем случае, руссификации - кириллизации. Спора о выборе кодировки(866-ALT,1251-Windows,ISO-8859-5,KOI8-R) не будет, гласный или негласный, зарегистрированный или нет, для русскоязычной части сети Интернет стандартом принято считать KOI8-R(точка). И в этом отношении правильную политику ведет сеть FIDO. В любом случае, имеется много руководств или FAQ-ЧАВО, написанных еще во времена Релкомовской _монархии_ :-), о сетевом этикете, терминах, ресурсах И КОДИРОВКЕ. На настоящий момент, наиболее удачно локализованная OS Unix - FreeBSD и вероятно Net[Open]BSD, Linux - те открытые системы. Что-то в этом плане сделал Sun в Solaris2.7, я не видел и не пробовал и утверждать не берусь. Во всем что касается локализации, как здесь, так и в дальнейшем будет подразумеваться кодировка KOI8-R. Возможно у нас будет раздел о локализации, пока же будем считать что система "как-то" локализована или по-крайней мере, имеет необходимые загруженные фонты и "клавиатурный переключатель" между разными раскладками клавиатуры(кодовыми таблицами). В этом документе мы попробуем дать лишь несколько советов как можно попытаться использовать 8-ой бит для чтения и написания кириллицы. Не хотелось бы "пудрить мозги начинающим", но следует уточнить такие моменты: - в качестве рабочего места машина с OS Unix или X-Terminal, в этом случае ваш администратор должен позаботиться о локализации, а при использовании графической среды X-Windows вы можете загружать необходимые фонты и и "клавиатурный переключатель" самостоятельно; - в качестве рабочего места машина с MS-DOS или Windows9x/NT, в этом случае у вас наверняка кодировки 866 и 1251 соответственно, тогда при использовании программ "удаленного доступа" вам следует позаботиться о переключении в MS-DOS/Windows в KOI8-R или использовать в качестве фонтов в программах "удаленного доступа" - фонты KOI8-R и переопредилить раскладку клавиатуры (если позволяют программы удаленного доступа) Рассмотрим несколько примеров, Допустим что локально мы можем смотреть и/или переключаться в KOI8-R. 1. Проверка характиристик устройства стандартного вывода. - сначала проверим характеристики устройства стандартного вывода, по-русски установленный размер отображения символа 5,6,7 или 8 bit и чтобы не происходило обрезание последнего (8bit) в процессе ввода, воспользуемся командой "stty" (man stty), например: unix1:/home/lavr> stty -a speed 9600 baud; 40 rows; 80 columns; lflags: icanon isig iexten echo echoe -echok echoke -echonl echoctl -echoprt -altwerase -noflsh -tostop -flusho pendin -nokerninfo -extproc iflags: istrip icrnl -inlcr -igncr ixon -ixoff -ixany imaxbel -ignbrk brkint -inpck -ignpar -parmrk oflags: opost onlcr -oxtabs cflags: cread cs7 -parenb -parodd hupcl -clocal -cstopb -crtscts -dsrflow -dtrflow -mdmbuf cchars: discard = ^O; dsusp = ^Y; eof = ^D; eol = ; eol2 = ; erase = ^H; intr = ^C; kill = ^U; lnext = ^V; min = 1; quit = ^\; reprint = ^R; start = ^Q; status = ^T; stop = ^S; susp = ^Z; time = 0; werase = ^W; unix1:/home/lavr> ищите две компоненты в управляющих флагах(cflags) и входных(iflags): наличие cflags - наличие режима "cs8"(размер символа 8bit) и в iflags - "-istrip"(запретить обрезание входных символов до 7bit). В верхнем примере видим что установлены режимы cs7 и istrip, в то время как нам нужно cs8 и -istrip, посмотрите каков будет результат при переключении в KOI8-R: unix1:/home/lavr> MAMA MYLA RAMU попробуем исправить, установив нужные нам режимы: unix1:/home/lavr> stty cs8 -istrip и снова наберем ту же фразу: unix1:/home/lavr> мама мыла раму Возможны варианты команды stty с параметрами, попробуйте следующие и если помогло, установите что именно: unix1:/home/lavr> stty pass8 работает в разных версия BSD, Linux, OSF1, не работает в Solaris/HP-UX/AIX. или unix1:/home/lavr> stty -parity -evenp -oddp cs8 -istrip или unix1:/home/lavr> stty -parenb -istrip cs8 2. Проверка интерпретаторов на предмет работы с 8-ым битом. - возможно ваш SHELL не пропускает 8-ой bit(и это по-большому счету несущественно, ибо главное чтобы можно было использовать кириллицу в редакторах и программах просмотра текста - less/more), можно указать на это системному администратору и попросить разобраться. Как проверить с какими возможностями скомпилированы tcsh/bash, tcsh: unix1:/home/lavr> set или unix1:/home/lavr> @ unix1:/home/lavr> set addsuffix argv () cdpath (/sys /usr/src/bin /usr/src/sbin /usr/src/usr.bin /usr/src/usr.sbin /usr/src/lib /usr/src/libexec /usr/src/share /usr/src/contrib /usr/src/etc /usr/src/games /usr/src/gnu /usr/src/include /usr/src/) cpu unix1 cwd /home/lavr ... version tcsh 6.08.00 (Astron) 1998-10-02 (i386-intel-FreeBSD) options 8b,nls,dl,al,sm,rh,color ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^- это интересующая нас строка и в ней необходимо наличие параметров 8b - 8bit и nls - при отсутствии локализации. bash: если я не ошибаюсь, bash не сообщает параметры компиляции, но если возникли проблемы, то попробуйте создать в домашней директории файл .inputrc такого вида: ------------------------- begin .inputrc ---------------------------------- set convert-meta off set meta-flag on set output-meta on ------------------------- end of .inputrc --------------------------------- затем запустить второй shell: 'bash --login' или выйти из сеанса и снова войти или задать эти параметры ввода и отображения входной строки так: [linux4u]~ > bind 'set convert-meta off' 'set meta-flag on' 'set output-meta on' 3. Отображение кириллицы в редакторах. При настроенной локализации, при этом неважно как ее определили, те для пользователей это возможность использования русских символов, ВСЕ ДОЛЖНО работать. _правильное_ значение переменной LANG=ru_SU.KOI8-R , однако можно встретить достаточно большое разнообразие, например: nusun:~>echo $LANG koi8 nusun:~> или lavr@decimal 101 -> echo $LANG ru.koi_8 lavr@decimal 102 -> или ru,RU,su,SU и тд и тп, пользователям "фиолетово" - лишь бы работало. При ненастроенной локализации, попробуйте такие варианты: запустите ваш редактор, переключите клавиитуру в русскую раскладку и попробуйте напечатать, например "мама мала раму", если набранный текст не соответствует отображаемому, то: - вы видите кириллицу, но она не соответствует введенному тексту, тогда у вас проблема с раскладкой клавиатуры; - если вы видите восмиричные, шестнадцатиричные или "\код", ваш редактор требует настройки локализации, как этого избежать: 1. попробуйте отменить установку переменной LANG или задать ей пустое значение и посмотреть как это отразилось на работе редактора; 2. попробуйте установить переменную LANG в любое значение, найденное в вашей OS Unix, отличное от "C","Latin-1","en_US", лишь бы имелась возможность отображения 8-ого бита, например, Solaris: если у вас имеется директория /usr/lib/locale с локализацией для de,fr,es можете воспользоваться ими: tcsh: ultra:/home/lavr> setenv LANG de или ultra:/home/lavr> setenv LC_CTYPE de bash: ultra:/home/lavr> export LANG=de или ultra:/home/lavr> export LC_CTYPE=de теперь редактор должен показывать русские буквы. HP-UX: если у вас имеется директория /usr/lib/nls с локализацией для german - de_DE.roman8 или других стран отличных от en_US (USA), вполне можете воспользоваться ими: tcsh: ultra:/home/lavr> setenv LANG de_DE.roman8 или ultra:/home/lavr> setenv LC_CTYPE de_DE.roman8 bash: ultra:/home/lavr> export LANG=de_DE.roman8 или ultra:/home/lavr> export LC_CTYPE=de_DE.roman8 теперь редактор должен показывать русские буквы. Это не есть верное решение проблемы, а всего лишь выход из положения который может не сработать для старых OS Unix и для sh/csh. Коротко о том какие файлы для tcsh/bash нужно создать-модифицировать для настройки среды в OS Unix. При входе на машину с OS Unix у вас отрабатыает сценарий "login", подробно - читайте 'man login'. Если ваш интерпретатор - tcsh, то при входе в систему он пытается выполнить команды сначала из системных файлов-настроек: /etc/csh.cshrc и /etc/csh.login (порядок выполнения мб установлен во время компиляции tcsh), а затем из домашней директории пользователя: .tcshrc, .cshrc, .login (порядок мб изменен) Более полную информацию см. 'man tcsh'. Свои настройки вы можете сделать в файлах домашней директории: .tcshrc, .cshrc, .login. Если ваш интерпретатор - bash, то при входе в систему он пытается выполнить команды сначала из системных файлов-настроек: /etc/profile и после этого из файло в домашней директории пользователя: .bash_profile, .bash_login, .profile и .bashrc (порядок мб изменен при компиляции). Более полную информацию см. 'man bash'. Свои настройки вы можете сделать в файлах домашней директории: .bash_profile, .bash_login, .profile и .bashrc. В большинстве разных OS Unix имеется директория содержащая заготовки для настройки пользовательской среды, sh/csh/tcsh/bash - /etc/skel, из нее копируются настроечные файлы в домашнюю директорию пользователя при регистрации. Часто бывает что администратор либо изменяет изначальные системные наситройки или добавляет что-то специфичное, либо заменяет эту диреторию на /usr/local/etc , возможно на иную, характерную для локальных целей. Например: Solaris, ultra:/tmp> ls -la /etc/skel total 24 drwxr-xr-x 2 root sys 512 Sep 2 1997 . drwxrwxr-x 28 root sys 3584 Oct 1 14:47 .. -rwxr-xr-x 1 vvm dug 6 Apr 4 1996 .bash_logout -rw-r--r-- 1 vvm dug 27 Mar 6 1996 .bash_profile -rw-r--r-- 1 vvm dug 21 Mar 6 1996 .bashrc -rw-r--r-- 1 root other 25 Sep 2 1997 .cshrc -rw-r--r-- 1 root other 25 Sep 2 1997 .login -rw-r--r-- 1 root other 6 Sep 2 1997 .logout -rw-r--r-- 1 root other 144 Jul 9 1997 .profile ultra:/tmp> HP-UX, [dtserv]~ > ls -la /etc/skel total 40 drwxrwxr-x 7 root sys 1024 Jan 30 1998 . dr-xr-xr-x 25 bin bin 5120 Oct 16 09:20 .. -rwxr-xr-x 1 root sys 6 Jan 29 1998 .bash_logout -rw-r--r-- 1 root sys 31 Jan 29 1998 .bash_profile -rw-r--r-- 1 root sys 25 Jan 29 1998 .bashrc -r--r--r-- 1 root sys 814 Jun 10 1996 .cshrc -r--r--r-- 1 root sys 347 Jan 28 1998 .exrc -r--r--r-- 1 root sys 347 May 30 1996 .exrc.orig -r--r--r-- 1 root sys 341 Jun 10 1996 .login drwxr-xr-x 2 root sys 1024 Jan 30 1998 .mc -rw-r--r-- 1 root sys 677 Jan 29 1998 .profile -r--r--r-- 1 root sys 446 Jun 10 1996 .profile.orig drwxr-xr-x 2 root sys 1024 Jan 30 1998 .ssh drwxr-xr-x 2 root sys 24 Jan 30 1998 Mail drwxr-xr-x 2 root sys 1024 Apr 21 1998 bin drwxr-xr-x 2 root sys 1024 Apr 21 1998 sbin [dtserv]~ > Теперь попробуем рассмотреть повседневный набор команд в OS Unix: Примечание: в качестве примера использовалась система FreeBSD, но базовые команды не сильно отличаются от системы к системе, некоторым дополнительным набором ключей, не более того. 1. uname - посмотреть под управлением какой OS и на какой платформе мы работаем: `man uname` Пример: [unix1]~ > uname -a FreeBSD unix1.jinr.dubna.su 4.2-STABLE FreeBSD 4.2-STABLE #0: Tue Mar 13 17:31:28 MSK 2001 toor@unix1.jinr.dubna.su:/usr/src/sys/compile/LAVR i386 [unix1]~ > ultra:/home/lavr> uname -a SunOS ultra 5.5.1 Generic_103640-32 sun4u sparc SUNW,Ultra-1 ultra:/home/lavr> обычно команда `uname` сообщает версию OS и платформу. 2. date - текущие дата и время: `man date` ultra:/home/lavr> date Fri Jun 15 18:19:01 MSK/MSD 2001 ultra:/home/lavr> 3. who[w] - посмотреть среднюю загрузку и кто еще работает на машине и чем в текущий момент занят: Примечание: команды who/w похожи и на разных систем имеют небольшие различия, `man who` `man w` [unix1]~ > who lavr ttyp1 14 июн 15:05 (unix1.jinr.dubna) lavr ttyp2 10 июн 15:10 (unix1.jinr.dubna) lavr ttyp3 15 июн 17:06 (unix1.jinr.dubna) lavr ttyp4 15 июн 18:10 (unix1.jinr.dubna) lavr ttyp5 15 июн 18:10 (unix1.jinr.dubna) pin ttyp6 15 июн 18:21 (dezcom.mephi.ru) lavr ttyp7 15 июн 18:28 (unix1.jinr.dubna) [unix1]~ > ultra:/home/lavr> who palichik pts/3 Jun 14 17:53 (sunct2) tanyusha pts/5 Jun 15 16:05 (159.93.25.75) tanyusha pts/0 Jun 15 17:41 (159.93.25.75) lavr pts/2 Jun 15 18:17 (unix1.jinr.dubna.su) ultra:/home/lavr> Примечание: если запущен демон rwhod, то команда rwho покажет всех работающих пользователей на остальных компьютерах сети под управлением OS Unix, в случае если на них тоже запущен демон rwhod: cv:/local2/home/lavr> rwho asp cv:ttyp9 Jun 15 18:09 :08 eat cv:ttyp1 Jun 13 18:28 :01 eat cv:ttyp7 Jun 13 19:38 :01 karlov cv:ttypc Jun 15 18:03 lavr lxit00:pts/0 Jun 15 14:05 :08 minaev alice:pts/1 Jun 15 10:47 :25 popovla cv:ttyp6 Jun 15 17:44 :34 root dtmain:1 Jun 14 11:53 skachkov cv:ttyp5 Jun 15 17:19 :08 taratin bcv:ttyp3 Jun 15 14:46 :18 toor dtmain:0 Jun 6 13:51 zemlya cv:ttyp8 Jun 15 18:00 :19 cv:/local2/home/lavr> в верхнем примере мы видим что на машине cv работают пользователи: asp eat karlov popovla skachkov zemlya на машине dtmain: root toor на машине lxit00: lavr на машине alice: minaev на машине bcv: taratin пример команды `w`: [unix1]~ > w 6:28пп up 12 days, 6:48, 7 users, load averages: 1.47, 1.31, 1.18 USER TTY FROM LOGIN@ IDLE WHAT lavr p1 unix1.jinr.dubna чт 03пп 5 ftp ftp://lizard/video lavr p2 unix1.jinr.dubna вс 03пп 13 slogin lx000h lavr p3 unix1.jinr.dubna 5:06пп - /usr/local/bin/mc -U - lavr p4 unix1.jinr.dubna 6:10пп 5 lynx ftp://lizard/vide lavr p5 unix1.jinr.dubna 6:10пп 3 slogin cv pin p6 dezcom.mephi.ru 6:21пп - pine lavr p7 unix1.jinr.dubna 6:28пп - w [unix1]~ > cv:/local2/home/lavr> w 6:25pm up 22 days, 23:37, 12 users, load average: 1.39, 1.95, 3.59 User tty login@ idle JCPU PCPU what vkc tty03 6:22pm 1 -csh[vkc] lavr ttyp0 6:21pm w eat ttyp1 6:28pm 6 3:39 1 -csh toor ttyp2 8:05pm191:42 11:42 23 -bash ayrjan ttyp3 5:15pm 3:22 10 9 pine pokorny ttyp4 6:22pm 3 sleep 30 skachkov ttyp5 5:19pm 40 -csh[skachkov] popovla ttyp6 5:44pm 40 1 -bash[popovla] eat ttyp7 7:38pm 6 2:34 8 pine asp ttyp9 6:09pm 17 2 -csh[asp] kon ttypb 1:48pm 1:39 25 13 -csh[kon] karlov ttypc 6:03pm 1 9 -csh[karlov] cv:/local2/home/lavr> ultra:/home/lavr> w 6:39pm 3 users, load average: 0.04, 0.03, 0.06 User tty login@ idle JCPU PCPU what palichik pts/3 Thu 5pm 4 4 mc -U palichik pts/0 6:35pm mc -U lavr pts/1 6:38pm w ultra:/home/lavr> 4. tty - посмотреть на каком терминале вы работаете: `man tty` ultra:/home/lavr> tty /dev/pts/1 ultra:/home/lavr> [unix1]~ > tty /dev/ttyp7 [unix1]~ > в примерах выше - pts и ttyp указывают что это сетевые терминальные сессии [unix1]~ > tty /dev/console [unix1]~ > [unix1]~ > tty /dev/ttyv3 [unix1]~ > в прмерах выше - console и ttyv3 указывают на то что это консольные терминалы, а ttyv3 - 3'ий виртуальный терминал консоли. 5. more|less - команды просмотра содержимого текстовых файлов, часто используются как фильтры в pipe'ах: `man more` `man less` ultra:/home/lavr> more koi8.txt ultra:/home/lavr> less koi8.txt ultra:/home/lavr> who | less ultra:/home/lavr> who | more 6. cat - программа слияния и распечатки файлов: `man cat` [unix1]~ > cat koi8.txt верхний регистр: winkeys ---------------- цифровой ряд: Ё!"'*:,.;()_+| Ё!"#;%:?*()_+| ЙЦУКЕНГШЩЗХЪ ФЫВАПРОЛДЖЭ ЯЧСМИТЬБЮ? нижний регистр: --------------- цифровой ряд: ё1234567890-=\ ё1234567890-=/ йцукенгшщзхъ фывапролджэ ячсмитьбю/ [unix1]~ > [unix1]~ > cat koi8.txt koi8.txt > 2koi8 в примере выше мы использовали команду cat для слияния файла koi8.txt, дважды в один файл 2koi8 с использованием перенаправления вывода в файл 2koi8. 7. ls - показать содержимое директории: [unix1]~ > ls [unix1]~ > ls -la [unix1]~ > ls /usr/bin [unix1]~ > ls -la /usr/bin | more [unix1]~ > ls -la /usr/bin | less 8. cd - перейти в указанную директорию или файловую систему: `man cd` - это встроенная команда вашего интерпретатора SHELL [unix1]~ > cd /tmp [unix1]/tmp > [unix1]/tmp > cd /usr/local [unix1]/usr/local > [unix1]/usr/local > cd .. [unix1]/usr > [unix1]/usr > cd ../home [unix1]/home > 9. pwd - посмотреть в каком текущем месте, директории мы находимся: [unix1]~ > pwd /home/lavr [unix1]~ > 10. mkdir - создать директорию: [unix1]~ > mkdir testdir [unix1]~ > ls -la testdir total 9 drwxr-xr-x 2 lavr dug 512 15 июн 18:57 . drwxr-xr-x 68 lavr dug 7680 15 июн 18:57 .. [unix1]~ > mkdir /tmp/testdir [unix1]~ > ls -la /tmp/testdir total 5 drwxr-xr-x 2 lavr wheel 512 15 июн 18:57 . drwxrwxrwt 37 root wheel 4096 15 июн 18:57 .. [unix1]~ > 11. ed,ex,vi - редакторы для создания и работы с файлами, touch,cat,copy - команды, в частности позволяющие создавать файлы: ed - строчный редактор (распространяется в любом дистрибутиве OS Unix) ex,vi - полноэкранные редакторы (распространяется в любом дистрибутиве OS Unix) указанные редакторы присутствуют в любом дистрибутиве любой OS Unix `man ed` `man ex` `man vi` примеры создания небольших файлов с помощью команд touch,cat,copy: [unix1]~ > cat > testfile This is example Easy file creator  - CTRL-D [unix1]~ > нажатие CTRL-D мы использовали как посылку сигнала EOF (End Of File) [unix1]~ > ls -la testfile -rw-r--r-- 1 lavr dug 34 15 июн 19:07 testfile [unix1]~ > примечание: комбинационную связку клавиши-сигнал можно посмотреть командой `stty -a`: [unix1]~ > stty -a speed 9600 baud; 40 rows; 80 columns; lflags: icanon isig iexten echo echoe -echok echoke -echonl echoctl -echoprt -altwerase -noflsh -tostop -flusho pendin -nokerninfo -extproc iflags: -istrip icrnl -inlcr -igncr ixon -ixoff -ixany -imaxbel -ignbrk -brkint -inpck -ignpar -parmrk oflags: opost onlcr -oxtabs cflags: cread cs8 parenb -parodd hupcl -clocal -cstopb -crtscts -dsrflow -dtrflow -mdmbuf cchars: discard = ^O; dsusp = ^Y; eof = ^D; eol = ; eol2 = ^@; erase = ^H; intr = ^C; kill = ^U; lnext = ^V; min = 1; quit = ^\; reprint = ^R; start = ^Q; status = ; stop = ^S; susp = ^Z; time = 0; werase = ^W; [unix1]~ > примечание: stty - команда установки настроек терминальных устройств. [unix1]~ > touch createfile [unix1]~ > ls -la createfile -rw-r--r-- 1 lavr dug 0 15 июн 19:18 createfile [unix1]~ > с помощью команды `touch` можно создать пустой файл. [unix1]~ > cp /dev/stdin newfile Once again to create new file Hello, World. [unix1]~ > ls -la newfile -rw-r--r-- 1 lavr dug 44 15 июн 19:22 newfile [unix1]~ > с помощью достаточного большого набора команд, которые работают с устройством стандартного ввода, можно быстро создавать простые файлы. [unix1]~ > echo "Just add one string to file newfile" >> newfile [unix1]~ > cat newfile Once again to create new file Hello, World. Just add one string to file newfile [unix1]~ > в данном случае ">>" означает добавить к уже существующему файлу. Вариантов быстрого создания маленьких фалов много, но для реальной работы необходимо осваивать существующие в OS Unix редакторы, их много и поэтому рекоммендации такие: - если вы планируете стать системным администратором: ed/vi[vim] - обязаны знать, по-скольку это базовые редакторы всех OS Unix - во всех остальных случаях: ed/vi[vim] emacs/xemacs joe jove nedit - X11 редактор и тд и тп 12. rm - удалить файл, директорию: `man rm` удалить созданные ранее файлы: [unix1]~ > rm 2koi8 remove 2koi8? y [unix1]~ > удалить созданные ранее директории: [unix1]~ > rm -r testdir remove testdir? y [unix1]~ > [unix1]~ > rm -r /tmp/testdir remove /tmp/testdir? y [unix1]~ > 13. cp - команда копирования файлов, директорий: копирование файла: ultra:/home/lavr> cp cp: Insufficient arguments (0) Usage: cp [-f] [-i] [-p] f1 f2 cp [-f] [-i] [-p] f1 ... fn d1 cp -r|R [-f] [-i] [-p] d1 ... dn-1 dn ultra:/home/lavr> ultra:/home/lavr> cp koi8.txt copy_koi8.txt ultra:/home/lavr> ls -la copy_koi8.txt -rw------- 1 lavr dug 1125 Jun 16 15:43 copy_koi8.txt ultra:/home/lavr> копирование директории: ultra:/home/lavr> ls -la Mail total 150 drwx------ 2 lavr dug 512 Jan 22 13:14 . drwxr-xr-x 39 lavr dug 3584 Jun 16 15:45 .. -rw------- 1 lavr dug 1407 Oct 29 1998 anarbay -rw------- 1 lavr dug 1409 Aug 1 1998 andrew -rw------- 1 lavr dug 3974 Jun 17 1999 iris -rw------- 1 lavr dug 2704 Dec 3 1999 lavr -rw------- 1 lavr dug 5568 Aug 13 1999 mailer-daemon -rw-r--r-- 1 lavr dug 43384 May 2 2000 posted -rw------- 1 lavr dug 0 May 14 1998 saved-messages -rw------- 1 lavr dug 381 Nov 16 2000 sent-mail -rw------- 1 lavr dug 2763 Jan 22 13:14 virtaliro.com -rw------- 1 lavr dug 6027 Jul 9 1999 vmitsyn ultra:/home/lavr> ultra:/home/lavr> cp -R Mail AltMail ultra:/home/lavr> ls -la AltMail total 150 drwx------ 2 lavr dug 512 Jun 16 15:45 . drwxr-xr-x 40 lavr dug 3584 Jun 16 15:45 .. -rw------- 1 lavr dug 1407 Jun 16 15:45 anarbay -rw------- 1 lavr dug 1409 Jun 16 15:45 andrew -rw------- 1 lavr dug 3974 Jun 16 15:45 iris -rw------- 1 lavr dug 2704 Jun 16 15:45 lavr -rw------- 1 lavr dug 5568 Jun 16 15:45 mailer-daemon -rw-r--r-- 1 lavr dug 43384 Jun 16 15:45 posted -rw------- 1 lavr dug 0 Jun 16 15:45 saved-messages -rw------- 1 lavr dug 381 Jun 16 15:45 sent-mail -rw------- 1 lavr dug 2763 Jun 16 15:45 virtaliro.com -rw------- 1 lavr dug 6027 Jun 16 15:45 vmitsyn ultra:/home/lavr> ultra:/home/lavr> rm -rf AltMail ultra:/home/lavr> 14. mv - перенос файлов и директорий с одного места в другое: ultra:/home/lavr> mv mv: Insufficient arguments (0) Usage: mv [-f] [-i] f1 f2 mv [-f] [-i] f1 ... fn d1 mv [-f] [-i] d1 d2 ultra:/home/lavr> ultra:/home/lavr> mv koi8.txt lavr ultra:/home/lavr> ls -la koi8.txt koi8.txt: No such file or directory ultra:/home/lavr> ls -la lavr -rw------- 1 lavr dug 1125 Oct 28 1998 lavr ultra:/home/lavr> mv lavr koi8.txt ultra:/home/lavr> ls -la koi8.txt -rw------- 1 lavr dug 1125 Oct 28 1998 koi8.txt ultra:/home/lavr> 15. cut - команда позволяющая вырезать из заданного файла куски по полям или заданному формату: `man cut` ultra:/home/lavr> cut -f 1 -d: /etc/passwd результат вывода опущен данный пример вырезает первое поле из файла /etc/passwd используя в качестве разделителя символ ":". 16 tr - перевод, замена символов по заданному шаблону: `man tr` ultra:/home/lavr> echo AGHKGAHKGHK | tr '[:upper:]' '[:lower:]' aghkgahkghk ultra:/home/lavr> используя pipe[канал] подаем входную строку на вход команды `tr` с шаблоном перевести все символы в верхнего регистра в нижний. 17. grep - команда поиска данных в файле по образцу, можно использовать регулярные выражения: ultra:/home/lavr> ls -la /tmp | grep lavr drwx------ 2 lavr dug 120 Jun 15 18:38 ssh-lavr ultra:/home/lavr> в результате вывода команды `ls -la` найти все вхождения строки "lavr" [unix1]~ >grep "~lavr" /var/log/apache/unix1-access.log | grep -v "159.93" | grep -v "194.87.162.86" | less результаты вывода опущены, в данной команде в файле /var/log/apache/unix1-access.log ищется строка "~lavr" с исключением строк: "159.93" и "194.87.162.86", для исключения используетсяя опция "-v". 18. sed - потоковый редактор: `man sed` - включая регулярные выражения - regexp, это целая жизнь: ultra:/home/lavr> echo "asdjfh livr asdfjhjk" | sed s/livr/lavr/g asdjfh lavr asdfjhjk ultra:/home/lavr> 19. dmesg - в большинстве OS Unix, данная команда позволяет посмотреть сообщения процедуры загрузки, с важными системными сообщениями, тип системы, платформы, прерывания, обнаруженные устройства, диагностика, неполадки, сбои и тд и тп: ultra:/home/lavr> dmesg | less Jun 16 16:09 cpu0: SUNW,UltraSPARC (upaid 0 impl 0x10 ver 0x22 clock 143 MHz) ^MSunOS Release 5.5.1 Version Generic_103640-32 [UNIX(R) System V Release 4.0] Copyright (c) 1983-1996, Sun Microsystems, Inc. mem = 131072K (0x8000000) avail mem = 127664128 Ethernet address = 8:0:20:83:4f:e8 root nexus = Sun Ultra 1 SBus (UltraSPARC 143MHz) sbus0 at root: UPA 0x1f 0x0 ... espdma0 at sbus0: SBus0 slot 0xe offset 0x8400000 esp0 at espdma0: SBus0 slot 0xe offset 0x8800000 Onboard device sparc9 ipl 4 sd0 at esp0: target 0 lun 0 sd0 is /sbus@1f,0/espdma@e,8400000/esp@e,8800000/sd@0,0 sd1 at esp0: target 1 lun 0 sd1 is /sbus@1f,0/espdma@e,8400000/esp@e,8800000/sd@1,0 sd2 at esp0: target 2 lun 0 sd2 is /sbus@1f,0/espdma@e,8400000/esp@e,8800000/sd@2,0 sd3 at esp0: target 3 lun 0 sd3 is /sbus@1f,0/espdma@e,8400000/esp@e,8800000/sd@3,0 sd6 at esp0: target 6 lun 0 sd6 is /sbus@1f,0/espdma@e,8400000/esp@e,8800000/sd@6,0 root on /sbus@1f,0/espdma@e,8400000/esp@e,8800000/sd@0,0:a fstype ufs zs0 at sbus0: SBus0 slot 0xf offset 0x1100000 Onboard device sparc9 ipl 12 zs0 is /sbus@1f,0/zs@f,1100000 zs1 at sbus0: SBus0 slot 0xf offset 0x1000000 Onboard device sparc9 ipl 12 zs1 is /sbus@1f,0/zs@f,1000000 keyboard is major <29> minor <2> mouse is major <29> minor <3> stdin is major <29> minor <2> cgsix0 at sbus0: SBus0 slot 0x2 offset 0x0 SBus level 5 sparc9 ipl 9 cgsix0 is /sbus@1f,0/cgsix@2,0 cgsix0: screen 1152x900, single buffered, 1M mappable, rev 11 stdout is major <39> minor <0> boot cpu (0) initialization complete - online ... [unix1]~ > dmesg | less > tcp pid 10141 (communicator-4.7), uid 310: exited on signal 10 (core dumped) fxp0: promiscuous mode enabled fxp0: promiscuous mode disabled fxp0: promiscuous mode enabled fxp0: promiscuous mode disabled arp: 159.93.17.1 moved from 00:d0:97:c0:98:00 to 00:30:94:9f:cd:80 on fxp0 arp: 159.93.17.1 moved from 00:30:94:9f:cd:80 to 00:d0:97:c0:98:00 on fxp0 arp: 159.93.17.1 moved from 00:d0:97:c0:98:00 to 00:30:94:9f:cd:80 on fxp0 arp: 159.93.17.1 moved from 00:30:94:9f:cd:80 to 00:d0:97:c0:98:00 on fxp0 arp: 159.93.17.1 moved from 00:d0:97:c0:98:00 to 00:30:94:9f:cd:80 on fxp0 arp: 159.93.17.1 moved from 00:30:94:9f:cd:80 to 00:d0:97:c0:98:00 on fxp0 nfs server lx000h:/xpt/arch/private/lavr: not responding nfs server lx000h:/xpt/arch/private/lavr: is alive again pid 50336 (ftpd), uid 14 on /pub: file system full ... [unix1]~ > dmesg | less > tcp pid 10141 (communicator-4.7), uid 310: exited on signal 10 (core dumped) fxp0: promiscuous mode enabled fxp0: promiscuous mode disabled fxp0: promiscuous mode enabled fxp0: promiscuous mode disabled arp: 159.93.17.1 moved from 00:d0:97:c0:98:00 to 00:30:94:9f:cd:80 on fxp0 arp: 159.93.17.1 moved from 00:30:94:9f:cd:80 to 00:d0:97:c0:98:00 on fxp0 arp: 159.93.17.1 moved from 00:d0:97:c0:98:00 to 00:30:94:9f:cd:80 on fxp0 arp: 159.93.17.1 moved from 00:30:94:9f:cd:80 to 00:d0:97:c0:98:00 on fxp0 arp: 159.93.17.1 moved from 00:d0:97:c0:98:00 to 00:30:94:9f:cd:80 on fxp0 arp: 159.93.17.1 moved from 00:30:94:9f:cd:80 to 00:d0:97:c0:98:00 on fxp0 nfs server lx000h:/xpt/arch/private/lavr: not responding nfs server lx000h:/xpt/arch/private/lavr: is alive again pid 50336 (ftpd), uid 14 on /pub: file system full 20. netstat - отобразить статус сети.сетевых ресурсов на машине: `man netstat` [unix1]~ > netstat -rn | less Routing tables Internet: Destination Gateway Flags Refs Use Netif Expire default 159.93.17.1 UGSc 26 7070 fxp0 127.0.0.1 127.0.0.1 UH 14 2839577 lo0 159.93.16/20 link#1 UC 0 0 fxp0 => 159.93.17.1 0:d0:97:c0:98:0 UHLW 23 0 fxp0 1197 159.93.17.2 0:30:94:9f:cd:80 UHLW 0 0 fxp0 713 159.93.17.7 8:0:20:a6:bc:dd UHLW 0 630 fxp0 1160 159.93.17.8 8:0:20:22:c9:e5 UHLW 0 11090 fxp0 1165 159.93.17.13 0:80:29:20:8:27 UHLW 0 35868 fxp0 1183 159.93.17.32 0:0:f8:3:e9:7e UHLW 0 8877 fxp0 1177 159.93.17.51 0:80:ad:85:f5:4d UHLW 1 1240802 fxp0 1024 159.93.17.75 8:0:20:83:4f:e8 UHLW 1 1788 fxp0 1082 159.93.17.93 0:d0:b7:d5:d5:a6 UHLW 0 2414 fxp0 1117 159.93.17.106 0:80:ad:50:d1:92 UHLW 1 1442633 fxp0 1165 159.93.17.110 0:50:da:35:96:16 UHLW 0 2011262 fxp0 1017 159.93.17.112 0:60:52:5:a0:3c UHLW 0 3527994 fxp0 1145 159.93.17.121 0:50:8b:5b:ae:6 UHLW 1 1593 lo0 159.93.17.129/32 link#1 UC 0 0 fxp0 => 159.93.17.130 8:0:20:13:4:ff UHLW 0 201 fxp0 11 ... с ключами "-rn" мы можем посмотреть таблицу маршрутизации на нашей машине. [unix1]~ > netstat | less Active Internet connections Proto Recv-Q Send-Q Local Address Foreign Address (state) tcp4 0 17520 xnc.http delta.radio.tsu..64577 ESTABLISHED tcp4 0 0 unix1.1794 h100.n166.cust.d.1228 ESTABLISHED tcp4 0 0 unix1.1793 h100.n166.cust.d.ftp ESTABLISHED tcp4 0 17520 xnc.http delta.radio.tsu..64552 ESTABLISHED tcp4 0 16060 xnc.http delta.radio.tsu..64551 ESTABLISHED tcp4 0 0 unix1.1786 spleen.demos.su.49177 ESTABLISHED tcp4 0 0 unix1.1784 spleen.demos.su.ftp ESTABLISHED tcp4 0 0 unix1.4034 ultra.ssh ESTABLISHED tcp4 0 0 localhost.6016 localhost.4032 ESTABLISHED tcp4 0 0 localhost.4032 localhost.6016 ESTABLISHED tcp4 0 0 unix1.down alone.dubna.ru.2232 ESTABLISHED tcp4 0 0 localhost.6015 localhost.4014 ESTABLISHED tcp4 0 0 localhost.4014 localhost.6015 ESTABLISHED tcp4 0 0 unix1.down alone.dubna.ru.2231 ESTABLISHED tcp4 0 0 localhost.6010 localhost.3977 ESTABLISHED tcp4 0 0 localhost.3977 localhost.6010 ESTABLISHED tcp4 0 0 unix1.down alone.dubna.ru.2117 ESTABLISHED tcp4 0 0 unix1.netbios-ssn dct058.4054 ESTABLISHED tcp4 0 0 localhost.6011 localhost.3606 ESTABLISHED tcp4 0 0 localhost.3606 localhost.6011 ESTABLISHED tcp4 0 0 unix1.down alone.dubna.ru.4950 ESTABLISHED ... в данном случае посмотреть активные сетевые соединения. [unix1]~ > netstat -I fxp0 -w 2 input (fxp0) output packets errs bytes packets errs bytes colls 143 0 219287 66 0 6590 0 155 0 175309 77 0 5886 0 128 0 167191 61 0 5754 0 128 0 180442 61 0 4492 0 129 0 129614 63 0 3466 0 смотрим входящие и исходящие пакеты на сетевом интерфейсе fxp0 каждые 2 секунды и наличие коллизий. 21. ifconfig - посмотреть, изменить, сконфигурировать сетевые интерфейсы: `man ifconfig` ultra:/home/lavr> ifconfig -a lo0: flags=849 mtu 8232 inet 127.0.0.1 netmask ff000000 le0: flags=863 mtu 1500 inet 159.93.17.75 netmask fffff000 broadcast 159.93.31.255 ultra:/home/lavr> [unix1]~ > ifconfig fxp0: flags=8843 mtu 1500 inet 159.93.17.121 netmask 0xfffff000 broadcast 159.93.31.255 inet6 fe80::250:8bff:fe5b:ae06%fxp0 prefixlen 64 scopeid 0x1 inet 159.93.25.88 netmask 0xffffffff broadcast 159.93.25.88 inet 159.93.17.129 netmask 0xffffffff broadcast 159.93.17.129 inet 193.124.144.1 netmask 0xffffff00 broadcast 193.124.144.255 ether 00:50:8b:5b:ae:06 media: 100baseTX status: active supported media: autoselect 100baseTX 100baseTX 10baseT/UTP 10baseT/UTP lp0: flags=8810 mtu 1500 faith0: flags=8000 mtu 1500 gif0: flags=8010 mtu 1280 gif1: flags=8010 mtu 1280 gif2: flags=8010 mtu 1280 gif3: flags=8010 mtu 1280 lo0: flags=8049 mtu 16384 inet6 fe80::1%lo0 prefixlen 64 scopeid 0x8 inet6 ::1 prefixlen 128 inet 127.0.0.1 netmask 0xff000000 ppp0: flags=8010 mtu 1500 ppp1: flags=8010 mtu 1500 ppp2: flags=8010 mtu 1500 ppp3: flags=8010 mtu 1500 [unix1]~ > 22. du - посмотреть дисковую статистику на предмет сколько блоков занимает тот или иной файл, директория, файловая система: `man du` [unix1]~ > du koi8.txt 1 koi8.txt [unix1]~ > [unix1]~ > du koi8.txt 1 koi8.txt [unix1]~ > du -s /tmp du: /tmp/ssh-2vvlLjiH: Permission denied du: /tmp/ssh-rib6JdrI: Permission denied du: /tmp/ssh-SPFlXG4J: Permission denied du: /tmp/ssh-HKVnOass: Permission denied du: /tmp/ssh-4q1VOPlz: Permission denied du: /tmp/ssh-1rTOGbiD: Permission denied du: /tmp/screens/S-kev: Permission denied du: /tmp/kfm-cache-0: Permission denied 12906 /tmp [unix1]~ > 23. df - показать свободное дисковое пространство: `man df` [unix1]~ > df Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/ad4s2a 79359 45477 27534 62% / /dev/ad4s2g 99183 12951 78298 14% /tmp /dev/ad4s1e 988591 642023 267481 71% /pub /dev/ad4s2f 2977230 2433724 305328 89% /usr /dev/ad4s2e 793983 240049 490416 33% /var /dev/ad4s2h 14086242 11159515 1799828 86% /pub/ftp/1 /dev/ad5s1e 793983 459880 270585 63% /home /dev/ad5s1f 18230608 15289542 1482618 91% /pub/ftp/2 /dev/ad0s1e 19396603 14413862 3431013 81% /pub/ftp/3 /dev/ad6s1c 9598123 8076441 753833 91% /pub/ftp/4 /dev/ad7s1e 19399910 13561354 4286564 76% /pub/ftp/incoming/moviez procfs 4 4 0 100% /proc lx000h:/xpt/arch/private/lavr 16513960 12538704 3136396 80% /pub/ftp/incoming/raid [unix1]~ > 24. Как самостоятельно изменить свой пароль: `man passwd` [unix1]~ > passwd Changing local password for lavr. Old password: <вводим своий текущий пароль> (если правильно набран, идем далее) New password: <вводим новый пароль> Retype new password: <повторно вводим новый пароль> (для проверки на совпадение) [unix1]~ > Теперь у нас новый пароль. 25. Как самостоятельно изменить себе SHELL: `man chsh` 1) посмотрите какие shell-интерпретаторы доступны на вашей системе: [unix1]~ > less /etc/shells # List of acceptable shells for chpass(1). # Ftpd will not allow users to connect who are not using # one of these shells. /bin/sh /bin/csh /bin/tcsh /bin/bash /usr/local/bin/bash /sbin/nologin /usr/bin/false /nonexistent 2) из этого списка: sh/csh/tcsh/bash с помощью команды chsh, установите наиболее удобный для вас. Стартовые файлы настройки среды и переменных интерпретатора: sh - .profile, иногда .shrc csh - .login, .cshrc tcsh - .login, .tcshrc bash - .bash_rc, .bash_profile В соответствии с выбранным вами SHELL, вы можете редактировать указанные выше файлы в вашей домашней директории, создавая, настройки под себя и для себя. -- Andrey Lavrentyev/lavr | JINR, Dubna, Russia | lavr@cv.jinr.ru