пʼятниця, 11 січня 2008 р.

Чи така страшна консоль як її малюють?

Один із розповсюджених стереотипів про Linux серед новачків говорить
про те, що тут майже нічого не можна зробити без знання команд. Ну,
насправді це не так, тобто вже далеко не так. Проте не дивлячись на
розвинутість таких графічних середовищ як Gnome та KDE та величезну
кількість графічних конфігураторів, все ж таки велика кількість
користувачів Linux рано чи пізно приходить до думки, що з консоллю
варто познайомитися. У даній статті я спробую описати основи роботи з
консоллю і показати як вона може допомогти у ряді випадків зекономити
час і збільшити продуктивність праці. У Windows також існує консоль,
проте там ї рідко використовують, не в останню річ звичайно через певну
її обмеженість. Консоль Linux має на порядок більше можливостей але
багато мігрантів з платформи Windows про них і не здогадуються. На жаль.

Отже, спочатку трохи теорії. Під консоллю зазвичай розуміють текстовий
інтерфейс якому користувач вказує, що робити з допомогою набору на
клавіатурі певного набору спеціальних команд, а результат їх виконання
може бачити на екрані. Дана функціональність у Linux забезпечується
спеціальною програмою - командним процесором. У світі існує багато
типів командних процесорів (sh, csh, ksh, bash та ін.) проте у сучасних
дистрибутивах Linux зазвичай використовуєтсья bash. В інших системах
*nix можуть використовуватися й інші процесори, наприклад sh, тому щоб
не було проблем з кросплатформеним софтом у Linux також можна знайти
файл sh але типово він є просто символічним посиланням на той же bash.
Всі ми знаємо, що графічний інтерфейс Linux не є настільки жорстко
інтегрованим у систему, як наприклад це зроблено у Windows чи там BeOS,
тобто насправді ви можете використовувати свою систему і без
встановленої X Windows System (у простонародді "ікси"), тоді при
завантаженні системи вас спитають логін і пароль після чого
завантажиться командний процесор і ви попадете у текстову консоль. У
графічному ж режимі у вашому розпорядженні завжди є так звані емулятори
терміналу які дозволяють відкривати консольну сесію у вашому графічному
менеджері.

Перше, що потрібно знати, це те, що у вашій системі вже передбачено
шість незалежних текстових консолей. Між ними можна перемикатися
натискаючи клавіші Ctrl+Alt+F1..F6. Натиснувши якусь із цих комбінацій
клавіш ви попадете у чисту консоль з повноекранним текстовим режимом.
Кожну з консолей можна використовувати незалежно від інших, тобто можна
запустити на одній з них одну програму, а на іншій ще якусь і
перемикатися між ними у довільному порядку. Якщо ви перейшли у
текстовий режим з графічного, то повернутися назад у своє звичне
графічне середовище ви можеет натиснувши Ctrl+Alt+F7. Це повинно бути
ясно.

Звичайно потрапити у консоль можна і не виходячи з графічного режиму.
Для цього як я вже говорив служать емулятори терміналу, ці програми
можна вважати своєрідним аналогом командного рядка DOS у Windows. Існує
багато різних емуляторів терміналу, проте не це зараз важливо. Оскільки
Ubuntu використовує у якості графічного середовища Gnome, то у вашому
розпорядженні вже є як мінімум два таких емулятори. Перший - це X
Terminal (xterm), є стандартним емулятором терміналу для X Windows і
присутній у будь якій системі де є "ікси". Натисніть Alt+F2, це
стандартна комбінація яка викликає діалог звідки можна запускати
програми використовуючи команди (у Windows є аналогічна комбінація -
Win+R), наберіть xterm і натисніть Enter. Результат буде ось таким:



