Відмінності між версіями «Цікаві набори команд»
Armyguy (обговорення • внесок) (Створена сторінка: == Робота з файлами == # ''' cat config.conf | sed -e '/^#/d' -e '/^$/d' ''' (вивести вміст конфігураційного файлу ...) |
Armyguy (обговорення • внесок) (→Консоль) |
||
(не показано 28 проміжних версій цього учасника) | |||
Рядок 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> ''' - (встановлюємо параметри проксі-сервера для поточної консолі) | ||
+ | |||
+ | == Скрипти == | ||
+ | |||
+ | Щоб створити виконуючий скрипт в системі під управлінням ОС сімейства Linux або подібних, необхідно | ||
+ | # Створити файл. | ||
+ | # Виставити право файл виконувати ''' rwx ''' | ||
+ | # Відкрити файл на редагування і в заголовку вказати інтерпретатор для виконання коду | ||
+ | Для прикладу можемо навести список команд для створення скрипта на базі ОС Debian. Знак '''$''' означає запрошення командного інтерпретатора. | ||
+ | <pre> | ||
+ | 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 для редагування вмісту файлу) | ||
+ | </pre> | ||
+ | |||
+ | |||
+ | У вікні редактора набираємо код, для прикладу можна взяти наступний лістинг | ||
+ | |||
+ | <pre> | ||
+ | #!/bin/bash | ||
+ | |||
+ | echo "Hello world!" | ||
+ | exit 0 | ||
+ | </pre> | ||
+ | |||
+ | Щоб записати введені дані у файл необхідно натиснути комбінацію клавіш ^O (знак ^ означає Control) та Enter. Для виходу необхідно натиснути комбінацію ^X. | ||
+ | |||
+ | <pre> | ||
+ | hostname ~ # cat my_script.sh (виводимо вміст файлу на екран) | ||
+ | #!/bin/bash | ||
+ | |||
+ | echo "Hello world!" | ||
+ | exit 0 | ||
+ | |||
+ | hostname ~ # ./my_script.sh | ||
+ | Hello world! | ||
+ | |||
+ | hostname ~ # | ||
+ | </pre> | ||
+ | |||
+ | Запустили скрипт на виконання. У команді запуску комбінація '''./''' означає шукати в поточному каталозі, інакше система буде намагатися знайти файл на виконання у каталогах, вказаних у змінному середовищі. Вище наведений скрипт виводить рядок '''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
Зміст
Консоль
- [ 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 '^#|^$' - вивести файл (можливо конфігураційний) без коментарів, або ж без рядків, що розпочинаються з символа #.
Змінне середовище
- export http_proxy=http://username:password@proxy_server:port/ - (встановлюємо параметри проксі-сервера для поточної консолі)
Скрипти
Щоб створити виконуючий скрипт в системі під управлінням ОС сімейства Linux або подібних, необхідно
- Створити файл.
- Виставити право файл виконувати rwx
- Відкрити файл на редагування і в заголовку вказати інтерпретатор для виконання коду
Для прикладу можемо навести список команд для створення скрипта на базі ОС 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
Алгоритм описує:
- Визначення вхідного каталогу, змінна $DIR. Якщо каталог не вказаний, скрипт видасть відповідне повідомлення.
- Виконується пошук усіх файлів з розширенням php та html у поточному каталозі і результат поелементно розглядається у циклі FOR.
- Додаткова перевірка, якщо вхідний файл є файлом фізично, то виконуємо подальше перетворення, інакше ігноруємо поточний файл.
- Виконуємо перетворення вхідного файлу і результат записується у додатковий вихідний файл. Не можна одночасно записати результат перетворення у вхідний файл. Отримаємо порожній файл у разі, якщо виконувати перетворення вхідного файлу і одночасно у нього ж записувати результат.
- Перейменовуємо тимчасовий файл у назву початкового вхідного файлу.
- Виконується пошук та одночасна заміна усіх входжень рядка "windows-1251" на рядок "utf-8".
- Кінець виконання алгоритму
--Микола Діхтяр 12:56, 4 квітня 2014 (EEST)