Архив рубрики: Linux

Ваш путеводитель по одной из самых популярных и влиятельных операционных систем в мире. От базовых команд и установки дистрибутивов до глубокого изучения ядра и сетевых технологий — здесь вы найдете статьи и руководства на самые разные темы, связанные с Linux. Независимо от вашего уровня подготовки, здесь найдется что-то интересное и полезное.

Как обновить Ubuntu 17.10 до 18.04

Недавно вышла новая версия Ubuntu с длительным сроком поддержки - 18.04. На следующие несколько лет она будет основным вариантом Ubuntu. В ней было не так много изменений. Среди основных можно отметить использование Xorg вместо Wayland, обновление ядра без перезагрузки, а также новую систему конфигурации сети Netplan. В графическом интерфейсе заметных улучшений было мало.

Если у вас на компьютере ещё не установлена Ubuntu, то вы можете инсталлировать её с нуля. А вот уже имеющуюся Ubuntu 17.10 или 16.04 достаточно просто обновить. В этой статье мы рассмотрим, как обновить Ubuntu 17.10 до 18.04.

Обновление Ubuntu до 18.04

Вообще есть два основных способа обновления: через терминал и через графический интерфейс. Но почему-то у меня  обновление до Ubuntu 18.04 через графический интерфейс работать не стало - то ли разработчики что-то сломали, то ли у меня система неправильная. Поэтому сразу будем рассматривать обновление через терминал. Плюс этого способа в том, что вы будете видеть подробно, что происходит. Обновление на сервере и в обычной десктопной версии не будет ничем отличаться.

1. Обновление существующей системы

Прежде, чем мы сможем обновить Ubuntu до 18.04, нам необходимо актуализировать все пакеты до самых последних версий, чтобы избежать всевозможных проблем. Для этого используйте такие команды:

sudo apt update
sudo apt upgrade
sudo apt dist-upgrade

2. Очистка системы

Следующий шаг - очистка системы от ненужных пакетов, а также удаление всех сторонних PPA-репозиториев. Это тоже желательно сделать, чтобы получить меньше проблем - после установки вы сможете добавить свои репозитории обратно. Сначала очищаем пакеты:

sudo apt autoremove
sudo apt clean

Затем удаляем репозитории с помощью утилиты ppa-purge, если она у вас ещё не установлена, то необходимо установить:

sudo apt install ppa-purge

find /etc/apt/sources.list.d -type f -name "*.list" -print0 | \
while read -d $'\0' file; do awk -F/ '/deb / && /ppa\.launchpad\.net/ {system("sudo ppa-purge ppa:"$4"/"$5)}' "$file"; done

3. Настройка поиска новой версии системы

Тут можно пойти двумя способами. В графическом варианте будет удобнее использовать утилиту Программы и обновления. Откройте её из главного меню системы:

Перейдите на вкладку Обновления:

Здесь выберите Получать обновления - Для любой новой версии.

Затем вам останется ввести пароль и закрыть окно. Можете переходить к следующему шагу. В серверной версии системы надо использовать только терминал, откройте /etc/update-manager/release-upgrades:

sudo vi /etc/update-manager/release-upgrades

И убедитесь, что там есть строчка:

Prompt=normal

Если её нет, то надо добавить.

4. Запуск обновления

Для запуска обновления Ubuntu наберите команду:

sudo do-release-upgrade -d

 

Опцию -d использовать обязательно, так как без неё утилита не видит новую версию Ubuntu.

5. Подтверждение обновления

Система загрузит необходимые метаданные, просчитает время, необходимое для загрузки пакетов, и попросит подтвердить обновление ubuntu 17.10 до 18.04:

После завершения загрузки пакетов отменить изменения будет невозможно.

6. Раскладка клавиатуры

Через некоторое время утилита попросит вас выбрать сочетание клавиш для переключения раскладки клавиатуры:

7. Раздел для загрузчика