Цей емулятор забезпечує лише базові можливості, жодних наворотів тут
немає, але у захищеному режимі X Windows зазвичай є доступним лише він,
тому знати про його існування потрібно. Тепер оберемо
Програми->Стандартні->Термінал, так ми запустимо програму
Gnome Terminal. Цей емулятор вже набагато більш зручний і
функціональний (можна використовувати вкладки, буфер обміну, обирати
кольори та ін.), а головне і швидший у роботі.



Тепер коли ми знаємо як попасти у консоль займемося її вивченням.
Поглянемо у вікно терміналу, зліва від блимаючого текстового курсору
можна побачити рядок який називають запрошенням. Він містить інформацію
про активного користувача, ім'я даного комп'ютера та поточний каталог.
Символ ~ (тильда) у даному випадку вказує на те, що активним є домашній
каталог користувача.

Команди являють собою набір літер латинського алфавіту. Якщо ви хоча б
трохи володієте англійською мовою, то запам'ятати більшість з них не
важко, знання команд DOS також зайвим не буде, деякі з них є спільними
для обох систем. Багато команд можуть потребувати параметри, тоді їх
вказують після імені команди відокремлюючи пробілом. До параметрів
відносять і опції, вони використовуються для того щоб модифікувати
роботу команди, опції типово задаються у вигляді параметрів першим
символом якиї є дефіс (-). Тепер перейдемо до практики.

Перше, що потрібно знати, це те, що практично кожна команда Linux має
свою сторінку з документацією. Такі сторінки можна читати з допомогою
команди man (від MANual) або ж через меню Система->Допомога та
підтримка->Advanced Topics->Terminal Command References.
Наприклад, якщо набрати команду
man ls

на екрані з'явиться така інформація про команду ls



Текст можна гортати стандартним способом, використовуючи клавіші зі
стрілками, PgUp, PgDn. Для виходу з режиму перегляду документації
потрібно натиснути q (від Quit). Насправді для перегляду сторінок man
використовується стандартний консольний переглядач less, тому
натиснувши h (Help) ви зможете побачити перелік всіх його функцій.
Наприклад набравши ?якесь_слово ви зможете здійснити пошук тексту на
стрінці, а потім з допомогою клавіші n (Next) переходити на ті місця у
тексті де дане слово було знайдено. До речі, з допомогою man можна
шукати команди по ключовим словам, для цього використовується опція -k.
Ну наприклад вам захотілося взнати які команди допомагають керувати
процесами:

bum@impress:~$ man -k processes
aa-unconfined (8) - output a list of processes with tcp or udp ports that do not have AppArmor profiles loaded
fuser (1) - identify processes using files or sockets
gnome-system-monitor (1) - view and control processes
killall (1) - kill processes by name
killall5 (8) - send a signal to all processes.
peekfd (1) - peek at file descriptors of running processes
pgrep (1) - look up or signal processes based on name and other attributes
pkill (1) - look up or signal processes based on name and other attributes
ps (1) - report a snapshot of the current processes.
pstree (1) - display a tree of processes
pstree.x11 (1) - display a tree of processes
renice (1) - alter priority of running processes
smbcontrol (1) - send messages to smbd, nmbd or winbindd processes
unconfined (8) - output a list of processes with tcp or udp ports that do not have AppArmor profiles loaded

Як бачите все просто, і навіть без інтернету і без наявності графічного
інтерфейсу можна взнати багато нового. Потрібно сказати, що поряд з man
присутня і ще одна система допомоги - info. Тобто набравши info ls ви
також отримаєте допомогу по команді ls, у більшості випадків сторінки
info та man дублюють одна одну, проте іноді й ні.

Отже знаннями як отримати підказку у разі чого ми запаслися, тепер
перейдемо до вивчення основних команд. Я буду приводити кокретні
приклади команд, якщо когось зацікавить заглибитися у їх вивчення
глибше, то до ваших послуг завжди є man. Почнемо з отримання системної
інформації про комп'ютер:

