$ файла (ls/usr/bin /* | grep zip) команда дает мне ошибки. Что случилось?

У Вас нет демона SSH, работающего. Если Вы смотрите на вывод от ps ax команда, Вы видите, что только два процесса с 'ssh' в описании ssh-agent (который делает что-то совершенно различное от sshd) и grep ssh процесс, который Вы используете для фильтрации вывода ps.

В зависимости от того, какое установленное распределение, Вы, возможно, должны установить или выполнить ssh сервер, обычно называемый openssh-server или sshd в зависимости от Вашего диспетчера пакетов.

4
25.08.2018, 21:45
4 ответа

Ошибка прибывает, потому что удар пытается расшириться * в Вашем аргументе ls использование сопоставления с образцом шарика. Это будет всегда через такую ошибку, когда шарик не будет соответствовать шаблону. * затем передается ls как реальная звездочка, которая не соответствует файлу ни один так ls будет ошибка!

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

  1. ls /usr/bin достаточно для списка файлов в каталоге bin, Вам не нужна звезда вообще.
  2. Вы никогда не должны анализировать вывод ls вообще это неоднозначно и потенциально опасно.
  3. Вы могли получить тот же эффект без grep путем выполнения ls /usr/bin/*zip*, но ls все еще избыточно, можно просто передать шарик expantion файлу: file /usr/bin/*zip*

Наконец, find обычно лучший инструмент для нахождения файлов. Вы могли сделать то, что Вы после как это:

$ find /usr/bin -iname '*zip*' -exec file {} +
6
27.01.2020, 20:49

Оболочка расширяется * и поворачивает команду в file $(ls /usr/bin/a /usr/bin/b /usr/bin/whatever | grep zip). Вы не должны указывать звездочку в UNIX, если Вы не хотите, чтобы оболочка развернула его для включения всего, прежде чем он передаст его ls.

т.е. Ваша оболочка заменяет * каждым файлом соответствия, прежде чем это выполнит команду, которая не является, как это работает над Windows, если Вы привыкли к этому.

Считайте раздел 3.4.9 здесь.

file $(ls /usr/bin/ | grep zip) 

правильный путь состоит в том, чтобы сделать это (право в том смысле, что Вы не нуждаетесь *, но видите ответ Caleb для других проблем и опций). Но отметьте, это на самом деле работает,

file /usr/bin/a /usr/bin/b /usr/bin/whatever

нет

file /usr/bin/a
file /usr/bin/b
file /usr/bin/whatever

снова, это не делает этого способ, которым делают окна.

1
27.01.2020, 20:49

Попробуйте ls /usr/bin/* | grep zip видеть, к каким аргументам Вы питаетесь file. Я был экранирован результатом немного. В моей системе Ubuntu результат - это:

/usr/bin/funzip
/usr/bin/gpg-zip
/usr/bin/mzip
/usr/bin/preunzip
/usr/bin/prezip
/usr/bin/prezip-bin
/usr/bin/unzip
/usr/bin/unzipsfx
/usr/bin/zip
/usr/bin/zipcloak
/usr/bin/zipgrep
/usr/bin/zipinfo
/usr/bin/zipnote
/usr/bin/zipsplit
funzip
gpg-zip
mzip
preunzip
prezip
prezip-bin
unzip
unzipsfx
zip
zipcloak
zipgrep
zipinfo
zipnote
zipsplit

Используя ls /usr/bin/* | less мы видим, почему мы получаем тот результат: после всех файлов в/usr/bin, ls также перечисляет содержание/usr/bin/X11 каталога, и он перечисляет их без предварительно ожидаемых имен каталогов.

И когда Вы подаете эти имена файлов без имени каталога к file, file не может найти эти файлы, и Вы не получаете "Такой файл или каталог" сообщения об ошибках (как примечание стороны: если Вы получаете сообщения об ошибках, только скажите, что "Я получил ошибки", но отправьте сообщения об ошибках).

Как Caleb, уже отправленный, просто используйте file /usr/bin/*zip*.

1
27.01.2020, 20:49
  • 1
    я приношу извинения о форматировании моего вопроса, это - первый раз, когда я отправляю и понял, что выразил это неопределенно, таким образом, я сделал необходимое редактирование. –  Nassosdim 30.07.2011, 23:31
  • 2
    @Nassosdim: спасибо за то, что сделали вопрос более ясным (и снимок экрана действительно не необходимо). –  elmicha 30.07.2011, 23:44

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

file /path/to/*.zip

Попробуйте более простую команду, чтобы продемонстрировать, как замена процесса работает:

ls $(echo /usr/bin) 
1
27.01.2020, 20:49

Теги

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