RTFM.WIKI

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

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

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


Боковая панель


Навигация

Линкшэринг

ALARM!

Добавить новую страницу

You are not allowed to add pages
linux:bash:tnt


Содержание

Трюки в консоли

Обновить доверенные корневые сертификаты

CentOS

update-ca-trust extract

Debian

update-ca-certificates

Запускать cron каждый 10 секунд

Cron в Linux минимально принимает 1 минуту. Для запуска каждые n-секунд можно использовать sleep.

* * * * * php -q /var/www/cron_worker.php
* * * * * sleep 10; php -q /var/www/cron_worker.php
* * * * * sleep 20; php -q /var/www/cron_worker.php
* * * * * sleep 30; php -q /var/www/cron_worker.php
* * * * * sleep 40; php -q /var/www/cron_worker.php
* * * * * sleep 50; php -q /var/www/cron_worker.php

Быстро скопировать через rsync много файлов на другой сервер

Задача: перенести сайт на новый сервер, но для бэкапа нет места.
Решение: копируем по сети все файлы через rsync

Пример

rsync -azh --progress --stats /var/www/user/data/www/ -e 'ssh -p 50222' root@2.3.4.111:/var/www/user/data/www/

Флаг это алиас для следующих флагов

  • 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 /path-from/site и rsync /path-from/site

Без слэша будет скопирован каталог site и все файлы внутри.
Со слэшем будут скопированы все файлы внутри указанного каталога.

Предотвратить повторный запуск задачи из cron

/usr/bin/flock -xn /tmp/my_long_task.lock -c 'sh /path/backup.sh
  • -x –exclusive - get an exclusive lock (default)
  • -n –nonblock - fail rather than wait

Как вывести хуман ридабл в ls

Вот так

ls -lah

Убрать из вывода юзера/группу

ls -lAhog

Еще десяток возможностей ls здесь

Посмотреть Java Xms Xmx

https://stackoverflow.com/questions/28272923/default-xmxsize-in-java-8

java -XX:+PrintFlagsFinal -version | grep -iE 'HeapSize|PermSize|ThreadStackSize'

Java8 takes Larger of 1/6th of your physical memory for your Xmssize (Minimum HeapSize) and Smaller of 1/4th of your physical memory for your -Xmxsize (Maximum HeapSize).

https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/parallel.html#default_heap_size

Как загрузить файл на удаленный FTP из командной строки

curl -T my-local-file.txt ftp://ftp.example.com --user user:secret

Источник: http://superuser.com/questions/323214/how-to-upload-one-file-by-ftp-from-command-line

Exim лог \320 кодировка

Exim пишет в лог что-то неразборчивое, используем printf

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"

будет преобразовано в 'у Вас новое сообщение'

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 {} \;

Замена слова в файле

sed -i -e 's/word1/word2/g' ${FILE}

Как сменить кодировку файла

Пример из utf8 в win1251

iconv -f utf8 -t cp1251 old_unicode.txt -o new_windows.txt

Подробности в iconv –help

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

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>

Как посмотреть дату последней проверки файловой системы

# tune2fs -l /dev/sda1 | grep "Last checked"

Server does not support diffie-hellman-group1-sha1 for keyexchange

При подключении по SFTP ошибка Server does not support diffie-hellman-group1-sha1 for keyexchange.

Добавляем в /etc/ssh/sshd_config

KexAlgorithms diffie-hellman-group1-sha1,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1
Ciphers 3des-cbc,blowfish-cbc,aes128-cbc,aes128-ctr,aes256-ctr

Как увеличить ip_local_port_range

Как увеличить диапазон локальных портов (ip_local_port_range) доступных для установки исходящих подключений

Смотрим текущий диапазон

# cat /proc/sys/net/ipv4/ip_local_port_range
32768   61000

Либо так

# sysctl net.ipv4.ip_local_port_range
net.ipv4.ip_local_port_range = 32768    61000

Увеличиваем значение

# sysctl -w net.ipv4.ip_local_port_range="16000 64000"
net.ipv4.ip_local_port_range = 16000 64000

Или так

# echo 16000 64000 > /proc/sys/net/ipv4/ip_local_port_range

Чтобы изменения сохранились после перезгрузки системы добавьте новое значение в файл /etc/sysctl.conf или в отдельный файл, который будет подгружаться

# cat /etc/sysctl.d/net.ipv4.ip_local_port_range.conf
net.ipv4.ip_local_port_range = 16000 64000

И последнее. Смотрим сколько активных соединений у нас сейчас

# ss -s
Total: 198 (kernel 750)
TCP:   23 (estab 4, closed 5, orphaned 0, synrecv 0, timewait 4/0), ports 0

Transport Total     IP        IPv6
*         750       -         -        
RAW       0         0         0        
UDP       11        6         5        
TCP       18        13        5        
INET      29        19        10       
FRAG      0         0         0   

http://oper777.blogspot.de/2012/06/blog-post_27.html http://oper777.blogspot.de/2014/10/blog-post.html

