ifconfig eth0 down
Если только вы не делаете что-то необычное (например, применяете IP-псевдонимы), вы не должны использовать
ifconfig
(или его преемника,ip(8)
) напрямую. Вы должны сказатьifdown eth0
здесь. Это поможет решить многие проблемы, которые не решаетifconfig
.
traceroute -i eth0 stackoverflow.com
В вашей таблице маршрутов указано, что маршрут по умолчанию проходит через
wlan0
, а не черезeth0
, поэтому вы тестируете не то, что думаете.192.168.1.4 все еще может использоваться в моей локальной сети
Конечно. Если вы посмотрите назад на вывод
ifconfig
, вы увидитеUP
в разделеeth0
.
192.168.1.4 mywp.com
Вы не должны использовать
.com
или другие официальные ДВУ для частных сетей. Для чисто локальных хостов, определенных в/etc/hosts
, вам вообще не нужно их полностью квалифицировать. Это совершенно законно:192.168.1.4 mywp
Имея эту запись
/etc/hosts
, вы можете посетитьhttp://mywp
в браузере. Будьте осторожны: стремление современных браузеров унифицировать поля поиска и местоположения означает, что один только вводmywp
в поле, скорее всего, будет рассматриваться как поисковый запрос, а не как имя хоста. Большинство браузеров пропустят это, если вы включите какой-нибудь знак препинания, так чтоmywp/
скажет браузеру, что вы хотите, чтобы он рассматривалmywp
как имя хоста, а не как поисковый запрос.Если вы чувствуете необходимость в полностью выверенных доменных именах, настройте конфигурацию сети так, чтобы назначить локальное доменное имя для локальной сети, например
literature.private
. ДВУ.private
- это традиционный вариант для доменов только для локальных сетей. (Другая распространенная альтернатива -.local
.) Частьliterature
я просто взял из вашего имени пользователя.Сделав это, та же самая запись
/etc/hosts
все равно будет искаться правильно, если вы перейдете наhttp://mywp.literature.private
в своем веб-браузере.
Думаю, вы захотите создать массив вместо строки:
IFS=$'\n' # split on newline only
set -o noglob # disable the glob part
file_list=($(find. -name '*.*' -type f))
Или с bash 4.4+, без разрыва пути к файлу с символами новой строки:
readarray -td '' file_list < <(find. -name '*.*' -type f -print0)
Тогда раскрытие вашего параметра должно работать, хотя здесь имеет смысл снова использовать переменную массива:
trimmed_file_list=("${file_list[@]%.*}")
В примере кода вы создаете строку, а затем запрашиваете расширение параметра, чтобы удалить все после последнего символа точки в полной строке.
Вы можете сделать все одной командой.
find /path/to -type f -execdir bash -c 'printf "%s\n" "${@%.*}"' bash {} +
В вашем коде нет массивов. Кроме того, он помещает список имен файлов в строку $file_list
. Содержимое строки будет заканчиваться на file3.png
, а ваша замена параметра удаляет .png
из строки, оставляя вас с одной строкой имен файлов, где последнее имя файла не имеет суффикса имени файла.
Помещение нескольких отдельных объектов (путей )в одну строку автоматически лишает скрипт возможности работать должным образом с файлами, имена которых содержат пробелы (или любой другой разделитель, используемый в строке ). Использование массива не поможет, так как вы все равно разделите вывод find
на пробелы.
Чтобы обрезать расширение всех имен обычных файлов в текущем каталоге или ниже:
find. -type f -name "*.*" -exec sh -c '
for pathname do
printf "Would move %s to %s...\n" "$pathname" "${pathname%.*}"
# mv -i "$pathname" "${pathname%.*}"
done' sh {} +
Ищет обычные файлы, имена которых содержат хотя бы одну точку. Пути к этим файлам передаются пакетами в небольшой сценарий оболочки, который зацикливается на них. Сценарий оболочки переименовывает файлы, удаляя последнюю точку в имени файла и все, что следует за ним. Фактическая команда mv
закомментирована для безопасности.
Команда find
действует как генератор путей для внутреннего сценария оболочки, и мы гарантируем правильную обработку путей, содержащих пробелы, новые строки и табуляции. Нет необходимости хранить вывод команд в переменных.
Если у вас есть массив путей, возможно, созданный с помощью
shopt -s globstar nullglob
file_list=( **/*.* ) # get pathnames of files with dots in their names
Тогда вы сможете выводить пути без суффиксов с помощью
printf '%s\n' "${file_list[@]%.*}"
Не знаю, поможет ли это вам. Если вы хотите использовать пути без суффиксов для чего-то, то использование вывода приведенной выше printf
команды было бы неправильным действием (вы бы вернулись если снова не обрабатывать странный путь ). Итак, когда и как вы удаляете суффиксы имени файла, зависит от того, что вы хотите сделать с результатом.
Связанные: