Відмінності між версіями «Цікаві набори команд»

Матеріал з Вікі ЦДУ
Перейти до: навігація, пошук
(Консоль)
 
(не показані 23 проміжні версії цього учасника)
Рядок 1: Рядок 1:
== Робота з файлами ==
+
Команди поділяються на внутрішні та зовнішні. Внутрішні - це інтегровані у систему безпосередньо, фізично зашиті у ядро системи. Зовнішні - це цілком незалежні програми-виконувані файли, розміщені фізично за замовченням у системних каталогах операційної системи. Поняття команди та програми у такому розумінні дуже тісно переплітаються.
# ''' cat config.conf | sed -e '/^#/d' -e '/^$/d' ''' - (вивести вміст конфігураційного файлу без коментарів, коментарі помічаються на початку рядка знаком '''#''').
+
 
 +
Команда - це свого роду формат виклику деякого коду програми, що зберігається або у ядрі системи або фізично у файлі, якому операційна система просто передає часткове управління.
 +
 
 +
Майже усі команди в середовищі Linux-подібних ОС мають за замовченням дуже потужну довідкову систему. Формат виклику довідкової інформації щодо конкретної команди:
 +
<p align=center>''' man НАЗВА_ПРОГРАМИ '''</p>
 +
 
 +
Також більшість команд мають коротку допомогу, виклик якої має наступний формат:
 +
 
 +
<p align=center>''' НАЗВА_КОМАНДИ --help '''</p>
 +
 
 +
----
 +
 
 +
== Консоль ==
 +
# ''' [ su, su - ] ІМ'Я_КОРИСТУВАЧА ''' - зайти у консоль під користувачем ІМ'Я_КОРИСТУВАЧА. Таку процедуру без вказання паролю користувача може виконати адміністратор, інші користувачі які мають право запуску команди ''' su ''' зможуть зайти у консоль іншого користувача тільки вказавши пароль.
 +
 
 +
== Робота з файлами та каталогами ==
 +
# ''' cat config.conf | sed -e '/^#/d' -e '/^$/d' ''' - вивести вміст конфігураційного файлу без коментарів, коментарі помічаються на початку рядка знаком '''#'''.
 +
# ''' iconv -c --from-code=cp1251 --to-code=utf8 ВХІДНИЙ_ФАЙЛ > ВИХІДНИЙ_ФАЙЛ''' - перетворити кодування у вхідному файлі з CP1251 на UTF-8 з ігноруванням можливих помилок (параметр -c).
 +
# ''' sed -i 's\windows-1251\utf-8\g' ВХІДНИЙ_ФАЙЛ ''' - виконати пошук рядка '''windows-1251''' у вхідному файлі і замінити усі входження на рядок '''utf-8'''.
 +
# ''' chmod g+s КАТАЛОГ ''' - вказати, щоб при створенні нових файлів у каталозі, виконувалося наслідування прав з батьківського каталогу.
 +
# ''' find КАТАЛОГ -type f -name "*.php" -o name "*.html" ''' - пошук у каталозі та підкаталогах файлів з розширенням php та html.
 +
# ''' tail -n 100 ВХІДНИЙ_ФАЙЛ''' - вивести 100 рядків ВХІДНОГО_ФАЙЛУ починаючи з кінця на екран. Якщо параметр ''' -n ''' пропустити, то за замовченням даний параметр рівняється 10.
 +
# ''' head -n 100 ВХІДНИЙ_ФАЙЛ''' - це команда ''' tail ''' навпаки. Ця команда виведе 100 рядків ВХІДНОГО_ФАЙЛУ з початку файлу.
 +
# ''' cat ВХІДНИЙ_ФАЙЛ | grep -v -E '^#|^$' ''' - вивести файл (можливо конфігураційний) без коментарів, або ж без рядків, що розпочинаються з символа '''#'''.
  
 
== Змінне середовище ==
 
== Змінне середовище ==
 
# ''' <nowiki>export http_proxy=http://username:password@proxy_server:port/</nowiki> ''' - (встановлюємо параметри проксі-сервера для поточної консолі)
 
