На что должны быть установлены полномочия файла для редактора FTP работать?

С sed вы можете сделать:

sed '24q;1,5d;12,18d' outfile

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

for   n in 5 6 7 6
do    head -n"$n" >&"$((1+n%2))"
done  outfile 2>/dev/null

..., который вызовет head 4 раз, записывая либо в outfile , либо в /dev/null в зависимости от того, является ли значение этой итерации для $ n четным или нечетным числом.

Для более общих случаев, я собрал это вместе из некоторых других вещей, которые у меня уже были:

somehead()( 
### call it like:
### somehead -[repeat] [-][numlines]* outfile
    set -e -- "${1#-}" "$@"                             #-e for arg validation
    r=; cd -- "${TMP:-/tmp}"                            #go to tmp
    dd bs=4096 of="$$$$" <&4 2>&3 &                     #dd tmpfile &bg
    until [ -s "$$$$" ]; do :; done                     #wait while tmpfile empty
    exec <"$$$$" 4<&-;   rm "$$$$"                      #0?${#l}+1:0))s" "$l           #      ? printf  do
";  do    for n do [ "${n#-}" -gt 0 ]      || exit      #args all -[nums>0]
          head "-n$((${n#-}-_n))" >&"$((n>(_n=0)?1:3))" #head -n?$1 >?[+-]
    done; done                                          #done and done
)   4<&0 3>/dev/null                                    #4for head

Это может сделать ваше дело, как:

 seq 100 | somehead -1 -5 6 -7 6

... что отпечатывает...

6
7
8
9
10
11
19
20
21
22
23
24

Он ожидает, что его первым arg будет счетчик повторов с префиксом - , или, в противном случае, просто - . Если счетчик предусмотрен, он будет повторять образец линии, заданный в следующих аргументах, столько раз, сколько указано, и останавливаться, как только это будет сделано.

Для каждого следующего arg он интерпретирует отрицательное целое число, чтобы указать число строк, которое должно быть записано в /dev/null , и положительное целое число, чтобы указать число строк, которое должно быть записано в stdout .

Так в приведенном выше примере он печатает первые строки 5 на /dev/null , следующие 6 на stdout , следующие 7 на /dev/null снова и следующие 6 на stdout . Достигнув последнего из своих аргументов и полностью пройдя цикл через -1 повторный подсчет, он затем выходит. Если бы первый арг был -2 , он бы повторял процесс еще раз, или если бы - столько, сколько он мог.

Для каждого цикла arg цикл обрабатывается один раз. В верхней части каждого цикла первая строка из stdin считывается в переменную оболочки $ l . Это необходимо, поскольку во время работы с головкой /null; делать:; done будет повторяться бесконечно - head указывает в своем возврате, когда он достиг конца файла. Таким образом, проверка по EOF предназначена для чтения и printf запишет $ l плюс новую строку в stdout , только если второй аргумент является положительным целым числом.

Проверка чтения немного усложняет цикл, потому что сразу после вызова другого цикла - для цикла , который итерирует по аргументам 2- $ # , как представлено в $ n для каждой итерации родительского цикла , в то время как цикл. Это означает, что для каждой итерации первый arg должен быть уменьшен на единицу от значения, указанного в командной строке, но все остальные должны сохранять свои исходные значения, и поэтому значение var маркера $ _ n вычитается из каждого, но только когда-либо содержит значение, большее 0 для первого arg.

Это составляет основную петлю функции,но основная часть кода находится в верхней части и предназначена для того, чтобы позволить функции чисто буферизировать даже канал в качестве входного сигнала. Для этого сначала вызывается фоновый dd , чтобы скопировать его в файл tmpfile при выводе на блоках размером 4k за единицу. Затем функция устанавливает цикл удержания, который почти никогда не должен завершаться даже за один полный цикл, чтобы убедиться, что dd выполнил хотя бы одну запись в файл, прежде чем функция заменит свой stdin дескриптором файла, связанным с tmpfile, а затем немедленно отсоединит файл с помощью rm . Это позволяет функции надежно обрабатывать поток, не требуя ловушек или иным образом для очистки - как только функция освободит его на fd, tmpfile перестанет существовать, так как его единственная именованная ссылка файловой системы уже удалена.

-121--43291-

Это обычный метод:

nmap -n -sn 192.0.2.0/24 -oG - | awk '/Up$/{print $2}'

Быстрое выполнение опций и команд:

  • -n отключает обратное разрешение имен, так как требуется только IP-адреса. В локальной локальной сети это, вероятно, также самый медленный шаг, поэтому вы получаете хорошее повышение скорости.
  • -sn означает «Не выполнять сканирование порта». Это то же самое, что и старое устаревшее -sP с мнемоническим «ping scan».
  • -oG - отправляет «grepable» выход в stdout, который направляется в awk .
  • /Up $/ выбирает только строки, оканчивающиеся на «Up», представляющие узлы, находящиеся в сети.
  • {print $2} печатает второе разделенное пробелом поле, которое является IP-адресом.

-121--23260-

Нет ничего плохого в синтаксисе, если оболочка поддерживает массивы. Скорее всего, сценарий начинается с # !/bin/sh и неправильно использует определенные функции оболочки, такие как bash. Если shebang имеет значение # !/bin/sh , измените его на # !/bin/bash и сообщите о проблеме разработчикам CINT .

0
01.02.2015, 00:55
1 ответ

Был бы правильный подход здесь, чтобы изменить «владелец» файлов из того, что я предполагаю, является root для моего пользователя FTP?

Да. Как root , запустить Chown -r yourftppuser: yourftpgroup / путь / к / дерево . Ваши разрешения будут в порядке для FTP в этот момент. Все файлы будут принадлежать пользователю FTP, у которого есть запись для записи¹.

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

Обратите внимание, что все файлы R , которые любой пользователь на сервере с разрешениями, которые вы опубликовали. Если это проблема, вы можете удалить разрешение R из G roup и o : CHMOD -R GO-R / PATH / TO / дерево .

¹ Это предполагает, что ваш сервер FTP устанавливается для использования учетных записей пользователей системы для входа в систему. Они не все ведут себя таким образом, и может быть, что вам нужно использовать свою внутреннюю систему учетной записи или изменять владельца файла к пользователю сервера.

1
28.01.2020, 02:51

Теги

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