Ctrl + a — перехід на початок рядка;
Ctrl + c — посилає програмі SIGINT. Зазвичай, перериває поточне завдання;
Ctrl + d — видаляє символ під курсором (аналог delete);
Ctrl + e — перехід до кінця рядка;
Ctrl + k — видаляє все, до кінця рядка (EOL, а не на екрані!);
Ctrl + l — очищає екран (аналог clear);
Ctrl + r — пошук по історії. Повторення пошуку (листання результатів пошуку). Тобто інкрементальний пошук;
Ctrl + j — припиняє пошук і дозволяє відредагувати знайдену команду. Якщо пошук не проводився, то аналогічно натиснення return;
Ctrl + t — міняє символ під курсором на попередній. Або, якщо хочете , тягне попередній символ до кінця рядка;
Ctrl + u — видаляє всі символи зліва від курсора до початку рядка;
Ctrl + w — видаляє символи ліворуч від курсору до початку слова;
Ctrl + xx — переходить від поточної позиції курсора на початок рядка і назад;
Ctrl + z — suspend-ить поточну задачу (csh, zsh);
Ctrl + e — відкриває $EDITOR для зміни введеного рядка. Після збереження змін, команда відправляється на виконання. Якщо змінна не задана, то відкривається системний текстовий редактор.
Приклади Bash
четвер, 9 січня 2014 р.
четвер, 21 березня 2013 р.
Введення в bash
Перевірити чи запущено bash можна наступною командою:
Використання команди «cd»:
Щоб довідатися в якому місці файлової системи в даний момент ви знаходитесь (поточну робочу директорію) наберіть:
Кілька прикладів абсолютних шляхів:
Відносні шляхи можуть містити одну або декілька директорій «..».
Можна додати «..» до відносного шляху. Це дозволить переміститись в директорію, яка знаходиться на одному рівні з тією в якій ми знаходимося:
Відносні шляхи можуть бути досить складними. Ось кілька прикладів:
Існує ще одна спеціальна директорія «.», яка вказує на поточну директорію. Ця директорія використовується для запуску файлів, що виконуються та знаходяться у поточній директорії:
Для того щоб перейти в домашню директорію, потрібно набрати:
Але що якщо нам потрібно вказати файл в домашній директорії іншого користувача? Для цього після тільди потрібно вказати ім'я цього користувача. Наприклад, щоб вказати на файл fredsfile.txt що знаходиться в домашній директорії користувача fred:
Команда ls, без аргументів, виводить на екран список файлів що зберігаються в робочій директорії:
Після самої команди ls в якості її аргументу можна вказати один або більше файлів або директорій. Якщо вказати ім'я файлу, то команда ls виведе інформацію тільки про цей файл. А якщо вказати назву директорії, ls покаже весь її вміст. Опція «-l» команди ls буває дуже корисною якщо ви хочете окрім імен файлів дізнатися більш детальну інформацію про них (права на файл, ім'я власника, час останньої зміни файлу і його розмір).
Іноді виникає потреба подивитися інформацію тільки про директорії. З цим завданням допоможе впоратися опція «-d», яка вказує команді виводити інформацію тільки про директорії.
Дія опції «-R» протилежна дії «-d». Вона дозволяє виводити інформацію про файли, що знаходяться в директорії рекурсивно. Спочатку показується вміст директорії верхнього рівня, потім по черзі вміст всіх піддиректорій і так далі.
Опція «-i» використовується для виведення інодів кожного об'єкта файлової системи.
Кожен об'єкт файлової системи (файл, директорія...) має свій унікальний номер — інод (inode number). Ця інформація може здатися незначною, але розуміння цього допоможе вам розібратися у багатьох операціях над файловою системою. Наприклад, подивимося на «.» і «..» як на посилання, присутні в кожній директорії. Щоб зрозуміти що собою являє директорія «..», дізнаємося інод директорії /use/local:
З кожним інодом може бути пов'язано декілька імен об'єктів файлової системи. Кількість «синонімів» файлу (об'єктів файлової системи, що посилаються на один інод) показує число у другому стовпці виводу команди «ls -l»:
Команда mkdir служить для створення нових директорій. У прикладі демонструється створення трьох нових директорій (tic, tac, toe) в директорії /tmp:
За замовчуванням команда mkdir не може створювати вкладеної структури директорій. Тому, якщо вам потрібно створити декілька вкладених одна в іншу директорій (won/der/ful), то вам доведеться три рази по черзі викликати цю команду:
Спростити цю операцію можна додавши опцію «-p» до команди mkdir. Ця опція дозволяє створювати вкладену структуру директорій:
Команда touch оновлює час останнього доступу до файлу (шоста колонка виводу команди ls -l) якщо він вже існує або створює новий порожній файл, якщо його ще немає. Після цієї операції у нас має з'явитися порожній файл /tmp/copyme:
Тепер, коли у нас є порожній файл, запишемо текстову рядок за допомогою команди echo, яка виводить переданий їй аргумент на стандартний пристрій виводу (текстовий термінал в нашому випадку):
Щоб записати рядок в наш файл, перенаправимо в нього виведення команди echo:
Для виведення вмісту файлу на термінал використовується команда cat:
Команда cp приймає два аргументи. Перший — ім'я вже існуючого файлу «copyme», другий — назва нової копії, яку ми хочемо зробити «copiedme»:
Команда mv перейменовує файл («copiedme» -> «movedme»). Номер інода після цієї операції не змінюється, а змінюється тільки назва файлу.
Команда mv дозволяє не тільки перейменовувати файли, але і переміщати їх. Наприклад, щоб перемістити файл /var/tmp/myfile.txt в директорію /home/user потрібно дати команду:
Щоб перемістити одночасно кілька файлів в одну директорію потрібно написати:
Якщо додати опцію «-v», на екран буде виведено звіт про виконану операцію:
Видалення проводиться за допомогою команди rm. Щоб видалити декілька файлів, просто вкажіть їх імена через пробіл в командному рядку як аргументи rm:
Видалені файли неможливо відновити. Тому багато початківців використовують опцію «-i» команди rm, яка вимагає запитувати у користувача підтвердження видалення кожного файлу.
Є два способи видалення директорій: можна по черзі видалити весь вміст директорії, а потім використати команду rmdir для видалення самої директорії:
Конструкція «[!]» схожа на «[]», за винятком того що вона відповідає одиничному символу, не згаданому між «[! і ]». наприклад:
$ echo $SHELL /bin/bash
Використання команди «cd»:
$ cd /Цією командою ми вказали bash що хочемо переміститися в кореневу директорію — /. Всі директорії в системі організовані в деревоподібну структуру і / це її початок (або корінь). Команда cd служить для зміни поточної робочої директорії.
Щоб довідатися в якому місці файлової системи в даний момент ви знаходитесь (поточну робочу директорію) наберіть:
$ pwd /В даному випадку / — абсолютний шлях, це означає що шлях зазначений відносно кореневої директорії.
Кілька прикладів абсолютних шляхів:
/dev /usr /usr/bin /usr/local/binВказуючи шлях /usr/local/bin в якості аргументу команді cd ми говоримо їй перейти в кореневу директорію /, потім в директорію usr, потім у local і bin. Абсолютні шляхи завжди починаються з /.
Відносні шляхи можуть містити одну або декілька директорій «..».
$ pwd /usr/local/bin $ cd .. $ pwd /usr/local
Можна додати «..» до відносного шляху. Це дозволить переміститись в директорію, яка знаходиться на одному рівні з тією в якій ми знаходимося:
$ pwd /usr/local $ cd ../share $ pwd /usr/share
Відносні шляхи можуть бути досить складними. Ось кілька прикладів:
$ cd /bin $ cd ../usr/share/zoneinfo $ cd /usr/X11R6/bin $ cd ../lib/X11 $ cd /usr/bin $ cd ../bin/../bin
Існує ще одна спеціальна директорія «.», яка вказує на поточну директорію. Ця директорія використовується для запуску файлів, що виконуються та знаходяться у поточній директорії:
$ ./myprog
Для того щоб перейти в домашню директорію, потрібно набрати:
$ cdБез аргументу cd перемістить вас в домашню директорію. Для суперкористувача домашньою зазвичай є директорія /root, а для звичайних користувачів — /home/username/. Але що якщо ми хочемо вказати конкретний файл, що знаходиться в домашній директорії, наприклад, як аргумент до програми «myprog» можна написати:
$ ./myprog /home/user/myfile.txtОднак, використовувати абсолютні шляхи до файлів не завжди зручно. Цю ж операцію можна зробити за допомогою «~» — тільди:
$ ./myprog ~/myfile.txt«~» — Спеціальне ім'я, яке вказує в bash на домашню директорію користувача.
Але що якщо нам потрібно вказати файл в домашній директорії іншого користувача? Для цього після тільди потрібно вказати ім'я цього користувача. Наприклад, щоб вказати на файл fredsfile.txt що знаходиться в домашній директорії користувача fred:
$ ./myprog ~fred/fredsfile.txt
Команда ls, без аргументів, виводить на екран список файлів що зберігаються в робочій директорії:
$ cd /usr $ ls X11R6 doc i686-pc-linux-gnu lib man sbin ssl bin gentoo-x86 include libexec portage share tmp distfiles i686-linux info local portage.old srcЯкщо вказати опцію -a, можна буде побачити всі файли, включаючи приховані (імена яких починаються з крапки).
$ ls -a . bin gentoo-x86 include libexec portage share tmp .. distfiles i686-linux info local portage.old src X11R6 doc i686-pc-linux-gnu lib man sbin ssl
Після самої команди ls в якості її аргументу можна вказати один або більше файлів або директорій. Якщо вказати ім'я файлу, то команда ls виведе інформацію тільки про цей файл. А якщо вказати назву директорії, ls покаже весь її вміст. Опція «-l» команди ls буває дуже корисною якщо ви хочете окрім імен файлів дізнатися більш детальну інформацію про них (права на файл, ім'я власника, час останньої зміни файлу і його розмір).
$ ls -l /usr drwxr-xr-x 7 root root 168 Nov 24 14:02 X11R6 drwxr-xr-x 2 root root 14576 Dec 27 08:56 bin drwxr-xr-x 2 root root 8856 Dec 26 12:47 distfiles lrwxrwxrwx 1 root root 9 Dec 22 20:57 doc -> share/doc drwxr-xr-x 62 root root 1856 Dec 27 15:54 gentoo-x86 drwxr-xr-x 4 root root 152 Dec 12 23:10 i686-linux drwxr-xr-x 4 root root 96 Nov 24 13:17 i686-pc-linux-gnu drwxr-xr-x 54 root root 5992 Dec 24 22:30 include lrwxrwxrwx 1 root root 10 Dec 22 20:57 info -> share/info drwxr-xr-x 28 root root 13552 Dec 26 00:31 lib drwxr-xr-x 3 root root 72 Nov 25 00:34 libexec drwxr-xr-x 8 root root 240 Dec 22 20:57 local lrwxrwxrwx 1 root root 9 Dec 22 20:57 man -> share/man lrwxrwxrwx 1 root root 11 Dec 8 07:59 portage -> gentoo-x86/ drwxr-xr-x 60 root root 1864 Dec 8 07:55 portage.old drwxr-xr-x 3 root root 3096 Dec 22 20:57 sbin drwxr-xr-x 46 root root 1144 Dec 24 15:32 share drwxr-xr-x 8 root root 328 Dec 26 00:07 src drwxr-xr-x 6 root root 176 Nov 24 14:25 ssl lrwxrwxrwx 1 root root 10 Dec 22 20:57 tmp -> ../var/У першій колонці показана інформація про права доступу до кожного файлу в списку. Друга колонка показує кількість посилань на кожен елемент списку. Третя і четверта колонки — власник і група відповідно. П'ята колонка — розмір. Шоста — час останньої зміни файлу. Остання колонка — ім'я файлу або директорії (якщо це посилання, то після знаку «->» стоїть ім'я об'єкта на який вона посилається).
Іноді виникає потреба подивитися інформацію тільки про директорії. З цим завданням допоможе впоратися опція «-d», яка вказує команді виводити інформацію тільки про директорії.
$ ls -dl /usr /usr/bin /usr/X11R6/bin ../share drwxr-xr-x 4 root root 96 Dec 18 18:17 ../share drwxr-xr-x 17 root root 576 Dec 24 09:03 /usr drwxr-xr-x 2 root root 3192 Dec 26 12:52 /usr/X11R6/bin drwxr-xr-x 2 root root 14576 Dec 27 08:56 /usr/bin
Дія опції «-R» протилежна дії «-d». Вона дозволяє виводити інформацію про файли, що знаходяться в директорії рекурсивно. Спочатку показується вміст директорії верхнього рівня, потім по черзі вміст всіх піддиректорій і так далі.
Опція «-i» використовується для виведення інодів кожного об'єкта файлової системи.
$ ls -i /usr 1409 X11R6 314258 i686-linux 43090 libexec 13394 sbin 1417 bin 1513 i686-pc-linux-gnu 5120 local 13408 share 8316 distfiles 1517 include 776 man 23779 src 43 doc 1386 info 93892 portage 36737 ssl 70744 gentoo-x86 1585 lib 5132 portage.old 784 tmp
Кожен об'єкт файлової системи (файл, директорія...) має свій унікальний номер — інод (inode number). Ця інформація може здатися незначною, але розуміння цього допоможе вам розібратися у багатьох операціях над файловою системою. Наприклад, подивимося на «.» і «..» як на посилання, присутні в кожній директорії. Щоб зрозуміти що собою являє директорія «..», дізнаємося інод директорії /use/local:
$ ls -id /usr/local 5120 /usr/localЯк бачимо, інод директорії /usr/local — 5120. Тепер подивимося який інод у директорії /usr/local/bin/..:
$ ls -id /usr/local/bin/.. 5120 /usr/local/bin/..Виходить, що іноди директорій /usr/local і /usr/local/bin/.. збігаються. Це означає, що на інод 5120 посилаються два імені: /usr/local і /usr/local/bin/.. Тобто це два різних імені однієї директорії. Кожен інод вказує на певне місце на диску.
З кожним інодом може бути пов'язано декілька імен об'єктів файлової системи. Кількість «синонімів» файлу (об'єктів файлової системи, що посилаються на один інод) показує число у другому стовпці виводу команди «ls -l»:
$ ls -dl /usr/local drwxr-xr-x 8 root root 240 Dec 22 20:57 /usr/localНа цьому прикладі видно (другий стовпець), що на директорію /usr/local посилаються 8 різних об'єктів файлової системи:
/usr/local /usr/local/. /usr/local/bin/.. /usr/local/games/.. /usr/local/lib/.. /usr/local/sbin/.. /usr/local/share/.. /usr/local/src/..
Команда mkdir служить для створення нових директорій. У прикладі демонструється створення трьох нових директорій (tic, tac, toe) в директорії /tmp:
$ cd /tmp $ mkdir tic tac toe
За замовчуванням команда mkdir не може створювати вкладеної структури директорій. Тому, якщо вам потрібно створити декілька вкладених одна в іншу директорій (won/der/ful), то вам доведеться три рази по черзі викликати цю команду:
$ mkdir won/der/ful mkdir: cannot create directory 'won/der/ful': No such file or directory $ mkdir won $ mkdir won/der $ mkdir won/der/ful
Спростити цю операцію можна додавши опцію «-p» до команди mkdir. Ця опція дозволяє створювати вкладену структуру директорій:
$ mkdir -p easy/as/pieЩоб дізнатися про можливості цієї утиліти докладніше, прочитайте довідку, яка викликається командою man mkdir. Довідки є практично до всіх команд з цього керівництва (наприклад man ls), крім cd, тому вона вбудована в bash (для таких команд довідка викликається так: help cd).
Команда touch оновлює час останнього доступу до файлу (шоста колонка виводу команди ls -l) якщо він вже існує або створює новий порожній файл, якщо його ще немає. Після цієї операції у нас має з'явитися порожній файл /tmp/copyme:
$ cd /tmp $ touch copyme
Тепер, коли у нас є порожній файл, запишемо текстову рядок за допомогою команди echo, яка виводить переданий їй аргумент на стандартний пристрій виводу (текстовий термінал в нашому випадку):
$ echo "firstfile" firstfile
Щоб записати рядок в наш файл, перенаправимо в нього виведення команди echo:
$ echo "firstfile" > copymeЗнак «>» (більше) вказує командній оболонці що потрібно перенаправити виведення команди у файл, ім'я якого знаходиться справа. Якщо файлу з таким ім'ям не існує, він буде створений автоматично. А якщо такий файл вже є, то він буде перезаписаний (весь його вміст буде стерто перед записом нашого рядка). Команда «ls -l» покаже що розмір нашого файлу тепер дорівнює десяти байтам — дев'ять байт займає слово «firstfile» і один байт символ переведення рядка.
Для виведення вмісту файлу на термінал використовується команда cat:
$ cat copyme firstfile
Команда cp приймає два аргументи. Перший — ім'я вже існуючого файлу «copyme», другий — назва нової копії, яку ми хочемо зробити «copiedme»:
$ cp copyme copiedme
Команда mv перейменовує файл («copiedme» -> «movedme»). Номер інода після цієї операції не змінюється, а змінюється тільки назва файлу.
$ mv copiedme movedmeНомер інода не змінюється лише за умови, що перейменований файл залишається в межах тієї файлової системи де знаходився початковий файл.
Команда mv дозволяє не тільки перейменовувати файли, але і переміщати їх. Наприклад, щоб перемістити файл /var/tmp/myfile.txt в директорію /home/user потрібно дати команду:
$ mv /var/tmp/myfile.txt /home/user
Щоб перемістити одночасно кілька файлів в одну директорію потрібно написати:
$ mv /var/tmp/myfile1.txt /var/tmp/myfile2.txt /home/userабо
$ mv -t /home/user /var/tmp/myfile1.txt /var/tmp/myfile2.txt
Якщо додати опцію «-v», на екран буде виведено звіт про виконану операцію:
$ mv -vt /home/user /var/tmp/myfile1.txt /var/tmp/myfile2.txt '/var/tmp/myfile1.txt' -> '/home/user/myfile1.txt' '/var/tmp/myfile2.txt' -> '/home/user/myfile2.txt'
Видалення проводиться за допомогою команди rm. Щоб видалити декілька файлів, просто вкажіть їх імена через пробіл в командному рядку як аргументи rm:
$ cd /tmp $ touch file1 file2 $ ls -l file1 file2 -rw-r--r-- 1 root root 0 Jan 1 16:41 file1 -rw-r--r-- 1 root root 0 Jan 1 16:41 file2 $ rm file1 file2 $ ls -l file1 file2 ls: file1: No such file or directory ls: file2: No such file or directory
Видалені файли неможливо відновити. Тому багато початківців використовують опцію «-i» команди rm, яка вимагає запитувати у користувача підтвердження видалення кожного файлу.
$ rm -i file1 file2 rm: remove regular empty file `file1'? y rm: remove regular empty file `file2'? y
Є два способи видалення директорій: можна по черзі видалити весь вміст директорії, а потім використати команду rmdir для видалення самої директорії:
$ mkdir mydir $ touch mydir/file1 $ rm mydir/file1 $ rmdir mydirАле, зручніше використовувати команду «rm -rf» для видалення директорії з усім її вмістом:
$ rm -rf mydir
Синтаксис шаблону: * і?
* Відповідає нулю або більшій кількості символів:- /etc/g* — всі файли в директорії /etc/ імена яких починаються з «g» і файл з ім'ям «g».
- /tmp/my*1 — всі файли в директорії /tmp імена яких починаються з «my» і закінчуються на «1» (включаючи файл з ім'ям «my1»)
- myfile? — будь-який файл чиє ім'я починається зі слова «myfile» за яким слідує один будь-який символ.
- /tmp/notes?txt — відповідає файлам з іменами «notes.txt» і «notes_txt» (якщо вони існують в /tmp/).
Квадратні дужки: []
Шаблон «[]» дуже схожий на «?» але дозволяє явно вказувати набір символів. Шаблон «[]» збігається з одним символом з тих що вказані в дужках. Також у дужках можна вказати діапазон символів (для цього використовується символ -/дефіс) або кілька діапазонів поспіль, тоді шаблон буде збігатися з одним будь-яким символом з цього діапазону:- myfile[12] — відповідає myfile1 і myfile2. Шаблон буде працювати поки існує хоча б один з цих двох файлів.
- [Cc]hange[Ll]og — відповідає файлам з іменами Changelog, ChangeLog, changeLog, і changelog. Як ви могли помітити, використання шаблону «[]» корисно при пошуку імен що відрізняються регістром літер.
- ls/etc/[0-9]* — вивести список файлів в директорії /etc/ імена яких починаються з цифри.
- ls/tmp/[A-Za-z]* — вивести список файлів в директорії /tmp/ імена яких починаються з літери (великої чи прописної).
Конструкція «[!]» схожа на «[]», за винятком того що вона відповідає одиничному символу, не згаданому між «[! і ]». наприклад:
- rm myfile[!9] — видалить всі файли, імена яких складаються з слова «myfile» і однією цифрою, крім файлу «myfile9».
Підписатися на:
Дописи (Atom)