RTFM.WIKI

Ordnung muß sein. Ordnung über alles (18+)

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

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


Stylesheet conf/userstyle.css not found, please contact the developer of "dokuwiki_2024" template.
linux:terminal:terminal_tnt_files

Различия

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

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

Предыдущая версия справа и слеваПредыдущая версия
linux:terminal:terminal_tnt_files [2021/10/26 01:47] dxlinux: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
 +</code>
 +
 +==== Как конвертировать PDF в JPEG ====
 +
 +https://jdhao.github.io/2019/11/20/convert_pdf_to_image_imagemagick/
 +
 +==== Как сжать PDF ====
 +
 +Пару раз сталкивался со сканами документов 50+ МБ. В почту не влезают - надо уменьшать.
 +
 +ImageMagick
 +
 +<code bash>convert input.pdf -format JPG -quality 75 output.pdf</code>
 +
 +Скрипт [[http://www.alfredklomp.com/programming/shrinkpdf/|shrinkpdf]] 
 +
 +<hidden>
 +<code bash>
 +#!/bin/sh
 +
 +# http://www.alfredklomp.com/programming/shrinkpdf
 +# 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, are permitted provided that the following conditions are met:
 +# 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=/screen \
 +   -dEmbedAllFonts=true \
 +   -dSubsetFonts=true \
 +   -dAutoRotatePages=/None \
 +   -dColorImageDownsampleType=/Bicubic \
 +   -dColorImageResolution=$3 \
 +   -dGrayImageDownsampleType=/Bicubic \
 +   -dGrayImageResolution=$3 \
 +   -dMonoImageDownsampleType=/Subsample \
 +   -dMonoImageResolution=$3 \
 +   -sOutputFile="$2" \
 +   "$1"
 +}
 +
 +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 "$1" -o ! -f "$2" ]; then
 + return 0;
 + fi
 + ISIZE="$(echo $(wc -c "$1") | cut -f1 -d\ )"
 + OSIZE="$(echo $(wc -c "$2") | cut -f1 -d\ )"
 + if [ "$ISIZE" -lt "$OSIZE" ]; then
 + echo "Input smaller than output, doing straight copy" >&2
 + cp "$1" "$2"
 + fi
 +}
 +
 +usage ()
 +{
 + echo "Reduces PDF filesize by lossy recompressing with Ghostscript."
 + echo "Not guaranteed to succeed, but usually works."
 + echo "  Usage: $1 infile [outfile] [resolution_in_dpi]"
 +}
 +
 +IFILE="$1"
 +
 +# Need an input file:
 +if [ -z "$IFILE" ]; then
 + usage "$0"
 + exit 1
 +fi
 +
 +# Output filename defaults to "-" (stdout) unless given:
 +if [ ! -z "$2" ]; then
 + OFILE="$2"
 +else
 + OFILE="-"
 +fi
 +
 +# Output resolution defaults to 72 unless given:
 +if [ ! -z "$3" ]; then
 + res="$3"
 +else
 + res="72"
 +fi
 +
 +shrink "$IFILE" "$OFILE" "$res" || exit $?
 +
 +check_smaller "$IFILE" "$OFILE"
 +</code>
 +</hidden>
 +
 +<code bash>
 +./shrinkpdf.sh in.pdf > out.pdf
 +
 +You can also provide a second filename for the output:
 +
 +./shrinkpdf.sh in.pdf out.pdf
 +
 +And an output resolution in DPI (default is 72 DPI):
 +
 +./shrinkpdf.sh in.pdf out.pdf 90
 +</code>
 +
 +==== Просмотр логов в gz архивах ====
 +
 +К примеру нужно посмотреть лог nginx, который уже запакован в gz через logrotate. На помощь приходит [[http://linux.die.net/man/1/zgrep|zgrep]]
 +
 +<code bash>
 +zgrep 'find-text' /var/log/nginx/file.gz
 +zgrep 'find-text' /var/log/nginx/access_log.gz.*
 +zgrep 'GET /url'  /var/log/nginx/access_log.gz
 +zgrep 'GET /url'  /var/log/nginx/access_logaccess_log.gz | more
 +</code>
 +
 +==== find non default chmod ====
 +
 +Или как найти неожиданные и странные права на каталогах.
 +
 +<code bash>find . -printf "%m\t%p\n" | grep -Ev "^(755|644)"</code>
 +
 +FIXME
 +
 +<code bash>
 +$ find . -type f ! \( -perm 755 -o -perm 644 \) -printf "%m\t%p\n" | grep 755
 +$ find . -type f ! \( -perm 755 -o -perm 644 \) -printf "%m\t%p\n" | grep 644
 +</code>
 +
 +<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>
 +
 +<code bash>
 +find \! -perm 775 -type d -exec chmod 775 {} \;
 +find \! -perm 664 -type f -exec chmod 664 {} \;
 +</code>
 +
 +==== Удалить пустые директории ====
 +
 +Найти пустые директории
 +
 +<code bash>find . -type d -empty -print</code>
 +
 +Удалить пустые директории
 +
 +<code bash>find . -type d -empty -delete</code>
 +
 +==== Перенаправить вывод команды в тектовый файл ====
 +
 +<code bash>/opt/foobar/app.sh > /home/foobar/app.txt</code>
 +
 +==== Перенаправить вывод команды в тектовый файл + вывести на экран ====
 +
 +<code bash>/opt/foobar/app.sh | tee /home/foobar/app.txt</code>
 +
 +==== Вывести файл без комментариев и пустых строк ====
 +
 +<code bash># cat /etc/my.cnf |sed '/^$/d' |grep -v "#" |more</code>
 +
 +==== Как узнать время последнего доступа и изменения файла ====
 +
 +http://inet6.alphasca.net/как-узнать-время-последнего-доступа-и/
 +
 +==== Узнать время модификации файла ====
 +
 +via http://oper777.blogspot.ru/2012/06/blog-post.html
 +
 +<code bash>stat -c "%Y" filename</code>
 +
 +==== Изменить дату создания файла ====
 +
 +<code bash># touch --date="2016-07-13" /home/user/file.txt</code>
 +
 +via http://host116.ru/doku.php/it:linux:recepty:izmenit_vremja_sozdanija_fajla
 +
 +==== Заменить слово в файле ====
 +
 +<code bash># sed -i -e 's/word1/word2/g' ${FILE}</code>
 +
 +==== Как вывести хуман ридабл в ls ====
 +
 +[[https://drewsymo.com/2016/05/09/how-do-i-view-file-sizes-kbmbgb-with-ls-in-linux/|Вот так]]
 +
 +<code>ls -lah</code>
 +
 +[[http://notes.jerzygangi.com/how-i-use-ls-linux/|Убрать из вывода юзера/группу]]
 +
 +<code>ls -lAhog</code>
 +
 +Еще десяток возможностей **ls** [[https://dannyda.com/2020/03/06/ls-command-examples-introduction-to-ls-command-in-linux-how-to-use-ls-in-linux/|здесь]]
 +
 +==== ls Killed ====
 +
 +При попытке посчитать количество файлов в каталоге (как потом оказалось >3 млн файлов).
 +
 +<code bash># ls -f /var/www/user/data | wc -l</code>
 +
 +всё завершается ошибкой killed out of memory.
 +
 +А всего-то [[http://stackoverflow.com/questions/1427032/fast-linux-file-count-for-a-large-number-of-files|надо было добавить]] один ключ к ls
 +
 +  * -f — не сортировать содержимое каталога; выдавать файлы в том порядке, в котором они записаны на диск ([[https://ru.wikipedia.org/wiki/Ls|wikipedia]])
 +  * -f — do not sort, enable -aU, disable -ls --color ([[https://linux.die.net/man/1/ls|man]])
 +
 +==== find ====
 +
 +| Поиск файлов по имени | find /var/www/ -name "file.conf" \\ find /var/www/ -name "*.conf" |
 +| Поиск без учёта регистра | 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 "STRING"  {} \; |
 +| Найти все файлы php в который встречается строка STRING | find ./ -type f -name "*.php" -exec grep -i -H "STRING"  {} \; |
 +| grep с опцией -R для поиска файлов по содержимому | grep "STRING" -R /path/for/find |
 +| Замена текста в файлах | find ./ -type f -name "*.conf" -exec sed -i s/OLDTEXT/NEWTEXT/g {} \; |
 +| Установка прав доступа 644 на все файлы в текущей директории и всех поддиректориях | find ./ -type f -exec chmod 644 {} \; |
 +| Установка прав доступа 755 на все папки в текущей директории и всех поддиректориях | find ./ -type d -exec chmod 755 {} \; |
 +
 +==== Удалить файлы старше 10 дней ====
 +
 +<code bash>$ find ./ -ctime +10 | xargs rm</code>
 +
 +==== Как сменить кодировку файла ====
 +
 +Пример из utf8 в win1251
 +
 +<code bash># iconv -f utf8 -t cp1251 old_unicode.txt -o new_windows.txt</code>
 +
 +---->Подробности в **iconv --help**
 +
 +
 +<code>
 +Usage: iconv [OPTION...] [FILE...]
 +Convert encoding of given files from one encoding to another.
 +
 + Input/Output format specification:
 +  -f, --from-code=NAME       encoding of original text
 +  -t, --to-code=NAME         encoding for output
 +
 + Information:
 +  -l, --list                 list all known coded character sets
 +
 + Output control:
 +  -c                         omit invalid characters from output
 +  -o, --output=FILE          output file
 +  -s, --silent               suppress warnings
 +      --verbose              print progress information
 +
 +  -?, --help                 Give this help list
 +      --usage                Give a short usage message
 +  -V, --version              Print program version
 +</code>
 +<--
 +
 +==== Создать пустой random файл ====
 +
 +Вариант с urandom. TODO изучить, как сделать через openssl.
 +
 +<code bash>
 +dd if=/dev/urandom of=1GB.bin bs=1G count=1
 +// или так
 +dd if=/dev/urandom of=1GB.bin bs=64M count=16
 +</code>
 +
 +==== Быстро создать файл заданного размера ====
 +
 +Нет, не dd.
 +
 +<code bash># fallocate -l 10G vm_image_10GB.img</code>
 +
 +==== Exim лог \320 кодировка ====
 +
 +Exim пишет в лог что-то неразборчивое, используем printf
 +
 +<code>printf "\321\203 \320\222\320\260\321\201 \320\275\320\276\320\262\320\276\320\265 \321\201\320\276\320\276\320\261\321\211\320\265\320\275\320\270\320\265"</code>
 +
 +будет преобразовано в 'у Вас новое сообщение'
 +
 +==== Быстро скопировать через rsync много файлов на другой сервер ====
 +
 +Задача: перенести сайт на новый сервер, но для бэкапа нет места.\\
 +Решение: копируем по сети все файлы через rsync
 +
 +Пример
 +
 +<code bash># rsync -azh --progress --stats /var/www/user/data/www/ -e 'ssh -p 50222' root@2.3.4.111:/var/www/user/data/www/</code>
 +
 +Флаг **-а** это алиас для следующих флагов
 +
 +  * 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 /var/www/site /home/user/html** и **rsync /var/www/site/ /home/user/html**
 +
 +Без слэша будет скопирована директория site и все файлы внутри.\\
 +Со слэшем будут скопированы все файлы внутри указанной директории, но не сама директория

To improve the quality of our site, we track visitors anonymously. It doesn't hurt you, but helps us tremendously. We'd be grateful if you'd give us your consent.