Затем вам предстоит выбрать место для установки загрузчика Grub, его надо устанавливать на жёсткий диск, например в /dev/sda, а не на раздел. Чтобы выделить нужный пункт, используйте пробел:

8. Очистка ненужных пакетов

Следующий этап - очистка пакетов, которые больше не нужны:

9. Завершение обновления и перезагрузка

Затем программа сообщит, что обновление Ubuntu почти завершено и для полного завершения надо перезагрузить систему, соглашайтесь:

10. Завершение настройки

После перезагрузки вы можете настроить LivePatch для обновления ядра, отключить передачу данных в Canonical и установить необходимые вам приложения:

11. Готово

Обновление до Ubuntu 18.04 полностью завершено, чтобы убедится, что всё прошло успешно, смотрим версию системы:

cat /etc/lsb_release

Как видите, теперь на компьютере установлена самая новая версия - Ubuntu 18.04 LTS.

Выводы

В этой небольшой статье мы рассмотрели, как обновить Ubuntu 17.10 до 18.04. Как видите, это не очень сложная задача, которая не требует много времени. У меня на весь апгрейд ушло около 40 минут. Если вы хотите попробовать обновление через графический интерфейс, смотрите статью про обновление Ubuntu 17.10, там всё подробно описано, и здесь ничего не изменилось. А вы уже устанавливали/обновляли Ubuntu 18.04? Как вам эта система? Напишите в комментариях!

Установка Ubuntu 18.04

Недавно создатели представили Ubuntu 18.04. Каждый четвёртый релиз называется LTS и имеет длительный срок поддержки, на протяжении двух лет, и эта версия является именно такой. А это означает, что на ближайшие несколько лет - это основной вариант Ubuntu как для домашних пользователей, так и для серверов.

В этом релизе было не так много изменений, но самым заметным стал возврат к использованию X11 по умолчанию вместо Wayland. Также добавили режим минимальной установки и возможность обновить ядро без перезагрузки по умолчанию. Читайте более подробно о том, что нового в Ubuntu 18.04 в отдельной статье, а в этой мы поговорим,  как выполняется установка Ubuntu 18.04 на компьютере или ноутбуке.

Читать далее Установка Ubuntu 18.04

Удалить пользователя из группы Linux

Группы пользователей в Linux используются для тонкой настройки доступа к файлам операционной системы. И поскольку в Linux все объекты ОС являются файлами, то с помощью групп можно настроить или ограничить доступ к любой возможности системы.

В одной из предыдущих статей мы говорили о том, как посмотреть список групп Linux, в которых состоит пользователь. В этой же заметке разберём, как удалить юзера из группы Linux, чтобы он больше не мог иметь доступа к файлам, которые находятся в этой группе.

Удаление пользователя из группы Linux

Очень много слов вступления, а дела не более чем на одну команду. Мы будем использовать gpasswd. Она имеет такой синтаксис:

gpasswd -d пользователь группа

Опция -d сообщает, что нужно выполнить удаление, далее мы указываем пользователя, с которым будем работать и в конце группу, из которой его надо удалить. Теперь откройте терминал с помощью сочетания клавиш Ctrl+Alt+T и наберите следующую команду, чтобы удалить пользователя testuser из группы wheel:

sudo gpasswd -d testuser wheel

С помощью команды usermod вы можете удалить текущего пользователя из всех дополнительных групп:

sudo usermod -G "" имя_пользователя

Только будьте осторожны с этой командой, применяя её к текущему пользователю, иначе вы удалите себя из группы sudo и больше не сможете выполнять административные действия. В Ubuntu, где нет прямого доступа к пользователю root это может создать серьёзные проблемы для новичков, смотрите статью сброс пароля в Ubuntu.

В некоторых дистрибутивах можно использовать ещё и команду deluser. Точно также указываем сначала имя пользователя, а затем группу, из которой собираемся его удалить:

sudo deluser testuser adm

Если вы случайно удалили пользователя из группы, в которой он должен быть, можно всё вернуть обратно. Смотрите статью "как добавить пользователя в группу Linux".

Выводы

В этой небольшой статье мы рассмотрели, как удалить пользователя из группы Linux. Как видите, это совсем не сложно, только надо соблюдать осторожность, чтобы не удалить ничего лишнего и не создать себе проблем. Если у вас остались вопросы, спрашивайте в комментариях! Почитать более подробно о группах можно в статье "группы пользователей Linux".

Как узнать id пользователя Linux

Иногда возникает необходимость узнать id пользователя Linux. Это может понадобиться, если вы хотите вручную добавить группу для пользователя или вам нужно выполнить другие операции с файлами /etc/passwd или /etc/shadow.

В этой небольшой заметке мы поговорим о том, как посмотреть id пользователя с помощью различных команд в Linux.

Как узнать id пользователя в Linux

Самый простой способ посмотреть идентификатор текущего пользователя - использовать команду id, она выводит не только сам UID, но и идентификатор группы пользователя, а также основные группы этого пользователя:

id

Первым выводится именно id пользовтеля. Если вам нужно узнать информацию о другом пользователе, вы можете передать его имя в параметры утилиты:

id имя_пользователя

Когда необходимо вывести только id пользователя:

id -u имя_пользовтеля

Если вам надо узнать только id группы определенного пользователя, то используйте опцию -g:

id -g имя_пользователя

Есть ещё несколько способов посмотреть id. Например, для текущего пользователя его можно найти в переменной окружения UID:

echo $UID

Ещё один вариант - утилита getent:

getent passwd имя_пользователя

 

Или смотрим содержимое файла /etc/passwd с помощью команды grep:

grep имя_пользователя /etc/passwd

Здесь первый цифровой параметр - это сам id, а второй, который расположен за двоеточием, - это GID.

Выводы

В этой небольшой статье мы рассмотрели, как узнать id пользователя Linux. Если у вас остались вопросы, спрашивайте в комментариях!

Команда tar в Linux

В качестве инструмента для архивации данных в Linux используются разные программы. Например архиватор Zip Linux, приобретший большую популярность из-за совместимости с ОС Windows. Но это не стандартная для системы программа. Поэтому хотелось бы осветить команду tar Linux — встроенный архиватор.

Изначально tar использовалась для архивации данных на ленточных устройствах. Но также она позволяет записывать вывод в файл, и этот способ стал широко применяться в Linux по своему назначению. Здесь будут рассмотрены самые распространенные варианты работы с  этой утилитой.
Читать далее Команда tar в Linux

Установка программ в Manjaro

Manjaro — самый популярный дистрибутив GNU/Linux, как минимум, в течение последних месяцев в рейтинге Distrowatch. Причин для этого более чем достаточно. В статье будет рассмотрен один из несомненных плюсов системы, который по удобству, качеству и простоте является одним из самых привлекательных для пользователей, — установка программ в Manjaro.

Стандартной средой рабочего стола в Manjaro является Xfce. Именно в ней мы опробуем два варианта установки ПО: графический и с помощью терминала.

Установка программ в Manjaro Linux

Manjaro имеет собственный список источников программного обеспечения, рядом с которым также работает репозиторий Arch (в том числе и пользовательский репозиторий AUR).

1. Установка пакетов Manjaro через графический интерфейс

По умолчанию система использует pamac в качестве менеджера управления программами, которая является графическим вариантом консольной утилиты pacman, о которой будет сказано позже. Он может работать одновременно со стандартным репозиторием и с AUR.

Чтобы запустить его, откройте меню Xfce → Настройки → Установка и удаление программ (или воспользуйтесь поиском).

Запуск Pamac

Pamac имеет схожий с подобными программами интерфейс, в котором есть возможность сортировать все программы по категориям, группам и т.д.

