Вопрос или проблема
Вот вывод терминала:
paul@cube:~$ find / libhwinfo_cpu.so
...
/home/paul/hwinfo/build/lib/libhwinfo_cpu.so
...
find: ‘libhwinfo_cpu.so’: Нет такого файла или каталога
paul@cube:~$ sudo find / -name libhwinfo_cpu.so
find: ‘/run/user/1000/doc’: Доступ запрещен
find: ‘/run/user/1000/gvfs’: Доступ запрещен
/home/paul/hwinfo/build/lib/libhwinfo_cpu.so
Почему первый вызов find
утверждает, что libhwinfo_cpu.so
не существует?
В первом вызове вы указываете как /
, так и libhwinfo_cpu.so
в качестве путей для поиска. Последний путь является относительным, поэтому это действительно означает “поиск в ~/libhwinfo_cpu.so
“, которого действительно не существует.
Во втором вызове вы добавляете -name
, таким образом, вы указываете только /
в качестве пути для поиска и -name libhwinfo_cpu.so
как условие для поиска. Поскольку это больше не путь, а только имя для сравнения, ошибки не возникает.
Ответ или решение
Команда find
в Unix-подобных системах используется для поиска файлов и каталогов по заданным критериям. Однако, иногда поведение команды может вызывать вопросы, особенно если вывод не совпадает с ожидаемым результатом. Рассмотрим, почему в первом вызове команды find
отмечается, что файл libhwinfo_cpu.so
не существует, тогда как во втором вызове его нахождение подтверждается.
Первое использование find
Ваша команда:
find / libhwinfo_cpu.so
здесь /
обозначает корневой каталог, а libhwinfo_cpu.so
интерпретируется как относительный путь. Это означает, что команда find
будет искать в директории /
и в директории ~/libhwinfo_cpu.so
. Так как ~/
— это сокращение для домашнего каталога текущего пользователя (в данном случае /home/paul
), фактически команда ищет в следующих путях:
/
/home/paul/libhwinfo_cpu.so
Если файла по пути /home/paul/libhwinfo_cpu.so
не существует, команда выдает сообщение об отсутствии файла:
find: ‘libhwinfo_cpu.so’: No such file or directory
Второе использование find
Во втором вызове используется команда:
sudo find / -name libhwinfo_cpu.so
Здесь добавлен параметр -name
, который изменяет поведение команды. Опция -name
указывает find
искать файл только по имени, начиная с указанного пути. В данном случае, корневой каталог /
становится единственным местом поиска.
В таком контексте команда будет искать файл libhwinfo_cpu.so
по всему файловому дереву начиная с корневого каталога, игнорируя наличие (или отсутствие) других путей с именем файла. Это объясняет, почему ошибки о несуществующих директориях не появляются, если файл найден.
Разбор ОСОшибок
При выполнении второй команды, вы также видите сообщения об ошибках, например:
find: ‘/run/user/1000/doc’: Permission denied
Это связано с тем, что у пользователя нет прав доступа к некоторым каталогам. Использование sudo
позволяет вам выполнять поиск с правами суперпользователя, что укрепляет функциональность команды. Однако, даже с повышенными привилегиями, могут встречаться ограничения на доступ к отдельным файлам или каталогам в зависимости от настроек безопасности.
Заключение
Таким образом, поведение команды find
зависит от того, как вы указываете пути и параметры. В первом случае интерпретация относительного пути привела к ошибке, связанной с неподходящим местоположением, а во втором — использование параметра -name
исключило эту ошибку и позволило успешно найти файл. Это подчеркивает важность понимания синтаксиса команд и правильного их применения для достижения желаемых результатов.