Сверим часы

via http://www.shkodenko.com/linux-check-system-php-mysql-date-time/

date ; php -r "echo date('r').PHP_EOL;" ; mysql -e "SELECT NOW();"

./find_fix_permissions.sh

#!/bin/bash
 
CORRECT_PERMISSIONS=644
SEARCH_FOLDER="./images/"
 
if [ "$(find $SEARCH_FOLDER -type f ! -perm $CORRECT_PERMISSIONS -print)" ]; then
    find $SEARCH_FOLDER -type f ! -perm $CORRECT_PERMISSIONS -print0 |xargs -0 chmod -fv $CORRECT_PERMISSIONS
fi

ls Killed

При попытке посчитать количество файлов в каталоге (как потом оказалось >3 млн файлов).

ls -f /var/www/user/data | wc -l

всё завершается ошибкой killed out of memory.

А всего-то надо было добавить один ключ к ls

  • -f — не сортировать содержимое каталога; выдавать файлы в том порядке, в котором они записаны на диск (wikipedia)
  • -f — do not sort, enable -aU, disable -ls –color (man)

Меняем дату создания файла

touch --date="2016-07-13" /home/user/file.txt

Прибить сразу все httpd

# ps auxwww | grep -v grep | grep "httpd"
#!/bin/bash
 
OLD_HTTPD_PIDS="$(ps auxwww |grep "httpd" |grep -v "grep" | awk '{print $2}')"
 
for FPID in ${OLD_HTTPD_PIDS}
do
echo "Killing httpd processe pid: ${FPID}"
kill -s 9 ${FPID}
done

Вывести файл без комментариев и пустых строк

# cat /etc/my.cnf |sed '/^$/d' |grep -v "#" |more

Система

Сортировка по CPU/RAM

via

Наибольшее использование RAM

# ps -eo pmem,pcpu,pid,args | tail -n +2 | sort -rnk 1 | head

Наибольшее использование CPU

# ps -eo pmem,pcpu,pid,args | tail -n +2 | sort -rnk 2 | head

Топ 10 процессов CPU/RAM

# ps auxxx --sort=-rss  | head -11
# ps auxxx --sort=-%cpu | head -11

RSS - реальное количество занятой физической памяти.
VSZ - общее количество виртуальной памяти, отведенной данному процессу.

В терминах команды top, VSZ называется SIZE, а RSS называется RES.
В терминах команды htop, VSZ называется SHR, а RSS называется RES.

Полезный алиас для создания бэкапа конфига

via http://www.shkodenko.com/useful-alias-to-backup-and-edit-configuration-file-automatically/

Добавить в .bashrc

conf() { [ "$1" != "" ] && cp -fvp "$1" "$1"-`date +%Y-%m-%d-%H-%M`.bak; vim "$1"; }

To apply newly created alias without restarting run:

Команда

# conf /etc/httpd/conf/httpd.conf

Создаст копию файла /etc/httpd/conf/httpd.conf следующего вида: /etc/httpd/conf/httpd.conf-YYYY-MM-DD.bak

Посмотреть список изменений:

# diff -Nau /etc/httpd/conf/httpd.conf-YYYY-MM-DD-HH-MM.bak /etc/httpd/conf/httpd.conf

Как проверить работу почты из консоли

echo 'Текст письма' | mail -s 'Тема письма' bob@foobar.com
# php -r "mail('alice@foobar.com', 'Test PHPmail', 'Testing MTA');"

public key is not available: NO_PUBKEY

W: GPG error: Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY <KEY>
Как исправить:
# gpg --keyserver subkeys.pgp.net --recv <KEY> 
# gpg --export --armor <KEY> | sudo apt-key add -

Также может помочь такая строка:# wget example.com/path/keyname.gpg.key -O - | apt-key add -

Как узнать дату последней перезагрузки

# last reboot | head -1
reboot   system boot  2.6.32-504.23.4. Mon Jun 22 15:13 - 12:22 (175+21:09) 

via http://www.cyberciti.biz/tips/linux-last-reboot-time-and-date-find-out.html

Сеть

REMOTE HOST IDENTIFICATION HAS CHANGED

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
fc:f9:10:fe:5e:8e:02:3b:5b:4a:65:55:b3:6a:d8:f2.
Please contact your system administrator.
Add correct host key in /Users/macbook/.ssh/known_hosts to get rid of this message.
Offending RSA key in /Users/macbook/.ssh/known_hosts:1
RSA host key for ukserverhd.zapto.org has changed and you have requested strict checking.
Host key verification failed.

[Process completed]
$ ssh-keygen -R foo.bar.com

Узнаем дату и время запуска процессов

# ps -eo pid,lstart,cmd

Файлы, каталоги, ФС

Удалить пустые каталоги

Найти пустые каталоги

find . -type d -empty -print

Удалить пустые каталоги

find . -type d -empty -delete

Удалить все файлы с одинаковым расширением

find . -type f -name '*.txt' -exec rm {} +

Вот так можно удалить все комментарии в dokuwiki