Pamac

Установленные программы имеют окрашенное зеленым цветом поле Состояние. Чтобы установить программу Manjaro, выберите необходимый фильтр ПО (например Категории). Укажите один из предложенных разделов:

Категория Графика
Укажите одну или несколько программ для установки, поставив галочку в поле Состояние → Применить.

Выбор программ для установки

При необходимости установить дополнительные зависимости ПО, pamac выдаст соответствующее окно с полным их перечнем → Далее.

Список зависимостей ПО

При первой попытке установки, за время работы pamac будет запрошен пароль пользователя. Введите его и нажмите Аутентифицировать.

Ввод пароля pamac

Начнётся инсталляция. Для просмотра подробностей установки нажмите кнопку Подробно.

Подробно

По окончании процесса появится сообщение об успешном завершении транзакции с соответствующим уведомлением.

Установка завершена Pamac

С помощью стрелки влево вверху окна программы можно вернуться к предыдущему виду. Установленные приложения появятся в необходимом разделе меню.

Проверка после установки

Таким образом выбранные программы будут установлены в систему графически.

2. Установка пакетов с помощью pacman

Для инсталляции ПО в терминале используется утилита pacman. Этот метод подходит для тех, кто привык управлять установкой и удалением программ «вручную». В некоторых случаях этим способом получается совершать некоторые операции с ПО быстрее, чем в графическом варианте.

Главное отличие pacman от pamac в том, что первый не производит установку из AUR. Для этого используется утилита yaourt. Рассмотрим их по очереди.

Чтобы установить программу с помощью pacman, используйте следующую инструкцию:

sudo pacman -S NAME

  • sudo — выполнить команду от имени суперпользователя;
  • pacman — название управляющей утилиты;
  • -S — указание установить программу;
  • NAME — имя программы в том виде, в каком оно указано в репозитории.

Например, чтобы установить редактор vim, откройте меню Xfce → Настройки → Терминал Xfce.

Терминал Xfce

Введите команду установки и, при необходимости, подтвердите паролем.

sudo pacman -S vim

Обратите внимание, что по умолчанию ввод пароля не отображается на экране в целях безопасности.

Установка vim

Далее pacman предложит установить пакет в Manjaro, если его имя было введено правильно и он находится в репозитории. Чтобы подтвердить выбор, введите Y и нажмите Enter. Обратите внимание, что в данном случае регистр вводимой буквы не имеет особого значения: большая буква означает, что этот вариант будет выбран по умолчанию, если вы нажмете Enter без точного указания.

Подтверждение установки

Дождитесь, пока установка программы завершится и появится приглашение ввода новой команды.

Установка программы завершена Pacman

Таким образом будет установлен текстовый редактор vim.

3. Установка пакетов с помощью yaourt

Эта утилита используется для установки приложений из пользовательского репозитория ­— AUR. Но по умолчанию она не установлена, так как AUR нужно включить вручную. Для этого откройте pamac. В меню программы выберите Настройки.

Меню pamac

Во вкладе AUR включите его поддержку.

AUR

Закройте pamac. Для установки yaourt воспользуйтесь командой:

sudo pacman -S yaourt

Чтобы установить приложение из AUR, используйте такую инструкцию:

yaourt NAME

где NAME — имя устанавливаемой программы. Например, для установки программы skype введите команду:

yaourt skype

Поскольку в AUR находится много пакетов, в названиях которых содержится skype, необходимо выбрать из списка тот, который необходим. В данном случае это пакет под номером 20. Введите его и нажмите Enter.

Выбор пакета AUR

Далее yaourt предупредит, что вы устанавливаете выбранную программу на свой страх и риск и предложит отредактировать файл PKGBUILD, являющийся инструкцией по сборке ПО из исходного кода. На это отвечайте отрицательно буквой N. Обратите внимание, что с этого момента момента ввод буквы не требует подтверждения. Затем отобразится список устанавливаемых пакетов. Подтвердите выбор с помощью буквы или нажатием Enter.

