Bash. Основні команди.
Основи роботи з Linux. -> Bash. Команди файлової системи.
Команды файловой системы
cd
Смена директории.
Запуск без параметрів кидає до домашнього каталогу.
Трюк як перевизначити поведінку в .bashrc
cd () {
builtin cd ${1:+"$@"}
if [ -d "venv" ]
then
source ./venv/bin/activate
fi
}
touch
Змінює тимчасову мітку або створює файл.
rm
Видаляє файл або директорію.
mv
Переміщує файли чи директорії.
cp
Копіює файли чи директорії.
mkdir
Створює директорію
-p - рекурсивно з піддиректоріями
file
Ідентифікація файлу. Особливо корисно коли файл не має розширення. Аналізується магічне число (перший блок даних).
Параметри.
-f – читати список файлів для аналізу.
-z - Перегляд стислих файлів.
Основи роботи з Linux. -> Потоки введення-виведення.
Стандартні потоки Linux
Стандартний потік введення stdin(0)
Стандартним потоком введення (stdin) є клавіатури. У більшості випадків потік вхідних даних вводиться через клавіатуру.
Стандартний потік виведення stdout(1)
Стандартний висновок (stdout) – це потік, до якого Програми виводять результати роботи. Зазвичай ці дані відображаються на екрані монітора.
Стандартний потік помилок stderr(2)
Стандартний потік помилок (stderror) – потік, використовується для виведення повідомлень про помилки та діагностики Цей потік незалежний від стандартного потоку виведення і може перенаправлятися окремо.
Символи перенаправлення.
- перенаправляє із заміною. Створює новий файл, який містить дані стандартного потоку виведення. Якщо вказаний файл існує, він перезаписується.
- перенаправляє з доповненням. Створює новий файл, який містить дані стандартного потоку виведення. Якщо вказаний файл існує, він дописується.
2> - перенаправляє потік помилок. Створює новий файл, який містить дані стандартного потоку помилок. Якщо вказаний файл існує, він перезаписується.
2>> - Додає інформацію зі стандартного потоку виведення в існуючий файл. Якщо вказаний файл не існує, він створюється.
&> - Створює новий файл, що містить дані стандартного потоку виведення та потоку помилок. Якщо вказаний файл існує, він перезаписується.
2>&1 -Виводить стандартні потоки виведення та помилок в один файл.
< - Перенаправляє вміст файлу як стандартний потік введення.
| - Перенаправляє стандартний потік виведення однієї команди до стандартного потоку введення іншої команди.
Якщо у вас є програма handywork, що читає введення зі stdin і відправляє дані в stdout, то це можна легко перевизначити.
Наприклад, така програма мовою Python t.py.
#!/usr/bin/env python
d = input('name?')
print('Hello %s' % d)
Може бути запущена так:
t.py < in.dat > out.dat
якщо з помилками то
t.py < in.dat > out.dat 2> err.dat
При перенаправленні результату за допомогою символу > файл буде створено або обрізаний (тобто з файлу буде видалено вміст). Якщо ви хочете заздалегідь зберегти наявний вміст файлу, вам слід його доповнити, використовуючи символ >> , як показано нижче:
Наступний рядок:
t.py < data.in &>> results.out
дозволяє виконати t.py , а потім додати і stdout, і stderr у файл results.out , не перезаписуючи поверх наявного вмісту.
Команда tee
Якщо потрібно одночасно побачити результати та переправити висновок у файл використовується команда tee
handywork < data.in | tee
використання параметра -a допише до файлу
Команда xargs
Команда xargs поєднує зафіксований набір заданих у командному рядку початкових аргументів з аргументами, прочитаними зі стандартного введення, та виконує зазначену команду один чи кілька разів.
Це означає, що вона може передавати висновок однієї команди в якості аргументу іншій команді.
Якщо команда не вказана, xargs виконує відлуння за промовчанням.
Таким чином, перетворити виведення безлічі рядків з команди ls в один рядок, використовуючи xargs наступним чином:
ls -1 | xargs
Або створити компактне виведення списку користувачів системи
cut -d: -f1 < /etc/passwd | sort | xargs
Порахувати кількість символів та рядків файлів
ls | xargs wc
Ця команда приймає на вхід потік виведення від команди echo і надсилає його як аргументи до команди echo
echo A B C | xargs echo
Ця команда приймає на вхід потік виведення від команди echo і відправляє його як аргументи в команду echo, запускаючи для кожної групи з одного параметра (тобто кожного параметра) окремий процес
echo A B C | xargs -n 1 echo
-n число - Виконати команду, використовуючи максимально можливу кількість аргументів, прочитаних зі стандартного введення, але не більше заданого числа.
-I зам_цеп - Режим вставки: команда виконується для кожного рядка стандартного введення, причому весь рядок розглядається як один аргумент і підставляється в початкові_аргументи замість кожного входження ланцюжка символів зам_цеп.
Основи роботи з Linux. -> Домашнє завдання.
Домашнє завдання.
Додати перший рядок у кожний файл (копірайт) з розширенням py у поточній директорії.
Рішення.
find. -type f -name ‘*.py’ | xargs sed -i ‘1i\zdimon’
-
Напишіть команду, яка виконує ifconfig і перенаправляє стандартний виведення у файл ipaddress.txt.
-
Напишіть команду, яка виконує ifconfig, перенаправляє стандартний виведення та доповнює їм файл ipaddress.txt.
-
Напишіть команду, яка копіює всі файли з каталогу /etc/a до каталогу /etc/b і перенаправляє стандартні помилки у файл copyerror.log
-
Напишіть команду, яка створює список каталогів ( ls ), що знаходяться в кор- ному каталозі, і направляє висновок у команду more.
-
Напишіть команду, яка виконує mytask.sh та відправляє його у фоновий режим.
-
Грунтуючись на наступному списку завдань, напишіть команду, яка виводить дит завдання по пінг Amazon в пріоритет:
[1] Running ping www.google.com > /dev/null & [2]- Running ping www.amazon.com > /dev/null & [3]+ Running ping www.oreilly.com > /dev/null &
Основи роботи з Linux. -> Команди введення-виведення.
Основні команди.
Зовнішній вигляд запрошення.
username@compname$
$ - не є частиною команди і означає, що ви під звичайним користувачем (# - під рутом)
Позиційні аргументи
Зазвичай під час використання командної оболонки і запуску команд передаємо їм аргументи чи параметри.
Існує механізм вилучення цих параметрів зі скриптів за допомогою $0 $1 $2 і т.д.
$0 містить назву скрипта, $1 перший параметр і так далі.
$# містить кількість параметрів.
Часто буває необхідно переслати параметри з однієї команди до іншої.
Для цього використовуються скорочення $* або $@, які містять усі аргументи.
Якщо їх укласти в подвійні лапки, то замість назв $1, $2 і т.д. буде вставлено значення параметрів.
Приклад програми testvar.
echo $#
echo $0
echo $1
echo $3
Запуск.
./testvar bash is fun
Перевірити, чим є команда.
type pwd
type cat
type if
echo - виведення якогось значення (рядки або змінної) в стандартний потік виведення.
Запуск команди у фоновому режимі.
Використовується символ &
ping 192.168.10.56 > ping.log &
Змінні оболонки та оточення.
Змінні оточення (або змінні середовища або оболонки) - це набір пар ключ-значення, які зберігаються у вашому Linux і використовуються процесами для виконання певних операцій. Оточення - це область, яку оболонка створює щоразу під час запуску сеансу, що містить змінні, що визначають системні властивості. Наприклад, це може бути часовий пояс у системі, шляхи до певних файлів, програми за замовчуванням, локалі та багато іншого. Змінні оточення також можуть використовуватися в програмах оболонки або підболочках для виконання різних операцій. Часто в цей простір поміщають такі змінні як доступи до БД (логін пароль) або шляхи до важливих файлів та каталогів (наприклад, до java машини).
Змінні мають наступний формат
KEY=value
Імена змінних чутливі до регістру і навколо не повинно бути пропусків.
Змінні можна розділити на дві категорії:
Змінні оточення (Environmental Variables) - це змінні, які визначені для поточної оболонки та успадковуються будь-якими дочірніми оболонками або процесами. Змінні оточення використовуються передачі інформації в процеси, які породжуються з оболонки.
Подивитись
env
Змінні оболонки (Shell Variables) - це змінні, які містяться виключно в оболонці, де вони були встановлені або визначені. Вони часто використовуються для відстеження ефемерних даних, наприклад поточного робочого каталогу.
Подивитись
set
Тут ми отримаємо гігантський висновок, що містить змінні та функції оболонки, тому варто використовувати less, щоб розділити вміст на сторінки:
set | less
Для того, щоб підставити значення змінної в рядок, необхідно використовувати знак $ і включити змінну в рядок у подвійних лапках.
echo "I am in $PWD dir"
Також ми можемо зберегти виведення командної оболонки за допомогою символів $()
MYVAR=$(pwd)
Тут команда pwd виконається в підболочці і замість виведення на екран надасть значення змінної MYVAR
Довідка по
man less
Деякі корисні змінні
USER: поточне ім’я користувача, що використовує систему
EDITOR: яка програма запускається для редагування файлу на вашому хості
HOME: домашній каталог поточного користувача
PATH: список каталогів, розділених двокрапками, в яких система шукає команди
PS1: основний рядок запрошення (для визначення відображення запрошення оболонки)
PWD: поточний робочий каталог
Наприклад, у змінній $SHELL зберігається значення командного інтерпретатора за умовчанням.
Подивитися так:
echo $SHELL
або так
printenv SHELL
У Linux у вас є багато різних способів встановлення змінних оточення залежно від того, чи ви хочете зробити їх постійними чи ні.
export
Створюють чи змінюють змінні оточення.
Створити та експортувати змінну.
export VAR="value"
Використовуючи export, ваша змінна оточення буде встановлена для поточного сеансу оболонки. Як наслідок, якщо ви відкриєте іншу оболонку або перезапустите свою систему, змінна оточення більше не буде доступною.
Однак вона буде доступна всім процесам, які породжені поточним терміналом (на відміну від простого присвоєння)
Найпопулярніший спосіб постійної установки змінних середовища – це додати їх у файл .bashrc. Файл .bashrc - це скрипт, що виконується щоразу, коли ви ініціалізуєте сеанс інтерактивної оболонки.
Після додавання нових змінних можна перевантажити .bashrc командою.
source ~/.bashrc
Існує ще один файл.
Щоб встановити загальносистемні змінні оточення в Linux (для всіх користувачів), потрібно експортувати змінні у файл /etc/environment.
Наприклад, щоб змінити редактор, що використовується глобально, можна змінити змінну EDITOR у файлі оточення.
export EDITOR="vi"
Встановити змінну оточення в одному рядку.
echo "export VAR="value"" >> ~/.bashrc && source ~/.bashrc
Видалити змінну можна командою unset.
unset USERNAME
Робота в командному рядку
Крапка (.) - важливий символ у командному рядку Linux, який означає поточний каталог.
Символ ~ - означає домашній каталог.
Відносний шлях визначається щодо поточного каталогу, а абсолютний шлях – щодо кореневого каталогу.
Клавіша Tab використовується для автодоповнення команд та для виведення можливих варіантів частково введені команди.
Оболонка bash має кілька операторів команд. Найчастіше використовуються наступні оператори: < > | || & && ; ;; ()
pwd
Відображає поточний каталог. Абревіатура від “print working directory”.
uname
Системна інформація
uname -a
Історія команд.
history N - виведення останніх N рядків історії
!! - запуск останньої команди
!string - Виконання останньої команди,
починається з рядка string
Ctrl+r - Викликає зворотний послідовний пошук з історії.
Зберігається історія для кожного користувача у прихованому файлі .bash_history
Змінна оточення HISTSIZE задає оболонці bash кількість рядків для збереження в історії.
exec
Запуск команди, заміна поточного оточення.
Деякі корисні команди
Інформація про процесор
cat /proc/cpuinfo
lscpu
Вільне місце на диску.
df -h
Обробка текстових потоків.
cat
Виведення файлів або стандартного введення в stdout. За допомогою цієї команди можна просто подивитися вміст невеликого файлу, склеїти кілька файлів і багато іншого.
Якщо команді передати кілька файлів, вони виведуться разом.
Синтаксис
cat опції файл1 файл2
Розглянемо основні опції:
-b - нумерувати лише непусті рядки;
-E - показувати символ $ наприкінці кожного рядка;
-n – нумерувати всі рядки;
-s - видаляти порожні рядки, що повторюються;
-T - відображати табуляції як ^I;
-h – відобразити довідку;
-v – версія утиліти.
Приклад виведення лога з нумерацією рядків
cat /var/log/nginx/access.log.1 -b
Приклад введення з клавіатури та перенаправлення у файл
cat > test
Для припинення введення натискаємо ctrl+D
Об’єднання файлів.
cat file1 file2 > file3
cut
Програма cut використовується для вибірки окремих полів із рядків файлу. Вибірка полів проводитися завданням роздільників.
Команда cut дозволяє вам вирізати дані за символами, полем або стовпцем.
-c – символи для вилучення (позиція символу)
-d - роздільник полів (за умовчанням табуляція)
-f - поля для отримання
Вибір першого стовпця з роздільним пробілом.
cut -d '' -f 1 /var/log/nginx/access.log.1
Вивести всіх користувачів у системі.
cut -d: -f1 /etc/passwd
Фільтри текстових потоків.
head - відображає перші рядки
tail – відображає останні рядки.
Відобразити останні рядки інтерактивно.
tail -f /var/log/nginx/access.log.1
sed
Утиліту sed називають потоковим текстовим редактором. В інтерактивних текстових редакторах, на зразок nano, з текстами працюють, використовуючи клавіатуру, редагуючи файли, додаючи, видаляючи або змінюючи тексти. Sed дозволяє редагувати потоки даних, ґрунтуючись на заданих розробником наборах правил.
Схема дзвінка.
sed options file
За промовчанням sed застосовує зазначені правила до стандартного потоку введення.
echo "blablabla" | sed 's/bla/mla/'
echo "blablabla" | sed 's/bla/mla/g'
Маркери
s - substitute заміна
g - глобально
i - без урахування регістру
Параметри.
-i - Редагувати файл
Передаємо команді файл.
sed 's/test/another test' ./myfile
Sed не змінює дані в файлі (якщо не заданий -i). Редактор читає файл, обробляє прочитане і відправляє те, що вийшло, в STDOUT.
Для виконання кількох дій з даними використовуйте ключ -e під час виклику sed. Наприклад, як організувати заміну двох фрагментів тексту:
sed -e 's/This/That/; s/test/another test/' ./myfile
Скористаємося прапором w, який дозволяє зберегти результати обробки тексту у файл:
sed 's/test/another test/w output' myfile
Можна викликати команду заміни так, щоб файл був оброблений починаючи з якогось рядка і до кінця:
sed '2,$s/test/another test/' myfile
Видалення рядків.
sed '3d' myfile
видаляємо діапазон рядків
sed '2,3d' myfile
sed '3,$d' myfile
Видалення рядків за шаблоном.
sed '/test/d' myfile
За допомогою sed можна вставляти дані в текстовий потік, використовуючи команди i та a:
Команда i додає новий рядок перед заданим.
Команда a додає новий рядок після заданого.
echo "Another test" | sed 'i\First test '
Вказівка опорного рядка.
sed '2i\This is the inserted line.' myfile
Заміна рядків.
sed '3c\This is a modified line.' myfile
Команда r дозволяє вставляти дані дані із зазначеного файлу.
sed '3r newfile' myfile
Аналіз
wc - підрахунок
Ключі команди wc
-c - Кількість символів у файлі
-l - Кількість перекладів рядків
-w - Кількість слів
wc filename
nl
Нумерує рядки у файлі.
paste
Виводить рядковий вміст двох файлів пліч-о-пліч для стравнення або злиття.
join
Поєднує рядки у вмісті двох файлів.
join file1.txt file2.txt > newjoinfile.txt
sort
Її можна використовувати для сортування тексту з одного або декількох файлів або за допомогою неї може бути виконане сортування виводу linux для будь-якої команди.
Синтаксис
sort опции файл
Ось кілька принципів, за якими команда sort linux сортує рядки:
Рядки з цифрами розміщуються вище за інші рядки
Рядки, що починаються з літер нижнього регістру, розміщуються вище
Сортування виконується відповідно до алфавіту
Рядки спочатку сортуються за абеткою, а вже вдруге за іншими правилами.
ОПЦІЇ
-b - не враховувати прогалини
-d - використовувати для сортування лише літери та цифри
-i - сортувати тільки за символами ASCII
-n - сортування рядків linux за числовим значенням
-r - сортувати у зворотному порядку
-с - перевірити чи був відсортований файл
-o - вивести результат у файл
-u - ігнорувати рядки, що повторюються
-m - поєднання раніше відсортованих файлів
-k - вказати поле, за яким потрібно сортувати рядки, якщо не задано, сортування виконується по всьому рядку.
-f - використовувати як роздільник полів ваш символ замість пробілу.
Відсортуємо файли за датою створення
ls -l | sort -k8
за числовим значенням (розміром)
Приклади.
Вивести найбільші файли та директорії.
du -a /var | sort -n -r | head -n 10
du -hsx * | sort -rh | head -10