# ''' <nowiki>export http_proxy=http://username:password@proxy_server:port/</nowiki> ''' - (встановлюємо параметри проксі-сервера для поточної консолі)
  
== Виконувані скрипти ==
+
== Скрипти ==
  
 
Щоб створити виконуючий скрипт в системі під управлінням ОС сімейства Linux або подібних, необхідно
 
Щоб створити виконуючий скрипт в системі під управлінням ОС сімейства Linux або подібних, необхідно
Рядок 62: Рядок 85:
  
 
Запустили скрипт на виконання. У команді запуску комбінація '''./''' означає шукати в поточному каталозі, інакше система буде намагатися знайти файл на виконання у каталогах, вказаних у змінному середовищі. Вище наведений скрипт виводить рядок '''Hello world!''' на екран і повертає код виходу з програми 0.
 
Запустили скрипт на виконання. У команді запуску комбінація '''./''' означає шукати в поточному каталозі, інакше система буде намагатися знайти файл на виконання у каталогах, вказаних у змінному середовищі. Вище наведений скрипт виводить рядок '''Hello world!''' на екран і повертає код виходу з програми 0.
 +
 +
=== Скрипт для застосування прав до каталогу та його вмісту (рекурсивний обхід) ===
 +
 +
Виклик даного скрипта із указанням імені каталогу призведе, що усі файли в даному каталозі та в усіх підкаталогах отримають права типу ''' chmod 664 $file ''' а каталоги права типу ''' chmod 775 $dir '''. У скрипті наведено приклад використання умовного оператору IF та оператора циклу FOR.
 +
 +
 +
Список файлів для обробки отримуємо з результату виконання програми '''find "Директорія"'''. Результат поміщається у масив і поелементно обходиться в циклі FOR, поточне значення заноситься у змінну '''$file'''.
 +
 +
<pre>
 +
#!/bin/bash
 +
 +
DIR=""
 +
 +
if [ -z $1 ];
 +
then
 +
    echo "Ви не вказали каталог для перетворення"
 +
else
 +
    DIR=$1
 +
    for file in `find "$DIR" `; do
 +
if [ -f $file ]; then
 +
    chmod 664 $file
 +
else
 +
    if [ -d $file ]; then
 +
chmod 775 $file
 +
chmod g+s $file
 +
    fi
 +
fi
 +
chown -R root.user $file
 +
    done
 +
fi
 +
</pre>
 +
 +
=== Автоматизована конвертація файлів з кодуванням CP1251 в кодування UTF-8 ===
 +
 +
Даний приклад дає можливість перетворити усі файли з розширеннями php та html у вказаному каталозі (необхідно вказати як 1-й параметр виклику).
 +
 +
<pre>
 +
#!/bin/bash
 +
 +
DIR=""
 +
 +
if [ -z $1 ];
 +
then
 +
    echo "Ви не вказали каталог для перетворення"
 +
else
 +
    DIR=$1
 +
    for file in `find $DIR -type f -name "*.php" -o -name "*.html"`; do
 +
if [ -f $file ]; then
 +
    echo "Converting $file"
 +
    iconv -c --from-code=cp1251 --to-code=utf8 $file > $file.1
 +
    mv $file.1 $file -f
 +
    sed -i 's\windows-1251\utf-8\g' $file
 +
fi
 +
    done
 +
fi
 +
</pre>
 +
 +
Алгоритм описує:
 +
# Визначення вхідного каталогу, змінна $DIR. Якщо каталог не вказаний, скрипт видасть відповідне повідомлення.
 +
# Виконується пошук усіх файлів з розширенням php та html у поточному каталозі і результат поелементно розглядається у циклі FOR.
 +
# Додаткова перевірка, якщо вхідний файл є файлом фізично, то виконуємо подальше перетворення, інакше ігноруємо поточний файл.
 +
# Виконуємо перетворення вхідного файлу і результат записується у додатковий вихідний файл. Не можна одночасно записати результат перетворення у вхідний файл. Отримаємо порожній файл у разі, якщо виконувати перетворення вхідного файлу і одночасно у нього ж записувати результат.
 +
# Перейменовуємо тимчасовий файл у назву початкового вхідного файлу.
 +