Отказ от PKGBUILD

Начнётся процесс скачивания и сборки пакетов. Когда программа будет готова к установке, появится соответствующий вопрос. Ответьте утвердительно.

Подтверждение yaourt

Запустится установка пакетов Manjaro, где будет показана итоговая информацию по изменению размера свободного места на диске. Подтвердите решение.

Установка программы Yaourt

После этого программа будет установлена на компьютер и отобразится в соответствующей категории.

Выводы

Установка программ в Manjaro возможна в двух вариантах: графическом и консольном. Отличительная особенность установки в терминале - использование разных утилит для инсталляции ПО из стандартных репозиториев и AUR (а именно — pacman и yaourt).

Вывод в файл Bash в Linux

Часто возникает необходимость, чтобы скрипт командного интерпретатора Bash выводил результат своей работы. По умолчанию он отображает стандартный поток данных — окно терминала. Это удобно для обработки результатов небольшого объёма или, чтобы сразу увидеть необходимые данные.

В интерпретаторе можно делать вывод в файл Bash. Применяется это для отложенного анализа или сохранения массивного результата работы сценария. Чтобы сделать это, используется перенаправление потока вывода с помощью дескрипторов.

Стандартные дескрипторы вывода

В системе GNU/Linux каждый объект является файлом. Это правило работает также для процессов ввода/вывода. Каждый файловый объект в системе обозначается дескриптором файла — неотрицательным числом, однозначно определяющим открытые в сеансе файлы. Один процесс может открыть до девяти дескрипторов.

В командном интерпретаторе Bash первые три дескриптора зарезервированы для специального назначения:

Дескриптор Сокращение Название
0 STDIN Стандартный ввод
1 STDOUT Стандартный вывод
2 STDERR Стандартный вывод ошибок

Их предназначение — обработка ввода/вывода в сценариях. По умолчанию стандартным потоком ввода является клавиатура, а вывода — терминал. Рассмотрим подробно последний.

Вывод в файл Bash

1. Перенаправление стандартного потока вывода

Для того, чтобы перенаправить поток вывода с терминала в файл, используется знак «больше» (>).

#!/bin/bash
echo "Строка 1"
echo "Промежуточная строка" > file
echo "Строка 2" > file

Как результат, "Строка 1" выводится в терминале, а в файл file записывается только "Строка 2":

Связано это с тем, что > перезаписывает файл новыми данными. Для того, чтобы дописать информацию в конец файла, используется два знака «больше» (>>).

#!/bin/bash
echo "Строка 1"
echo "Промежуточная строка" > file
echo "Строка 2" >> file

Здесь "Промежуточная строка" перезаписала предыдущее содержание file, а "Строка 2" дописалась в его конец.

Если во время использования перенаправления вывода интерпретатор обнаружит ошибку, то он не запишет сообщение о ней в файл.

#!/bin/bash
ls badfile > file2
echo "Строка 2" >> file2

В данном случае ошибка была в том, что команда ls не смогла найти файл badfile, о чём Bash и сообщил. Но вывелось сообщение в терминал, а не записалось в файл. Всё потому, что использование перенаправления потоков указывает интерпретатору отделять мух от котлет ошибки от основной информации.

Это особенно полезно при выполнении сценариев в фоновом режиме, где приходится предусматривать вывод сообщений в журнал. Но так как ошибки в него писаться не будут, нужно отдельно перенаправлять поток ошибок для того, чтобы выполнить их вывод в файл Linux.

2. Перенаправление потока ошибок

В командном интерпретаторе для обработки сообщений об ошибках предназначен дескриптор STDERR, который работает с ошибками, сформированными как от работы интерпретатора, так и самим скриптом.

