В моем ограниченном опыте, когда шпатлевка работает, но Linux, Ubuntu в этом случае, нет, она обычно сохраняется. Проблемы с сетью или сервером повлияют на обе клиентские ОС.
Вы можете использовать приведенную выше опцию keep alive в командной строке, но это довольно утомительно для ввода.
Легче редактировать несколько файлов конфигурации.
Если у вас есть root access, и вы хотите включить его автоматически для всех пользователей, отредактируйте /etc/ssh/ssh_config, добавьте
KeepAlive yes
ServerAliveInterval 120
Если у вас нет корня доступ или включить его для одного пользователя, отредактируйте ~/.ssh/config и добавьте те же две строки.
Я бы попытался:
sudo find / -type d -name "postgis-2.0.0"
The. означает поиск только в текущем каталоге, лучше всего искать все от root, если вы действительно этого не знаете. Кроме того, type -f означает поиск файлов, а не папок. Добавление sudo позволяет выполнять поиск во всех папках / подпапках.
Ваш синтаксис для locate правильный, но вам, возможно, придется сначала запустить
sudo updatedb
. По какой-то причине мне никогда не удастся с locate.
locate использует базу данных файлов и каталогов, сделанных updatedb. Поэтому, если вы загрузили новый файл, есть еще больше шансов, что ваш updatedb не обновил базу данных файлов и каталогов. Вы можете использовать sudo updatedb перед использованием служебной программы locate. updatedb обычно работает один раз в день сам по Linux-системам.
find - один из самых полезных инструментов Linux / Unix.
Попробуйте find . -type d | grep DIRNAME
Это должно упростить поиск файла:
Это даст вам полный путь к файлу
tree -f / | grep postgis-2.0.0
В дереве указано содержимое каталогов в древовидном формате , -f сообщает дереву дать полный путь к файлу. так как мы понятия не имеем о его местоположении или местоположении родителя, удобно искать из корня файловой системы / рекурсивно вниз. Затем мы отправляем выходные данные в grep, чтобы выделить наше слово, postgis-2.0.0
Попробуйте find . -name "*file_name*"
, где вы можете изменить «.» (посмотрите в текущем каталоге) на «/» (посмотрите на всю систему) или «~ /» (посмотрите в Home Directory ). где вы можете изменить «-name» на «-iname», если вы не хотите, чтобы с учетом регистра. где вы можете изменить «имя_файла» (файл, который может начинаться и заканчиваться тем, что он есть), до точного имени файла.Другие ответы хороши, но я считаю, что опускание Permission denied операторов дает мне более четкие ответы (omits stderr s из-за не запуска sudo):
find / -type f -iname "*postgis-2.0.0*" 2>/dev/null
где:
/ можно заменить на каталог, который вы хотите начать поиск с f, можно заменить на d, если вы ищете каталог вместо файла -iname, можно заменить на -name, если вы хотите, чтобы поиск был чувствительным к регистру, * s в поисковом терминале могут быть опущены, если вы не хотите, чтобы подстановочные знаки в поискеАльтернатива:
find / -type f 2>/dev/null | grep "postgis-2.0.0"
Этот способ возвращает результаты, если поисковый термин совпадает в любом месте полного пути к файлу, например [F12]
Хотя команда find - это самый простой способ рекурсивного прохождения дерева каталогов, существуют другие способы, и, в частности, два языка сценариев, которые поставляются с Ubuntu по умолчанию, уже имеют возможность сделать это.
bash имеет очень хороший параметр оболочки globstar, который позволяет рекурсивный обход дерева каталогов. Все, что нам нужно сделать, это проверить, является ли элемент в расширении ./**/* файлом и содержит ли он желаемый текст:
bash-4.3$ for f in ./**/* ;do [ -f "$f" ] && [[ "$f" =~ "postgis-2.0.0" ]] && echo "$f"; done
./testdir/texts/postgis-2.0.0
Perl имеет модуль поиска, который позволяет выполнять рекурсивный обход дерева каталогов и через подпрограмму выполнять на них определенное действие. С помощью небольшого скрипта вы можете перемещаться по дереву каталогов, вставлять файлы, содержащие нужную строку, в массив, а затем печатать так:
#!/usr/bin/env perl
use strict;
use warnings;
use File::Find;
my @wanted_files;
find(
sub{
-f $_ && $_ =~ $ARGV[0]
&& push @wanted_files,$File::Find::name
}, "."
);
foreach(@wanted_files){
print "$_\n"
}
И как это работает:
$ ./find_file.pl "postgis-2.0.0"
./testdir/texts/postgis-2.0.0
Python - это еще один язык сценариев, который очень широко используется в мире Ubuntu. В частности, он имеет модуль os.walk(), который позволяет нам выполнять те же действия, что и выше, - перемещать дерево каталогов и получать список файлов, содержащих нужную строку.
Как однострочный, это можно сделать так :
$ python -c 'import os;print([os.path.join(r,i) for r,s,f in os.walk(".") for i in f if "postgis-2.0.0" in i])'
['./testdir/texts/postgis-2.0.0']
Полный скрипт будет выглядеть так:
#!/usr/bin/env python
import os;
for r,s,f in os.walk("."):
for i in f:
if "postgis-2.0.0" in i:
print(os.path.join(r,i))