Команды конвейера после конвейерного xargs

Ваши папки должны иметь разрешение 755 файлов с помощью chmod. Я успешно заставил его работать после следующих шагов:

После изменения владельца foo /

$ /var/www/html# chown root foo

и подфайлов на root, а также изменения chmod foo / на 755

chmod 755 foo

на имитацию / var / www / html / мои файлы стали доступны.

Не забудьте использовать

ls -l 

в вашем каталоге, чтобы проверить права доступа к файлам. Также проверьте журналы доступа и ошибок в / var / log / nginx / (по крайней мере, это верно для debian, поскольку это то, что я использую)

Если вы не можете найти свой журнал файлов, используйте

find / | grep error.log > results.txt

и откройте results.txt в своем любимом текстовом редакторе, например vi results.txt (если вы находитесь на сервере, и текстовые файлы читать легче, чем терминал ).

Спасибо Ричарду за то, что посоветовал мне проверить мои журналы.

38
16.06.2018, 23:47
2 ответа

GNU Parallel упрощает выполнение таких задач:

find. -type d -name "*log*" | parallel --tag "ls -la {} | tail -2"

Если вы не хотите выполнять полную установку GNU Parallel, вы можете выполнить минимальную установку:http://git.savannah.gnu.org/cgit/parallel.git/tree/README

6
27.01.2020, 19:35

Просто в дополнение к fredtantini и в качестве общего разъяснения (, поскольку документы немного запутаны):

xargs -I {}возьмет символы '{}' из стандартного ввода и заменит их тем, что поступает из конвейера. Это означает, что вы можете заменить {}любой комбинацией символов (, возможно, чтобы лучше соответствовать вашему предпочтительному варианту программирования ). Например:xargs -I % sh -c "echo %". Если вы всегда используете xargs -I {}, вы можете заменить его на xargs -i, так как это сокращение. РЕДАКТИРОВАТЬ:Опция xargs -iустарела, поэтому придерживайтесь xargs -I{}.

sh -cскажет вашему bash/shell читать следующую команду из строки, а не из стандартного ввода. Таким образом, запись sh -c "echo something"эквивалентна echo something.

xargs -I {} sh -c "echo {}"будет считывать ввод, созданный вами с помощью sh -c, то есть echo {}. Поскольку вы сказали заменить {}аргументами, полученными из канала, вот что произойдет.

Вы можете легко проверить это даже без конвейера, просто введите указанную выше команду в терминале. Все, что вы напишете дальше, будет выведено на терминал (Ctrl -D для выхода ).

В команде ls -la {}происходит то же самое. {}заменяется содержимым команды pre -pipe.

7
27.01.2020, 19:35

Теги

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