Что такое shell команды. Основы программирования в командной оболочке shell
Командный язык shell (в переводе - раковина, скорлупа) фактически есть язык программирования очень высокого уровня. На этом языке пользователь осуществляет управление компьютером. Обычно, после входа в систему вы начинаете взаимодействовать с командной оболочкой. Признаком того, что оболочка (shell) готова к приему команд служит выдаваемый ею на экран промптер. В простейшем случае это один доллар ("$"). Shell не является необходимым и единственным командным языком (хотя именно он стандартизован в рамках POSIX - стандарта мобильных систем). Например, немалой популярностью пользуется язык cshell, есть также kshell, bashell и другие. Более того, каждый пользователь может создать свой командный язык. Может одновременно на одном экземпляре операционной системы работать с разными командными языками. shell - это одна из многих команд UNIX. То есть в набор команд оболочки "shell" входит команда "sh" - вызов интерпретатора "shell". Первый "shell" вызывается автоматически при вашем входе в систему и выдает на экран промтер. После этого вы можете вызывать на выполнение любые команды, в том числе и снова сам "shell", который вам создаст новую оболочку внутри прежней. Так например, если вы подготовите в редакторе файл "file_1":
Echo Hello!
то это будет обычный текстовый файл, содержащий команду "echo", которая при выполнении выдает все написанное правее ее на экран. Можно сделать файл "file_1" выполняемым с помощью команды "chmod 755 file_1". Но его можно выполнить, вызвав явно команду "sh" ("shell"):
Sh file_1
Sh < file1
Файл можно выполнить и в текущем экземпляре "shell". Для этого существует специфическая команда "." (точка), т.е.
File_1
Поскольку UNIX - система многопользовательская, вы можете даже на персональном компьютере работать параллельно, скажем, на 12-ти экранах (переход с экрана на экран ALT/функциональная клавиша), имея на каждом экране нового (или одного и того же) пользователя со своей командной оболочкой. Можете и в графическом режиме X-Window также открыть большое число окон, а в каждом окне может быть свой пользователь со своей командной оболочкой... Стержневым элементом языка shell является команда.
Структуры команд:
Команды в shell обычно имеют следующий формат:
<имя команды> <флаги> <аргумент(ы)>
Например:
Ls -ls /usr/bin
Где ls - имя команды выдачи содержимого директория, -ls - флаги ("-" - признак флагов, l - длинный формат, s - об"ем файлов в блоках), /usr/bin - директорий, для которого выполняется команда. Эта команда выдаст на экран в длинном формате содержимое директория /usr/bin, при этом добавит информацию о размере каждого файла в блоках. К сожалению, такая структура команды выдерживается далеко не всегда. Не всегда перед флагами ставится минус, не всегда флаги идут одним словом. Есть разнообразие и в представлении аргументов. К числу команд, имеющих экзотические форматы, относятся и такие "ходовые" команды, как сс - вызов компилятора языка С, tar - работа с архивами, dd - копирование файла с преобразованием, find - поиск файлов и ряд других. Как правило, первое слово shell воспринимает, как команду. Поэтому в командной строке
первое слово будет расшифровано shell, как команда (конкатенации), которая выдаст на экран файл с именем "cat" (второе слово), находящийся в текущем директории. Перенаправление команд Стандартный ввод (вход) - "stdin" в ОС UNIX осуществляется с клавиатуры терминала, а стандартный вывод (выход) - "stdout" направлен на экран терминала. Существует еще и стандартный файл диагностических сообщений - "stderr", о котором речь будет чуть позже. Команда, которая может работать со стандартным входом и выходом, называется ФИЛЬТРОМ. Пользователь имеет удобные средства перенаправления ввода и вывода на другие файлы (устройства). Символы ">" и ">>" обозначают перенаправление вывода. ls >file_1 команда "ls" сформирует список файлов текущего каталога и поместит его в файл "file_1" (вместо выдачи на экран). Если файл "file_1" до этого существовал, то он будет затерт новым.
Pwd >>file_1
команда pwd сформирует полное имя текущего каталога и поместит его в конец файла "file_1", т.е. ">>" добавляет в файл, если он непустой. Символы "<" и "<<" обозначают перенаправление ввода.
Wc -l подсчитает и выдаст на экран число строк в файле file_1. Ed file_2 < создаст с использованием редактора файл "file_2", непосредственно с терминала. Окончание ввода определяется по символу, стоящему правее "<<" (т. е. "!"). То есть ввод будет закончен, когда первым в очередной строке будет "!".
Можно сочетать перенаправления. Так Wc -l Wc -l >file_4 выполняются одинаково: подсчитывается число строк файла "file_3" и результат помещается в файл "file_4".
Средство, объединяющее стандартный выход одной команды со стандартным входом другой, называется КОНВЕЙЕРОМ и обозначается вертикальной чертой "|". Ls | wc -l
список файлов текущего каталога будет направлен на вход команды "wc", которая на экран выведет число строк каталога.
Конвейером можно объединять и более двух команд, когда все они, возможно кроме первой и последней - фильтры: Cat file_1 | grep -h result | sort | cat -b > file_2
Данный конвейер из файла "file_1" ("cat") выберет все строки, содержащие слово "result" ("grep"), отсортирует ("sort") полученные строки, а затем пронумерует ("cat -b") и выведет результат в файл "file_2".
Поскольку устройства в ОС UNIX представлены специальными файлами, их можно использовать при перенаправлениях. Специальные файлы находятся в каталоге "/dev". Например, "lp" - печать; "console" - консоль; "ttyi" - i-ый терминал; "null" - фиктивный (пустой) файл (устройство).
Тогда, например, Ls > /dev/lp
выведет содержимое текущего каталога на печать, а
file_1 < /dev/null
обнулит файл "file_1". Sort file_1 | tee /dev/lp | tail -20
В этом случае будет отсортирован файл "file_1" и передан на печать, а 20 последних строк также будут выданы на экран.
Вернемся к перенаправлению выхода. Стандартные файлы имеют номера: 0 - stdin,
1 - stdout
2 - stderr.
Если вам не желательно иметь на экране сообщение об ошибке, вы можете перенаправить его с экрана в указанный вами файл (или вообще "выбросить", перенаправив в файл "пустого устройства" - /dev/null). Например при выполнении команды Cat file_1 file_2
которая должна выдать на экран последовательно содержимое файлов "file_1" и "file_2", выдаст вам, например, следующее 111111 222222
cat: f2: No such file or directory
где 111111 222222 - содержимое файла "file_1", а файл "file_2" отсутствует, о чем команда "cat" выдала сообщение в стандартный файл диагностики, по умолчанию, как и стандартный выход, представленный экраном.
Если вам не желательно такое сообщение на экране, его можно перенаправить в указанный вами файл: Cat file_1 file_2 2>f-err
сообщения об ошибках будут направляться (об этом говорит перенаправление "2>") в файл "f-err". Кстати, вы можете всю информацию направлять в один файл "ff", использовав в данном случае конструкцию Cat file_1 file_2 >>ff 2>ff
Можно указать не только какой из стандартных файлов перенаправлять, но и в какой стандартный файл осуществить перенаправление. Cat file_1 file_2 2>>ff 1>&2
Здесь сначала "stderr" перенаправляется (в режиме добавления) в файл "ff", а затем стандартный выход перенаправляется на "stderr", которым к этому моменту является файл "ff". То есть результат будет аналогичен предыдущему.
Конструкция "1>&2" - означает, что кроме номера стандартного файла, в который перенаправить, необходимо впереди ставить "&"; вся конструкция пишется без пробелов.
<-
закрывает стандартный ввод.
>- закрывает стандартный вывод.
Командные файлы.
Для того, чтобы текстовый файл можно было использовать как команду, существует несколько возможностей.
Пусть с помощью редактора создан файл с именем "cmd", содержащий одну строку следующего вида: Date; pwd; ls
Можно вызвать shell как команду, обозначаемую "sh", и передать ей файл "cmd", как аргумент или как перенаправленный вход, т.е.
$ sh cmd
$ sh В результате выполнения любой из этих команд будет выдана дата, затем имя текущего каталога, а потом содержимое каталога.
Более интересный и удобный вариант работы с командным файлом - это превратить его в выполняемый, т.е. просто сделать его командой, что достигается изменением кода защиты. Для этого надо разрешить выполнение этого файла.
Например, Chmod 711 cmd
сделает код защиты "rwx__x__x". Тогда простой вызов приведет к выполнению тех же трех команд.
Результат будет тот же, если файл с содержимым Date; pwd; ls
представлен в виде:
date
pwd
ls
так как переход на другую строку также является разделителем в последовательности команд.
Таким образом, выполняемыми файлами могут быть не только файлы, полученные в результате компиляции и сборки, но и файлы, написанные на языке shell. Их выполнение происходит в режиме интерпретации с помощью shell-интерпретатора Отладка командных файлов
В SHELL используются два механизма отладки командных файлов.
Первый из них: set -v выводит строки командного файла по мере их чтения. Этот режим применяется при поиске синтаксических ошибок. Для его использования не требуется производить модификацию командного файла, например:
sh -v proc... здесь proc - имя командного файла. Ключ -v может использоваться вместе с ключом -n, предотвращающим выполнение следующих за ним команд (команда set -n блокирует терминал до тех пор, пока не вводится признак конца файла EOF). Команда set -х выводит команды по мере их выполнения, причём на терминал выводятся строки программы и на место переменных подставляются их значения. Для отмены ключей -x и -v можно воспользоваться командой set - а для установки - присвоить соответствующее значение макропеременной.
СРЕДА SHELL (ПЕРЕМЕННЫЕ И ПАРАМЕТРЫ)
На языке shell можно писать командные файлы и с помощью команды "chmod" делать их выполняемыми. После этого они ни чем не отличаются от прочих команд ОС UNIX. Shell-переменные
Имя shell-переменной - это начинающаяся с буквы последовательность букв, цифр и подчеркиваний.
Значение shell-переменной - строка символов.
То, что в shell всего два типа данных: строка символов и текстовый файл, с одной стороны, позволяет легко вовлекать в программирование конечных пользователей, никогда ранее программированием не занимавшихся, а с другой стороны, вызывает некий внутренний протест у многих программистов, привыкших к существенно большему разнообразию и большей гибкости языковых средств.
Однако интересно наблюдать то, как высококлассные программисты, освоившись с "правилами игры" shell, пишут на нем программы во много раз быстрее, чем на Си, но, что особенно интересно, в ряде случаев эти программы работают даже быстрее, чем реализованные на Си.
Имя переменной аналогично традиционному представлению об идентификаторе, т.е. именем может быть последовательность букв, цифр и подчеркиваний, начинающаяся с буквы или подчеркивания.
Для присваивания значений переменным может использоваться оператор присваивания "=". Var_1=13 - "13" - это не число, а строка из двух цифр.
var_2="ОС UNIX" - здесь двойные кавычки (" ") необходимы, так как в строке есть пробел.
Возможны и иные способы присваивания значений shell-переменным. Так например запись, DAT=`date`
приводит к тому, что сначала выполняется команда "date" (обратные кавычки говорят о том, что сначала должна быть выполнена заключенная в них команда), а результат ее выполнения, вместо выдачи на стандартный выход, приписывается в качестве значения переменной, в данном случае "DAT".
Можно присвоить значение переменной и с помощью команды "read", которая обеспечивает прием значения переменной с (клавиатуры) дисплея в диалоговом режиме. Обычно команде "read" в командном файле предшествует команда "echo", которая позволяет предварительно выдать какое-то сообщение на экран. Например: Echo -n "Введите трехзначное число:"
read x
При выполнении этого фрагмента командного файла, после вывода на экран сообщения Введите трехзначное число:
интерпретатор остановится и будет ждать ввода значения с клавиатуры. Если вы ввели, скажем, "753" то это и станет значением переменной "x".
Одна команда "read" может прочитать (присвоить) значения сразу для нескольких переменных. Если переменных в "read" больше, чем их введено (через пробелы), оставшимся присваивается пустая строка. Если передаваемых значений больше, чем переменных в команде "read", то лишние игнорируются.
При обращении к shell-переменной необходимо перед именем ставить символ "$". Так команды
echo $var_2
echo var_2
выдадут на экран ОС UNIX
var_2
Экранирование
Рассмотрим более подробно приемы экранирования, используемые в shell. В качестве средств экранирования используются двойные кавычки (" "), одинарные кавычки (" ") и бэк-слэш (\).
Из примеров очевидно их действие:
Можно в одной строке записывать несколько приcваиваний. X=22 y=33 z=$x
A="$x" B="$x" C=\$x
D="$x + $y + $z" E="$x + $y + $z" F=$x\ +\ $y\ +\ $z
(присваивание G=$x+$y не было бы выполнено из-за пробелов)
Тогда Echo A = $A B = $B C = $C
echo D = $D E = $E F = $F
eval echo evaluated A = $A
eval echo evaluated B = $B
eval echo evaluated C = $C
Выдадут на экран A = 22 B = $x C = $x
D = 22 + 33 + 22 E = $x + $y + $z F = 22 + 33 + 22
evaluated A = 22
evaluated B = 22
evaluated C = 22
Приведем еще примеры, связанные с экранированием перевода строки. Пусть переменной "string" присвоено значение "массива" 2x3:
abc
def
Обратим внимание, что для избежания присваивания лишних пробелов вторая строка массива начата с первой позиции следующей строки:
string="abc
def"
Тогда три варианта записи переменной в команде "echo"
echo $string
echo "$string"
echo "$string"
дадут соответственно три различных результата:
abc def
$string
abc
def
а последовательность команд
echo "str_1
str_2" > file_1
echo "str_1
str_2" > file_2
cat file_1 file_2
даст выдаст последовательно одинаковые файлы file_1 и file_2:
str_1
str_2
str_1
str_2
Заметим также, что бэк-слэш (\) не только экранирует следующий за ним символ, что позволяет использовать специальные символы просто как символы, представляющие сами себя (он может экранировать и сам себя - \\), но в командном файле бэк-слэш позволяет об"единять строки в одну (экранировать конец строки).
Например, приводившийся ранее пример командной строки: Cat file_1 | grep -h result | sort | cat -b > file_2
может быть записан в командном файле, скажем, как Cat file_1 | grep -h \
result | sort | cat -b > file_2
Кстати, эффект продолжения командной строки обеспечивает и символ конвейера. В данном случае это может дать более симпатичный результат, например: Cat file_1 |
grep -h result |
sort |
cat -b > file_2
Манипуляции с shell-переменными
Несмотря на то, что shell-переменные в общем случае воспринимаются как строки, т. е. "35" - это не число, а строка из двух символов "3" и "5", в раде случаев они могут интерпретироваться иначе, например, как целые числа.
Разнообразные возможности имеет команда "expr".
Проиллюстрируем некоторые на примерах:
Выполнение командного файла: X=7 y=2
a=`expr $x + $y` ; echo a=$a
a=`expr $a + 1` ; echo a=$a
b=`expr $y - $x` ; echo b=$b
c=`expr $x "*" $y` ; echo c=$c
d=`expr $x / $y` ; echo d=$d
e=`expr $x % $y` ; echo e=$e
выдаст на экран A=9
a=10
b=-5
c=14
d=3
e=1
Операция умножения ("*") обязательно должна быть заэкранирована, поскольку в shell этот значок воспринимается, как спецсимвол, означающий, что на это место может быть подставлена любая последовательность символов.
С командой "expr" возможны не только (целочисленные) арифметические операции, но и строковые: A=`expr "cocktail" : "cock"` ; echo $A
B=`expr "cocktail" : "tail"` ; echo $B
C=`expr "cocktail" : "cook"` ; echo $C
D=`expr "cock" : "cocktail"` ; echo $D
На экран будут выведены числа, показывающее число совпадающих символов в цепочках (от начала). Вторая из строк не может быть длиннее первой: 4
0
0
0
Экспорт переменных
В ОС UNIX существует понятие процесса. Процесс возникает тогда, когда запускается на выполнение какая-либо команда.
Например, при наборе на клавиатуре "р Параметры
В командный файл могут быть переданы параметры. В shell используются позиционные параметры (т.е. существенна очередность их следования). В командном файле соответствующие параметрам переменные (аналогично shell-переменным) начинаются с символа "$", а далее следует одна из цифр от 0 до 9:
Пусть "examp-1" вызывается с параметрами "cock" и "tail". Эти параметры попадают в новую среду под стандартными именами "1" и "2". В (стандартной) переменной с именем "0" будет храниться имя вызванного расчета.
При обращении к параметрам перед цифрой ставится символ доллара "$" (как и при обращении к переменным):
$0
соответствует имени данного командного файла;
$1 первый по порядку параметр;
$2 второй параметр и т.д.
Поскольку число переменных, в которые могут передаваться параметры, ограничено одной цифрой, т.е. 9-ю ("0", как уже отмечалось имеет особый смысл), то для передачи большего числа параметров используется специальная команда "shift".
Своеобразный подход к параметрам дает команда "set".
Например, фрагмент Set a b с
echo первый=$1 второй=$2 третий=$3
выдаст на экран Первый=a второй=b третий=c
т.е. команда "set" устанавливает значения параметров. Это бывает очень удобно. Например, команда "date" выдает на экран текущую дату, скажем, "Mon May 01 12:15:10 2000", состоящую из пяти слов, тогда Set `date`
echo $1 $3 $5
выдаст на экран Mon 01 2000
Команда "set" позволяет также осуществлять контроль выполнения программы, например:
set -v
на терминал выводятся строки, читаемые shell.
set +v отменяет предыдущий режим.
set -x на терминал выводятся команды перед выполнением.
set +x отменяет предыдущий режим.
Команда "set" без параметров выводит на терминал состояние программной среды. Подстановки shell-интерпретатора
Перед началом непосредственной интерпретации и выполнением команд, содержащихся в командных файлах, shell выполняет различные виды подстановок:
1. ПОДСТАНОВКА РЕЗУЛЬТАТОВ. Выполняются все команды, заключенные в обратные кавычки, и на их место подставляется результат.
2. ПОДСТАНОВКА ЗНАЧЕНИЙ ПАРАМЕТРОВ И ПЕРЕМЕННЫХ. То есть слова, начинающиеся на "$", заменяются соответствующими значениями переменных и параметров.
3. ИНТЕРПРЕТАЦИЯ ПРОБЕЛОВ. Заэкранированные пробелы игнорируются.
4. ГЕНЕРАЦИЯ ИМЕН ФАЙЛОВ. Проверяются слова на наличие в них спецсимволов ("*", "?","") и выполняются соответствующие генерации.
Программная среда
Каждый процесс имеет среду, в которой он выполняется. Shell использует ряд переменных этой среды.
Если вы наберете команду "set" без параметров, то на экран будет выдана информация о ряде стандартных переменных, созданных при входе в систему (и передаваемых далее всем вашим новым процессам "по наследству"), а также переменных, созданных и экспортируемых вашими процессами.
Конкретный вид и содержание выдаваемой информации в немалой степени зависит от того, какая версия UNIX используется и как инсталлирована система. Результат выполнения команды set без параметров (не полный): HOME=/root
PATH=/usr/local/bin:/usr/bin:/bin:.:/usr/bin/X11:
IFS=
LOGNAME=sae
MAIL=/var/spool/mail/sae
PWD=/home/sae/STUDY/SHELL
PS1=${PWD}:" "
PS2=>
SHELL=/bin/bash
Прокомментируем значения переменных.
HOME=/root - это имя домашнего директория, в котором пользователь оказывается после входа в систему. То есть, правильно набрав имя и пароль, я окажусь в директории "/root".
PATH=/bin:/usr/bin:.:/usr/local/bin:/usr/bin/X11 - эта переменная задает последовательность файлов, которые просматривает "shell" в поисках команды. Имена файлов разделяются здесь двоеточиями. Последовательность просмотра соответствует очередности следования имен в тропе. Но первоначально поиск происходит среди так называемых встроенных команд. В число встроенных команд входят наиболее часто используемые команды, например "echo", "cd", "pwd", "date". После этого система просматривает директорий "/bin", в котором могут находиться команды "sh", "cp", "mv", "ls" и т.п. Затем директорий "/usr/bin" с командами "cat", "сс", "expr", "nroff", "man" и многими другими. Далее поиск происходит в текущем директории (".", или другое обозначение "пусто", т.е.""), где скорее всего находятся написанные вами команды.
После набора командной строки и нажатия @ перечень параметров, как совокупность слов;
- флаги, передаваемые в shell.
При обращении к этим переменным (т.е при использовании их в командном файле - shell-программе) следует впереди ставить "$".
Важную роль при создании уникальных файлов играет специальная переменная "$$", значение которой соответствует номеру процесса, выполняющего данный расчет. Каждый новый расчет, выполняемый компьютером, инициирует один или несколько процессов, автоматически получающих номера по порядку. Поэтому, используя номер процесса в качестве имени файла, можно быть уверенным, что каждый новый файл будет иметь новое имя (не запишется на место уже существующего). Достоинство является и главным недостатком такого способа именования файлов. Неизвестно, какие имена будут присвоены файлам. И, если в рамках данного процесса можно найти файл "не глядя", т.е., обратившись к нему, используя $$, то потом такие файлы можно легко потерять. Это создает дополнительные проблемы при отладке программ.
Вызов интерпритатора
Вслед за регистрацией пользователя в системе (с помощью команды login) вызывается интерпретатор языка SHELL. Если регистрационный справочник пользователя содержит файл.profile, то прежде чем с терминала будет принята хотя бы одна команда, интерпретатор выполняет этот файл (подразумевается, что файл.profile содержит команды). При вызове могут указываться следующие ключи:
-c строка
Команды считываются из заданной строки.
-s
Команды читаются из стандартного файла ввода. Сообщения интерпретатора записываются в стандартный файл диагностик.
-i
Интерактивный режим работы.
Если первым символом параметра "0" является знак -, то команды считываются из файла.profile. ПРОГРАММНЫЕ СТРУКТУРЫ===
Как во всяком языке программирования в тексте на языке shell могут быть комментарии. Для этого используется символ "#". Все, что находится в строке (в командном файле) левее этого символа, воспринимается интерпретатором как комментарий. Например,
# Это комментарий.
Как во всяком процедурном языке программирования в языке shell есть операторы. Ряд операторов позволяет управлять последовательностью выполнения команд. В таких операторах часто необходима проверка условия, которая и определяет направление продолжения вычислений. Команда test ("")
Команда test проверяет выполнение некоторого условия. С использованием этой (встроенной) команды формируются операторы выбора и цикла языка shell.
Два возможных формата команды: Test условие
[ условие ]
мы будем пользоваться вторым вариантом, т.е. вместо того, чтобы писать перед условием слово "test", будем заключать условие в скобки, что более привычно для программистов.
На самом деле shell будет распознавать эту команду по открывающей скобке "[", как слову, соответствующему команде "test". Между скобками и содержащимся в них условием обязательно должны быть пробелы.
Пробелы должны быть и между значениями и символом сравнения или операции
В shell используются условия различных "типов".
УСЛОВИЯ ПРОВЕРКИ ФАЙЛОВ:
-f file
файл "file" является обычным файлом;
-d file файл "file" - каталог;
-с file файл "file" - специальный файл;
-r file имеется разрешение на чтение файла "file";
-w file имеется разрешение на запись в файл "file";
-s file файл "file" не пустой. УСЛОВИЯ ПРОВЕРКИ СТРОК:
str1 = str2
строки "str1" и "str2" совпадают;
str1 != str2 строки "str1" и "str2" не совпадают;
-n str1 строка "str1" существует (непустая);
-z str1 строка "str1" не существует (пустая).
Примеры. X="who is who"; export x; [ "who is who" = "$x" ]; echo $?
0
x=abc ; export x ; [ abc = "$x" ] ; echo $?
0
x=abc ; export x ; [ -n "$x" ] ; echo $?
0
x="" ; export x ; [ -n "$x" ] ; echo $?
1
Кроме того, существуют два стандартных значения условия, которые могут использоваться вместо условия (для этого не нужны скобки).
УСЛОВИЯ СРАВНЕНИЯ ЦЕЛЫХ ЧИСЕЛ:
x -eq y
"x" равно "y",
x -ne y "x" неравно "y",
x -gt y "x" больше "y",
x -ge y "x" больше или равно "y",
x -lt y "x" меньше "y",
x -le y "x" меньше или равно "y".
СЛОЖНЫЕ УСЛОВИЯ:
Реализуются с помощью типовых логических операций:
!
(not) инвертирует значение кода завершения.
-o (or) соответствует логическому "ИЛИ".
-a (and) соответствует логическому "И". Условный оператор "if"
В общем случае оператор "if" имеет структуру If условие
then список
Здесь "elif" сокращенный вариант от "else if" может быть использован наряду с полным, т.е. допускается вложение произвольного числа операторов "if" (как и других операторов). Разумеется "список" в каждом случае должен быть осмысленный и допустимый в данном контексте.
Самая усеченная структура этого оператора If условие
then список
fi
если выполнено условие (как правило это ком получен код завершения "0", то выполняется "список", иначе он пропускается.
Примеры.
Пусть написан "if-1" If [ $1 -gt $2 ]
then pwd
else echo $0: Hello! Тогда вызов if-1 12 11 даст /home/sae/STUDY/SHELL
а if-1 12 13 даст if-1: Hello! Оператор вызова ("case")
Оператор выбора "case" имеет структуру: Case строка in
шаблон) список команд;;
шаблон) список команд;;
...
шаблон) список команд;; Здесь "case" "in" и "esac" - служебные слова. "Строка" (это может быть и один символ) сравнивается с "шаблоном". Затем выполняется "список команд" выбранной строки.
Непривычно выглядят в конце строк выбора ";;", но написать здесь ";" было бы ошибкой. Для каждой альтернативы может быть выполнено несколько команд. Если эти команды будут записаны в одну строку, то символ ";" будет использоваться как разделитель команд.
Обычно последняя строка выбора имеет шаблон "*", что в структуре "case" означает "любое значение". Эта строка выбирается, если не произошло совпадение значения переменной (здесь $z) ни с одним из ранее записанных шаблонов, ограниченных скобкой ")". Значения просматриваются в порядке записи. Оператор цикла с перечислением ("for")
Оператор цикла "for" имеет структуру: For имя
do
список команд
done
где "for" - служебное слово определяющее тип цикла,
"do" и "done" - служебные слова, выделяющие тело цикла.
Пусть команда "lsort" представлена командным файлом For i in file_1 file_2 file_3
do
proc_sort $i
done
В этом примере имя "i" играет роль параметра цикла. Это имя можно рассматривать как shell-переменную, которой последовательно присваиваются перечисленные значения (i=file_1, i=file_2, i=file_3), и выполняется в цикле команда "proc_sort".
Часто используется форма "for i in *", означающая "для всех файлов текущего каталога".
Пусть "proc_sort" в свою очередь представляется командным файлом Cat $1 | sort | tee /dev/lp > ${1}_sorted
т.е. последовательно сортируются указанные файлы, результаты сортировки выводятся на печать ("/dev/lp") и направляются в файлы file_1_sorted file_2_sorted и file_3_sorted Оператор цикла с истинным условием ("while")
Структура "while", также обеспечивающая выполнение расчетов, предпочтительнее тогда, когда неизвестен заранее точный список значений параметров или этот список должен быть получен в результате вычислений в цикле.
Оператор цикла "while" имеет структуру: While условие
do
список команд
done
где "while" - служебное слово определяющее тип цикла с истинным условием. Список команд в теле цикла (между "do" и "done") повторяется до тех пор, пока сохраняется истинность условия (т.е. код завершения последней команды в теле цикла равен "0") или цикл не будет прерван изнутри специальными командами ("break", "continue" или "exit"). При первом входе в цикл условие должно выполняться.
Команда "break [n]" позволяет выходить из цикла. Если "n" отсутствует, то это эквивалентно "break 1". "n" указывает число вложенных циклов, из которых надо выйти, например, "break 3" - выход из трех вложенных циклов.
В отличие от команды "break" команда "continue [n]" лишь прекращает выполнение текущего цикла и возвращает на НАЧАЛО цикла. Она также может быть с параметром. Например, "continue 2" означает выход на начало второго (если считать из глубины) вложенного цикла.
Команда "exit [n]" позволяет выйти вообще из процедуры с кодом возврата "0" или "n" (если параметр "n" указан). Эта команда может использоваться не только в циклах. Даже в линейной последовательности команд она может быть полезна при отладке, чтобы прекратит выполнение (текущего) расчета в заданной точке. Оператор цикла с ложным условием ("until")
Оператор цикла "until" имеет структуру: Until условие
do
список команд
done
где "until" - служебное слово определяющее тип цикла с ложным условием. Список команд в теле цикла (между "do" и "done") повторяется до тех пор, пока сохраняется ложность условия или цикл не будет прерван изнутри специальными командами ("break", "continue" или "exit"). При первом входе в цикл условие не должно выполняться.
Отличие от оператора "while" состоит в том, что условие цикла проверяется на ложность (на ненулевой код завершения последней команды тела цикла) проверяется ПОСЛЕ каждого (в том числе и первого!) выполнения команд тела цикла.
Пример. Until false
do
read x
if [ $x = 5 ]
then echo enough ; break
else echo some more
fi Здесь программа с бесконечным циклом ждет ввода слов (повторяя на экране фразу "some more"), пока не будет введено "5". После этого выдается "enough" и команда "break" прекращает выполнение цикла. Пустой оператор
Пустой оператор имеет формат Ничего не делает. Возвращает значение "0".". Функции в shell
Функция позволяет подготовить список команд shell для последующего выполнения.
Описание функции имеет вид: Имя()
{
список команд
}
после чего обращение к функции происходит по имени. При выполнении функции не создается нового процесса. Она выполняется в среде соответствующего процесса. Аргументы функции становятся ее позиционными параметрами; имя функции - ее нулевой параметр. Прервать выполнение функции можно оператором "return [n]", где (необязательное) "n" - код возврата. Обработка прерываний ("trap")
Бывает необходимо защитить выполнение программы от прерывания.
Наиболее часто приходится встречаться со следующими прерываниями, соответствующими сигналам:
0
выход из интерпретатора,
1 отбой (отключение удаленного абонента),
2 прерывание от Trap "список команд" сигналы
Если в системе возникнут прерывания, чьи сигналы перечислены через пробел в "сигналы", то будет выполнен "список команд", после чего (если в списке команд не была выполнена команда "exit") управление вернется в точку прерывания и продолжится выполнение командного файла.
Например, если перед прекращением по прерываниям выполнения какого то командного файла необходимо удалить файлы в "/tmp", то это может быть выполнено командой "trap": Trap "rm /tmp/* ; exit 1" 1 2 15
которая предшествует прочим командам файла. Здесь, после удаления файлов будет осуществлен выход "exit" из командного файла.
   
