Инструменты пользователя

Инструменты сайта


cookbookshell2

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
cookbookshell2 [2015/10/06 09:52]
sander
cookbookshell2 [2015/10/06 09:53] (текущий)
sander
Строка 1: Строка 1:
 +====== Have a Good Command ======
 +===== Знакомимся с cat =====
 +**Читаем файл**
 +<​code>​
 +cat file1 file2 file3 ...
 +</​code>​
 +**Удаляем 2 и более пустые строки,​ оставляя одну.**
 +<​code>​
 +cat -s file1
 +</​code>​
 +===== Записываем и воспроизводим терминальную сессию =====
 +**script**
 +Записываем сессию и завершаем запись
 +<​code>​
 +script -t 2> timing.log -a output.session
 +type commands;
 +
 +..
 +exit
 +</​code>​
 +-t 2> записывает тайминг\\
 +-a команды выполненные в сессии\\
 +\\
 +**scriptreplay** воспроизводим запись сессии\\
 +<​code>​
 +scriptreplay -t timing.log -s output.session
 +</​code>​
 +-t файл тайминга\\
 +-s файл сессии
  
 +<​code>​
 +script -a -t 2> timing.log output.session
 +scriptreplay -s output.session -t timing.log
 +</​code>​
 +
 +===== Поиск файлов и список файлов =====
 +**Поиск всех файлов в директории**
 +<​code>​
 +find base_path
 +</​code>​
 +**Поиск файлов по регулярным выражениям**
 +<​code>​
 +find /var/log/ -name "​*.log"​
 +</​code>​
 +**Игнорируем регистр** -iname
 +<​code>​
 +find . -iname "​example*"​ -print
 +</​code>​
 +**Или в условии поиска** -o
 +<​code>​
 +find . \( -name "​*.txt"​ -o -name "​*.pdf"​ \) -print
 +</​code>​
 +**Поиск в пути к файлу** -path
 +<​code>​
 +find /home/users -path "​*/​slynux/​*"​ -print
 +find /var/ -path "​*/​apache2/​*"​
 +</​code>​
 +**Поиск с использованием регулярных выражений** -regex
 +<​code>​
 +find . -regex "​.*\(\.py\|\.sh\)$"​
 +</​code>​
 +
 +**Обратить условие поиска** !
 +<​code>​
 + find /var/log/ ! -name *.log
 +</​code>​
 +**Поиск основанный на глубине директории** -maxdepth -mindepth
 +<​code>​
 +find /var/ -mindepth 2 -maxdepth 3 -name *.log
 +</​code>​
 +**Поиск на основе типа файла** -type
 +|File type|Type argument|
 +|Regular file|f|
 +|Symbolic link|l|
 +|Directory|d|
 +|Character special device|c|
 +|Block device|b|
 +|Socket|s|
 +|FIFO|p|
 +
 +<​code>​
 +find /​root/​script/​ -type f
 +</​code>​
 +
 +**Поиск основанный на времени**\\
 +\\
 +**Access time (-atime)**: It is the last timestamp of when the file was accessed by a user\\
 +**Modification time (-mtime)**: It is the last timestamp of when the file content was modified\\
 +**Change time (-ctime)**: It is the last timestamp of when the metadata for a file (such as permissions or ownership) was modified\\
 +\\
 +Файлы модифицированные 2 дня назад.
 +<​code>​
 +find / -type f -mtime 2 | less
 +</​code>​
 +
 +Файлы модифицированные за последние 2 дня.
 +<​code>​
 +find / -type f -mtime -2 | less
 +</​code>​
 +Файлы модифицированные более чем 2 дня назад.
 +<​code>​
 +find / -type f -mtime +2 | less
 +</​code>​
 +
 +Все тоже касается времени в минутах **-amin** (access time) **-mmin** (modification time) **-cmin** (change time)
 +
 +**Время изменения больше,​ чем время изменения файла.** -newer
 +<​code>​
 +find . -type f -newer file.txt -print
 +</​code>​
 +
 +<​code>​
 +touch -t 05040000 /​tmp/​timestamp
 +find ~ -newer /​tmp/​timestamp
 +</​code>​
 +
 +**Поиск по владельцу,​ группе и доступу** -user -group -perm
 +<​code>​
 +find / -user mysql
 +find / -group root
 +</​code>​
 +<​code>​
 +find ./ -type f -perm 744
 +</​code>​
 +
 +**Поиск по размеру файлов** -size
 +<​code>​
 +find ~ -size 2k # поиск файлов =2 килобайт
 +find ~ -size +2k # поиск файлов >2 килобайт  ​
 +find ~ -size -2k # поиск файлов <2 килобайт
 +</​code>​
 +
 +|b|512 byte blocks|
 +|c|Bytes|
 +|w|Two-byte words|
 +|k|Kilobyte (1024 bytes)|
 +|M|Megabyte (1024 kilobytes)|
 +|G|Gigabyte (1024 megabytes)|
 +
 +**Удаляем найденные файлы** -delete
 +<​code>​
 +find /root -name *.tmp -delete
 +</​code>​
 +
 +**Передаем найденные файлы в другую команду** -exec [comand] \; 
 +<​code>​
 +find ./ -type f -perm 744 -exec cat {} \;
 +</​code>​
 +
 +**Исключаем из поиска** -prune
 +<​code>​
 +find /var/log/ \( -name "​apache2"​ -prune \) -o \( -type f \)
 +</​code>​
 +===== Вопросы по find =====
 +1.Найти все в директории root\\
 +2.Найти все файлы в директории /var/log с именем *.log\\
 +3.Найти все файлы в директории /var/log с именем *.log независимо от регистра\\
 +4.Найти все файлы в директории /var/log с именем *.log и *.gz\\
 +5.Найти все файлы в директории /var/log в пути к которым есть директория apache2\\
 +6.Найти все файлы в директории /var/log любым именем за исключением *.log\\
 +7.Найти все файлы в директории /var/log с глубиной директории 2\\
 +8.Найти все символические ссылки в /bin/\\
 +8.Найти все директории в /root/\\
 +9.Найти все файлы в директории /root/\\
 +10.Найти все файлы модифицированые 2 дня назад (3 часа назад)\\
 +11.Найти все файлы измененные мение 2 днй назад (10 часов назад)\\
 +12.Найти все файлы которые открывали мение 1 дня назад (мение 2 часов)\\
 +13.Найти все файлы владельца mysql\\
 +14.Найти все файлы с парвами доступа 755\\
 +15.Найти все файлы в директории /var/log больше 10 Мб\\
 +16.Найти в /etc/ файлы *.conf и скопировать их в /​root/​back\\
 +
 +===== Xargs =====
 +**Построчная передача вывода из команды**
 +<​code>​
 +command | xargs
 +</​code>​
 +
 +**Разбиваем строку**
 +
 +<​code>​
 +$ cat example.txt # Example file
 +1 2 3 4 5 6
 +7 8 9 10
 +11 12
 +
 +$ cat example.txt | xargs
 +1 2 3 4 5 6 7 8 9 10 11 12
 +
 +$ cat example.txt | xargs -n 3
 +1 2 3
 +4 5 6
 +7 8 9
 +10 11 12
 +
 +</​code>​
 +
 +**Пингуем адреса из файла**
 +<​code>​
 +titov@uba:​~$ cat example.txt
 +127.0.0.1 127.0.0.2 127.12.12.1
 +127.34.34.1
 +titov@uba:​~$ cat example.txt | xargs -n1 ping -c1
 +</​code>​
 +
 +**Выбираем разделитель полей** -d
 +<​code>​
 +$ echo "​splitXsplitXsplitXsplit"​ | xargs -d X
 +split split split split
 +</​code>​
 +
 +<​code>​
 +titov@uba:​~$ echo "​lololLlololLlololLlololLlololLlolol"​ | xargs -d L -n1
 +lolol
 +lolol
 +lolol
 +lolol
 +lolol
 +lolol
 +</​code>​
 +
 +**Передается вся строка** -l
 +<​code>​
 +cat args.txt | xargs -l ./chcho
 +</​code>​
 +**Позиционирование** -I {}
 +<​code>​
 +root@uba:~# cat args.txt | xargs -I {} ./chcho -p {} -l
 +-p arg1 -l #
 +-p arg2 -l #
 +-p arg3 -l #
 +</​code>​
 +
 +===== tr транслит =====
 +<​code>​
 +tr [options] set1 set2
 +</​code>​
 +<​code>​
 +echo "HELLO WHO IS THIS" | tr '​A-Z'​ '​a-z'​
 +</​code>​
 +**Удаляем символы** -d 
 +<​code>​
 +echo "Hello 123 world 456" | tr -d '​0-9'​
 +Hello world
 +</​code>​
 +**Все символы за исключением** -с
 +<​code>​
 +root@uba:~# echo "​asf5ag6gasga323asdf2"​ | tr -d -c '0-9 \n'
 +563232
 +</​code>​
 +
 +**Классы символов**
 +
 +|alnum|Alphanumeric characters|
 +|alpha|Alphabetic characters|
 +|cntrl|Control (nonprinting) characters|
 +|digit|Numeric characters|
 +|graph|Graphic characters|
 +|lower|Lowercase alphabetic characters|
 +|print|Printable characters|
 +|punct|Punctuation characters|
 +|space|Whitespace characters|
 +|upper|Uppercase characters|
 +|xdigit|Hexadecimal characters|
 +
 +<​code>​
 +tr [:class:] [:class:]
 +</​code>​
 +
 +<​code>​
 +tr '​[:​lower:​]'​ '​[:​upper:​]'​
 +</​code>​
 +===== Верефикация и чексуммы =====
 +**Получение чек суммы по алгоритму md5**
 +<​code>​
 +root@uba:~# md5sum cr
 +d8de3ec44a4375cf6a49e835acdbb416 ​ cr
 +</​code>​
 +**Проверка check суммы**
 +<​code>​
 +root@uba:~# md5sum cr > file_sum.md5
 +root@uba:~# md5sum -c file_sum.md5
 +cr: ЦЕЛ
 +md5sum -c file_sum.md5
 +cr: ПОВРЕЖДЁН
 +md5sum: ПРЕДУПРЕЖДЕНИЕ:​ НЕ совпала 1 вычисленная контрольная сумма
 +</​code>​
 +Чек сумма всех файлов в директории
 +<​code>​
 +find /root/ -type f | xargs -l md5sum >> check_sum_root.md5
 +</​code>​
 +===== Криптография и хэши =====
 +**Кодирование и декодирование файлов**
 +<​code>​
 +mcrypt cr #​кодируем файл
 +mdecrypt cr.nc # декодируем файл
 +mcrypt -d cr.nc # декодируем файл
 +</​code>​
 +
 +**Кодирование и декодирование файла с помощью base64.**\\
 +base64 служит для представления бинарных данных в виде последовательности ​ ASCII символов\\
 +<​code>​
 +root@uba:​~/​script#​ cat base
 +Hello!!!
 +root@uba:​~/​script#​ base64 base > base_64
 +root@uba:​~/​script#​ cat base_64
 +SGVsbG8hISEK
 +root@uba:​~/​script#​ base64 -d base_64
 +Hello!!!
 +</​code>​
 +
 +**Получаем рандомную последовательность из 9 символов**
 +
 +<​code>​
 +base64 /​dev/​urandom | head -n1 | cut -c1-9
 +</​code>​
 +
 +**SHA Secure Hash Algorithm — алгоритм криптографического хеширования.**
 +
 +<​code>​
 +root@uba:​~/​script#​ echo "​hello"​ | sha1sum
 +f572d396fae9206628714fb2ce00f72e94f2258f ​ -
 +root@uba:​~/​script#​ echo "​hello"​ | sha256sum
 +5891b5b522d5df086d0ff0b110fbd9d21bb4fc7163af34d08286a2e846f6be03 ​ -
 +root@uba:​~/​script#​ echo "​hello"​ | sha512sum
 +e7c22b994c59d9cf2b48e549b1e24666636045930d3da7c1acb299d1c3b7f931f94aae41edda2c2b207a36e10f8bcb8d45223e54878f5b316e7ce3b6bc019629 ​ -
 +</​code>​
 +
 +=====Сортировка,​ уникальные строки и дубликаты =====
 +
 +**Сортируем данные**
 +<​code>​
 +sort 
 +</​code>​
 +**Только уникальные записи**
 +<​code>​
 +uniq
 +</​code>​
 +
 +===== Имена временных файлов и рандомные числа =====
 +**Создаем временный файл**
 +<​code>​
 +$ filename=`mktemp`
 +$ echo $filename
 +/​tmp/​tmp.8xvhkjF5fH
 +</​code>​
 +**Создаем временную папку**
 +<​code>​
 +dirname=`mktemp -d`
 +root@uba:​~/​script#​ echo $dirname
 +/​tmp/​tmp.gy9OPX9axk
 +</​code>​
 +**Генерируем имя файла без его создания**
 +<​code>​
 +$ tmpfile=`mktemp -u`
 +$ echo $tmpfile
 +/​tmp/​tmp.RsGmilRpcT
 +</​code>​
 +
 +**Делаем временный файл по шаблону**
 +<​code>​
 +root@uba:​~/​script#​ mktemp test.XXXX
 +test.6qgX
 +</​code>​
 +
 +===== Подставка параметров в интерактивный ввод =====
 +<​code>​
 +root@uba:​~/​script#​ cat readname
 +#!/bin/bash
 +
 +read -p "Enter a number:"​ num
 +read -p "Enter name:" name
 +
 +echo "You have entered"​ $num","​$name
 +</​code>​
 +
 +<​code>​
 +echo -e "​1\nhello\n"​ | ./readname
 +</​code>​
 +Либо
 +<​code>​
 +root@uba:​~/​script#​ echo -e "​1\nhello\n"​ > input.data
 +root@uba:​~/​script#​ ./readname < input.data
 +You have entered 1,hello
 +</​code>​
 +
 +===== Параллельные вычисления =====
 +
 +<​code>​
 +#/bin/bash
 +#filename: generate_checksums.sh
 +PIDARRAY=()
 +for file in File1.iso File2.iso
 +do
 +md5sum $file &
 +PIDARRAY+=("​$!"​)
 +done
 +wait ${PIDARRAY[@]}
 +</​code>​
 +
 +Знак & позволяет убрать процесс в фон и запустить следующий,​ тем самым процессы выполняются параллельно.
cookbookshell2.txt · Последние изменения: 2015/10/06 09:53 — sander