cat /proc/cpuinfo   - виводить інформацію про
центральний процесор
cat /proc/meminfo   - виводить звіт про використання
пам'яті
cat /proc/swaps     - показує
використання розділу підкачки
cat /proc/version   - показує версію ядра Linux
cat /proc/net/dev   - показує наявні мережеві
адаптери і статистику передачі пакетів
cat /proc/mounts    - виводить інформацію
про змонтовані файлові системи
lspci-tv - виводить інформацію про PCI пристрої
lsusb-tv - виводить інформацію про підключені USB пристрої
date           - виводить поточну дату
cal 2008       - виводить календар на 2008 рік
uptime   - час, що минув з моменту останнього завантаження


Вищенаведені команди дуже корисні, особливо якщо у вас не збереглося
жодної інструкції з часу купівлі комп'ютеру. І як бачите, щоб отримати
інформацію про те, що ж там у ньому всередині насправді жодні сторонні
програми не потрібні, все можна зробити стандартними командами.

У наступну групу команд можна виділити команди які дозволяють вимикати,
перезавантажувати комп'ютер та ін. Більша частина подібних команд не
буде працювати якщо їх запускати від імені простого користувача, тому
щоб отримати права суперкористувача потрібно не забувати
використовувати перед ними префікс sudo.

shutdown -h now    - вимкнути комп'ютер
негайно
shutdown -h hours:minutes   - автоматично вимкнути
комп'ютер у певний час
shutdown -c- відмінити раніше заплановане вимкнення комп'ютера
reboot- перезавантажити систему
logout- завершити сеанс поточного користувача


Тепер згадаємо команди для роботи з файловою системою:
cd /home   - перейти у каталог /home
cd ..   - перейти на один рівень вгору
cd      - перейти у домашній каталог
cd ~user   - перейти у домашній каталог користувача user
cd      - повернутися у попередній каталог
pwd     - показати повний шлях до поточного каталогу
ls      - показати перелік файлів і каталогів
ls -l   - показати перелік файлів і каталогів у розгорнутій формі
ls -a   - показати повний вміст поточного каталогу включаючи приховані файли
mkdir doc - створити каталог doc
mkdir doc1 doc2- створити два каталоги, doc1 та doc2
mkdir -p /tmp/dir1/dir2- створити дерево каталогів
rm -f file1 - знищити файл file1
rm -rf dir1 - знищити каталог dir1 разом з його вмістом
mv dir1 new_dir- перемістити або перейменувати файл чи каталог
cp file1 file2- копіювання файлу
ln -s file1 lnk1 - створити символічне посилання на файл
ln file1 lnk1 - створити фізичний лінк на файл чи каталог


Можна згадати і ще ряд корисних команд:

df   - показати скільки місця використовується на дисках
passwd   - змінити пароль користувача
chmod a+rw file1   - дозволити всім користувачам читати і редагувати файл file1
chmod +x file1     - дозволити виконання файлу file1 як програми
chown user1 file1  - змінити власника файлу file1 назначивши user1
tar -xzvf archive.tar.gz   - розпакувати запакований архів у поточний каталог
dpkg -i package.deb   - встановити пакет
apt-get install package_name   - встановити пакет з репозиторію
apt-get update   - оновити інформацію про репозиторії
apt-get clean    - очистити кеш apt


Ну і мабуть на цьому закінчимо, більш докладний перелік популярних
команд можна знайти тут:
http://www.linuxguide.it/commands_list.php?Single_page

