Различия
Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слеваПредыдущая версия | |||
| linux:terminal:terminal_tnt_files [2021/10/26 01:47] – dx | linux:terminal:terminal_tnt_files [2023/01/22 00:41] (текущий) – dx | ||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| + | ====== Трюки в консоли: | ||
| + | ==== Как конвертировать в JPEG/PNG только первую страницу PDF ==== | ||
| + | |||
| + | <code bash> | ||
| + | convert -density 200 rtfm.pdf[0] -quality 95 rtfm.png | ||
| + | </ | ||
| + | |||
| + | ==== Как конвертировать PDF в JPEG ==== | ||
| + | |||
| + | https:// | ||
| + | |||
| + | ==== Как сжать PDF ==== | ||
| + | |||
| + | Пару раз сталкивался со сканами документов 50+ МБ. В почту не влезают - надо уменьшать. | ||
| + | |||
| + | ImageMagick | ||
| + | |||
| + | <code bash> | ||
| + | |||
| + | Скрипт [[http:// | ||
| + | |||
| + | < | ||
| + | <code bash> | ||
| + | #!/bin/sh | ||
| + | |||
| + | # http:// | ||
| + | # Licensed under the 3-clause BSD license: | ||
| + | # | ||
| + | # Copyright (c) 2014-2019, Alfred Klomp | ||
| + | # All rights reserved. | ||
| + | # | ||
| + | # Redistribution and use in source and binary forms, with or without | ||
| + | # modification, | ||
| + | # 1. Redistributions of source code must retain the above copyright notice, | ||
| + | # this list of conditions and the following disclaimer. | ||
| + | # 2. Redistributions in binary form must reproduce the above copyright notice, | ||
| + | # this list of conditions and the following disclaimer in the documentation | ||
| + | # and/or other materials provided with the distribution. | ||
| + | # 3. Neither the name of the copyright holder nor the names of its contributors | ||
| + | # may be used to endorse or promote products derived from this software | ||
| + | # without specific prior written permission. | ||
| + | # | ||
| + | # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | ||
| + | # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||
| + | # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | ||
| + | # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE | ||
| + | # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | ||
| + | # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | ||
| + | # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | ||
| + | # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | ||
| + | # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | ||
| + | # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | ||
| + | # POSSIBILITY OF SUCH DAMAGE. | ||
| + | |||
| + | |||
| + | shrink () | ||
| + | { | ||
| + | gs \ | ||
| + | -q -dNOPAUSE -dBATCH -dSAFER \ | ||
| + | -sDEVICE=pdfwrite \ | ||
| + | -dCompatibilityLevel=1.3 \ | ||
| + | -dPDFSETTINGS=/ | ||
| + | -dEmbedAllFonts=true \ | ||
| + | -dSubsetFonts=true \ | ||
| + | -dAutoRotatePages=/ | ||
| + | -dColorImageDownsampleType=/ | ||
| + | -dColorImageResolution=$3 \ | ||
| + | -dGrayImageDownsampleType=/ | ||
| + | -dGrayImageResolution=$3 \ | ||
| + | -dMonoImageDownsampleType=/ | ||
| + | -dMonoImageResolution=$3 \ | ||
| + | -sOutputFile=" | ||
| + | " | ||
| + | } | ||
| + | |||
| + | check_smaller () | ||
| + | { | ||
| + | # If $1 and $2 are regular files, we can compare file sizes to | ||
| + | # see if we succeeded in shrinking. If not, we copy $1 over $2: | ||
| + | if [ ! -f " | ||
| + | return 0; | ||
| + | fi | ||
| + | ISIZE=" | ||
| + | OSIZE=" | ||
| + | if [ " | ||
| + | echo "Input smaller than output, doing straight copy" >&2 | ||
| + | cp " | ||
| + | fi | ||
| + | } | ||
| + | |||
| + | usage () | ||
| + | { | ||
| + | echo " | ||
| + | echo "Not guaranteed to succeed, but usually works." | ||
| + | echo " | ||
| + | } | ||
| + | |||
| + | IFILE=" | ||
| + | |||
| + | # Need an input file: | ||
| + | if [ -z " | ||
| + | usage " | ||
| + | exit 1 | ||
| + | fi | ||
| + | |||
| + | # Output filename defaults to " | ||
| + | if [ ! -z " | ||
| + | OFILE=" | ||
| + | else | ||
| + | OFILE=" | ||
| + | fi | ||
| + | |||
| + | # Output resolution defaults to 72 unless given: | ||
| + | if [ ! -z " | ||
| + | res=" | ||
| + | else | ||
| + | res=" | ||
| + | fi | ||
| + | |||
| + | shrink " | ||
| + | |||
| + | check_smaller " | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | <code bash> | ||
| + | ./ | ||
| + | |||
| + | You can also provide a second filename for the output: | ||
| + | |||
| + | ./ | ||
| + | |||
| + | And an output resolution in DPI (default is 72 DPI): | ||
| + | |||
| + | ./ | ||
| + | </ | ||
| + | |||
| + | ==== Просмотр логов в gz архивах ==== | ||
| + | |||
| + | К примеру нужно посмотреть лог nginx, который уже запакован в gz через logrotate. На помощь приходит [[http:// | ||
| + | |||
| + | <code bash> | ||
| + | zgrep ' | ||
| + | zgrep ' | ||
| + | zgrep 'GET / | ||
| + | zgrep 'GET / | ||
| + | </ | ||
| + | |||
| + | ==== find non default chmod ==== | ||
| + | |||
| + | Или как найти неожиданные и странные права на каталогах. | ||
| + | |||
| + | <code bash> | ||
| + | |||
| + | FIXME | ||
| + | |||
| + | <code bash> | ||
| + | $ find . -type f ! \( -perm 755 -o -perm 644 \) -printf " | ||
| + | $ find . -type f ! \( -perm 755 -o -perm 644 \) -printf " | ||
| + | </ | ||
| + | |||
| + | <code bash> | ||
| + | find -type d -not -perm 775 -o -type f -not -perm 664 | ||
| + | find -type f -not -perm 664 | ||
| + | find -type d -not -perm 775 | ||
| + | </ | ||
| + | |||
| + | <code bash> | ||
| + | find \! -perm 775 -type d -exec chmod 775 {} \; | ||
| + | find \! -perm 664 -type f -exec chmod 664 {} \; | ||
| + | </ | ||
| + | |||
| + | ==== Удалить пустые директории ==== | ||
| + | |||
| + | Найти пустые директории | ||
| + | |||
| + | <code bash> | ||
| + | |||
| + | Удалить пустые директории | ||
| + | |||
| + | <code bash> | ||
| + | |||
| + | ==== Перенаправить вывод команды в тектовый файл ==== | ||
| + | |||
| + | <code bash>/ | ||
| + | |||
| + | ==== Перенаправить вывод команды в тектовый файл + вывести на экран ==== | ||
| + | |||
| + | <code bash>/ | ||
| + | |||
| + | ==== Вывести файл без комментариев и пустых строк ==== | ||
| + | |||
| + | <code bash># cat /etc/my.cnf |sed '/ | ||
| + | |||
| + | ==== Как узнать время последнего доступа и изменения файла ==== | ||
| + | |||
| + | http:// | ||
| + | |||
| + | ==== Узнать время модификации файла ==== | ||
| + | |||
| + | via http:// | ||
| + | |||
| + | <code bash> | ||
| + | |||
| + | ==== Изменить дату создания файла ==== | ||
| + | |||
| + | <code bash># touch --date=" | ||
| + | |||
| + | via http:// | ||
| + | |||
| + | ==== Заменить слово в файле ==== | ||
| + | |||
| + | <code bash># sed -i -e ' | ||
| + | |||
| + | ==== Как вывести хуман ридабл в ls ==== | ||
| + | |||
| + | [[https:// | ||
| + | |||
| + | < | ||
| + | |||
| + | [[http:// | ||
| + | |||
| + | < | ||
| + | |||
| + | Еще десяток возможностей **ls** [[https:// | ||
| + | |||
| + | ==== ls Killed ==== | ||
| + | |||
| + | При попытке посчитать количество файлов в каталоге (как потом оказалось >3 млн файлов). | ||
| + | |||
| + | <code bash># ls -f / | ||
| + | |||
| + | всё завершается ошибкой killed out of memory. | ||
| + | |||
| + | А всего-то [[http:// | ||
| + | |||
| + | * -f — не сортировать содержимое каталога; | ||
| + | * -f — do not sort, enable -aU, disable -ls --color ([[https:// | ||
| + | |||
| + | ==== find ==== | ||
| + | |||
| + | | Поиск файлов по имени | find /var/www/ -name " | ||
| + | | Поиск без учёта регистра | find /var/www/ -iname file.conf | | ||
| + | | Поиск по размеру файлов | find /home/user -size +10M | | ||
| + | | Поиск по маске прав | find ./ -perm 700 | | ||
| + | | Файлы созданные или изменённые в течении последних 5 дней | find /home/user -type f -mtime -5 | | ||
| + | | Файлы созданные или изменённые в течении последних 5 минут | find /home/user -type f -mmin -5 | | ||
| + | | Найти файлы созданные или изменённые старше 30 дней (поиск устаревших файлов) | find /home/user -type f -mtime +30 | | ||
| + | | Время последнего обращения к которым более 5 дней | find /usr/bin -type f -atime +5 | | ||
| + | | Поиск строки в файлах | find ./ -type f -exec grep -i -H " | ||
| + | | Найти все файлы php в который встречается строка STRING | find ./ -type f -name " | ||
| + | | grep с опцией -R для поиска файлов по содержимому | grep " | ||
| + | | Замена текста в файлах | find ./ -type f -name " | ||
| + | | Установка прав доступа 644 на все файлы в текущей директории и всех поддиректориях | find ./ -type f -exec chmod 644 {} \; | | ||
| + | | Установка прав доступа 755 на все папки в текущей директории и всех поддиректориях | find ./ -type d -exec chmod 755 {} \; | | ||
| + | |||
| + | ==== Удалить файлы старше 10 дней ==== | ||
| + | |||
| + | <code bash>$ find ./ -ctime +10 | xargs rm</ | ||
| + | |||
| + | ==== Как сменить кодировку файла ==== | ||
| + | |||
| + | Пример из utf8 в win1251 | ||
| + | |||
| + | <code bash># iconv -f utf8 -t cp1251 old_unicode.txt -o new_windows.txt</ | ||
| + | |||
| + | ----> | ||
| + | |||
| + | |||
| + | < | ||
| + | Usage: iconv [OPTION...] [FILE...] | ||
| + | Convert encoding of given files from one encoding to another. | ||
| + | |||
| + | | ||
| + | -f, --from-code=NAME | ||
| + | -t, --to-code=NAME | ||
| + | |||
| + | | ||
| + | -l, --list | ||
| + | |||
| + | | ||
| + | -c omit invalid characters from output | ||
| + | -o, --output=FILE | ||
| + | -s, --silent | ||
| + | --verbose | ||
| + | |||
| + | -?, --help | ||
| + | --usage | ||
| + | -V, --version | ||
| + | </ | ||
| + | <-- | ||
| + | |||
| + | ==== Создать пустой random файл ==== | ||
| + | |||
| + | Вариант с urandom. TODO изучить, | ||
| + | |||
| + | <code bash> | ||
| + | dd if=/ | ||
| + | // или так | ||
| + | dd if=/ | ||
| + | </ | ||
| + | |||
| + | ==== Быстро создать файл заданного размера ==== | ||
| + | |||
| + | Нет, не dd. | ||
| + | |||
| + | <code bash># fallocate -l 10G vm_image_10GB.img</ | ||
| + | |||
| + | ==== Exim лог \320 кодировка ==== | ||
| + | |||
| + | Exim пишет в лог что-то неразборчивое, | ||
| + | |||
| + | < | ||
| + | |||
| + | будет преобразовано в 'у Вас новое сообщение' | ||
| + | |||
| + | ==== Быстро скопировать через rsync много файлов на другой сервер ==== | ||
| + | |||
| + | Задача: | ||
| + | Решение: | ||
| + | |||
| + | Пример | ||
| + | |||
| + | <code bash># rsync -azh --progress --stats / | ||
| + | |||
| + | Флаг **-а** это алиас для следующих флагов | ||
| + | |||
| + | * r – рекурсивно скачивать всё | ||
| + | * l – передавать все найденные симлинки | ||
| + | * t – сохранить таймстемпы | ||
| + | * p – сохранить права | ||
| + | * g – сохранить группы | ||
| + | * o – сохранить owner' | ||
| + | * D – FIXME Preserve block and character devices | ||
| + | |||
| + | Другие флаги | ||
| + | * z - сжатие файлов | ||
| + | * h - хуман ридабл | ||
| + | * e - если нужно например передать альтернативный порт ssh | ||
| + | * progress - индикатор выполнения (можно использовать -P, который включает в себя progress и partial. Partial возобновляет прерванную передачу | ||
| + | * stats - какая-то статистика | ||
| + | |||
| + | Очень важно. Есть разница между **rsync / | ||
| + | |||
| + | Без слэша будет скопирована директория site и все файлы внутри.\\ | ||
| + | Со слэшем будут скопированы все файлы внутри указанной директории, | ||