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’

  1. Напишіть команду, яка виконує ifconfig і перенаправляє стандартний виведення у файл ipaddress.txt.

  2. Напишіть команду, яка виконує ifconfig, перенаправляє стандартний виведення та доповнює їм файл ipaddress.txt.

  3. Напишіть команду, яка копіює всі файли з каталогу /etc/a до каталогу /etc/b і перенаправляє стандартні помилки у файл copyerror.log

  4. Напишіть команду, яка створює список каталогів ( ls ), що знаходяться в кор- ному каталозі, і направляє висновок у команду more.

  5. Напишіть команду, яка виконує mytask.sh та відправляє його у фоновий режим.

  6. Грунтуючись на наступному списку завдань, напишіть команду, яка виводить дит завдання по пінг 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