По умолчанию STDERR указывает в то же место, что и STDOUT, хотя для них и предназначены разные дескрипторы. Но, как было показано в примере, использование перенаправления заставляет Bash разделить эти потоки.

Чтобы выполнить перенаправление вывода в файл Linux для ошибок, следует перед знаком«больше» указать дескриптор 2.

#!/bin/bash
ls badfile 2> errors
echo "Строка 1" > file3
echo "Строка 2" >> file3

В результате работы скрипта создан файл errors, в который записана ошибка выполнения команды ls, а в file3 записаны предназначенные строки. Таким образом, выполнение сценария не сопровождается выводом информации в терминал.

Пример того, как одна команда возвращает и положительный результат, и ошибку:

ls -lh test badtest 2> errors

Команда ls попыталась показать наличие файлов test и badtest. Первый присутствовал в текущем каталоге, а второй — нет. Но сообщение об ошибке было записано в отдельный файл.

Если возникает необходимость выполнить вывод команды в файл Linux, включая её стандартный поток вывода и ошибки, стоит использовать два символа перенаправления, перед которыми стоит указывать необходимый дескриптор.

ls -lh test test2 badtest 2> errors 1> output

 

Результат успешного выполнения записан в файл output, а сообщение об ошибке — в errors.

По желанию можно выводить и ошибки, и обычные данные в один файл, используя &>.

ls -lh test badtest &> output

Обратите внимание, что Bash присваивает сообщениям об ошибке более высокий приоритет по сравнению с данными, поэтому в случае общего перенаправления ошибки всегда будут располагаться в начале.

Временные перенаправления в скриптах

Если есть необходимость в преднамеренном формировании ошибок в сценарии, можно каждую отдельную строку вывода перенаправлять в STDERR. Для этого достаточно воспользоваться символом перенаправления вывода, после которого нужно использовать & и номер дескриптора, чтобы перенаправить вывод в STDERR.

#!/bin/bash
echo "Это сообщение об ошибке" >&2
echo "Это нормальное сообщение"

При выполнении программы обычно нельзя будет обнаружить отличия:

Вспомним, что GNU/Linux по умолчанию направляет вывод STDERR в STDOUT. Но если при выполнении скрипта будет перенаправлен поток ошибок, то Bash, как и полагается, разделит вывод.

Этот метод хорошо подходит для создания собственных сообщений об ошибках в сценариях.

Постоянные перенаправления в скриптах

Если в сценарии необходимо перенаправить вывод в файл Linux для большого объёма данных, то указание способа вывода в каждой инструкции echo будет неудобным и трудоёмким занятием. Вместо этого можно указать, что в ходе выполнения данного скрипта должно осуществляться перенаправление конкретного дескриптора с помощью команды exec:

#!/bin/bash
exec 1> testout
echo "Это тест перенаправления всего вывода"
echo "из скрипта в другой файл"
echo "без использования временного перенаправления"

Вызов команды exec запускает новый командный интерпретатор и перенаправляет стандартный вывод в файл testout.

Также существует возможность перенаправлять вывод (в том числе и ошибок) в произвольном участке сценария:

#!/bin/bash
exec 2> testerror
echo "Это начально скрипта"
echo "И это первые две строки"
exec 1> testout
echo "Вывод сценария перенаправлен"
echo "из с терминала в другой файл"
echo "но эта строка записана в файл ошибок" >&2

Такой метод часто применяется при необходимости перенаправить лишь часть вывода скрипта в другое место, например в журнал ошибок.

Выводы

Перенаправление в скриптах Bash, чтобы выполнить вывод в файл Bash, является хорошим средством ведения различных журналов, особенно в фоновом режиме.

Использование временного и постоянного перенаправлений в сценариях позволяет создавать собственные сообщения об ошибках для записи в отличное от STDOUT место.

Проверка существования файла Bash

В операционных системах GNU/Linux любые объекты системы являются файлами. И проверка существования файла bash - наиболее мощный и широко применяемый инструмент для определения и сравнения в командном интерпретаторе.

