Существует много гарантий, которые могут быть помещены на месте, чтобы препятствовать тому, чтобы fork-бомба работала.
Самое простое:
ulimit -u 1024
ограничение количества пользовательских процессов к 1 024.
До обхождения системных гарантий существуют, конечно, способы, которыми можно найти выполнения этого, но я не думаю, что любой здесь даст Вам способ сделать это, но в основном Ваша система исчерпывает PIDs и не может больше порождать процессы и в основном стачивается к полному останову, учитывая, что Ваша бомба берет 100% ЦП, пытающегося порождать больше из себя.
Если на Linux, я предполагаю Ваш csh
tcsh
. Затем необходимо смочь сделать:
set -f path=("/new/entry" $path:q)
В csh
, tcsh
и zsh
, $path
специальная переменная типа массив связывается с $PATH
скалярная переменная среды в этом элементы $path
массив создается путем разделения $PATH
переменная на символе двоеточия. Любая модификация также $path
или $PATH
автоматически отражается в другую переменную.
-f
выше должен сохранить только первую запись. $path:q
элементы $path
, заключенный в кавычки, который предотвращает разделение слова. Таким образом, синтаксис выше предварительно ожидает /new/entry
или перемещения это к передней стороне, если это уже было там.
Почему Вы использовали бы csh
хотя?
Примечание: кавычки выше необходимы. Или более точно, все символы в /new/entry
потребность, которая будет заключена в кавычки так или иначе.
set -f path=('/new/'\e"ntry" $path:q)
в порядке.
set -f path=(/'new/entry' $path:q)
не. Можно всегда делать это на двух этапах хотя:
set path=(/new/entry $path:q)
set -f path=($path:q)
(одна из причин можно хотеть избегать csh
)
Я полагаю, что следующее может сделать то, что Вы хотите.
if ( $PATH =~ */some/path* ) then
set PATH = ($PATH:/some/path)
endif
Примечание: Я - больше пользователя удара, поэтому если мне сообщили мне небольшую ошибку
csh, если тест
Я просто добавляю это как дополнение к ответу stephane: как избавиться от дубликатов в $PATH
Я предположу, что Вы имеете
так:
Не копировать записи:
UNIQUE_LIST=$( echo "$PATH" | tr ':' '\n' | sort | uniq)
# then we place in front those from UNIQUELIST that match an ordered list
# note that that way, those who didn't have "/sbin" still won't have it, but if they did
# it will be at the right place in the list
shouldbefirst="/bin /sbin /usr/bin" # complete or re-order as needed on your system...
for dir in $shouldbefirst
do
if ( echo "$UNIQUE_LIST" | grep "$dir" >/dev/null 2>/dev/null)
then #we have this dir in UNIQUE_LIST
NEWLIST="${NEWLIST}:${dir}"
UNIQUE_LIST="$( echo "$UNIQUE_LIST" | grep -v "^$dir\$")" #we treated that one, take it out of the original list
fi
done
# then put the remaining of UNIQUE_LIST in the order you want (here, alphabetically)
for dir in $UNIQUE_LIST
do
NEWLIST="${NEWLIST}:${dir}"
UNIQUE_LIST="$( echo "$UNIQUE_LIST" | grep -v "^$dir\$")" #we treated that one, take it out of the original list
done
# get rid of possible first ":" (as NEWLIST starts empty)
NEWLIST="$(echo "$NEWLIST" | sed -e 's/^://')"
# and then : (I test by placing "echo" in front, get rid of "echo" if it looks fine)
echo PATH="$NEWLIST"
(я не могу протестировать прямо сейчас),
Примечание: Я добавлю рекомендацию: избавьтесь от в Вашем ПУТИ, поскольку это будет "ударено" до сразу после директоров SHOULDBEFIRST... ("". должен всегда избегаться, и, если используется, всегда в последнем месте только, так, чтобы Вы не могли легко обойти команды от / мусорного ведра,/usr/bin, и т.д.),
$path
переменная типа массив связывается с разделенной скалярной переменной двоеточия$PATH
. Изменение того автоматически обновит другой. – Stéphane Chazelas 31.05.2013, 10:32