# Виконується пошук та одночасна заміна усіх входжень рядка "windows-1251" на рядок "utf-8".
 +
# Кінець виконання алгоритму
 +
 +
<p align=right>--[[Користувач:Armyguy|Микола Діхтяр]] 12:56, 4 квітня 2014 (EEST)</p>

Поточна версія на 08:30, 28 серпня 2014

Команди поділяються на внутрішні та зовнішні. Внутрішні - це інтегровані у систему безпосередньо, фізично зашиті у ядро системи. Зовнішні - це цілком незалежні програми-виконувані файли, розміщені фізично за замовченням у системних каталогах операційної системи. Поняття команди та програми у такому розумінні дуже тісно переплітаються.

Команда - це свого роду формат виклику деякого коду програми, що зберігається або у ядрі системи або фізично у файлі, якому операційна система просто передає часткове управління.

Майже усі команди в середовищі Linux-подібних ОС мають за замовченням дуже потужну довідкову систему. Формат виклику довідкової інформації щодо конкретної команди:

man НАЗВА_ПРОГРАМИ

Також більшість команд мають коротку допомогу, виклик якої має наступний формат:

НАЗВА_КОМАНДИ --help


Консоль

  1. [ su, su - ] ІМ'Я_КОРИСТУВАЧА - зайти у консоль під користувачем ІМ'Я_КОРИСТУВАЧА. Таку процедуру без вказання паролю користувача може виконати адміністратор, інші користувачі які мають право запуску команди su зможуть зайти у консоль іншого користувача тільки вказавши пароль.

Робота з файлами та каталогами

  1. cat config.conf | sed -e '/^#/d' -e '/^$/d' - вивести вміст конфігураційного файлу без коментарів, коментарі помічаються на початку рядка знаком #.
  2. iconv -c --from-code=cp1251 --to-code=utf8 ВХІДНИЙ_ФАЙЛ > ВИХІДНИЙ_ФАЙЛ - перетворити кодування у вхідному файлі з CP1251 на UTF-8 з ігноруванням можливих помилок (параметр -c).
  3. sed -i 's\windows-1251\utf-8\g' ВХІДНИЙ_ФАЙЛ - виконати пошук рядка windows-1251 у вхідному файлі і замінити усі входження на рядок utf-8.
  4. chmod g+s КАТАЛОГ - вказати, щоб при створенні нових файлів у каталозі, виконувалося наслідування прав з батьківського каталогу.
  5. find КАТАЛОГ -type f -name "*.php" -o name "*.html" - пошук у каталозі та підкаталогах файлів з розширенням php та html.
  6. tail -n 100 ВХІДНИЙ_ФАЙЛ - вивести 100 рядків ВХІДНОГО_ФАЙЛУ починаючи з кінця на екран. Якщо параметр -n пропустити, то за замовченням даний параметр рівняється 10.
  7. head -n 100 ВХІДНИЙ_ФАЙЛ - це команда tail навпаки. Ця команда виведе 100 рядків ВХІДНОГО_ФАЙЛУ з початку файлу.
  8. cat ВХІДНИЙ_ФАЙЛ | grep -v -E '^#|^$' - вивести файл (можливо конфігураційний) без коментарів, або ж без рядків, що розпочинаються з символа #.

Змінне середовище

  1. export http_proxy=http://username:password@proxy_server:port/ - (встановлюємо параметри проксі-сервера для поточної консолі)

Скрипти

Щоб створити виконуючий скрипт в системі під управлінням ОС сімейства Linux або подібних, необхідно

  1. Створити файл.
  2. Виставити право файл виконувати rwx
  3. Відкрити файл на редагування і в заголовку вказати інтерпретатор для виконання коду

Для прикладу можемо навести список команд для створення скрипта на базі ОС Debian. Знак $ означає запрошення командного інтерпретатора.

hostname ~ # cd ~ (переходимо у домашній каталог)

hostname ~ # pwd (переглянути шлях до поточного каталогу)
/root

hostname ~ # ls -l  <b>виводимо</b>
загалом 0