В рамках интерпретатора Bash, как и в повседневном понимании людей, все объекты файловой системы являются, тем, чем они есть, каталогами, текстовыми документами и т.д. В этой статье будет рассмотрена проверка наличия файла Bash, а также его проверка на пустоту, и для этого используется команда test.

Проверка существования файла Bash

Начать стоит с простого и более общего метода. Параметр -e позволяет определить, существует ли указанный объект. Не имеет значения, является объект каталогом или файлом.

#!/bin/bash
# проверка существования каталога
if [ -e $HOME ]
then
echo "Каталог $HOME существует. Проверим наличие файла"
# проверка существования файла
if [ -e $HOME/testing ]
then
# если файл существует, добавить в него данные
echo "Строка для существующего файла" >> $HOME/testing
echo "Файл существует. В него дописаны данные."
else
# иначе — создать файл и сделать в нем новую запись
echo "Файл не существует, поэтому создается."
echo "Создание нового файла" > $HOME/testing
fi
else
echo "Простите, но у вас нет Домашнего каталога"
fi

Пример работы кода:

Вначале команда test проверяет параметром -e, существует ли Домашний каталог пользователя, название которого хранится системой в переменной $HOME. При отрицательном результате скрипт завершит работу с выводом сообщения об этом. Если такой каталог обнаружен, параметр  продолжает проверку. На этот раз ищет в $HOME файл testing. И если он есть, то в него дописывается информация, иначе он создастся, и в него запишется новая строка данных.

Проверка наличия файла

Проверка файла Bash на то, является ли данный объект файлом (то есть существует ли файл), выполняется с помощью параметра -f.

#!/bin/bash
if [ -f $HOME ]
then
echo "$HOME — это файл"
else
echo "$HOME — это не файл"
if [ -f $HOME/.bash_history ]
then
echo "А вот .bash_history — файл"
fi
fi

Пример работы кода:

В сценарии проверяется, является ли $HOME файлом. Результат проверки отрицательный, после чего проверяется настоящий файл .bash_history, что уже возвращает истину.

На заметку: на практике предпочтительнее использовать сначала проверку на наличие объекта как такового, а затем — на его конкретный тип. Так можно избежать различных ошибок или неожиданных результатов работы программы.

Проверка файла на пустоту

Чтобы определить, является ли файл пустым, нужно выполнить проверку с помощью параметра -s. Это особенно важно, когда файл намечен на удаление. Здесь нужно быть очень внимательным к результатам, так как успешное выполнение этого параметра указывает на наличие данных.

#!/bin/bash
file=t15test
touch $file
if [ -s $file ]
then
echo "Файл $file содержит данные."
else
echo "Файл $file пустой."
fi
echo "Запись данных в $file..."
date > $file
if [ -s $file ]
then
echo "Файл $file содержит данные."
else
echo "Файл $file все еще пустой."
fi

Результат работы программы:

В этом скрипте файл создаётся командой touch, и при первой проверке на пустоту возвращается отрицательный результат. Затем в него записываются данные в виде команды date, после чего повторная проверка файла возвращает истину.

Выводы

В статье была рассмотрена проверка существования файла bash, а также его пустоты. Обе функции дополняют друг друга, поэтому использовать их в связке - эффективный приём.

Хороший тон в написании сценариев командного интерпретатора - сначала определить тип файла и его дальнейшую роль в программе, а затем уже проверять объект на существование.

Переменные в Bash скриптах

Существование сценариев, состоящих из отдельных команд, считается нормальным явлением. Но иногда возникают ситуации, когда этого становится недостаточно. Например, часто необходимо использовать данные от команды к команде, чтобы обработать информацию. С этой задачей помогают справиться переменные в скриптах.

В этой статье будут рассмотрены переменные в Bash скриптах с точки зрения области видимости, а также некоторые особенности при работе с ними.