$ cd /path/rtfm.wiki/data/meta/
$ find . -type f -name '*.comments' -exec rm {} +

Быстро создать файл заданного размера

Нет, не dd.

fallocate -l 10G vm_image_10GB.img

Изменить время создания файла

Защита от одновременного запуска нескольких копий скрипта

flock -n /tmp/lock.txt -c "/home/user1/test.sh > test.log"

Удобочитаемый вывод команды mount

mount | column -t

Создать пустой random файл

Вариант с urandom. TODO изучить, как сделать через openssl.

dd if=/dev/urandom of=1GB.bin bs=1G count=1
// или так
dd if=/dev/urandom of=1GB.bin bs=64M count=16

Узнать время модификации файла

Удалить файлы старше 10 дней

$ find ./ -ctime +10 | xargs rm

Как узнать рабочий каталог запущенного процесса?

Для примера возьмем MySQL (Percona)

Смотрим PID

# pidof mysqld
15831

Посмотреть рабочий каталог можно с помощью команды pwdx (report current working directory of a process)

[root@sh ~]# pwdx 15831
15831: /var/lib/mysql

Но можно и так

# ls -l /proc/15831/exe
lrwxrwxrwx 1 root root 0 Jan 26 12:21 /proc/15831/exe -> /usr/sbin/mysqld

lsof

lsof -p $(pidof mysqld)
ls -l /proc/$(pidof -s mysqld)/fd/

Как найти самые большие файлы на диске

How Do I Find The Largest Top 10 Files and Directories On a Linux / UNIX / BSD?

CentOS5-specific Сортировка по размеру

$ du -hx * | awk '{printf "%s %08.2f\t%s\n", index("KMG", substr($1, length($1))), substr($1, 0, length($1)-1), $0}' | sort -r|cut -f2,3
$ du -hsxc * 2>/dev/null | sort -h

du -shx */

du -Pshx /* 2>/dev/null The -s option makes a summerize. h prints Mio, Gio, etc. x = stay in one filesystem (very useful). P = don't follow symlinks (which could cause files to be counted twice for instance).

du -Pshx .* * 2>/dev/null + hidden/system directories

Как узнать время последнего доступа и изменения файла

http://inet6.alphasca.net/как-узнать-время-последнего-доступа-и/

Установка прав (chmod) для файлов и каталогов

find * -type d -print0 | xargs -0 chmod 0755 # for directories
find . -type f -print0 | xargs -0 chmod 0644 # for files

или так

find /your/location -type d -exec chmod 755 {} \; for directories
find /your/location -type f -exec chmod 644 {} \; for files

Установить рекурсивно 644 для всех файлов и 755 для всех каталогов в текущей (pwd) директории

find . -type f -exec chmod 644 {} \;; find . -type d -exec chmod 755 {} \;

Установить 644 только для .php файлов

find . -type f -name '*.php*' -exec chmod 644 {} \; 

Установить 755 только для каталогов принадлежащих пользователю bob

find . -type d -user bob -exec chmod 0755 {} \; 

http://superuser.com/questions/91935/how-to-chmod-all-directories-except-files-recursively

Change UID and GID

In some rare cases - e.g. when changing a disk with home directories between distributions - it might be necessary to change recursively the GID and UID's for the new system: usermod -u <NEWUID> <LOGIN> groupmod -g <NEWGID> <GROUP> find / -user <OLDUID> -exec chown <NEWUID> {} \; find / -group <OLDGID> -exec chgrp <NEWGID> {} \;

Пользователи

Показать пользователей с shell доступом /bin/sh или /bin/bash

via http://www.shkodenko.com/get-list-of-linux-users-with-shell-access/

# cat /etc/passwd |egrep "/bin/.*sh" |cut -f1 -d':' |sort

Показать cron задания всех пользователей

via http://stackoverflow.com/questions/134906/how-do-i-list-all-cron-jobs-for-all-users

for user in $(cut -f1 -d: /etc/passwd); do crontab -u $user -l; done

for user in $(cut -f1 -d: /etc/passwd); do echo $user; crontab -u $user -l; done </code>

Бонус - посмореть crontab пользователя, переключиться на редактор nano, отредактировать crontab

# crontab -u username -l
# export EDITOR=nano
Затем отредактируем задачи cron, которые запускаются под пользователем "userLogin":
# crontab -u username -e

Удалить пользователя из группы

Утилита gpasswd

$ sudo gpasswd -d dx nginx     
Removing user dx from group nginx
$ id dx
uid=1000(dx) gid=1000(dx) groups=1000(dx)

Удалить все secondary группы юзера и оставить primary

$ sudo usermod -G "" user_name
This website uses cookies. By using the website, you agree with storing cookies on your computer. Also you acknowledge that you have read and understand our Privacy Policy. If you do not agree leave the website.More information about cookies

Discussion

Enter your comment. Wiki syntax is allowed:
 
linux/bash/tnt.txt · Последнее изменение: 2020/05/03 04:52 — dx