То, почему 'переименовывают', ведет себя по-другому каждый раз, когда я использую полный путь вместо этого текущий путь?

Ищите перенаправление портов или инициирование порта или "NAT" или подобный термин в интерфейсе маршрутизатора. Порт передачи 22 (или независимо от того, что Вы переместили его в то, если Вы переместили его) к IP Вашего сервера Ubuntu. Вы захотите установить статический IP для сервера Ubuntu.

После того как Вы имеете SSH и выполнение и можете быть достижимыми на внешней стороне, можно передать примерно любой порт от машины, Вы продолжаете работать к серверу Ubuntu или чему-либо в той же сети с ним.

Знайте, что некоторый ISP имеет тенденцию манипулировать IP-адресами для постоянных домашних пользователей, таким образом, можно хотеть изучить что-то как услуги DynDNS или записать собственный сценарий зондирования, чтобы послать Вам по электронной почте, и т.д. если Ваш домашний IP-адрес изменяется.

1
13.04.2017, 15:22
2 ответа

Используйте -n параметр для выполнения rename в режиме пробного прогона, который очень полезен, когда Вы хотите протестировать свой шаблон:

martin@martin ~ % rename -n s/list/list.disable/g /etc/apt/sources.list.d/*.list | sed 's/renamed as/\n =>/g'
[...]
/etc/apt/sources.list.d/spotify.list 
 => /etc/apt/sources.list.disable.d/spotify.list.disable
/etc/apt/sources.list.d/steam.list 
 => /etc/apt/sources.list.disable.d/steam.list.disable
[...]

Очевидная ошибка здесь состоит в том что шаблон list соответствия sources.list.d, таким образом, Вы пытаетесь переименовать и папку и ее содержавшие файлы.

Используйте этот шаблон вместо этого:

rename -n 's/\.list$/.list.disable/' /etc/apt/sources.list.d/*.list | sed 's/renamed as/\n =>/g'
[...]
/etc/apt/sources.list.d/spotify.list 
 => /etc/apt/sources.list.d/spotify.list.disable
/etc/apt/sources.list.d/steam.list 
 => /etc/apt/sources.list.d/steam.list.disable
[...]

Различия:

  1. Заключение в кавычки . в шаблоне поиска как \. гарантирует, что точка только соответствует реальной точке и не любому символу (это - то, что неупомянутая точка в regex обычно делает).

  2. $ после того, как список означает "конец строки". Это гарантирует, что только ".list" в конце соответствий имени файла и будет заменен, не ".list", который находится где-то в другом месте в пути или имени файла.

  3. Вы не должны заключать точку в кавычки в замещающей строке; ".list.disable" поэтому работает без обратных косых черт, потому что . больше не имеет особое значение там.

  4. Также обратите внимание, что я заключил regex в кавычки в одинарных кавычках, чтобы препятствовать тому, чтобы оболочка изменила его всегда.

8
27.01.2020, 23:12
  • 1
    +1 хорошее использование диагностики -n переключатель –  msw 28.09.2013, 00:06

Проблема использует глобальный переключатель g когда действительно необходимо было привязать шаблон вместо этого. Поскольку Вы записали это:

s/a/b/g

заменяет каждый b везде в строке. Это заставляет Вас пытаться переименовать к путям, для которых не существует никакой каталог. Это также, почему проблема исчезла, когда Вы сделали операцию в рамках каталога, таким образом, было только одно соответствие для замены.

Я думаю, что Вы, возможно, намеревались привязать шаблон

s/\.list$/.list.disable/

который предотвратил бы попытку переместить файл в каталог,/etc/apt/sources.list.disable.d/, который не существует (таким образом, Вы не можете переместить файл в него).

1
27.01.2020, 23:12
  • 1
    я действительно пробовал без g. Тот же результат. –  Braiam 27.09.2013, 23:52
  • 2
    Примечание о g флаг является просто неправильным, извините. Не привязка шаблона является реальной проблемой. –  Martin von Wittich 27.09.2013, 23:55
  • 3
    Флаг g заставил это пытаться переместить файлы в каталоги, которые не существовали. Не основная проблема, верная, но это способствовало. –  msw 28.09.2013, 01:36

Теги

Похожие вопросы