Содержание
Трюки в консоли: каталоги, файлы
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 в числовом формате
Разные варианты
Мне понравился вариант с 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
Найти последние 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
Как минимизировать влияние бэкап-скрипта на интенсивность ввода/вывода в 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 это слишком сложно.
Обсуждение