Столкнулся со следующей проблемой
при скачивании файлов с сайта(ссылка и имя файла указаны в кириллице) нумеруются файлы в конце, численно:
junior3 d.ru/ texture/Бетон/Бетон/бетон_1.jpg
скачивал через цикл:
for i in {1..90}; do wget http://junior3d.ru/texture/%D0%91%D0%B5%D1%82%D0%BE%D0%BD/%D0%A1%D1%82%D0%B0%D1%80%D1%8B%D0%B9%D0%91%D0%B5%D1%82%D0%BE%D0%BD/%D1%81%D1%82%D0%B0%D1%80%D0%B8%D0%B9-%D0%B1%D0%B5%D1%82%D0%BE%D0%BD_$i.jpg; done
файлы скачались но с битой кодировкой:
г?%80?%8Fзна?%8F-?%88?%82?%83ка?%82?%83?%80ка_94.jpg
для того, чтобы привести данные файлы к нормальному виду, сделаем следующее:
Отсортируем название файлов по номерам и добавим в отдельный файл:
for i in {1..450}; do ls | grep "_$i.jpg$"; done > 5.txt (здесь первый знак $указывает на переменную, второй это регулярка, указывающая на конец)
далее создаём ещё один файл со следующим содержимым:
cat skript
#!/bin/bash
i=0
for file in `cat 5.txt`;
do ((i+=1))
mv ./${file} ./грязная_штукатурка.$i.jpg;
done
и запускаем его в нашей директории, куда были скачаны все файлы:
bash skript
более компактно решение будет выглядеть следующим образом:
скачиваем все файлы в директорию(имя директории задаём таким, какое имя файлов нам нужно)
в моём случае директория следующая:
pwd
/samba/грязная_штукатурка
в данной директории создаём скрипт:
cat 1.sh
#!/bin/bash
imya=`pwd | awk -F '/' '{print $NF}'`
for i in {1..450}; do ls | grep "_$i.jpg$"; done > faili.txt
i=0
for file in `cat faili.txt`;
do ((i+=1))
mv ./${file} ./$imya.$i.jpg;
done
rm -rf faili.txt
здесь awk -F '/' '{print $NF}' указывает на последний столбец
так же напомню, что печать всех столбцов:
$ awk '{print $0}' FILE
Чтобы вручную не копировать каждый скрипт и не запускать его выполним следующие действия:
создадим список директорий в которые нужно произвести копирование и скопируем скрипт в каждую директорию:
find . -type d > dirkart
for i in `cat dirkart`; do cp 1.sh $i; done
далее создадим скрипт, который будет запускать основные скрипты:
cat 2.sh
#!/bin/bash
for k in `cat dirkart`; do
cd $k
/bin/bash 1.sh
cd ../../
done
________________________________________________________________________________________________________________
Задача переименовать все файлы в подпапках с пробелами в названии:
пример:
./material/кирпич_окрашенный/Новый текстовый документ.txt
./material/капли_воды/Новый текстовый документ.txt
запускаем скрипт:
find . -name *.txt | while read full; do name=${full##*/}; mv -- "${full}" "${full%/*}/${name// /_}"; done;
результат:
./material/кирпич_окрашенный/Новый_текстовый_документ.txt
./material/капли_воды/Новый_текстовый_документ.txt
_______________________________________________________________________________________________________
Задача переименовать часть текста внутри всех данных файлов.
Создаём список файлов:
find . -name *.txt > spisok
далее производим замену:
for k in `cat spisok`; do sed -i "s|1.png|\$i.png|" $k; done
for k in `cat spisok`; do sed -i "s|1.jpg|\$i.jpg|" $k; done
результат:
cat ./металл_ковка/Новый_текстовый_документ.txt
http://junior3d.ru/texture/%D0%9C%D0%B5%D1%82%D0%B0%D0%BB%D0%BB/%D0%9A%D0%BE%D0%B2%D0%BA%D0%B0/%D0%BA%D0%BE%D0%B2%D0%BA%D0%B0_$i.png
cat ./кожа_рептилий/Новый_текстовый_документ.txt
http://junior3d.ru/texture/%D0%9A%D0%BE%D0%B6%D0%B0/%D0%9A%D0%BE%D0%B6%D0%B0%D0%A0%D0%B5%D0%BF%D1%82%D0%B8%D0%BB%D0%B8%D0%B9/%D0%BA%D0%BE%D0%B6%D0%B0-%D1%80%D0%B5%D0%BF%D1%82%D0%B8%D0%BB%D0%B8%D0%B9_$i.jpg
создаём список директорий:
find . -type d > direktorii
произведём ещё одну замену
for k in `cat spisok`; do sed -i "s|_\$i.jpg||" $k; done
и запустим скрипт:
#!/bin/bash
for k in `cat direktorii`; do
cd $k
link=`cat Новый_текстовый_документ.txt`
echo $link
for i in {1..500}; do wget "$link"_$i.jpg; done
cd ../
done
-----------------------------------------------------------------------------
необходимо переименовать несколько файлов из такого вида:
payment.2021-03-08.log.gz
payment.2021-03-09.log.gz
в такой
payment.2021-03-08.log.tar.gz
payment.2021-03-09.log.tar.gz
используем команду:
find . -type f -name '*.log.gz' | while read FNAME; do mv -v "$FNAME" "${FNAME//log.gz/log.tar.gz}"; done
_______________________________________
если надо переименовать файлы вот так:
‘./3.j_’ -> ‘./3.js’
‘./1.j_’ -> ‘./1.js’
‘./2.j_’ -> ‘./2.js
используем команду:
find . -type f -name '*.j_' | while read f; do mv -v "$f" "${f%.*}.js"; done
_____________________________________________
найти наибольшее количество файлов(inode) в директориях:
find . -xdev -type f | cut -d "/" -f 2 |sort| uniq -c | sort -nr | head -n 15 (быстрее работает)
или
for i in *; do echo -e "$(find $i | wc -l)\t$i"; done | sort -nr | head -n 15
______________________________________________
посмотреть активные tcp соединения
netstat -panto
udp соответственно:
netstat -panuo
_______________________________________________
разделить файл на несколько (5кб -b 5k) с указанием имени (-d имя.)
split -b 5k dorks.list -d dorks.list.
_______________________________________________
поставить Unrar и Rar на CentOS
wget http://rarlabs.com/rar/rarlinux-3.9.3.tar.gz
tar xzf rarlinux-3.9.3.tar.gz
cd rar
make install
Команда make install выполнит следующие действия согласно содержимому файла makefile:
1 2 3 4 5 |
mkdir -p /usr/local/bin mkdir -p /usr/local/lib cp rar unrar /usr/local/bin cp rarfiles.lst /etc cp default.sfx /usr/local/lib |
________________________________________________
распаковать множество архивов rar с указанием названия директории:
#!/bin/bash
imya=`pwd | awk -F '/' '{print $NF}'`
for i in {1..100}; do ls | grep "$i.rar$"; done > faili.txt
i=0
for file in `cat faili.txt`;
do ((i+=1))
unrar e ./${file} ./$imya.$i/;
done
rm -rf faili.txt
__________________________________________________
переименовать файлы, убрав пробелы в файлах вида:
image (10).jpg
image_(4).jpeg
find . -name '*.jpg' | while read full; do name=${full##*/}; mv -- "${full}" "${full%/*}/${name// /_}"; done;
find . -name '*.jpeg' | while read full; do name=${full##*/}; mv -- "${full}" "${full%/*}/${name// /_}"; done;
Переименовать расширения с jpeg на jpg
for i in *.jpeg; do mv $i `basename $i .jpeg`.jpg; done
переименовываем файлы по выбранному шаблону(file):
j=0
for i in *.jpg; do let j+=1 && mv $i file$j.jpg ; done
__________________________________________________
Ставил proftpd, он не стартовал, ошибок в логах не было, помогло следующее:
/usr/sbin/proftpd
- warning: unable to determine IP address of 'centos6'
- error: no valid servers configured
- Fatal: error processing configuration file '/etc/proftpd.conf'
добавил хостнейм:
[root@centos6 ~]# hostname
centos6
cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 centos6
______________________________________________________
[emerg]: bind() to 0.0.0.0:80 failed (98: Address already in use)
Недавно, при выполнении перезагрузки веб-сервера (у меня был установлен именно nginx), возникли ошибки:
Если вы получаете следующее сообщение об ошибке, когда вы пытаетесь запустить Nginx:
Тогда это означает, что Nginx или другой процесс уже использует порт 80 ну или любой другой.
Для начала, посмотрим кто занял порт:
Вы можете «убить» его с помощью:
А потом попробуйте перезагрузить Nginx снова:
sudo service mysql stop
Go to your data folder. On Debian:cd /var/lib/mysql/$DATABASE_NAME
Try running:myisamchk -r $TABLE_NAME
If that doesn't work, you can try:myisamchk -r -v -f $TABLE_NAME
: mysqli::mysqli() [
mysqli.mysqli
]: (HY000/2002): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) in
/var/www/user/data/www/domen
on line
2-bash-4.1# service mysqld status
mysqld dead but subsys locked-bash-4.1# ls -lah /var/lock/subsys/mysqld
-rw-r--r-- 1 root root 0 May 20 17:16 /var/lock/subsys/mysqld-bash-4.1# cp /var/lock/subsys/mysqld /root/mysqld
-bash-4.1# rm /var/lock/subsys/mysqld
-bash-4.1# /etc/init.d/mysqld stop
Stopping mysqld: [ OK ]
-bash-4.1# /etc/init.d/mysqld start
Starting mysqld: [ OK ]
-bash-4.1# /etc/init.d/mysqld status
mysqld (pid 13147) is running…
_______________________________________________________
бездумное использование innodb[root@server]# sed -i 's/ENGINE=InnoDB/ENGINE=MyISAM/' DUMP.sql
после можно производить импорт.
_______________________________________________________Если при удалении файла, он остался открыт или его держит какой-то сторонний процесс, то удалить его можно следующим образом:
необходима утилита lsof (yum install lsof)
[root@rust1 tmp]# touch 66
[root@rust1 tmp]# tail -f 66 &
[2] 10949
[root@rust1 tmp]# touch 77
[root@rust1 tmp]# tail -f 77 &
[3] 10976удаляем открытый файл:
[root@rust1 tmp]# rm -rf 66
находим все удалённые:
[root@rust1 tmp]# lsof | grep delete
tail 10152 root 3r REG 253,4 1073741824 14 /tmp/55 (deleted)
tail 10949 root 3r REG 253,4 0 15 /tmp/66 (deleted)
завершаем их процесс:
[root@rust1 tmp]# kill -9 10152 10949
[root@rust1 tmp]# lsof | grep delete
[1] Killed tail -f 55
[2]- Killed tail -f 66