Это намного более сложно, чем это должно быть :-)
Запустите туннель:
ssh -f -N -D 9999 -M -S /tmp/ssh_tunnel_%h.sock -o ExitOnForwardFailure=yes $SSH_HOST && \
echo "ssh tunnel started successfully" || \
echo "ssh tunnel failed to start"
Остановите туннель:
ssh -S /tmp/ssh_tunnel_%h.sock -O exit $SSH_HOST
.
Это - все, что необходимо сделать. Если Вы хотите детали, пропустите ниже.
Для Вашего второго вопроса, IP один. Нет, Ваш IP не изменяется. Все, что Вы сделали, должно было создать прокси SOCKS через удаленный хост. Ваша система автоматически не использует этот прокси, если Вы не говорите это.
Объяснение SSH
Args для запуска туннеля:
-f
: Скажите ssh самому фону. Это будет только сам фон, если это запустит успешно (сотрудничает с -o
аргумент ниже).
-o ExitOnForwardFailure=yes
: Это говорит ssh выходить, если он не может настроить прокси SOCKS.
-N
: Не выполняйте команду. Мы просто хотим туннелировать, не сделать что-либо на удаленном хосте.
-D 9999
: Ваш прокси SOCKS.
-M
: Это требуется для-S аргумента работать здесь.
-S /tmp/ssh_tunnel_%h.sock
: Это говорит этому использовать/tmp/ssh_tunnel_HOSTNAME.sock для своего сокета управления. -M
опция говорит этому, что ssh должен настроить этот сокет и не дать команды к другому ssh, уже слушая на сокете. Можно использовать этот сокет для установки дополнительных туннелей после того, как ssh будет уже работать. %h
использует имя хоста удаленного хоста как часть имени файла.
Args для остановки туннеля:
-S /tmp/ssh_tunnel_%h.sock
: Это должно быть очевидно. Однако, так как мы не выпустили-M, который означает, что ssh должен соединиться с сокетом, который это уже там, и скажите его, что сделать вместо того, чтобы делать что-либо само.
-O exit
: Это - часть -S
. Мы говорим ssh, слушающему на сокете выходить.
$SSH_HOST
все еще требуется здесь. Даже если необходимо было указать абсолютный путь сокета без использования %h
в имени файла ssh все еще хотел бы, чтобы был указан удаленный хост. Поэтому я поместил %h
в аргументах. Мог бы также использовать его, если ssh собирается попросить хост, и это сохраняет вещи организованными.
Я использовал бы:
du -a Music/ | grep "\.mp3$" | sort -n | tail -n1
если Music
Ваш каталог
Это должно сделать это (с GNU, находят и вид):
find . -type f -iname '*.mp3' -printf "%b %p\0" | sort -zn | tr \\0 \\n
Если Вы не хотите, чтобы размер файла был распечатан, только имена файлов:
find . -type f -iname '*.mp3' -printf "%b %p\0" | sort -zn | awk -v RS=\\0 '{ gsub("^[0-9]+ ", "") ; print }'
С zsh:
ls -ld -- **/*.mp3(.DOL[1,5])
Перечислит 5 самых больших регулярных файлов (с точки зрения размера файла, не использования диска, которое является не обязательно тем же). С GNU ls
, добавьте -U
так, чтобы они появились в уменьшающемся порядке размера.
Для использования диска, которое должно было бы быть:
zmodload zsh/stat
zdu() zstat -A REPLY +block -- $REPLY
du -- **/*.mp3(.nDO+zdu[1,5])
Конечно, можно адаптировать это к другим метрикам, связанным с файлом, как продолжительность MP3 в секундах:
mp3_duration() REPLY=$(exiftool -p '$Duration#' - < $REPLY)
print -rl -- **/*.mp3(.nDO+mp3_duration[1,5])
Мое начальное предположение было неправильным, был существующий ответ на этот вопрос, детализированный здесь:
find . -type f -print0 | xargs -0 du -s | sort -n | tail -10 | cut -f2 | xargs -I{} du -sh {}
Все еще дал Вам парней точки все же.