Переменные среды Bash

Командный интерпретатор Bash поддерживает переменные среды, которые отслеживают различную системную информацию:

  • Имя системы;
  • Имя пользователя, зарегистрированного в системе;
  • Идентификатор пользователя (UID);
  • Исходный (домашний) каталог пользователя по умолчанию и т.п.

Для ознакомления с полным списком локальных переменных среды используется команда set.

set

Результат:

Значения этих переменных Bash можно использовать в сценариях, для чего необходимо указать имя переменной с предшествующим ей знаком доллара ($).

#!/bin/bash
echo "Информация о пользователе $USER:"
echo UID: $UID
echo Домашний каталог: $HOME

Пример работы скрипта:

Переменные окружения Bash $USER, $UID и $HOME использовались для отображения запрашиваемой информации о текущем зарегистрированном пользователе.

Обратите внимание: переменные среды в командах echo заменяются их текущими значениями при выполнении программы. Кроме того, переменные, заключённые  в кавычках, и вне их интерпретируются правильно.

Однако в таком методе есть некоторый недостаток: при попытке отобразить какое-то денежное значение в долларовом эквиваленте необходимо добавить перед знаком доллара обратный слэш для его экранирования, чтобы интерпретатор не посчитал следующую за ним цифру именем переменной, принимающей параметр скрипта по указанному номеру.

#!/bin/bash
echo "Неправильная цена вещи: $15"
echo "Правильная цена вещи: \$15"

Результат работы скрипта:

В первой строке, где отображается неправильная цена, интерпретатор воспринял $ как знак начала переменной 1, которая считала первый параметр запущенной программы. Поскольку параметр ничего не содержал, то ничего и не было отображено вместо $1.

На заметку: частым случаем является использование фигурных скобок вокруг имени переменной после знака доллара (например ${variable}). Этот приём позволяет просто определить имя переменной, а на её функциональность это никак не влияет.

Пользовательские переменные Bash

В сценариях командного интерпретатора Bash можно не только использовать переменные среды, но также создавать и включать собственные. Задание переменных позволяет сохранять данные и использовать их во время работы скрипта, что делает его более интерактивным.

Пользовательские переменные Bash Linux могут быть названы любой текстовой строкой длиной до 20 символов, состоящей из букв, цифр и символа подчёркивания. В названии учитывается регистр букв, поэтому переменная Var1 не является переменной var1. Новички в области написания сценариев часто забывают об этой особенности, отчего и допускают трудно диагностируемые ошибки.

Присвоение значения переменной Bash выполняется с помощью знака равенства (=). Слева и справа от знака не должно быть разделяющих символов по типу пробела. Это правило также часто забывается неофитами. Вот пример присваивания значений переменным:

var1=50
var2=-120
var3=test
var4="текстовая строка"

Ключевой особенностью интерпретатора Bash является автоматическое определение типа данных, используемого для представления значения переменных. После их определения сценарий сохраняет значения этих переменных на протяжении всего времени работы программы и уничтожает после её завершения.

На заметку: обращение к пользовательским переменным осуществляется так же, как и к системным, — с помощью знака доллара ($). Он не используется, когда переменной присваивается значение.

Выводы

Для обработки информации в сценариях командного интерпретатора используются переменные среды Bash и пользовательские переменные. Последние имеют жизнеспособность по умолчанию до тех пор, пока работает программа. При обращении к пользовательским переменным применяется знак доллара, а при записывании в них данных — нет.

Перенос boot в корневой раздел Linux

Многие пользователи при установке Ubuntu по старой привычке или следуя некоторым руководствам создают отдельный раздел boot выделяя этому разделу слишком мало места (например, 300-500 МБ). Со временем, из-за накопления старых ядер Linux, при обновлении системы может возникнуть ошибка, сообщающая о нехватке места в /boot

Читать далее Перенос boot в корневой раздел Linux