Разработка сайта для Вашего бизнеса. Веб дизайн. Дизайн логотипа, фирменного стиля, рекламная фотография . Комплексный рекламный креатив.

Ralex. We do the work.
На рынке с 1999го года. Средняя ценовая категория. Ориентация на эффективность решений.
Ознакомтесь с нашим портфолио
Узнайте больше о услугах
Свяжитесь с нами:
E-mail: [email protected]
Tel: (044) 587 - 84 - 78
Custom web design & дизайн и разработка сайта "под ключ"
Креативный, эффективный дизайн. Система управления сайтом (СУС).
Custom flexible разработка систем электронной коммерции
Система e-commerce разрабатывается под индивидуальные потребности. Гибкая функциональность.
Search Engine Optimzation & оптимизация под поисковые системы (SEO)
Постоянная оптимизация и мониторинг сайта в поисковых системах. Достигаем результата быстро и эффективно
Custom logo design & дизайн логотипа и фирменного стиля
Многолетний опыт. Огромное портфолио. Уникальное предложение и цена.
профессиональная рекламная фотография
креативно, смело, качественно
Custom logo design & рекламный креатив. дизайн рекламы
Многолетний опыт. Огромное портфолио. Уникальное предложение и цена.

UNIX Basics

  1. GNU утиліти
  2. Вступ
  3. GNU утиліти
  4. grep
  5. Регулярні вирази
  6. cut & paste
  7. сторінка відгуків


GNU утиліти

Наша взаимовыгодная связь https://banwar.org/

резюме:

Попередня замітка з цієї серії ( Basic UNIX commands ) Була оглядової по ОС Linux - ми розглянули основи цієї операційної системи. Наступним кроком буде вивчення команд Unix, які в поєднанні з оболонкою дозволяють більш ефективно управляти файлами і самої ОС, що ми і зробимо в цій статті.


Вступ

Перед вивченням команд зробимо невеликий відступ і перерахуємо деякі факти з їх історії. Ken Thompsom і Denis Ritchie, створюючи ОС Unix на початку 70-х, намагалися зробити її зручною для програмістів. Одним з рішень було створення набору інструментів, невеликих за обсягом, для вирішення специфічних завдань. Рішення складніших завдань здійснювалося за допомогою взаємодії цих інструментів, при якому результати дії однієї команди ставали вихідними даними для іншої.

Така взаємодія є завдяки наявності конвеєрів і перенаправлення результатів роботи (див. У попередній замітці).

Продемонструємо це на простому прикладі:

$ Who | grep pepe

who і grep дві різні команди об'єднані конвеєром "|". who виводить список всіх користувачів, що працюють в даний момент на комп'ютері:

$ Who manolo tty1 Dec 22 13:15 pepe ps / 2 Dec 22 14:36 ​​root tty2 Dec 22 10:03 pepe ps / 2 Dec 22 14:37

Результатом є рядки, що складаються з 4-х полів, розділені символом табуляції: ім'я користувача, термінал, дата і час підключення.

"Grep pepe" вибирає тільки рядки, що містять "pepe".

$ Who | grep pepe pepe ps / 2 Dec 22 14:36 ​​pepe ps / 2 Dec 22 14:37

Можливо ваша задача простіше - хто-небудь взагалі працює на комп'ютері чи ні? Відповідна команда wc.

wc - підраховує кількість символів, слів чи рядків. У нашому випадку підходить опція для за рахунками рядків -l.

$ Who | wc -l 4 $ who | grep pepe | wc -l 2

Четверо працюють на комп'ютері в загальному і зокрема pepe на 2 терміналах.

Перевіримо чи працює antonio:

$ Who | grep antonio | wc -l 0

GNU утиліти

Засновник проекту GNU Richard Stallman підняв питання про контроль розвитку комп'ютерної науки декількома великими компаніями, що ускладнює її природний розвиток. Деякі великі комерційні фірми взяли за основу редактор emacs, розроблений в MIT, і створили свої власні редактори, і це вже було неприємним фактом. Цей випадок поклав початок нового проекту, в рамках якого всі вихідні тексти ставали доступними всім. Цей проект отримав назву GNU, стратегічною метою якого було створення ОС з відкритим кодом. Першими кроками були новий emacs, компілятор c (gcc) і кілька інструментів для Unix систем. Ці інструменти і розглядаються в цій статті.

