- •II. First steps on the command line
- •5. Man pages
- •6. Working with directories (работа с папками)
- •7.Working with files
- •8. Working with file contents
- •9. The Linux file tree
- •III. Shell expansion
- •10. Commands and arguments
- •11. Control operators
- •12. Variables
- •13. Shell history
- •14. File globbing
- •IV. Pipes and commands
- •Глава 16. Фильтры.
- •16.3 Grep
- •16.7. Sort
- •16.8. Uniq
- •16.9. Comm
- •16.12. Примеры пайпов
- •Глава 17. Основные инструменты Unix
- •17.1. Find
- •17.2. Размещение
- •17.3. Date
- •17.5. Sleep
- •17.6. Time
- •17.7. Gzip - gunzip
- •17.8. Zcat - zmore
- •18.3. Замена и удаление символов (r X X)
- •18.4. Отменить и повторить (u .)
- •18.5. Вырезать, копировать и вставить строчки (dd yy p p)
- •18.6. Вырезать, копировать и вставить строчки (3dd 2yy)
- •18.8. Объединения двух и более линий (j)
- •18.9. Слова (w b)
- •18.10. Сохранить (или нет) и выход (:w :q :q! )
- •18.11. Поиск (/ ?)
- •18.13. Чтение файлов (:r :r !cmd)
- •19.1. Предпосылки
- •19.2. Hello World
- •19.4. Комментарии
- •20.2. Если, затем, иначе (if then else)
- •20.3. If then elif
- •20.4. For loop
- •20.5. While loop
- •21.2. Shift through parameters.
- •21.3. Runtime input.
- •21.3. Sourcing a config file.
- •21.5. Get script options with getopts.
- •21.6. Get shell options with shopt.
- •Глава 22 More scripting.
- •22.1. Eval.
- •22.4. Case.
- •22.5. Shell functions.
- •Раздел VII. Local user management. Глава 23. Users.
- •23.1. Identify yourself.
- •23.2. Users.
- •23.3. Passwords.
- •23.4 Home directories
- •23.5 User shell
- •23.6. Switcj users with su
- •23.7 Run a program as another user
- •23.10 Shell environment
- •Глава 24. Groups
- •24.1 About groups
- •24.2 Groupadd
- •24.3 /Etc/group
- •24.4 Usermod
- •24.5 Groupmod
- •24.6 Groupdel
- •24.7 Groups
- •24.8 Gpasswd
- •24.9 Vigr
III. Shell expansion
Эта глава ознакомит вас с расширениями оболочки (shell expansion), более подробно рассматривая программы и аргументы. Знание этого материала важно, потому что множество команд в Linux системе обрабатываются и изменяются с помощью shell перед выполнением.
Интерфейс командной строки или оболочки, использующийся в большинстве систем Linux называется bash, что расшифровывается как Bourne Again SHell (граница снова оболочка, я не знаю, как это интерпретировать). Bash включает в себя функции от sh (оригинальный Bourne Shell), csh (C shell) и ksh (Korn Shell)
10. Commands and arguments
echo (читается, как «эко») – команда, использующаяся для возможностей shell, действие простое: она эхом выводит то, что было получено:
paul@laika:~$ echo Burtonville
Burtonville
paul@laika:~$ echo Smurfs are blue
Smurfs are blue
arguments
Одна из основных особенностей shell – сканирование командной строки. Когда вы вводите команду в командную строку shell, и нажимаете ввод, тогда shell начинает сканирование этой строки, разбивая её на аргументы. По мере сканирования, shell может внести множество изменений в напечатанные аргументы. Этот процесс и называется расширением оболочки (shell expansion). Когда shell закончила сканирование и изменение строки, тогда команда выполняется.
Аргументы разделяются с помощью знаков пробела или табуляцией, поэтому любое пустое пространство между аргументами убирается при сканировании:
[paul@RHELv4u3 ~]$ echo Hello World
Hello World
[paul@RHELv4u3 ~]$ echo Hello World
Hello World
[paul@RHELv4u3 ~]$ echo Hello World
Hello World
[paul@RHELv4u3 ~]$ echo Hello World
Hello World
Команда echo автоматически добавляет один пробел между введенными аргументами.
Одинарные кавычки позволяют избежать такого удаления пробелов. Содержимое, заключенное в кавычки считается одним аргументом. В примере команда echo имеет только один аргумент:
[paul@RHEL4b ~]$ echo 'A line with single quotes'
A line with single quotes
[paul@RHEL4b ~]$
Для этих же целей можно использовать и двойные кавычки, позднее, при работе с переменными, вы увидите важную разницу между ними.
Внутри кавычек для команды echo могут содержаться спец. символы, для их обработки надо добавить опцию –e (echo –e). Например, можно добавлять \n для перехода на новую строку или \t для табуляции (обычно примерно 8 пробелов):
[paul@RHEL4b ~]$ echo -e "A line with \na newline"
A line with
a newline
[paul@RHEL4b ~]$ echo -e 'A line with \na newline'
A line with
a newline
[paul@RHEL4b ~]$ echo -e "A line with \ta tab"
A line with a tab
[paul@RHEL4b ~]$ echo -e 'A line with \ta tab'
A line with a tab
[paul@RHEL4b ~]$
Внешние и встроенные команды
Не все команды являются внешними для оболочки, некоторые встроены в нее. Внешние команды, это программы, которые имеют собственные бинарные файлы где-то еще в файловой системе. Множество внешних команд расположено в /bin или /sbin. Встроенные команды являются составной частью самой оболочки.
type – команда, позволяющая узнать будет ли команда, переданная shell выполнена как встроенная или как внешняя команда.
paul@laika:~$ type cd
cd is a shell builtin
paul@laika:~$ type cat
cat is /bin/cat
Как видно из примера, cd – встроенная команда, а cat – внешняя. Так же можно определить является ли команда «замененной» (aliased) или нет (об этом позднее).
paul@laika:~$ type ls
ls is aliased to `ls --color=auto'
Некоторые команды имеют одновременно и встроенную и внешнюю версии. Когда одна из этих команд выполняется, то встроенная версия имеет больший приоритет. Чтобы запустить внешнюю версию, необходимо ввести полный путь к команде
paul@laika:~$ type -a echo
echo is a shell builtin
echo is /bin/echo
paul@laika:~$ /bin/echo Running the external echo command...
Running the external echo command...
which – команда, которая ищет бинарники в среде переменных $PATH. В примере видно, что cd – встроенная команда, тогда как cp, rm, mv, mkdir, pwd и which – внешние команды.
[root@RHEL4b ~]# which cp ls cd mkdir pwd
/bin/cp
/bin/ls
/usr/bin/which: no cd in (/usr/kerberos/sbin:/usr/kerberos/bin:...
/bin/mkdir
/bin/pwd
Замещения (aliases). Для удобства запоминания существующей команды, или для удобства ввода параметров, с помощью команды alias можно создавать «псевдонимы» для команд:
[paul@RHELv4u3 ~]$ cat count.txt
one
two
three
[paul@RHELv4u3 ~]$ alias dog=tac
[paul@RHELv4u3 ~]$ dog count.txt
three
two
one
Так же можно его использовать для сокращения существующей команды:
paul@laika:~$ alias ll='ls -lh --color=auto'
paul@laika:~$ alias c='clear'
paul@laika:~$
Можно так же использовать псевдонимы для придания команде некоторых функций по умолчанию, например чтобы команда rm всегда шла с опцией –i:
[paul@RHELv4u3 ~]$ rm -i winter.txt
rm: remove regular file `winter.txt'? no
[paul@RHELv4u3 ~]$ rm winter.txt
[paul@RHELv4u3 ~]$ ls winter.txt
ls: winter.txt: No such file or directory
[paul@RHELv4u3 ~]$ touch winter.txt
[paul@RHELv4u3 ~]$ alias rm='rm -i'
[paul@RHELv4u3 ~]$ rm winter.txt
rm: remove regular empty file `winter.txt'? no
[paul@RHELv4u3 ~]$
В некоторых дистрибутивах подобные псевдонимы заданы уже по умолчанию, для защиты пользователя от непреднамеренного удаления файла.
Вы можете просмотреть, что задано, для какого замещения добавив их названия после команды alias. Если вы не добавите никаких аргументов, то увидите полный список текущих замещений.
paul@laika:~$ alias c ll
alias c='clear'
alias ll='ls -lh --color=auto'
Чтобы снять замещение, используйте команду unalias:
[paul@RHEL4b ~]$ which rm
/bin/rm
[paul@RHEL4b ~]$ alias rm='rm -i'
[paul@RHEL4b ~]$ which rm
alias rm='rm -i'
/bin/rm
[paul@RHEL4b ~]$ unalias rm
[paul@RHEL4b ~]$ which rm
/bin/rm
[paul@RHEL4b ~]$
Вы можете отобразить, что именно происходит при shell expansion (расширении оболочки) с помощью команды set -x и прекратить отображение командой set +x. Возможно, вам понадобится это далее в нашем курсе, или когда вы сомневаетесь, что именно делает shell с вашей командой.
[paul@RHELv4u3 ~]$ set -x
++ echo -ne '\033]0;paul@RHELv4u3:~\007'
[paul@RHELv4u3 ~]$ echo $USER
+ echo paul
paul
++ echo -ne '\033]0;paul@RHELv4u3:~\007'
[paul@RHELv4u3 ~]$ echo \$USER
+ echo '$USER'
$USER
++ echo -ne '\033]0;paul@RHELv4u3:~\007'
[paul@RHELv4u3 ~]$ set +x
+ set +x
[paul@RHELv4u3 ~]$ echo $USER
paul