Вы можете сделать это:
# {smallestfilenum..largestfilenum}
for i in {805754..999999}; do
mv "DBGC180_$i" "DBGC180_$(($i-1))";
done
Попробуйте с небольшим числом (скажем, 805754..805758), чтобы убедиться, что он работает так, как вы ожидаете. Имейте в виду, что если файл с новым именем уже существует, он будет перезаписан.
Я бы предложил указать PID соответствующего процесса с помощью $!
синтаксисом.
Этап 1: запустить процесс, но на этот раз с переменной, которая содержит произвольное значение PID:
sudo ssh blah@blah 80:localhost:80 & arbpid=$!
Этап 2: Если переменная arbpid
сохраняется только при создании туннеля, вы можете использовать ее для целевого убийства процесса в конце вашего скрипта:
kill $arbpid
Другими словами, то, что мы сделали здесь, это пометили ssh-туннель произвольной меткой (которая является переменной и ее значением) и использовали ее для целевого убийства.
Обратите внимание, что между командой и переменной стоит один амперсанд. Как и в случае с одиночными амперсандами после команд Unix, это сделано для того, чтобы команда перед амперсандом выполнялась в другом подпроцессе (фоновом), в то время как вторая команда (создание переменной в данном случае) будет выполняться в текущем процессе (на переднем плане).
Это может помочь вам убить последний процесс туннелирования SSH:
kill $(history | grep ssh | tail -n 2 | head -n 1| cut -d' ' -f 2)
Процесс, обеспечивающий туннель, - это процесс, прослушивающий порт 80, поэтому используйте lsof
или netstat
или ss
, чтобы найти это.
lsof -n -i TCP:80 -sTCP:LISTEN -Fp |sed 's/^p//'
netstat -ntlp | awk '$4 ~ /:80$/ {sub(/\/.*/, "", $7); print $7}'
ss -nlpt 'sport = :80' | awk 'NR>1 {split($6, a, ","); print a[2]}'
Обратите внимание, что если вы используете мультиплексирование соединений, это уничтожит все соединения, предоставленные одним и тем же процессом. Если вы используете мультиплексирование, вы можете указать главному процессу прекратить пересылку с помощью управляющей команды cancel
.
ssh UWU@IP -S … -O cancel -L 80:localhost:80
Если вам известна уникальная строка в командной строке, вы можете использовать pkill
:
pkill -f "80:localhost:80"
Флаг -f
заставляет pkill
выполнять поиск по всему командная строка; без этого флага он будет уничтожать совпадения только по имени процесса, игнорируя аргументы.