grep

Наш перший приклад був більш загальним, зараз розглянемо більш докладно.

синтаксис:

$ Grep [-options] pattern files

Найбільш часто використовувані опції:
-n друкувати номер рядка
-c друкувати колическтво виявлених збігів
-v пошук рядків не містять заданого шаблону

Шаблон - набір символів для пошуку. Якщо шаблон містить пробіл - необхідно помістити його в лапки ( "):

$ Grep "Hola mundo" file.txt

Якщо ми шукаємо рядки, що містять wildcards, апострофи, лапки або slash - вони повинні бути поміщені в лапки або перед таким символом треба використовувати так званий escape - символ '\' для виключення обробки даного символу оболонкою.

$ Grep \ * \ "\ '\? \ *"'?

Регулярні вирази


grep і інші GNU утиліти дозволяють виконувати більш складний пошук, завдяки регулярними виразами, які схожі з wildcards оболонки в сенсі того, що можуть замінювати символи або групи символів. В кінці замітки в розділі "посилання" є адреса окремої замітки присвяченій регулярними виразами.
Кілька прикладів: $ grep cn пошук будь-якого входження рядка, що складається з "c", будь-якого символу і "n". $ Grep "[Bc] el" пошук будь-якого входження "Bel" або "cel". $ Grep "[mo] ata" пошук будь-якого входження з mata, nata або oata. $ Grep "[^ mo] ata" пошук будь-якого входження рядка, що закінчується на ata і не містить символи "m", "n" або "o" в якості першої літери. $ Grep "^ Martin come" пошук рядка, що починається з "Martin come". Так як символ ^ не укладено в квадратні дужки - він позначає початок рядка. $ Grep "durmiendo $" пошук рядків, що закінчуються на "durmiendo". Символ $ позначає кінець рядка. $ Grep "^ Caja San Fernando gana la liga $" пошук рядків точно збігаються з заданої.
Як було сказано раніше - для пошуку спеціальних символів необхідно використовувати "\": $ grep "E \ .T \." пошук "ET".

Find


Команда застосовується для пошуку файлів. Раніше вже була написана замітка в журналі Linux Focus про цю команду і найкраще що ми можемо зробити - дати посилання на неї.

cut & paste


Інформація в ОС Unix зберігається в ASCII файлах, в яких рядки і поля розділяються спеціальними символами - такими як табуляція або двокрапка. Іноді буває необхідно частину одного файлу вставити в інший. Команди cut і paste якраз і призначені для цього.
Розглянемо на прикладі файлу / etc / passwd: кожен рядок складається з семи полів, розділених двокрапкою - ім'я користувача, пароль, ім'я користувача, ідентифікатор групи, персональна інформація, домашній каталог і shell.
Приклад такого файлу: root: x: 0: 0: root: / root: / bin / bash murie: x: 500: 500: Manuel Muriel Cordero: / home / murie: / bin / bash practica: x: 501: 501: Usuario de practicas para ksh: / home / practica: / bin / ksh wizardi: x: 502: 502: Wizard para nethack: / home / wizard: / bin / bash
Якщо ми хочемо отримати ім'я користувача і його shell - необхідно взяти інформацію з полів 1 і 7: $ cut -f1,7 -d: / etc / passwd root: / bin / bash murie: / bin / bash practica: / bin / ksh wizard: / bin / bash Опція -f визначає поля, -d - роздільник (за замовчуванням символ табуляції) і завершується команда ім'ям файлу для обробки.
Крім того можна визначити набір полів: $ cut -f5-7 -d: / etc / passwd root: / root: / bin / bash Manuel Muriel Cordero: / home / murie: / bin / bash Usuario de practicas para Ksh: / home / practica: / bin / ksh Wizard para nethack: / home / wizard: / bin / bash
Якщо ми зберегли роботу будь - яких команд за допомогою & quot> "в два різних файлу, а тепер нам необхідно з'єднати їх - використовуємо команду paste: $ paste output1 output2 root: / bin / bash: root: / root: / bin / bash murie : / bin / bash: Manuel Muriel Cordero: / home / murie: / bin / bash practica: / bin / ksh: Usuario de practicas para Ksk: / home / practica: / bin / ksh wizard: / bin / bash: Wizard para nethack: / home / wizard: / bin / bash

sort


Припустимо нам треба впорядкувати файл / etc / passwd по полю з персональною інформацією - застосуємо команду sort: $ sort -t: + 4 / etc / passwd murie: x: 500: 500: Manuel Muriel Cordero: / home / murie: / bin / bash practica: x: 501: 501: Usuario de practicas para ksh: / home / practica: / bin / ksh wizard: x: 502: 502: Wizard para nethack: / home / wizard: / bin / bash root: x: 0 : 0: root: / root: / bin / bash
Неважко помітити, що файл був впорядкований відповідно до таблиці ASCII символів. Щоб ігнорувати регістр символів - використовуємо таку команду: $ sort -t: + 4f / etc / passwd murie: x: 500: 500: Manuel Muriel Cordero: / home / murie: / bin / bash root: x: 0: 0: root : / root: / bin / bash practica: x: 501: 501: Usuario de practicas para Ksh: / home / practica: / bin / ksh wizard: x: 502: 502: Wizard para nethack: / home / wizard: / bin / bash
Опція -t визначає роздільник, +4 - номер поля за яким буде проводитися сортування, f - ігнорувати регістр.
Ускладнимо приклад - відсортуємо файл спочатку по полю, який визначає shell, а потім по полю з персональною інформацією: $ sort -t: + 6r + 4f / etc / passwd practica: x: 501: 501: Usuario de practicas para Ksh: / home / practica: / bin / ksh murie: x: 500: 500: Manuel Muriel Cordero: / home / murie: / bin / bash root: x: 0: 0: root: / root: / bin / bash wizard: x: 502: 502: Wizard para nethack: / home / wizard: / bin / bash
Ще приклад - у вас є файл з персонами, яким ви позичили гроші і відповідні суми: Son Goku: 23450 Son Gohan: 4570 Picolo: 356700 Ranma 1/2: 700
Спробуємо знайти найбільш важливу персону:
$ Sort +1 deudas Ranma 1/2: 700 Son Gohan: 4570 Son Goku: 23450 Picolo: 356700 Так як кількість полів не однакове - результат трохи не той на який ми розраховували. Рішенням цієї проблеми стане опція -n команди sort: $ sort + 1n deudas Picolo: 356700 Son Goku: 23450 Son Gohan: 4570 Ranma 1/2: 700
Розглянемо опції команди:
+ Nm перейти через n полів і m символів перед виконанням команди;
-nm зупинити сортування при досягненні m символу в n поле;
-b ігнорувати прогалини і знаки табуляції на початку рядки
-d сортувати використовуючи тільки літери, цифри та пробіли
-f ігнорувати регістр
-n сортувати за номерами рядків
-r зворотний порядок сортування

wc


Як ми вже згадували раніше wc - лічильник символів, слів і рядків. За замовчуванням результатом виконання команди є відображення кількості символів, слів і рядків в заданому файлі.
Розглянемо опції:
-l тільки рядки
-w тільки слова
-c тільки символи

cmp, comm, diff


Іноді необхідно знати в чому полягає відмінність двох версій одного і того ж файлу. Наприклад в програмуванні - над проектом працює багато людей і необхідно відстежувати внесені зміни до початкового коду. Розглянемо команди призначені для вирішення цього завдання.
Почнемо з cmp - порівнює два файли і видає інформацію про першому виявленому відміну (в форматі: номер символу і рядки): $ cmp old new old new differ: char 11234, line 333
Наступна команда comm - видає інформацію в такому форматі: перше значення - кількість унікальних рядків 1-го файлу, друге - кількість унікальних рядків 2-го файлу, третє - кількість співпадаючих рядків.
За допомогою опцій -1, -2 і -3 можна відключити висновок інформації по одній з колонок. Наступний приклад демонструє використання команди comm для отримання інформації про унікальні рядках 1-го файлу і співпадаючих рядках. $ Comm -2 old new
І нарешті команда diff - основна для складних завдань. Якщо ви хочете встановити нове ядро ​​- ви завантажуєте вихідні тексти нового ядра або патч, який значно менше в обсязі. Зазвичай патч має суфікс diff. Використання патча краще - ви завантажуєте менше файлів (тільки зміни), змінюєте свої файли відповідно до патчем і компілюєте. Без опцій команда видає інформацію про те, які зміни слід зробити щоб файли стали однаковими. $ Diff old new 3c3 The Lord of the Rings 78a79,87> Three Rings for the Elven-kings under the sky,> Seven for the Dwarf-lords in their halls of stone,> Nine for Mortal Men doomed to die,> One for the Dark Lord on his dark throne> In the Land of Mordor where the Shadows lie. > One Ring to rule them all, One Ring to find them,> One Ring to bring them all and in the darkness bind them> In the Land of Mordor where the Shadows lie.
3c3 позначає, що необхідно змінити 3 рядки замінивши в них "The Hobbit" на "The Lord of the Rings", 78a79,87 визначає рядка для зміни.

uniq


Команда uniq мспользуется для виведення тільки унікальних значень. Наприклад нам необхідно отримати інформацію про працюючі зараз на комп'ютері, для цього ми використовуємо команди who і cut. $ Who | cut -f1 -d '' root murie murie practica
Тепер нам необхідно виконати команду, яка виводила б тільки унікальні імена (без повторень): $ who | cut -f1 -d '' | sort | uniq murie practica root
Опція -d '' визначає роздільником пробіл, тому що команда who використовує пропуск замість символу табуляції.
Команда uniq порівнює тільки сусідні рядки. У нашому прикладі "murie" з'являються одна за одною, але могло бути інакше. Ця обставина і пояснює використання нами команди sort.

sed


sed - потоковий редактор, один з найпопулярніших інструментів Unix. Використовуючи синтаксис sed можна створювати і використовувати командні файли, щось на зразок batch файлів MS-DOS. Можливості цього редактора досить широкі і їх розгляд зробило б цю замітку дуже об'ємною. Тому ми лише коротко розглянемо основи sed, а допитливий користувач може самостійно вивчити man та info pages.
Синтаксис: $ sed 'command' files
Розглянемо приклад, в якому ми міняємо все "Manolo" на "Fernando" в файлі: $ sed 's / Manolo / Fernando / g' file
Результат виводиться через стандартний потік виведення, следоватеьно для його збереження можна використовувати ">".
Багато напевно побачили схожість з командою редактора vi search & replace. Насправді більшість команд ":" (звернення до ex) є командами до sed.
Звичайне використання sed зводиться до наступного: визначається діапазон для зміни і застосовується команда. Діапазон може бути рядком, набором рядків або шаблоном.
Деякі команди: Команда Дія ------- ------ a \ додати рядок після адресованих c \ змінити адресовані рядки d видалити рядок (і) g замінити всі i \ вставити рядки p вивести рядок q завершити після досягнення адресному рядки r file читати файл s / one / two замінити "one" на "two" w file записати в файл за вказаною адресою = виводити номер поточного рядка! command застосувати команду до адресному рядку
Використовувати sed можна визначивши рядок або набір рядків: $ sed '3d' file видалить третій рядок у файлі $ sed '2,4s / e / # /' file замінить перше входження символу "e" на символ "#" в рядках 2-4 включно,
або шаблон: $ sed '/ [Qq] ueen / d' songs видалить всі рядки містять "Queen" або "queen".
Якщо необхідно видалити порожні рядки, підійде наступна команда: $ sed '/ ^ $ / d' file але в даному випадку не будуть видалені рядки складаються з прогалин. Наступна команда вирішить і цю проблему: $ sed '/ ^ * $ / d' file де "*" позначає будь-яку кількість попереднього символу, в нашому випадку це пробіл - "". $ Sed '/ InitMenu / a \> the text to append' file.txt У наступному прикладі ми шукаємо рядок, що містить "InitMenu" і додаємо новий рядок після неї. Цей приклад працює тільки в оболонках bash або sh. Спочатку ви вводите все до a \ включно, натискаєте Enter і набираєте інше.
Tcsh сприймає символ нового рядка в одинарних лапках по - іншому, тому рекомендується використовувати подвійні лапки. $ Sed '/ InitMenu / a \? the text to append 'file.txt Символ? аналогічний> в оболонці bash.

awk


Назва awk походить від імен розробників: Alfred Aho Peter Weinberger і Brian Kernighan.
awk одна з найцікавіших утиліт Unix, з її допомогою вирішується безліч різноманітних завдань.
Також необхідно зауважити, що sed і awk - основа більшості shell - скриптів. Рішення за допомогою цих утиліт вражають, особливо якщо брати до уваги, що не використовуються компільовані мови, такі як С. Наприклад установча програма дистрибутива SlackWare Linux - shell - скрипт або ще приклад - безліч cgi - програм також shell - скрипти.
В наші дні утиліти командного рядка використовуються все менше з - за застосування графічного інтерфейсу. Важливо й поява мови PERL - багато shell - скрипти були замінені PERL - скриптами. Створюється враження, що скоро утиліти командного рядка взагалі перестануть використовувати. Проте з мого досвіду випливає, що безліч завдань можна вирішити кількома рядками shell - скрипта. Крім того ваша робота буде більш ефективною якщо ви знаєте як використовувати ці команди в поєднанні з оболонкою.
Розглянемо невеликий приклад. Візьмемо файл "sales", в якому міститься інформація про куплені продукти, їх кількість і ціну за одиницю: oranges 5 Пробіг: 250 peras 3 120 apples 2 360
Файл складається з 3-х рядків, поля яких розділені символом табуляції. Створимо 4-е поле, що містить загальну суму для кожного продукту: $ awk '{total = $ 2 * $ 3; print $ 0, total} 'sales oranges 6 250 1250 peras 3 120 360 apples 2 360 720
Мінлива total містить інформацію для 4-го поля. Після обчислення - виводиться вихідна рядок і змінна total.
awk прекрасно підходить для вирішення завдань при роботі з текстовими файлами. Раджу вам звернути увагу на man і info pages, якщо вам сподобалася ця утиліта.

Shell - скрипти


Shell - скрипти - послідовність команд, зібраних в файл.
Їх можна порівняти з batch файлами DOS, але shell - скрипти більш потужні.
Shell - скрипти звичайно працюють з переданими аргументами, які сприймаються як змінні $ 0 (ім'я самого файлу), $ 1, $ 2, ... $ 9. Всі аргументи містяться в змінній $ *.
Shell - скрипти можна створити за допомогою будь-якого текстового редактора. Для виконання shell - скрипта використовуйте наступну команду: $ sh shell-script Або можна зробити скрипт виконуваним за допомогою команди: $ chmod 700 shell-script і виконати наступним чином: $ shell-script
На цьому ми закінчуємо замітку і розмова про shell - скриптах. В наступній замітці розглянемо текстові редактори Unix - vi & emacs. Це необхідні програми для кожного користувача Linux.

посилання


Це ознайомча замітка. Більш детальна інформація про розглянутих утиліти в інших нотатках журналу Linux Focus:

Бібліографія

Додаткове читання:
  • The lord of the rings, JRR Tolkien.

сторінка відгуків

У кожної замітки є сторінка відгуків. На цій сторінці ви можете залишити свій коментар або переглянути коментарі інших читачів.

2000-11-03, generated by lfparser version 1.9

Grep \ * \ "\ '\?
Quot;'?
Sed '/ InitMenu / a \?
Txt Символ?
Категории
  • Биология
  • Математика
  • Краеведению
  • Лечебная
  • Наука
  • Физике
  • Природоведение
  • Информатика
  • Новости

  • Новости
    https://banwar.org/
    Наша взаимовыгодная связь https://banwar.org/. Запустив новый сайт, "Пари Матч" обещает своим клиентам незабываемый опыт и возможность выиграть крупные суммы.


    Наши клиенты
    Клиенты

    Быстрая связь

    Тел.: (044) 587-84-78
    E-mail: [email protected]

    Имя:
    E-mail:
    Телефон:
    Вопрос\Комментарий: