Параметры командной строки - как данные для программы.
Содержатся эти параметры в переменных с номерами. Например:
Также существуют две вспомогательные переменные:
Называем, передаем и запускаем:
Получим:
Содержатся эти параметры в переменных с номерами. Например:
$0 — имя скрипта, $1 — первый параметр, $2 — второй параметр и т. д. Также существуют две вспомогательные переменные:
$# содержит количество переданных аргументов; $@ содержит все аргументы, переданные скрипту, разделенные пробелами.Называем, передаем и запускаем:
./q.sh 1 2 5 41Получим:
Имя скрипта: ./q.shКоличество переданных аргументов: 4arg='1'arg='2'arg='5'arg='41'Максимально простой вариант отладки bash- скриптов по шагам.
- Команда
- Команда
- Переменная окружения
Запускаем скрипт.
Перед выполнением каждой команды выводится то, что будет исполняться, затем интерпретатор начинает ожидать нажатия клавиши
Если понимаем, что что-то пошло не так, нажимаем
- Команда
trap перехватывает сигнал DEBUG, посылаемый перед выполнением команды- Команда
read ожидает ввода чего-нибудь с клавиатуры (в данном случае нам нужно только ENTER либо Ctrl+C)- Переменная окружения
$BASH_COMMAND, валидная внутри обработчика команды trap.Запускаем скрипт.
Перед выполнением каждой команды выводится то, что будет исполняться, затем интерпретатор начинает ожидать нажатия клавиши
<ENTER>.Если понимаем, что что-то пошло не так, нажимаем
Ctrl+C и выходим из отладки.Как вы знаете, известные сочетания клавиш
Вместо них используйте сочетания клавиш
Ctrl+C (копировать) и Ctrl+V (вставить) не дадут тех результатов в оболочке Bash, которых бы мы хотели.Вместо них используйте сочетания клавиш
Shift+Ctrl+C и Shift+Ctrl+V. Вы также можете вырезать и вставлять текст, щелкнув правой кнопкой мыши и выбрав соответствующую операцию в меню. И это может оказаться удобней.Горячие клавиши VIM
Vim — это продвинутый текстовый редактор с широкими возможностями настройки.
Для перемещения по файлу:
•
•
•
•
•
•
•
•
Если перед тем как нажать кнопку буквы нажать цифру, то эта команда будет повторена несколько раз. Например,
Для переключения в режим редактирования:
•
•
•
•
•
•
•
Можно запустить редактор и потыкаться во всем самостоятельно или же пройти курс обучения, который встроен в vim, набрав:
Vim — это продвинутый текстовый редактор с широкими возможностями настройки.
Для перемещения по файлу:
•
h - на один символ влево;•
l - на один символ вправо;•
j - на одну строку вниз;•
k - на одну строку вверх;•
w - на слово вправо;•
b - на слово влево;•
H - перейти в низ экрана;•
G - перейти в конец файла;Если перед тем как нажать кнопку буквы нажать цифру, то эта команда будет повторена несколько раз. Например,
3j переведет курсор на три строки вверх.Для переключения в режим редактирования:
•
i - вставить текст с позиции курсора, символ под курсором будет заменен;•
I - вставить текст в начало строки;•
a - добавить текст начиная от позиции курсора;•
o - вставить новую строку после этой и начать редактирование;•
O - вставить новую строку перед этой и начать редактирование;•
r - заменить текущий символ;•
R - заменить несколько символов.Можно запустить редактор и потыкаться во всем самостоятельно или же пройти курс обучения, который встроен в vim, набрав:
vimtutorКоманда
Одна из возможностей - отображение параметров сетевого интерфейса.
Если ввести
Поля вывода ifconfig:
•
•
•
•
•
•
•
•
•
•
•
Даже если сетевые интерфейсы не настроены, в выводе должен быть интерфейс
Если его нет, служба
ifconfig Одна из возможностей - отображение параметров сетевого интерфейса.
Если ввести
ifconfig в терминал, то получим список активных интерфейсов. Поля вывода ifconfig:
•
HWaddr - аппаратный MAC-адрес;•
inet addr - IPv4-адрес интерфейса;•
inet6 addr - IPv6-адрес интерфейса;•
Bcast - широковещательный адрес•
Mask - маска сети•
MTU - значение MTU (Maximum transmission unit - максимальный объём данных, который может быть передан за одну итерацию); •
collision - счетчик коллизий, если количество коллизий больше 0, с вашей сетью творится что-то неладное; •
RX packets - количество принятых пакетов; •
TX packets - количество переданных пакетов; •
RX bytes - количество принятых байтов; •
TX bytes - количество переданных байтов. Даже если сетевые интерфейсы не настроены, в выводе должен быть интерфейс
lo (Local Loopback). Если его нет, служба
network не запущена. Для запуска введите: sudo service network startДля создания ссылок служит команда
Создается жесткая ссылка
Создается символическая ссылка
При модификации ссылки (любой:
Команда
Жесткие ссылки в большинстве дистрибутивов никак не выделятся.
ln: ln some_file link1Создается жесткая ссылка
link1, ссылающаяся на файл some_file.ln -s some_file link2 Создается символическая ссылка
link2, которая ссылается на этот же текстовый файл some_file. При модификации ссылки (любой:
link1 или link2), автоматически модифицируется исходный файл some_file.Команда
ls отобразит символическую ссылку другим цветом (каким именно - зависит от дистрибутива).Жесткие ссылки в большинстве дистрибутивов никак не выделятся.
Ранее в [ одном из постов ] упоминался способ создания множества однотипных файлов через скобки.
Для подобных целей можно использовать:
Создадутся file1, file2, ...file500
Следующим примером для проекта создаем файлы:
myapp.html,
myapp.css,
myapp.php,
myapp.js
(нигде в перечислении пробелов быть не должно!)
Создаем директории:
Для подобных целей можно использовать:
touch file{1..500}Создадутся file1, file2, ...file500
Следующим примером для проекта создаем файлы:
myapp.html,
myapp.css,
myapp.php,
myapp.js
touch myapp.{html,css,php,js}(нигде в перечислении пробелов быть не должно!)
Создаем директории:
mkdir {templates,html,js,css}Архиватор gzip.
Утилита сжатия и восстановления файлов.
Именно в этом формате поставляется большинство программ в исходных текстах. От того и популярность.
Сам по себе
Например, есть несжатый архив some_archive.tar, который мы хотим сжать. Для этого выполним:
Ключ
Извлечем содержимое полученного архива:
Ниже приведены все ключи.
Утилита сжатия и восстановления файлов.
Именно в этом формате поставляется большинство программ в исходных текстах. От того и популярность.
Сам по себе
gzip "не умеет" сжимать несколько файлов, поэтому перед сжатием требуемые файлы обрабатываются архиватором tar, а потом полученный файл передается архиватору gzip. Отсюда созданные архивы получают двойное расширение tar.gz. Например, есть несжатый архив some_archive.tar, который мы хотим сжать. Для этого выполним:
gzip -k some_archive.tar Ключ
-k позволяет сохранить несжатый файл. Без его указания исходный файл будет удален.Извлечем содержимое полученного архива:
gzip -kd some_archive.tar.gzНиже приведены все ключи.
Полезные комбинации для ускорения работы.
Поиск введенной ранее команды, щЁлкая клавишу «вверх», может затянуться на некоторое время. Удобнее будет нажать
Поиск введенной ранее команды, щЁлкая клавишу «вверх», может затянуться на некоторое время. Удобнее будет нажать
Ctrl + r и начать набирать команду. Оболочка будет предлагать автозаполнение из истории. Когда искомое будет найдено, останется только нажать ENTER
Команду clear для очистки экрана терминала можно заменить сочетанием Ctrl + l
Команду exit для выхода из терминала можно заменить сочетанием Ctrl + dДля обозначения домашнего каталога в командной строке применяются:
•
•
Другие специальные способы обозначения каталогов:
•
•
•
•
•
$HOME — эта переменная окружения отображает имя домашнего каталога;•
~ — тильда (~) указывает на домашний каталог в командной строке. Ее можно использовать также для того, чтобы идентифицировать чужой домашний каталог. Например, ~vasya указывает на домашний каталог пользователя vasya (вероятно, /home/vasya). Если бы я хотел перейти в каталог /home/vasya/test, то ввел бы cd ~vasya/test. Другие специальные способы обозначения каталогов:
•
. — точка (.) отображает текущий каталог;•
.. — две точки (..) относятся к каталогу, расположенному непосредственно над текущим каталогом;•
$PWD — эта переменная окружения ссылается на текущий рабочий каталог;•
$OLDPWD — эта переменная окружения ссылается на предыдущий рабочий каталог до смены его на текущий. (Ввод команды cd возвращает пользователя в каталог, представленный в виде $OLDPWD.)Для добавления самописных команд или скриптов оболочки в систему, необходимо поместить их в каталог
В одних системах Linux этот каталог автоматически добавляется в ваш путь, а в других может потребоваться создать этот каталог или добавить его в переменную
Таким образом, если вы добавляете команду в каталог
Чтобы сделать команды доступными для всех пользователей, добавьте их в каталог
bin в своем каталоге home (например, /home/vasya/bin для пользователя с именем vasya). В одних системах Linux этот каталог автоматически добавляется в ваш путь, а в других может потребоваться создать этот каталог или добавить его в переменную
PATH. Таким образом, если вы добавляете команду в каталог
bin с разрешением исполнения, ее можно будет использовать, просто введя имя в командной строке интерпретатора. Чтобы сделать команды доступными для всех пользователей, добавьте их в каталог
/usr/local/bin.К примеру, расширить раздел подкачки или погонять файлы на сервере, чтобы посмотреть его скорость - помогут искусственно созданные пустые файлы определенного размера.
Размер задается обозначениями:
•
•
•
•
•
•
•
Размер задается обозначениями:
•
KB • KiB • K•
MB • MiB • M•
GB • GiB • G•
TB • TiB • T•
PB • PiB • P•
ZB • ZiB • Z•
YB • YiB • YPipe
Или просто - конвейер. Это однонаправленный канал межпроцессного взаимодействия. Назван по аналогии с трубопроводом.
Конвейеры чаще всего используются в shell-скриптах для связи нескольких команд путем перенаправления вывода одной команды (
Например:
grep выполняет регистронезависимый поиск строки “error” в файле log, но результат поиска не выводится на экран, а перенаправляется на вход (
Или просто - конвейер. Это однонаправленный канал межпроцессного взаимодействия. Назван по аналогии с трубопроводом.
Конвейеры чаще всего используются в shell-скриптах для связи нескольких команд путем перенаправления вывода одной команды (
stdout) на вход (stdin) последующей, используя символ конвейера ‘|’:cmd1 | cmd2 | .... | cmdNНапример:
grep -i 'error' ./log | wc -lgrep выполняет регистронезависимый поиск строки “error” в файле log, но результат поиска не выводится на экран, а перенаправляется на вход (
stdin) команды wc, которая в свою очередь выполняет подсчет количества строк, в которых содержится одно и более раз слово "error".Файлы, получаемые из ОС Windows, часто имеют в конце каждой строки символы возврата каретки и перевода строки. В системах Linux и macOS для завершения строки предусмотрен только символ разрыва строки.
Если вы переносите файл в Linux и хотите избавиться от дополнительных возвращаемых символов, можно воспользоваться командой
И наоборот, с помощью команды
Параметр
Если вы переносите файл в Linux и хотите избавиться от дополнительных возвращаемых символов, можно воспользоваться командой
tr: tr -d '\r' < fileWind.txt > fileFixed.txtИ наоборот, с помощью команды
sed можно преобразовать конец строки файлов из ОС Linux в конец строки для ОС Windows: sed -i 's/$/\r/' fileLinux.txt Параметр
-i вносит изменения на месте и записывает их обратно во входной файл.В посте [ 10 простых трюков ] было упоминание про команду
А теперь смотрим на пример последовательности действий:
Пробел перед второй командой не добавит эту команду в историю. а значит с sudo будет запущено не то. что надо.
Вывод: Осознанный пробел перед командой не добавляет эту команду в историю.
Случайный пробел перед командой приводит к неприятным последствиям.
sudo !! , которая запустит предыдущую команду с привилегиями. А теперь смотрим на пример последовательности действий:
echo 'Запусти без привилегий' echo 'Запусти только через sudo'sudo !!Пробел перед второй командой не добавит эту команду в историю. а значит с sudo будет запущено не то. что надо.
Вывод: Осознанный пробел перед командой не добавляет эту команду в историю.
Случайный пробел перед командой приводит к неприятным последствиям.
Сравнить два файла, находящихся рядом, и показать все их различия можно командой
К примеру вывести только строки, которые отличаются:
Некоторые параметры:
sdiffК примеру вывести только строки, которые отличаются:
sdiff -s some_file1 some_file2Некоторые параметры:
-a — рассматривает все файлы как текстовые. -i — игнорирует регистр. -s — удаляет общие строки для двух файлов. -w — определяет максимальное количество символов для вывода в строке.По параметрам:
Переменная
-c — для создания архивного файла, -z — для архивирования файла и -f — для указания имени файла вывода.Переменная
HOSTNAME автоматически устанавливается оболочкой на имя текущего хоста. Файл вывода будет иметь то же имя, что и система, что поможет позже с организацией, если журналы собираются из нескольких систем.Для извлечения отдельных частей файла можно использовать команду
К примеру имеется файл
В файле каждое поле разделено пробелом. Для извлечения IP-адреса (второе поле) используйте следующую команду:
Получаем:
Параметр
Параметр
cut.К примеру имеется файл
some_file из двух строк, каждая с тремя столбцами данных:08/06/2022 192.168.10.14 test.html 09/06/2022 192.168.10.185 login.htmlВ файле каждое поле разделено пробелом. Для извлечения IP-адреса (второе поле) используйте следующую команду:
cut -d' ' -f2 some_file Получаем:
192.168.10.14192.168.10.185Параметр
-d' ' указывает, что в качестве разделителя полей используется пробел. Параметр
-f2 определяет, что команде нужно вырезать и отобразить второе поле, в данном случае IP-адреса.