====== Трюки в консоли: каталоги, файлы ====== ==== cp: cannot stat ==== По крону выполняется команда cp /home/rtfm/files/* /home/rtfm/bak Получаю ошибку Ошибка **cp: cannot stat '/home/rtfm/files/*': No such file or directory** Директория files не всегда содержит файлы.\\ При использовании * копируются все файлы. Если директория пустая, то cp ищет файлы с именем *. Решение простое, но неочевидное - вместо ''*'' ставим ''.'' и добавляем ключ ''-r'' cp /home/rtfm/files/. /home/rtfm/bak Вместо -r можно использовать -a (рекурсивно копирует + сохраняет все атрибуты файла, а также символические ссылки) ==== Вывод ls chmod в числовом формате ==== Разные варианты * [[https://stackoverflow.com/questions/1795976/can-the-unix-list-command-ls-output-numerical-chmod-permissions|Can the Unix list command 'ls' output numerical chmod permissions?]] * [[https://askubuntu.com/questions/144921/how-to-get-chmod-octal-permissions-of-the-folder-in-the-terminal|How to get chmod (octal) permissions of the folder in the terminal?]] * [[https://askubuntu.com/questions/152001/how-can-i-get-octal-file-permissions-from-command-line|How can I get octal file permissions from command line?]] Мне понравился вариант с [[https://askubuntu.com/a/696271|askubuntu]]. Закидываем в .bashrc функцию function lsl2 { find . -maxdepth 1 | sort | xargs -I{} stat --format="%a %h %U %G %s %y %n" {} | awk '{$7=substr($7,1,5);$8 =" ";print}' } ==== Скопировать файл без пробела в имени в файл с пробелом ==== Скопировать ''FooBar'' в ''Foo Bar'' cp "FooBar" "Foo Bar" или через ''\_'' где ''_'' это пробел cp FooBar Foo\ Bar ==== logrotate не удаляет старые архивы ==== Rotate/maxage установлены, но gz архивов явно больше. Решение - добавить postrotate и find с mtime delete. /home/john/logs/*.log { daily missingok rotate 14 #maxage 14 compress delaycompress notifempty create 640 devuf devuf sharedscripts postrotate find /home/john/logs/* -name "*.log.*.gz" -mtime +14 -delete endscript } ===== Примеры GREP ===== | Найти строку в текущей дире | grep -R "find me" * | | Найти строку в файле | grep "find me" myfile.txt | | Подсветить результат | grep -R "find me" myfile.txt --color | | Я не беспокоюсь о РЕГИСТРЕ | grep -i "find me" myfile.txt | | Покажите мне номер строки | grep -n "find me" myfile.txt | | Покажите в каком файле | grep -l "find me" * | | Как частво встречается | grep -c "find me" myfile.txt | | Покажите конкретный стринг \\ started, а не restarted, start или starting | grep -w "started" error.log | | Покажите мне 5 строк до и 5 строк после интересующей меня строки | grep "started" -B5 -A5 error.log или grep "started" -C5 error.log | | Показать совпадение в начале строки | grep "^find me" myfile.txt | | Показать совпадение в конце строки | grep "find me$" myfile.txt | | Искать А или Б | egrep "foo|bar" myfile.txt | | Искать в gzip | zgrep "find me" myfile.gz | ===== Найти измененные файлы за последний день ===== $ find . -mtime -1 * -amin последний доступ к файлам в минутах * -atime последний доступ к файлам в днях * -cmin время создания файлов в минутах * -ctime время создания файлов в днях * -mmin время модификации файлов в минутах -mtime можно использовать еще и так * -1 последние 24 часа * -0.5 последние 12 часов * -0.25 последние 6 часов * +3 более чем 3 дня Множество примеров по find - https://coderwall.com/t/find/popular ===== Удалить все файлы кроме определенного расширения ===== Рекурсивно удалить все файлы, кроме файлов с определенным расширением find . -type f ! -name '*.txt' -delete [[https://unix.stackexchange.com/questions/78376/in-linux-how-to-delete-all-files-except-the-pattern-txt|via]] ===== Найти последние 500 измененных директорий и файлов ===== Директории find ./ -type d -printf '%T@ %p\t\t %t\n' | sort -k 1 -nr | sed 's/^[^ ]* //' | head -n 500 Файлы find ./ -type f -printf '%T@ %p\t\t %t\n' | sort -k 1 -nr | sed 's/^[^ ]* //' | head -n 500 ===== Удалить пустые строки в файле ===== sed '/^$/d' file-in.txt >> file-out.txt Работает в zsh Lin/Mac ===== nice и ionice ===== [[https://www.opennet.ru/tips/1684_nice_ionice_cfq_scheduler_backup_kernel_linux.shtml|Как минимизировать влияние бэкап-скрипта на интенсивность ввода/вывода в Linux]] (opennet) Задача понизить влияние скрипта ''/etc/cron.d/backup.sh'' на систему (снизить нагрузку). Уменьшить приоритет ввода-вывода /usr/bin/ionice -c2 -n7 /etc/cron.d/backup.sh Параметр **-n** может принимать значения от 0 до 7. 7 наименьший приоритет, 1 максимальный приоритет. * 1 - real time * 2 - нормальный режим * 3 - работа только в моменты простоя (idle) * 7 - cамый низкий уровень приоритета Уменьшить приоритет CPU /usr/bin/nice -n 19 /etc/cron.d/backup.sh Параметр **-n** может принимать значения от -20 до 19. 19 наименьший приоритет, -20 максимальный приоритет. **nice** и **ionice** можно комбинировать /usr/bin/nice -n 19 /usr/bin/ionice -c2 -n7 /etc/cron.d/backup.sh ===== ls -la с датой и временем ===== **ls -la** -rw-------. 1 root root 8487 Apr 1 10:21 .bash_history -rw-r--r--. 1 root root 18 Dec 29 2013 .bash_logout -rw-r--r--. 1 root root 176 Dec 29 2013 .bash_profile -rw-r--r--. 1 root root 176 Dec 29 2013 .bashrc drwx------. 3 root root 18 Feb 5 20:15 .config -rw-r--r--. 1 root root 9908 Aug 10 2014 nux-dextop-release-0-5.el7.nux.noarch.rpm -rw-r--r--. 1 root root 29345082 May 16 2019 serviio-2.0-linux.tar.gz **ls -la --time-style=long-iso** -rw-------. 1 root root 8487 2020-04-01 10:21 .bash_history -rw-r--r--. 1 root root 18 2013-12-29 06:26 .bash_logout -rw-r--r--. 1 root root 176 2013-12-29 06:26 .bash_profile -rw-r--r--. 1 root root 176 2013-12-29 06:26 .bashrc drwx------. 3 root root 18 2020-02-05 20:15 .config -rw-r--r--. 1 root root 9908 2014-08-10 03:11 nux-dextop-release-0-5.el7.nux.noarch.rpm -rw-r--r--. 1 root root 29345082 2019-05-16 00:30 serviio-2.0-linux.tar.gz ===== ls -la вывод прав в числовом формате ===== Вопрос вроде бы частый, но удобного решения не нашёл. Ухищрения с find или stat это слишком сложно.