Уже освоили команды Bash для новичков? Тогда двигаемся дальше, к продвинутому уровню.
Посмотрите на команду whoami , которая проверяет имя пользователя:
А вот как можно запустить команду bash от имени другого пользователя, с sudo -u username :
Когда не указан флаг -u , команда выполняется от имени суперпользователя root без ограничений:
Хотите стать другим пользователем? С su это реально. Чтобы вернуться в свою учетную запись, используйте exit :
Суперпользователь – единственный пользователь, который может устанавливать программы, создавать новых юзеров и все в таком духе. Иногда можно забыть об этом и получить ошибку:
Введите команду заново, используя sudo :
Или используйте !! для возврата к предыдущей команде:
По умолчанию после использования sudo система не запрашивает пароль в течении 15 минут. А вот далее для sudo нужно заново вводить пароль суперпользователя.
Файлы доступны для чтения ( r ), записи ( w ) и исполнения ( x ) пользователям или группам. Просматривайте права доступа к файлам с помощью ls -l :
Права представлены первыми десятью символами.
Первый символ представляет тип файла: d – директория, l – ссылка, — – файл. Дальше следуют три группы из трёх символов, которые отражают разрешения пользователя, владельца, группы и остальных пользователей.
r означает, что группа или пользователь имеют права на чтение файла. w – это права на изменение, а x – на выполнение. Пока что ничего сложного, правда?
Эти разрешения также представляются трехзначным числом, где x увеличивает значение на 1, w , если включен, – на 2 и r – на 4. Поэтому в бинарном представлении, директории выше имеют права доступа 644 и 755 . Например r-x -> 101 -> 5 .
Следующие строки – имя и группа владельца. За ними следуют размер, дата последнего изменения и название файла. Флаг -h означает «human-readable» и печатает 4.0K вместо 4096 байт.
chmod изменяет разрешения файла, устанавливая биты доступа:
Или добавлением и удалением разрешений флагами + и — :
chown изменяет владельца:
chgrp меняет группу владельцев:
Управляем пользователями и группами
Переходим к самому интересному списку команд bash, а именно к тем, которые затрагивают юзеров и группы.
users отображает авторизованных пользователей. Некоторые из них могут быть авторизованы несколько раз, например, при разных сессиях ssh .
Чтобы посмотреть всех пользователей (даже тех, кто не авторизован), проверьте /etc/passwd . Но не вносите изменения в файл! Вы можете повредить его и сделать невозможной авторизацию пользователей.
Добавляйте пользователей командой useradd :
Удаляйте их командой userdel :
groups показывает группы, в которых состоит текущий пользователь:
Нужно посмотреть все группы в системе? Для этого есть команда /etc/groups . Не модифицируйте файл, если не уверены в том, что делаете.
Добавляйте группы с помощью groupadd :
А удаляйте посредством groupdel :
Работаем с текстом
uniq печатает повторяющиеся строки:
sort сортирует строки по алфавиту или номеру:
diff покажет отличия между двумя файлами:
cmp показывает отличия в байтах:
cut используется для деления строки на разделы и подходит для обработки CSV . -d указывает символ деления, а -f – отрезок для печати:
sed меняет строки:
Вообще, sed – чрезвычайно мощная утилита, и ее полное описание не представляется возможным в рамках данной статьи.
Утилита является полной по Тьюрингу, поэтому может делать все, что доступно в любом другом языке программирования. sed работает с регулярными выражениями, печатает строки по шаблону, редактирует текстовые файлы и многое другое.
Хотите узнать больше о чудо-команде? Не вопрос. Полезные ссылки для изучения sed :
Ищем и сопоставляем
grep ищет строки в файлах по заданному шаблону:
Или по заданному слову:
Используйте расширенные регулярные выражения с помощью флага -E , сопоставляйте несколько строк одновременно ( -F ) и рекурсивно выполняйте поиск по файлам в каталоге ( -r ).
awk – это язык сопоставления шаблонов, построенный для чтения и манипулирования файлами данных, таких как CSV .
Как правило, grep хорош для поиска строк и шаблонов, sed – для замены строк в файлах, а awk – для извлечения строк и шаблонов в целях анализа.
В качестве демонстрации способностей awk возьмем файл, содержащий два столбца данных:
Зациклим строки, добавим число к сумме, увеличим счетчик, найдем среднее:
awk , как и sed , является полной по Тьюрингу. Обе команды чрезвычайно полезны в сопоставлении по шаблону и в обработке текста. Для их описания будет мало и книги, поэтому читайте о них больше в отдельных статьях!
Копируем файлы по SSH
ssh – это сетевой протокол взаимодействия машин под управлением Unix-подобных ОС:
Заметьте, как поменялось приглашение после авторизации на другой машине:
Создадим новый файл на своей машине:
Скопируем файл на удаленный компьютер с помощью scp :
Зайдем на удаленную машину:
И увидим наш файл:
А как насчет оптимизации процесса? Здесь пригодится rsync – инструмент копирования файлов, который минимизирует объем копируемых данных путем поиска различий между файлами.
Предположим, есть директории a и b , содержащие один и два файла соответственно:
Синхронизируем директории, копируя только отсутствующие файлы:
Теперь a и b содержат одинаковые файлы:
rsync работает по ssh :
Запускаем длительные процессы
Иногда соединение ssh может прерваться из-за неполадок с сетью или оборудованием. При этом процессы, запущенные отключившимся пользователем, прерываются. Команда nohup предотвращает прерывания процессов даже после отключения пользователя. Отличная страховка! Вот как ею пользоваться.
Запустим команду yes с nohup :
ps покажет процессы, запущенные текущим пользователем:
Теперь выйдем из сессии, зайдем снова и увидим, что процесс исчез:
Но постойте! Процесс виден в выводе команд top и htop :
Завершим процесс командой kill -9 с указанием PID :
Проверим видимость в top и увидим, что процесса нет, потому что он был завершен:
cron предоставляет легкие автоматизацию и планирование.
Можно настроить задачи в текстовом редакторе командой crontab -e . Вставим следующую строку:
Теперь cron вызывает команду date каждую минуты и записывает вывод в текстовый файл оператором >> :
Удалите строку в crontab , чтобы остановить выполнение задачи. cron можно настроить на выполнение задач поминутно в течении каждого часа (0 — 59), ежечасно в течении дня (0-23), ежедневно в течении месяца (1-31), ежемесячно в течении года (1-12) или в указанные дни недели (0-6, Пн-Вс). Это отображается пятью звездочками в начале. Замените звезды нужным числом, чтобы настроить расписание.