Тепер вже знаючи певний набір команд спробуємо заглибитися глибше.
Термінал у Linux підтримує певний набір гарячих клавіш. Ми вже
згадували про комбінації перемикання між різними терміналами, а тепер
вивчемо комбінації які дозволять використовувати консоль більш
продуктивно.

  • Tab - автодоповнення команд. Наприклад вам потрібно набрати команду
    ifconfig, не обов'язково набирати її повністю, достатньо набрати лише
    перші літери ifc, а потім натиснути Tab - система сама доповнить
    команду до її повного варіанту ifconfig, залишиться лише натиснути
    Enter. Ця функція доречі працює не лише з іменами команд але і з
    іменами файлів якщо вони використовуються у якості параметрів команди.
    Власне це одна з найкорисніших і найпопулярніших функцій яка є у
    консолі Linux.

  • Стрілка вгору - перегляд історії команд.

  • Shift+PgUp/Shift+PgDn - прокрутка тексту виведеного на
    консоль. Деякі
    команди виводять на екран багато тексту і він не поміщається на екрані,
    з допомогою цих клавіш якраз і можна побачити ту частину тексту яка не
    помістилася на екрані.

  • Ctrl+Alt+Del - перезавантажити комп'ютер.

  • Ctrl+C - завершити виконання активної програми.

  • Ctrl+D - вихід з активного терміналу.

  • Ctrl+Z - перевести активну програму (процес) у фоновий
    режим. Ну
    наприклад ви запустили файловий менеджер mc, а потім захотіли запустити
    ще й текстовий редактор emacs, таким чином з допомогою цієї комбінації
    клавіш ви можете перевести mc у фоновий режим після чого стандартним
    способом запустити emacs.



Ну і якщо ми вже заговорили про процеси, то бажано знати і команди як
вивести процес із фонового режиму, та й взагалі як ними керувати. Ну
наприклад я запустив mc, потым з допомогою Ctrl+Z перевів його у
фоновий режим після чого запустив редактор vi. Тепер якщо я з допомогою
тієї ж комбінації Ctrl+Z пошлю vi у фоновий режим я зможу з допомогою
команди ps (ProceSses) побачити які ж процеси у мене працюють:

bum@impress:~$ ps
  PID
TTY         
TIME CMD
 9974 pts/0    00:00:00 bash
 9993 pts/0    00:00:00 mc
10022 pts/0    00:00:00 vi
10024 pts/0    00:00:00 ps


Наприклад тепер якщо я захочу повернутися до роботи з mc я можу набрати
fg mc, тобто команда fg (ForeGround) використовується для того щоб
вивести процес із фонового режиму. Ще потрібно звернути увагу на перший
стовпчик у виводі команди ps, а саме PID. Це ідентифікатор який
присвоюється системою кожному процесу, він унікальний. Знаючи PID можна
примусово завершити виконання будь-якогопроцесу. Наприклад якщо ми
наберемо у даному випадку kill 10022, то редактор vi буде закрито.
Можуть бути й інші випадки, наприклад ваша графічна підсистема зависла
з прини якоїсь з програм, тоді перейшовши з допомогою Ctrl+Alt+F1 у
текстову консоль ви можете продивитися перелік всіх запущених процесів
з допомогою команди ps -a, занйшовши таким чином PID потрібної вам
програми ви можете легко завершити її виконання з допомогою команди
kill, після чого комбінацією Ctrl+Alt+F7 повернутися наад у графічний
режим. Щодо терміналу у графічному режимі, то у ньому є доступною ще
одна дуже корисна команда - xkill. Після набору цієї команди курсор
мишки приймає форму хрестика, тепер ви можете клікнути ним наприклад по
вікну зависшої програми і її буде негайно закрито. Але будьте
обережними, не клацніть по робочому столу, а то приб'єте і саме робоче
середовище.

Наступне, що потрібно знати, це спеціальні символи:

~   - домашній каталог користувача
.   - посилання на поточний каталог
..  - батьківський каталог (на рівень вище)
?   - заміняє будь-яку одну літеру в імені файлу
*   - заміняє довільну кількість літер


Все це нагадує DOS. Так, ви можете наприклад набрати ls a* і система
покаже вам перелік файлів, що починаються літерою a. Якщо напишете dpkg
-i *.deb, то система занйде у поточному каталозі всі наявні файли
пакетів і встановить їх у систему.