Операционные системы семейства Linux, как впрочем, и любые другие ОС,
предполагают наличие интерфейса взаимодействия между компонентами
компьютерной системы и конечным пользователем, т. е. наличие программного
уровня, который обеспечивает ввод команд и параметров для получения желаемых
результатов. Такой программный уровень получил название "оболочка"
или, на английском языке - shell
.
Командная оболочка (shell
) обеспечивает взаимотействие между пользователем и средой операционной системы Linux. Она является специализированным программным продуктом, который обеспечивает выполнение команд и получения результатов их выполнения, или, если совсем уж упрощенно, оболочка - это программа, которая предназначена для обеспечения выполнения других программ по желанию пользователя. Примером оболочки может быть, например, интерпретатор команд command.com
операционной системы MS DOS, или оболочка bash
операционных систем Unix / Linux. Все оболочки имеют схожие функции и свойства, в соответствием с их основным
предназначением - выполнять команды пользователя и отображать результаты
их выполнения: Интерпретация командной строки. Доступ к командам и результатам их выполнения. Поддержка переменных, специальных символов и зарезервированных слов. Обработка файлов, операций стандартного ввода и вывода. Реализация специального языка программирования оболочки.
   
Для операционных систем семейства Unix / Linux возможно использование нескольких
различных оболочек, отличающихся свойствами и методами взаимодействия с
системой. Наиболее распространенными оболочками являются sh
- оболочка Bourne
, классическая оболочка для ОС Unix bash
оболочка Bourne Again
(GNU Bourne-Again SHell). Пожалуй, наиболее распространенная на данный момент, оболочка в среде ОС семейства Linux. ksh
- оболочка Korn
, разработанная в качестве развития оболочки
Bourne
с историей командной строки и возможностью редактирования команд. csh
- оболочка C
, использующая синтаксис популярного языка программирования C
tcsh
- версия оболочки C
с интерактивным редактированием командной строки. В системе может быть установлено несколько различных оболочек, и для каждого
пользователя возможно использование своей, запускаемой по умолчанию, оболочки. Все это, естественно, выполняется автоматически в процессе загрузки и регистрации пользователя.
   
