все просто, была такая же проблема, используйте yum для вывода списка установленных пакетов:
sudo yum list installed gnome-shell*
найти конкретное расширение в установленных пакетах и удалить:
sudo yum remove <your extension>
Выйти и войти в систему
В большинстве систем ядро ограничивает размер аргументов execve()
системным вызовом (аргументы командной строки + переменные окружения ). В Linux ограничение связано с максимальным размером стека, хотя обычно вы получаете не менее 2 МБ общего размера для ограничения размера стека по умолчанию в 8 МБ. Он также ограничивает один аргумент до 128 КБ, см., например. Существует ли максимальное расширение имени файла bash (подстановки ), и если да, то какое? и Повышение ограничения на 128 КБ для переменных среды в Linux
Если PHP запускает sh -c 'command line'
при вызове exec("command line")
, то аргумент -c
может значительно превысить ограничение в 128 КБ. Тот факт, что командная строка впоследствии разбивается оболочкой на отдельные слова, не поможет.
Когда у вас так много аргументов, вы хотите передать их в GNU Parallel через стандартный ввод (stdin )или через файлы.
Я бы сделал что-то вроде (непроверенного):
$f = popen("parallel","w");
fwrite($f,$commands);
close ($f);
Таким образом вы сможете избежать временного файла.
Итак, со всей вашей помощью, вот мое решение :PHP:
function scan_targets() {
$targetsFile= "[absolute path to the file]/targets";
$array_with_targets = fetch_from_db (); //function that gets me all the targets
$outputfile = "[absolute path to the file]/outputFile"; //output from parallel script
$pidfile = "[absolute path to the file]/pidFile"; //PID of the process
$target = "";
foreach ( $array_with_targets as $row => $column ) {
$id.= $column ['id'];
$id.= " ";
}
file_put_contents($targetsFile, $ip) ;
$cmd = "/bin/bash [absolute path to the file]/pass_targets.sh";
exec( sprintf ( "%s >> %s 2>&1 & echo $! >> %s", $cmd, $outputfile, $pidfile ) );
БАШ:
#!/bin/bash
#appending arguments to the command
targets_array=()
IFS=" "
while read -r field || [ -n "$field" ]; do
targets_array+=("$field")
done <[absolute path to the file]/targets
parallel bash [absolute path to the file]/check.sh ::: $targets_array
Вы также можете запустить параллель с опцией -Dall, чтобы получить больше информации о том, что происходит, мне удалось просканировать почти 40 000 хостов за 7 часов. Веб-сервер добавил все цели в файл за считанные секунды, и когда мой exec запускает используемый фоновый процесс, ему не нужно ждать результата (, мы выводим его в файл ).
Сценарий check.sh также обновляет запись базы данных Mariadb для конкретной цели по ходу дела.