hostname ~ # > my_script.sh (створюємо порожній файл із вказаним іменем)

hostname ~ # ls -l
загалом 0
-rw-r--r-- 1 root root 0 кві  4 11:48 my_script.sh

hostname ~ # chmod 700 my_script.sh (змінюємо права на файл, виставляємо права rwx для власника файлу, у нашому випадку - це користувач root)

hostname ~ # ls -l
загалом 0
-rwx------ 1 root root 0 кві  4 11:48 my_script.sh

hostname ~ # nano my_script.sh (використаємо редактор nano для редагування вмісту файлу)


У вікні редактора набираємо код, для прикладу можна взяти наступний лістинг

#!/bin/bash

echo "Hello world!"
exit 0

Щоб записати введені дані у файл необхідно натиснути комбінацію клавіш ^O (знак ^ означає Control) та Enter. Для виходу необхідно натиснути комбінацію ^X.

hostname ~ # cat my_script.sh (виводимо вміст файлу на екран)
#!/bin/bash

echo "Hello world!"
exit 0

hostname ~ # ./my_script.sh
Hello world!

hostname ~ #

Запустили скрипт на виконання. У команді запуску комбінація ./ означає шукати в поточному каталозі, інакше система буде намагатися знайти файл на виконання у каталогах, вказаних у змінному середовищі. Вище наведений скрипт виводить рядок Hello world! на екран і повертає код виходу з програми 0.

Скрипт для застосування прав до каталогу та його вмісту (рекурсивний обхід)

Виклик даного скрипта із указанням імені каталогу призведе, що усі файли в даному каталозі та в усіх підкаталогах отримають права типу chmod 664 $file а каталоги права типу chmod 775 $dir . У скрипті наведено приклад використання умовного оператору IF та оператора циклу FOR.


Список файлів для обробки отримуємо з результату виконання програми find "Директорія". Результат поміщається у масив і поелементно обходиться в циклі FOR, поточне значення заноситься у змінну $file.

#!/bin/bash

DIR=""

if [ -z $1 ];
then
    echo "Ви не вказали каталог для перетворення"
else
    DIR=$1
    for file in `find "$DIR" `; do
	if [ -f $file ]; then
	    chmod 664 $file
	else
	    if [ -d $file ]; then
		chmod 775 $file
		chmod g+s $file
	    fi
	fi
	chown -R root.user $file
    done
fi

Автоматизована конвертація файлів з кодуванням CP1251 в кодування UTF-8

Даний приклад дає можливість перетворити усі файли з розширеннями php та html у вказаному каталозі (необхідно вказати як 1-й параметр виклику).

#!/bin/bash

DIR=""

if [ -z $1 ];
then
    echo "Ви не вказали каталог для перетворення"
else
    DIR=$1
    for file in `find $DIR -type f -name "*.php" -o -name "*.html"`; do
	if [ -f $file ]; then
	    echo "Converting $file"
	    iconv -c --from-code=cp1251 --to-code=utf8 $file > $file.1
	    mv $file.1 $file -f
	    sed -i 's\windows-1251\utf-8\g' $file
	fi
    done
fi

Алгоритм описує:

  1. Визначення вхідного каталогу, змінна $DIR. Якщо каталог не вказаний, скрипт видасть відповідне повідомлення.
  2. Виконується пошук усіх файлів з розширенням php та html у поточному каталозі і результат поелементно розглядається у циклі FOR.
  3. Додаткова перевірка, якщо вхідний файл є файлом фізично, то виконуємо подальше перетворення, інакше ігноруємо поточний файл.
  4. Виконуємо перетворення вхідного файлу і результат записується у додатковий вихідний файл. Не можна одночасно записати результат перетворення у вхідний файл. Отримаємо порожній файл у разі, якщо виконувати перетворення вхідного файлу і одночасно у нього ж записувати результат.
  5. Перейменовуємо тимчасовий файл у назву початкового вхідного файлу.
  6. Виконується пошук та одночасна заміна усіх входжень рядка "windows-1251" на рядок "utf-8".
  7. Кінець виконання алгоритму

--Микола Діхтяр 12:56, 4 квітня 2014 (EEST)