В процессе загрузки операционных систем семейства Linux, после загрузки ядра системы выполняется переход в интерактивный режим – режим взаимодействия пользователя и операционной системы. В ОС Linux, первым запускаемым в ходе загрузки процессом, является программа инициализации init
, которая считывает содержимое конфигурационного
файла /etc/inittab
, определяет перечень и характеристики терминалов, имеющихся в
системе, и вызывает программу интерактивного входа getty
, отображающую
приглашение для ввода имени пользователя. После ввода имени пользователя и пароля, программа getty
вызывает программу login
, которая проверяет достоверность учетной записи, выполняет переход в домашний каталог пользователя и передает управление программе начального запуска сеанса, в качестве которой обычно используется программа оболочки пользователя, конкретная разновидность которой определяется содержимым файла /etc/passwd
для данной учетной записи. Например:
user1:x:508:511::/home/user1:/bin/sh Как видно из содержимого файла /etc/passwd
, для пользователя user1
будет запущена оболочка sh
(оболочка Bourne), для пользователя interbase
- оболочка csh
(оболочка C) и для пользователя apb
- оболочка bash
(Bourne Again). После старта оболочки, на экран выводится приглашение к вводу команд
(обычно в виде знака доллара $
, если работа выполняется в контексте учетной записи обычного пользователя, или фунта #
, если оболочка используется под учетной записью привилегированного пользователя (root
). При выходе из оболочки, ядро системы возвращает управление программе init
, которая перезапускает процесс входа в систему и на терминале отображается приглашение к вводу имени пользователя. Выход из оболочки может быть выполнен одним из двух способов: Посредством команды exit
выполненной пользователем При получении процессом оболочки сигнала kill
, отправленного ядром, например при перезагрузке системы.
   
Пользовательский ввод в ответ на приглашение оболочки обычно называют
командной строкой
или командой
.
Команда Linux - это строка символов из имени команды и аргументов, разделенных пробелами. Аргументы предоставляют команде дополнительные параметры, определяющие ее поведение.
Наиболее часто в качестве аргументов используются опции
и имена
файлов и каталогов. Например, командная строка ls -l file01 file02
Содержит команду ls
, опцию -l
и два имени файлов file01 file02
. При использовании нескольких опций, их можно объединять. Например, варианты следующих команд идентичны: Ls -l -d Команды, являющиеся частью оболочки, называются встроенными
.
К таким командам относятся, например, cd, if, case
и т. п.
Естественно, встроенные команды могут отличаться для различных вариантов оболочек. Кроме встроенных команд, возможно использование программных модулей, представляющих собой отдельные исполняемые файлы, или
файлов скриптов
или сценариев
- обычных текстовых файлов, содержащих последовательно выполняемые строки с командами оболочки. Некоторые скрипты (сценарии) могут выполняться процессами Linux, как например, планировщиком задач
cron
. Планировщик задач, как правило, предназначен для автоматического выполнения задач администрирования системы по расписанию. Задачи cron
представляют собой команды или скрипты и выполняются автоматически, без какого либо вмешательства человека и могут выполняться в контексте разных учетных записей пользователей. В случае, когда задача планировщика предполагает выполнение какого-либо скрипта, возникает проблема выбора оболочки, которая должна быть запущена в качестве дочернего процесса cron
для обработки команд из файла скрипта - ведь оболочка может быть любой, а синтаксис скрипта, как правило, предполагает использование конкретной оболочки, под которую он написан. Для устранения данной проблемы, в ОС семейства Linux принято в первой строке скрипта указывать разновидность оболочки, необходимой для его выполнения, в виде:
#!/bin/bash
- для оболочки bash
#!/bin/sh
- для оболочки sh
Знак #
является признаком комментария и следующие за ним символы не интерпретируются в качестве команды. Такой прием позволяет явно указать, какая оболочка должна быть использована
для обработки последующего содержимого файла. Если же скрипт не содержит запись, явно определяющую требуемую оболочку, то будут использованы настройки из учетной записи, в контексте которой выполняется данный скрипт. В этом случае, возможна ситуация, когда скрипт, написанный для оболочки, например, tch
будет передан для выполнения в оболочку bash
, что приведет к невозможности его выполнения. При выполнении команд или сценариев используются переменные окружения
(на английском языке - environment
, значения которых характеризуют программную среду, в которой происходит выполнение команд. Такие переменные могут содержать общие настройки системы, параметры графической или командной оболочки, пути исполняемых файлов и т.п. Значения переменных окружения устанавливаются на уровне системы (для всех пользователей) и на уровне конкретного пользователя. Для установки переменных окружения на уровне системы используется содержимое файлов: /etc/profile
- устанавливает переменные только для командных оболочек. Может запускать любые скрипты в оболочках, совместимых с Bourne shell.
/etc/bash.bashrc
- устанавливает переменные только для интерактивных оболочек. Он также запускает bash-скрипты. /etc/environment
- используется модулем PAM-env. В этом файле можно указывать только пары имя=значение
. Каждый из этих файлов имеет свои особенности применения, поэтому следует внимательно выбирать тот, который подходит для ваших целей. Например, если нужно добавить пользовательский каталог ~/bin
в переменную PATH
для всех пользователей, поместите следующий код в один из системных файлов инициализации окружения (/etc/profile или /etc/bash.bashrc):
# Если идентификатор ID пользователя более или равно 1000, и существует каталог ~/bin, и он #не был ранее добавлен в переменную PATH,
# выполнить экспорт ~/bin в переменную $PATH. If [[ $UID -ge 1000 && -d $HOME/bin && -z $(echo $PATH | grep -o $HOME/bin) Export PATH=$HOME/bin:${PATH} Как правило, в операционных системах Linux, идентификатор пользователя менее 1000 или менее 500 используется для служебных учетных записей.
В данном примере, переменная окружения будет установлена для всех локальных пользователей системы с идентификатором 1000 или более. Если же нужно изменить среду окружения для конкретного пользователя, используется модификация содержимого среды окружения пользователя:
- ~/.bash_profile
, ~/.bash_login
и т.п. - файлы инициализации командной оболочки из домашнего каталога пользователя.
- ~/.profile
- файл инициализации профиля пользователя. Используется многими оболочками для определения переменных среды. ~/.pam_environment
- пользовательский аналог файла /etc/environment, который используется модулем PAM-env. Например, чтобы добавить каталог пользователя ~/bin в пути поиска исполняемых файлов, заданных переменной PATH
, можно например, в файл ~/.profile
поместить строку: export PATH="${PATH}:/home/пользователь/bin"
Чтобы установить переменные окружения для графических приложений, используется содержимое файлов настройки графической среды пользователей ~/.xinitrc
Гораздо чаще значения переменных окружения задаются для текущего сеанса пользователя. Например, для добавления пользовательского каталога ~/bin
в пути поиска исполняемых файлов: export PATH=~/bin:$PATH
Новое значение переменной PATH
будет действовать только до завершения текущего сеанса пользователя. Для просмотра значения переменной можно использовать команду echo $переменная
, например: echo $PATH
В настоящее время, самой распространенной оболочкой, как уже упоминалось выше, является bash
. Вызвано это, в первую очередь тем, что оболочка bash
является sh
- совместимой командной оболочкой, в которую добавлены полезные возможности из оболочек Korn shell (ksh
) и C shell (csh
). Оболочка bash
может без какой-либо модификации выполнять большинство скриптов, написанных под язык программирования оболочки sh
и в максимальной степени пытается приблизиться к стандарту POSIX
, что привело к появлению множества улучшений, причем как для программирования, так и использования в интерактивном режиме. В современной реализации bash
имеется режим редактирования командной строки, неограниченный размер истории команд, средства управление заданиями, возможность использования псевдонимов, обширный перечень встроенных команд, функции командной оболочки и т.п. В целом, bash
в наибольшей степени соответствует потребностям среднестатистического пользователя, что и сделало ее наиболее используемой в среде Linux. При запуске bash
без параметров командной строки, оболочка запускается в интерактивном режиме, отображая на экране приглашение к вводу команд. Интерактивная оболочка обычно читает данные из терминала пользователя и пишет данные в этот же терминал, стандартным устройством ввода является клавиатура, а стандартным устройством вывода – дисплей. Пользователь вводит команды на клавиатуре, а результат их выполнения отображается на дисплее.
В данном разделе предоставлена документация в помощь программисту на языках командных оболочек shell (sh, bash, ksh и другие) 0. Введение
Командный интерпретатор в среде UNIX выполняет две основные функции: представляет интерактивный интерфейс с пользователем, т.е. выдает приглашение, и обрабатывает вводимые пользователем команды; В последнем случае, операционная система позволяет рассматривать командные файлы как разновидность исполняемых файлов. Соответственно различают два режима работы интерпретатора: интерактивный и командный. В среде UNIX (в отличие, скажем, от DOS) имеются несколько различных командных интерпретаторов. Перечислим наиболее популярные: /bin/sh - Bourne shell. Исторически это первая командная оболочка, разработанная для первой версии ОС UNIX. В настоящее время эта оболочка является основной в версиях UNIX System V. Операционная система ConvexOS является разновидностью 4.3 BSD UNIX()BSD - Berkeley Series Distribution и, следовательно, базовой командной оболочкой является csh. 1. Основные возможности
Работа с командной строкой
Набираемую пользователем строку интерпретатор воспринимает как команду (или несколько команд). Синтаксис командного интерпретатора позволяет набирать несколько команд в одной строке, разделяя их точкой с запятой. Например эквивалентно двум последовательно введенным командам: Наоборот, при желании пользователь может продолжить набор длинной команды на следующей строке, закончив текущую строку знаком \\. До завершения ввода команды вы будете получать ``вторичное приглашение"" > вместо основного (%). Например, % tar tv Makefile star.o star.c star.dat main.o main.c эквивалентно % tar tv Makefile star.o \ > star.c star.dat \ Управление потоками ввода-вывода осуществляется, подобно DOS(Точнее, синтаксис перенаправления потоков ОС DOS восприняла от UNIX) с помощью символов > , > > , Полезный частный случай использования механизма перенаправления потоков - перенаправление в /dev/null, что позволяет избавиться от ненужных сообщений на экран. С помощью того же механизма можно создавать пустые файлы: создаст в текущей директории пустой файл myfile. Дополнительно C-shell позволяет группировать команды с помощью круглых скобок. В этом случае вся конструкция внутри скобок рассматривается интерпретатором как одна команда. Сие полезно, например, в таких конструкциях: % (command1 | command2) Если же скобки опустить, shell не сможет определить какой из команд вы хотите подать на вход файл myfile. Следующие ``удобства"" существуют в данной реализации C-shell: Вы можете не набирать длинную команду до конца, а попробовать после частичного набора команды (или имени файла) нажать клавишу табуляции. C-shell попытается сама дополнить недостающие символы, либо ответит писком, если выбор неоднозначен. Набирая полное имя файла пользуйтесь комбинацией клавиш ^D. Вы сможете получить листинг набираемого каталога в формате команды lf. Разбор командной строки
Интерпретатор, получив командную строку, выполняет над ней ряд преобразований, а именно: Раскрывает псевдонимы (alias) Разберем эти действия по этапам. Псевдонимы (alias). Встроенная команда alias позволяет определять псевдонимы команд. Пример: % alias mycat "cat | more" определяет mycat как псевдоним строки cat | more. Поэтому далее вы вправе пользоваться командой mycat, которая будет раскрыта интерпретатором везде, где вы ее используйте. Это - способ определения коротких имен для длинных составных команд. Встроенная команда unalias mycat уничтожает ранее введенный псевдоним mycat. Метасимволы. Метасимволы позволяют кратко записывать целые списки слов (главным образом - имен файлов). Shell рассматривает слово, в котором встречаются метасимволы, как шаблон для составления списка имен файлов: * в шаблоне заменяет любую последовательность символов. Например m* раскроется в список всех файлов, начинающихся с буквы m. Существует небольшое исключение из этого правила: просто * опускает в списке те файлы, имена которых начинаются с точки. Наконец, тильда позволяет указать домашний каталог пользователя: ~name/ эквивалентно указанию полного пути в домашний каталог пользователя name (Скажем, /usr1/name/) Переменные shell. Слова, начинающиеся с символа $ командный интерпретатор воспринимает как имена переменных. Переменные делятся на переменные окружения (они будут известны всем вызванным из этой shell программам и являются в этом смысле глобальными) и простые переменные. Встроенная команда set name=value позволяет определить простую переменную с именем name и дать ей значение value. Встретив в командной строке выражение $name интерпретатор заменит его на value. Например, % set color=blue выдаст на терминал строчку blue. А % set color=blue % echo new$color даст newblue. Наконец, введя % set color=blue % echo ${color}new получим colornew. Последний пример демонстрирует как надо использовать фигурные скобки для выделения имени переменной из слова (на echo $colornew интерпретатор бы ответил, что переменная colornew не определена. Команда unset уничтожает ранее определенные переменные. Чтобы определить переменную равной строке из нескольких слов, заключите ее в простые кавычки. Пример % set color="blue or red or green" Простые переменные могут быть массивами слов (что надо отличать от только что рассмотренного случая, когда переменная содержит строку из нескольких слов. Для объявления массива надо использовать круглые скобки: % set colors=(blue red green) Теперь команда echo $colors выдаст строку из трех цветов (попробуйте!). Однако вы можете также работать в отдельными элементами массива (элементы нумеруются с нулевого значения), например так: (получим green). Количество элементов в массиве содержится в переменной $#colors. даст на терминал цифру 3. Возможны довольно сложные комбинации с использованием шаблонов, например: % set files=(m*) выдаст число файлов в текущем каталоге, начинающихся с буквы m. Переменные окружения вызываются точно также как и простые переменные. Разница заключается в способе их определения: Команда % setenv name value устанавливает переменную окружения с именем name. Обратите внимание на раздражающую разницу в синтаксисе: определяя переменную окружения не надо ставить знак =. Список всех переменных окружения можно получить с помощью встроенной команды printenv. Отменить определения переменной окружения можно с помощью unsetenv. Наконец, для определения массива переменных окружения НЕ используются круглые скобки, а используются двоеточия в качестве разделителей элементов массива: % setenv MANPATH /usr/man/:/usr/local/man:/usr/man/X11:~/man Встроенные команды и переменные
Список важнейших встроенных команд C-shell с краткими пояснениями: alias определяет псевдоним bg переводит задачу в фоновый режим исполнения chdir path команда перехода в каталог path. echo выводит на стандартный вывод все свои аргументы exec filename запускает процесс из файла filename вместо текущей shell (т.е. поверх нее). Возврат в shell невозможен. exit заканчивает работу shell. fg переводит фоновый процесс в синхронный. file filename выдает информацию о том, что операционная система думает об этом файле. goto label осуществляет безусловный переход на строку командного файла, помеченную меткой label. Не используется в интерактивном режиме. kill pid посылает сигнал аварийного завершения процессу с номером pid, что обычно приводит к уничтожению процесса. source filename считывает и исполняет команды из файла filename. set, setenv установка внутренних переменных и переменных окружения. shift var сдвигает элементы массива var влево. При этом размер массива уменьшается на единицу, а нулевой элемент массива теряется. Переменная var должна быть массивом. time command выполняет команду command и выводит на терминал затраченное на ее выполнение время. unset уничтожает переменную shell. unalias уничтожает ранее определенный псевдоним команды. @ name=expr заносит результат арифметического выражения expr в переменную name. Список важнейших встроенных переменных C-shell с краткими пояснениями: argv массив параметров командной строки (используется в командном режиме) cdpath каталог, куда shell переходит, получив команду chdir без аргумента. history размер буфера для запоминания команд. home домашний каталог пользователя mail местоположение в файловой системе почтового ящика пользователя. path путь поиска внешних команд. prompt основное приглашение shell. prompt1 вторичное приглашение. shell полный путь исполняемого файла текущей оболочки (/bin/csh) Управляющие операторы и операторы цикла
Из списка встроенных команд оболочки мы сознательно исключили условные операторы и операторы цикла, которые будут рассмотрены здесь. Условное выполнение
Синтаксис условного оператора if в C-shell таков if (expr) command В качестве expr может стоять либо арифметическое выражение, либо проверка атрибутов файла. Пример: if (-f /etc/hosts) cat /etc/hosts Рассмотрим последний случай подробнее. Возможны следующие проверки атрибутов файла: R доступен на чтение W доступен на запись X доступен на исполнение E проверка существования файла O проверка что вы являетесь хозяином данного файла Z файл имеет нулевой размер F файл является обычным файлом P файл является именованным программным каналом D файл является директорией Цикл while
Цикл выполняется до тех пор, пока условие истинно. Пример: while ($#files > 0) Цикл foreach
Это чрезвычайно полезный оператор, позволяющий организовать цикл по элементам массива слов foreach varname (list) Тело цикла выполняется столько раз, сколько элементов в массиве list. При этом переменная varname содержит очередное значение элемента массива. Пример foreach color (blue red green) echo The color is $color foreach file (*.for) echo Renaming $file mv $file `basename $file .for`.f Здесь использована стандартная команда basename, которая ``отрезает"" у слова, заданного в первом аргументе суффикс, заданный вторым аргументом и выводит получившееся слово на стандартный вывод. Об использовании обратных кавычек в языке C-shell будет рассказано несколько позже. Многовариантный условный оператор
Синтаксис условного оператора switch в C-shell таков case pattern1: ... breaksw case {\it pattern2} : Оператор позволяет передавать управление в зависимости от того, удовлетворяет ли строка string какому-либо шаблону из набора pattern1, pattern2, ...(в этом случае управление передается в блок, ограниченный case ... breaksw) или нет (в этом случае управление передается на ветвь default:... endsw. В целом, оператор switch очень похож на аналогичный опреатор языка C. Такие конструкции часто используются в командных файлах для анализа ответа пользователя на заданный вопрос (). 2. Работа оболочки в командном режиме
Уже отмечалось, что csh может быть запущена в командном режиме. Более того, условные операторы и операторы цикла чаще используются именно в командных файлах. Здесь мы рассмотрим особенности такой ``командной"" работы. Идентификация интерпретатора
Проще всего осуществить запуск оболочки в режиме исполнения некоторого файла mycommand придав этому файлу атрибут исполняемости командой chmod: % chmod +x mycommand Теперь достаточно ввести с клавиатуры команду mycommand и ОС автоматически запустит shell в командном режиме исполнения данного файла. В таком пути есть один подводный камень: командных интерпретаторов в системе много и синтаксис команд у них разный. Как ОС определит нужный вам? Ответ - никак. Вы должны явно указать ОС какой интерпретатор вы хотите запускать для исполнения данного командного файла. Для этого первая строчка вашего файла должна иметь следующий стандартный вид: что и позволит ОС правильно поступить. Если же вы не задали этой информации, то ОС будет считать (по историческим причинам), что файл написан на языке Bourne shell и вы вероятнее всего получите множество сообщений о синтаксических ошибках. Заметим еще одно полезное свойство работы оболочки в командном режиме: все строки, начинающиеся со знака # будут проигнорированы. Это позволяет вносить в текст командного файла комментарии. Следующий факт позволяет вам работать с командной строкой средствами csh: при запуске командного файла mycommand автоматически становится определенной внутренняя переменная с именем argv, представляющая массив параметров командной строки. Например, следующий командный файл просто выводит все свои аргументы и их количество на терминал: # This file simply outputs its arguments # and the total number of arguments echo Arguments: $argv echo Number of arguments: $#argv Явный запуск
Вы можете применить более прямой, но менее удобный способ запуска командного файла - вызвав shell с ключом -c filename. Пример: % /bin/csh -c mycommand arg1 arg2 arg3... где сразу же за ключом должно следовать имя запускаемого файла. Требуемые аргументы указываются после. Отметим, что при таком способе запуска файл может и не иметь атрибута исполняемости. Кавычки
В синтаксисе shell кавычки играют важную роль. Есть три типа кавычек: простые ("), двойные (") и обратные (`). Простые кавычки используются для выделения текста, который оболочка должна понимать буквально. Иными словами, текст внутри простых кавычек не подлежит раскрытию и интерпретации. Пример: echo "Dollar is $good" получим букально Dollar is $good несмотря на то, что знак доллара является метасимволом оболочки. Двойные кавычки выделяют строку символов, которую оболочка будет считать одним словом. Пример: set colors="green blue red"; echo $#colors выдаст цифру 1, что означает, что переменная colors простая, а не массив. Все что находится внутри двойных кавычек подлежит интерпретации оболочкой. Обратные кавычки позволяют представить строку, которая состоит из результата выполнения команды. Так что выражение в обратных кавычках рассматривается как команда, которую оболочка выполняет, а то, что эта команда выведет на стандартный вывод подставляется как строка на то место, где стоят эти обратные кавычки. Пример: занесет в переменную mytty ту строку, которую выдает команда tty (а именно имя и номер текущего терминала). Здесь не будет пересказа манов (документации), и статья никак не отменяет и не заменяет их чтение. Вместо этого я расскажу о главных вещах (командах, приемах и принципах), которые надо осознать с самого начала работы в unix shell-е, чтобы работа происходила эффективно и приятно. Статья касается полноценных unix-подобных окружений, с полнофункциональным шеллом (предпочтительно zsh или bash)и достаточно широким набором стандартных программ. В целом работа через шелл выглядит так: пользователь (т.е. вы) с клавиатуры вводит команду, нажимает Enter, система выполняет команду, пишет на экран результат выполнения, и снова ожидает ввода следующей команды. Типичный вид шелла: Шелл - это основной способ для взаимодействия со всеми Unix-подобными серверными системами. Если вы работаете за машиной, на которой установлена Ubuntu, вам надо запустить программу Terminal. По окончании работы можно просто закрыть окно. На MacOS - тоже запустить Terminal. Для доступа к удаленному серверу - воспользоваться ssh (если локально у вас MacOS, Ubuntu или другая unix-like система) или putty (если у вас Windows). Выполните несколько команд: hostname , ls , pwd , whoami . Теперь нажмите клавишу «вверх». В строке ввода появилась предыдущая команда. Клавишами «вверх» и «вниз» можно перемещаться вперед и назад по истории. Когда долистаете до hostname , нажмите Enter - команда выполнится еще раз. Команды из истории можно не просто выполнять повторно, а еще и редактировать. Долистайте историю до команды ls , добавьте к ней ключ -l (получилось ls -l , перед минусом пробел есть, а после - нет). Нажмите Enter - выполнится модифицированная команда. Пролистывание истории, редактирование и повторное выполнение команд - самые типичные действия при работе в командной строке, привыкайте. Прекрасной особенностью текста является то, что его можно копировать и вставлять, это верно и для командной строки. Попробуйте выполнить команду date +"%y-%m-%d, %A" После того, как научитесь пользоваться man "ом, убедитесь, что можете скопировать и выполнить примеры команд из справки. Для проверки найдите в справке по программе date раздел EXAMPLES , скопируйте и выполните первый приведенный пример (на всякий случай: знак доллара не является частью команды, это условное изображение приглашения к вводу). Как именно копировать текст из терминала и вставлять его в терминал - зависит от вашей системы и от ее настроек, поэтому дать универсальную инструкцию, к сожалению, не получится. На Ubuntu попробуйте так: копирование - просто выделение мышью, вставка - средняя кнопка мыши. Если не работает, или если у вас другая система - поищите в Интернете или спросите более опытных знакомых. Akira@latitude-e7240:
~/shell-survival-quide> ls
Makefile shell-first-steps.md shell-first-steps.pdf
shell-survival-quide.md shell-survival-quide.pdf
Akira@latitude-e7240:
~/shell-survival-quide> ls -l
total 332
-rw-rw-r-- 1 akira akira 198 Feb 13 11:48 Makefile
-rw-rw-r-- 1 akira akira 15107 Feb 14 22:26 shell-first-steps.md
-rw-rw-r-- 1 akira akira 146226 Feb 13 11:49 shell-first-steps.pdf
-rw-rw-r-- 1 akira akira 16626 Feb 13 11:45 shell-survival-quide.md
-rw-rw-r-- 1 akira akira 146203 Feb 13 11:35 shell-survival-quide.pdf
Кроме того, команды могут принимать в качестве параметров имена файлов, каталогов или просто текстовые строки. Попробуйте: Ls -ld /home
ls -l /home
grep root /etc/passwd
Попробуйте: man grep , man atoi , man chdir , man man . Пролистывание вперед и назад делается кнопками «вверх», «вниз», «PageUp», «PageDown», выход из просмотра справки - кнопкой q . Поиск определенного текста в справочной статье: нажимите / (прямой слеш), введите текст для поиска, нажимите Enter. Перемещение к следующим вхождениям - клавиша n . Все справочные статьи делятся на категории. Самые важные: Посмотреть список всех доступных на машине справочных статей можно с помощью команды man -k . (точка - тоже часть комады). Попробуйте и сравните поведение: Cat /etc/bash.bashrc
cat /etc/bash.bashrc |less
Можно передать файл в пролистыватель сразу в параметрах: Less /etc/bash.bashrc
Пролистывание вверхи и вниз - кнопки «вверх», «вниз», «PageUp», «PageDown», выход - кнопка q . Поиск определенного текста: нажимите / (прямой слеш), введите текст для поиска, нажимите Enter. Перемещение к следующим вхождениям - клавиша n . (Узнаете инструкцию про man ? Ничего удивительного, для вывода справки тоже используется less .) Посмотреть права на файл можно с помощью ls -l . Например: > ls -l Makefile
-rw-r--r-- 1 akira students 198 Feb 13 11:48 Makefile
Если при работе вы получаете сообщение permission denied , это значит, что у вас недостаточно правна объект, с которым вы хотели работать. Подробнее читайте в man chmod . Запустите программу wc , введите текст Good day today , нажмите Enter, введтие текст good day , нажмите Enter, нажмите Ctrl+d. Программа wc покажет статистику по количеству букв, слов и строк в вашем тексте и завершится: > wc
good day today
good day
2 5 24
Теперь запустите команду head -n3 /etc/passwd , должно получиться примерно так: > head -n3 /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
Можно представить себе так: программа - это труба, в которую втекает STDIN , а вытекает STDOUT . Важнейшее свойство юниксовой командной строки состоит в том, что программы-«трубы» можно соединять между собой: выход (STDOUT) одной программы передавать в качестве входных данных (STDIN) другой программе. Такая конструкция из соединенных программ называется по-английски pipe (труба), по-русски - конвейер или пайп. Объединение программ в конвейер делается символом | (вертикальная черта) Выполните команду head -n3 /etc/passwd |wc , получится примерно следующее: > head -n3 /etc/passwd |wc
3 3 117
В конвейер можно объединять сколько угодно программ. Например, можно добавить к предыдущему конвейеру еще одну программу wc , которая подсчитает, сколько слов и букв было в выводе первой wc: > head -n3 /etc/passwd |wc |wc
1 3 24
Составление конвейеров (пайпов) - очень частое дело при работе в командной строке. Пример того, как это делается на практике, читайте в разделе «Составление конвейера-однострочника». Date > /tmp/today.txt
Если файл с таким именем уже существовал, его старое содержимое будет уничтожено. Если файл не существовал, он будет создан. Каталог, в котором создается файл, должен существовать до выполнения команды. Если надо не перезаписать файл, а добавить вывод в его конец, используйте >> : Date >> /tmp/today.txt
Кроме того, программе можно вместо STDIN передать любой файл. Попробуйте: Wc Если вы разобрались со сложной проблемой (самостоятельно, с помощью Интернета или других людей) -- запишите свое решение на случай, если такая же проблема снова возникнет у вас или ваших товарищей. Записывать можно в простой текстовый файл, в Evernote, публиковать в соц.сетях. Вытащить из истории предыдущую команду, добавить в конвейер еще одну команду, запустить, повторить
.См. также раздел «Составление конвейера-однострочника». Некоторых программ у вас может не быть, их надо установить дополнительно. Кроме того, некоторые опции этих программ доступны только привилегированным пользователям (root "у). Шаг 1.
Шаг 2.
Ps axuww |grep `whoami`
Шаг 3.
Ps axuww |grep `whoami` | grep "\ Ps axuww |grep `whoami` | grep "\ Pid-ы нужных процессов, п. 3 выполнен Шаг 4.
Вот некоторые программы, которые определенно вам пригодятся, если вы будете жить в командной строке: В этой статье постараемся собрать наиболее часто используемые команды в SSH или linux shell. Список не является
окончательным, описание команд естественно не полное, полное описание команд Вы можете получить в linux shell#
man command. ВНИМАНИЕ:
ПОМНИТЕ ЧТО КОМАНДЫ LINUX ЧУСТИТЕЛЬНЫ К РЕГИСТРУ, В КОТОРОМ ИХ НАБИРАЮТ. Например: Команды
Netscape, NETSCAPE и nEtscape это три различные команды, точно также my_filE, my_file, и my_FILE это три
различных файла.
1. Естественные сочетания клавиш и обозначения
2. Стандартные команды и команды, дающие информацию по системе
3. Работа с сетью
4. Простейшие действия
5. Основные Команды Администрирования
6. Контроль процессов
Обратите внимание на комбинации клавиш: c, z, s, и q. Они описаны ранее в разделе
Естественные сочетания клавиш и обозначения.
,
9 уничтожение (не перехватывается),
15 окончание выполнения.
Для защиты от прерываний существует команда "trap", имеющая формат:Что такое оболочка?
interbase:x:510:511::/home/interbase:/bin/csh
apb:x:511:513:apb:/home/apb:/bin/bash
Интерпретация командной строки.
ls -ld
Командный интерпретатор c-shell
обрабатывает и исполняет текстовые файлы, содержащие команды интерпретатора (командные файлы);
/bin/csh - С-shell. Оболочка, синтаксис командного языка которой приближен к языку C. Является основной оболочкой для Берклеевской разновидности ОС UNIX.
/bin/ksh - k-shell.
/bin/rsh - Restricted shell. Представляет собой sh с ограниченными возможностями (прежде всего для защиты ОС от несанкционированных действий пользователя).
Если вы набрали команду, но забыли ее опции, наберите последовательность H. C-shell выдаст краткую помощь. Например,
Командный буфер запоминает 20 последних команд. Вместо набора команды вы можете вызвать ее из буфера с помощью стрелочной клавиатуры (конечно только в том случае, если эта команда есть в буфере).
Раскрывает метасимволы (*, ?, [, ], ~, {, })
Подставляет переменные shell
Выполняет команду, если она - встроенная команда интерпретатора, или запускает процесс, если команда внешняя.
? заменяет один символов. Например m? раскроется в список всех имен файлов, начинающихся с буквы m и состоящих точно из двух букв.
[.-.] позволяет указать интервал для подставляемого символа. Например m будет раскрыто в ma mb mc me.
{...,...} позволяет перечислить слова для подстановки. Так, например m{red,blue,green} будет раскрыто в mred mblue mgreen.
~/ эквивалентно указанию полного пути в ваш собственный домашний каталог.Зачем и для кого статья?
Изначально это была памятка для студентов, которые начинают работать с unix-подобными системами. Иными словами, статья рассчитана на тех, кто не имеет предыдущего опыта работы в unix-овой командной строке, но по тем или иным причинам хочет или должен научиться эффективно с нею взаимодействовать.Что такое шелл
Shell (шелл, он же «командная строка», он же CLI, он же «консоль», он же «терминал», он же «черное окошко с белыми буковками») -- это текстовый интерфейс общения с операционной системой (ну, строго говря, это программа
, которая таковой интерфейс обеспечивает, но сейчас это различие несущественно). Где встречаются системы с командной строкой?
Где вас может поджидать unix-овый шелл, популярные варианты:Какие задачи разумно решать шеллом?
Естественные задачи, для которых шелл пригоден, полезен и незаменим:Абсолютно первые шаги
Начинаем работу: войти и выйти
Убедитесь, что точно знаете, как запустить шелл и как из него выйти.Кто я, где я?
Выполните следующие команды:История команд (history)
Важное свойство полноценной командной строки - история команд.Copy-paste
Командная строка очень текстоцентрична: команды - это текст, входные данные для большинства стандартных программ - текст, результат работы - чаще всего тоже текст.
Вводили ли вы ее целиком руками или скопировали из статьи? Убедитесь, что вы можете ее скопировать, вставить в терминал и выполнить.Ключи и опции
При исследовании истории команд вы уже столкнулись с тем, что у команды ls есть по крайней мере два варианта. Если вызвать ее просто так, она выводит простой список:
Если же добавить ключ -l , к каждому файлу выводится подробная информация:
Это очень типичная ситуация: если к вызову команды добавлять специальные модификаторы (ключи, опции, параметры), поведение команды меняется. Сравните: tree / и tree -d / , hostname и hostname -f . man
man - справка по командам и программам, доступным на вашей машине, а также по системным вызовам и стандартной библиотеке C.
Указывать, из какой именно категории надо показать справку, нужно в случаях совпадений имен. Например, man 3 printf описывает функцию из стандартной библиотеки C, а man 1 printf - консольную программу с таким же именем.less
Когда в небольшом окне терминала надо просмотреть очень длинный текст (содержимое какого-то файла, длинный man и т.п.), используют специальные программы-«пейджеры» (от слова page/страница, то есть постраничные листатели). Самый популярный листатель - less , и именно он обеспечивает вам пролистывание, когда вы читаете man-ы. Права
С любым файлом или каталогом связан набор «прав»: право на чтение файла, право на запись в файл, право исполнять файл. Все пользователи делятся на три категории: владелец файла, группа владельца файла, все прочие пользователи.
Этот вывод означает, что владельцу (akira) можно читать и писать файл, группе (students) - только читать, всем прочим пользователя - тоже только читать.STDIN, STDOUT, конвейеры (пайпы)
С каждой исполняющейся программой связаны 3 стандартных потока данных: поток входных данных STDIN , поток выходных данных STDOUT , поток для вывода ошибок STDERR .
В данном случае вы подали в STDIN программы двухстрочный текст, а в STDOUT получили три числа.
В этом случае программа head ничего не читала из STDIN , а в STDOUT написала три строки.
Произошло вот что: программа head выдала в STDOUT три строки текста, которые сразу же попали на вход программе wc , которая в свою очередь подсчитала количество символов, слов и строк в полученном тексте.Перенаправление ввода-вывода
Вывод (STDOUT) програмы можно не только передать другой программе по конвейеру, но и просто записать в файл. Такое перенаправление делается с помощью > (знак «больше»):
В результате выполнения этой команды на диске появится файл /tmp/today.txt . Посмотрите его содержимое с помощью cat /tmp/today.txt
Проверьте, что теперь записано в файле.Что делать, когда что-то непонятно
Если вы сталкиваетесь с поведением системы, которое не понимаете, или хотите добиться определенного результата, но не знаете, как именно, советую действовать в следующем порядке (кстати, это относится не только к шеллам):
Если ничего из перечисленного не помогло - обратитесь за советом к преподавателю, опытному коллеге или товарищу. И не бойтесь задавать «глупые» вопросы - не стыдно не знать, стыдно не спрашивать.Методы работы
Скопировать-и-вставить
- из man-ов, из статей на StackOverflow и т.п.Командная строка состоит из текста, пользуйтесь этим: копируйте и используйте примеры команд,записывайте удачные находки на память, публикуйте их в твиттерах и блогах.Базовые команды
Аналитика
Диагностика системы
Массовое и полуавтоматическое выполнение
На первых порах пропускайте этот раздел, эти команды и конструкции понадобятся вам тогда, когда доберетесь до несложного шелльного скриптинга. Разное
Составление конвейера-однострочника
Давайте рассмотрим пример реальной задачи: требуется прибить все процессы task-6-server , запущенные от имени текущего пользователя.
Понять, какая программа выдает примерно нужные данные, хотя бы и не в чистом виде. Для нашей задачи стоит получить список всех процессов в системе:
ps axuww . Запустить.
Посмотреть на полученные данные глазами, придумать фильтр, который выкинет часть ненужных данных. Часто это grep или grep -v . Клавишей «Вверх» вытащить из истории предыдущую команду, приписать к ней придуманный фильтр, запустить.
- только процессы текущего пользователя.
Повторять пункт 2, пока не получатся чистые нужные данные.
- все процессы с нужным именем (плюс, может быть, лишние вроде vim task-6-server.c и т.п.),
- только процессы с нужным именем
Применить подходящий финальный обработчик. Клавишей «Вверх» вытаскиваем из истории предыдущую команду и добавляем обработку, которая завершит решение задачи:Задания для тренировки
Хотите попрактиковаться в новых умениях? Попробуйте выполнить следующие задания:
Подсказка: вам понадобится find , grep -o , awk "{print $1}" , регулярные выражения в grep , curl -s .Что изучать дальше?
Если командная строка начинает вам нравиться, не останавливайтесь, продолжайте совершенствовать свои навыки.
Кроме того, со временем стоит освоить какой-нибудь скриптовый язык,например, perl или python , или даже их оба.Кому это надо?
А стоит ли вообще изучать сегодня командную строку и шелльный скриптинг? Определенно стоит. Приведу только несколько примеров из требований Facebook к кандидатам, которые хотят поступить на работу в FB.
Горячие комбинации клавиш и Команды Linux:
Переключение на первый консольный терминал
Переключение на #ый консольный терминал (#=1..6)
Переключение на графический терминал (если таковой запущен)
Дополнение текущей последовательности символов, набранной в консоли, до исполняемой команды. Эта
особенность сильно облегчает жизнь при наборе команд! Это работает также и при загрузке компьютера через LILO!
Просмотр и редактирование буфера истории команд. Для исполнения команды нажмите .
Просмотр текста выведенного на консольный терминал и ушедшего за приделы экрана. Перемещение в
вверх.
То же что и выше. Перемещение в вниз.
[+]
(в X-windows) Изменение разрешения. Переключение к следующей конфигурации.
[-]
(В X-windows) Изменение разрешения. Возврат к предыдущей конфигурации.
(в X-windows) Убить текущий сервер X-windows (выйти из графической оболочки, уничтожив все
процессы). Убить текущий процесс.
d
Выход из текущего терминала (обычно работает).
d
Посылка текущему процессу сигнала [Конец-файла] (конец файла).
s
Остановка вывода на терминал.
q
Возобновление вывода на терминал. Попробуйте эту комбинацию клавиш, если ваш терминал непонятно
почему перестал отвечать на ваши запросы.
z
Послать текущий процесс в background.
reset
Восстановление значений по умолчанию для "запорченного" терминала (терминал показывает странные символы
и неадекватно реагирует на нажатие клавиш). Используйте эту команду если вы попытались вывести на экран бинарный
файл. Вероятно вы не сможете увидеть эту команду в процессе ее набора.
~
Моя домашняя директория. Например cd ~/моя_поддиректория.
. (точка)
Текущая директория.
.. (две точки)
Родительская директория для текущего каталога.
pwd
Вывести текущую директорию.
hostname
Вывести или изменить сетевое имя машины.
whoami
Ввести имя под которым я зарегистрирован.
date
Вывести или изменить дату и время. Например, чтобы установить дату и время равную 2000-12-31 23:57,
следует выполнить команду: date 123123572000
time
Получить информацию о времени, нужного для выполнения процесса + еще кое-какую информацию. Не путайте
эту команду с date. Например: Я могу определить как много времени требуется для вывода списка файлов в директории,
набрав последовательность: time ls
who
Определить кто из пользователей работает на машине.
rwho -a
Определение всех пользователей, подключившихся к вашей сети. Для выполнения этой команды требуется,
чтобы был запущен процесс rwho. Если такого нет - запустите "setup" под суперпользователем.
finger [имя_пользователя]
Системная информация о зарегистрированном пользователе. Попробуйте: finger root
uptime
Количество времени прошедшего с последней перезагрузки.
ps a
Список текущих процессов.
top
Интерактивный список текущих процессов отсортированных по использованию cpu.
uname
Вывести системную информацию.
free
Вывести информацию по памяти.
df -h
(=место на диске) Вывести информацию о свободном и используемом месте на дисках (в читабельном
виде).
du / -bh | more
(=кто сколько занял) Вывод детальной информации о размере файлов по директориям начиная с
корневой (в читабельном виде).
cat /proc/cpuinfo
Системная информация о процессоре. Заметьте, что файла в /proc директории - не настоящие
файлы. Они используются для получения информации, известной системе.
cat /proc/interrupts
Используемые прерывания.
cat /proc/version
Версия ядра Linux и другая информация
cat /proc/filesystems
Вывести используемые в данный момент типы файловых систем.
cat /etc/printcap
Вывести настройки принтера.
lsmod
(как root) Вывести информацию о загруженных в данный момент модулях ядра.
set|more
Вывести текущие значения переменных окружения.
echo $PATH
Вывести значение переменной окружения "PATH" Эта команда может использоваться для вывода значений
других переменных окружения. Воспользуйтесь командой set, для получения полного списка.
netconf
(как root) Очень хорошая программа настройки сети, использующая для интерактивной работы с
пользованием, текстовое меню.
ping [имя_машины]
"Проверка на вшивость". Есть или нет контакта с другой машиной (в качестве параметре
команде можно передавать сетевое имя машины или IP адрес), нажмите -C когда вся требуемая информация будет
получена.
route -n
Вывести таблицу маршрутизации (the routing table).
ipfwadm -F -p m
Настроить firewall.
ifconfig
(как root) Вывести информацию о текущих сетевых интерфейсах (ethernet, ppp, и т.д.) Ваша первая
ethernet плата плата будет показана как eth0, вторая как eth1, первый ppp модем как ppp0 и так далее. "lo" -
расшифровывается как "loopback only" сетевой интерфейс, который должен быть постоянно активирован. Используйте
соответствующие опции (смотрите результат выполнения ifconfig --help) для настройки сетевых интерфейсов.
ifup [имя_сетевого_интерфейса]
(/sbin/ifup при работе под обычным пользователем) Активизация соответствующего
сетевого интерфейса. Например: ifup eth0 ifup ppp0. Пользователь может активизировать и выключить сетевое интерфейс
ppp только когда установлены соответствующие права доступа (права можно установить в процессе настройки ppp через
"netconf")
ifdown [имя_сетевого_интерфейса]
(/sbin/ifdown при работе под обычным пользователем). Диактивизация
соответствующего сетевого интерфейса.
ls
Список файлов в текущей директории. Команда выполнении команды dir выполняется команда ls.
cd [директория]
Сменить директорию.
cp [что копировать][куда копировать]
Копировать файлы.
mcopy [что копировать][куда копировать]
Копировать файлы при работе с файловой системой dos (монтировать
диска dos необязательно). Например: mcopy a:\autoexec.bat ~/junk . Для дополнительной информацией по подобным
командам (mdir, mcd, mren, mmove, mdel, mmd, mrd, mformat ....) ознакомьтесь с man mtools.
mv [что перемещать][куда перемещать]
Переместить или переименовать файл.
ln -s [на что сделать ссылку][имя ссылки]
Создать символическую ссылку.
rm [файлы]
Удалить файлы.
mkdir [директорию]
Создать новую директорию.
rmdir [директорию]
Удалить пустую директорию.
rm -r [файлы и/или директории]
(рекурсивное удаление) Удалить файлы, директории и их поддиректории.
ОСТОРОЖНЕЙ с этой командой, если у вас права суперпользователя! Пока у Linux нет системы полного восстановления
удаленных файлов (если вы не пользуетесь специальными программами для помещения удаленный файлы в специальный
каталог - a la корзинка под W95).
cat [имя файла] | more
Просмотр содержимого текстового файла по одной странице за раз.
less [имя файла]
Просмотр содержимого текстового файла с возможностью вернуться к предыдущим страницам.
Нажмите q когда захотите выйти из программы. "Less" - аналог команды DOS "more", хотя очень часто "less" бывает
более удобной чем "more".
pico [имя файла]
Редактировать текстовый файл.
lynx
Просмотр файла html или WWW ссылки с помощью текстового браузера Lynx.
tar -zxvf [файлы]
Распаковать архив tgz или tar.gz, который вы вытянули из сети.
find / -name "имя файла"
Найти файл с именем "имя файла". Поиск начинается с директории / . "имя файла" может
содержать маску для поиска.
pine
Хорошая текстово - ориентированная программа для чтения электронной почты. Еще одна подобная программа
называется "elm". Netscape считывает ваши письма с вашего Internet адреса, а pine позволяет вам просматривать
"локальную" почту - то есть ту почту, которую посылает вам процесс son или cron.
mc
Запустить программу управления файлами "Midnight Commander" (Выглядит как "Norton Commander", но по своим
возможностям ближе к far или dn).
telnet [сервер]
Связаться по telnet с другой машиной. Используйте имя машины или ее IP адрес. Войдите с
помощью вашего пароля (вы должны быть зарегистрированы на этой удаленной машине). Это позволит вам войти на другую
машину и работать на ней, как будто вы сидите за ее клавиатурой (почти никаких отличий).
ftp [сервер]
Связаться по ftp с удаленным компьютером. Этот тип связи хорош для копирования файлов с/на
удаленную машину.
printtool
(как root в X терминале) Сконфигурировать ваш принтер.
setup
(как root) Сконфигурировать мышь, звуковую карту, клавиатуру, графическую оболочку X-windows и
системные службы. Очень простая в пользовании программа.
alias ls="ls -Fskb --color"
Создать alias - псевдоним для того чтобы одной командой можно было запустить
более сложную комбинацию команд. Поместите создание alias в файл /etc/bashrc если вы хотите, чтобы эти псевдонимы
были доступны всем пользователям вашей системы.
adduser [имя_пользователя]
Зарегистрировать нового пользователя (у вас должны быть права суперюзера).
Например: adduser ivanov . Не забудьте следующим делом настроить пароль пользователя. Директория пользователя
находится в каталоге /home/имя_пользователя.
useradd [имя_пользователя]
То же, что и adduser.
userdel [имя_пользователя]
Удалить пользователя из системы (вы должны зайти как root). С пользовательским
каталогом и не прочитанными письмами удаленного пользователя нужно разбираться отдельно.
groupadd [имя_группы]
Создать новую группу пользователей на вашей системе. Не обязательно создавать группу
непосредственно на основной машине.
passwd
Изменить пароль. Если вы суперпользователь, то вы можете изменить пароль любого зарегистрированного
пользователя набрав команду: passwd имя_пользователя
chmod [права доступа][файл]
(=change mode) Изменить права доступа файлов, чьим владельцем вы являетесь (если
вы root, в этом случае вы можете изменить права доступа для любого файла). Есть три способа доступа к файлу: чтение
- read (r), запись - write (w), исполнение - execute (x) и три типа пользователей: хозяин файла - owner (u), члены
той же группы, что и хозяин файла (g) и все остальные (o). Поверить текущие права доступа можно следующим способом:
ls -l имя_файла
. Если файл доступен всеми способами всем пользователям, то напротив имени файла будет
следующая комбинация букв: rwxrwxrwx
. Первые три буквы - это права доступа для хозяина/хозяйки файла, второй
триплет - права доступа для его/ее группы, следующая тройка - права доступа для остальных. Отсутствие права доступа
показывается как "-".; Например: Эта команда позволит вам установить права доступа на чтение для файла "junk" для
всех (all=user+group+others):
chmod a+r junk
Эта команда отнимет право доступа на исполнение файла у всех кроме пользователя и группы:
chmod o-x junk
Для получение дополнительной информации наберите chmod --help или man chmod или почитайте любое руководство по
Linux.
Вы можете установить права доступа по умолчанию для создаваемых вами файлов с помощью команды "umask" (наберите man
umask).
chown [новый_хозяин][файлы]
chgrp [новая_группа][файлы]
Изменить хозяина и группу для файла.
Вы можете использовать эти две команды, после того как сделали копию файла для кого- либо.
su
(=super user) Вход в систему как суперпользователь (у вас спросят ваш пароль). Набрав "exit" вы вернетесь
в вашу предыдущую пользовательскую оболочку. Пользователь root существует для администрирования системы и команда su
дает быстрый доступ к возможностям суперпользователя, когда вам это потребуется. Никогда не входите в систему под
пользователем root, используйте для этой цели команду su.
ps
(=print status) Вывести список текущих процессов с их IDs (PID) идентификаторами. Используйте ps axu для
того чтобы отобразить все процессы запущенные на вашей системе, которые имеют вас в качестве хозяина (это касается и
процессов которые отцеплены от терминала).
fg
Вернуть фоновый или приостановленный процесс в интерактивное (высокоприоритетное) состояние;
bg
Сделать процесс фоновым. Обратная функция от fg. Может следовать вслед за комбинацией z.
kill
"Убить" процесс. Для начала определите PID "убиваемого" процесса при помощи ps.
killall [имя_программы]
"Убить" все процессы по имени программы.
lpc
(как root) Проверить очередь принтера.
lpq
Вывести список очереди заданий на печать.
lprm [Номер Задание]
Удалить задание из очереди на печать.
nice [имя_программы]
Запустить процесс, установив его приоритет.
renice
Изменить приоритет процесса.