Також потрібно згадати ще про деякі речі. Дуже важливим є можливість
перенаправлення вводу/виводу. Для цього служить символ >.
Наприклад якщо ви напишете ls /dev > doc.txt то команда ls
виведе вміст каталогу не на екран, а запише його у файл doc.txt. Ще
однією корисною штукою є можливість об'єднувати групу команд у так
званий конвейєр, у такому випадку вивід однієї команди буде автоматично
направлено на ввід іншої і т.д. до кінця конвейєру, команди у конвейєрі
розділяються символом |. Приклад практичного використання таких
конструкцій я вже приводив у статті про конвертацію mp3-тегів. Звісно ж
bash підтримує і скрипти, тобто ви можете автоматизувати певні свої
операції. Причому скриптова мова тут досить потужна, порівнювати її з
bat-файлами у DOS чи Windows не можливо на віть близько. Це дуже
зручно. Я не буду на тут зупинятися, це предмет окремої розмови і може
потягнути на цілу книжку, кому цікаво той завжди може скористатися
Гуглом.

І наостанок хотілося б навести набір програм які можуть бути дуже
корисними при роботі у консолі.

Midnight Commander
Команда для запуску: mc
Це класичний двопанельний файловий менеджер, свого роду той же Norton
Commander але для *nix систем. Крім роботи з файлами може
використовуватися також і як ftp-клієнт.



Nano
Команда для запуску: nano [ім'я файлу]
Простий текстовий редактор. Він не такий відомий як vi проте є набагато
зручнішим для звичайного користувача, хоча звичайно ж і не має такого
монстроподібного набору функцій. Дуже зручний для редагування системних
конфігураційних файлів. Зберігається файл комбінацією Ctrl+O, а вихід з
програми - Ctrl+X. Власне всі комбінації наведено внизу вікна програми.



ViM
Команда для запуску: vi [ім'я файлу]
Текстовий редактор з давньою історією і з гігантськими можливостями.
Проте розуміння всіх його плюсів дано не кожному, спочатку доведеться
повоювати з його далеко не інтуітивним інтерфейсом, а вірніше навіть
повною відсутністю останнього. Його вивченню можна присвятити цілу
книжку, зараз же скажу лише як з нього вийти - потрібно натиснути :
(двокрапка), це переведе редактор у командний режим після чого виконати
команду q (від Quit).



Less
Команда для запуску: less [ім'я файлу]
Стандартний переглядач текстових файлів. Для завершення перегляду
потрібно набрати команду q.



Links
Команда для запуску: links [адреса]
Текстовий веб-браузер. Досить корисна штука якщо потрібно знайти якусь
інформацію в Інтернеті при відсутності робочого графічного режиму.
Швидкість звичайно просто феноменальна, а кирилічні літери замінюють
транслітом, тому наявність кирилічних шрифтів також не обов'язкова. F10
викликає меню.



Aptitude
Команда для запуску: aptitude
Це не, що інше як консольний варіант Synaptic. Тобто менеджер пакетів.




MOC (Music on Concole)
Команда для запуску: mocp
Консольний медіаплеєр. Так, щоб слухати музику графічний режим не
обов'язковий.



Ну власне, на цьому мабуть і закінчу. Головне, що скажу - не потрібно
боятися консолі, у ній нема нічого страшного. Звісно у сучасних
дистрибутивах Linux практично все можна зробити через графічний
інтерфейс, але практичне вміння користуватися консоллю з одного боку
допоможе повернути систему у робочий стан якщо раптом графічна
підсистема перестане запускатися, а по-друге допоможе у ряді випадків
підвищити продуктивності праці. Адже такі консольні програми як
ImageMagick, gnuplot, dcraw наприклад допоможуть за один захід обробити
величезний набір графічних даних, latex допоможе зверстати публікацію
поліграфічної якості, а з допомогою sed можна обробляти в пакетному
режимі текстові файли. Консоль дійсно в умілих руках є дуже потужною
річчю і справа тут зовсім не у бажанні випендритись. Тож вдалих вам
експериментів.кулинрия mip.reckul.ru рецепты из мяса и птицы

1 коментар: