Предотвращение дубликата entried в ПУТИ (.cshrc)

Существует много гарантий, которые могут быть помещены на месте, чтобы препятствовать тому, чтобы fork-бомба работала.

Самое простое:

ulimit -u 1024

ограничение количества пользовательских процессов к 1 024.

До обхождения системных гарантий существуют, конечно, способы, которыми можно найти выполнения этого, но я не думаю, что любой здесь даст Вам способ сделать это, но в основном Ваша система исчерпывает PIDs и не может больше порождать процессы и в основном стачивается к полному останову, учитывая, что Ваша бомба берет 100% ЦП, пытающегося порождать больше из себя.

4
21.11.2018, 08:55
3 ответа

Если на 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)

3
27.01.2020, 20:58
  • 1
    +1 для, "почему Вы использовали бы csh хотя?": все csh пользователи, читайте: faqs.org/faqs/unix-faq/shell/csh-whynot (или печально известное 'Csh-программирование, которое рассматривают вредным') –  Olivier Dulac 30.05.2013, 19:31
  • 2
    @OlivierDulac Это - аргумент против csh для сценариев, не против csh для интерактивного использования. Реальный аргумент против (t) csh для интерактивного использования - то, что zsh превосходил tcsh в течение 20 лет, и удар превосходил tcsh в течение 10 лет, таким образом, необходимо переключиться на программное обеспечение, сохраняемое в этом веке. –  Gilles 'SO- stop being evil' 31.05.2013, 01:49
  • 3
    Привет Stephane, спасибо за быстрый ответ! Использование csh не находится по выбору в моем случае, решено инструментами, чтобы мы использовали. Можете Вы также предлагать путь, если новые дополнения к $PATH - несколько: разграниченные каталоги?Спасибо! –  astralsmith 31.05.2013, 10:08
  • 4
    @astralsmith, поскольку я сказал, в (t) csh, $path переменная типа массив связывается с разделенной скалярной переменной двоеточия $PATH. Изменение того автоматически обновит другой. –  Stéphane Chazelas 31.05.2013, 10:32
  • 5
    Спасибо Stephane. Это работает, хотя записи повторяются, и перемещенной в переднюю сторону... –  astralsmith 31.05.2013, 10:53

Я полагаю, что следующее может сделать то, что Вы хотите.

if ( $PATH =~ */some/path* ) then
    set PATH = ($PATH:/some/path)
endif

Примечание: Я - больше пользователя удара, поэтому если мне сообщили мне небольшую ошибку
csh, если тест

0
27.01.2020, 20:58
  • 1
    Привет slm, это не работало в моем случае. Я становлюсь "Плохим: модификатор в $ (/)".. –  astralsmith 31.05.2013, 14:58

Я просто добавляю это как дополнение к ответу 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, и т.д.),

0
27.01.2020, 20:58

Теги

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